@@ -0,0 +1,39 @@
|
||||
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);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user