Files
opsxshell/test/ai/providerPresets.test.ts
T
Logan.Li b0d0e3a5f3 feat(i18n): add multi-language support (ja/ko/vi/ru/zh-TW) with system auto-detection
- Extend AppLanguage to 7 locales: zh-CN, zh-TW, en, ja, ko, vi, ru
- Auto-detect system language via navigator.languages; fallback to English
- Add BCP47 locale mapping for date formatting and sorting
- Create 50 translation JSON files (5 languages × 10 namespaces, 1137 keys each)
- Update language selector with native language names
- Extend locale key parity test to cover all 7 languages (70 assertions)
- Add VNC/RDP desktop, serial terminal, AI agent, port forwarding, and SFTP features
- Add credential encryption, host metrics, session backup crypto, and zmodem bridge
- Update Rust backend: desktop services, host metrics, SSH/SFTP enhancements
2026-08-12 00:07:48 +08:00

89 lines
3.2 KiB
TypeScript

import { describe, expect, it } from 'vitest'
import {
AI_PROVIDER_FAMILY_META,
AI_PROVIDER_FAMILY_ORDER,
AI_PROVIDER_PRESETS,
createProviderFromPreset,
presetsByFamily,
resolveProviderFamily,
} from '../../src/ai/providerPresets'
describe('AI provider presets grouping', () => {
it('matches the expected UI group order', () => {
expect(AI_PROVIDER_FAMILY_ORDER).toEqual([
'openai_compatible',
'standalone',
'plan',
'local',
'custom',
])
expect(AI_PROVIDER_FAMILY_META.openai_compatible.label).toBe('OpenAI兼容')
expect(AI_PROVIDER_FAMILY_META.plan.label).toBe('Plan计划')
expect(AI_PROVIDER_FAMILY_META.local.label).toBe('私有化本地')
expect(AI_PROVIDER_FAMILY_META.custom.label).toBe('Custom自定义')
})
it('lists OpenAI-compatible payg presets', () => {
expect(presetsByFamily('openai_compatible').map((item) => item.name)).toEqual([
'DeepSeek',
'OpenAI',
'Qwen',
'Kimi',
'Xiaomi MiMo',
'MiniMax',
])
})
it('lists Anthropic and Google Gemini after the separator group', () => {
expect(presetsByFamily('standalone').map((item) => item.name)).toEqual([
'Anthropic',
'Google Gemini',
])
})
it('lists Plan presets as GLM / MiniMax / Kimi', () => {
expect(presetsByFamily('plan').map((item) => item.name)).toEqual(['GLM', 'MiniMax', 'Kimi'])
expect(createProviderFromPreset('glm').defaultModelId).toBe('glm-5.2-plan')
expect(createProviderFromPreset('minimax-plan').defaultModelId).toBe('MiniMax-M3-plan')
expect(createProviderFromPreset('kimi-plan').defaultModelId).toBe('kimi-k3-plan')
expect(createProviderFromPreset('zai').presetId).toBe('glm')
})
it('defaults DeepSeek to V4 Pro / Flash', () => {
const deepseek = createProviderFromPreset('deepseek')
expect(deepseek.defaultModelId).toBe('deepseek-v4-pro')
expect(deepseek.models.map((item) => item.model)).toEqual(['deepseek-v4-pro', 'deepseek-v4-flash'])
})
it('uses current frontier model IDs from official catalogs', () => {
expect(createProviderFromPreset('openai').models.map((item) => item.model)).toEqual([
'gpt-5.6-sol',
'gpt-5.6-terra',
'gpt-5.6-luna',
'gpt-5.5',
])
expect(createProviderFromPreset('anthropic').defaultModelId).toBe('claude-opus-5')
expect(createProviderFromPreset('google').defaultModelId).toBe('gemini-3.1-pro-preview')
expect(createProviderFromPreset('qwen').defaultModelId).toBe('qwen3.8-max')
expect(createProviderFromPreset('kimi').defaultModelId).toBe('kimi-k3')
})
it('lists local and custom at the bottom', () => {
expect(presetsByFamily('local').map((item) => item.name)).toEqual(['Ollama', 'VLLM'])
expect(presetsByFamily('custom').map((item) => item.name)).toEqual(['Custom自定义'])
expect(createProviderFromPreset('custom').family).toBe('custom')
})
it('resolves legacy zhipu/zai to plan family', () => {
expect(
resolveProviderFamily({
presetId: 'zai',
protocol: 'openai-chat',
authStyle: 'bearer',
baseUrl: 'https://api.z.ai/api/paas/v4',
})
).toBe('plan')
expect(AI_PROVIDER_PRESETS.some((item) => item.id === 'mimo')).toBe(true)
})
})