import { expect, test } from "@playwright/test"; test.describe("Projects", () => { test.beforeEach(async ({ page }) => { await page.goto("/auth/signin"); await page.fill('input[type="email"]', "manager@capakraken.dev"); await page.fill('input[type="password"]', "manager123"); await page.click('button[type="submit"]'); await expect(page).toHaveURL(/\/resources/); await page.goto("/projects"); }); test("shows projects list", async ({ page }) => { await expect(page.locator("h1")).toContainText("Projects"); await expect(page.locator("table")).toBeVisible(); }); test("project wizard — opens and shows step 1", async ({ page }) => { await page.locator("button", { hasText: "New Project" }).click(); await expect(page.locator("text=Select Blueprint")).toBeVisible(); }); test("project wizard — completes all 5 steps", async ({ page }) => { await page.locator("button", { hasText: "New Project" }).click(); // Step 1: Blueprint selection await expect(page.locator("text=Select Blueprint")).toBeVisible(); // Select the first available blueprint const blueprintCard = page.locator("[data-blueprint-id]").first() .or(page.locator("button").filter({ hasText: /Blueprint|Production/ }).first()); if (await blueprintCard.count() > 0) { await blueprintCard.click(); } else { // Click next without blueprint if none shown const nextBtn = page.locator("button", { hasText: "Next" }); await nextBtn.click(); } // Step 2: Timeline — set project dates await expect(page.locator("text=Timeline").or(page.locator("text=Project Dates"))).toBeVisible({ timeout: 5000 }); const projectNameInput = page.locator('input[placeholder*="name"]').or(page.locator('input[name="name"]')).first(); if (await projectNameInput.count() > 0) { await projectNameInput.fill(`E2E Test Project ${Date.now()}`); } await page.locator("button", { hasText: "Next" }).click(); // Step 3: Staffing demand await expect( page.locator("text=Staffing").or(page.locator("text=Demand").or(page.locator("text=Roles"))) ).toBeVisible({ timeout: 5000 }); await page.locator("button", { hasText: "Next" }).click(); // Step 4: Suggestions / Assignment await page.waitForTimeout(500); await page.locator("button", { hasText: "Next" }).click(); // Step 5: Review await page.waitForTimeout(500); const reviewOrFinish = page.locator("text=Review").or(page.locator("button", { hasText: /Create|Finish|Submit/ })); await expect(reviewOrFinish).toBeVisible({ timeout: 5000 }); // Don't actually submit — just close const cancelBtn = page.locator("button", { hasText: /Cancel|Close/ }).first(); if (await cancelBtn.count() > 0) { await cancelBtn.click(); } }); });