返回 DeepSeek-Reasonix
model-settings-receipt.test.ts
根目录 / desktop / frontend / src / __tests__ / model-settings-receipt.test.ts
1 import assert from "node:assert/strict";
2 import type { AppBindings } from "../lib/bridge";
3 import type { ModelSettingsResult } from "../lib/types";
4 import { baseSettings } from "../test-support/settingsTestFixtures";
5 import { saveModelSettings } from "../lib/modelSettings";
6 import { installDesktopHostStub } from "./desktopHostStub";
7
8 let writes = 0, reads = 0;
9 const receipt: ModelSettingsResult = {requestId:"",persisted:true,revision:"revision-1",application:"failed",targets:[{tabId:"tab",application:"failed",appliedRevision:"old",desiredRevision:"new"}],issues:[{code:"apply_failed",message:"Saved; retry applying to this session."}],appliedCatalogs:[]};
10 const bindings: Partial<AppBindings> = {
11 async ApplyModelSettings(change) {
12 writes++;
13 receipt.requestId = change.requestId;
14 throw new Error("bridge response lost");
15 },
16 async GetModelSettingsRequest(id) {
17 reads++;
18 assert.equal(id,receipt.requestId);
19 return receipt;
20 },
21 };
22 Object.assign(globalThis, { window: {} });
23 installDesktopHostStub(bindings);
24 const saved = await saveModelSettings(baseSettings(),{kind:"credential",name:"provider",key:"test-key"});
25 assert.equal(saved.persisted,true);
26 assert.equal(saved.application,"failed","saved-but-not-applied remains distinct from a write failure");
27 assert.equal(writes,1,"lost response is never replayed");
28 assert.equal(reads,1,"lost response reads its original receipt");
29 receipt.persisted=false;
30 receipt.issues=[{code:"validation",message:"Provider no longer exists"}];
31 await assert.rejects(saveModelSettings(baseSettings(),{kind:"credential",name:"provider",key:"test-key"}),/Provider no longer exists/);
32 bindings.GetModelSettingsRequest=async()=>{throw new Error("bridge down");};
33 await assert.rejects(saveModelSettings(baseSettings(),{kind:"credential",name:"provider",key:"test-key"}),/could not be confirmed/);
34 assert.equal(writes,3,"each user operation writes once despite all lost responses");
35 console.log("PASS: receipt readback, no write replay, saved application failure and unknown outcome");
36
36 lines TYPESCRIPT