|
| 1 | +import { describe, it, expect } from 'vitest'; |
| 2 | +import { PROVIDER_MODELS, getModelsForProvider } from '../../ai-assistant/providerModels'; |
| 3 | + |
| 4 | +describe('PROVIDER_MODELS', () => { |
| 5 | + const expectedProviders = ['openai', 'anthropic', 'google', 'mistral', 'openrouter', 'ollama']; |
| 6 | + |
| 7 | + it.each(expectedProviders)('should have models for provider "%s"', (provider) => { |
| 8 | + expect(PROVIDER_MODELS[provider]).toBeDefined(); |
| 9 | + expect(PROVIDER_MODELS[provider].length).toBeGreaterThan(0); |
| 10 | + }); |
| 11 | + |
| 12 | + it('should have non-empty label and value for every model entry', () => { |
| 13 | + for (const provider of Object.keys(PROVIDER_MODELS)) { |
| 14 | + for (const model of PROVIDER_MODELS[provider]) { |
| 15 | + expect(model.label).toBeTruthy(); |
| 16 | + expect(model.value).toBeTruthy(); |
| 17 | + } |
| 18 | + } |
| 19 | + }); |
| 20 | + |
| 21 | + it('should not have duplicate values within the same provider', () => { |
| 22 | + for (const provider of Object.keys(PROVIDER_MODELS)) { |
| 23 | + const values = PROVIDER_MODELS[provider].map(m => m.value); |
| 24 | + expect(new Set(values).size).toBe(values.length); |
| 25 | + } |
| 26 | + }); |
| 27 | +}); |
| 28 | + |
| 29 | +describe('getModelsForProvider', () => { |
| 30 | + it('should return models for a known provider', () => { |
| 31 | + const models = getModelsForProvider('openai'); |
| 32 | + expect(models.length).toBeGreaterThan(0); |
| 33 | + expect(models[0]).toHaveProperty('label'); |
| 34 | + expect(models[0]).toHaveProperty('value'); |
| 35 | + }); |
| 36 | + |
| 37 | + it('should return an empty array for an unknown provider', () => { |
| 38 | + expect(getModelsForProvider('unknown-provider')).toEqual([]); |
| 39 | + }); |
| 40 | + |
| 41 | + it('should return an empty array for an empty string', () => { |
| 42 | + expect(getModelsForProvider('')).toEqual([]); |
| 43 | + }); |
| 44 | + |
| 45 | + it('should return correct models for each provider', () => { |
| 46 | + expect(getModelsForProvider('openai').some(m => m.value === 'gpt-5.2')).toBe(true); |
| 47 | + expect(getModelsForProvider('anthropic').some(m => m.value === 'claude-opus-4.6')).toBe(true); |
| 48 | + expect(getModelsForProvider('google').some(m => m.value === 'gemini-2.5-pro')).toBe(true); |
| 49 | + expect(getModelsForProvider('mistral').some(m => m.value === 'mistral-large-latest')).toBe(true); |
| 50 | + expect(getModelsForProvider('openrouter').some(m => m.value === 'openai/gpt-5.2')).toBe(true); |
| 51 | + expect(getModelsForProvider('ollama').some(m => m.value === 'llama3')).toBe(true); |
| 52 | + }); |
| 53 | +}); |
0 commit comments