import { test, expect } from "@playwright/test"; import { E2E_ADMIN, E2E_INVALID_USER, FIXED_CAPTCHA } from "../fixtures/test-users"; test.describe("登录流程", () => { test("管理员账号 UI 登录成功", async ({ page }) => { await page.goto("/auth/login"); await page.fill("#login-username", E2E_ADMIN.username); await page.fill("#login-password", E2E_ADMIN.password); await page.fill("#login-captcha", FIXED_CAPTCHA); await page.click('button[type="submit"]'); // 等待跳转到首页 await page.waitForURL("/", { timeout: 15000 }); await expect(page).toHaveURL("/"); }); test("登录成功后 toast 提示", async ({ page }) => { await page.goto("/auth/login"); await page.fill("#login-username", E2E_ADMIN.username); await page.fill("#login-password", E2E_ADMIN.password); await page.fill("#login-captcha", FIXED_CAPTCHA); await page.click('button[type="submit"]'); // 等待 toast 出现 await expect(page.locator(".Toastify__toast").first()).toBeVisible({ timeout: 10000 }); await expect(page.locator(".Toastify__toast").first()).toContainText("登录成功"); }); test("错误密码登录失败", async ({ page }) => { await page.goto("/auth/login"); await page.fill("#login-username", E2E_ADMIN.username); await page.fill("#login-password", E2E_INVALID_USER.password); await page.fill("#login-captcha", FIXED_CAPTCHA); await page.click('button[type="submit"]'); // 应停留在登录页 await expect(page).toHaveURL(/\/auth\/login/); // 应显示错误 toast await expect(page.locator(".Toastify__toast").first()).toBeVisible({ timeout: 10000 }); }); test("错误验证码登录失败", async ({ page }) => { await page.goto("/auth/login"); await page.fill("#login-username", E2E_ADMIN.username); await page.fill("#login-password", E2E_ADMIN.password); await page.fill("#login-captcha", "wrong_captcha"); await page.click('button[type="submit"]'); // 应停留在登录页 await expect(page).toHaveURL(/\/auth\/login/); // 应显示错误 toast await expect(page.locator(".Toastify__toast").first()).toBeVisible({ timeout: 10000 }); }); test("未登录访问受保护页面重定向到登录页", async ({ page }) => { await page.goto("/settings"); // 应重定向到登录页 await expect(page).toHaveURL(/\/auth\/login/); }); test("登录后重定向到原始页面", async ({ page }) => { // 先访问受保护页面,触发重定向 await page.goto("/settings"); await expect(page).toHaveURL(/\/auth\/login/); // 登录 await page.fill("#login-username", E2E_ADMIN.username); await page.fill("#login-password", E2E_ADMIN.password); await page.fill("#login-captcha", FIXED_CAPTCHA); await page.click('button[type="submit"]'); // 登录成功后应跳转到首页(redirect 参数可能不存在) await page.waitForURL("/", { timeout: 15000 }); }); test("已登录用户访问登录页重定向到首页", async ({ page }) => { // 先通过 UI 登录 await page.goto("/auth/login"); await page.fill("#login-username", E2E_ADMIN.username); await page.fill("#login-password", E2E_ADMIN.password); await page.fill("#login-captcha", FIXED_CAPTCHA); await page.click('button[type="submit"]'); await page.waitForURL("/", { timeout: 15000 }); // 再访问登录页 await page.goto("/auth/login"); // 应重定向到首页 await page.waitForURL("/", { timeout: 15000 }); }); });