返回 DeepSeek-Reasonix
provider-display-name.test.tsx
根目录 / desktop / frontend / src / __tests__ / provider-display-name.test.tsx
1 import {JSDOM} from 'jsdom';
2 import React,{act} from 'react';
3
4 import assert from 'node:assert/strict';
5
6 import {LocaleProvider} from '../lib/i18n';
7 import type {ProviderView} from '../lib/types';
8 const dom=new JSDOM('<div id="root"></div>',{url:'http://localhost',pretendToBeVisual:true});
9 Object.assign(globalThis,{window:dom.window,document:dom.window.document,localStorage:dom.window.localStorage,IS_REACT_ACT_ENVIRONMENT:true});
10 const {createRoot}=await import('react-dom/client');
11 const {ProviderEditor,providerAccessGroups}=await import('../components/SettingsPanel');
12 const provider={name:'stable-id',displayName:'工作账号',kind:'openai',baseUrl:'https://example.com/v1',models:['model'],default:'model',apiKeyEnv:'TEST_KEY',keySet:true,added:true,builtIn:false,visionModels:[],supportedEfforts:[],modelsUrl:'',balanceUrl:'',contextWindow:100000} as ProviderView;
13 let saved:ProviderView|undefined;
14 const root=createRoot(document.getElementById('root')!);
15 await act(async()=>root.render(<LocaleProvider><ProviderEditor initial={provider} kinds={['openai']} busy={false} onCancel={()=>{}} onSave={p=>{saved=p;}} /></LocaleProvider>));
16 const name=document.querySelector('.provider-name-input') as HTMLInputElement;
17 assert.equal(name.disabled,false);assert.equal(name.value,'工作账号');
18 await act(async()=>{
19 Object.getOwnPropertyDescriptor(window.HTMLInputElement.prototype,'value')!.set!.call(name,'个人账号');
20 name.dispatchEvent(new window.Event('input',{bubbles:true}));
21 });
22 const save=document.querySelector('.provider-editor-footer .btn--primary') as HTMLButtonElement;
23 await act(async()=>save.click());
24 assert.equal(saved?.name,'stable-id');assert.equal(saved?.displayName,'个人账号');
25 assert.equal(providerAccessGroups([provider],((key:string)=>key) as any)[0].label,'工作账号');
26 await act(async()=>root.render(<LocaleProvider><ProviderEditor key="builtin" initial={{...provider,builtIn:true}} kinds={['openai','anthropic','responses']} busy={false} onCancel={()=>{}} onSave={p=>{saved=p;}} /></LocaleProvider>));
27 assert.equal((document.querySelector('button[aria-label="API format"]') as HTMLButtonElement).disabled,false);
28 assert.ok(document.querySelector('.provider-model-toolbar'));
29 assert.equal(document.querySelector('.provider-editor--key-only'),null);
30 assert.ok(document.querySelector('.provider-name-input'));
31 await act(async()=>root.unmount());
32 console.log('PASS: editable connection label saves independently of stable identity and drives list title');
33
33 lines Plain Text