返回 DeepSeek-Reasonix
model-application.test.ts
根目录 / desktop / frontend / src / __tests__ / model-application.test.ts
1 import assert from "node:assert/strict";
2 import { appliedOnce, definitelyNotAccepted, modelApplicationError, type ModelApplicationDetails } from "../lib/modelApplication";
3 import { isUnknownSubmissionError } from "../lib/localSubmissionState";
4 import { submitTurn } from "../lib/turnSubmit";
5 import { followupNotSubmitted } from "../lib/pendingFollowup";
6 import type { AppBindings } from "../lib/bridge";
7
8 const details:ModelApplicationDetails={code:"model_settings_pending",runtimeIdentity:"runtime-a",appliedRevision:"a",desiredRevision:"b",model:"p/m",blockingJobs:[],canUseApplied:true};
9 const error=Object.assign(new Error("network settings could not apply"),{data:{submissionOutcome:"not_accepted",modelApplication:details}});
10 assert.equal(modelApplicationError(error),details);
11 assert.equal(definitelyNotAccepted(error),true);
12 assert.equal(isUnknownSubmissionError(error),false,"structured outcome wins over English error text");
13 assert.equal(isUnknownSubmissionError(Object.assign(new Error("settlement failed"),{data:{submissionOutcome:"unknown"}})),true);
14 assert.equal(followupNotSubmitted(Object.assign(new Error("reasonix_error:channel_read_only"), {data:{submissionOutcome:"unknown"}})), false, "structured uncertainty overrides legacy rejection text");
15 const calls:unknown[]=[];
16 const bindings={
17 StartTurnWithModelApplication:async(...args:unknown[])=>{calls.push(args);return {turnId:"turn"};},
18 SubmitInvocationsToTabWithID:async(...args:unknown[])=>{calls.push(args);return {turnId:"next"};},
19 } as unknown as AppBindings;
20 const structured={input:"exact model input",display:"shown input",invocations:[],modelApplicationChoice:appliedOnce(details)};
21 assert.deepEqual(await submitTurn(bindings,"tab","first","shown input","exact model input","",structured),[3,"turn"]);
22 const first=calls[0] as unknown[];
23 assert.equal((first[2] as {input:string}).input,"exact model input");
24 assert.equal((first[2] as Record<string,unknown>).modelApplicationChoice,undefined,"choice stays outside model input");
25 assert.deepEqual(first[3],appliedOnce(details));
26 await submitTurn(bindings,"tab","second","next","next","",{input:"next",display:"next",invocations:[]});
27 assert.deepEqual(calls[1],["tab","next","next",[],"second"],"the next submit uses default latest admission");
28 console.log("model application: structured rejection and submission-scoped choice passed");
29
29 lines TYPESCRIPT