summaryrefslogtreecommitdiffhomepage
path: root/src/adapters/ws/logic.test.ts
diff options
context:
space:
mode:
authorAdam Malczewski <[email protected]>2026-09-05 01:20:28 +0900
committerAdam Malczewski <[email protected]>2026-09-05 01:20:28 +0900
commit985116fdc8961e656cd9d3027debcd1a6237d6c2 (patch)
tree43aed23977ea354d23d8c54f27d45bf5e0635dfc /src/adapters/ws/logic.test.ts
parenta104c094b588560f955ff52dc7f949cf3c355f94 (diff)
downloaddispatch-web-985116fdc8961e656cd9d3027debcd1a6237d6c2.tar.gz
dispatch-web-985116fdc8961e656cd9d3027debcd1a6237d6c2.zip
feat(layout): plan 02 — provider consumption + layout WS + localStorage migration
Diffstat (limited to 'src/adapters/ws/logic.test.ts')
-rw-r--r--src/adapters/ws/logic.test.ts35
1 files changed, 35 insertions, 0 deletions
diff --git a/src/adapters/ws/logic.test.ts b/src/adapters/ws/logic.test.ts
index c4ec7e3..a7d30a7 100644
--- a/src/adapters/ws/logic.test.ts
+++ b/src/adapters/ws/logic.test.ts
@@ -463,3 +463,38 @@ describe("parseServerMessage — extensions-changed (plan 05)", () => {
expect(parseServerMessage(JSON.stringify({ type: "extensions-changed" }))).toBeNull();
});
});
+
+describe("parseServerMessage — layout (plan 02)", () => {
+ const TREE = { version: 1, root: { kind: "leaf", view: "chat" } };
+
+ it("parses the broadcast (workspaceId + full tree)", () => {
+ const result = parseServerMessage(
+ JSON.stringify({ type: "layout", workspaceId: "ws-a", tree: TREE }),
+ );
+ expect(result).toEqual({ type: "layout", workspaceId: "ws-a", tree: TREE });
+ });
+
+ it("rejects a missing/invalid workspaceId", () => {
+ expect(parseServerMessage(JSON.stringify({ type: "layout", tree: TREE }))).toBeNull();
+ expect(parseServerMessage(JSON.stringify({ type: "layout", workspaceId: 7, tree: TREE }))).toBeNull();
+ });
+
+ it("rejects a missing/invalid tree (wrong version, missing root, non-object)", () => {
+ expect(parseServerMessage(JSON.stringify({ type: "layout", workspaceId: "ws-a" }))).toBeNull();
+ expect(
+ parseServerMessage(
+ JSON.stringify({ type: "layout", workspaceId: "ws-a", tree: { version: 2, root: {} } }),
+ ),
+ ).toBeNull();
+ expect(
+ parseServerMessage(
+ JSON.stringify({ type: "layout", workspaceId: "ws-a", tree: { version: 1 } }),
+ ),
+ ).toBeNull();
+ expect(parseServerMessage(JSON.stringify({ type: "layout", workspaceId: "ws-a", tree: 7 }))).toBeNull();
+ });
+
+ it("an unknown type still parses to null (the layout addition doesn't loosen the guard)", () => {
+ expect(parseServerMessage(JSON.stringify({ type: "layout.unknown" }))).toBeNull();
+ });
+});