/** * sanitizeSkillIcon unit tests: security checks before inline rendering of a * custom Skill icon (raw icon.svg content) — anything containing root / missing content is also * rejected; a clean line-art SVG passes through as-is (after trim). */ import { describe, expect, it } from "vitest"; import { sanitizeSkillIcon } from "../src/features/skills/skill-icon"; const CLEAN = '' + ''; describe("sanitizeSkillIcon", () => { it("a clean SVG passes (returned as-is after trim so inline rendering inherits currentColor)", () => { expect(sanitizeSkillIcon(CLEAN)).toBe(CLEAN); expect(sanitizeSkillIcon(`\n ${CLEAN}\n`)).toBe(CLEAN); }); it("missing / empty string / whitespace falls back to null", () => { expect(sanitizeSkillIcon(undefined)).toBeNull(); expect(sanitizeSkillIcon("")).toBeNull(); expect(sanitizeSkillIcon(" ")).toBeNull(); }); it("a non- root is rejected (including arbitrary HTML posing as text)", () => { expect(sanitizeSkillIcon("
not svg
")).toBeNull(); expect(sanitizeSkillIcon("plain text")).toBeNull(); expect(sanitizeSkillIcon(`${CLEAN}`)).toBeNull(); // is not an root (the tag name must end with whitespace or >). expect(sanitizeSkillIcon('')).toBeNull(); }); it("containing