diff --git a/src/slack/handlers.ts b/src/slack/handlers.ts index cf90a8514f..26a4e30675 100644 --- a/src/slack/handlers.ts +++ b/src/slack/handlers.ts @@ -196,6 +196,13 @@ let cachedBotId: string | null = null; const swarmThreadRootCache = new Map(); const SWARM_THREAD_ROOT_CACHE_MAX = 1000; +/** Reset Slack handler caches between tests that exercise production handlers. */ +export function resetSlackHandlerCachesForTesting(): void { + cachedBotUserId = null; + cachedBotId = null; + swarmThreadRootCache.clear(); +} + /** * Pure check: does the given thread-root message belong to our own swarm bot? * Exported for testing. diff --git a/src/tests/artifact-sdk.test.ts b/src/tests/artifact-sdk.test.ts index a460be242f..8aaae89912 100644 --- a/src/tests/artifact-sdk.test.ts +++ b/src/tests/artifact-sdk.test.ts @@ -9,6 +9,11 @@ import { } from "../artifact-sdk/server"; import { getBasePrompt } from "../prompts/base-prompt"; +function restoreEnvValue(key: string, value: string | undefined): void { + if (value === undefined) delete process.env[key]; + else process.env[key] = value; +} + // ─── Port allocation tests ────────────────────────────────────────────── describe("getAvailablePort", () => { @@ -132,9 +137,9 @@ describe("createArtifactServer", () => { }); afterAll(() => { - process.env.AGENT_ID = originalEnv.AGENT_ID; - process.env.API_KEY = originalEnv.API_KEY; - process.env.MCP_BASE_URL = originalEnv.MCP_BASE_URL; + restoreEnvValue("AGENT_ID", originalEnv.AGENT_ID); + restoreEnvValue("API_KEY", originalEnv.API_KEY); + restoreEnvValue("MCP_BASE_URL", originalEnv.MCP_BASE_URL); }); describe("factory return shape", () => { @@ -596,9 +601,9 @@ describe("artifact CLI command", () => { expect(output).toContain("https://test.lt.example.com"); } finally { console.log = origLog; - process.env.MCP_BASE_URL = origEnv.MCP_BASE_URL; - process.env.API_KEY = origEnv.API_KEY; - process.env.AGENT_ID = origEnv.AGENT_ID; + restoreEnvValue("MCP_BASE_URL", origEnv.MCP_BASE_URL); + restoreEnvValue("API_KEY", origEnv.API_KEY); + restoreEnvValue("AGENT_ID", origEnv.AGENT_ID); mockServer.stop(); } }); @@ -627,9 +632,9 @@ describe("artifact CLI command", () => { expect(output).toContain("No active artifacts"); } finally { console.log = origLog; - process.env.MCP_BASE_URL = origEnv.MCP_BASE_URL; - process.env.API_KEY = origEnv.API_KEY; - process.env.AGENT_ID = origEnv.AGENT_ID; + restoreEnvValue("MCP_BASE_URL", origEnv.MCP_BASE_URL); + restoreEnvValue("API_KEY", origEnv.API_KEY); + restoreEnvValue("AGENT_ID", origEnv.AGENT_ID); mockServer.stop(); } }); @@ -679,9 +684,9 @@ describe("artifact CLI command", () => { expect(output).toContain("No active artifacts"); } finally { console.log = origLog; - process.env.MCP_BASE_URL = origEnv.MCP_BASE_URL; - process.env.API_KEY = origEnv.API_KEY; - process.env.AGENT_ID = origEnv.AGENT_ID; + restoreEnvValue("MCP_BASE_URL", origEnv.MCP_BASE_URL); + restoreEnvValue("API_KEY", origEnv.API_KEY); + restoreEnvValue("AGENT_ID", origEnv.AGENT_ID); mockServer.stop(); } }); @@ -736,9 +741,9 @@ describe("artifact CLI command", () => { expect(output).toContain("stopped"); } finally { console.log = origLog; - process.env.MCP_BASE_URL = origEnv.MCP_BASE_URL; - process.env.API_KEY = origEnv.API_KEY; - process.env.AGENT_ID = origEnv.AGENT_ID; + restoreEnvValue("MCP_BASE_URL", origEnv.MCP_BASE_URL); + restoreEnvValue("API_KEY", origEnv.API_KEY); + restoreEnvValue("AGENT_ID", origEnv.AGENT_ID); mockServer.stop(); } }); diff --git a/src/tests/slack-assistant-comention-production.test.ts b/src/tests/slack-assistant-comention-production.test.ts index 2961c4261e..dad26bf3a9 100644 --- a/src/tests/slack-assistant-comention-production.test.ts +++ b/src/tests/slack-assistant-comention-production.test.ts @@ -30,6 +30,7 @@ process.env.SLACK_RENDER_V2 = "false"; let createAssistantFn: typeof import("../slack/assistant").createAssistant; let registerMessageHandlerFn: typeof import("../slack/handlers").registerMessageHandler; +let resetSlackHandlerCachesForTestingFn: typeof import("../slack/handlers").resetSlackHandlerCachesForTesting; let createTaskWithSiblingAwarenessSpy: any; let getAllAgentsSpy: any; @@ -98,7 +99,11 @@ beforeAll(async () => { installSpyImplementations(); ({ createAssistant: createAssistantFn } = await import("../slack/assistant")); - ({ registerMessageHandler: registerMessageHandlerFn } = await import("../slack/handlers")); + ({ + registerMessageHandler: registerMessageHandlerFn, + resetSlackHandlerCachesForTesting: resetSlackHandlerCachesForTestingFn, + } = await import("../slack/handlers")); + resetSlackHandlerCachesForTestingFn(); }); beforeEach(() => { @@ -120,6 +125,7 @@ afterAll(() => { restoreEnvValue("SLACK_ALLOWED_EMAIL_DOMAINS"); restoreEnvValue("SLACK_ALLOWED_USER_IDS"); mock.restore(); + resetSlackHandlerCachesForTestingFn(); }); // ---------------------------------------------------------------------------