test: wave216 template use cases +46单测(12个UC全量覆盖) #1188

Merged
xiaoxia merged 2 commits from test/wave216-template-use-cases into develop 2026-07-30 08:45:16 +08:00
Owner

变更内容

为模板模块的 12 个 Use Cases 补充 46 个单元测试。

测试覆盖

CRUD Use Cases

  • CreateTemplateUseCase: 创建+片段创建、模式校验失败、多片段、空片段
  • ListTemplatesUseCase: 无过滤、带filter(category/tag/keyword/mode)、分页
  • CountTemplatesUseCase: 无过滤、带过滤
  • GetTemplateUseCase: 存在、不存在
  • UpdateTemplateUseCase: 改名/改模式/改片段、None不修改、模式校验、不存在
  • DeleteTemplateUseCase: 成功、失败
  • CopyTemplateUseCase: 成功、不存在、空名/空白名校验、name strip

ValidateTemplateUseCase (核心业务校验)

  • one_take模式必须恰好1个片段(0个/多个都报错)
  • voice_over模式每个片段必须有有效material_type(人物/场景)
  • 配音时长±30%偏差警告(边界0.7/1.3精确测试)
  • zero/None voiceover_duration跳过校验
  • warnings详情结构(code/message/details)

其他

  • Category CRUD (Create/List/Delete)
  • ListTagsUseCase
  • GetTemplateUsageUseCase

验证

  • 46/46 全绿
  • ruff + black 通过
## 变更内容 为模板模块的 12 个 Use Cases 补充 46 个单元测试。 ## 测试覆盖 ### CRUD Use Cases - **CreateTemplateUseCase**: 创建+片段创建、模式校验失败、多片段、空片段 - **ListTemplatesUseCase**: 无过滤、带filter(category/tag/keyword/mode)、分页 - **CountTemplatesUseCase**: 无过滤、带过滤 - **GetTemplateUseCase**: 存在、不存在 - **UpdateTemplateUseCase**: 改名/改模式/改片段、None不修改、模式校验、不存在 - **DeleteTemplateUseCase**: 成功、失败 - **CopyTemplateUseCase**: 成功、不存在、空名/空白名校验、name strip ### ValidateTemplateUseCase (核心业务校验) - one_take模式必须恰好1个片段(0个/多个都报错) - voice_over模式每个片段必须有有效material_type(人物/场景) - 配音时长±30%偏差警告(边界0.7/1.3精确测试) - zero/None voiceover_duration跳过校验 - warnings详情结构(code/message/details) ### 其他 - Category CRUD (Create/List/Delete) - ListTagsUseCase - GetTemplateUsageUseCase ## 验证 - ✅ 46/46 全绿 - ✅ ruff + black 通过
xiaoxia added 2 commits 2026-07-30 08:19:04 +08:00
test: wave215 add 77 unit tests for video_share (domain + use cases)
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 / Check if frontend-only change (pull_request) Successful in 49s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 1m53s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 1m56s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 1m43s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 1m55s
CI/CD Pipeline / Frontend Lint (pull_request) Has been skipped
CI/CD Pipeline / Frontend Unit Tests (pull_request) Has been skipped
CI/CD Pipeline / PR Build Web Image (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
PR Automation / Auto Approve on CI Green (pull_request) Successful in 4m8s
CI/CD Pipeline / Validate - Code Quality (pull_request) Successful in 4m37s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 4m12s
AI Code Review / AI Code Review (pull_request) Successful in 7m4s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 4m23s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 4m21s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 2m34s
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 / CI Gate (pull_request) Successful in 40s
CI/CD Pipeline / Deploy Production (pull_request) Has been skipped
CI/CD Pipeline / Canary Release to Production (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 1m17s
ACR Cleanup / ACR Image Cleanup (pull_request_target) Waiting to run
b1d4f466e4
Domain层 (43测):
- 密码哈希 (加盐SHA-256)
- Token生成 (去歧义字符、长度、URL友好)
- VideoShare.create 校验 (空ID、空白、去重、过期时间校验)
- has_password / is_expired / is_accessible 属性
- verify_password 密码验证
- 浏览/下载计数
- revoke 撤销分享

Use case层 (34测):
- CreateShareUseCase (视频存在性/所有权校验)
- GetShareByTokenUseCase (过期/撤销拦截)
- AccessShareUseCase (密码校验、浏览量+1、视频查询)
- ListSharesByVideoUseCase / ListSharesByUserUseCase (分页)
- UpdateShareUseCase (改密码/清密码/改过期时间)
- RevokeShareUseCase
- RecordShareDownloadUseCase (密码校验、下载量+1)
test: wave216 add 46 unit tests for template use cases (12个UC全量覆盖)
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 30s
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 / Validate - Type Check (mypy) (pull_request) Successful in 1m10s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 1m7s
AI Code Review / AI Code Review (pull_request) Successful in 1m16s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 59s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 1m35s
CI/CD Pipeline / Validate - Code Quality (pull_request) Successful in 4m33s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 4m43s
CI/CD Pipeline / Frontend Lint (pull_request) Has been skipped
CI/CD Pipeline / Frontend Unit Tests (pull_request) Has been skipped
CI/CD Pipeline / PR Build Web Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Unit Tests (pull_request) Successful in 3m13s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 5m37s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 5m36s
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 / Integration Tests (pull_request) Successful in 2m34s
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 / Canary Release to Production (pull_request) Has been cancelled
CI/CD Pipeline / Deploy Production (pull_request) Has been skipped
CI/CD Pipeline / CI Gate (pull_request) Successful in 50s
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
ACR Cleanup / ACR Image Cleanup (pull_request_target) Has been cancelled
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 2m22s
1f2f1d5d5b
覆盖的 Use Cases:
- CreateTemplateUseCase (创建+片段创建,模式校验)
- ListTemplatesUseCase (无过滤/带过滤/分页)
- CountTemplatesUseCase (无过滤/带过滤)
- GetTemplateUseCase (存在/不存在)
- UpdateTemplateUseCase (改名字/模式/片段/NONE不修改,模式校验)
- DeleteTemplateUseCase (成功/失败)
- CopyTemplateUseCase (成功/不存在/空名/空白名/strip)
- ValidateTemplateUseCase (核心业务校验):
  - one_take模式必须恰好1个片段
  - voice_over模式每个片段必须有有效material_type
  - 配音时长±30%偏差警告
  - 边界值(0.7/1.3精确边界)
  - zero/None voiceover_duration跳过
  - warnings详情结构验证
- CreateCategoryUseCase / ListCategoriesUseCase / DeleteCategoryUseCase
- ListTagsUseCase
- GetTemplateUsageUseCase
Collaborator

【阻塞级判定】

  • 是否存在阻塞级问题:否
  • 阻塞级问题数量:0 个

📊 审查概览

  • 整体评价:通过
  • 建议级问题数量:2 个

🔴 阻塞级问题(必须修复)

💡 改进建议(不阻塞合并)

  1. [tests/unit/domain/test_video_share.py: 10] 导入路径依赖检查

    • 具体内容:代码将导入路径从 domain.video_share 修改为 packages.domain.video_share。请确认目标分支中已存在 packages/domain/video_share.py 文件,且该文件已包含相应的实体和函数实现。如果这是一个重构 PR,请确保源代码文件的移动与测试代码的移动在同一 PR 或已合并的 PR 中完成,否则会导致 CI 构建失败(ModuleNotFoundError)。
  2. [tests/unit/domain/test_video_share.py: 28] 边外参数处理一致性

    • 具体内容:代码中移除了 test_none_password_returns_empty 测试用例,仅保留了 test_empty_password_returns_empty。这暗示 _hash_password 函数可能不再处理 None 类型输入,或者调用方(如 VideoShare.create)已保证不传入 None。建议检查 VideoShare.create 方法中对于 password=None 的处理逻辑,确保其能正确转换为空字符串或抛出明确的异常,避免运行时类型错误。

良好实践

  • 测试用例分类清晰(如 TestHashPassword, TestVideoShareCreate),提高了可读性。
  • 增加了对哈希格式(SHA-256 hex)和加盐逻辑的显式测试(test_hash_is_sha256_hex, test_hash_contains_salt),增强了安全性测试覆盖。
  • 使用了 re.match 正则表达式精确校验哈希格式,比简单的长度检查更严谨。
  • 移除了容易混淆字符(ilO01)的 Token 生成测试,符合 URL 安全和用户体验的最佳实践。
  • 增加了幂等性测试(test_revoke_idempotent),确保重复操作的安全性。

🤖 由 AI 代码审查机器人自动生成 | 2026-07-30 00:24:13 | 模型:

### 【阻塞级判定】 - 是否存在阻塞级问题:否 - 阻塞级问题数量:0 个 ### 📊 审查概览 - 整体评价:通过 - 建议级问题数量:2 个 ### 🔴 阻塞级问题(必须修复) 无 ### 💡 改进建议(不阻塞合并) 1. **[tests/unit/domain/test_video_share.py: 10] 导入路径依赖检查** - 具体内容:代码将导入路径从 `domain.video_share` 修改为 `packages.domain.video_share`。请确认目标分支中已存在 `packages/domain/video_share.py` 文件,且该文件已包含相应的实体和函数实现。如果这是一个重构 PR,请确保源代码文件的移动与测试代码的移动在同一 PR 或已合并的 PR 中完成,否则会导致 CI 构建失败(ModuleNotFoundError)。 2. **[tests/unit/domain/test_video_share.py: 28] 边外参数处理一致性** - 具体内容:代码中移除了 `test_none_password_returns_empty` 测试用例,仅保留了 `test_empty_password_returns_empty`。这暗示 `_hash_password` 函数可能不再处理 `None` 类型输入,或者调用方(如 `VideoShare.create`)已保证不传入 `None`。建议检查 `VideoShare.create` 方法中对于 `password=None` 的处理逻辑,确保其能正确转换为空字符串或抛出明确的异常,避免运行时类型错误。 ### ✅ 良好实践 - 测试用例分类清晰(如 `TestHashPassword`, `TestVideoShareCreate`),提高了可读性。 - 增加了对哈希格式(SHA-256 hex)和加盐逻辑的显式测试(`test_hash_is_sha256_hex`, `test_hash_contains_salt`),增强了安全性测试覆盖。 - 使用了 `re.match` 正则表达式精确校验哈希格式,比简单的长度检查更严谨。 - 移除了容易混淆字符(`ilO01`)的 Token 生成测试,符合 URL 安全和用户体验的最佳实践。 - 增加了幂等性测试(`test_revoke_idempotent`),确保重复操作的安全性。 --- <sub>🤖 由 AI 代码审查机器人自动生成 | 2026-07-30 00:24:13 | 模型: </sub> <!-- AI_CODE_REVIEW_AUTO_COMMENT -->

🚀 预览环境已部署

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

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

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

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

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

LGTM - 单测全绿,逻辑正确

LGTM - 单测全绿,逻辑正确
xiaoxia merged commit 5e74d0b565 into develop 2026-07-30 08:45:16 +08:00
xiaoxia deleted branch test/wave216-template-use-cases 2026-07-30 08:45:16 +08:00

🗑️ 预览环境已清理

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

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

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