import { beforeEach, describe, expect, it, vi } from "vitest"; const mocks = vi.hoisted(() => ({ loadNodeHostConfig: vi.fn(), })); vi.mock("../node-host/config.js", () => ({ loadNodeHostConfig: mocks.loadNodeHostConfig, })); import { resolveNodeOnlyGatewayInfo } from "./status.node-mode.js"; describe("resolveNodeOnlyGatewayInfo", () => { beforeEach(() => { mocks.loadNodeHostConfig.mockReset(); }); it("returns node-only gateway details when no local gateway is installed", async () => { mocks.loadNodeHostConfig.mockResolvedValueOnce({ version: 1, nodeId: "node-1", gateway: { host: "gateway.example.com", port: 19000 }, }); await expect( resolveNodeOnlyGatewayInfo({ daemon: { installed: false }, node: { installed: true, loaded: true, externallyManaged: false, runtimeShort: "running (pid 4321)", }, }), ).resolves.toEqual({ gatewayTarget: "gateway.example.com:19000", gatewayValue: "node → gateway.example.com:19000 · no local gateway", connectionDetails: [ "Node-only mode detected", "Local gateway: not expected on this machine", "Remote gateway target: gateway.example.com:19000", "Inspect the remote gateway host for live channel and health details.", ].join("\n"), }); }); it("does not claim node-only mode when the node service is installed but inactive", async () => { mocks.loadNodeHostConfig.mockResolvedValueOnce({ version: 1, nodeId: "node-1", gateway: { host: "gateway.example.com", port: 19000 }, }); await expect( resolveNodeOnlyGatewayInfo({ daemon: { installed: false }, node: { installed: true, loaded: false, externallyManaged: false, runtime: { status: "stopped" }, runtimeShort: "stopped", }, }), ).resolves.toBeNull(); }); it("falls back to an unknown gateway target when node-only config is missing", async () => { mocks.loadNodeHostConfig.mockResolvedValueOnce(null); await expect( resolveNodeOnlyGatewayInfo({ daemon: { installed: false }, node: { installed: true, loaded: true, externallyManaged: false, runtimeShort: "running (pid 4321)", }, }), ).resolves.toEqual({ gatewayTarget: "(gateway address unknown)", gatewayValue: "node → (gateway address unknown) · no local gateway", connectionDetails: [ "Node-only mode detected", "Local gateway: not expected on this machine", "Remote gateway target: (gateway address unknown)", "Inspect the remote gateway host for live channel and health details.", ].join("\n"), }); }); });