cc-haha/desktop/src/lib/__tests__/providerSettingsJson.test.ts
程序员阿江(Relakkes) 67a64c7f80 Scrub ChatGPT OAuth env from provider settings JSON
The desktop provider settings editor has its own JSON scrubber for provider-managed env. It now removes the ChatGPT Official OAuth marker and token-file path along with the Anthropic provider env keys, so editing another provider cannot keep stale OpenAI OAuth runtime markers in previewed settings JSON.

Constraint: Desktop JSON preview cleanup is separate from server managed-env filtering.

Rejected: Rely only on server activation cleanup | the settings editor can preview and persist user-edited JSON before the server rebuilds provider env.

Confidence: high

Scope-risk: narrow

Tested: cd desktop && bun test src/lib/__tests__/providerSettingsJson.test.ts

Tested: bun test src/server/__tests__/providers.test.ts --test-name-pattern "ChatGPT Official|getProviderForProxy"

Tested: bun test src/server/__tests__/conversation-service.test.ts --test-name-pattern "ChatGPT Official|session-scoped provider"

Tested: git diff --check
2026-05-18 23:32:22 +08:00

66 lines
2.1 KiB
TypeScript

import { describe, expect, it } from 'vitest'
import {
API_KEY_JSON_PLACEHOLDER,
maskSettingsJsonSecrets,
restoreSettingsJsonSecrets,
stripProviderSettingsJsonEnv,
} from '../providerSettingsJson'
describe('provider settings JSON helpers', () => {
it('masks both Anthropic API key env vars even when the values differ', () => {
const raw = JSON.stringify({
env: {
ANTHROPIC_API_KEY: 'stale-api-key',
ANTHROPIC_AUTH_TOKEN: 'current-auth-token',
OTHER_VALUE: 'visible',
},
})
const masked = JSON.parse(maskSettingsJsonSecrets(raw)) as { env: Record<string, string> }
expect(masked.env.ANTHROPIC_API_KEY).toBe(API_KEY_JSON_PLACEHOLDER)
expect(masked.env.ANTHROPIC_AUTH_TOKEN).toBe(API_KEY_JSON_PLACEHOLDER)
expect(masked.env.OTHER_VALUE).toBe('visible')
})
it('restores masked Anthropic API key env vars from their previous field values', () => {
const previousRaw = JSON.stringify({
env: {
ANTHROPIC_API_KEY: 'previous-api-key',
ANTHROPIC_AUTH_TOKEN: 'previous-auth-token',
},
})
const edited = {
env: {
ANTHROPIC_API_KEY: API_KEY_JSON_PLACEHOLDER,
ANTHROPIC_AUTH_TOKEN: API_KEY_JSON_PLACEHOLDER,
},
}
const restored = restoreSettingsJsonSecrets(edited, previousRaw, 'fallback-key')
expect(restored.env.ANTHROPIC_API_KEY).toBe('previous-api-key')
expect(restored.env.ANTHROPIC_AUTH_TOKEN).toBe('previous-auth-token')
})
it('strips provider-managed env vars from existing settings before preview merge', () => {
const cleaned = stripProviderSettingsJsonEnv(
{
ANTHROPIC_API_KEY: 'old-api-key',
ANTHROPIC_AUTH_TOKEN: 'old-auth-token',
ANTHROPIC_BASE_URL: 'https://old.example.com',
ANTHROPIC_MODEL: 'old-model',
CLAUDE_CODE_MODEL_CONTEXT_WINDOWS: '{"old":100000}',
CC_HAHA_OPENAI_OAUTH_PROVIDER: '1',
OPENAI_CODEX_OAUTH_FILE: '/tmp/openai-oauth.json',
CC_HAHA_SEND_DISABLED_THINKING: '1',
USER_DEFINED: 'keep-me',
},
['CC_HAHA_SEND_DISABLED_THINKING'],
)
expect(cleaned).toEqual({ USER_DEFINED: 'keep-me' })
})
})