// @ts-check const { test, expect } = require('@playwright/test'); const { login, logout, TEST_ACCOUNTS } = require('./helpers/auth'); test.describe('인증 시스템', () => { test('로그인 페이지 접속', async ({ page }) => { await page.goto('/login'); await expect(page).toHaveURL(/\/login/); await expect(page.locator('input[name="login_id"]')).toBeVisible(); await expect(page.locator('input[name="password"]')).toBeVisible(); }); test('잘못된 ID로 로그인 실패', async ({ page }) => { await page.goto('/login'); await page.fill('input[name="login_id"]', 'wrong_user'); await page.fill('input[name="password"]', 'wrong_pass'); await page.click('button[type="submit"]'); // 로그인 페이지에 머물러야 함 await expect(page).toHaveURL(/\/login/); }); test('잘못된 비밀번호로 로그인 실패', async ({ page }) => { await page.goto('/login'); await page.fill('input[name="login_id"]', 'tester_admin'); await page.fill('input[name="password"]', 'wrong_password'); await page.click('button[type="submit"]'); await expect(page).toHaveURL(/\/login/); }); test('Super Admin 로그인 성공 → 지자체 선택 페이지', async ({ page }) => { await login(page, 'admin'); // Super Admin은 지자체 선택 페이지로 리다이렉트 await expect(page).toHaveURL(/\/admin\/select-local-government/); }); test('지자체관리자 로그인 성공 → 관리자 대시보드', async ({ page }) => { await login(page, 'local'); await expect(page).toHaveURL(/\/admin/); }); test('일반 사용자 로그인 성공 → 홈/대시보드', async ({ page }) => { await login(page, 'user'); // 일반 사용자는 홈 또는 대시보드로 이동 const url = page.url(); expect(url.includes('/dashboard') || url.endsWith('/') || url.includes('/login') === false).toBeTruthy(); }); test('로그아웃', async ({ page }) => { await login(page, 'local'); await page.goto('/logout'); await page.waitForURL(/\/login/, { timeout: 30000 }); await expect(page).toHaveURL(/\/login/); // 로그아웃 후 관리자 접근 불가 확인 await page.goto('/admin'); await expect(page).toHaveURL(/\/login/); }); test('비로그인 상태에서 관리자 페이지 접근 → 로그인으로 리다이렉트', async ({ page }) => { await page.goto('/admin'); await expect(page).toHaveURL(/\/login/); }); test('회원가입 페이지 접속', async ({ page }) => { await page.goto('/register'); await expect(page.locator('input[name="mb_id"]')).toBeVisible(); await expect(page.locator('input[name="mb_passwd"]')).toBeVisible(); await expect(page.locator('input[name="mb_name"]')).toBeVisible(); }); });