test(unit): 第67波 - trim引擎 + concat引擎 + subtitle_render引擎配置解析 (+112) #863

Merged
xiaoxia merged 1 commits from test/wave67-trim-concat-subtitle-render into develop 2026-07-25 08:13:12 +08:00
Owner

内容

  • TrimConfig: from_dict解析 + validate_and_resolve三选二推导 + 边界钳制 + is_valid/is_noop/trim_from_start属性
  • TrimSegment: from_dict解析 + segment_id默认值 + order字段
  • ConcatConfig/ConcatSegment: from_config_dict多段解析 + has_effect/total_segments + duration计算
  • SubtitleRender: hex转ASS BGR + opacity转alpha + 文本转义 + 时间格式化 + 自动换行 + SubtitleStyle配置

测试结果

本地 pytest: 112 passed 全绿

### 内容 - TrimConfig: from_dict解析 + validate_and_resolve三选二推导 + 边界钳制 + is_valid/is_noop/trim_from_start属性 - TrimSegment: from_dict解析 + segment_id默认值 + order字段 - ConcatConfig/ConcatSegment: from_config_dict多段解析 + has_effect/total_segments + duration计算 - SubtitleRender: hex转ASS BGR + opacity转alpha + 文本转义 + 时间格式化 + 自动换行 + SubtitleStyle配置 ### 测试结果 本地 pytest: **112 passed** 全绿
xiaoxia added 1 commit 2026-07-25 00:39:07 +08:00
test(unit): 第67波 - trim引擎 + concat引擎 + subtitle_render引擎配置解析
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 31s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 1m13s
CI/CD Pipeline / Validate - Code Quality (pull_request) Failing after 1m42s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 1m12s
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 / Frontend Lint (pull_request) Successful in 37s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 22s
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 24s
Preview Deploy / Deploy Preview Environment (pull_request) Failing after 36s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 1m30s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 4m1s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 4m17s
AI Code Review / AI Code Review (pull_request) Successful in 9m0s
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 / Unit Tests (pull_request) Successful in 2m39s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 2m14s
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 1m12s
0bdc3924ec
- TrimConfig: from_dict解析 + validate_and_resolve三选二推导 + 边界钳制 + is_valid/is_noop/trim_from_start属性
- TrimSegment: from_dict解析 + segment_id默认值 + order字段
- ConcatConfig: from_config_dict多段解析 + has_effect/total_segments属性
- ConcatSegment: 构造 + duration计算
- SubtitleRender: hex转ASS BGR颜色 + opacity转ASS alpha + 文本转义 + 时间格式化 + 自动换行 + SubtitleStyle配置
+112 tests 全绿
Collaborator

代码审查结果 - PR #863

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

  1. tests/unit/test_concat_engine.py 第42行test_basic_path 测试用例缺少对 has_audio 默认值的断言。

    • 说明:在 TestConcatSegmentDefaults 类中,has_audio 的默认值被断言为 True。但在 TestConcatSegmentFromDict 类的 test_basic_path 方法中,仅传入 video_path,却未断言 has_audio 的值。如果 from_dict 方法在缺少该字段时错误地默认为 FalseNone,此测试无法发现,导致测试覆盖不足。
    • 后果:可能导致 has_audio 在字典解析逻辑中的默认行为与构造函数不一致,且无法被单元测试拦截。
  2. tests/unit/test_subtitle_render_engine.py 第95行test_curly_braces_replaced 测试揭示的文本替换逻辑存在数据破坏风险。

    • 说明:测试断言将 {} 替换为 ()。虽然 ASS 字幕中花括号用于控制代码,但直接替换为圆括号会改变用户原本的文本语义(例如数学公式或特定符号)。通常的处理方式应为转义(如 \{)。
    • 后果:如果这是生产代码的预期行为,会导致用户输入的内容被篡改;如果这是测试写错了,则会导致测试掩盖了转义逻辑的缺失。

💡 建议(1个可选)

  1. tests/unit/test_subtitle_render_engine.py:建议补充 _wrap_text 对标点符号换行的测试用例。
    • 说明:当前 test_chinese_text_wrap 仅测试了纯汉字按长度截断。实际场景中,标点符号出现在行首或行尾可能不符合排版规范。建议增加包含标点的字符串测试,验证换行算法是否处理了标点禁则(虽然可能由集成测试覆盖,但单元测试覆盖更佳)。

格式检查通过 | 逻辑审查需修改 | 性能无明显问题


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

## 代码审查结果 - PR #863 ### ⚠️ 问题(2个需要修改) 1. **tests/unit/test_concat_engine.py 第42行**:`test_basic_path` 测试用例缺少对 `has_audio` 默认值的断言。 - **说明**:在 `TestConcatSegmentDefaults` 类中,`has_audio` 的默认值被断言为 `True`。但在 `TestConcatSegmentFromDict` 类的 `test_basic_path` 方法中,仅传入 `video_path`,却未断言 `has_audio` 的值。如果 `from_dict` 方法在缺少该字段时错误地默认为 `False` 或 `None`,此测试无法发现,导致测试覆盖不足。 - **后果**:可能导致 `has_audio` 在字典解析逻辑中的默认行为与构造函数不一致,且无法被单元测试拦截。 2. **tests/unit/test_subtitle_render_engine.py 第95行**:`test_curly_braces_replaced` 测试揭示的文本替换逻辑存在数据破坏风险。 - **说明**:测试断言将 `{` 和 `}` 替换为 `(` 和 `)`。虽然 ASS 字幕中花括号用于控制代码,但直接替换为圆括号会改变用户原本的文本语义(例如数学公式或特定符号)。通常的处理方式应为转义(如 `\{`)。 - **后果**:如果这是生产代码的预期行为,会导致用户输入的内容被篡改;如果这是测试写错了,则会导致测试掩盖了转义逻辑的缺失。 ### 💡 建议(1个可选) 1. **tests/unit/test_subtitle_render_engine.py**:建议补充 `_wrap_text` 对标点符号换行的测试用例。 - **说明**:当前 `test_chinese_text_wrap` 仅测试了纯汉字按长度截断。实际场景中,标点符号出现在行首或行尾可能不符合排版规范。建议增加包含标点的字符串测试,验证换行算法是否处理了标点禁则(虽然可能由集成测试覆盖,但单元测试覆盖更佳)。 --- ✅ 格式检查通过 | ❌ 逻辑审查需修改 | ✅ 性能无明显问题 --- <sub>🤖 由 AI 代码审查机器人自动生成 | 2026-07-24 17:00:24 | 模型: </sub> <!-- AI_CODE_REVIEW_AUTO_COMMENT -->
xiaoxia merged commit ff3038a291 into develop 2026-07-25 08:13:12 +08:00
xiaoxia deleted branch test/wave67-trim-concat-subtitle-render 2026-07-25 08:13:12 +08:00

🗑️ 预览环境已清理

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

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

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