Files
growqr-backend/scripts/deadline-hierarchy.test.ts

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");