33 lines
1.4 KiB
TypeScript
33 lines
1.4 KiB
TypeScript
import assert from "node:assert/strict";
|
|
import { INTERACTIVE_SERVICE_TIMEOUT_MS, serviceJson, roleplayService } from "../src/services/product-service-clients.js";
|
|
|
|
assert.equal(INTERACTIVE_SERVICE_TIMEOUT_MS, 240_000, "interactive service deadline must stay inside the 300s proxy budget");
|
|
|
|
const originalFetch = globalThis.fetch;
|
|
const originalTimeout = AbortSignal.timeout;
|
|
const requests: Request[] = [];
|
|
let capturedTimeout = 0;
|
|
AbortSignal.timeout = ((ms: number) => {
|
|
capturedTimeout = ms;
|
|
return new AbortController().signal;
|
|
}) as typeof AbortSignal.timeout;
|
|
globalThis.fetch = (async (input, init) => {
|
|
const request = new Request(input, init);
|
|
requests.push(request);
|
|
return new Response(JSON.stringify({ ok: true }), { status: 200, headers: { "content-type": "application/json" } });
|
|
}) as typeof fetch;
|
|
try {
|
|
await roleplayService.plan("session-1", "user-1");
|
|
assert.equal(new URL(requests[0]!.url).pathname, "/api/v1/roleplays/sessions/session-1/plan");
|
|
assert.equal(capturedTimeout, INTERACTIVE_SERVICE_TIMEOUT_MS, "interactive plan calls must use the inner deadline");
|
|
|
|
requests.length = 0;
|
|
capturedTimeout = 0;
|
|
await serviceJson("http://service.test", "/slow", { timeoutMs: 17 });
|
|
assert.equal(capturedTimeout, 17);
|
|
} finally {
|
|
AbortSignal.timeout = originalTimeout;
|
|
globalThis.fetch = originalFetch;
|
|
}
|
|
console.log("deadline hierarchy tests passed");
|