test(P3-1): 第53波 domain 单测 - tts_job/voice_clone_profile/video_share(+133) #843

Merged
xiaoxia merged 1 commits from test/wave53-domain-ttsjob-voiceclone-videoshare into develop 2026-07-24 21:30:57 +08:00
Owner

变更内容

  • test_tts_job_domain.py: 57个测试
  • test_voice_clone_profile_domain.py: 52个测试
  • test_video_share_domain.py: 24个测试

覆盖模块

  • domain/tts_job.py(TTS任务领域模型)
  • domain/voice_clone_profile.py(音色克隆档案)
  • domain/video_share.py(视频分享)

测试统计

新增 133 个单测,全部通过

## 变更内容 - test_tts_job_domain.py: 57个测试 - test_voice_clone_profile_domain.py: 52个测试 - test_video_share_domain.py: 24个测试 ## 覆盖模块 - domain/tts_job.py(TTS任务领域模型) - domain/voice_clone_profile.py(音色克隆档案) - domain/video_share.py(视频分享) ## 测试统计 新增 133 个单测,全部通过
xiaoxia added 1 commit 2026-07-24 20:24:16 +08:00
test(p3-1): wave53 - tts_job/voice_clone_profile/video_share 单测 +133
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 23s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 1m14s
CI/CD Pipeline / Validate - Code Quality (pull_request) Failing after 1m43s
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 30s
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 1m1s
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 / PR Build Web Image (pull_request) Successful in 1m41s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 57s
Preview Deploy / Deploy Preview Environment (pull_request) Failing after 45s
AI Code Review / AI Code Review (pull_request) Successful in 3m22s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 4m0s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 7m19s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 12m52s
CI/CD Pipeline / Frontend Unit Tests (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 / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Integration Tests (pull_request) Successful in 2m38s
CI/CD Pipeline / Unit Tests (pull_request) Failing after 4m33s
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
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 18s
a3fc619cdc
- tts_job: 状态枚举/创建/状态机/重试/序列化 全量测试 +57
- voice_clone_profile: 状态枚举/创建/状态机/重试/序列化 全量测试 +52
- video_share: 密码哈希/token生成/创建/属性/密码验证/计数 全量测试 +24
- 合计 +133
Collaborator

代码审查结果 - PR #843

⚠️ 问题(2个需要修改)

  1. tests/unit/test_tts_job_domain.py 第321行:单元测试中使用 time.sleep(0.001) 来验证时间更新。

    • 原因:在单元测试中使用 time.sleep 会不必要地拖慢测试套件的执行速度。虽然这里使用了 >= 进行断言避免了竞态条件导致的失败,但最佳实践是 Mock 时间提供者(如 datetime.now)来控制时间,而不是依赖系统时钟的流逝。
    • 后果:影响 CI/CD 流水线的执行效率。
  2. tests/unit/test_tts_job_domain.py 第265行:测试方法 test_is_retryable_failed_at_limit 中直接修改内部属性 job.retry_count = 1

    • 原因:直接设置对象的内部状态(retry_count)绕过了领域模型的业务逻辑(通常通过 prepare_retrymark_failed 等方法改变状态)。这种“上帝模式”的测试方式虽然能快速达到特定状态,但如果生产代码中增加了对 retry_count 的校验或封装逻辑,测试可能会失效或掩盖逻辑错误。
    • 后果:测试脆弱,无法真实反映业务流程中的状态变更逻辑。

💡 建议(2个可选)

  1. tests/unit/test_tts_job_domain.py:建议补充对 voice_model 参数的测试覆盖。

    • 内容:在旧代码中存在 test_create_with_all_fields 测试了 voice_model="cosyvoice",但在新代码的 TestTTSJobCreate 类中,仅测试了 voice_idproject_id 等参数,未见显式传递 voice_model 的测试用例。如果重构后的 TTSJob.create 仍支持该参数,建议补充测试用例以确保其正确赋值。
  2. tests/unit/test_tts_job_domain.py 第52行:测试用例命名与实际行为不完全匹配。

    • 内容test_create_empty_user_id_raises 方法传入的是 " "(空格),而断言匹配的是 "user_id 不能为空"。这暗示了代码逻辑是“先去除空格再判空”。建议将测试方法重命名为 test_create_whitespace_user_id_raises 或保留原方法名但增加对纯空字符串 "" 的显式测试,以更清晰地覆盖边界条件。

格式检查通过 | 逻辑审查需修改 | ⚠️ 建议关注性能


🤖 由 AI 代码审查机器人自动生成 | 2026-07-24 12:41:28 | 模型:

## 代码审查结果 - PR #843 ### ⚠️ 问题(2个需要修改) 1. **tests/unit/test_tts_job_domain.py 第321行**:单元测试中使用 `time.sleep(0.001)` 来验证时间更新。 - **原因**:在单元测试中使用 `time.sleep` 会不必要地拖慢测试套件的执行速度。虽然这里使用了 `>=` 进行断言避免了竞态条件导致的失败,但最佳实践是 Mock 时间提供者(如 `datetime.now`)来控制时间,而不是依赖系统时钟的流逝。 - **后果**:影响 CI/CD 流水线的执行效率。 2. **tests/unit/test_tts_job_domain.py 第265行**:测试方法 `test_is_retryable_failed_at_limit` 中直接修改内部属性 `job.retry_count = 1`。 - **原因**:直接设置对象的内部状态(`retry_count`)绕过了领域模型的业务逻辑(通常通过 `prepare_retry` 或 `mark_failed` 等方法改变状态)。这种“上帝模式”的测试方式虽然能快速达到特定状态,但如果生产代码中增加了对 `retry_count` 的校验或封装逻辑,测试可能会失效或掩盖逻辑错误。 - **后果**:测试脆弱,无法真实反映业务流程中的状态变更逻辑。 ### 💡 建议(2个可选) 1. **tests/unit/test_tts_job_domain.py**:建议补充对 `voice_model` 参数的测试覆盖。 - **内容**:在旧代码中存在 `test_create_with_all_fields` 测试了 `voice_model="cosyvoice"`,但在新代码的 `TestTTSJobCreate` 类中,仅测试了 `voice_id`、`project_id` 等参数,未见显式传递 `voice_model` 的测试用例。如果重构后的 `TTSJob.create` 仍支持该参数,建议补充测试用例以确保其正确赋值。 2. **tests/unit/test_tts_job_domain.py 第52行**:测试用例命名与实际行为不完全匹配。 - **内容**:`test_create_empty_user_id_raises` 方法传入的是 `" "`(空格),而断言匹配的是 "user_id 不能为空"。这暗示了代码逻辑是“先去除空格再判空”。建议将测试方法重命名为 `test_create_whitespace_user_id_raises` 或保留原方法名但增加对纯空字符串 `""` 的显式测试,以更清晰地覆盖边界条件。 --- ✅ 格式检查通过 | ❌ 逻辑审查需修改 | ⚠️ 建议关注性能 --- <sub>🤖 由 AI 代码审查机器人自动生成 | 2026-07-24 12:41:28 | 模型: </sub> <!-- AI_CODE_REVIEW_AUTO_COMMENT -->
xiaoxia merged commit 3ca32f3532 into develop 2026-07-24 21:30:57 +08:00
xiaoxia deleted branch test/wave53-domain-ttsjob-voiceclone-videoshare 2026-07-24 21:30:57 +08:00

🗑️ 预览环境已清理

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

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

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