Files
diegosouzapw--omniroute/tests/unit/account-fallback-retry-after-json.test.ts
2026-07-13 13:39:12 +08:00

33 lines
1.6 KiB
TypeScript

import test from "node:test";
import assert from "node:assert/strict";
const { parseRetryFromErrorText } = await import("../../open-sse/services/accountFallback.ts");
test("parseRetryFromErrorText reads nested ISO retryAfter from a 429 JSON body", () => {
const futureIso = new Date(Date.now() + 120_000).toISOString();
const waitMs = parseRetryFromErrorText(JSON.stringify({ error: { retryAfter: futureIso } }));
assert.ok(waitMs !== null, "expected a parsed wait time, got null");
assert.ok(Math.abs((waitMs as number) - 120_000) <= 2_000, `expected ~120000ms, got ${waitMs}`);
});
test("parseRetryFromErrorText reads top-level retryAfter when nested field is absent", () => {
const futureIso = new Date(Date.now() + 60_000).toISOString();
const waitMs = parseRetryFromErrorText(JSON.stringify({ retryAfter: futureIso }));
assert.ok(waitMs !== null, "expected a parsed wait time, got null");
assert.ok(Math.abs((waitMs as number) - 60_000) <= 2_000, `expected ~60000ms, got ${waitMs}`);
});
test("parseRetryFromErrorText reads millisecond retry hints from 429 JSON bodies", () => {
assert.equal(parseRetryFromErrorText(JSON.stringify({ retry_after_ms: 45_000 })), 45_000);
assert.equal(
parseRetryFromErrorText(JSON.stringify({ error: { retry_after_ms: 12_000 } })),
12_000
);
assert.equal(parseRetryFromErrorText(JSON.stringify({ retryAfterMs: 8_000 })), 8_000);
});
test("parseRetryFromErrorText ignores past ISO retryAfter values in JSON bodies", () => {
const pastIso = new Date(Date.now() - 60_000).toISOString();
assert.equal(parseRetryFromErrorText(JSON.stringify({ error: { retryAfter: pastIso } })), null);
});