From 8a18af409d3ff8df6022e4086cb62a255a73c8f7 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sat, 3 Jan 2026 19:33:45 +0100 Subject: [PATCH] test(gateway): cover helper registries --- .../server-bridge-subscriptions.test.ts | 41 +++++++++++++++++++ src/gateway/server-chat-registry.test.ts | 18 ++++++++ 2 files changed, 59 insertions(+) create mode 100644 src/gateway/server-bridge-subscriptions.test.ts create mode 100644 src/gateway/server-chat-registry.test.ts diff --git a/src/gateway/server-bridge-subscriptions.test.ts b/src/gateway/server-bridge-subscriptions.test.ts new file mode 100644 index 000000000..a64b8353d --- /dev/null +++ b/src/gateway/server-bridge-subscriptions.test.ts @@ -0,0 +1,41 @@ +import { describe, expect, test } from "vitest"; +import { createBridgeSubscriptionManager } from "./server-bridge-subscriptions.js"; + +describe("bridge subscription manager", () => { + test("routes events to subscribed nodes", () => { + const manager = createBridgeSubscriptionManager(); + const sent: Array<{ + nodeId: string; + event: string; + payloadJSON?: string | null; + }> = []; + const sendEvent = (evt: { + nodeId: string; + event: string; + payloadJSON?: string | null; + }) => sent.push(evt); + + manager.subscribe("node-a", "main"); + manager.subscribe("node-b", "main"); + manager.sendToSession("main", "chat", { ok: true }, sendEvent); + + expect(sent).toHaveLength(2); + expect(sent.map((s) => s.nodeId).sort()).toEqual(["node-a", "node-b"]); + expect(sent[0].event).toBe("chat"); + }); + + test("unsubscribeAll clears session mappings", () => { + const manager = createBridgeSubscriptionManager(); + const sent: string[] = []; + const sendEvent = (evt: { nodeId: string; event: string }) => + sent.push(`${evt.nodeId}:${evt.event}`); + + manager.subscribe("node-a", "main"); + manager.subscribe("node-a", "secondary"); + manager.unsubscribeAll("node-a"); + manager.sendToSession("main", "tick", {}, sendEvent); + manager.sendToSession("secondary", "tick", {}, sendEvent); + + expect(sent).toEqual([]); + }); +}); diff --git a/src/gateway/server-chat-registry.test.ts b/src/gateway/server-chat-registry.test.ts new file mode 100644 index 000000000..631b5bb5e --- /dev/null +++ b/src/gateway/server-chat-registry.test.ts @@ -0,0 +1,18 @@ +import { describe, expect, test } from "vitest"; +import { createChatRunRegistry } from "./server-chat.js"; + +describe("chat run registry", () => { + test("queues and removes runs per session", () => { + const registry = createChatRunRegistry(); + + registry.add("s1", { sessionKey: "main", clientRunId: "c1" }); + registry.add("s1", { sessionKey: "main", clientRunId: "c2" }); + + expect(registry.peek("s1")?.clientRunId).toBe("c1"); + expect(registry.shift("s1")?.clientRunId).toBe("c1"); + expect(registry.peek("s1")?.clientRunId).toBe("c2"); + + expect(registry.remove("s1", "c2")?.clientRunId).toBe("c2"); + expect(registry.peek("s1")).toBeUndefined(); + }); +});