import { describe, expect, it } from "vitest"; import { defaultTemplate, exportTemplate, importTemplate, mergeContent, validateTemplate, } from "../../src/labels/template"; describe("label template model", () => { it("round-trips a bounded reusable template", () => { const template = defaultTemplate(63.5, 33.9); expect(importTemplate(exportTemplate(template))).toEqual(template); expect(mergeContent("{{name}} / {{missing}}", { name: "Ada" })).toBe( "Ada / ", ); }); it("reports quiet zones and rejects out-of-bounds elements", () => { const template = defaultTemplate(40, 20); const barcode = template.elements.find( (element) => element.kind === "barcode", )!; if (barcode.kind !== "barcode") throw new Error("fixture mismatch"); barcode.quietZoneMm = 0; barcode.xMm = 100; const issues = validateTemplate(template); expect(issues.some((issue) => issue.severity === "warning")).toBe(true); expect(issues.some((issue) => issue.severity === "error")).toBe(true); }); it("rejects malformed imported element collections without iterating them", () => { const malformed = JSON.stringify({ ...defaultTemplate(40, 20), elements: { unexpected: true }, }); expect(() => importTemplate(malformed)).toThrow(/at most 100 elements/iu); }); });