import { describe, it, expect, beforeEach } from 'vitest'; import { ModelPicker } from '../src/components/model-picker.js'; import { store } from '../src/store.js'; function mountPicker() { const picker = new ModelPicker(); document.body.appendChild(picker.render()); return picker; } beforeEach(() => { document.body.innerHTML = ''; }); describe('ModelPicker', () => { it('shows only models fetched for the current baseUrl', () => { store.saveSettings({ baseUrl: 'http://a.local' }); store.saveAvailableModels('http://a.local', ['model-a', 'model-b']); store.saveAvailableModels('http://b.local', ['model-c']); const picker = mountPicker(); expect(picker._getAllModels()).toEqual(['model-a', 'model-b']); }); it('loads the selected model only from the current baseUrl', () => { store.saveSettings({ baseUrl: 'http://a.local' }); store.saveAvailableModels('http://a.local', ['model-a']); store.setCurrentModel('http://a.local', 'model-a'); store.saveAvailableModels('http://b.local', ['model-b']); store.setCurrentModel('http://b.local', 'model-b'); const picker = mountPicker(); expect(picker.getModel()).toBe('model-a'); }); it('clears an invalid selected model when the fetched list changes', () => { store.saveSettings({ baseUrl: 'http://a.local' }); store.saveAvailableModels('http://a.local', ['model-a']); store.setCurrentModel('http://a.local', 'model-a'); const picker = mountPicker(); picker.setModels(['model-b']); expect(picker.getModel()).toBe(''); expect(store.getCurrentModel('http://a.local')).toBe(''); }); it('default current model is empty when nothing is selected', () => { const picker = mountPicker(); expect(picker.getModel()).toBe(''); }); });