66 lines
2.5 KiB
TypeScript
66 lines
2.5 KiB
TypeScript
import { describe, expect, it } from 'vitest'
|
|
import { mergeProvidersForDisplay } from '@/app/[locale]/profile/components/api-config/hooks'
|
|
import type { Provider } from '@/app/[locale]/profile/components/api-config/types'
|
|
|
|
describe('useProviders provider order merge', () => {
|
|
it('preserves saved providers order and appends missing presets at the end', () => {
|
|
const presetProviders: Provider[] = [
|
|
{ id: 'ark', name: '火山引擎 Ark' },
|
|
{ id: 'google', name: 'Google AI Studio' },
|
|
{ id: 'bailian', name: '阿里云百炼' },
|
|
]
|
|
const savedProviders: Provider[] = [
|
|
{ id: 'google', name: 'Google Legacy Name', apiKey: 'google-key', hidden: true },
|
|
{ id: 'openai-compatible:oa-2', name: 'OpenAI B', baseUrl: 'https://oa-b.test', apiKey: 'oa-key' },
|
|
{ id: 'ark', name: 'Ark Legacy Name', apiKey: 'ark-key' },
|
|
]
|
|
|
|
const merged = mergeProvidersForDisplay(savedProviders, presetProviders)
|
|
expect(merged.map((provider) => provider.id)).toEqual([
|
|
'google',
|
|
'openai-compatible:oa-2',
|
|
'ark',
|
|
'bailian',
|
|
])
|
|
expect(merged[0]?.hidden).toBe(true)
|
|
})
|
|
|
|
it('uses preset localized names for preset providers while keeping apiKey/baseUrl from saved data', () => {
|
|
const presetProviders: Provider[] = [
|
|
{ id: 'google', name: 'Google AI Studio', baseUrl: 'https://google.default' },
|
|
]
|
|
const savedProviders: Provider[] = [
|
|
{ id: 'google', name: 'Google Old Name', baseUrl: 'https://google.custom', apiKey: 'google-key' },
|
|
]
|
|
|
|
const merged = mergeProvidersForDisplay(savedProviders, presetProviders)
|
|
expect(merged).toHaveLength(1)
|
|
expect(merged[0]).toMatchObject({
|
|
id: 'google',
|
|
name: 'Google AI Studio',
|
|
baseUrl: 'https://google.custom',
|
|
apiKey: 'google-key',
|
|
hasApiKey: true,
|
|
})
|
|
})
|
|
|
|
it('uses preset official baseUrl for minimax even when saved payload contains a custom baseUrl', () => {
|
|
const presetProviders: Provider[] = [
|
|
{ id: 'minimax', name: 'MiniMax Hailuo', baseUrl: 'https://api.minimaxi.com/v1' },
|
|
]
|
|
const savedProviders: Provider[] = [
|
|
{ id: 'minimax', name: 'MiniMax Legacy', baseUrl: 'https://custom.minimax.proxy/v1', apiKey: 'mm-key' },
|
|
]
|
|
|
|
const merged = mergeProvidersForDisplay(savedProviders, presetProviders)
|
|
expect(merged).toHaveLength(1)
|
|
expect(merged[0]).toMatchObject({
|
|
id: 'minimax',
|
|
name: 'MiniMax Hailuo',
|
|
baseUrl: 'https://api.minimaxi.com/v1',
|
|
apiKey: 'mm-key',
|
|
hasApiKey: true,
|
|
})
|
|
})
|
|
})
|