story-12.1.md 6.3 KB

Story 12.1: user-page-object - 用户管理 Page Object

Status: done

Story

作为测试开发者, 我想要扩展用户管理 Page Object 以支持企业用户和人才用户的创建, 以便为 Epic 12 的用户管理和小程序登录测试提供基础的 Page Object 能力。

Acceptance Criteria

  1. 扩展 UserManagementPage 支持 EMPLOYER 类型用户

    • 添加 createEmployerUser 方法,支持创建企业用户
    • 方法接收 username, password, companyId 以及可选的 phone, email, nickname, name
    • 在表单中选择用户类型为"企业用户"
    • 使用 Radix UI Select 选择公司
  2. 扩展 UserManagementPage 支持 TALENT 类型用户

    • 添加 createTalentUser 方法,支持创建人才用户
    • 方法接收 username, password, personId 以及可选的 phone, email, nickname, name
    • 在表单中选择用户类型为"人才用户"
    • 使用 Radix UI Select 选择残疾人
  3. 保持向后兼容

    • 现有的 createUser 方法保持不变(默认创建 ADMIN 用户)
    • 所有现有测试继续通过
  4. 类型安全

    • 导出 EmployerUserDataTalentUserData 接口
    • 使用 TypeScript 严格类型检查
  5. 错误处理

    • 当公司或残疾人不存在时,正确捕获并报告错误
    • 表单验证失败时提供清晰的错误信息

Tasks / Subtasks

  • [ ] 任务 1: 分析用户管理表单结构 (AC: 1, 2)

    • 1.1 查看 web 端用户管理 UI 组件,确定表单字段和选择器
    • 1.2 确认用户类型选择器(Radix UI Select)
    • 1.3 确认公司选择器(Radix UI Select)
    • 1.4 确认残疾人选择器(Radix UI Select)
  • [ ] 任务 2: 扩展 UserManagementPage 类型定义 (AC: 4)

    • 2.1 添加 EmployerUserData 接口
    • 2.2 添加 TalentUserData 接口
    • 2.3 导出 UserType 常量(参考 @d8d/shared-types
  • [ ] 任务 3: 实现 createEmployerUser 方法 (AC: 1)

    • 3.1 点击"创建用户"按钮
    • 3.2 选择用户类型为"企业用户"
    • 3.3 填写必填字段(用户名、密码、公司)
    • 3.4 填写可选字段(手机号、邮箱、昵称、真实姓名)
    • 3.5 使用 selectRadixOptionAsync 选择公司
    • 3.6 提交表单并等待结果
  • [ ] 任务 4: 实现 createTalentUser 方法 (AC: 2)

    • 4.1 点击"创建用户"按钮
    • 4.2 选择用户类型为"人才用户"
    • 4.3 填写必填字段(用户名、密码、残疾人)
    • 4.4 填写可选字段(手机号、邮箱、昵称、真实姓名)
    • 4.5 使用 selectRadixOptionAsync 选择残疾人
    • 4.6 提交表单并等待结果
  • [ ] 任务 5: 添加辅助方法 (AC: 5)

    • 5.1 添加 selectUserType 方法(选择用户类型)
    • 5.2 添加 selectCompany 方法(选择公司)
    • 5.3 添加 selectPerson 方法(选择残疾人)
    • 5.4 添加错误处理逻辑
  • [ ] 任务 6: 编写单元测试验证 Page Object (AC: 3, 5)

    • 6.1 验证 createEmployerUser 方法正确调用
    • 6.2 验证 createTalentUser 方法正确调用
    • 6.3 验证错误处理逻辑
  • [ ] 任务 7: 运行现有测试确保向后兼容 (AC: 3)

    • 7.1 运行 users.spec.ts 所有测试通过
    • 7.2 确认无破坏性变更

Dev Notes

架构模式

Page Object 模式

  • 文件位置: web/tests/e2e/pages/admin/user-management.page.ts
  • 现有实现已支持基础用户 CRUD
  • 需要扩展以支持多类型用户创建

Radix UI Select 集成

  • 用户类型、公司、残疾人选择器使用 Radix UI Select 组件
  • 使用 @d8d/e2e-test-utilsselectRadixOptionAsync 工具函数
  • 参考: packages/e2e-test-utils/src/select.ts

依赖的测试数据

  • Epic 11 已完成,有 Company 和 Platform 数据可用
  • 需要预先创建残疾人数据(可使用 Epic 9 的测试数据)

用户类型定义

来自 packages/shared-types/src/index.ts:

export enum UserType {
  ADMIN = 'admin',       // 管理员
  EMPLOYER = 'employer', // 企业用户
  TALENT = 'talent'      // 人才用户
}

export const TypeNameMap: Record<UserType, string> = {
  [UserType.ADMIN]: '管理员',
  [UserType.EMPLOYER]: '企业用户',
  [UserType.TALENT]: '人才用户'
};

创建用户 Schema (来自 packages/core-module/user-module/src/schemas/user.schema.ts):

  • 企业用户必须字段: username, password, companyId
  • 人才用户必须字段: username, password, personId
  • 可选字段: phone, email, nickname, name, avatarFileId, isDisabled

项目结构说明

对齐统一项目结构

  • Page Objects 位置: web/tests/e2e/pages/admin/
  • 测试 Fixtures 位置: web/tests/e2e/fixtures/
  • 测试 Specs 位置: web/tests/e2e/specs/admin/

测试标准参考

  • Page Object 设计参考 company-management.page.ts
  • Select 工具使用参考 company-create.spec.ts

技术约束

TypeScript 配置

  • 目标: ES2020+
  • 严格类型检查,禁止 any 类型

Playwright 配置

  • 超时设置: 参考 TIMEOUTS 常量
  • 测试隔离: 每个测试独立运行,不共享状态

依赖包

  • @d8d/e2e-test-utils: 提供测试工具函数
  • @playwright/test: E2E 测试框架

References

  • Epic 12 定义: _bmad-output/planning-artifacts/epics.md (第 2383-2425 行)
  • PRD: _bmad-output/planning-artifacts/prd.md
  • Architecture: _bmad-output/planning-artifacts/architecture.md
  • User Schema: packages/core-module/user-module/src/schemas/user.schema.ts
  • UserType 定义: packages/shared-types/src/index.ts (第 56-67 行)
  • 现有 Page Object: web/tests/e2e/pages/admin/user-management.page.ts
  • 参考 Page Object: web/tests/e2e/pages/admin/company-management.page.ts
  • Select 工具: packages/e2e-test-utils/src/select.ts
  • 现有用户测试: web/tests/e2e/specs/admin/users.spec.ts

Dev Agent Record

Agent Model Used

Claude Opus 4.5 (model ID: 'claude-opus-4-5-20251101')

Debug Log References

无(开发过程中记录)

Completion Notes List

无(开发过程中记录)

File List

主要文件:

  • web/tests/e2e/pages/admin/user-management.page.ts (主要修改文件)
  • web/tests/e2e/specs/admin/users.spec.ts (现有测试,确保通过)
  • web/tests/e2e/fixtures/test-users.json (测试用户数据)