返回 AiToEarn
config.spec.ts
根目录 / project / aitoearn-backend / apps / aitoearn-ai / src / config.spec.ts
1 import { describe, expect, it } from 'vitest'
2 import { agentConfigSchema } from './config'
3
4 const baseAgentConfig = {
5 baseUrl: 'https://agent.example.com/v1/messages',
6 apiKey: 'agent-key',
7 analysis: {
8 apiKey: 'gemini-key',
9 },
10 }
11
12 describe('agentConfigSchema', () => {
13 it('applies the existing Claude model defaults', () => {
14 const agentConfig = agentConfigSchema.parse(baseAgentConfig)
15
16 expect(agentConfig.defaultModel).toBe('claude-opus-4-6')
17 expect(agentConfig.backgroundModel).toBe('claude-haiku-4-5-20251001')
18 expect(agentConfig.thinkModel).toBe('claude-opus-4-6')
19 expect(agentConfig.models).toContain('claude-opus-4-6')
20 })
21
22 it('accepts an Anthropic-compatible third-party model set', () => {
23 const agentConfig = agentConfigSchema.parse({
24 ...baseAgentConfig,
25 models: ['deepseek-anthropic-chat', 'deepseek-anthropic-lite'],
26 defaultModel: 'deepseek-anthropic-chat',
27 backgroundModel: 'deepseek-anthropic-lite',
28 thinkModel: 'deepseek-anthropic-chat',
29 })
30
31 expect(agentConfig.models).toEqual(['deepseek-anthropic-chat', 'deepseek-anthropic-lite'])
32 expect(agentConfig.defaultModel).toBe('deepseek-anthropic-chat')
33 })
34
35 it('rejects route models that are not configured', () => {
36 expect(() => agentConfigSchema.parse({
37 ...baseAgentConfig,
38 models: ['deepseek-anthropic-chat'],
39 defaultModel: 'missing-model',
40 backgroundModel: 'deepseek-anthropic-chat',
41 thinkModel: 'deepseek-anthropic-chat',
42 })).toThrow(/defaultModel must be included in agent\.models/)
43 })
44 })
45
45 lines TYPESCRIPT