import { describe, expect, it, vi } from "vitest"; const gatewayClientState = vi.hoisted(() => ({ options: null as Record | null, requests: [] as string[], })); class MockGatewayClient { private readonly opts: Record; constructor(opts: Record) { this.opts = opts; gatewayClientState.options = opts; gatewayClientState.requests = []; } start(): void { void Promise.resolve() .then(async () => { const onHelloOk = this.opts.onHelloOk; if (typeof onHelloOk === "function") { await onHelloOk(); } }) .catch(() => {}); } stop(): void {} async request(method: string): Promise { gatewayClientState.requests.push(method); if (method === "system-presence") { return []; } return {}; } } vi.mock("./client.js", () => ({ GatewayClient: MockGatewayClient, })); const { probeGateway } = await import("./probe.js"); describe("probeGateway", () => { it("connects with operator.read scope", async () => { const result = await probeGateway({ url: "ws://127.0.0.1:18789", auth: { token: "secret" }, timeoutMs: 1_000, }); expect(gatewayClientState.options?.scopes).toEqual(["operator.read"]); expect(gatewayClientState.options?.deviceIdentity).toBeNull(); expect(gatewayClientState.requests).toEqual([ "health", "status", "system-presence", "config.get", ]); expect(result.ok).toBe(true); }); it("keeps device identity enabled for remote probes", async () => { await probeGateway({ url: "wss://gateway.example/ws", auth: { token: "secret" }, timeoutMs: 1_000, }); expect(gatewayClientState.options?.deviceIdentity).toBeUndefined(); }); it("skips detail RPCs for lightweight reachability probes", async () => { const result = await probeGateway({ url: "ws://127.0.0.1:18789", timeoutMs: 1_000, includeDetails: false, }); expect(result.ok).toBe(true); expect(gatewayClientState.requests).toEqual([]); }); });