import { describe, expect, test } from "vitest"; import { isTemplateLike, pickTemplateExport, } from "../../src/utils/pick-template-export.js"; const sampleTemplate = { $schema: "https://libauth.org/schemas/wallet-template-v0.schema.json", name: "Sample", roles: { owner: { name: "Owner" } }, }; describe("pickTemplateExport", () => { test("isTemplateLike accepts objects with schema, name, and roles", () => { expect(isTemplateLike(sampleTemplate)).toBe(true); expect(isTemplateLike(null)).toBe(false); expect(isTemplateLike({ name: "Missing schema" })).toBe(false); }); test("prefers default export when template-like", () => { const picked = pickTemplateExport({ default: sampleTemplate, otherTemplate: { ...sampleTemplate, name: "Other", }, }); expect(picked).toBe(sampleTemplate); }); test("uses a single named export when no default export exists", () => { const picked = pickTemplateExport({ p2pkhTemplate: sampleTemplate, }); expect(picked).toBe(sampleTemplate); }); test("throws when multiple template exports exist", () => { expect(() => pickTemplateExport({ firstTemplate: sampleTemplate, secondTemplate: { ...sampleTemplate, name: "Second" }, }), ).toThrow(/Multiple template exports found/); }); test("throws when no template export exists", () => { expect(() => pickTemplateExport({ notATemplate: { foo: "bar" }, }), ).toThrow(/No XOTemplate export found/); }); });