Files
bitvid/tests/e2e/video-modal-share-bug.spec.ts
T
google-labs-jules[bot] afa231da3e Fix: Enable video modal share button when source is available
The share button in the video modal was not being enabled correctly because `updateSourceAvailability` returned early if `sourceToggleContainer` was missing, skipping the `setShareEnabled` call.

This change ensures `setShareEnabled` is called based on `hasUrl` or `hasMagnet` before checking for `sourceToggleContainer`.

Added a regression test `tests/e2e/video-modal-share-bug.spec.ts`.
2026-01-23 04:51:14 +00:00

68 lines
2.2 KiB
TypeScript

import { expect, test } from "@playwright/test";
import { applyReducedMotion, failOnConsoleErrors } from "./helpers/uiTestUtils";
test.describe("video modal share button", () => {
test("opens the share menu when clicked", async ({ page }) => {
await applyReducedMotion(page);
await page.goto("/components/video-modal.html", { waitUntil: "networkidle" });
await page.addScriptTag({
type: "module",
content: `
import { VideoModal } from "/js/ui/components/VideoModal.js";
// Mock dependencies
const mockSetGlobalModalState = (name, isOpen) => {
console.log(\`setGlobalModalState: \${name} = \${isOpen}\`);
};
const mockMediaLoader = {
observe: () => {},
unobserve: () => {},
};
const videoModal = new VideoModal({
document: document,
setGlobalModalState: mockSetGlobalModalState,
mediaLoader: mockMediaLoader,
});
// Force loaded state and hydrate
const playerModal = document.getElementById("playerModal");
if (playerModal) {
videoModal.loaded = true;
videoModal.hydrate(playerModal);
// Mock an active video so the share menu has data
videoModal.activeVideo = {
id: "test-video-id",
title: "Test Video",
url: "https://example.com/video.mp4",
magnet: "magnet:?xt=urn:btih:test",
};
// Open the modal
videoModal.open(videoModal.activeVideo);
}
window.__videoModal = videoModal;
`,
});
// Ensure modal is visible
const modal = page.locator("#playerModal");
await expect(modal).not.toHaveClass(/hidden/);
// Click share button
const shareBtn = page.locator("#shareBtn");
await expect(shareBtn).toBeVisible();
await shareBtn.click();
// Expect popover to be open
// The popover engine adds data-popover-state="open" to the panel
const popoverPanel = page.locator('[data-menu="video-share"]');
await expect(popoverPanel).toBeVisible();
await expect(popoverPanel).toHaveAttribute("data-popover-state", "open");
});
});