test(api): cover ai client helpers

This commit is contained in:
2026-04-01 00:44:16 +02:00
parent ef282e5e00
commit 67f57e2791
@@ -0,0 +1,63 @@
import { DEFAULT_OPENAI_MODEL } from "@capakraken/shared";
import { beforeEach, describe, expect, it, vi } from "vitest";
import { loggedAiCall, sanitizeDiagnosticError } from "../ai-client.js";
import { logger } from "../lib/logger.js";
vi.mock("../lib/logger.js", () => ({
logger: {
error: vi.fn(),
warn: vi.fn(),
info: vi.fn(),
debug: vi.fn(),
},
}));
describe("ai-client diagnostics", () => {
beforeEach(() => {
vi.clearAllMocks();
});
it("redacts URLs and secret-like tokens from diagnostics", () => {
const diagnostic = sanitizeDiagnosticError(
new Error(
"Request failed at https://example.openai.azure.com/path?api-key=topsecret with Bearer sk-super-secret",
),
);
expect(diagnostic).toContain("<redacted-url>");
expect(diagnostic).toContain("<redacted-secret>");
expect(diagnostic).not.toContain("https://example.openai.azure.com");
expect(diagnostic).not.toContain("sk-super-secret");
expect(diagnostic).not.toContain("topsecret");
});
it("logs sanitized diagnostics when upstream AI calls fail", async () => {
const upstreamError = new Error(
"upstream 404 from https://example.openai.azure.com/openai/deployments/foo?api-key=topsecret with Bearer sk-secret",
);
await expect(
loggedAiCall("azure", DEFAULT_OPENAI_MODEL, 123, async () => {
throw upstreamError;
}),
).rejects.toBe(upstreamError);
expect(logger.warn).toHaveBeenCalledWith(
expect.objectContaining({
provider: "azure",
model: DEFAULT_OPENAI_MODEL,
promptLength: 123,
responseTimeMs: expect.any(Number),
errorMessage: expect.any(String),
}),
"External API call failed",
);
const payload = vi.mocked(logger.warn).mock.calls[0]?.[0];
expect(payload?.errorMessage).toContain("<redacted-url>");
expect(payload?.errorMessage).toContain("<redacted-secret>");
expect(payload?.errorMessage).not.toContain("https://example.openai.azure.com");
expect(payload?.errorMessage).not.toContain("sk-secret");
expect(payload?.errorMessage).not.toContain("topsecret");
});
});