40 lines
1.3 KiB
TypeScript
40 lines
1.3 KiB
TypeScript
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);
|
|
});
|
|
});
|