You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
5.1 KiB
5.1 KiB
AI Conversation 模块测试创建
日期: 2026-02-04
类型: 测试创建
影响范围: AI Conversation 模块
概述
为 AI Conversation 模块创建了完整的三层测试(Repository、Service、API),参考 Project 模块的测试结构,确保代码质量和功能正确性。
测试覆盖
1. Repository 层测试 (16/16 通过 ✅)
文件: server/tests/unit/repositories/test_ai_conversation_repository.py
测试内容:
- 基础 CRUD 操作(创建、查询、更新、删除)
- 按用户查询对话列表
- 按项目查询对话列表
- 按目标类型和 ID 查询
- 按标签查询
- 按媒体类型查询
- 按状态查询
- 获取活跃对话
- 分页功能
- 复杂筛选条件组合
2. Service 层测试 (19/19 通过 ✅)
文件: server/tests/unit/services/test_ai_conversation_service.py
测试内容:
- 创建对话会话(基础、带标签、重复检测)
- 获取对话详情
- 更新对话(标题、状态)
- 删除对话
- 列表查询(基础、筛选、分页)
- 发送消息
- 消息列表查询
- 权限验证
- 错误处理
3. API 层测试 (23/23 通过 ✅)
文件: server/tests/integration/test_ai_conversation_api.py
测试内容:
- 创建对话会话(成功、带标签验证、重复返回已存在、未认证、无效类型)
- 查询对话(详情、列表、筛选、分页、未找到)
- 更新对话(标题、状态)
- 删除对话
- 消息管理(发送、列表、分页、空内容验证)
- @ 提及功能(获取可提及资源、筛选)
- AI 生成触发(成功、消息不存在)
- 权限隔离验证
代码修复
在测试过程中发现并修复了以下问题:
1. Service 层缺失方法
- ✅ 添加
AIConversationService.update_conversation()方法 - ✅ 添加
AIConversationService.delete_conversation()方法
2. Repository 层缺失方法
- ✅
StoryboardRepository.exists()- 验证分镜是否存在 - ✅
StoryboardResourceRepository.get_by_storyboard()- 获取分镜资源 - ✅
ProjectResourceRepository.exists()- 验证项目资源是否存在 - ✅
ProjectResourceRepository.get_by_element()- 获取元素资源 - ✅
ProjectRepository.exists()- 修复 UUID 类型转换问题 - ✅
AIConversationMessageRepository.get_by_id()- 修复 UUID 参数类型
3. 导入路径修复
- ✅ 修复
app.models.screenplay_tag→app.models.screenplay_element_tag
4. API 响应格式统一
- ✅ 所有响应字段使用 camelCase(
conversationId,userId,targetType等) - ✅ 分页响应字段:
pageSize,totalPages - ✅ 消息响应字段:
messageId,aiJobId,metaData - ✅ AI 生成响应字段:
jobId,taskId,referenceImagesCount
5. API 错误处理改进
- ✅ 使用 HTTPException 返回正确的 HTTP 状态码
- ✅ NotFoundError → 404
- ✅ PermissionError → 403
- ✅ ValidationError → 400
6. API 参数别名支持
- ✅ Query 参数支持 camelCase 别名(
pageSize,targetType,targetId等)
7. Schema 改进
- ✅ 添加
populate_by_name=True支持 camelCase 和 snake_case - ✅ 为所有字段添加
alias支持前端 camelCase 命名
测试统计
| 测试层级 | 总数 | 通过 | 失败 | 通过率 |
|---|---|---|---|---|
| Repository | 16 | 16 | 0 | 100% ✅ |
| Service | 19 | 19 | 0 | 100% ✅ |
| API | 23 | 23 | 0 | 100% ✅ |
| 总计 | 58 | 58 | 0 | 100% ✅ |
技术规范遵循
✅ 使用真实数据库(db_session fixture)
✅ 在测试方法内创建数据
✅ 异步测试(pytest-asyncio)
✅ 完整的错误处理测试
✅ 权限验证测试
✅ 边界条件测试
✅ 符合 jointo-tech-stack 规范
影响的文件
新增文件
server/tests/unit/repositories/test_ai_conversation_repository.pyserver/tests/unit/services/test_ai_conversation_service.pyserver/tests/integration/test_ai_conversation_api.py
修改文件
server/app/services/ai_conversation_service.py- 添加方法、修复响应格式server/app/repositories/storyboard_repository.py- 添加 exists 方法server/app/repositories/storyboard_resource_repository.py- 添加 get_by_storyboard 方法server/app/repositories/project_resource_repository.py- 添加 exists 和 get_by_element 方法server/app/repositories/project_repository.py- 修复 exists 方法server/app/repositories/ai_conversation_message_repository.py- 修复 get_by_id 参数类型server/app/schemas/ai_conversation.py- 添加 camelCase 别名支持server/app/api/v1/ai_conversations.py- 改进错误处理、添加参数别名
后续建议
- 为 AIConversationMessage Repository 添加完整测试
- 实现真实的 AI Service 集成(当前返回模拟数据)
- 添加性能测试(大量对话和消息的场景)
- 添加并发测试(多用户同时操作)
总结
成功为 AI Conversation 模块创建了完整的测试套件,所有 58 个测试全部通过,确保了代码质量和功能正确性。测试覆盖了从数据库操作到 API 接口的完整流程,为后续开发提供了可靠的质量保障。