From d25e96637ce952d49c65e4d475414f52d47a0cd5 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Mon, 9 Feb 2026 16:33:32 +0000 Subject: [PATCH] test(agents): make grok api key test hermetic --- src/agents/tools/web-search.test.ts | 36 +++++++++++++++++++++-------- 1 file changed, 26 insertions(+), 10 deletions(-) diff --git a/src/agents/tools/web-search.test.ts b/src/agents/tools/web-search.test.ts index 8b7e0986181..ff421ef2ccc 100644 --- a/src/agents/tools/web-search.test.ts +++ b/src/agents/tools/web-search.test.ts @@ -1,6 +1,30 @@ import { describe, expect, it } from "vitest"; import { __testing } from "./web-search.js"; +function withEnv(env: Record, fn: () => T): T { + const prev: Record = {}; + for (const [key, value] of Object.entries(env)) { + prev[key] = process.env[key]; + if (value === undefined) { + // Make tests hermetic even on machines with real keys set. + delete process.env[key]; + } else { + process.env[key] = value; + } + } + try { + return fn(); + } finally { + for (const [key, value] of Object.entries(prev)) { + if (value === undefined) { + delete process.env[key]; + } else { + process.env[key] = value; + } + } + } +} + const { inferPerplexityBaseUrlFromApiKey, resolvePerplexityBaseUrl, @@ -110,18 +134,10 @@ describe("web_search grok config resolution", () => { }); it("returns undefined when no apiKey is available", () => { - const previous = process.env.XAI_API_KEY; - try { - delete process.env.XAI_API_KEY; + withEnv({ XAI_API_KEY: undefined }, () => { expect(resolveGrokApiKey({})).toBeUndefined(); expect(resolveGrokApiKey(undefined)).toBeUndefined(); - } finally { - if (previous === undefined) { - delete process.env.XAI_API_KEY; - } else { - process.env.XAI_API_KEY = previous; - } - } + }); }); it("uses default model when not specified", () => {