070959e133
landing-page-staging / Deploy landing page to staging (push) Has been skipped
landing-page-ci / Validate landing page (push) Failing after 4s
visual-baseline / Capture visual baselines (push) Has been cancelled
bake-plugin-previews / Bake plugin previews (push) Has been cancelled
85 lines
2.9 KiB
TypeScript
85 lines
2.9 KiB
TypeScript
// Regression coverage for #4456 (Case 1): the Codex auth probe must recognize
|
|
// a working custom provider whose API key lives in a provider-specific
|
|
// `env_key` (e.g. AZURE_OPENAI_API_KEY) declared in ~/.codex/config.toml, not
|
|
// just CODEX_API_KEY / OPENAI_API_KEY. `extractCodexProviderEnvKey` resolves
|
|
// the selected provider's `env_key` from the config text.
|
|
|
|
import { describe, expect, it } from 'vitest';
|
|
|
|
import { extractCodexProviderEnvKey } from '../src/codex-config-normalize.js';
|
|
|
|
describe('extractCodexProviderEnvKey', () => {
|
|
it('resolves the selected custom provider env_key', () => {
|
|
const toml = [
|
|
'model_provider = "azure"',
|
|
'',
|
|
'[model_providers.azure]',
|
|
'base_url = "https://example.openai.azure.com/openai/v1"',
|
|
'env_key = "AZURE_OPENAI_API_KEY"',
|
|
].join('\n');
|
|
expect(extractCodexProviderEnvKey(toml)).toBe('AZURE_OPENAI_API_KEY');
|
|
});
|
|
|
|
it('picks the env_key of the SELECTED provider among several', () => {
|
|
const toml = [
|
|
'model_provider = "azure"',
|
|
'[model_providers.openai]',
|
|
'env_key = "OPENAI_API_KEY"',
|
|
'[model_providers.azure]',
|
|
'env_key = "AZURE_OPENAI_API_KEY"',
|
|
].join('\n');
|
|
expect(extractCodexProviderEnvKey(toml)).toBe('AZURE_OPENAI_API_KEY');
|
|
});
|
|
|
|
it('honors single quotes and trailing comments', () => {
|
|
const toml = [
|
|
"model_provider = 'azure' # selected",
|
|
'[model_providers.azure]',
|
|
"env_key = 'AZURE_OPENAI_API_KEY' # the key var",
|
|
].join('\n');
|
|
expect(extractCodexProviderEnvKey(toml)).toBe('AZURE_OPENAI_API_KEY');
|
|
});
|
|
|
|
it('handles a quoted provider table header', () => {
|
|
const toml = [
|
|
'model_provider = "azure"',
|
|
'[model_providers."azure"]',
|
|
'env_key = "AZURE_OPENAI_API_KEY"',
|
|
].join('\n');
|
|
expect(extractCodexProviderEnvKey(toml)).toBe('AZURE_OPENAI_API_KEY');
|
|
});
|
|
|
|
it('returns null when no provider is selected', () => {
|
|
const toml = [
|
|
'[model_providers.azure]',
|
|
'env_key = "AZURE_OPENAI_API_KEY"',
|
|
].join('\n');
|
|
expect(extractCodexProviderEnvKey(toml)).toBeNull();
|
|
});
|
|
|
|
it('returns null when the selected provider declares no env_key', () => {
|
|
const toml = [
|
|
'model_provider = "azure"',
|
|
'[model_providers.azure]',
|
|
'base_url = "https://example.openai.azure.com/openai/v1"',
|
|
].join('\n');
|
|
expect(extractCodexProviderEnvKey(toml)).toBeNull();
|
|
});
|
|
|
|
it('does not leak an env_key from a non-selected provider table', () => {
|
|
const toml = [
|
|
'model_provider = "azure"',
|
|
'[model_providers.openai]',
|
|
'env_key = "OPENAI_API_KEY"',
|
|
'[model_providers.azure]',
|
|
'base_url = "https://example.openai.azure.com/openai/v1"',
|
|
].join('\n');
|
|
expect(extractCodexProviderEnvKey(toml)).toBeNull();
|
|
});
|
|
|
|
it('returns null for empty or non-provider config', () => {
|
|
expect(extractCodexProviderEnvKey('')).toBeNull();
|
|
expect(extractCodexProviderEnvKey('model = "gpt-5"\n')).toBeNull();
|
|
});
|
|
});
|