claude-code-best/src/services/api/openai/__tests__/modelMapping.test.ts
2026-04-05 03:31:06 +08:00

69 lines
2.5 KiB
TypeScript

import { describe, expect, test, beforeEach, afterEach } from 'bun:test'
import { resolveOpenAIModel } from '../modelMapping.js'
describe('resolveOpenAIModel', () => {
const originalEnv = {
OPENAI_MODEL: process.env.OPENAI_MODEL,
OPENAI_DEFAULT_HAIKU_MODEL: process.env.OPENAI_DEFAULT_HAIKU_MODEL,
OPENAI_DEFAULT_SONNET_MODEL: process.env.OPENAI_DEFAULT_SONNET_MODEL,
OPENAI_DEFAULT_OPUS_MODEL: process.env.OPENAI_DEFAULT_OPUS_MODEL,
ANTHROPIC_DEFAULT_HAIKU_MODEL: process.env.ANTHROPIC_DEFAULT_HAIKU_MODEL,
ANTHROPIC_DEFAULT_SONNET_MODEL: process.env.ANTHROPIC_DEFAULT_SONNET_MODEL,
ANTHROPIC_DEFAULT_OPUS_MODEL: process.env.ANTHROPIC_DEFAULT_OPUS_MODEL,
}
beforeEach(() => {
delete process.env.OPENAI_MODEL
delete process.env.OPENAI_DEFAULT_HAIKU_MODEL
delete process.env.OPENAI_DEFAULT_SONNET_MODEL
delete process.env.OPENAI_DEFAULT_OPUS_MODEL
delete process.env.ANTHROPIC_DEFAULT_HAIKU_MODEL
delete process.env.ANTHROPIC_DEFAULT_SONNET_MODEL
delete process.env.ANTHROPIC_DEFAULT_OPUS_MODEL
})
afterEach(() => {
Object.assign(process.env, originalEnv)
})
test('OPENAI_MODEL env var overrides all', () => {
process.env.OPENAI_MODEL = 'my-custom-model'
expect(resolveOpenAIModel('claude-sonnet-4-6')).toBe('my-custom-model')
})
test('ANTHROPIC_DEFAULT_SONNET_MODEL overrides default map', () => {
process.env.ANTHROPIC_DEFAULT_SONNET_MODEL = 'my-sonnet'
expect(resolveOpenAIModel('claude-sonnet-4-6')).toBe('my-sonnet')
})
test('ANTHROPIC_DEFAULT_HAIKU_MODEL overrides default map', () => {
process.env.ANTHROPIC_DEFAULT_HAIKU_MODEL = 'my-haiku'
expect(resolveOpenAIModel('claude-haiku-4-5-20251001')).toBe('my-haiku')
})
test('ANTHROPIC_DEFAULT_OPUS_MODEL overrides default map', () => {
process.env.ANTHROPIC_DEFAULT_OPUS_MODEL = 'my-opus'
expect(resolveOpenAIModel('claude-opus-4-6')).toBe('my-opus')
})
test('maps known Anthropic model via DEFAULT_MODEL_MAP', () => {
expect(resolveOpenAIModel('claude-sonnet-4-6')).toBe('gpt-4o')
})
test('maps haiku model', () => {
expect(resolveOpenAIModel('claude-haiku-4-5-20251001')).toBe('gpt-4o-mini')
})
test('maps opus model', () => {
expect(resolveOpenAIModel('claude-opus-4-6')).toBe('o3')
})
test('passes through unknown model name', () => {
expect(resolveOpenAIModel('some-random-model')).toBe('some-random-model')
})
test('strips [1m] suffix', () => {
expect(resolveOpenAIModel('claude-sonnet-4-6[1m]')).toBe('gpt-4o')
})
})