import { expect } from "@std/expect"; import { describe, it } from "@std/testing/bdd"; import { isSvgFile, sanitizeSvg } from "./blob"; describe("isSvgFile", () => { it("detects .svg extension", () => { expect(isSvgFile("logo.svg")).toBe(true); }); it("is case-insensitive", () => { expect(isSvgFile("logo.SVG")).toBe(true); expect(isSvgFile("logo.Svg")).toBe(true); }); it("rejects non-svg extensions", () => { expect(isSvgFile("logo.png")).toBe(false); expect(isSvgFile("logo.ico")).toBe(false); expect(isSvgFile("logo.svg.png")).toBe(false); }); }); describe("sanitizeSvg", () => { it("keeps valid SVG content", async () => { const svg = ''; const result = await sanitizeSvg(svg); expect(result).toContain(" tags", async () => { const svg = ''; const result = await sanitizeSvg(svg); expect(result).not.toContain(" { const svg = ''; const result = await sanitizeSvg(svg); expect(result).not.toContain("onclick"); expect(result).toContain(" { const svg = ''; const result = await sanitizeSvg(svg); expect(result).not.toContain("onload"); expect(result).toContain(" { const svg = ''; const result = await sanitizeSvg(svg); expect(result).not.toContain("onerror"); }); it("strips onmouseover and onfocus attributes", async () => { const svg = ''; const result = await sanitizeSvg(svg); expect(result).not.toContain("onmouseover"); expect(result).not.toContain("onfocus"); expect(result).toContain(" { const svg = ''; const result = await sanitizeSvg(svg); expect(result).not.toContain("onanimationend"); expect(result).not.toContain("ontouchstart"); expect(result).toContain(" { const svg = ''; const result = await sanitizeSvg(svg); expect(result).not.toContain("foreignObject"); expect(result).not.toContain(" { const svg = ''; const result = await sanitizeSvg(svg); expect(result).not.toContain("javascript"); }); it("returns empty string for fully malicious SVG", async () => { const svg = ''; const result = await sanitizeSvg(svg); expect(result.trim()).toBe(""); }); it("preserves common SVG elements", async () => { const svg = ` Hello `; const result = await sanitizeSvg(svg); for (const tag of [ "path", "rect", "circle", "ellipse", "line", "polyline", "polygon", "text", "g", "defs", "linearGradient", "stop", ]) { expect(result).toContain(`<${tag}`); } }); });