import { expect, test } from "@playwright/test" const SUPPORT_LOGIN = process.env.CMS_SUPPORT_EMAIL ?? process.env.CMS_SUPPORT_USERNAME ?? "support" const SUPPORT_PASSWORD = process.env.CMS_SUPPORT_PASSWORD ?? "change-me-support-password" async function ensureAdminSession(page: import("@playwright/test").Page) { await page.goto("/login") const dashboardHeading = page.getByRole("heading", { name: /content dashboard/i }) if (await dashboardHeading.isVisible({ timeout: 2000 }).catch(() => false)) { return } await page.locator("#email").fill(SUPPORT_LOGIN) await page.locator("#password").fill(SUPPORT_PASSWORD) await page.getByRole("button", { name: /sign in/i }).click() await expect(page).toHaveURL(/\/$/) } function uniqueSlug(prefix: string): string { return `${prefix}-${Date.now()}` } function tinyPngBuffer() { return Buffer.from( "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mP8/x8AAwMCAO2UoR8AAAAASUVORK5CYII=", "base64", ) } test.describe("mvp1 happy paths", () => { test("admin flows create content rendered on web", async ({ page }, testInfo) => { test.skip(testInfo.project.name !== "admin-chromium") const pageSlug = uniqueSlug("e2e-page") const pageTitle = `E2E Page ${pageSlug}` const announcementTitle = `E2E Announcement ${Date.now()}` const mediaTitle = `E2E Media ${Date.now()}` const commissionTitle = `E2E Commission ${Date.now()}` await ensureAdminSession(page) await page.goto("/pages") await page.locator('input[name="title"]').first().fill(pageTitle) await page.locator('input[name="slug"]').first().fill(pageSlug) await page.locator('select[name="status"]').first().selectOption("published") await page.locator('textarea[name="content"]').first().fill("E2E published page content") await page.getByRole("button", { name: /create page/i }).click() await expect(page.getByText(/page created/i)).toBeVisible() await page.goto(`http://127.0.0.1:3000/${pageSlug}`) await expect(page.getByRole("heading", { name: pageTitle })).toBeVisible() await page.goto("http://127.0.0.1:3001/announcements") await page.locator('input[name="title"]').first().fill(announcementTitle) await page.locator('textarea[name="message"]').first().fill("E2E announcement message") await page.getByRole("button", { name: /create announcement/i }).click() await expect(page.getByText(/announcement created/i)).toBeVisible() await page.goto("http://127.0.0.1:3000/") await expect(page.getByText(/e2e announcement message/i)).toBeVisible() await page.goto("http://127.0.0.1:3001/media") await page.locator('input[name="title"]').first().fill(mediaTitle) await page.locator('input[name="file"]').first().setInputFiles({ name: "e2e.png", mimeType: "image/png", buffer: tinyPngBuffer(), }) await page.getByRole("button", { name: /upload media/i }).click() await expect(page.getByText(/media uploaded successfully/i)).toBeVisible() await expect(page.getByText(new RegExp(mediaTitle, "i"))).toBeVisible() await page.goto("http://127.0.0.1:3001/commissions") await page.locator('input[name="title"]').nth(1).fill(commissionTitle) await page.getByRole("button", { name: /create commission/i }).click() await expect(page.getByText(/commission created/i)).toBeVisible() const card = page.locator("form", { hasText: commissionTitle }).first() await card.locator('select[name="status"]').selectOption("done") await card.getByRole("button", { name: /move/i }).click() await expect(page.getByText(/commission status updated/i)).toBeVisible() }) })