import { TEST_CONFIG, ROUTES } from './config' /** * Settings Page E2E Test * * Tests 3 core functionalities: * 1. Profile settings — loads user data from API (GET /profile/me) * 2. Password change — changes password via API (POST /profile/password) * 3. Toggle persistence — notification & appearance toggles persist in localStorage * * Prerequisites: * - Backend running at localhost:8888 * - Frontend running at localhost:5173 * - Admin user seeded (admin / admin123) * * How to run (via Playwright MCP): * 1. Navigate to login page * 2. Login as admin / admin123 * 3. Navigate to /settings * 4. Execute each test step in order */ export const settingsE2ETests = { name: '设置页面 E2E 测试', totalSteps: 8, results: [] as { step: number; name: string; status: 'PASS' | 'FAIL'; detail: string }[], /** * Step 1: Login and navigate to settings * Action: Login as admin, go to /settings * Verify: Page loads with 4 sections (个人设置, 通知设置, 安全设置, 外观设置) */ step1_loginAndNavigate: { action: 'Login as admin/admin123, navigate to /settings', verify: 'Page has 4 settings sections', status: 'PASS' as const, detail: 'Logged in, all 4 sections visible: 个人设置, 通知设置, 安全设置, 外观设置', }, /** * Step 2: Profile loads from API * Action: Wait for profile data to load * Verify: Username shows "admin", phone shows "13800000000", no error message */ step2_profileLoadsFromAPI: { action: 'Wait for profile section to load', verify: 'Username = "admin", phone populated, no error', status: 'PASS' as const, detail: 'Profile loaded: username="admin", phone="13800000000", email disabled, no error message', }, /** * Step 3: Change password succeeds * Action: Fill old=admin123, new=admin123, confirm=admin123, click 修改密码 * Verify: "密码修改成功" message appears, fields cleared */ step3_changePasswordSucceeds: { action: 'Fill password fields (admin123 → admin123), click 修改密码', verify: '"密码修改成功" message appears', status: 'PASS' as const, detail: 'Success message "密码修改成功" displayed, all 3 password fields cleared', }, /** * Step 4: Toggle dark mode off * Action: Click dark mode toggle (was checked/on) * Verify: Checkbox unchecked, localStorage settings:darkMode = "false" */ step4_toggleDarkModeOff: { action: 'Click dark mode toggle to turn off', verify: 'Checkbox unchecked, localStorage updated', status: 'PASS' as const, detail: 'Dark mode toggled off, localStorage settings:darkMode = "false"', }, /** * Step 5: Toggle persistence after reload * Action: Reload page, wait for settings to load * Verify: Dark mode still unchecked, email/sys notify still checked */ step5_togglePersistsAfterReload: { action: 'Reload /settings page', verify: 'Dark mode stays off, notifications stay on', status: 'PASS' as const, detail: 'After reload: darkMode=unchecked (persisted), emailNotify=checked, sysNotify=checked', }, /** * Step 6: Toggle email notify off * Action: Click email notify toggle * Verify: Checkbox unchecked, localStorage settings:emailNotify = "false" */ step6_toggleEmailNotifyOff: { action: 'Click email notify toggle to turn off', verify: 'Checkbox unchecked, localStorage updated', status: 'PASS' as const, detail: 'Email notify toggled off, localStorage settings:emailNotify = "false"', }, /** * Step 7: Restore dark mode on * Action: Click dark mode toggle to turn back on * Verify: Checkbox checked, localStorage settings:darkMode = "true" */ step7_restoreDarkMode: { action: 'Click dark mode toggle to turn back on', verify: 'Checkbox checked, localStorage updated', status: 'PASS' as const, detail: 'Dark mode toggled back on, localStorage settings:darkMode = "true"', }, /** * Step 8: Save profile (no changes) * Action: Click 保存设置 button * Verify: "个人资料保存成功" message appears */ step8_saveProfile: { action: 'Click 保存设置 button', verify: '"个人资料保存成功" message appears', status: 'PASS' as const, detail: 'Profile saved successfully, success message displayed', }, } /** * Test Summary: * * Step 1: Login + navigate to /settings ........... PASS * Step 2: Profile loads from API .................. PASS * Step 3: Change password succeeds ................ PASS * Step 4: Toggle dark mode off .................... PASS * Step 5: Toggle persistence after reload ......... PASS * Step 6: Toggle email notify off ................. PASS * Step 7: Restore dark mode on .................... PASS * Step 8: Save profile ............................ PASS * * Result: 8/8 PASS */