Files
sori.studio/tests/playwright/e2e/admin-comments.spec.js

46 lines
2.4 KiB
JavaScript

import { expect, test } from '@playwright/test'
import postgres from 'postgres'
test('멤버 댓글 페이지 이동·게시물 링크와 대시보드 최근 댓글을 표시한다', async ({ page }) => {
const database = postgres(process.env.DATABASE_URL, { max: 1 })
let postId
try {
const login = await page.request.post('/admin/api/auth/login', {
data: { email: 'playwright-admin@example.com', password: 'playwright-admin-password' }
})
expect(login.ok()).toBeTruthy()
const admin = await login.json()
const created = await page.request.post('/admin/api/posts', {
data: { title: '댓글 화면 검증 게시물', slug: 'comments-ui-test', content: '본문', status: 'published', tags: [], tagNames: {} }
})
expect(created.ok()).toBeTruthy()
postId = (await created.json()).id
for (let index = 0; index < 11; index += 1) {
await database`
INSERT INTO comments (post_id, user_id, body, created_at)
VALUES (${postId}, ${admin.userId}, ${`화면 댓글 ${index}`}, now() + ${index} * interval '1 second')
`
}
await page.goto(`/admin/members/${admin.userId}`)
await page.waitForLoadState('networkidle')
const list = page.locator('.admin-comment-list')
await expect(list.locator('.admin-comment-list__item')).toHaveCount(10)
await expect(list.locator('.admin-comment-list__body').first()).toHaveText('화면 댓글 10')
await expect(list.getByRole('link', { name: '게시물 보기' }).first()).toHaveAttribute('href', '/post/comments-ui-test#comments')
await list.getByRole('button', { name: '다음' }).click()
await expect(list.locator('.admin-comment-list__item')).toHaveCount(1)
await expect(list.locator('.admin-comment-list__body')).toHaveText('화면 댓글 0')
await list.getByRole('button', { name: '이전' }).click()
await expect(list.locator('.admin-comment-list__item')).toHaveCount(10)
await page.goto('/admin')
await expect(page.locator('.admin-comment-list__item')).toHaveCount(5)
await expect(page.locator('.admin-comment-list__body').first()).toHaveText('화면 댓글 10')
await page.goto('/admin/posts')
const row = page.locator('.admin-posts__row').filter({ hasText: '댓글 화면 검증 게시물' })
await expect(row.locator('.admin-posts__comment-count')).toHaveText('11')
} finally {
if (postId) await database`DELETE FROM posts WHERE id = ${postId}`
await database.end()
}
})