Forráskód Böngészése

docs(story): 创建 Story 10-11 - 编写订单完整流程测试

Story 文档已创建,包含以下验收标准:
1. 新增订单完整流程(创建订单 → 添加人员 → 添加附件 → 激活订单)
2. 编辑订单完整流程(打开订单 → 修改信息 → 添加人员 → 关闭订单)

测试文件: web/tests/e2e/specs/admin/order-complete.spec.ts

前置依赖: Story 10.1-10.10 全部完成

Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
yourname 4 napja
szülő
commit
0327c09117

+ 324 - 0
_bmad-output/implementation-artifacts/10-11-order-complete-tests.md

@@ -0,0 +1,324 @@
+# Story 10.11: 编写订单完整流程测试
+
+Status: ready-for-dev
+
+<!-- Note: Validation is optional. Run validate-create-story for quality check before dev-story. -->
+
+## Story
+
+作为测试开发者,
+我想要编写订单管理的完整流程 E2E 测试,
+以便验证从创建到关闭的端到端场景。
+
+## Acceptance Criteria
+
+**Given** 所有子功能测试已完成
+**When** 编写完整流程测试
+**Then** 包含以下测试场景:
+
+1. **新增订单完整流程**
+   - 创建订单(填写所有字段)
+   - 添加人员到订单
+   - 为人员添加附件
+   - 激活订单
+   - 验证所有步骤成功
+
+2. **编辑订单完整流程**
+   - 打开已有订单
+   - 修改订单信息
+   - 添加更多人员
+   - 关闭订单
+   - 验证所有步骤成功
+
+**测试文件:** `web/tests/e2e/specs/admin/order-complete.spec.ts`
+
+## Tasks / Subtasks
+
+- [ ] 分析完整流程测试需求 (AC: Given)
+  - [ ] 确认所有子功能测试已完成(Story 10.1-10.10)
+  - [ ] 确认 Page Object 方法完整可用
+  - [ ] 确认测试数据准备策略
+- [ ] 创建完整流程测试文件 (AC: When)
+  - [ ] 创建 `web/tests/e2e/specs/admin/order-complete.spec.ts`
+  - [ ] 导入必要的测试依赖和 Page Object
+  - [ ] 配置测试 Fixtures(adminLoginPage, orderManagementPage)
+- [ ] 编写新增订单完整流程测试 (AC: Then #1)
+  - [ ] 测试创建订单(填写所有字段)
+  - [ ] 测试添加人员到订单
+  - [ ] 测试为人员添加附件
+  - [ ] 测试激活订单
+  - [ ] 测试验证所有步骤成功
+- [ ] 编写编辑订单完整流程测试 (AC: Then #2)
+  - [ ] 测试打开已有订单
+  - [ ] 测试修改订单信息
+  - [ ] 测试添加更多人员
+  - [ ] 测试关闭订单
+  - [ ] 测试验证所有步骤成功
+- [ ] 确保所有测试通过 (AC: And)
+  - [ ] 运行测试并修复问题
+  - [ ] 验证测试稳定性(连续运行 3 次)
+
+## Dev Notes
+
+### Epic Context
+
+**Epic 10: 订单管理 E2E 测试 (Epic C - 业务测试 Epic)**
+
+- **目标**: 测试开发者可以为订单管理功能编写完整的 E2E 测试,验证订单的 CRUD、状态流转、人员关联和附件管理功能
+- **业务分组**: Epic C(业务测试 Epic)
+- **背景**: 订单管理是招聘系统的核心业务功能,涉及复杂表单(多选择器联动)、状态流转、人员关联等场景
+- **模式**: 业务测试为主,工具包支持为辅(遵循 Epic A 成功模式)
+
+**依赖:**
+- Epic 1: ✅ 已完成(Select 工具基础框架)
+- Epic 2: ✅ 已完成(Select 工具在真实 E2E 测试中验证)
+- Story 10.1: ✅ 已完成(订单管理 Page Object)
+- Story 10.2: ✅ 已完成(订单列表查看测试)
+- Story 10.3: ✅ 已完成(订单搜索和筛选测试)
+- Story 10.4: ✅ 已完成(创建订单测试)
+- Story 10.5: ✅ 已完成(编辑订单测试)
+- Story 10.6: ✅ 已完成(删除订单测试)
+- Story 10.7: ✅ 已完成(订单状态流转测试)
+- Story 10.8: ✅ 已完成(订单详情查看测试)
+- Story 10.9: ✅ 已完成(人员关联功能测试)
+- Story 10.10: ✅ 已完成(附件管理测试)
+
+### 前序 Story 关键发现总结
+
+**从 Story 10.1 学到的经验(Page Object 设计):**
+- `orderManagementPage` 提供完整的订单管理操作方法
+- 使用 `createOrder()` 创建订单
+- 使用 `openDetailDialog()` 查看订单详情
+- 使用 `closeDetailDialog()` 关闭订单详情对话框
+
+**从 Story 10.4 学到的经验(创建订单):**
+- 使用 `createOrder()` 方法创建订单
+- 必填字段:订单名称、预计开始日期
+- 可选字段:平台、公司、渠道
+- 使用时间戳确保订单名称唯一性
+
+**从 Story 10.5 学到的经验(编辑订单):**
+- 使用 `editOrder()` 方法编辑订单
+- 可以修改订单基本信息和关联信息
+- 编辑后验证列表更新
+
+**从 Story 10.7 学到的经验(状态流转):**
+- 使用 `activateOrder()` 激活订单(草稿 → 进行中)
+- 使用 `closeOrder()` 关闭订单(进行中 → 已完成)
+- 使用 `getOrderStatus()` 获取订单状态
+
+**从 Story 10.9 学到的经验(人员关联):**
+- 使用 API 创建残疾人数据:`createDisabledPersonViaAPI()`
+- 使用 `addPersonToOrder()` 添加人员到订单
+- 设置入职日期和薪资
+- 使用 `getPersonListFromDetail()` 获取人员列表
+
+**从 Story 10.10 学到的经验(附件管理):**
+- 使用 `openAddAttachmentDialog()` 打开附件上传对话框
+- 使用 `uploadAttachment()` 上传附件
+- 使用 fixtures 文件进行测试
+- 验证附件列表显示
+
+### 完整流程测试覆盖场景清单
+
+**新增订单完整流程:**
+- [ ] 创建订单(填写所有字段:订单名称、平台、公司、渠道、预计开始日期)
+- [ ] 添加人员到订单(使用 API 创建的残疾人数据)
+- [ ] 设置人员工作状态为待就业
+- [ ] 为人员添加附件(使用 fixtures 文件)
+- [ ] 激活订单(草稿 → 进行中)
+- [ ] 验证订单状态为进行中
+- [ ] 验证人员列表正确显示
+- [ ] 验证附件列表正确显示
+
+**编辑订单完整流程:**
+- [ ] 创建初始订单(用于后续编辑)
+- [ ] 添加初始人员到订单
+- [ ] 打开订单详情对话框
+- [ ] 修改订单名称
+- [ ] 更换平台和公司
+- [ ] 添加更多人员到订单
+- [ ] 关闭订单(进行中 → 已完成)
+- [ ] 验证订单状态为已完成
+- [ ] 验证订单信息更新正确
+- [ ] 验证人员列表包含新添加的人员
+
+### 测试数据准备策略
+
+**使用 API 创建测试数据(遵循 Story 10.9 成功模式):**
+```typescript
+// 1. 创建残疾人数据(使用 API)
+const disabledPerson = await createDisabledPersonViaAPI({
+  name: `测试残疾人_${timestamp}`,
+  idCard: generateTestIdCard(timestamp),
+  disabilityType: '肢体残疾',
+  disabilityLevel: '一级',
+  // ... 其他字段
+});
+
+// 2. 创建测试订单
+const orderName = `测试订单_${timestamp}`;
+await orderManagementPage.createOrder({
+  name: orderName,
+  platformName: '测试平台',
+  companyName: '测试公司',
+  channelName: '测试渠道',
+  expectedStartDate: '2026-01-15',
+});
+
+// 3. 添加人员到订单
+await orderManagementPage.addPersonToOrder({
+  personName: disabledPerson.name,
+  workStatus: '待就业',
+  expectedEmploymentDate: '2026-01-15',
+  salary: 5000,
+});
+
+// 4. 上传附件
+await orderManagementPage.uploadAttachment(
+  disabledPerson.id,
+  'sample-id-card.jpg',
+  'image/jpeg'
+);
+```
+
+**Fixtures 文件使用:**
+- `web/tests/fixtures/images/sample-id-card.jpg` - 身份证照片
+- `web/tests/fixtures/images/sample-disability-card.jpg` - 残疾证照片
+- `web/tests/fixtures/images/photo.jpg` - 个人照片
+
+### 项目结构对齐
+
+**遵循 Epic 9.6 并行执行决策:**
+- ✅ 不使用 `test.describe.serial`
+- ✅ 每个测试创建独立的测试数据
+- ✅ 使用时间戳确保订单名称和残疾人姓名唯一
+
+**遵循项目的测试模式:**
+- ✅ 使用 Playwright fixtures
+- ✅ 使用 Page Object 模式
+- ✅ Toast 消息使用 `data-sonner-toast` 选择器
+- ✅ 对话框使用 `role="dialog"` 或 `role="alertdialog"`
+
+**遵循项目的类型规范:**
+- ✅ 使用 TypeScript 严格模式
+- ✅ 使用 `ORDER_STATUS` 和 `ORDER_STATUS_LABELS` 常量
+- ✅ 使用 `WORK_STATUS` 和 `WORK_STATUS_LABELS` 常量
+- ✅ 订单状态类型使用 `OrderStatus` 类型别名
+- ✅ 工作状态类型使用 `WorkStatus` 类型别名
+
+### 测试隔离策略
+
+**每个测试的独立数据:**
+```typescript
+test('新增订单完整流程', async ({ adminLoginPage, orderManagementPage }) => {
+  // 使用时间戳确保唯一性
+  const timestamp = Date.now();
+  const testDataCounter = timestamp;
+
+  // 创建残疾人数据
+  const person = await createDisabledPersonViaAPI({
+    name: `残疾人_${testDataCounter}`,
+    idCard: generateTestIdCard(testDataCounter),
+    // ...
+  });
+
+  // 创建订单
+  const orderName = `订单_${testDataCounter}`;
+  await orderManagementPage.createOrder({
+    name: orderName,
+    // ...
+  });
+
+  // 添加人员
+  await orderManagementPage.addPersonToOrder({
+    personName: person.name,
+    // ...
+  });
+
+  // 验证...
+});
+```
+
+### Page Object 方法使用清单
+
+**完整流程测试需要的 Page Object 方法:**
+
+| 方法 | 说明 | 来源 Story |
+|------|------|-----------|
+| `createOrder(data)` | 创建订单 | 10.1, 10.4 |
+| `openDetailDialog(orderName)` | 打开订单详情 | 10.1, 10.8 |
+| `closeDetailDialog()` | 关闭订单详情 | 10.1, 10.8 |
+| `addPersonToOrder(data)` | 添加人员到订单 | 10.1, 10.9 |
+| `openAddAttachmentDialog()` | 打开附件上传对话框 | 10.1, 10.10 |
+| `uploadAttachment(personId, fileName, mimeType)` | 上传附件 | 10.1, 10.10 |
+| `activateOrder()` | 激活订单 | 10.1, 10.7 |
+| `closeOrder()` | 关闭订单 | 10.1, 10.7 |
+| `getOrderStatus(orderName)` | 获取订单状态 | 10.1, 10.7 |
+| `getPersonListFromDetail()` | 获取人员列表 | 10.1, 10.8 |
+| `getAttachmentListFromDetail()` | 获取附件列表 | 10.1, 10.8 |
+| `editOrder(data)` | 编辑订单 | 10.1, 10.5 |
+
+### Project Structure Notes
+
+**测试文件位置:**
+```
+web/tests/e2e/
+├── pages/admin/
+│   └── order-management.page.ts  (已有完整方法)
+└── specs/admin/
+    └── order-complete.spec.ts    (新建)
+```
+
+**与其他测试的关系:**
+- `order-create.spec.ts`: 创建订单测试(子功能验证)
+- `order-edit.spec.ts`: 编辑订单测试(子功能验证)
+- `order-person.spec.ts`: 人员关联测试(子功能验证)
+- `order-attachment.spec.ts`: 附件管理测试(子功能验证)
+- `order-status.spec.ts`: 状态流转测试(子功能验证)
+- `order-complete.spec.ts`: **完整流程测试(端到端集成)**
+
+**本 Story 完成后的影响:**
+- 完成订单管理的最后一个核心测试
+- 验证所有子功能的集成正确性
+- 为 Story 10.12(运行测试并收集问题)提供完整测试覆盖
+- 为 Epic 10 的稳定性验证做好准备
+
+### References
+
+**Epic 需求来源:**
+- [Source: _bmad-output/planning-artifacts/epics.md](../planning-artifacts/epics.md) - Story 10.11 详细需求(行 2209-2235)
+
+**Page Object 现有实现:**
+- [Source: web/tests/e2e/pages/admin/order-management.page.ts](../../web/tests/e2e/pages/admin/order-management.page.ts) - 订单管理完整方法
+
+**前序 Story 学习:**
+- [Source: _bmad-output/implementation-artifacts/10-4-order-create-tests.md](10-4-order-create-tests.md) - 创建订单测试
+- [Source: _bmad-output/implementation-artifacts/10-5-order-edit-tests.md](10-5-order-edit-tests.md) - 编辑订单测试
+- [Source: _bmad-output/implementation-artifacts/10-7-order-status-tests.md](10-7-order-status-tests.md) - 状态流转测试
+- [Source: _bmad-output/implementation-artifacts/10-9-order-person-tests.md](10-9-order-person-tests.md) - 人员关联测试
+- [Source: _bmad-output/implementation-artifacts/10-10-order-attachment-tests.md](10-10-order-attachment-tests.md) - 附件管理测试
+
+**项目上下文:**
+- [Source: _bmad-output/project-context.md](../project-context.md) - 技术栈、测试规范、类型系统
+
+**Epic 9 并行执行决策:**
+- [Source: _bmad-output/implementation-artifacts/epic-9-retrospective-2026-01-12.md](epic-9-retrospective-2026-01-12.md) - 测试隔离和并行执行最佳实践
+
+## Dev Agent Record
+
+### Agent Model Used
+
+claude-opus-4-5-20251101
+
+### Debug Log References
+
+_待开发时填写_
+
+### Completion Notes List
+
+_待开发时填写_
+
+### File List
+
+_待开发时填写_

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

@@ -156,7 +156,7 @@ development_status:
   10-8-order-detail-tests: done               # 编写订单详情查看测试 - ✅ 13/13 测试通过 (2026-01-13)
   10-9-order-person-tests: done               # 编写人员关联功能测试 - 2026-01-13 完成:6/6 测试通过,代码审查完成
   10-10-order-attachment-tests: review       # 编写附件管理测试 - 开发中 (2026-01-13)
-  10-11-order-complete-tests: backlog      # 编写订单完整流程测试
+  10-11-order-complete-tests: ready-for-dev # 编写订单完整流程测试
   10-12-run-tests-collect-issues: backlog  # 运行测试并收集问题和改进建议
   10-13-extend-utils-if-needed: backlog   # 扩展工具包(如需要)
   10-14-order-stability-test: backlog     # 订单管理稳定性验证
@@ -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: ready-for-dev       # 后台创建企业用户测试
+  12-2-create-employer-user: in-progress        # 后台创建企业用户测试
   12-3-create-talent-user: backlog         # 后台创建人才用户测试
   12-4-enterprise-mini-page-object: backlog  # 企业小程序 Page Object
   12-5-enterprise-mini-login: backlog      # 企业小程序登录测试