Browse Source

docs(story): 创建 Story 12.2 - 后台创建企业用户测试

- 创建完整的故事文档,包含 6 个验收标准和 7 个任务
- 定义测试场景:基本创建、完整信息、公司关联验证、表单验证
- 使用 Story 12.1 的 UserManagementPage 作为基础
- 依赖 Epic 11 的公司数据
- 更新 sprint-status.yaml 标记为 ready-for-dev

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
yourname 4 ngày trước cách đây
mục cha
commit
eaf3428e56

+ 204 - 0
_bmad-output/implementation-artifacts/12-2-create-employer-user.md

@@ -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
+
+_待开发时填写_

+ 1 - 1
_bmad-output/implementation-artifacts/sprint-status.yaml

@@ -191,7 +191,7 @@ development_status:
   # 技术要点: 小程序通过 H5 URL 访问,使用 Playwright 测试
   epic-12: in-progress
   12-1-user-page-object: done           # 用户管理 Page Object ✅ 代码审查问题全部修复完成 (2026-01-13)
-  12-2-create-employer-user: backlog       # 后台创建企业用户测试
+  12-2-create-employer-user: ready-for-dev       # 后台创建企业用户测试
   12-3-create-talent-user: backlog         # 后台创建人才用户测试
   12-4-enterprise-mini-page-object: backlog  # 企业小程序 Page Object
   12-5-enterprise-mini-login: backlog      # 企业小程序登录测试