test: dedupe brave fetch mock calls

This commit is contained in:
Peter Steinberger
2026-05-12 12:45:25 +01:00
parent 4223dd2886
commit 632c1bc0ba

View File

@@ -72,6 +72,22 @@ function readHeader(init: unknown, name: string): string | null {
return new Headers(headers).get(name);
}
function fetchCall(mockFetch: { mock: { calls: Array<Array<unknown>> } }, index = 0) {
const call = mockFetch.mock.calls.at(index);
if (!call) {
throw new Error(`Expected fetch call ${index + 1}`);
}
return call;
}
function fetchRequestUrl(mockFetch: { mock: { calls: Array<Array<unknown>> } }, index = 0) {
return new URL(String(fetchCall(mockFetch, index)[0]));
}
function fetchRequestInit(mockFetch: { mock: { calls: Array<Array<unknown>> } }, index = 0) {
return fetchCall(mockFetch, index)[1];
}
describe("brave web search provider", () => {
const priorFetch = global.fetch;
@@ -220,7 +236,7 @@ describe("brave web search provider", () => {
await tool.execute({ query: "latest ai news" });
const requestUrl = new URL(String(mockFetch.mock.calls[0]?.[0]));
const requestUrl = fetchRequestUrl(mockFetch);
expect(requestUrl.origin).toBe("https://api.search.brave.com");
expect(requestUrl.pathname).toBe("/proxy/res/v1/web/search");
});
@@ -245,7 +261,7 @@ describe("brave web search provider", () => {
await tool.execute({ query: "latest ai news" });
const requestUrl = new URL(String(mockFetch.mock.calls[0]?.[0]));
const requestUrl = fetchRequestUrl(mockFetch);
expect(requestUrl.pathname).toBe("/proxy/res/v1/llm/context");
});
@@ -288,12 +304,8 @@ describe("brave web search provider", () => {
await secondTool.execute({ query: "base url cache identity" });
expect(mockFetch).toHaveBeenCalledTimes(2);
expect(new URL(String(mockFetch.mock.calls[0]?.[0])).pathname).toBe(
"/proxy-one/res/v1/web/search",
);
expect(new URL(String(mockFetch.mock.calls[1]?.[0])).pathname).toBe(
"/proxy-two/res/v1/web/search",
);
expect(fetchRequestUrl(mockFetch).pathname).toBe("/proxy-one/res/v1/web/search");
expect(fetchRequestUrl(mockFetch, 1).pathname).toBe("/proxy-two/res/v1/web/search");
});
it("rejects invalid Brave mode values in the plugin config schema", () => {
@@ -393,7 +405,7 @@ describe("brave web search provider", () => {
await tool.execute({ query: "latest ai news", freshness: "week" });
const requestUrl = new URL(String(mockFetch.mock.calls[0]?.[0]));
const requestUrl = fetchRequestUrl(mockFetch);
expect(requestUrl.pathname).toBe("/res/v1/llm/context");
expect(requestUrl.searchParams.get("freshness")).toBe("pw");
});
@@ -422,10 +434,10 @@ describe("brave web search provider", () => {
await tool.execute({ query: "latest ai news" });
const requestUrl = new URL(String(mockFetch.mock.calls[0]?.[0]));
const requestUrl = fetchRequestUrl(mockFetch);
expect(requestUrl.searchParams.get("apikey")).toBeNull();
expect(requestUrl.searchParams.get("key")).toBeNull();
expect(readHeader(mockFetch.mock.calls[0]?.[1], "X-Subscription-Token")).toBe("brave-test-key");
expect(readHeader(fetchRequestInit(mockFetch), "X-Subscription-Token")).toBe("brave-test-key");
});
it("sends Brave llm-context auth in the X-Subscription-Token header", async () => {
@@ -445,10 +457,10 @@ describe("brave web search provider", () => {
await tool.execute({ query: "latest ai news" });
const requestUrl = new URL(String(mockFetch.mock.calls[0]?.[0]));
const requestUrl = fetchRequestUrl(mockFetch);
expect(requestUrl.searchParams.get("apikey")).toBeNull();
expect(requestUrl.searchParams.get("key")).toBeNull();
expect(readHeader(mockFetch.mock.calls[0]?.[1], "X-Subscription-Token")).toBe("brave-test-key");
expect(readHeader(fetchRequestInit(mockFetch), "X-Subscription-Token")).toBe("brave-test-key");
});
it("passes bounded date ranges to Brave llm-context endpoint", async () => {
@@ -472,7 +484,7 @@ describe("brave web search provider", () => {
date_before: "2025-01-31",
});
const requestUrl = new URL(String(mockFetch.mock.calls[0]?.[0]));
const requestUrl = fetchRequestUrl(mockFetch);
expect(requestUrl.pathname).toBe("/res/v1/llm/context");
expect(requestUrl.searchParams.get("freshness")).toBe("2025-01-01to2025-01-31");
});
@@ -495,7 +507,7 @@ describe("brave web search provider", () => {
await tool.execute({ query: "latest ai news", date_after: "2025-01-01" });
const today = new Date().toISOString().slice(0, 10);
const requestUrl = new URL(String(mockFetch.mock.calls[0]?.[0]));
const requestUrl = fetchRequestUrl(mockFetch);
expect(requestUrl.pathname).toBe("/res/v1/llm/context");
expect(requestUrl.searchParams.get("freshness")).toBe(`2025-01-01to${today}`);
});
@@ -584,7 +596,7 @@ describe("brave web search provider", () => {
country: "VN",
});
const requestUrl = new URL(String(mockFetch.mock.calls[0]?.[0]));
const requestUrl = fetchRequestUrl(mockFetch);
expect(requestUrl.searchParams.get("country")).toBe("ALL");
});