import { describe, it, expect, beforeEach, afterEach } from "vitest"; import { JSDOM } from "jsdom"; import { renderRawHtml, shouldExecute, canEdit } from "./render-raw-html"; // jsdom does NOT execute ", ); // The re-created inline script ran inside the jsdom window. expect((dom.window as unknown as Record).__htmlEmbedFlag).toBe( true, ); // The non-script markup is preserved. expect(container.querySelector("div")?.textContent).toBe("hello"); }); it("copies src/async/defer onto a re-created external ', ); const script = container.querySelector("script"); expect(script).not.toBeNull(); expect(script?.getAttribute("src")).toBe("https://example.com/t.js"); expect(script?.hasAttribute("async")).toBe(true); expect(script?.hasAttribute("defer")).toBe(true); }); it("clears the container when the source is empty", () => { container.innerHTML = "

stale

"; renderRawHtml(container, ""); expect(container.innerHTML).toBe(""); }); it("clears prior content first on a re-render with new source", () => { const win = dom.window as unknown as Record; renderRawHtml( container, "one", ); expect(win.__htmlEmbedCount).toBe(1); expect(container.querySelector("#first")).not.toBeNull(); renderRawHtml( container, "two", ); // Prior content is gone; only the new render remains. expect(container.querySelector("#first")).toBeNull(); expect(container.querySelector("#second")).not.toBeNull(); expect(win.__htmlEmbedCount).toBe(2); }); }); describe("shouldExecute (execution policy)", () => { it("read-only executes regardless of the workspace toggle", () => { // isEditable=false → the server already gated the content. expect(shouldExecute(false, false)).toBe(true); expect(shouldExecute(false, true)).toBe(true); }); it("editable + toggle OFF does NOT execute", () => { expect(shouldExecute(true, false)).toBe(false); }); it("editable + toggle ON executes", () => { expect(shouldExecute(true, true)).toBe(true); }); }); describe("canEdit (edit policy)", () => { it("a member (non-admin) can never edit", () => { expect(canEdit(true, false, true)).toBe(false); expect(canEdit(false, false, true)).toBe(false); }); it("an admin with the toggle OFF cannot edit", () => { expect(canEdit(true, true, false)).toBe(false); }); it("an admin with the toggle ON in editable mode can edit", () => { expect(canEdit(true, true, true)).toBe(true); }); it("an admin in read-only mode cannot edit (no edit affordance)", () => { expect(canEdit(false, true, true)).toBe(false); }); });