import { describe, it, expect } from "vitest"; import { buildCalloutCss, normalizeCalloutId } from "@/lib/tools/callout"; describe("normalizeCalloutId", () => { it("слагифицирует пробелы и регистр", () => { expect(normalizeCalloutId("My Note ")).toBe("my-note"); }); it("выкидывает недопустимые символы", () => { expect(normalizeCalloutId("Идея!@# 2")).toBe("2"); }); }); describe("buildCalloutCss", () => { it("генерирует css с data-callout и rgb", () => { const r = buildCalloutCss({ id: "idea", title: "Идея", color: "#7C3AED", icon: "lightbulb" }); expect(r.css).toContain('[data-callout="idea"]'); expect(r.css).toContain("--callout-color: 124, 58, 237;"); expect(r.css).toContain("--callout-icon: lucide-lightbulb;"); }); it("поддерживает короткий hex", () => { const r = buildCalloutCss({ id: "x", title: "X", color: "#fff", icon: "star" }); expect(r.css).toContain("--callout-color: 255, 255, 255;"); }); it("кидает на пустом id", () => { expect(() => buildCalloutCss({ id: "!!!", title: "", color: "#000", icon: "x" })).toThrow(); }); it("markdown содержит [!id]", () => { const r = buildCalloutCss({ id: "warn", title: "Внимание", color: "#f00", icon: "alert" }); expect(r.markdown).toContain("> [!warn] Внимание"); }); it("кидает на некорректном HEX (не отдаёт NaN)", () => { expect(() => buildCalloutCss({ id: "x", title: "X", color: "#zz", icon: "star" })).toThrow(); expect(() => buildCalloutCss({ id: "x", title: "X", color: "#1234", icon: "star" })).toThrow(); }); });