Files
OmniRoute/tests/unit/search-provider-named-errors.test.ts
Ravi Tharuma 9d2240eab7 fix(search): name /v1/search 502 provider and cause (#10756)
Merged — validated together with a batch of related RaviTharuma PRs in one combined worktree (typecheck:core clean, complexity/file-size/changelog gates green, focused tests passing). Thanks for the contribution!
2026-08-20 11:48:18 -03:00

74 lines
2.3 KiB
TypeScript

import test from "node:test";
import assert from "node:assert/strict";
import { mkdtempSync } from "node:fs";
import { tmpdir } from "node:os";
import { join } from "node:path";
process.env.DATA_DIR = mkdtempSync(join(tmpdir(), "omniroute-search-named-errors-"));
const { handleSearch } = await import("../../open-sse/handlers/search.ts");
const { formatSearchProviderFailure } = await import(
"../../open-sse/handlers/search/providerFailure.ts"
);
test("formatSearchProviderFailure names the provider and sanitized Node cause", () => {
const err = new TypeError("fetch failed");
(err as Error & { cause?: { code: string; address: string } }).cause = {
code: "ENETUNREACH",
address: "203.0.113.10",
};
const result = formatSearchProviderFailure("serper-search", err, false);
assert.equal(result.success, false);
assert.equal(result.status, 502);
assert.equal(
result.error,
"Search provider serper-search error: fetch failed (cause: ENETUNREACH)"
);
assert.equal(result.error.includes("203.0.113"), false);
});
test("formatSearchProviderFailure omits non-Node cause codes", () => {
const err = new TypeError("fetch failed");
(err as Error & { cause?: { code: string } }).cause = { code: "not-a-node-code" };
const result = formatSearchProviderFailure("brave-search", err, false);
assert.equal(result.status, 502);
assert.equal(result.error, "Search provider brave-search error: fetch failed");
});
test("handleSearch names the provider and sanitized cause on fetch failed 502", async () => {
const originalFetch = globalThis.fetch;
globalThis.fetch = async () => {
const err = new TypeError("fetch failed");
(err as Error & { cause?: { code: string; address: string } }).cause = {
code: "ENETUNREACH",
address: "203.0.113.10",
};
throw err;
};
try {
const result = await handleSearch({
query: "named provider 502",
provider: "serper-search",
maxResults: 5,
searchType: "web",
credentials: { apiKey: "test-key" },
log: null,
});
assert.equal(result.success, false);
assert.equal(result.status, 502);
assert.equal(
result.error,
"Search provider serper-search error: fetch failed (cause: ENETUNREACH)"
);
assert.equal(String(result.error).includes("203.0.113"), false);
} finally {
globalThis.fetch = originalFetch;
}
});