From 02b6ec6adbda806ce77de31b4ffa76e2649b8be5 Mon Sep 17 00:00:00 2001 From: ginnoir Date: Sat, 4 Jul 2026 11:53:07 -0500 Subject: [PATCH] test: cover all quick-add create dialogs in e2e Add data-driven FAB tests for all ten quick-add actions plus cmd-k new event. --- tests/e2e/quick-add.spec.ts | 125 ++++++++++++++++++++++++++++++++---- 1 file changed, 111 insertions(+), 14 deletions(-) diff --git a/tests/e2e/quick-add.spec.ts b/tests/e2e/quick-add.spec.ts index 0876c0c..7ee21e0 100644 --- a/tests/e2e/quick-add.spec.ts +++ b/tests/e2e/quick-add.spec.ts @@ -10,21 +10,118 @@ async function ensureSignedIn(page: Page) { await expect(page.getByRole("heading", { name: "Dashboard" })).toBeVisible(); } +async function openFabAction(page: Page, actionLabel: string) { + await page.getByRole("button", { name: "Quick add" }).click(); + await expect(page.getByRole("dialog", { name: "Quick add" })).toBeVisible(); + await page.getByRole("button", { name: actionLabel, exact: true }).click(); + await expect(page).toHaveURL("/"); +} + +type FabQuickAddCase = { + action: string; + dialog: string; + assertCreateControls: (page: Page) => Promise; +}; + +const fabQuickAddCases: FabQuickAddCase[] = [ + { + action: "New event", + dialog: "New event", + assertCreateControls: async (page) => { + await expect(page.getByLabel("Title")).toBeVisible(); + await expect(page.getByRole("button", { name: "Save event" })).toBeVisible(); + }, + }, + { + action: "New calendar", + dialog: "New calendar", + assertCreateControls: async (page) => { + await expect(page.getByLabel("Name")).toBeVisible(); + await expect(page.getByRole("button", { name: "Create calendar" })).toBeVisible(); + }, + }, + { + action: "Add to shopping", + dialog: "Add to shopping", + assertCreateControls: async (page) => { + await expect(page.getByLabel("Item")).toBeVisible(); + await expect(page.getByRole("button", { name: "Add" })).toBeVisible(); + }, + }, + { + action: "Add to tasks", + dialog: "Add to tasks", + assertCreateControls: async (page) => { + await expect(page.getByLabel("Task")).toBeVisible(); + await expect(page.getByRole("button", { name: "Add" })).toBeVisible(); + }, + }, + { + action: "New list", + dialog: "New list", + assertCreateControls: async (page) => { + await expect(page.getByLabel("Type")).toBeVisible(); + await expect(page.getByLabel("Name")).toBeVisible(); + await expect(page.getByRole("button", { name: "Create list" })).toBeVisible(); + }, + }, + { + action: "New note", + dialog: "New note", + assertCreateControls: async (page) => { + await expect(page.getByLabel("Title")).toBeVisible(); + await expect(page.getByLabel("Body")).toBeVisible(); + await expect(page.getByRole("button", { name: "Save note" })).toBeVisible(); + }, + }, + { + action: "Add plant", + dialog: "Add plant", + assertCreateControls: async (page) => { + await expect(page.getByLabel("Name")).toBeVisible(); + await expect(page.getByRole("button", { name: "Create" })).toBeVisible(); + }, + }, + { + action: "Add container", + dialog: "Add container", + assertCreateControls: async (page) => { + await expect(page.getByLabel("Name")).toBeVisible(); + await expect(page.getByLabel("Type")).toBeVisible(); + await expect(page.getByRole("button", { name: "Create" })).toBeVisible(); + }, + }, + { + action: "Log plant care", + dialog: "Log plant care", + assertCreateControls: async (page) => { + const plantField = page.getByLabel("Plant"); + const noPlants = page.getByText("No plants yet"); + await expect(plantField.or(noPlants)).toBeVisible(); + if (await plantField.isVisible()) { + await expect(page.getByRole("button", { name: "Log care" })).toBeVisible(); + } + }, + }, + { + action: "Record bang", + dialog: "Record a bang", + assertCreateControls: async (page) => { + await expect(page.getByLabel("Date")).toBeVisible(); + await expect(page.getByRole("button", { name: "Record it" })).toBeVisible(); + }, + }, +]; + test.describe("quick-add create UI", () => { - test("FAB opens new note dialog on dashboard", async ({ page }) => { - await ensureSignedIn(page); - - await page.getByRole("button", { name: "Quick add" }).click(); - await expect(page.getByRole("dialog", { name: "Quick add" })).toBeVisible(); - - await page.getByRole("button", { name: "New note" }).click(); - - await expect(page).toHaveURL("/"); - await expect(page.getByRole("dialog", { name: "New note" })).toBeVisible(); - await expect(page.getByLabel("Title")).toBeVisible(); - await expect(page.getByLabel("Body")).toBeVisible(); - await expect(page.getByRole("button", { name: "Save note" })).toBeVisible(); - }); + for (const { action, dialog, assertCreateControls } of fabQuickAddCases) { + test(`FAB opens ${action} create dialog on dashboard`, async ({ page }) => { + await ensureSignedIn(page); + await openFabAction(page, action); + await expect(page.getByRole("dialog", { name: dialog })).toBeVisible(); + await assertCreateControls(page); + }); + } test("command palette opens new event dialog on dashboard", async ({ page }) => { await ensureSignedIn(page);