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.
99 lines
3.8 KiB
99 lines
3.8 KiB
import { test, expect } from "@playwright/test";
|
|
import { E2E_NEW_USER, FIXED_CAPTCHA } from "../fixtures/test-users";
|
|
|
|
// 生成短用户名(不超过20字符):e2e_ + 基于时间戳的短hash
|
|
function shortUsername(prefix: string): string {
|
|
const suffix = Date.now().toString(36).slice(-6); // 6位base36
|
|
return `${prefix}_${suffix}`; // e2e_reg_xxxxxx = 14字符
|
|
}
|
|
|
|
test.describe("注册流程", () => {
|
|
test("UI 注册成功后跳转登录页", async ({ page }) => {
|
|
const username = shortUsername("e2e_reg");
|
|
const password = E2E_NEW_USER.password;
|
|
|
|
await page.goto("/auth/register");
|
|
|
|
await page.fill("#register-username", username);
|
|
await page.fill("#register-password", password);
|
|
await page.fill("#register-confirm", password);
|
|
await page.fill("#register-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("注册成功");
|
|
|
|
// 等待跳转到登录页(有 1.5s setTimeout)
|
|
await page.waitForURL(/\/auth\/login/, { timeout: 10000 });
|
|
});
|
|
|
|
test("两次密码不一致前端拦截", async ({ page }) => {
|
|
await page.goto("/auth/register");
|
|
|
|
await page.fill("#register-username", "e2e_mismatch");
|
|
await page.fill("#register-password", "password_one");
|
|
await page.fill("#register-confirm", "password_two");
|
|
await page.fill("#register-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("不一致");
|
|
|
|
// 应停留在注册页
|
|
await expect(page).toHaveURL(/\/auth\/register/);
|
|
});
|
|
|
|
test("重复用户名注册失败", async ({ page }) => {
|
|
// 先注册一个用户
|
|
const username = shortUsername("e2e_dup");
|
|
const password = E2E_NEW_USER.password;
|
|
|
|
await page.goto("/auth/register");
|
|
await page.fill("#register-username", username);
|
|
await page.fill("#register-password", password);
|
|
await page.fill("#register-confirm", password);
|
|
await page.fill("#register-captcha", FIXED_CAPTCHA);
|
|
await page.click('button[type="submit"]');
|
|
await page.waitForURL(/\/auth\/login/, { timeout: 10000 });
|
|
|
|
// 再用同一用户名注册
|
|
await page.goto("/auth/register");
|
|
await page.fill("#register-username", username);
|
|
await page.fill("#register-password", password);
|
|
await page.fill("#register-confirm", password);
|
|
await page.fill("#register-captcha", FIXED_CAPTCHA);
|
|
await page.click('button[type="submit"]');
|
|
|
|
// 应显示错误 toast
|
|
await expect(page.locator(".Toastify__toast").first()).toBeVisible({ timeout: 10000 });
|
|
// 应停留在注册页
|
|
await expect(page).toHaveURL(/\/auth\/register/);
|
|
});
|
|
|
|
test("注册后可用新账号登录", async ({ page }) => {
|
|
const username = shortUsername("e2e_lr");
|
|
const password = E2E_NEW_USER.password;
|
|
|
|
// 注册
|
|
await page.goto("/auth/register");
|
|
await page.fill("#register-username", username);
|
|
await page.fill("#register-password", password);
|
|
await page.fill("#register-confirm", password);
|
|
await page.fill("#register-captcha", FIXED_CAPTCHA);
|
|
await page.click('button[type="submit"]');
|
|
await page.waitForURL(/\/auth\/login/, { timeout: 10000 });
|
|
|
|
// 登录
|
|
await page.fill("#login-username", username);
|
|
await page.fill("#login-password", password);
|
|
await page.fill("#login-captcha", FIXED_CAPTCHA);
|
|
await page.click('button[type="submit"]');
|
|
|
|
await page.waitForURL("/", { timeout: 15000 });
|
|
await expect(page).toHaveURL("/");
|
|
});
|
|
});
|
|
|