import { expect, test } from "@playwright/test"; test.describe("Dashboard", () => { test.beforeEach(async ({ page }) => { await page.goto("/auth/signin"); await page.fill('input[type="email"]', "admin@planarchy.dev"); await page.fill('input[type="password"]', "admin123"); await page.click('button[type="submit"]'); await expect(page).toHaveURL(/\/(dashboard|resources)/); await page.goto("/dashboard"); }); test("loads with widget grid", async ({ page }) => { await page.waitForLoadState("networkidle"); // Dashboard should render the react-grid-layout container await expect(page.locator(".react-grid-layout")).toBeVisible({ timeout: 10000 }); }); test("shows at least one widget", async ({ page }) => { await page.waitForLoadState("networkidle"); // Each widget is wrapped in a WidgetContainer inside the grid const widgets = page.locator(".react-grid-item"); await expect(widgets.first()).toBeVisible({ timeout: 10000 }); const count = await widgets.count(); expect(count).toBeGreaterThanOrEqual(1); }); test("add widget modal opens and closes", async ({ page }) => { await page.waitForLoadState("networkidle"); // Look for the "Add Widget" button const addBtn = page.locator("button", { hasText: /Add Widget/i }); if ((await addBtn.count()) > 0) { await addBtn.click(); await expect(page.locator("text=Add Widget").or(page.locator("text=Available Widgets"))).toBeVisible(); await page.keyboard.press("Escape"); } }); test("reset layout button is available", async ({ page }) => { await page.waitForLoadState("networkidle"); const resetBtn = page.locator("button", { hasText: /Reset Layout/i }); if ((await resetBtn.count()) > 0) { await expect(resetBtn).toBeVisible(); } }); });