From 16731e413579b01939c605ea847cf9cf0cc70a05 Mon Sep 17 00:00:00 2001 From: npub1mn7jgtj4w2pd0g0zeuhxsa6jy6p0rewxz4kujt98my82ahfmp72sxjexk7 Date: Wed, 10 Jun 2026 20:33:30 -0400 Subject: [PATCH] test(desktop): add Playwright screenshot spec for reminders UI Captures 4 screenshots verifying the NIP-ER reminder feature renders correctly: sidebar nav item, message action menu, time-picker dialog, and empty reminders panel. Registered in the smoke project. Co-authored-by: Will Pfleger Signed-off-by: Will Pfleger --- desktop/playwright.config.ts | 1 + .../tests/e2e/reminders-screenshots.spec.ts | 94 +++++++++++++++++++ 2 files changed, 95 insertions(+) create mode 100644 desktop/tests/e2e/reminders-screenshots.spec.ts diff --git a/desktop/playwright.config.ts b/desktop/playwright.config.ts index 526589e57..5710b1094 100644 --- a/desktop/playwright.config.ts +++ b/desktop/playwright.config.ts @@ -37,6 +37,7 @@ export default defineConfig({ "**/workflows.spec.ts", "**/identity-archive.spec.ts", "**/identity-archive-hide.spec.ts", + "**/reminders-screenshots.spec.ts", ], use: { ...devices["Desktop Chrome"], diff --git a/desktop/tests/e2e/reminders-screenshots.spec.ts b/desktop/tests/e2e/reminders-screenshots.spec.ts new file mode 100644 index 000000000..36610a2fb --- /dev/null +++ b/desktop/tests/e2e/reminders-screenshots.spec.ts @@ -0,0 +1,94 @@ +import { expect, test } from "@playwright/test"; + +import { installMockBridge } from "../helpers/bridge"; + +const SHOTS = "test-results/reminders"; + +test.describe("reminders screenshots", () => { + test.beforeEach(async ({ page }) => { + await installMockBridge(page); + }); + + test("01 — sidebar shows Reminders nav item", async ({ page }) => { + await page.goto("/"); + await page.getByTestId("channel-general").click(); + await expect(page.getByTestId("chat-title")).toHaveText("general"); + + const remindersNav = page.getByTestId("open-reminders-view"); + await expect(remindersNav).toBeVisible(); + + await page.screenshot({ + path: `${SHOTS}/01-sidebar-reminders-nav.png`, + clip: { x: 0, y: 0, width: 256, height: 720 }, + }); + }); + + test("02 — message action menu shows Remind me later", async ({ page }) => { + await page.goto("/"); + await page.getByTestId("channel-general").click(); + await expect(page.getByTestId("chat-title")).toHaveText("general"); + + const messageRow = page.getByTestId("message-row").first(); + await messageRow.hover(); + + const moreActionsButton = messageRow.getByRole("button", { + name: "More actions", + }); + await expect(moreActionsButton).toBeVisible(); + await moreActionsButton.click(); + + const remindItem = page.getByRole("menuitem", { + name: "Remind me later", + }); + await expect(remindItem).toBeVisible(); + + await page.screenshot({ + path: `${SHOTS}/02-message-action-remind-later.png`, + }); + }); + + test("03 — Remind me later dialog", async ({ page }) => { + await page.goto("/"); + await page.getByTestId("channel-general").click(); + await expect(page.getByTestId("chat-title")).toHaveText("general"); + + const messageRow = page.getByTestId("message-row").first(); + await messageRow.hover(); + + const moreActionsButton = messageRow.getByRole("button", { + name: "More actions", + }); + await moreActionsButton.click(); + + const remindItem = page.getByRole("menuitem", { + name: "Remind me later", + }); + await remindItem.click(); + + // Wait for the dialog to appear + const dialog = page.getByRole("dialog"); + await expect(dialog).toBeVisible(); + await expect(dialog.getByText("Remind me later")).toBeVisible(); + await expect(dialog.getByText("In 30 minutes")).toBeVisible(); + + await page.screenshot({ + path: `${SHOTS}/03-remind-me-later-dialog.png`, + }); + }); + + test("04 — Reminders panel empty state", async ({ page }) => { + await page.goto("/"); + await page.getByTestId("channel-general").click(); + await expect(page.getByTestId("chat-title")).toHaveText("general"); + + // Navigate to reminders via sidebar button + await page.getByTestId("open-reminders-view").click(); + + // Wait for the panel to render (empty state) + await expect(page.getByText("No pending reminders")).toBeVisible(); + + await page.screenshot({ + path: `${SHOTS}/04-reminders-panel-empty.png`, + }); + }); +});