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

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_tagapp.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.py
  • server/tests/unit/services/test_ai_conversation_service.py
  • server/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 - 改进错误处理、添加参数别名

后续建议

  1. 为 AIConversationMessage Repository 添加完整测试
  2. 实现真实的 AI Service 集成(当前返回模拟数据)
  3. 添加性能测试(大量对话和消息的场景)
  4. 添加并发测试(多用户同时操作)

总结

成功为 AI Conversation 模块创建了完整的测试套件,所有 58 个测试全部通过,确保了代码质量和功能正确性。测试覆盖了从数据库操作到 API 接口的完整流程,为后续开发提供了可靠的质量保障。