test(wave101): 抽取video_filter_builder纯逻辑模块 + 73个单测 #972

Closed
xiaoxia wants to merge 1 commits from test/wave101-video-filter-builder into develop
Owner

变更内容

video_compose_service.py 抽离 FFmpeg 滤镜构建纯逻辑到 packages/domain/video_filter_builder.py,便于独立测试和复用。

拆分内容

  • ClipFilterChain 数据类
  • build_clip_filter: 单片段滤镜链(scale/pad/format/fps/setpts/trim,共7个滤镜)
  • build_concat_filter: concat 拼接(含 aformat 音频归一化 + 音频 concat)
  • build_xfade_filter: xfade 转场链(fade/slideleft/slideright/dissolve/wipeleft 五种转场)
  • build_filter_complex: 策略自动选择(单片段直通 / concat / xfade)
  • chain_filters / has_audio: 工具函数
  • 常量:DEFAULT_OUTPUT_WIDTH/HEIGHT/FPS、XFADE_TRANSITION_MAP 等

向后兼容

video_compose_service.py 保留所有私有方法别名和模块级函数别名,均委托到新模块,原有 42 个测试全部通过。

代码规模

  • 原文件:648 行 → 436 行(-33%)
  • 新模块:379 行
  • 净增:+167 行(拆分后测试更聚焦、更可测)

测试

+73 个单测,覆盖:

  • ClipFilterChain 不可变性 + 字段
  • 常量与 XFADE 映射表
  • build_clip_filter:普通/零时长/负时长/起始偏移/各 clip_type 音频判断/零 fps/fps 跳过/自定义分辨率/大小写不敏感
  • chain_filters:单滤镜/多滤镜/空列表/自定义输入标签
  • has_audio:全有/部分有/全无/空列表
  • build_concat_filter:空/单片段无音频/单片段有音频/两片段无音频/两片段有音频/混合音频/三片段总时长/音频归一化内容/分号分隔
  • build_xfade_filter:空/单片段无音频/单片段有音频/两片段 fade/offset 计算/三片段链式/三片段 offsets/全部5种转场类型/未知转场默认 fade/cut 默认值/transitions 比 clips 短/零转场时长/总时长非负/两音频归一化+concat/单音频 acopy/无音频
  • build_filter_complex:空/单片段直通/单片段音频直通/单片段无音频/全 cut 走 concat/一个转场走 xfade/字符串 cut 识别/混合 cut 和转场/全部 dissolve
  • 端到端集成:两视频 concat/两片段 xfade/title+video 混合音频

验证结果:115 passed(42 原有 + 73 新增),全绿。

关联

单测主线第101波,边测边拆大文件。

## 变更内容 从 `video_compose_service.py` 抽离 FFmpeg 滤镜构建纯逻辑到 `packages/domain/video_filter_builder.py`,便于独立测试和复用。 ### 拆分内容 - **ClipFilterChain** 数据类 - **build_clip_filter**: 单片段滤镜链(scale/pad/format/fps/setpts/trim,共7个滤镜) - **build_concat_filter**: concat 拼接(含 aformat 音频归一化 + 音频 concat) - **build_xfade_filter**: xfade 转场链(fade/slideleft/slideright/dissolve/wipeleft 五种转场) - **build_filter_complex**: 策略自动选择(单片段直通 / concat / xfade) - **chain_filters / has_audio**: 工具函数 - **常量**:DEFAULT_OUTPUT_WIDTH/HEIGHT/FPS、XFADE_TRANSITION_MAP 等 ### 向后兼容 `video_compose_service.py` 保留所有私有方法别名和模块级函数别名,均委托到新模块,原有 42 个测试全部通过。 ### 代码规模 - 原文件:648 行 → 436 行(-33%) - 新模块:379 行 - 净增:+167 行(拆分后测试更聚焦、更可测) ## 测试 **+73 个单测**,覆盖: - ClipFilterChain 不可变性 + 字段 - 常量与 XFADE 映射表 - build_clip_filter:普通/零时长/负时长/起始偏移/各 clip_type 音频判断/零 fps/fps 跳过/自定义分辨率/大小写不敏感 - chain_filters:单滤镜/多滤镜/空列表/自定义输入标签 - has_audio:全有/部分有/全无/空列表 - build_concat_filter:空/单片段无音频/单片段有音频/两片段无音频/两片段有音频/混合音频/三片段总时长/音频归一化内容/分号分隔 - build_xfade_filter:空/单片段无音频/单片段有音频/两片段 fade/offset 计算/三片段链式/三片段 offsets/全部5种转场类型/未知转场默认 fade/cut 默认值/transitions 比 clips 短/零转场时长/总时长非负/两音频归一化+concat/单音频 acopy/无音频 - build_filter_complex:空/单片段直通/单片段音频直通/单片段无音频/全 cut 走 concat/一个转场走 xfade/字符串 cut 识别/混合 cut 和转场/全部 dissolve - 端到端集成:两视频 concat/两片段 xfade/title+video 混合音频 **验证结果**:115 passed(42 原有 + 73 新增),全绿。 ## 关联 单测主线第101波,边测边拆大文件。
xiaoxia added 1 commit 2026-07-26 18:44:47 +08:00
test(wave101): 抽取video_filter_builder纯逻辑模块 + 73个单测
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 11s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 58s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 58s
CI/CD Pipeline / Frontend Lint (pull_request) Failing after 53s
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 Worker Image (pull_request) Successful in 41s
CI/CD Pipeline / Validate - Code Quality (pull_request) Failing after 2m4s
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 1m2s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 51s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 57s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 4m3s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 3m17s
AI Code Review / AI Code Review (pull_request) Successful in 6m38s
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 2m30s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 3m38s
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
CI/CD Pipeline / Canary Release to Production (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 20s
4db9353b18
从 video_compose_service.py 抽离 FFmpeg 滤镜构建纯逻辑到 packages/domain/video_filter_builder.py:
- ClipFilterChain 数据类
- build_clip_filter: 单片段滤镜链(scale/pad/format/fps/setpts/trim)
- build_concat_filter: concat 拼接(含音频归一化)
- build_xfade_filter: xfade 转场链(fade/slide/dissolve/wipe)
- build_filter_complex: 策略选择(单片段/concat/xfade)
- chain_filters / has_audio 工具函数
- 常量与 XFADE_TRANSITION_MAP

video_compose_service.py 保留向后兼容别名(私有方法+模块级函数均委托到新模块)

测试:+73 个单测,覆盖所有边界
- 原有 42 个测试全部通过(向后兼容验证)
- 新增 73 个测试,覆盖数据类/常量/所有函数的正反向路径
- 648行 → 436行(-33%),新模块 379 行
xiaoxia force-pushed test/wave101-video-filter-builder from 0655fb3e9f to 4db9353b18 2026-07-26 18:44:47 +08:00 Compare

🚀 预览环境已部署

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

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

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

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

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

🗑️ 预览环境已清理

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

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

🗑️ **预览环境已清理** PR #972 已关闭或合并,对应的预览环境已被清理。 > 如有需要,可以重新打开 PR 来重新生成预览环境。
Some checks are pending
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 11s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 58s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 58s
CI/CD Pipeline / Frontend Lint (pull_request) Failing after 53s
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 Worker Image (pull_request) Successful in 41s
CI/CD Pipeline / Validate - Code Quality (pull_request) Failing after 2m4s
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 1m2s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 51s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 57s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 4m3s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 3m17s
AI Code Review / AI Code Review (pull_request) Successful in 6m38s
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 2m30s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 3m38s
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
CI/CD Pipeline / Canary Release to Production (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 20s

Pull request closed

Sign in to join this conversation.