mirror of
https://github.com/iflytek/skillhub.git
synced 2026-08-28 11:25:00 +00:00
* feat(auth): add email-based password reset with SMTP config docs * test(e2e): stabilize password reset flow * test(e2e): isolate password reset rate limits * test(ci): stabilize backend and register e2e * docs(auth): sanitize smtp setup examples
45 lines
1.9 KiB
TypeScript
45 lines
1.9 KiB
TypeScript
import { expect, test } from '@playwright/test'
|
|
import { setEnglishLocale, setUniqueClientIp } from './helpers/auth-fixtures'
|
|
|
|
test.describe('Password Reset (Real API)', () => {
|
|
function uniqueResetEmail(seed: string) {
|
|
return `nonexistent_${seed}_${Date.now()}@example.com`
|
|
}
|
|
|
|
test.beforeEach(async ({ page }) => {
|
|
await setEnglishLocale(page)
|
|
})
|
|
|
|
test('sends verification code from reset-password page', async ({ page }) => {
|
|
const email = uniqueResetEmail('request')
|
|
await setUniqueClientIp(page, 'password-reset-request')
|
|
|
|
await page.goto('/reset-password')
|
|
|
|
await expect(page.getByRole('heading', { name: 'Reset Password' })).toBeVisible()
|
|
await page.getByLabel('Email').fill(email)
|
|
await page.getByRole('button', { name: 'Send Verification Code' }).click()
|
|
|
|
await expect(page.getByText('If the account is eligible, a verification code has been sent.')).toBeVisible()
|
|
})
|
|
|
|
test('shows backend validation error for an invalid reset code', async ({ page }) => {
|
|
const email = uniqueResetEmail('invalid-code')
|
|
await setUniqueClientIp(page, 'password-reset-invalid-code')
|
|
|
|
await page.goto('/reset-password')
|
|
|
|
await expect(page.getByRole('heading', { name: 'Reset Password' })).toBeVisible()
|
|
await page.getByLabel('Email').fill(email)
|
|
await page.getByRole('button', { name: 'Send Verification Code' }).click()
|
|
await expect(page.getByText('If the account is eligible, a verification code has been sent.')).toBeVisible()
|
|
await page.getByLabel('Verification Code').fill('123456')
|
|
await page.getByLabel('New Password').fill('Passw0rd!123')
|
|
await page.getByLabel('Confirm Password').fill('Passw0rd!123')
|
|
await page.getByRole('button', { name: 'Reset Password' }).click()
|
|
|
|
await expect(
|
|
page.getByText(/The verification code is invalid or has expired\.|验证码无效或已过期。/)
|
|
).toBeVisible()
|
|
})
|
|
})
|