Spaces:
Paused
Paused
| import { describe, expect, it, vi } from "vitest"; | |
| import type { GatewayWsClient } from "./server/ws-types.js"; | |
| import { createGatewayBroadcaster } from "./server-broadcast.js"; | |
| type TestSocket = { | |
| bufferedAmount: number; | |
| send: (payload: string) => void; | |
| close: (code: number, reason: string) => void; | |
| }; | |
| describe("gateway broadcaster", () => { | |
| it("filters approval and pairing events by scope", () => { | |
| const approvalsSocket: TestSocket = { | |
| bufferedAmount: 0, | |
| send: vi.fn(), | |
| close: vi.fn(), | |
| }; | |
| const pairingSocket: TestSocket = { | |
| bufferedAmount: 0, | |
| send: vi.fn(), | |
| close: vi.fn(), | |
| }; | |
| const readSocket: TestSocket = { | |
| bufferedAmount: 0, | |
| send: vi.fn(), | |
| close: vi.fn(), | |
| }; | |
| const clients = new Set<GatewayWsClient>([ | |
| { | |
| socket: approvalsSocket as unknown as GatewayWsClient["socket"], | |
| connect: { role: "operator", scopes: ["operator.approvals"] } as GatewayWsClient["connect"], | |
| connId: "c-approvals", | |
| }, | |
| { | |
| socket: pairingSocket as unknown as GatewayWsClient["socket"], | |
| connect: { role: "operator", scopes: ["operator.pairing"] } as GatewayWsClient["connect"], | |
| connId: "c-pairing", | |
| }, | |
| { | |
| socket: readSocket as unknown as GatewayWsClient["socket"], | |
| connect: { role: "operator", scopes: ["operator.read"] } as GatewayWsClient["connect"], | |
| connId: "c-read", | |
| }, | |
| ]); | |
| const { broadcast } = createGatewayBroadcaster({ clients }); | |
| broadcast("exec.approval.requested", { id: "1" }); | |
| broadcast("device.pair.requested", { requestId: "r1" }); | |
| expect(approvalsSocket.send).toHaveBeenCalledTimes(1); | |
| expect(pairingSocket.send).toHaveBeenCalledTimes(1); | |
| expect(readSocket.send).toHaveBeenCalledTimes(0); | |
| }); | |
| }); | |