import { describe, expect, test } from "bun:test"; import sanitizeRichTextHtml from "./sanitize-rich-text-html"; describe("sanitizeRichTextHtml", () => { test("returns an empty string for empty input", () => { expect(sanitizeRichTextHtml({ html: "" })).toBe(""); expect(sanitizeRichTextHtml({ html: null })).toBe(""); expect(sanitizeRichTextHtml({})).toBe(""); }); test("keeps safe formatting", () => { expect( sanitizeRichTextHtml({ html: "

Hello world

", }), ).toBe("

Hello world

"); }); test("strips script tags and their contents", () => { const clean = sanitizeRichTextHtml({ html: `

Hi

`, }); expect(clean).toBe("

Hi

"); expect(clean).not.toContain("script"); }); test("strips event handler attributes", () => { const clean = sanitizeRichTextHtml({ html: `

Hi

`, }); expect(clean).not.toContain("onclick"); expect(clean).not.toContain("onerror"); }); test("strips unsafe URL schemes, including encoded ones", () => { const clean = sanitizeRichTextHtml({ html: [ `a`, `b`, `c`, ].join(""), }); expect(clean).not.toContain("javascript"); expect(clean).not.toContain("data:"); }); test("strips iframes and forms", () => { const clean = sanitizeRichTextHtml({ html: `

ok

`, }); expect(clean).toBe("

ok

"); }); test("adds rel=noopener to links", () => { const clean = sanitizeRichTextHtml({ html: `x`, }); expect(clean).toContain(`rel="noopener noreferrer"`); }); });