/** Check del componente degli avvisi in Home: `bun test/unit/avviso.test.ts`. */ import assert from "node:assert/strict"; import { createElement } from "react"; import { renderToStaticMarkup } from "react-dom/server"; import { CalendarClock, FileX } from "lucide-react"; import { CorpoAvviso, type TonoAvviso } from "@/components/crapp/Avviso"; const html = (p: Parameters[0]) => renderToStaticMarkup(createElement(CorpoAvviso, p)); // --- ogni tono ha il suo colore, e l'icona è decorativa (il titolo dice già tutto) --- const classi: Record = { critico: "bg-destructive", attenzione: "bg-warning", scaduto: "bg-primary", azione: "bg-accent-grad", }; for (const [tono, classe] of Object.entries(classi) as [TonoAvviso, string][]) { const h = html({ tono, icona: FileX, titolo: "Titolo" }); assert.ok(h.includes(classe), `${tono}: classe colore ${classe}`); assert.ok(h.includes("Titolo"), `${tono}: titolo`); assert.ok(h.includes('aria-hidden="true"'), `${tono}: icona nascosta ai lettori di schermo`); } // --- testi: un paragrafo per frase --------------------------------------------------- const conTesti = html({ tono: "attenzione", icona: CalendarClock, titolo: "Certificato in scadenza", testi: ["Prima frase.", "Seconda frase."], }); assert.equal((conTesti.match(/