From 1df91c1fe9c25b2ac609e5530bb609fac94eb927 Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Thu, 5 Feb 2026 23:10:35 +0000 Subject: [PATCH] Fix moderation fixture click timeout by providing dummy URLs to prevent card hiding - Update `docs/moderation/fixtures/index.html` to add `url` to fixture videos, ensuring they are not hidden by `updateVideoCardSourceVisibility` logic. - Add `onModerationHide` handler in fixture to support "Restore default moderation" action. - Uncomment visibility checks and click actions in `tests/visual/moderation.spec.ts` to enable full test flow. Co-authored-by: PR0M3TH3AN <53631862+PR0M3TH3AN@users.noreply.github.com> --- docs/moderation/fixtures/index.html | 30 ++++++++++++++++++++++++----- tests/visual/moderation.spec.ts | 24 ++++++----------------- 2 files changed, 31 insertions(+), 23 deletions(-) diff --git a/docs/moderation/fixtures/index.html b/docs/moderation/fixtures/index.html index c18e1f2a..80b1de88 100644 --- a/docs/moderation/fixtures/index.html +++ b/docs/moderation/fixtures/index.html @@ -75,7 +75,8 @@ id: "1".repeat(64), title: "Fixture: Blurred Preview", pubkey: "a".repeat(64), - thumbnail: "/assets/jpg/video-thumbnail-fallback.jpg" + thumbnail: "/assets/jpg/video-thumbnail-fallback.jpg", + url: "https://example.com/video.mp4" }, moderation: { blockAutoplay: true, @@ -103,7 +104,8 @@ id: "2".repeat(64), title: "Fixture: Autoplay Blocked", pubkey: "e".repeat(64), - thumbnail: "/assets/jpg/video-thumbnail-fallback.jpg" + thumbnail: "/assets/jpg/video-thumbnail-fallback.jpg", + url: "https://example.com/video.mp4" }, moderation: { blockAutoplay: true, @@ -127,7 +129,8 @@ id: "3".repeat(64), title: "Fixture: Override Persistence", pubkey: "f".repeat(64), - thumbnail: "/assets/jpg/video-thumbnail-fallback.jpg" + thumbnail: "/assets/jpg/video-thumbnail-fallback.jpg", + url: "https://example.com/video.mp4" }, moderation: { blockAutoplay: true, @@ -152,7 +155,8 @@ id: "4".repeat(64), title: "Fixture: Trusted Report Hide", pubkey: "aa".repeat(32), - thumbnail: "/assets/jpg/video-thumbnail-fallback.jpg" + thumbnail: "/assets/jpg/video-thumbnail-fallback.jpg", + url: "https://example.com/video.mp4" }, moderation: { blockAutoplay: true, @@ -177,7 +181,8 @@ id: "5".repeat(64), title: "Fixture: Trusted Mute Hide", pubkey: "bb".repeat(32), - thumbnail: "/assets/jpg/video-thumbnail-fallback.jpg" + thumbnail: "/assets/jpg/video-thumbnail-fallback.jpg", + url: "https://example.com/video.mp4" }, moderation: { blockAutoplay: false, @@ -607,6 +612,21 @@ } return true; }; + + card.onModerationHide = () => { + overrides = setOverride(overrides, video.id, { showAnyway: false }); + refreshModeration(); + try { + document.dispatchEvent( + new CustomEvent("video:moderation-hide", { + detail: { video } + }) + ); + } catch { + /* ignore fixture event errors */ + } + return true; + }; } const root = card.getRoot(); diff --git a/tests/visual/moderation.spec.ts b/tests/visual/moderation.spec.ts index 945d04d8..d5e0516c 100644 --- a/tests/visual/moderation.spec.ts +++ b/tests/visual/moderation.spec.ts @@ -89,14 +89,11 @@ test.describe("moderation fixtures", () => { await expect(overrideCard).toHaveAttribute("data-autoplay-policy", "blocked"); await expect(thumbnail).toHaveAttribute("data-thumbnail-state", "blurred"); - // TODO: Investigate why visibility check fails in fixture environment (headless) - // await expect(showAnywayButton).toBeVisible(); + await expect(showAnywayButton).toBeVisible(); await expect(restoreButtonQuery).toHaveCount(0); - // TODO: Investigate why click times out in fixture environment (headless) - // await showAnywayButton.click({ force: true }); + await showAnywayButton.click(); - /* await expect(overrideCard).toHaveAttribute( "data-moderation-override", "show-anyway" @@ -143,7 +140,6 @@ test.describe("moderation fixtures", () => { await expect( reloadedCard.getByRole("button", { name: "Show anyway" }) ).toBeVisible(); - */ }); test("trusted report hide fixture supports show anyway override", async ({ page }) => { @@ -166,14 +162,11 @@ test.describe("moderation fixtures", () => { await expect(hideCard).toHaveAttribute("data-moderation-hide-reason", "trusted-report-hide"); await expect(hideCard).toHaveAttribute("data-moderation-hide-trusted-report-count", "3"); await expect(badge).toContainText("Hidden · 3 trusted spam reports"); - // TODO: Investigate visibility check failure (fails with 0x0 size in headless) - // await expect(showAnywayButton).toBeVisible(); + await expect(showAnywayButton).toBeVisible(); await expect(restoreButtonQuery).toHaveCount(0); - // TODO: Investigate click timeout failure - // await showAnywayButton.click({ force: true }); + await showAnywayButton.click(); - /* await expect(hideCard).not.toHaveAttribute("data-moderation-hidden", "true"); await expect(hideCard).toHaveAttribute("data-moderation-override", "show-anyway"); await expect(hideCard.locator('[data-moderation-badge="true"]')).toContainText( @@ -190,7 +183,6 @@ test.describe("moderation fixtures", () => { await expect(hideCard).toHaveAttribute("data-moderation-hidden", "true"); await expect(hideCard).not.toHaveAttribute("data-moderation-override", "show-anyway"); await expect(hideCard.getByRole("button", { name: "Show anyway" })).toBeVisible(); - */ }); test("trusted mute hide fixture annotates mute reason and can be overridden", async ({ @@ -219,14 +211,11 @@ test.describe("moderation fixtures", () => { await expect(muteCard).toHaveAttribute("data-moderation-trusted-mute-count", "1"); await expect(badge).toContainText("Hidden · 1 trusted mute"); await expect(thumbnail).toHaveAttribute("data-thumbnail-state", "blurred"); - // TODO: Investigate visibility check failure - // await expect(showAnywayButton).toBeVisible(); + await expect(showAnywayButton).toBeVisible(); await expect(restoreButtonQuery).toHaveCount(0); - // TODO: Investigate click timeout failure - // await showAnywayButton.click({ force: true }); + await showAnywayButton.click(); - /* await expect(muteCard).not.toHaveAttribute("data-moderation-hidden", "true"); await expect(muteCard).toHaveAttribute("data-moderation-override", "show-anyway"); await expect(muteCard.locator('[data-moderation-badge="true"]')).toContainText( @@ -245,6 +234,5 @@ test.describe("moderation fixtures", () => { await expect(muteCard).not.toHaveAttribute("data-moderation-override", "show-anyway"); await expect(thumbnail).toHaveAttribute("data-thumbnail-state", "blurred"); await expect(muteCard.getByRole("button", { name: "Show anyway" })).toBeVisible(); - */ }); });