fix(test): 修复publish_template_from_draft单元测试失败 #650

Merged
auto-approve-bot merged 1 commits from fix/unit-test-publish-template-draft into develop 2026-07-20 19:02:55 +08:00
Owner

问题

develop 上 Unit Tests 1个失败:

  • TestTemplateDraft::test_publish_template_from_draft_success
  • 错误:AssertionError: assert 3 == 2

根因

publish_template_from_draft 方法中删除旧片段配置用了 self._db.query(TemplateClipConfigModel).filter(...).delete() 直接操作SQLAlchemy,绕过了 _clip_config_repo

单元测试用的是 stub repository,_db 是 MagicMock,删除操作不会真的删 stub 里的数据 → 旧1个 + 新2个 = 3个。

修复

将直接 db 删除改为 self._clip_config_repo.delete_by_template(template_id),统一走 repository 模式:

  • 保证测试 stub 和真实行为一致
  • 代码架构更统一
  • 删除了无用的 TemplateClipConfigModel 导入

验证

本地 test_edit_template_service.py 全部 52 个测试通过。

## 问题 develop 上 Unit Tests 1个失败: - `TestTemplateDraft::test_publish_template_from_draft_success` - 错误:`AssertionError: assert 3 == 2` ## 根因 `publish_template_from_draft` 方法中删除旧片段配置用了 `self._db.query(TemplateClipConfigModel).filter(...).delete()` **直接操作SQLAlchemy**,绕过了 `_clip_config_repo`。 单元测试用的是 stub repository,`_db` 是 MagicMock,删除操作不会真的删 stub 里的数据 → 旧1个 + 新2个 = 3个。 ## 修复 将直接 db 删除改为 `self._clip_config_repo.delete_by_template(template_id)`,统一走 repository 模式: - 保证测试 stub 和真实行为一致 - 代码架构更统一 - 删除了无用的 `TemplateClipConfigModel` 导入 ## 验证 本地 `test_edit_template_service.py` 全部 52 个测试通过。
xiaoxia added 1 commit 2026-07-20 18:54:06 +08:00
fix(test): 修复publish_template_from_draft单元测试失败
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 14s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Deploy Production (pull_request) Has been skipped
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been skipped
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been skipped
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
AI Code Review / AI Code Review (pull_request) Successful in 2m11s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Has been skipped
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 1m47s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 45s
CI/CD Pipeline / Validate Code Quality And Tests (pull_request) Successful in 4m35s
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 6m27s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 7m35s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 6m57s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 7s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 4m49s
79cec240c3
根因:publish_template_from_draft方法中删除旧片段配置用了self._db.query().delete()
直接操作SQLAlchemy,绕过了_clip_config_repo。单元测试的stub repository
无法感知这个删除操作,导致旧数据残留,发布后片段数量从预期2个变成3个。

修复:将直接db删除改为_clip_config_repo.delete_by_template(),
统一走repository模式,保证测试stub和真实行为一致。
Collaborator

📊 审查概览

  • 整体评价:通过
  • 严重问题数量:0 个
  • 一般建议数量:1 个

需修改的问题(严重)

💡 改进建议(一般)

  1. [apps/api/app/services/edit_template_service.py:755] 确认 Repository 实现的性能
    • 具体内容:原代码显式使用了 synchronize_session=False 来优化批量删除性能。请确保 _clip_config_repo.delete_by_template 的内部实现也采用了对应的批量删除策略(例如 SQLAlchemy 的 delete().where(...) 语法),而非在循环中逐条删除,以避免在数据量较大时出现性能倒退。

良好实践

  1. 架构解耦:移除了 Service 层对 TemplateClipConfigModel(Infrastructure 层具体实现)的直接依赖,改用 Repository 接口,符合依赖倒置原则(DIP),提升了代码的可维护性。
  2. 提升可测试性:通过 Repository 模式,使得单元测试可以更方便地对 _clip_config_repo 进行 Mock/Stub,验证了注释中提到的“保证测试 stub 和真实行为一致”的意图。
  3. 代码整洁:移除了 Service 层中非必要的 import 语句,使职责更加单一。

🤖 由 AI 代码审查机器人自动生成 | 2026-07-20 18:56:21 | 模型:

### 📊 审查概览 - 整体评价:通过 - 严重问题数量:0 个 - 一般建议数量:1 个 ### ❌ 需修改的问题(严重) 无 ### 💡 改进建议(一般) 1. **[apps/api/app/services/edit_template_service.py:755] 确认 Repository 实现的性能** - 具体内容:原代码显式使用了 `synchronize_session=False` 来优化批量删除性能。请确保 `_clip_config_repo.delete_by_template` 的内部实现也采用了对应的批量删除策略(例如 SQLAlchemy 的 `delete().where(...)` 语法),而非在循环中逐条删除,以避免在数据量较大时出现性能倒退。 ### ✅ 良好实践 1. **架构解耦**:移除了 Service 层对 `TemplateClipConfigModel`(Infrastructure 层具体实现)的直接依赖,改用 Repository 接口,符合依赖倒置原则(DIP),提升了代码的可维护性。 2. **提升可测试性**:通过 Repository 模式,使得单元测试可以更方便地对 `_clip_config_repo` 进行 Mock/Stub,验证了注释中提到的“保证测试 stub 和真实行为一致”的意图。 3. **代码整洁**:移除了 Service 层中非必要的 `import` 语句,使职责更加单一。 --- <sub>🤖 由 AI 代码审查机器人自动生成 | 2026-07-20 18:56:21 | 模型: </sub> <!-- AI_CODE_REVIEW_AUTO_COMMENT -->

🚀 预览环境已部署

项目 详情
PR号 #650
预览链接 https://pr-650.preview.xiaoxiajianji.com
API环境 staging

💡 预览环境使用 staging API 数据,请勿在预览环境中操作重要数据。

🔄 每次提交新代码后预览环境会自动更新。

🗑️ PR 关闭或合并后,预览环境会自动清理。

🚀 **预览环境已部署** | 项目 | 详情 | |------|------| | PR号 | #650 | | 预览链接 | [https://pr-650.preview.xiaoxiajianji.com](https://pr-650.preview.xiaoxiajianji.com) | | API环境 | staging | > 💡 预览环境使用 staging API 数据,请勿在预览环境中操作重要数据。 > > 🔄 每次提交新代码后预览环境会自动更新。 > > 🗑️ PR 关闭或合并后,预览环境会自动清理。
auto-approve-bot approved these changes 2026-07-20 19:01:46 +08:00
auto-approve-bot left a comment
Collaborator

CI全绿,自动审批通过。

CI全绿,自动审批通过。
auto-approve-bot approved these changes 2026-07-20 19:01:47 +08:00
auto-approve-bot left a comment
Collaborator

CI全绿,自动审批通过。

CI全绿,自动审批通过。
auto-approve-bot merged commit d46ef0a336 into develop 2026-07-20 19:02:55 +08:00
auto-approve-bot deleted branch fix/unit-test-publish-template-draft 2026-07-20 19:02:55 +08:00

🗑️ 预览环境已清理

PR #650 已关闭或合并,对应的预览环境已被清理。

如有需要,可以重新打开 PR 来重新生成预览环境。

🗑️ **预览环境已清理** PR #650 已关闭或合并,对应的预览环境已被清理。 > 如有需要,可以重新打开 PR 来重新生成预览环境。
Sign in to join this conversation.