返回 DeepSeek-Reasonix
composer-router-rejection.test.tsx
根目录 / desktop / frontend / src / __tests__ / composer-router-rejection.test.tsx
1 import assert from "node:assert/strict";
2 import React,{act} from "react";
3 import {createRoot} from "react-dom/client";
4 import {installDom,installBridgeApp} from "./composerInboxHarness";
5 import {makeSessionUIMock} from "../lib/sessionUIMock";
6 import {useComposerRouter, type ComposerRouterInput} from "../app-runtime/useComposerRouter";
7 import {sendPersistedComposer,useSessionComposerPersistence} from "../lib/sessionComposerPersistence";
8 const dom=installDom();
9 installBridgeApp({...makeSessionUIMock(async()=>{})});
10 let applied=false;
11 let editor!:ReturnType<typeof useSessionComposerPersistence>,router!:ReturnType<typeof useComposerRouter>;
12 const noop=()=>{};
13 const ports:ComposerRouterInput["ports"]={runShellForTab:async()=>{},switchModel:async()=>applied,newSession:async()=>{},setSettingsTarget:noop,setClearContextPending:noop,clearWorkspaceConflict:noop,setWorkspaceConflict:noop,setPendingClose:noop,submitComposerTurn:async()=>{throw Error("must not dispatch a model command to provider");},steerForTab:async()=>{},isRemoteTab:()=>false};
14 function Probe(){editor=useSessionComposerPersistence({hostId:"local",sessionId:"command"},"command-tab");router=useComposerRouter({activeTabId:"command-tab",goalDraftActive:false,t:key=>key,notice:noop,showToast:noop,ports});return null;}
15 const root=createRoot(document.getElementById("root")!);
16 try {
17 await act(async()=>{root.render(React.createElement(Probe));await new Promise(resolve=>setTimeout(resolve,0));});
18 const owner=editor.target!;
19 await act(async()=>owner.onPatch!(owner.draftId,owner.generation,{text:"/model configured/model"}));
20 await act(async()=>assert.rejects(sendPersistedComposer("command-tab","/model configured/model","/model configured/model","failed-command",()=>router.handleSend("/model configured/model")),/inbox_not_submitted/));
21 assert.equal(editor.blocked,false);assert.equal(editor.target!.initial.text,"/model configured/model");
22 applied=true;
23 await act(async()=>{await sendPersistedComposer("command-tab","/model configured/model","/model configured/model","success-command",()=>router.handleSend("/model configured/model"));});
24 assert.equal(editor.target!.initial.text,"");
25 console.log("PASS /model settles saved input only after an applied switch");
26 } finally {await act(async()=>root.unmount());dom.window.close();}
27
27 lines Plain Text