You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
102 lines
3.5 KiB
102 lines
3.5 KiB
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 });
|
|
});
|
|
});
|
|
|