feat: initial release v0.3.0

This commit is contained in:
saturn
2026-03-08 03:15:27 +08:00
commit 881ed44996
1311 changed files with 225407 additions and 0 deletions

View File

@@ -0,0 +1,65 @@
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,
})
})
})