/// import { describe, test, expect, spyOn, beforeEach, afterEach } from "bun:test" import * as logger from "../shared/logger" let logSpy: ReturnType let createWebsearchConfig: (typeof import("./websearch"))["createWebsearchConfig"] let originalEnv: Record<"EXA_API_KEY" | "TAVILY_API_KEY", string | undefined> async function importFreshWebsearchModule(): Promise { return import(`./websearch?test=${Date.now()}-${Math.random()}`) } beforeEach(async () => { originalEnv = { EXA_API_KEY: process.env.EXA_API_KEY, TAVILY_API_KEY: process.env.TAVILY_API_KEY, } delete process.env.EXA_API_KEY delete process.env.TAVILY_API_KEY logSpy = spyOn(logger, "log").mockImplementation(() => {}) ;({ createWebsearchConfig } = await importFreshWebsearchModule()) }) afterEach(() => { logSpy.mockRestore() for (const [key, value] of Object.entries(originalEnv)) { if (value === undefined) { delete process.env[key] continue } process.env[key] = value } }) describe("createWebsearchConfig Tavily handling", () => { test("returns undefined when Tavily API key is missing", () => { delete process.env.TAVILY_API_KEY const config = createWebsearchConfig({ provider: "tavily" }) expect(config).toBeUndefined() expect(logSpy).toHaveBeenCalledWith("[websearch] Tavily API key not found, skipping websearch MCP") }) test("returns valid config when Tavily API key is present", () => { process.env.TAVILY_API_KEY = "test-key" const config = createWebsearchConfig({ provider: "tavily" }) expect(config).toBeDefined() expect(config?.type).toBe("remote") expect(config?.url).toBe("https://mcp.tavily.com/mcp/") }) })