Files
famapp/tests/e2e/garden.spec.ts
T

104 lines
4.1 KiB
TypeScript

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 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();
});