From 14e6b21b50057853ecb327d4c387062507bc709f Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sun, 18 Jan 2026 01:56:29 +0000 Subject: [PATCH] test: cover perplexity baseUrl precedence --- .../tools/web-tools.enabled-defaults.test.ts | 86 ++++++++++++++++++- 1 file changed, 85 insertions(+), 1 deletion(-) diff --git a/src/agents/tools/web-tools.enabled-defaults.test.ts b/src/agents/tools/web-tools.enabled-defaults.test.ts index a1e72a9e5..6dc669e6e 100644 --- a/src/agents/tools/web-tools.enabled-defaults.test.ts +++ b/src/agents/tools/web-tools.enabled-defaults.test.ts @@ -137,7 +137,91 @@ describe("web_search perplexity baseUrl defaults", () => { config: { tools: { web: { search: { provider: "perplexity" } } } }, sandboxed: true, }); - await tool?.execute?.(1, { query: "test" }); + await tool?.execute?.(1, { query: "test-openrouter-env" }); + + expect(mockFetch).toHaveBeenCalled(); + expect(mockFetch.mock.calls[0]?.[0]).toBe("https://openrouter.ai/api/v1/chat/completions"); + }); + + it("prefers PERPLEXITY_API_KEY when both env keys are set", async () => { + vi.stubEnv("PERPLEXITY_API_KEY", "pplx-test"); + vi.stubEnv("OPENROUTER_API_KEY", "sk-or-test"); + const mockFetch = vi.fn(() => + Promise.resolve({ + ok: true, + json: () => + Promise.resolve({ choices: [{ message: { content: "ok" } }], citations: [] }), + } as Response), + ); + // @ts-expect-error mock fetch + global.fetch = mockFetch; + + const tool = createWebSearchTool({ + config: { tools: { web: { search: { provider: "perplexity" } } } }, + sandboxed: true, + }); + await tool?.execute?.(1, { query: "test-both-env" }); + + expect(mockFetch).toHaveBeenCalled(); + expect(mockFetch.mock.calls[0]?.[0]).toBe("https://api.perplexity.ai/chat/completions"); + }); + + it("uses configured baseUrl even when PERPLEXITY_API_KEY is set", async () => { + vi.stubEnv("PERPLEXITY_API_KEY", "pplx-test"); + const mockFetch = vi.fn(() => + Promise.resolve({ + ok: true, + json: () => + Promise.resolve({ choices: [{ message: { content: "ok" } }], citations: [] }), + } as Response), + ); + // @ts-expect-error mock fetch + global.fetch = mockFetch; + + const tool = createWebSearchTool({ + config: { + tools: { + web: { + search: { + provider: "perplexity", + perplexity: { baseUrl: "https://example.com/pplx" }, + }, + }, + }, + }, + sandboxed: true, + }); + await tool?.execute?.(1, { query: "test-config-baseurl" }); + + expect(mockFetch).toHaveBeenCalled(); + expect(mockFetch.mock.calls[0]?.[0]).toBe("https://example.com/pplx/chat/completions"); + }); + + it("defaults to OpenRouter when apiKey is configured without baseUrl", async () => { + const mockFetch = vi.fn(() => + Promise.resolve({ + ok: true, + json: () => + Promise.resolve({ choices: [{ message: { content: "ok" } }], citations: [] }), + } as Response), + ); + // @ts-expect-error mock fetch + global.fetch = mockFetch; + + const tool = createWebSearchTool({ + config: { + tools: { + web: { + search: { + provider: "perplexity", + perplexity: { apiKey: "pplx-config" }, + }, + }, + }, + }, + sandboxed: true, + }); + await tool?.execute?.(1, { query: "test-config-apikey" }); expect(mockFetch).toHaveBeenCalled(); expect(mockFetch.mock.calls[0]?.[0]).toBe("https://openrouter.ai/api/v1/chat/completions");