Files
WRNexusJS/packages/block-editor/test/preview-html.test.ts
T
Clintchiz 41383960f8
Quality / quality (ubuntu-latest) (push) Canceled after 0s
Quality / quality (windows-latest) (push) Canceled after 0s
Keep isolated page import compatible with test type checking
2026-10-01 20:21:01 +05:30

27 lines
1.5 KiB
TypeScript

import { expect, test } from "bun:test";
import { JSDOM } from "jsdom";
import { builderPreviewHTML } from "../src/preview-html.ts";
test("preview sanitization preserves email layout and editor markers but removes executable content", () => {
const { window } = new JSDOM("");
const result = String(builderPreviewHTML('<html><head><style>td{padding:12px}</style></head><body><table data-block-id="one"><tr><td><img src="https://example.com/a.png" onerror="alert(1)"><a href="javascript:alert(1)">Hello</a></td></tr></table><script>alert(1)</script><iframe src="https://example.com"></iframe></body></html>', window.document as unknown as Document));
expect(result).toContain('data-block-id="one"');
expect(result).toContain('<table');
expect(result).toContain('<style>');
expect(result).not.toMatch(/onerror|javascript:|<script|<iframe/);
window.close();
});
test("separately bundled preview modules reuse one realm sanitizer", async () => {
const { window } = new JSDOM("");
const doc = window.document as unknown as Document;
builderPreviewHTML("<p>First page</p>", doc);
const key = Symbol.for("wrnexus.block-editor.preview-sanitizer");
const first = (window as any)[key];
const secondPageModule = "../src/preview-html.ts?second-page";
const secondModule = await import(secondPageModule);
expect(String(secondModule.builderPreviewHTML("<p>Second page</p>", doc))).toContain("Second page");
expect((window as any)[key]).toBe(first);
window.close();
});