# AI API 测试修复总结 **日期**: 2026-01-30 **状态**: 部分完成 - UUID 序列化问题已修复,但遇到 User Service 事务管理问题 ## 修复内容 ### 1. AI Service 返回值 UUID 转字符串修复 ✅ 修复了 8 个方法的返回值,将 UUID 对象转换为字符串: 1. **`generate_image()`** - 第 265 行 2. **`generate_video()`** - 第 377 行 3. **`generate_sound()`** - 第 429 行 4. **`generate_voice()`** - 第 489 行 5. **`generate_subtitle()`** - 第 549 行 6. **`process_text()`** - 第 618 行 7. **`get_job_status()`** - 第 630 行 8. **`get_user_jobs()`** - 第 785 行 所有方法现在都返回 `{'job_id': str(job.ai_job_id), ...}` 而非 UUID 对象。 ## 遇到的新问题 ### User Service 事务管理冲突 ❌ **错误信息**: ``` sqlalchemy.exc.IllegalStateChangeError: Method 'commit()' can't be called here; method '_prepare_impl()' is already in progress ``` **问题位置**: `app/repositories/user_repository.py:230` **根本原因**: - User Repository 的 `update_session_last_used()` 方法在事务进行中调用了 `commit()` - 这与 FastAPI 的依赖注入事务管理冲突 - 在 `get_current_user` 依赖中,外层已经有事务管理 **影响范围**: - 所有需要认证的 AI API 端点 - 15 个集成测试失败 **解决方案**: 需要修复 User Repository 的事务管理: ```python # 修改 app/repositories/user_repository.py async def update_session_last_used(self, session_id: str) -> None: """更新会话最后使用时间""" session = await self.get_session_by_id(session_id) if session: session.last_used_at = datetime.now(timezone.utc) self.session.add(session) await self.session.flush() # 使用 flush 而非 commit ``` ## 测试执行结果 ### 第一次执行(修复前) - **失败**: 15 个测试 - **通过**: 6 个测试 - **主要错误**: UUID 序列化错误 ### 第二次执行(UUID 修复后) - **失败**: 15 个测试 - **通过**: 6 个测试 - **主要错误**: User Service 事务管理冲突 ### 失败的测试类别 1. **图片/视频生成工作流** (3 个) 2. **批量任务查询** (3 个) 3. **统计信息** (3 个) 4. **模型管理** (2 个) 5. **积分集成** (1 个) 6. **并发请求** (1 个) 7. **认证授权** (2 个) ## 下一步行动 ### 优先级 1: 修复 User Service 事务管理 修改 `app/repositories/user_repository.py` 的 `update_session_last_used()` 方法,使用 `flush()` 代替 `commit()` ### 优先级 2: 修复认证测试断言 - `test_access_without_token`: 调整期望状态码为 403 - `test_cannot_access_other_user_jobs`: 添加权限检查逻辑 ### 优先级 3: 重新运行完整测试套件 ## 已完成的工作 ✅ 创建测试数据 Fixtures (定价配置、AI 模型) ✅ 更新测试用户积分余额 ✅ 添加测试依赖关系 ✅ 移除 AI Service 事务嵌套 ✅ 修复 UUID 类型转换问题 ✅ 修复所有 AI Service 方法的返回值序列化 ## 文件修改记录 - `server/tests/conftest.py` - 添加 fixtures - `server/tests/integration/test_ai_api_workflow.py` - 添加依赖 - `server/app/services/ai_service.py` - 修复返回值序列化(8 处) - `docs/server/changelogs/2026-01-30-ai-api-test-data-fixtures.md` - 测试数据文档 - `docs/server/changelogs/2026-01-30-ai-api-test-fix-summary.md` - 本文档 ## 总结 AI Service 的 UUID 序列化问题已完全修复,所有生成方法和查询方法现在都正确返回字符串格式的 `job_id`。但测试失败是由于 User Service 的事务管理问题,这是一个独立的问题,需要单独修复。修复 User Service 后,AI API 的集成测试应该能够通过。