Skip to content

Commit 01f64f4

Browse files
committed
tests ran successfully
1 parent cac9435 commit 01f64f4

File tree

1 file changed

+108
-0
lines changed

1 file changed

+108
-0
lines changed
Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
import { describe, it, expect, vi, beforeEach } from 'vitest';
2+
import { render, screen, fireEvent } from '@testing-library/react';
3+
import AIConfigPopup from '../../components/AIConfigPopup';
4+
5+
// Mock the store
6+
vi.mock('../../store/store', () => {
7+
return {
8+
default: vi.fn((selector) => selector({
9+
backgroundColor: '#ffffff',
10+
})),
11+
};
12+
});
13+
14+
describe('AIConfigPopup - Model Selection', () => {
15+
const mockOnClose = vi.fn();
16+
const mockOnSave = vi.fn();
17+
18+
beforeEach(() => {
19+
vi.clearAllMocks();
20+
localStorage.clear();
21+
});
22+
23+
it('should show model dropdown when a provider is selected', () => {
24+
render(<AIConfigPopup isOpen={true} onClose={mockOnClose} onSave={mockOnSave} />);
25+
26+
// Select OpenAI provider
27+
const providerSelect = screen.getByDisplayValue('Select a provider');
28+
fireEvent.change(providerSelect, { target: { value: 'openai' } });
29+
30+
// Model dropdown should appear with "Select a model" default
31+
expect(screen.getByDisplayValue('Select a model')).toBeInTheDocument();
32+
});
33+
34+
it('should populate model dropdown with provider-specific models', () => {
35+
render(<AIConfigPopup isOpen={true} onClose={mockOnClose} onSave={mockOnSave} />);
36+
37+
const providerSelect = screen.getByDisplayValue('Select a provider');
38+
fireEvent.change(providerSelect, { target: { value: 'openai' } });
39+
40+
// Check that OpenAI models appear
41+
expect(screen.getByText('GPT-5.2')).toBeInTheDocument();
42+
expect(screen.getByText('GPT-5 Mini')).toBeInTheDocument();
43+
expect(screen.getByText('o3')).toBeInTheDocument();
44+
});
45+
46+
it('should show different models when switching providers', () => {
47+
render(<AIConfigPopup isOpen={true} onClose={mockOnClose} onSave={mockOnSave} />);
48+
49+
const providerSelect = screen.getByDisplayValue('Select a provider');
50+
51+
// Select Anthropic
52+
fireEvent.change(providerSelect, { target: { value: 'anthropic' } });
53+
expect(screen.getByText('Claude Opus 4.6')).toBeInTheDocument();
54+
55+
// Switch to Google
56+
fireEvent.change(providerSelect, { target: { value: 'google' } });
57+
expect(screen.getByText('Gemini 2.5 Pro')).toBeInTheDocument();
58+
});
59+
60+
it('should reset model when provider changes', () => {
61+
render(<AIConfigPopup isOpen={true} onClose={mockOnClose} onSave={mockOnSave} />);
62+
63+
const providerSelect = screen.getByDisplayValue('Select a provider');
64+
65+
// Select OpenAI and pick a model
66+
fireEvent.change(providerSelect, { target: { value: 'openai' } });
67+
const modelSelect = screen.getByDisplayValue('Select a model');
68+
fireEvent.change(modelSelect, { target: { value: 'gpt-5.2' } });
69+
expect(screen.getByDisplayValue('GPT-5.2')).toBeInTheDocument();
70+
71+
// Switch provider — model should reset
72+
fireEvent.change(providerSelect, { target: { value: 'anthropic' } });
73+
expect(screen.getByDisplayValue('Select a model')).toBeInTheDocument();
74+
});
75+
76+
it('should show Custom option and text input when Custom is selected', () => {
77+
render(<AIConfigPopup isOpen={true} onClose={mockOnClose} onSave={mockOnSave} />);
78+
79+
const providerSelect = screen.getByDisplayValue('Select a provider');
80+
fireEvent.change(providerSelect, { target: { value: 'openai' } });
81+
82+
// Select "Custom..."
83+
const modelSelect = screen.getByDisplayValue('Select a model');
84+
fireEvent.change(modelSelect, { target: { value: '__custom__' } });
85+
86+
// Custom text input should appear
87+
expect(screen.getByPlaceholderText('Enter custom model name')).toBeInTheDocument();
88+
});
89+
90+
it('should show text input instead of dropdown for openai-compatible provider', () => {
91+
render(<AIConfigPopup isOpen={true} onClose={mockOnClose} onSave={mockOnSave} />);
92+
93+
const providerSelect = screen.getByDisplayValue('Select a provider');
94+
fireEvent.change(providerSelect, { target: { value: 'openai-compatible' } });
95+
96+
// Should show plain text input, not a dropdown
97+
expect(screen.getByPlaceholderText('Enter model name')).toBeInTheDocument();
98+
});
99+
100+
it('should include Custom option in the model dropdown', () => {
101+
render(<AIConfigPopup isOpen={true} onClose={mockOnClose} onSave={mockOnSave} />);
102+
103+
const providerSelect = screen.getByDisplayValue('Select a provider');
104+
fireEvent.change(providerSelect, { target: { value: 'google' } });
105+
106+
expect(screen.getByText('Custom...')).toBeInTheDocument();
107+
});
108+
});

0 commit comments

Comments
 (0)