基于项目需求文档(PRD.md, FeatureSummary.md, DevelopmentPlan.md, UIDesign.md, User_Role_Interfaces.md)编写的 TDD 测试用例。 后端测试 (Python/pytest): - 单元测试: rule_engine, brief_parser, timestamp_alignment, video_auditor, validators - 集成测试: API Brief, Video, Review 端点 - AI 模块测试: ASR, OCR, Logo 检测服务 - 全局 fixtures 和 pytest 配置 前端测试 (TypeScript/Vitest): - 工具函数测试: utils.test.ts - 组件测试: Button, VideoPlayer, ViolationList - Hooks 测试: useVideoAudit, useVideoPlayer, useAppeal - MSW mock handlers 配置 E2E 测试 (Playwright): - 认证流程测试 - 视频上传流程测试 - 视频审核流程测试 - 申诉流程测试 所有测试当前使用 pytest.skip() / it.skip() 作为占位符, 遵循 TDD 红灯阶段 - 等待实现代码后运行。 验收标准覆盖: - ASR WER ≤ 10% - OCR 准确率 ≥ 95% - Logo F1 ≥ 0.85 - 时间戳误差 ≤ 0.5s - 频次统计准确率 ≥ 95% Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
120 lines
4.7 KiB
TypeScript
120 lines
4.7 KiB
TypeScript
/**
|
|
* 认证流程 E2E 测试
|
|
*
|
|
* TDD 测试用例 - 测试登录、登出、权限验证
|
|
*/
|
|
|
|
import { test, expect } from '@playwright/test'
|
|
|
|
test.describe('Authentication', () => {
|
|
test.skip('should display login page', async ({ page }) => {
|
|
// await page.goto('/login')
|
|
//
|
|
// await expect(page.getByRole('heading', { name: '登录' })).toBeVisible()
|
|
// await expect(page.getByPlaceholder('邮箱')).toBeVisible()
|
|
// await expect(page.getByPlaceholder('密码')).toBeVisible()
|
|
// await expect(page.getByRole('button', { name: '登录' })).toBeVisible()
|
|
})
|
|
|
|
test.skip('should login with valid credentials', async ({ page }) => {
|
|
// await page.goto('/login')
|
|
//
|
|
// await page.getByPlaceholder('邮箱').fill('test@example.com')
|
|
// await page.getByPlaceholder('密码').fill('password123')
|
|
// await page.getByRole('button', { name: '登录' }).click()
|
|
//
|
|
// // 登录成功后跳转到首页
|
|
// await expect(page).toHaveURL('/dashboard')
|
|
// await expect(page.getByText('欢迎回来')).toBeVisible()
|
|
})
|
|
|
|
test.skip('should show error for invalid credentials', async ({ page }) => {
|
|
// await page.goto('/login')
|
|
//
|
|
// await page.getByPlaceholder('邮箱').fill('wrong@example.com')
|
|
// await page.getByPlaceholder('密码').fill('wrongpassword')
|
|
// await page.getByRole('button', { name: '登录' }).click()
|
|
//
|
|
// await expect(page.getByText('邮箱或密码错误')).toBeVisible()
|
|
// await expect(page).toHaveURL('/login')
|
|
})
|
|
|
|
test.skip('should logout successfully', async ({ page }) => {
|
|
// // 先登录
|
|
// await page.goto('/login')
|
|
// await page.getByPlaceholder('邮箱').fill('test@example.com')
|
|
// await page.getByPlaceholder('密码').fill('password123')
|
|
// await page.getByRole('button', { name: '登录' }).click()
|
|
//
|
|
// // 点击登出
|
|
// await page.getByRole('button', { name: /用户菜单/ }).click()
|
|
// await page.getByRole('menuitem', { name: '退出登录' }).click()
|
|
//
|
|
// // 验证跳转到登录页
|
|
// await expect(page).toHaveURL('/login')
|
|
})
|
|
|
|
test.skip('should redirect unauthenticated users to login', async ({ page }) => {
|
|
// await page.goto('/dashboard')
|
|
//
|
|
// // 未登录用户应被重定向到登录页
|
|
// await expect(page).toHaveURL('/login?redirect=/dashboard')
|
|
})
|
|
|
|
test.skip('should redirect to original page after login', async ({ page }) => {
|
|
// // 尝试访问受保护页面
|
|
// await page.goto('/videos/video_001')
|
|
//
|
|
// // 被重定向到登录页
|
|
// await expect(page).toHaveURL(/\/login.*redirect/)
|
|
//
|
|
// // 登录
|
|
// await page.getByPlaceholder('邮箱').fill('test@example.com')
|
|
// await page.getByPlaceholder('密码').fill('password123')
|
|
// await page.getByRole('button', { name: '登录' }).click()
|
|
//
|
|
// // 登录后应跳转到原来的页面
|
|
// await expect(page).toHaveURL('/videos/video_001')
|
|
})
|
|
})
|
|
|
|
test.describe('Role-based Access', () => {
|
|
test.skip('creator should see creator-specific menu', async ({ page }) => {
|
|
// // 以达人身份登录
|
|
// await page.goto('/login')
|
|
// await page.getByPlaceholder('邮箱').fill('creator@example.com')
|
|
// await page.getByPlaceholder('密码').fill('password123')
|
|
// await page.getByRole('button', { name: '登录' }).click()
|
|
//
|
|
// // 验证达人菜单
|
|
// await expect(page.getByRole('link', { name: '我的视频' })).toBeVisible()
|
|
// await expect(page.getByRole('link', { name: '提交视频' })).toBeVisible()
|
|
// // 不应看到管理功能
|
|
// await expect(page.getByRole('link', { name: '用户管理' })).not.toBeVisible()
|
|
})
|
|
|
|
test.skip('agency should see review options', async ({ page }) => {
|
|
// // 以 Agency 身份登录
|
|
// await page.goto('/login')
|
|
// await page.getByPlaceholder('邮箱').fill('agency@example.com')
|
|
// await page.getByPlaceholder('密码').fill('password123')
|
|
// await page.getByRole('button', { name: '登录' }).click()
|
|
//
|
|
// // 验证 Agency 菜单
|
|
// await expect(page.getByRole('link', { name: '待审核' })).toBeVisible()
|
|
// await expect(page.getByRole('link', { name: '任务管理' })).toBeVisible()
|
|
})
|
|
|
|
test.skip('admin should see all menu items', async ({ page }) => {
|
|
// // 以管理员身份登录
|
|
// await page.goto('/login')
|
|
// await page.getByPlaceholder('邮箱').fill('admin@example.com')
|
|
// await page.getByPlaceholder('密码').fill('password123')
|
|
// await page.getByRole('button', { name: '登录' }).click()
|
|
//
|
|
// // 验证管理员菜单
|
|
// await expect(page.getByRole('link', { name: '用户管理' })).toBeVisible()
|
|
// await expect(page.getByRole('link', { name: '系统设置' })).toBeVisible()
|
|
})
|
|
})
|