diff --git a/src/server/__tests__/e2e/business-flow.test.ts b/src/server/__tests__/e2e/business-flow.test.ts index 636ac073..b26b6ffa 100644 --- a/src/server/__tests__/e2e/business-flow.test.ts +++ b/src/server/__tests__/e2e/business-flow.test.ts @@ -20,7 +20,25 @@ const originalCliPath = process.env.CLAUDE_CLI_PATH const originalDisableTerminalShellEnv = process.env.CC_HAHA_DISABLE_TERMINAL_SHELL_ENV const mockSdkCliPath = fileURLToPath(new URL('../fixtures/mock-sdk-cli.ts', import.meta.url)) +// The models API derives its model list from these env vars (see +// src/server/api/models.ts getEnvConfiguredAnthropicModels). A developer who +// exports them for a custom provider would otherwise leak them into the +// no-provider fixture and break the default-model assertions. Isolate them. +const MODEL_ENV_KEYS = [ + 'ANTHROPIC_MODEL', + 'ANTHROPIC_DEFAULT_HAIKU_MODEL', + 'ANTHROPIC_DEFAULT_SONNET_MODEL', + 'ANTHROPIC_DEFAULT_OPUS_MODEL', +] as const +const originalModelEnv = Object.fromEntries( + MODEL_ENV_KEYS.map((key) => [key, process.env[key]]), +) as Record<(typeof MODEL_ENV_KEYS)[number], string | undefined> + function restoreEnv() { + for (const key of MODEL_ENV_KEYS) { + if (originalModelEnv[key] !== undefined) process.env[key] = originalModelEnv[key] + else delete process.env[key] + } if (originalConfigDir !== undefined) { process.env.CLAUDE_CONFIG_DIR = originalConfigDir } else { @@ -47,6 +65,7 @@ async function startTestServer() { process.env.CLAUDE_CONFIG_DIR = tmpDir process.env.CLAUDE_CLI_PATH = mockSdkCliPath process.env.CC_HAHA_DISABLE_TERMINAL_SHELL_ENV = '1' + for (const key of MODEL_ENV_KEYS) delete process.env[key] await fs.mkdir(path.join(tmpDir, 'projects'), { recursive: true }) await fs.mkdir(path.join(tmpDir, 'agents'), { recursive: true }) diff --git a/src/server/__tests__/e2e/full-flow.test.ts b/src/server/__tests__/e2e/full-flow.test.ts index 89e4200e..7d48965a 100644 --- a/src/server/__tests__/e2e/full-flow.test.ts +++ b/src/server/__tests__/e2e/full-flow.test.ts @@ -18,7 +18,25 @@ const originalCliPath = process.env.CLAUDE_CLI_PATH const originalDisableTerminalShellEnv = process.env.CC_HAHA_DISABLE_TERMINAL_SHELL_ENV const mockSdkCliPath = fileURLToPath(new URL('../fixtures/mock-sdk-cli.ts', import.meta.url)) +// The models API derives its model list from these env vars (see +// src/server/api/models.ts getEnvConfiguredAnthropicModels). A developer who +// exports them for a custom provider would otherwise leak them into the +// no-provider fixture and break the default-model assertions. Isolate them. +const MODEL_ENV_KEYS = [ + 'ANTHROPIC_MODEL', + 'ANTHROPIC_DEFAULT_HAIKU_MODEL', + 'ANTHROPIC_DEFAULT_SONNET_MODEL', + 'ANTHROPIC_DEFAULT_OPUS_MODEL', +] as const +const originalModelEnv = Object.fromEntries( + MODEL_ENV_KEYS.map((key) => [key, process.env[key]]), +) as Record<(typeof MODEL_ENV_KEYS)[number], string | undefined> + function restoreEnv() { + for (const key of MODEL_ENV_KEYS) { + if (originalModelEnv[key] !== undefined) process.env[key] = originalModelEnv[key] + else delete process.env[key] + } if (originalConfigDir !== undefined) { process.env.CLAUDE_CONFIG_DIR = originalConfigDir } else { @@ -46,6 +64,7 @@ async function startTestServer() { process.env.CLAUDE_CONFIG_DIR = tmpDir process.env.CLAUDE_CLI_PATH = mockSdkCliPath process.env.CC_HAHA_DISABLE_TERMINAL_SHELL_ENV = '1' + for (const key of MODEL_ENV_KEYS) delete process.env[key] // Create required directories await fs.mkdir(path.join(tmpDir, 'projects'), { recursive: true })