import { escapeHtml, sanitizeHtml } from "@/lib/sanitize"; import { describe, expect, it } from "vitest"; describe("sanitizeHtml", () => { it("removes script tags", () => { expect(sanitizeHtml('')).not.toContain( " { expect(sanitizeHtml('')).not.toContain( " { const result = sanitizeHtml(''); expect(result).not.toContain("onerror"); }); it("removes onclick handlers", () => { const result = sanitizeHtml(''); expect(result).not.toContain("onclick"); }); it("removes javascript: URIs", () => { const result = sanitizeHtml('link'); expect(result).not.toContain("javascript:"); }); it("removes iframe tags", () => { const result = sanitizeHtml(''); expect(result).not.toContain(" { const result = sanitizeHtml(''); expect(result).not.toContain(" { const result = sanitizeHtml(''); expect(result).not.toContain(" { const result = sanitizeHtml( '
', ); expect(result).not.toContain(" { const safe = "

Hello world

"; const result = sanitizeHtml(safe); expect(result).toContain("

"); expect(result).toContain(""); }); it("handles empty string", () => { expect(sanitizeHtml("")).toBe(""); }); it("handles plain text", () => { expect(sanitizeHtml("Hello world")).toBe("Hello world"); }); it("handles nested malicious tags", () => { const result = sanitizeHtml( "

", ); expect(result).not.toContain(" { it("escapes ampersands", () => { expect(escapeHtml("foo & bar")).toBe("foo & bar"); }); it("escapes less-than", () => { expect(escapeHtml("a < b")).toBe("a < b"); }); it("escapes greater-than", () => { expect(escapeHtml("a > b")).toBe("a > b"); }); it("escapes double quotes", () => { expect(escapeHtml('say "hello"')).toBe("say "hello""); }); it("escapes single quotes", () => { const result = escapeHtml("it's"); expect(result).toContain("&#"); }); it("handles empty string", () => { expect(escapeHtml("")).toBe(""); }); it("handles already safe text", () => { expect(escapeHtml("Hello world")).toBe("Hello world"); }); it("escapes all special chars combined", () => { const result = escapeHtml(""); expect(result).not.toContain("<"); expect(result).not.toContain(">"); expect(result).toContain("&"); }); });