mirror of
https://github.com/diegosouzapw/OmniRoute.git
synced 2026-11-01 05:20:18 +00:00
Release v3.8.51 — 2,022 documented changes (235 features, 1,454 fixes, 333 maintenance) from 1,973 cycle commits and 301 external contributors; full changelog in CHANGELOG.md → [3.8.51]. Full ci.yml matrix green on 2f42a9ac (57 checks).
56 lines
2 KiB
TypeScript
56 lines
2 KiB
TypeScript
import { describe, it, afterEach } from "node:test";
|
|
import assert from "node:assert/strict";
|
|
import { defaultOmniRouteEnrichmentFetcher } from "../src/shared/enrich.js";
|
|
|
|
const realFetch = globalThis.fetch;
|
|
afterEach(() => {
|
|
globalThis.fetch = realFetch;
|
|
});
|
|
|
|
describe("enrichment source failures are reported", () => {
|
|
it("names each endpoint a gateway refuses, then throws so the caller keeps last-known", async () => {
|
|
globalThis.fetch = (async () =>
|
|
new Response("forbidden", { status: 403 })) as unknown as typeof globalThis.fetch;
|
|
const seen: Array<[string, string]> = [];
|
|
await assert.rejects(
|
|
defaultOmniRouteEnrichmentFetcher("https://gw.example.com", "k", 1000, (endpoint, reason) =>
|
|
seen.push([endpoint, reason])
|
|
),
|
|
/enrichment (catalog source|sources) failed/
|
|
);
|
|
assert.deepEqual(seen.map(([endpoint]) => endpoint).sort(), [
|
|
"/api/free-tier/summary",
|
|
"/api/pricing",
|
|
"/api/pricing/models",
|
|
]);
|
|
for (const [, reason] of seen) assert.match(reason, /403/);
|
|
});
|
|
|
|
it("reports a transport failure with its cause, then throws", async () => {
|
|
globalThis.fetch = (async () => {
|
|
throw new Error("connect ECONNREFUSED");
|
|
}) as unknown as typeof globalThis.fetch;
|
|
const seen: string[] = [];
|
|
await assert.rejects(
|
|
defaultOmniRouteEnrichmentFetcher("https://gw.example.com", "k", 1000, (_e, reason) =>
|
|
seen.push(reason)
|
|
),
|
|
/enrichment (catalog source|sources) failed/
|
|
);
|
|
assert.equal(seen.length, 3);
|
|
for (const reason of seen) assert.match(reason, /ECONNREFUSED/);
|
|
});
|
|
|
|
it("stays silent when every source answers", async () => {
|
|
globalThis.fetch = (async () =>
|
|
new Response("{}", {
|
|
status: 200,
|
|
headers: { "content-type": "application/json" },
|
|
})) as unknown as typeof globalThis.fetch;
|
|
const seen: string[] = [];
|
|
await defaultOmniRouteEnrichmentFetcher("https://gw.example.com", "k", 1000, (e) =>
|
|
seen.push(e)
|
|
);
|
|
assert.deepEqual(seen, []);
|
|
});
|
|
});
|