import { afterEach, describe, expect, it } from "vitest"; import { applyResult, removeOrphanedPlaceholders, restore, selectFilterLabel } from "../src/content/filter"; import { DEFAULT_SETTINGS } from "../src/shared/types"; const scores = { toxicity: .91, severe_toxicity: .1, obscene: .3, threat: .2, insult: .8, identity_attack: .1, sexual_explicit: .1 }; describe("content filtering", () => { afterEach(() => document.body.replaceChildren()); it("collapses toxic content and restores it", () => { const element = document.createElement("article"); document.body.append(element); applyResult(element, { requestId: "1", id: "1", textHash: "x", scores, navigationId: "n" }, DEFAULT_SETTINGS); expect(element.style.display).toBe("none"); expect(document.querySelector("[data-vibeguard-placeholder]")).not.toBeNull(); restore(element); expect(element.style.display).toBe(""); expect(document.querySelector("[data-vibeguard-placeholder]")).toBeNull(); }); it("preserves the original display value when filtering is reconciled repeatedly", () => { const element = document.createElement("article"); document.body.append(element); const result = { requestId: "1", id: "1", textHash: "x", scores, navigationId: "n" }; applyResult(element, result, DEFAULT_SETTINGS); applyResult(element, result, DEFAULT_SETTINGS); restore(element); expect(element.style.display).toBe(""); }); it("uses the highest enabled category above the threshold", () => { const result = { requestId: "1", id: "1", textHash: "x", scores, navigationId: "n" }; expect(selectFilterLabel(result, { ...DEFAULT_SETTINGS, enabledLabels: ["insult", "threat"], threshold: .5 })).toEqual({ label: "insult", probability: .8 }); expect(selectFilterLabel(result, { ...DEFAULT_SETTINGS, enabledLabels: [], threshold: .5 })).toBeUndefined(); }); it("removes placeholders no longer paired with the current post element", () => { const stale = document.createElement("div"); const orphan = document.createElement("div"); orphan.setAttribute("data-vibeguard-placeholder-for", "mastodon:1"); const current = document.createElement("article"); const currentPlaceholder = document.createElement("div"); currentPlaceholder.setAttribute("data-vibeguard-placeholder-for", "mastodon:1"); document.body.append(stale, orphan, current, currentPlaceholder); removeOrphanedPlaceholders("mastodon:1", [current]); expect(orphan.isConnected).toBe(false); expect(currentPlaceholder.isConnected).toBe(true); }); });