test(wave142): transition_presets 单测补全 +65 #1065

Merged
xiaoxia merged 1 commits from test/wave142-transition-presets into develop 2026-07-28 12:21:34 +08:00
Owner

变更说明

转场预设库 domain 层单测补全,新增65个测试用例。

测试覆盖

  • TransitionPreset 数据类 (6): 属性、默认值、frozen不可变、含list不可哈希、相等性
  • 预设库完整性 (10): 数量、ID唯一、必填字段、时长范围校验、分类有效性、各分类最小数量、tags类型
  • get_transition_preset (8): 存在/不存在、随机/无转场、空串、大小写敏感、同实例、全量可访问
  • list_transition_presets (16): 无筛选、分类筛选(basic/fade/slide/无效)、关键词搜索(name/desc/tags/中英文/大小写/空/无匹配)、组合筛选、顺序保持、结果完整性
  • get_default_transition (5): 默认值、时长、分类、同实例、与ID查询一致
  • 典型预设验证 (15): 14个参数化预设属性 + dissolve默认时长验证

本地验证

  • pytest: 65 passed
  • black: 已格式化
## 变更说明 转场预设库 domain 层单测补全,新增65个测试用例。 ## 测试覆盖 - **TransitionPreset 数据类** (6): 属性、默认值、frozen不可变、含list不可哈希、相等性 - **预设库完整性** (10): 数量、ID唯一、必填字段、时长范围校验、分类有效性、各分类最小数量、tags类型 - **get_transition_preset** (8): 存在/不存在、随机/无转场、空串、大小写敏感、同实例、全量可访问 - **list_transition_presets** (16): 无筛选、分类筛选(basic/fade/slide/无效)、关键词搜索(name/desc/tags/中英文/大小写/空/无匹配)、组合筛选、顺序保持、结果完整性 - **get_default_transition** (5): 默认值、时长、分类、同实例、与ID查询一致 - **典型预设验证** (15): 14个参数化预设属性 + dissolve默认时长验证 ## 本地验证 - pytest: 65 passed - black: 已格式化
xiaoxia added 1 commit 2026-07-28 10:35:42 +08:00
test(wave142): add transition_presets unit tests (+65)
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 47s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 1m36s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 1m49s
CI/CD Pipeline / Validate - Code Quality (pull_request) Failing after 2m23s
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 51s
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 / PR Build Web Image (pull_request) Successful in 1m57s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 1m50s
AI Code Review / AI Code Review (pull_request) Successful in 2m4s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 57s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 5m26s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 3m24s
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
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 46m10s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 2m46s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 4m3s
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 / Canary Release to Production (pull_request) Has been cancelled
CI/CD Pipeline / CI Gate (pull_request) Successful in 9s
ACR Cleanup / ACR Image Cleanup (pull_request_target) Has been cancelled
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 21s
4765d83c8b
- TransitionPreset 数据类: 属性、默认值、frozen不可变、相等性
- 预设库完整性: 数量、ID唯一、必填字段、时长范围、分类验证
- get_transition_preset: 存在/不存在、随机、空串、大小写、同实例
- list_transition_presets: 无筛选、按分类、关键词搜索(name/desc/tags)、大小写不敏感、组合筛选、顺序保持
- get_default_transition: 默认值、时长、分类、同实例
- 14个典型预设属性参数化验证
Collaborator

【阻塞级判定】

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

📊 审查概览

  • 整体评价:有建议
  • 建议级问题数量:3 个

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

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

  1. [tests/unit/test_transition_presets.py: 136, 142] 测试用例使用了硬编码的精确数量

    • 具体内容:在 test_filter_by_category_slidetest_filter_by_category_basic 中,分别使用了 assert len(results) == 4assert len(results) == 2。这种断言方式使得测试非常脆弱,一旦业务逻辑扩展增加了新的转场预设(例如新增一个 slide 类型的转场),测试就会失败。建议改为 assert len(results) >= 4,或者断言特定的 ID 存在于结果中。
  2. [tests/unit/test_transition_presets.py: 247] 硬编码了具体的业务配置值

    • 具体内容:test_dissolve_longer_default 中断言 default_duration == 0.8。如果未来业务需求调整了“溶解”效果的默认时长,该测试将非预期地失败。建议改为检查范围(例如 assert p.default_duration > 0.5),除非该值是绝对不可变更的契约。
  3. [tests/unit/test_transition_presets.py: 43]`

    • 具体内容:在 test_frozen_immutable 中,将捕获的异常从 FrozenInstanceError 改为了通用的 Exception。虽然这能通过测试,但降低了测试的精确度。如果代码抛出其他类型的异常(如 RuntimeError),测试也会误判为通过。建议重新导入 FrozenInstanceError 并进行特定捕获,以确保测试意图准确。

良好实践

  • 使用了 pytest.mark.parametrize 对典型预设进行参数化测试,显著减少了重复代码,提高了可维护性。
  • 增加了 test_category_and_keyword_combined 等组合查询测试,覆盖了更复杂的业务场景。
  • 引入了 from __future__ import annotations,提升了类型提示的兼容性。
  • 测试文档字符串(docstring)编写规范,清晰描述了每个测试的意图。

🤖 由 AI 代码审查机器人自动生成 | 2026-07-28 03:21:31 | 模型:

### 【阻塞级判定】 - 是否存在阻塞级问题:否 - 阻塞级问题数量:0 个 ### 📊 审查概览 - 整体评价:有建议 - 建议级问题数量:3 个 ### 🔴 阻塞级问题(必须修复) 无 ### 💡 改进建议(不阻塞合并) 1. **[tests/unit/test_transition_presets.py: 136, 142] 测试用例使用了硬编码的精确数量** - 具体内容:在 `test_filter_by_category_slide` 和 `test_filter_by_category_basic` 中,分别使用了 `assert len(results) == 4` 和 `assert len(results) == 2`。这种断言方式使得测试非常脆弱,一旦业务逻辑扩展增加了新的转场预设(例如新增一个 slide 类型的转场),测试就会失败。建议改为 `assert len(results) >= 4`,或者断言特定的 ID 存在于结果中。 2. **[tests/unit/test_transition_presets.py: 247] 硬编码了具体的业务配置值** - 具体内容:`test_dissolve_longer_default` 中断言 `default_duration == 0.8`。如果未来业务需求调整了“溶解”效果的默认时长,该测试将非预期地失败。建议改为检查范围(例如 `assert p.default_duration > 0.5`),除非该值是绝对不可变更的契约。 3. **[tests/unit/test_transition_presets.py: 43]`** - 具体内容:在 `test_frozen_immutable` 中,将捕获的异常从 `FrozenInstanceError` 改为了通用的 `Exception`。虽然这能通过测试,但降低了测试的精确度。如果代码抛出其他类型的异常(如 `RuntimeError`),测试也会误判为通过。建议重新导入 `FrozenInstanceError` 并进行特定捕获,以确保测试意图准确。 ### ✅ 良好实践 - 使用了 `pytest.mark.parametrize` 对典型预设进行参数化测试,显著减少了重复代码,提高了可维护性。 - 增加了 `test_category_and_keyword_combined` 等组合查询测试,覆盖了更复杂的业务场景。 - 引入了 `from __future__ import annotations`,提升了类型提示的兼容性。 - 测试文档字符串(docstring)编写规范,清晰描述了每个测试的意图。 --- <sub>🤖 由 AI 代码审查机器人自动生成 | 2026-07-28 03:21:31 | 模型: </sub> <!-- AI_CODE_REVIEW_AUTO_COMMENT -->

🚀 预览环境已部署

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

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

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

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

🚀 **预览环境已部署** | 项目 | 详情 | |------|------| | PR号 | #1065 | | 预览链接 | [https://pr-1065.preview.xiaoxiajianji.com](https://pr-1065.preview.xiaoxiajianji.com) | | API环境 | staging | > 💡 预览环境使用 staging API 数据,请勿在预览环境中操作重要数据。 > > 🔄 每次提交新代码后预览环境会自动更新。 > > 🗑️ PR 关闭或合并后,预览环境会自动清理。
xiaoxia merged commit 6fcb4cd70c into develop 2026-07-28 12:21:34 +08:00

🗑️ 预览环境已清理

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

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

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