test(e2e): add mvp1 happy path scenarios
This commit is contained in:
86
e2e/happy-paths.pw.ts
Normal file
86
e2e/happy-paths.pw.ts
Normal file
@@ -0,0 +1,86 @@
|
||||
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()
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user