返回 DeepSeek-Reasonix
provider-connections.test.tsx
根目录 / desktop / frontend / src / __tests__ / provider-connections.test.tsx
1 import { JSDOM } from "jsdom";
2 import React, { act, useState } from "react";
3 import { createRoot } from "react-dom/client";
4 import assert from "node:assert/strict";
5 import { ProviderConnections } from "../components/ProviderConnections";
6 import { LocaleProvider } from "../lib/i18n";
7 import type { ProviderAccessGroup } from "../components/SettingsPanel";
8 const dom = new JSDOM('<div id="root"></div>', { url: "http://localhost" });
9 Object.assign(globalThis, { window: dom.window, document: dom.window.document, IS_REACT_ACT_ENVIRONMENT: true });
10 const groups = ['a', 'b'].map(id => ({id, label:id, models:[], providers:[], kind:'openai', baseUrl:'', configured:true})) as ProviderAccessGroup[];
11 function Draft({id}:{id:string}) { const [n,setN]=useState(0);return <button data-draft={id} onClick={()=>setN(n+1)}>{n}</button>; }
12 const root=createRoot(document.getElementById('root')!);
13 const render=(items=groups,hidden=false)=> <LocaleProvider><ProviderConnections groups={items} presets={[]} revealedProvider={null} hidden={hidden} busy={false} onAdd={()=>{}} renderDetail={g=><Draft id={g.id}/>} /></LocaleProvider>;
14 await act(async()=>root.render(render()));
15 await act(async()=> (document.querySelector('[data-draft="a"]') as HTMLElement).click());
16 await act(async()=> (document.querySelectorAll('.provider-connections__item')[1] as HTMLElement).click());
17 assert.equal(document.querySelector('[data-draft="a"]')!.parentElement!.hidden,true);
18 await act(async()=> (document.querySelectorAll('.provider-connections__item')[0] as HTMLElement).click());
19 assert.equal(document.querySelector('[data-draft="a"]')!.textContent,'1');
20 await act(async()=>root.render(render(groups,true)));
21 await act(async()=>root.render(render()));
22 assert.equal(document.querySelector('[data-draft="a"]')!.textContent,'1');
23 await act(async()=>root.render(render([groups[1]])));
24 assert.equal(document.querySelector('[data-draft="b"]')!.parentElement!.hidden,false);
25 await act(async()=>root.unmount());
26 console.log('PASS: navigation preserves drafts, add flow preserves drafts, deletion selects remaining connection');
27
27 lines Plain Text