40 lines
1.7 KiB
JavaScript
40 lines
1.7 KiB
JavaScript
import { expect, test } from '@playwright/test'
|
|
|
|
test('관리자가 로그인해 게시물을 발행하고 공개 화면에서 확인한다', async ({ page }) => {
|
|
const title = 'Playwright E2E Post'
|
|
const slug = 'playwright-e2e-post'
|
|
|
|
await page.goto('/admin/login')
|
|
await page.waitForLoadState('networkidle')
|
|
await page.getByLabel('이메일').fill('playwright-admin@example.com')
|
|
await page.locator('input[type="password"]').fill('playwright-admin-password')
|
|
|
|
await Promise.all([
|
|
page.waitForResponse((response) =>
|
|
response.url().endsWith('/admin/api/auth/login') && response.status() === 200
|
|
),
|
|
page.getByRole('button', { name: '로그인', exact: true }).click()
|
|
])
|
|
await page.waitForURL(/\/admin(?:\/)?$/)
|
|
|
|
await page.goto('/admin/posts/new')
|
|
await page.waitForLoadState('networkidle')
|
|
await page.getByPlaceholder('제목').fill(title)
|
|
await expect(page.getByPlaceholder('제목')).toHaveValue(title)
|
|
|
|
const publishResponsePromise = page.waitForResponse((response) =>
|
|
response.url().endsWith('/admin/api/posts')
|
|
&& response.request().method() === 'POST'
|
|
&& response.status() === 200
|
|
)
|
|
await expect(page.getByRole('button', { name: 'Publish', exact: true })).toBeEnabled()
|
|
await page.getByRole('button', { name: 'Publish', exact: true }).click()
|
|
await expect(page.getByRole('heading', { name: '발행' })).toBeVisible()
|
|
await page.getByRole('button', { name: '최종 확인하고 저장 →' }).click()
|
|
await publishResponsePromise
|
|
await page.waitForURL(/\/admin\/posts\/[0-9a-f-]+$/)
|
|
|
|
await page.goto(`/post/${slug}`)
|
|
await expect(page.getByRole('heading', { name: title, exact: true })).toBeVisible()
|
|
})
|