Selaa lähdekoodia

docs(e2e): 创建 Story 10.3 - 订单搜索和筛选测试

- 创建订单搜索和筛选测试的完整 story 文档
- 包含 8 个测试场景:订单名称搜索、订单状态筛选、工作状态筛选、平台/公司/渠道筛选、日期范围筛选、重置筛选
- 基于 Story 10.1 (Page Object) 和 Story 10.2 (列表测试) 的经验
- 使用 @d8d/e2e-test-utils 的 selectRadixOption 工具

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 6 päivää sitten
vanhempi
sitoutus
bb9325299a
1 muutettua tiedostoa jossa 341 lisäystä ja 0 poistoa
  1. 341 0
      _bmad-output/implementation-artifacts/10-3-order-filter-tests.md

+ 341 - 0
_bmad-output/implementation-artifacts/10-3-order-filter-tests.md

@@ -0,0 +1,341 @@
+# Story 10.3: 编写订单搜索和筛选测试
+
+Status: ready-for-dev
+
+<!-- Note: Validation is optional. Run validate-create-story for quality check before dev-story. -->
+
+## Story
+
+作为测试开发者,
+我想要编写订单搜索和筛选的 E2E 测试,
+以便验证多维度搜索和筛选功能。
+
+## Acceptance Criteria
+
+**Given** 订单列表 Page Object 已创建
+**When** 编写搜索和筛选测试用例
+**Then** 包含以下测试场景:
+
+1. **订单名称搜索**
+   - 输入订单名称关键词搜索
+   - 验证搜索结果正确过滤
+
+2. **订单状态筛选**
+   - 按订单状态筛选(草稿、已确认、进行中等)
+   - 验证筛选结果正确
+
+3. **工作状态筛选**
+   - 按工作状态筛选(未就业、待就业、已就业、已离职)
+   - 验证筛选结果正确
+
+4. **平台筛选**
+   - 选择平台进行筛选
+   - 使用 `selectRadixOption` 或 `selectRadixOptionAsync`
+   - 验证筛选结果正确
+
+5. **公司筛选**
+   - 选择公司进行筛选
+   - 验证筛选结果正确
+
+6. **渠道筛选**
+   - 选择渠道进行筛选
+   - 验证筛选结果正确
+
+7. **日期范围筛选**
+   - 选择开始日期和结束日期
+   - 验证日期范围内的订单正确显示
+
+8. **重置筛选**
+   - 重置所有筛选条件
+   - 验证显示全部订单
+
+**测试文件:** `web/tests/e2e/specs/admin/order-filter.spec.ts`
+
+## Tasks / Subtasks
+
+- [ ] 创建订单筛选测试文件 (AC: When)
+  - [ ] 创建 `web/tests/e2e/specs/admin/order-filter.spec.ts`
+  - [ ] 导入必要的测试依赖(Playwright fixtures、OrderManagementPage)
+  - [ ] 配置测试文件的基本结构
+- [ ] 编写订单名称搜索测试 (AC: Then #1)
+  - [ ] 测试按订单名称关键词搜索
+  - [ ] 验证搜索结果只包含匹配的订单
+  - [ ] 测试清空搜索条件
+- [ ] 编写订单状态筛选测试 (AC: Then #2)
+  - [ ] 测试按草稿状态筛选
+  - [ ] 测试按已确认状态筛选
+  - [ ] 测试按进行中状态筛选
+  - [ ] 测试按已完成状态筛选
+- [ ] 编写工作状态筛选测试 (AC: Then #3)
+  - [ ] 测试按未就业状态筛选
+  - [ ] 测试按待就业状态筛选
+  - [ ] 测试按已就业状态筛选
+  - [ ] 测试按已离职状态筛选
+- [ ] 编写平台筛选测试 (AC: Then #4)
+  - [ ] 测试打开平台选择器
+  - [ ] 测试选择特定平台
+  - [ ] 验证筛选结果只包含该平台的订单
+  - [ ] 使用 `selectRadixOption` 工具
+- [ ] 编写公司筛选测试 (AC: Then #5)
+  - [ ] 测试打开公司选择器
+  - [ ] 测试选择特定公司
+  - [ ] 验证筛选结果只包含该公司的订单
+- [ ] 编写渠道筛选测试 (AC: Then #6)
+  - [ ] 测试打开渠道选择器
+  - [ ] 测试选择特定渠道
+  - [ ] 验证筛选结果只包含该渠道的订单
+- [ ] 编写日期范围筛选测试 (AC: Then #7)
+  - [ ] 测试选择开始日期
+  - [ ] 测试选择结束日期
+  - [ ] 验证日期范围内的订单正确显示
+- [ ] 编写重置筛选测试 (AC: Then #8)
+  - [ ] 测试设置多个筛选条件
+  - [ ] 测试点击重置按钮
+  - [ ] 验证所有筛选条件被清除
+  - [ ] 验证显示全部订单
+- [ ] 确保所有测试通过 (AC: And)
+
+## 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 情报 (Story 10.1, 10.2)
+
+**Page Object 已有的搜索和筛选功能:**
+
+`web/tests/e2e/pages/admin/order-management.page.ts` 包含以下方法:
+
+1. **搜索功能:**
+   - `searchByName(name: string)` - 按订单名称搜索
+   - `searchInput` - 搜索输入框选择器
+   - `searchButton` - 搜索按钮选择器
+
+2. **筛选功能:**
+   - `openFilterDialog()` - 打开高级筛选对话框
+   - `setFilters(filters)` - 设置筛选条件
+   - `applyFilters()` - 应用筛选条件
+   - `clearFilters()` - 清空筛选条件
+
+3. **状态常量:**
+   ```typescript
+   // 订单状态
+   ORDER_STATUS_LABELS = {
+     draft: '草稿',
+     confirmed: '已确认',
+     in_progress: '进行中',
+     completed: '已完成',
+   }
+
+   // 工作状态
+   WORK_STATUS_LABELS = {
+     not_employed: '未就业',
+     pending: '待就业',
+     employed: '已就业',
+     resigned: '已离职',
+   }
+   ```
+
+### 测试文件结构参考
+
+参考 Story 10.2(订单列表查看测试)的测试结构:
+
+```typescript
+import { test, expect } from '../../utils/test-setup';
+
+test.describe.serial('订单搜索和筛选测试', () => {
+  test.beforeEach(async ({ adminLoginPage, orderManagementPage }) => {
+    await adminLoginPage.goto();
+    await adminLoginPage.login('admin', 'admin123');
+    await orderManagementPage.goto();
+  });
+
+  test.describe('订单名称搜索', () => {
+    test('应该能按订单名称关键词搜索', async ({ orderManagementPage }) => {
+      await orderManagementPage.searchByName('测试');
+      // 验证搜索结果
+    });
+  });
+
+  // 更多测试...
+});
+```
+
+### 筛选对话框元素(待确认)
+
+**高级筛选对话框结构(预期):**
+- 打开方式:点击"筛选"或"高级筛选"按钮
+- 订单状态选择器:Radix UI Select
+- 工作状态选择器:Radix UI Select
+- 平台选择器:Radix UI Select(可能异步加载)
+- 公司选择器:Radix UI Select(可能异步加载)
+- 渠道选择器:Radix UI Select(可能异步加载)
+- 开始日期输入框:日期类型输入
+- 结束日期输入框:日期类型输入
+- 应用按钮:应用筛选条件
+- 重置按钮:清空所有筛选条件
+
+### 技术要求
+
+**导入依赖:**
+```typescript
+import { test, expect } from '../../utils/test-setup';
+import { OrderManagementPage, ORDER_STATUS, WORK_STATUS } from '../../pages/admin/order-management.page';
+import { selectRadixOption } from '@d8d/e2e-test-utils';
+```
+
+**测试 Fixtures:**
+- 使用 `adminLoginPage` fixture 进行登录
+- 使用 `orderManagementPage` fixture 操作页面
+- 使用 `test.describe.serial()` 确保测试按顺序执行
+
+**断言策略:**
+- 验证搜索后列表更新
+- 验证筛选后只显示符合条件的订单
+- 验证重置后显示所有订单
+- 验证筛选条件正确应用
+
+### 工具使用
+
+**Select 工具使用(来自 Epic 1, 2):**
+```typescript
+import { selectRadixOption } from '@d8d/e2e-test-utils';
+
+// 静态选择器
+await selectRadixOption(page, '平台', '58同城');
+
+// 异步选择器(如需要)
+import { selectRadixOptionAsync } from '@d8d/e2e-test-utils';
+await selectRadixOptionAsync(page, '平台', '58同城', { timeout: 5000 });
+```
+
+### 测试标准参考
+
+遵循以下测试标准文档:
+- `docs/standards/testing-standards.md` - 测试规范
+- `docs/standards/web-ui-testing-standards.md` - Web UI 测试规范
+- `docs/standards/e2e-radix-testing.md` - Radix UI E2E 测试标准
+
+**选择器优先级:**
+1. `data-testid` - 最高优先级
+2. `aria-label + role`
+3. `text content + role` - 兜底
+
+### Project Structure Notes
+
+**文件位置:**
+- 测试文件: `web/tests/e2e/specs/admin/order-filter.spec.ts`
+- Page Object: `web/tests/e2e/pages/admin/order-management.page.ts`
+- Fixtures 目录: `web/tests/e2e/fixtures/`
+
+**对齐统一项目结构:**
+- 遵循 `project-context.md` 中的 TypeScript 严格模式规则
+- 函数参数、返回值必须有明确类型注解
+- 禁止使用 `any` 类型
+- 公共 API 必须包含完整 JSDoc 注释
+
+### 测试运行命令
+
+```bash
+# 在 web 目录下运行单个测试文件
+cd web
+pnpm test:e2e:chromium order-filter
+
+# 快速失败模式(推荐调试时使用)
+timeout 60 pnpm test:e2e:chromium order-filter
+```
+
+### 测试注意事项
+
+**搜索功能:**
+- 搜索框使用 `data-testid="search-order-name-input"` 定位
+- 搜索按钮使用 `data-testid="search-button"` 定位
+- 搜索后需要等待网络请求完成
+
+**筛选对话框:**
+- 筛选按钮可能使用文本"筛选"定位
+- 筛选对话框使用 `role="dialog"` 定位
+- 应用按钮可能使用"应用"、"确定"或"筛选"文本
+- 重置按钮可能使用"重置"或"清空"文本
+
+**日期选择:**
+- 日期输入框可能使用 `type="date"` 或自定义日期选择器
+- 如果使用自定义日期选择器,需要单独处理
+
+**数据假设:**
+- 测试应假设数据库中存在不同状态、不同平台、不同公司的订单
+- 如果没有测试数据,某些筛选测试可能无法验证结果
+
+### 测试覆盖场景清单
+
+**搜索功能:**
+- [ ] 订单名称关键词搜索
+- [ ] 搜索结果验证
+- [ ] 清空搜索条件
+
+**订单状态筛选:**
+- [ ] 草稿状态筛选
+- [ ] 已确认状态筛选
+- [ ] 进行中状态筛选
+- [ ] 已完成状态筛选
+
+**工作状态筛选:**
+- [ ] 未就业状态筛选
+- [ ] 待就业状态筛选
+- [ ] 已就业状态筛选
+- [ ] 已离职状态筛选
+
+**平台筛选:**
+- [ ] 平台选择器交互
+- [ ] 平台筛选结果验证
+
+**公司筛选:**
+- [ ] 公司选择器交互
+- [ ] 公司筛选结果验证
+
+**渠道筛选:**
+- [ ] 渠道选择器交互
+- [ ] 渠道筛选结果验证
+
+**日期范围筛选:**
+- [ ] 开始日期选择
+- [ ] 结束日期选择
+- [ ] 日期范围结果验证
+
+**重置功能:**
+- [ ] 重置单个筛选条件
+- [ ] 重置所有筛选条件
+- [ ] 重置后显示所有订单
+
+### References
+
+- [Source: _bmad-output/planning-artifacts/epics.md#Story 10.3](../planning-artifacts/epics.md)
+- [Source: _bmad-output/planning-artifacts/prd.md](../planning-artifacts/prd.md)
+- [Source: _bmad-output/planning-artifacts/architecture.md](../planning-artifacts/architecture.md)
+- [Source: web/tests/e2e/pages/admin/order-management.page.ts](../../web/tests/e2e/pages/admin/order-management.page.ts)
+- [Source: _bmad-output/implementation-artifacts/10-1-order-page-object.md](10-1-order-page-object.md)
+- [Source: _bmad-output/implementation-artifacts/10-2-order-list-tests.md](10-2-order-list-tests.md)
+
+## Dev Agent Record
+
+### Agent Model Used
+
+claude-opus-4-5-20251101
+
+### Debug Log References
+
+### Completion Notes List
+
+### File List