AXERA-TECH/lite_webui
17
1import { describe, it, expect, beforeEach } from 'vitest';2import { ModelPicker } from '../src/components/model-picker.js';3import { store } from '../src/store.js';4 5function mountPicker() {6 const picker = new ModelPicker();7 document.body.appendChild(picker.render());8 return picker;9}10 11beforeEach(() => {12 document.body.innerHTML = '';13});14 15describe('ModelPicker', () => {16 it('shows only models fetched for the current baseUrl', () => {17 store.saveSettings({ baseUrl: 'http://a.local' });18 store.saveAvailableModels('http://a.local', ['model-a', 'model-b']);19 store.saveAvailableModels('http://b.local', ['model-c']);20 21 const picker = mountPicker();22 23 expect(picker._getAllModels()).toEqual(['model-a', 'model-b']);24 });25 26 it('loads the selected model only from the current baseUrl', () => {27 store.saveSettings({ baseUrl: 'http://a.local' });28 store.saveAvailableModels('http://a.local', ['model-a']);29 store.setCurrentModel('http://a.local', 'model-a');30 store.saveAvailableModels('http://b.local', ['model-b']);31 store.setCurrentModel('http://b.local', 'model-b');32 33 const picker = mountPicker();34 35 expect(picker.getModel()).toBe('model-a');36 });37 38 it('clears an invalid selected model when the fetched list changes', () => {39 store.saveSettings({ baseUrl: 'http://a.local' });40 store.saveAvailableModels('http://a.local', ['model-a']);41 store.setCurrentModel('http://a.local', 'model-a');42 43 const picker = mountPicker();44 picker.setModels(['model-b']);45 46 expect(picker.getModel()).toBe('');47 expect(store.getCurrentModel('http://a.local')).toBe('');48 });49 50 it('default current model is empty when nothing is selected', () => {51 const picker = mountPicker();52 expect(picker.getModel()).toBe('');53 });54});55 