Playwright E2E 테스트 환경 구성 및 테스터 계정 생성
- Playwright + Chromium 브라우저 테스트 환경 세팅 - 테스터 계정 4개 생성 (admin/local/shop/user, pw: test1234!) - seed SQL + Node.js 시더 스크립트 포함 - E2E 테스트 23개 작성 (전체 통과): - auth: 로그인/로그아웃/실패/회원가입 (9개) - admin: 지자체관리자/Super Admin 패널 접근 (10개) - public: 홈/로그인/회원가입/404 (4개) - CLAUDE.md: 테스트 섹션을 Playwright 기반으로 업데이트 - jobs.md: 테스트 작업 완료 기록 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
83
e2e/admin.spec.js
Normal file
83
e2e/admin.spec.js
Normal file
@@ -0,0 +1,83 @@
|
||||
// @ts-check
|
||||
const { test, expect } = require('@playwright/test');
|
||||
const { login } = require('./helpers/auth');
|
||||
|
||||
test.describe('관리자 패널 — 지자체관리자', () => {
|
||||
|
||||
test.beforeEach(async ({ page }) => {
|
||||
await login(page, 'local');
|
||||
});
|
||||
|
||||
test('관리자 대시보드 접근', async ({ page }) => {
|
||||
await page.goto('/admin');
|
||||
await expect(page).toHaveURL(/\/admin/);
|
||||
});
|
||||
|
||||
test('회원 관리 목록 접근', async ({ page }) => {
|
||||
await page.goto('/admin/users');
|
||||
await expect(page).toHaveURL(/\/admin\/users/);
|
||||
const content = await page.content();
|
||||
expect(content).toContain('tester_');
|
||||
});
|
||||
|
||||
test('로그인 이력 접근', async ({ page }) => {
|
||||
await page.goto('/admin/access/login-history');
|
||||
await expect(page).toHaveURL(/\/admin\/access\/login-history/);
|
||||
});
|
||||
|
||||
test('승인 대기 목록 접근', async ({ page }) => {
|
||||
await page.goto('/admin/access/approvals');
|
||||
await expect(page).toHaveURL(/\/admin\/access\/approvals/);
|
||||
});
|
||||
|
||||
test('역할 목록 접근', async ({ page }) => {
|
||||
await page.goto('/admin/roles');
|
||||
await expect(page).toHaveURL(/\/admin\/roles/);
|
||||
});
|
||||
|
||||
test('메뉴 관리 접근', async ({ page }) => {
|
||||
await page.goto('/admin/menus');
|
||||
await expect(page).toHaveURL(/\/admin\/menus/);
|
||||
});
|
||||
|
||||
test('지정판매소 목록 접근', async ({ page }) => {
|
||||
await page.goto('/admin/designated-shops');
|
||||
await expect(page).toHaveURL(/\/admin\/designated-shops/);
|
||||
});
|
||||
|
||||
test('지자체 관리는 Super Admin 전용 — 지자체관리자 접근 시 리다이렉트', async ({ page }) => {
|
||||
await page.goto('/admin/local-governments');
|
||||
// Level 3는 Super Admin이 아니므로 /admin으로 리다이렉트됨
|
||||
await expect(page).toHaveURL(/\/admin$/);
|
||||
});
|
||||
});
|
||||
|
||||
test.describe('관리자 패널 — Super Admin', () => {
|
||||
|
||||
test('지자체 선택 후 관리자 접근', async ({ page }) => {
|
||||
await login(page, 'admin');
|
||||
await expect(page).toHaveURL(/\/admin\/select-local-government/);
|
||||
|
||||
// radio 버튼으로 첫 번째 지자체 선택
|
||||
const radio = page.locator('input[name="lg_idx"]').first();
|
||||
await radio.check();
|
||||
await page.click('button[type="submit"]');
|
||||
|
||||
// 선택 후 관리자 대시보드로 이동
|
||||
await page.waitForURL(url => !url.pathname.includes('select-local-government'), { timeout: 15000 });
|
||||
await page.goto('/admin');
|
||||
await expect(page).not.toHaveURL(/\/select-local-government/);
|
||||
});
|
||||
|
||||
test('Super Admin은 지자체 관리 접근 가능', async ({ page }) => {
|
||||
// 먼저 로그인 + 지자체 선택
|
||||
await login(page, 'admin');
|
||||
const radio = page.locator('input[name="lg_idx"]').first();
|
||||
await radio.check();
|
||||
await page.click('button[type="submit"]');
|
||||
await page.waitForURL(url => !url.pathname.includes('select-local-government'), { timeout: 15000 });
|
||||
|
||||
await page.goto('/admin/local-governments');
|
||||
await expect(page).toHaveURL(/\/admin\/local-governments/);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user