返回 DeepSeek-Reasonix
workspace-panel-open-migration.test.ts
根目录 / desktop / frontend / src / __tests__ / workspace-panel-open-migration.test.ts
1 // Run: tsx src/__tests__/workspace-panel-open-migration.test.ts
2 // zk-ge C14 兼容性:项目级 dock 开合 key 缺失时回退旧全局 key,升级不翻转用户选择
3
4 import { JSDOM } from "jsdom";
5
6 let passed = 0;
7 let failed = 0;
8
9 function ok(value: boolean, label: string) {
10 if (value) {
11 process.stdout.write(` PASS ${label}\n`);
12 passed += 1;
13 } else {
14 process.stdout.write(` FAIL ${label}\n`);
15 failed += 1;
16 }
17 }
18
19 function installLocalStorage(seed: Record<string, string>) {
20 const dom = new JSDOM("<!doctype html><html><body></body></html>", { url: "http://localhost/" });
21 globalThis.window = dom.window as unknown as Window & typeof globalThis;
22 globalThis.localStorage = dom.window.localStorage;
23 for (const [key, value] of Object.entries(seed)) {
24 dom.window.localStorage.setItem(key, value);
25 }
26 return dom;
27 }
28
29 // 动态 import(依赖 window/localStorage 已就绪)
30 async function loadModule() {
31 return await import("../store/layout");
32 }
33
34 console.log("\nworkspace dock-open legacy key migration (CLAIM.PERSIST.014)");
35
36 {
37 // 场景 1:项目 key 缺失 + 旧全局 key = 关闭("0") → 首次打开项目应保持关闭
38 installLocalStorage({ "reasonix.workspacePanel.open": "0" });
39 const { loadWorkspacePanelOpen } = await loadModule();
40 ok(loadWorkspacePanelOpen("project-a") === false, "project key missing + legacy global closed => stays closed");
41 }
42
43 {
44 // 场景 2:项目 key 缺失 + 旧全局 key = 打开("1") → 首次打开项目应打开
45 installLocalStorage({ "reasonix.workspacePanel.open": "1" });
46 const { loadWorkspacePanelOpen } = await loadModule();
47 ok(loadWorkspacePanelOpen("project-b") === true, "project key missing + legacy global open => stays open");
48 }
49
50 {
51 // 场景 3:项目 key 存在(优先于旧全局 key)
52 installLocalStorage({ "reasonix.workspacePanel.open": "0", "reasonix.workspacePanel.open.project-c": "1" });
53 const { loadWorkspacePanelOpen } = await loadModule();
54 ok(loadWorkspacePanelOpen("project-c") === true, "project key present wins over legacy global");
55 }
56
57 {
58 // 场景 4:项目 key 和旧全局 key 都缺失 → 默认打开
59 installLocalStorage({});
60 const { loadWorkspacePanelOpen } = await loadModule();
61 ok(loadWorkspacePanelOpen("project-d") === true, "neither key present => default open");
62 }
63
64 console.log(`\nworkspace dock-open migration: ${passed} passed, ${failed} failed`);
65 if (failed > 0) process.exit(1);
66
66 lines TYPESCRIPT