diff --git a/e2e/public-rendering.pw.ts b/e2e/public-rendering.pw.ts new file mode 100644 index 0000000..ceaf2dc --- /dev/null +++ b/e2e/public-rendering.pw.ts @@ -0,0 +1,38 @@ +import { expect, test } from "@playwright/test" + +test.describe("public rendering integration", () => { + test("header exposes portfolio/news/commissions navigation", async ({ page }, testInfo) => { + test.skip(testInfo.project.name !== "web-chromium") + + await page.goto("/") + + const header = page.locator("header").first() + await expect(header.getByRole("link", { name: /portfolio/i })).toBeVisible() + await expect(header.getByRole("link", { name: /news|actualités|noticias/i })).toBeVisible() + await expect(header.getByRole("link", { name: /commissions|auftrag/i })).toBeVisible() + }) + + test("portfolio routes render list and seeded artwork detail", async ({ page }, testInfo) => { + test.skip(testInfo.project.name !== "web-chromium") + + await page.goto("/portfolio") + await expect(page.getByRole("heading", { name: /portfolio|portafolio/i })).toBeVisible() + + await page.goto("/portfolio/seed-artwork-welcome") + await expect(page.getByRole("heading", { name: /seed artwork/i })).toBeVisible() + }) + + test("commission form rejects invalid budget ranges", async ({ page }, testInfo) => { + test.skip(testInfo.project.name !== "web-chromium") + + await page.goto("/commissions") + await page.locator('input[name="customerName"]').fill("E2E Client") + await page.locator('input[name="customerEmail"]').fill(`e2e-${Date.now()}@example.com`) + await page.locator('input[name="title"]').fill("E2E Budget Validation") + await page.locator('input[name="budgetMin"]').fill("1000") + await page.locator('input[name="budgetMax"]').fill("500") + await page.getByRole("button", { name: /submit|senden|envoyer/i }).click() + + await expect(page).toHaveURL(/\/commissions\?error=budget_range_invalid/) + }) +})