const { test, expect } = require('@playwright/test'); const { login } = require('./helpers/auth'); /** * 사용자 매뉴얼(bag/manual) E2E * - 비로그인 차단(loginAuth) * - 로그인 후 목차/본문 렌더 * - 목차 이동(표 렌더) * - 미등록 slug 404 */ test.describe('사용자 매뉴얼', () => { test('비로그인 시 로그인으로 이동', async ({ page }) => { await page.goto('/bag/manual'); await expect(page).toHaveURL(/\/login/); }); test('로그인 후 매뉴얼 첫 페이지(개요) 렌더 + 목차 노출', async ({ page }) => { await login(page, 'user'); await page.goto('/bag/manual'); // manual 첫 slug(overview)로 이동 await expect(page).toHaveURL(/\/bag\/manual\/overview/); // 좌측 목차 await expect(page.locator('.manual-toc')).toBeVisible(); await expect(page.locator('.manual-toc a', { hasText: '핵심 업무 흐름' })).toBeVisible(); // 본문 await expect(page.locator('.manual-prose h1')).toContainText('시스템 개요'); }); test('목차에서 코드체계 페이지로 이동 → 표 렌더', async ({ page }) => { await login(page, 'user'); await page.goto('/bag/manual/codes'); await expect(page.locator('.manual-prose table').first()).toBeVisible(); await expect(page.locator('.manual-prose')).toContainText('바코드'); }); test('워크스페이스·단축키 페이지 렌더 + 단축키 표 노출', async ({ page }) => { await login(page, 'user'); await page.goto('/bag/manual/workspace'); await expect(page.locator('.manual-prose h1')).toContainText('워크스페이스'); // 단축키 표 내용 확인 await expect(page.locator('.manual-prose')).toContainText('Alt + W'); await expect(page.locator('.manual-prose')).toContainText('다음 탭'); // 목차에도 새 항목 노출 await expect(page.locator('.manual-toc a', { hasText: '워크스페이스' })).toBeVisible(); }); test('매뉴얼 검색이 단축키 내용을 찾음', async ({ page }) => { await login(page, 'user'); await page.goto('/bag/manual/overview'); await page.locator('#manualSearchInput').fill('단축키'); await page.waitForTimeout(700); await expect(page.locator('#manualSearchResults')).toBeVisible(); await expect(page.locator('#manualSearchResults')).toContainText('워크스페이스'); }); test('미등록 slug 는 404', async ({ page }) => { await login(page, 'user'); const res = await page.goto('/bag/manual/does-not-exist'); expect(res.status()).toBe(404); }); });