87 lines
3.6 KiB
TypeScript
87 lines
3.6 KiB
TypeScript
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()
|
|
})
|
|
})
|