返回 DeepSeek-Reasonix
connection-model-picker.test.tsx
根目录 / desktop / frontend / src / __tests__ / connection-model-picker.test.tsx
1 import { JSDOM } from 'jsdom';
2 import React, {act} from 'react';
3 import assert from 'node:assert/strict';
4 const dom = new JSDOM('<div id="root"></div>', {url:'http://localhost',pretendToBeVisual:true});
5 Object.assign(globalThis,{window:dom.window,document:dom.window.document,localStorage:dom.window.localStorage,Node:dom.window.Node,HTMLElement:dom.window.HTMLElement,requestAnimationFrame:dom.window.requestAnimationFrame.bind(dom.window),cancelAnimationFrame:dom.window.cancelAnimationFrame.bind(dom.window),IS_REACT_ACT_ENVIRONMENT:true});
6 window.matchMedia = (()=>({matches:true,addEventListener(){},removeEventListener(){}})) as any;
7 const {createRoot}=await import('react-dom/client');
8 const {ModelPicker}=await import('../components/SettingsPanel');
9 const {LocaleProvider}=await import('../lib/i18n');
10 const root=createRoot(document.getElementById('root')!);
11 let selected='';
12 const providers=['one','two'].map(name=>({name,displayName:`Connection ${name}`,kind:'openai',models:['shared-model'],keySet:true,apiKeyEnv:'KEY',builtIn:true}));
13 await act(async()=>root.render(<LocaleProvider><ModelPicker s={{providers} as any} refs={['one/shared-model','two/shared-model']} value="one/shared-model" disabled={false} onPick={value=>{selected=value;}}/></LocaleProvider>));
14 await act(async()=>(document.querySelector('.settings-model-picker .settings-select') as HTMLButtonElement).click());
15 const options=Array.from(document.querySelectorAll<HTMLButtonElement>('[role="option"]'));
16 assert.equal(options.length,2);
17 assert.deepEqual(Array.from(document.querySelectorAll('.settings-select-menu__group')).map(n=>n.textContent),['Connection one','Connection two']);
18 assert.equal(options[0].querySelector('small'),null);
19 await act(async()=>options[1].click());
20 assert.equal(selected,'two/shared-model');
21 await act(async()=>root.unmount());
22 console.log('PASS: same model in independent connections retains identity and selection');
23
23 lines Plain Text