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.
This commit is contained in:
+111
-14
@@ -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<void>;
|
||||
};
|
||||
|
||||
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);
|
||||
|
||||
Reference in New Issue
Block a user