|
|
@@ -0,0 +1,204 @@
|
|
|
+# Story 12.2: 后台创建企业用户测试
|
|
|
+
|
|
|
+Status: ready-for-dev
|
|
|
+
|
|
|
+<!-- Note: Validation is optional. Run validate-create-story for quality check before dev-story. -->
|
|
|
+
|
|
|
+## Story
|
|
|
+
|
|
|
+作为测试开发者,
|
|
|
+我想要编写后台创建企业用户的 E2E 测试,
|
|
|
+以便验证企业用户创建功能的正确性。
|
|
|
+
|
|
|
+## Acceptance Criteria
|
|
|
+
|
|
|
+### AC1: 创建基本企业用户测试
|
|
|
+**Given** 用户管理 Page Object (Story 12.1) 已完成
|
|
|
+**When** 编写创建基本企业用户的测试用例
|
|
|
+**Then** 测试应验证以下功能:
|
|
|
+- 填写用户名、密码、昵称
|
|
|
+- 选择用户类型为 EMPLOYER
|
|
|
+- 选择关联公司(使用 Epic 11 创建的公司)
|
|
|
+- 验证用户创建成功,显示成功提示
|
|
|
+- 验证用户出现在列表中
|
|
|
+- 验证用户类型徽章显示为企业用户
|
|
|
+
|
|
|
+### AC2: 创建完整信息企业用户测试
|
|
|
+**Given** 基本创建测试已通过
|
|
|
+**When** 编写创建完整信息企业用户的测试用例
|
|
|
+**Then** 测试应验证以下功能:
|
|
|
+- 填写所有字段(用户名、密码、昵称、邮箱、手机号、真实姓名)
|
|
|
+- 选择用户类型为 EMPLOYER
|
|
|
+- 选择关联公司
|
|
|
+- 验证所有数据保存正确
|
|
|
+- 验证列表中显示完整用户信息
|
|
|
+
|
|
|
+### AC3: 企业用户必须关联公司验证
|
|
|
+**Given** 企业用户创建表单已打开
|
|
|
+**When** 尝试创建企业用户但不选择公司
|
|
|
+**Then** 测试应验证以下行为:
|
|
|
+- 表单验证失败
|
|
|
+- 显示错误提示(如"请选择公司")
|
|
|
+- 用户未被创建
|
|
|
+
|
|
|
+### AC4: 表单验证测试
|
|
|
+**Given** 企业用户创建表单已打开
|
|
|
+**When** 在不同表单验证场景下提交
|
|
|
+**Then** 测试应验证以下场景:
|
|
|
+- 用户名为空时提交,显示错误提示
|
|
|
+- 密码为空时提交,显示错误提示
|
|
|
+- 昵称为空时提交,显示错误提示
|
|
|
+- 邮箱格式不正确时,显示错误提示
|
|
|
+
|
|
|
+### AC5: 测试数据唯一性和清理
|
|
|
+**Given** 测试运行环境中可能存在测试数据
|
|
|
+**When** 执行测试
|
|
|
+**Then** 测试应遵循以下策略:
|
|
|
+- 使用时间戳确保用户名唯一:`test_employer_${Date.now()}`
|
|
|
+- 每个测试后清理创建的用户(使用 API 删除策略)
|
|
|
+- 避免测试数据冲突
|
|
|
+
|
|
|
+### AC6: 代码质量标准
|
|
|
+**Given** 遵循项目测试规范
|
|
|
+**When** 编写测试代码
|
|
|
+**Then** 代码应符合以下标准:
|
|
|
+- 使用 TIMEOUTS 常量
|
|
|
+- 使用 data-testid 选择器(优先级高于文本选择器)
|
|
|
+- 测试文件命名:`user-create-employer.spec.ts`
|
|
|
+- 完整的测试描述和注释
|
|
|
+- TypeScript 类型安全
|
|
|
+
|
|
|
+## Tasks / Subtasks
|
|
|
+
|
|
|
+- [ ] 任务 1: 创建测试文件和基础设施 (AC: #6)
|
|
|
+ - [ ] 1.1 创建 `web/tests/e2e/specs/admin/user-create-employer.spec.ts`
|
|
|
+ - [ ] 1.2 配置 test fixtures(adminLoginPage, userManagementPage)
|
|
|
+ - [ ] 1.3 添加测试前置条件(登录、导航)
|
|
|
+
|
|
|
+- [ ] 任务 2: 实现基本企业用户创建测试 (AC: #1)
|
|
|
+ - [ ] 2.1 编写"应该成功创建基本企业用户"测试
|
|
|
+ - [ ] 2.2 验证创建成功提示
|
|
|
+ - [ ] 2.3 验证列表中显示新用户
|
|
|
+
|
|
|
+- [ ] 任务 3: 实现完整信息企业用户创建测试 (AC: #2)
|
|
|
+ - [ ] 3.1 编写"应该成功创建完整信息企业用户"测试
|
|
|
+ - [ ] 3.2 验证所有字段保存正确
|
|
|
+ - [ ] 3.3 验证列表显示完整信息
|
|
|
+
|
|
|
+- [ ] 任务 4: 实现公司关联验证测试 (AC: #3)
|
|
|
+ - [ ] 4.1 编写"企业用户必须关联公司"测试
|
|
|
+ - [ ] 4.2 验证表单验证错误提示
|
|
|
+
|
|
|
+- [ ] 任务 5: 实现表单验证测试 (AC: #4)
|
|
|
+ - [ ] 5.1 编写用户名为空的验证测试
|
|
|
+ - [ ] 5.2 编写密码为空的验证测试
|
|
|
+ - [ ] 5.3 编写昵称为空的验证测试
|
|
|
+ - [ ] 5.4 编写邮箱格式验证测试
|
|
|
+
|
|
|
+- [ ] 任务 6: 实现测试数据清理策略 (AC: #5)
|
|
|
+ - [ ] 6.1 添加 afterEach 钩子清理测试数据
|
|
|
+ - [ ] 6.2 使用 API 直接删除策略
|
|
|
+ - [ ] 6.3 使用时间戳确保用户名唯一
|
|
|
+
|
|
|
+- [ ] 任务 7: 验证代码质量 (AC: #6)
|
|
|
+ - [ ] 7.1 运行 `pnpm typecheck` 验证类型检查
|
|
|
+ - [ ] 7.2 运行测试确保所有测试通过
|
|
|
+ - [ ] 7.3 验证选择器使用 data-testid
|
|
|
+
|
|
|
+## Dev Notes
|
|
|
+
|
|
|
+### Story 12.1 关键经验
|
|
|
+
|
|
|
+**UserManagementPage 可用方法:**
|
|
|
+- `goto()`: 导航到用户管理页面
|
|
|
+- `expectToBeVisible()`: 验证页面可见
|
|
|
+- `createUser()`: 创建用户(完整流程)
|
|
|
+- `userExists()`: 验证用户是否存在
|
|
|
+- `deleteUser()`: 删除用户(API 直接删除策略)
|
|
|
+
|
|
|
+**用户类型定义:**
|
|
|
+- `EMPLOYER`: 企业用户,必须关联公司
|
|
|
+- `TALENT`: 人才用户,必须关联残疾人
|
|
|
+- `ADMIN`: 管理员,无关联
|
|
|
+
|
|
|
+**创建用户数据接口:**
|
|
|
+```typescript
|
|
|
+interface UserData {
|
|
|
+ username: string;
|
|
|
+ password: string;
|
|
|
+ nickname: string;
|
|
|
+ email?: string;
|
|
|
+ phone?: string;
|
|
|
+ name?: string; // 真实姓名
|
|
|
+ userType: 'ADMIN' | 'EMPLOYER' | 'TALENT';
|
|
|
+ companyId?: number; // EMPLOYER 类型必须
|
|
|
+ disabledPersonId?: number; // TALENT 类型必须
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+### Epic 11 依赖
|
|
|
+
|
|
|
+**公司数据:**
|
|
|
+- Epic 11 已完成公司创建和验证
|
|
|
+- 可以使用 Story 11.5 创建的测试公司
|
|
|
+- 如需要,可在测试前置条件中创建测试公司
|
|
|
+
|
|
|
+**API 删除策略:**
|
|
|
+- 使用 `page.evaluate` 直接调用 API 删除
|
|
|
+- 参考 Epic 11 的清理策略
|
|
|
+
|
|
|
+### 项目结构
|
|
|
+
|
|
|
+- **测试文件**: `web/tests/e2e/specs/admin/user-create-employer.spec.ts`
|
|
|
+- **Page Object**: `web/tests/e2e/pages/admin/user-management.page.ts`
|
|
|
+- **工具**: `web/tests/e2e/utils/timeouts.ts` (TIMEOUTS 常量)
|
|
|
+
|
|
|
+### 测试场景清单
|
|
|
+
|
|
|
+| 场景 | 描述 | 优先级 |
|
|
|
+|------|------|--------|
|
|
|
+| 基本创建 | 填写必填字段 + 选择公司 | HIGH |
|
|
|
+| 完整信息 | 填写所有字段 | HIGH |
|
|
|
+| 公司关联验证 | 不选择公司时验证 | HIGH |
|
|
|
+| 用户名验证 | 用户名为空 | MEDIUM |
|
|
|
+| 密码验证 | 密码为空 | MEDIUM |
|
|
|
+| 昵称验证 | 昵称为空 | MEDIUM |
|
|
|
+| 邮箱格式验证 | 邮箱格式不正确 | LOW |
|
|
|
+
|
|
|
+### 参考:Story 11.5 创建测试公司模式
|
|
|
+
|
|
|
+```typescript
|
|
|
+// Story 11.5 的公司创建测试参考
|
|
|
+test('应该成功创建测试公司', async ({ adminLoginPage, companyManagementPage }) => {
|
|
|
+ await adminLoginPage.goto();
|
|
|
+ await adminLoginPage.login('admin', 'admin123');
|
|
|
+
|
|
|
+ await companyManagementPage.goto();
|
|
|
+ const companyData = {
|
|
|
+ name: `测试公司_${Date.now()}`,
|
|
|
+ platformId: 1, // 使用 Story 11.2 创建的测试平台
|
|
|
+ // ...
|
|
|
+ };
|
|
|
+
|
|
|
+ await companyManagementPage.createCompany(companyData);
|
|
|
+ await expect(companyManagementPage.companyExists(companyData.name)).resolves.toBe(true);
|
|
|
+});
|
|
|
+```
|
|
|
+
|
|
|
+## Dev Agent Record
|
|
|
+
|
|
|
+### Agent Model Used
|
|
|
+
|
|
|
+_待开发时填写_
|
|
|
+
|
|
|
+### Debug Log References
|
|
|
+
|
|
|
+_待开发时填写_
|
|
|
+
|
|
|
+### Completion Notes List
|
|
|
+
|
|
|
+_待开发时填写_
|
|
|
+
|
|
|
+### File List
|
|
|
+
|
|
|
+_待开发时填写_
|