Skip to content

Commit cac9435

Browse files
committed
add unit tests for providerModels
1 parent 01f7667 commit cac9435

File tree

2 files changed

+60
-2
lines changed

2 files changed

+60
-2
lines changed

src/components/AIConfigPopup.tsx

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,8 @@ const AIConfigPopup = ({ isOpen, onClose, onSave }: AIConfigPopupProps) => {
141141
setShowFullPrompt(false);
142142
setEnableCodeSelectionMenu(true);
143143
setEnableInlineSuggestions(true);
144-
144+
setIsCustomModel(false);
145+
145146
// Notify parent and reload config
146147
onSave();
147148
}
@@ -182,7 +183,11 @@ const AIConfigPopup = ({ isOpen, onClose, onSave }: AIConfigPopupProps) => {
182183
</label>
183184
<select
184185
value={provider}
185-
onChange={(e) => setProvider(e.target.value)}
186+
onChange={(e) => {
187+
setProvider(e.target.value);
188+
setModel('');
189+
setIsCustomModel(false);
190+
}}
186191
className={`w-full p-2 border rounded-lg focus:outline-none focus:ring-2 ${theme.select}`}
187192
>
188193
<option value="">Select a provider</option>
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
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

Comments
 (0)