import { test, expect } from "@playwright/test"; test("garden plants happy path", async ({ page }) => { const suffix = Date.now().toString(); const plantName = `E2E Plant ${suffix}`; await page.goto("/garden?tab=plants"); await expect(page.getByRole("heading", { name: "Garden" })).toBeVisible(); // Add plant await page.getByRole("link", { name: /add plant/i }).click(); await expect(page).toHaveURL(/\/garden\/plants\/new/); await page.getByLabel("Name").fill(plantName); await page.getByRole("button", { name: /create/i }).click(); await expect(page).toHaveURL(/\/garden\/plants\//); await expect(page.getByRole("heading", { name: plantName })).toBeVisible(); // Edit plant await page.getByRole("link", { name: /edit/i }).click(); await expect(page).toHaveURL(/\/garden\/plants\/.*\/edit/); const updatedName = `${plantName} Updated`; await page.getByLabel("Name").fill(updatedName); await page.getByRole("button", { name: /save/i }).click(); await expect(page).toHaveURL(/\/garden\/plants\//); await expect(page.getByRole("heading", { name: updatedName })).toBeVisible(); // Delete plant await page.getByRole("button", { name: /delete/i }).click(); await page.getByRole("button", { name: /confirm/i }).click(); await expect(page).toHaveURL(/\/garden/); }); test("garden care tracking happy path", async ({ page }) => { const suffix = Date.now().toString(); const plantName = `Care Plant ${suffix}`; // Create a plant to attach care to await page.goto("/garden?tab=plants"); await page.getByRole("link", { name: /add plant/i }).click(); await page.getByLabel("Name").fill(plantName); await page.getByRole("button", { name: /create/i }).click(); await expect(page).toHaveURL(/\/garden\/plants\//); // Open the Care tab await page.getByRole("button", { name: /care/i }).click(); // Add a care schedule await page.getByRole("button", { name: /add schedule/i }).click(); await page.getByLabel(/care type/i).fill("watering"); await page.getByLabel(/interval/i).fill("7"); await page.getByRole("button", { name: /save|add/i }).click(); // Verify schedule appears await expect(page.getByText("watering")).toBeVisible(); await expect(page.getByText(/7 days|every 7/i)).toBeVisible(); // Log a care event await page.getByRole("button", { name: /log care/i }).click(); await expect(page.getByLabel(/care type/i)).toBeVisible(); await page.getByRole("button", { name: /log|save/i }).click(); // Verify history entry appears await expect(page.getByText(/watered|watering/i)).toBeVisible(); // Cleanup: delete the plant await page.getByRole("button", { name: /info/i }).click(); await page.getByRole("button", { name: /delete/i }).click(); await page.getByRole("button", { name: /confirm/i }).click(); await expect(page).toHaveURL(/\/garden/); }); test("garden dashboard widget happy path", async ({ page }) => { const suffix = Date.now().toString(); const plantName = `Widget Plant ${suffix}`; // Create a plant await page.goto("/garden?tab=plants"); await page.getByRole("link", { name: /add plant/i }).click(); await page.getByLabel("Name").fill(plantName); await page.getByRole("button", { name: /create/i }).click(); await expect(page).toHaveURL(/\/garden\/plants\//); // Add watering schedule every 7 days await page.getByRole("button", { name: /care/i }).click(); await page.getByRole("button", { name: /add schedule/i }).click(); await page.getByLabel(/interval/i).fill("7"); await page.getByRole("button", { name: /^add$/i }).click(); // Log care (watered) await page.getByRole("button", { name: /log care/i }).click(); await page.getByRole("button", { name: /^log care$/i }).click(); // Navigate to dashboard and add garden.care-due widget await page.goto("/d/home?edit=1"); const addWidgetButton = page.getByRole("button", { name: /add widget/i }); if (await addWidgetButton.isVisible()) { await addWidgetButton.click(); const careDueOption = page.getByText(/plants needing care/i); if (await careDueOption.isVisible()) { await careDueOption.click(); } } // Save layout if dirty const saveButton = page.getByRole("button", { name: /save/i }); if (await saveButton.isVisible()) { await saveButton.click(); } // Navigate back to dashboard — should show the widget await page.goto("/d/home"); await expect(page.getByText(/plants needing care|all plants are on schedule/i)).toBeVisible({ timeout: 8000, }); // Cleanup await page.goto("/garden?tab=plants"); await page.getByText(plantName).click(); await page.getByRole("button", { name: /delete/i }).click(); await page.getByRole("button", { name: /confirm/i }).click(); }); test("garden integrations - push overdue to task list", async ({ page }) => { // Navigate to garden page await page.goto("/garden"); await expect(page.getByRole("heading", { name: "Garden" })).toBeVisible(); // The "Add overdue to task list" button should be present const pushButton = page.getByRole("button", { name: /overdue|task list/i }); await expect(pushButton).toBeVisible(); // Click it — with no overdue plants it should show "No overdue" feedback await pushButton.click(); await expect(page.getByText(/no overdue|added \d+ task/i)).toBeVisible({ timeout: 5000 }); }); test("garden containers happy path", async ({ page }) => { await page.goto("/garden"); await expect(page.getByRole("heading", { name: "Garden" })).toBeVisible(); // Create a container await page.getByRole("button", { name: /new container/i }).click(); await page.getByLabel("Name").fill("Living Room Shelf"); await page.getByLabel("Type").selectOption("shelf"); await page.getByRole("button", { name: /save|create/i }).click(); // Verify it appears in the list await expect(page.getByText("Living Room Shelf")).toBeVisible(); // Open the container detail await page.getByText("Living Room Shelf").click(); await expect(page.getByRole("heading", { name: "Living Room Shelf" })).toBeVisible(); // Edit the container await page.getByRole("button", { name: /edit/i }).click(); await page.getByLabel("Name").fill("Living Room Shelf (Updated)"); await page.getByRole("button", { name: /save/i }).click(); await expect(page.getByRole("heading", { name: "Living Room Shelf (Updated)" })).toBeVisible(); // Delete the container await page.getByRole("button", { name: /delete/i }).click(); await page.getByRole("button", { name: /confirm|yes/i }).click(); await expect(page).toHaveURL(/\/garden/); await expect(page.getByText("Living Room Shelf")).toBeHidden(); });