mirror of
https://github.com/PR0M3TH3AN/bitvid.git
synced 2026-10-27 07:52:24 +00:00
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:
1 parent
91b45abf9a
commit
cf1c81e61e
3 files changed
+21
-25
No files matched your search
@@ -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) =>
|
||||
|
||||
@@ -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";
|
||||
|
||||
@@ -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 {
|
||||
|
||||
Reference in new issue
Block a user