fix(tests): resolve JSDOM errors and tag sorting failures

- Update `tests/video-modal-accessibility.test.mjs` to unconditionally stub `HTMLMediaElement` methods (`pause`, `load`), fixing "Not implemented" errors in JSDOM.
- Refactor `VideoModal.normalizeVideoTags` to preserve tag casing while normalizing for deduplication (lowercase + strip #) and ensuring correct display format.
- Update `js/ui/components/tagPillList.js` to conditionally prepend `#` only if missing, preventing double-hashing (e.g., `##tag`).
- Remove unused `normalizeHashtag` import in `VideoModal.js`.
- Verify fixes with `tests/video-modal-tags.test.mjs`.

Co-authored-by: PR0M3TH3AN <[email protected]>
This commit is contained in:
google-labs-jules[bot]andPR0M3TH3AN committed 2026-01-27 03:17:15 +00:00
1 parent 91b45abf9a
commit cf1c81e61e
3 files changed
+21 -25

No files matched your search

+13 -4
View File
@@ -38,7 +38,6 @@ import {
formatShortNpub as defaultFormatShortNpub,
} from "../../utils/formatters.js";
import { sanitizeProfileMediaUrl } from "../../utils/profileMedia.js";
import { normalizeHashtag } from "../../utils/hashtagNormalization.js";
import { getBreakpointLg } from "../../designSystem/metrics.js";
import { LinkPreviewService } from "../../services/linkPreviewService.js";
import {
@@ -3224,19 +3223,29 @@ export class VideoModal {
}
const raw = typeof entry === "string" ? entry : String(entry ?? "");
const trimmed = normalizeHashtag(raw);
const trimmed = raw.trim();
if (!trimmed) {
continue;
}
const key = trimmed.toLocaleLowerCase();
let key = trimmed.toLowerCase();
if (key.startsWith("#")) {
key = key.slice(1);
}
if (!key) {
continue;
}
if (seen.has(key)) {
continue;
}
seen.add(key);
normalized.push(trimmed);
const display = trimmed.startsWith("#") ? trimmed : `#${trimmed}`;
normalized.push(display);
}
return normalized.sort((a, b) =>
+3 -2
View File
@@ -63,11 +63,12 @@ function createTagButton({ doc, tag, onTagActivate, getTagState }) {
button.type = "button";
button.classList.add("pill", "video-tag-pill", "focus-ring");
button.dataset.tag = tag;
button.title = `#${tag}`;
const displayTag = tag.startsWith("#") ? tag : `#${tag}`;
button.title = displayTag;
const label = doc.createElement("span");
label.className = "video-tag-pill__label";
label.textContent = `#${tag}`;
label.textContent = displayTag;
const icon = doc.createElement("span");
icon.className = "video-tag-pill__icon";
+5 -19
View File
@@ -33,9 +33,8 @@ export async function setupModal({ lazyLoad = false } = {}) {
// 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 = () => {};
window.HTMLMediaElement.prototype.pause = function () {};
window.HTMLMediaElement.prototype.load = function () {};
}
globalThis.HTMLElement = window.HTMLElement;
@@ -47,15 +46,6 @@ export async function setupModal({ lazyLoad = false } = {}) {
globalThis.Node = window.Node;
globalThis.EventTarget = window.EventTarget;
if (typeof window.HTMLMediaElement !== "undefined") {
window.HTMLMediaElement.prototype.pause = function () {};
window.HTMLMediaElement.prototype.load = function () {};
}
if (typeof window.HTMLVideoElement !== "undefined") {
window.HTMLVideoElement.prototype.pause = function () {};
window.HTMLVideoElement.prototype.load = function () {};
}
try {
Object.defineProperty(globalThis, "navigator", {
value: window.navigator,
@@ -458,13 +448,9 @@ async function setupPlaybackHarness() {
globalThis.Node = window.Node;
globalThis.EventTarget = window.EventTarget;
if (typeof window.HTMLMediaElement !== "undefined") {
if (!window.HTMLMediaElement.prototype.pause) {
window.HTMLMediaElement.prototype.pause = function () {};
}
if (!window.HTMLMediaElement.prototype.load) {
window.HTMLMediaElement.prototype.load = function () {};
}
if (window.HTMLMediaElement && window.HTMLMediaElement.prototype) {
window.HTMLMediaElement.prototype.pause = function () {};
window.HTMLMediaElement.prototype.load = function () {};
}
try {