Merge pull request #1770 from PR0M3TH3AN/fix-test-failures-modal-polyfill-10908485332224060753

Fix video modal test failures (polyfills & selector update)
This commit is contained in:
thePR0M3TH3AN authored and GitHub committed 2026-01-26 21:10:53 -05:00
commit c38f96e787
4 files changed
+57 -7

No files matched your search

+6 -4
View File
@@ -705,10 +705,12 @@ export default class ModalManager {
if (this.uploadModal && this.uploadSubmitHandler) {
try {
this.uploadModal.removeEventListener(
"upload:submit",
this.uploadSubmitHandler,
);
if (typeof this.uploadModal.removeEventListener === "function") {
this.uploadModal.removeEventListener(
"upload:submit",
this.uploadSubmitHandler,
);
}
} catch (error) {
devLogger.warn("[ModalManager] Failed to remove upload submit handler:", error);
}
+33
View File
@@ -0,0 +1,33 @@
import { JSDOM } from "jsdom";
const dom = new JSDOM("<!DOCTYPE html><html><body></body></html>", {
url: "https://example.com",
pretendToBeVisual: true,
});
globalThis.window = dom.window;
globalThis.document = dom.window.document;
try {
Object.defineProperty(globalThis, "navigator", {
value: dom.window.navigator,
writable: true,
configurable: true,
});
} catch (e) {
// If we can't overwrite it, we can't.
}
globalThis.HTMLElement = dom.window.HTMLElement;
globalThis.Element = dom.window.Element;
globalThis.Node = dom.window.Node;
// Pre-stub scrollTo
try {
dom.window.scrollTo = () => {};
} catch (e) {}
// Stub pause/load early as well, just in case
if (dom.window.HTMLMediaElement && dom.window.HTMLMediaElement.prototype) {
dom.window.HTMLMediaElement.prototype.pause = () => {};
dom.window.HTMLMediaElement.prototype.load = () => {};
}
+13
View File
@@ -25,6 +25,19 @@ export async function setupModal({ lazyLoad = false } = {}) {
globalThis.window = window;
globalThis.document = document;
globalThis.navigator = window.navigator || { userAgent: "node.js" };
// stub window.scrollTo so floating/popover code doesn't throw
window.scrollTo = () => {};
// jsdom defines HTMLMediaElement but .pause/.load throw "Not implemented".
// Replace with safe no-ops for tests that just depend on calls happening.
if (window.HTMLMediaElement && window.HTMLMediaElement.prototype) {
const proto = window.HTMLMediaElement.prototype;
proto.pause = () => {};
proto.load = () => {};
}
globalThis.HTMLElement = window.HTMLElement;
globalThis.HTMLVideoElement = window.HTMLVideoElement;
globalThis.Element = window.Element;
+5 -3
View File
@@ -1,5 +1,6 @@
import test from "node:test";
import assert from "node:assert/strict";
import "./test-setup.mjs";
import { setupModal } from "./video-modal-accessibility.test.mjs";
@@ -46,7 +47,7 @@ test("VideoModal blurs and restores playback when moderation overlay toggles", a
assert.ok(stage, "video stage should exist");
assert.equal(stage.dataset.visualState, "blurred");
const overlay = document.querySelector("[data-moderation-overlay]");
const overlay = document.querySelector("[data-moderation-bar]");
assert.ok(overlay, "moderation overlay should be rendered");
assert.equal(overlay.hasAttribute("hidden"), false);
@@ -87,7 +88,8 @@ test("VideoModal blurs and restores playback when moderation overlay toggles", a
document.dispatchEvent(overrideSignal);
assert.equal(stage.dataset.visualState, undefined);
assert.equal(overlay.hasAttribute("hidden"), true);
assert.equal(overlay.hasAttribute("hidden"), false);
assert.equal(overlay.dataset.overlayState, "override");
const restoreButton = document.querySelector(
"[data-moderation-action='hide']",
@@ -140,7 +142,7 @@ test("VideoModal blurs and restores playback when moderation overlay toggles", a
assert.ok(stage, "video stage should exist");
assert.equal(stage.dataset.visualState, "blurred");
const overlay = document.querySelector("[data-moderation-overlay]");
const overlay = document.querySelector("[data-moderation-bar]");
assert.ok(overlay, "moderation overlay should be rendered");
assert.equal(overlay.hasAttribute("hidden"), false);