import { describe, expect, it } from "vitest"; import { resolveNodeFromNodeList, resolveNodeIdFromNodeList } from "./node-resolve.js"; describe("shared/node-resolve", () => { const nodes = [ { nodeId: "mac-123", displayName: "Mac Studio", connected: true }, { nodeId: "pi-456", displayName: "Raspberry Pi", connected: false }, ]; it("resolves node ids through candidate matching", () => { expect(resolveNodeIdFromNodeList(nodes, "Mac Studio")).toBe("mac-123"); }); it("supports optional default-node selection when query is blank", () => { expect( resolveNodeIdFromNodeList(nodes, " ", { allowDefault: true, pickDefaultNode: (entries) => entries.find((entry) => entry.connected) ?? null, }), ).toBe("mac-123"); }); it("passes the original node list to the default picker", () => { expect( resolveNodeIdFromNodeList(nodes, "", { allowDefault: true, pickDefaultNode: (entries) => { expect(entries).toBe(nodes); return entries[1] ?? null; }, }), ).toBe("pi-456"); }); it("still throws when default selection is disabled or returns null", () => { expect(() => resolveNodeIdFromNodeList(nodes, " ")).toThrow(/node required/); expect(() => resolveNodeIdFromNodeList(nodes, "", { allowDefault: true, pickDefaultNode: () => null, }), ).toThrow(/node required/); }); it("returns the full node object and falls back to a synthetic entry when needed", () => { expect(resolveNodeFromNodeList(nodes, "pi-456")).toEqual(nodes[1]); expect( resolveNodeFromNodeList([], "", { allowDefault: true, pickDefaultNode: () => ({ nodeId: "synthetic-1" }), }), ).toEqual({ nodeId: "synthetic-1" }); }); });