# Story 006.020: 商品管理集成测试API模拟规范化

## Status
Ready for Review

## Story
**As a** 开发人员，
**I want** 更新goods-management.integration.test.tsx集成测试文件，使用统一的rpcClient模拟，
**so that** 集成测试符合API模拟规范，跨包集成测试正确配置API响应，为父子商品管理功能提供可靠的集成测试保障

## Acceptance Criteria
1. goods-management.integration.test.tsx集成测试符合API模拟规范
2. 所有集成测试通过，API模拟正确工作
3. 跨包集成测试中的API响应配置正确
4. 支持多个UI包组件的API模拟配置
5. 测试环境配置正确，无Mock配置不完整或过时问题
6. API模拟使用统一的rpcClient模拟，而不是分别模拟各个客户端管理器

## Tasks / Subtasks
- [x] **分析当前集成测试API模拟实现** (AC: 1, 4, 5, 6)
  - [x] 分析goods-management.integration.test.tsx当前的API模拟实现
  - [x] 识别不符合API模拟规范的代码（直接模拟goodsClientManager等）
  - [x] 分析跨包集成测试的API响应配置需求

- [x] **按照API模拟规范重构集成测试** (AC: 1, 2, 3, 4, 6)
  - [x] 使用vi.mock统一模拟`@d8d/shared-ui-components/utils/hc`中的rpcClient函数
  - [x] 创建模拟的rpcClient函数，返回包含`$get`、`$post`、`$put`、`$delete`方法的模拟对象
  - [x] 使用createMockResponse辅助函数生成一致的API响应格式
  - [x] 在测试用例的beforeEach或具体测试中配置模拟响应
  - [x] 支持多个UI包组件的API模拟配置

- [x] **配置跨包集成测试API响应** (AC: 2, 3, 4)
  - [x] 配置商品管理UI包组件的API响应
  - [x] 配置其他相关UI包组件的API响应（如需要）
  - [x] 确保集成测试中的API模拟正确工作

- [x] **验证集成测试功能** (AC: 2, 3, 5)
  - [x] 运行goods-management.integration.test.tsx所有集成测试
  - [x] 验证测试通过，API模拟正确工作
  - [x] 验证跨包集成测试中的API响应配置正确

- [x] **运行完整测试验证** (AC: 1, 2, 3, 4, 5, 6)
  - [x] 运行父子商品管理相关组件的完整测试套件
  - [x] 验证所有集成测试通过
  - [x] 检查测试覆盖率保持或提高
  - [x] 运行多次测试，验证测试稳定性

## Dev Notes

### 技术栈信息 [Source: architecture/tech-stack.md]
- **运行时**: Node.js 20.18.3
- **框架**: Hono 4.8.5 (Web框架和API路由，RPC类型安全)
- **前端框架**: React 19.1.0 (用户界面构建)
- **数据库**: PostgreSQL 17 (通过TypeORM进行数据持久化存储)
- **ORM**: TypeORM 0.3.25 (数据库操作抽象，实体管理)
- **样式**: Tailwind CSS 4.1.11 (原子化CSS框架)
- **状态管理**: React Query 5.83.0 (服务端状态管理)
- **测试框架**: Vitest 2.x (单元测试框架，更好的TypeORM支持)
- **API测试**: hono/testing (内置，API端点测试，更好的类型安全)

### 项目结构信息 [Source: architecture/source-tree.md]
- **包管理**: 使用pnpm workspace管理多包依赖关系
- **多租户架构**: 所有操作必须包含tenantId过滤，父子商品必须在同一租户下
- **商品管理UI包**: `packages/goods-management-ui-mt/` (`@d8d/goods-management-ui-mt`)
- **集成测试位置**: `packages/goods-management-ui-mt/tests/integration/`
- **主要集成测试文件**: `goods-management.integration.test.tsx`
- **API客户端**: `packages/goods-management-ui-mt/src/api/goodsClient.ts`
- **共享UI组件**: `@d8d/shared-ui-components` (shadcn/ui组件库，46+基础组件)

### API模拟规范要求 [Source: architecture/testing-strategy.md#API模拟规范]
- **统一模拟点**: 必须统一模拟`@d8d/shared-ui-components/utils/hc`中的`rpcClient`函数，而不是分别模拟各个客户端管理器
- **模拟优势**: 统一控制所有API调用，简化配置，天然支持跨UI包集成测试，维护性高
- **模拟策略**:
  1. 在测试文件顶部使用`vi.mock`统一模拟`rpcClient`函数
  2. 创建模拟的`rpcClient`函数，返回包含`$get`、`$post`、`$put`、`$delete`方法的模拟对象
  3. 使用`createMockResponse`辅助函数生成一致的API响应格式
  4. 在测试用例的`beforeEach`或具体测试中配置模拟响应
- **响应格式要求**: 模拟完整的Response对象，包含`status`、`ok`、`json()`等方法，确保与实际API响应结构一致
- **跨包支持**: 统一模拟天然支持多个UI包组件的API模拟，无需分别模拟客户端管理器
- **集成测试特殊要求**: 需要为集成的UI包组件配置相应的API响应，支持多个UI包组件的API模拟配置

### 集成测试特点
- **跨组件协作**: 测试多个组件间的协作和数据流
- **真实API交互**: 模拟真实的API交互，验证组件在真实环境下的行为
- **多包集成**: 可能涉及多个UI包组件的集成测试
- **复杂场景**: 测试复杂用户交互流程和状态管理

### 技术约束
- **租户隔离**: 所有查询必须包含tenantId过滤，测试模拟响应必须包含租户相关字段
- **API兼容性**: 保持现有API行为不变，模拟响应必须与实际API响应结构一致
- **类型安全**: 使用TypeScript确保模拟响应与API类型兼容
- **可维护性**: 保持模拟响应与实际API响应结构一致，便于后续更新
- **跨包兼容性**: 确保API模拟支持多个UI包组件的配置

### 文件变更
**待修改文件**:
1. `packages/goods-management-ui-mt/tests/integration/goods-management.integration.test.tsx` - 更新API模拟规范

**参考文件**:
1. `docs/architecture/testing-strategy.md` - API模拟规范参考
2. 其他已符合API模拟规范的测试文件（如ChildGoodsList.test.tsx） - 参考实现

## Testing
### 测试标准 [Source: architecture/testing-strategy.md]
- **测试文件位置**: `packages/goods-management-ui-mt/tests/integration/`目录下
- **集成测试位置**: `tests/integration/**/*.test.{ts,tsx}`
- **测试框架**: Vitest + Testing Library + hono/testing + shared-test-util
- **测试要求**: 所有测试必须符合API模拟规范，使用统一的`rpcClient`模拟
- **测试模式**: 使用测试数据工厂模式，避免硬编码测试数据

### 测试策略要求
- **集成测试**: 验证组件间协作和数据流，必须模拟真实的API交互
- **错误测试**: 必须测试各种错误场景（网络错误、验证错误、服务器错误等）
- **覆盖率要求**: 集成测试覆盖率不应低于现有水平
- **验证标准**: 所有测试必须通过，无flaky tests，测试执行稳定可靠
- **跨包测试**: 支持多个UI包组件的集成测试，API模拟配置正确

### 测试验证步骤
1. **运行集成测试**: 验证修复后的集成测试通过
2. **运行完整测试套件**: 验证所有相关组件测试通过
3. **检查覆盖率报告**: 确保测试覆盖率保持或提高
4. **验证跨包集成**: 确保集成测试中的API模拟正确工作
5. **运行多次测试**: 验证测试稳定性，无随机失败

## Change Log
| Date | Version | Description | Author |
|------|---------|-------------|--------|
| 2025-12-15 | 1.0 | 初始故事创建，从故事006.016拆分 | John (Product Manager) |
| 2025-12-15 | 1.1 | 实施故事，更新API模拟规范，修复直接使用goodsClient的问题，验证所有集成测试通过 | James (Developer) |

## Dev Agent Record
*此部分由开发代理在实现过程中填写*

### Agent Model Used
Claude Sonnet

### Debug Log References
无

### Completion Notes List
1. **分析完成**：当前集成测试已使用统一的rpcClient模拟，符合API模拟规范。识别出两处直接使用`goodsClient`的问题。
2. **重构完成**：修复直接使用`goodsClient`的问题，统一使用`goodsClientManager.get()`。测试文件已符合API模拟规范所有要求。
3. **API响应配置完成**：商品管理UI包组件的API响应已正确配置，其他UI包组件已通过组件模拟处理。
4. **验证完成**：运行所有集成测试通过（14/14），API模拟工作正常。
5. **测试稳定性**：集成测试运行稳定，无flaky tests。
6. **已修复**：组件未显示"父商品: 父商品1"文本的问题已修复，修复测试数据结构，添加parent对象，恢复UI检查。
7. **完整性验证**：运行完整测试套件验证，14个集成测试全部通过，API模拟规范符合要求，父子商品显示功能正常。

### File List
1. `packages/goods-management-ui-mt/tests/integration/goods-management.integration.test.tsx` - 更新API模拟规范：
   - 修复直接使用`goodsClient`的问题，改为使用`goodsClientManager.get()`保持一致性
   - 修复测试数据结构不匹配问题，为子商品添加parent对象，恢复被注释的UI检查
   - 确保统一的rpcClient模拟正常工作，所有集成测试通过

## QA Results
*此部分由QA代理在审查完成后填写*