test: P3-1 第38波单元测试(ingest/classification/generation/password_reset) #819

Merged
xiaoxia merged 3 commits from test/unit-test-wave38 into develop 2026-07-24 16:45:35 +08:00
Owner

变更内容

P3-1 第38波单元测试补充,覆盖4个模块:

新增测试

  • test_ingest_jobs.py — 5个测试(素材入库任务)
  • test_classification_jobs.py — 6个测试(AI分类任务)
  • test_generation_tasks.py — 20个测试(4个UseCase:创建/获取/列表/重试)
  • test_password_reset_use_case.py — 20个测试(请求重置+重置密码)

测试结果

  • 本波:41 passed
  • 全量:4556 passed, 8 skipped

累计进度

第1~38波累计约 1901 + 41 = ~1942个单测

## 变更内容 P3-1 第38波单元测试补充,覆盖4个模块: ### 新增测试 - `test_ingest_jobs.py` — 5个测试(素材入库任务) - `test_classification_jobs.py` — 6个测试(AI分类任务) - `test_generation_tasks.py` — 20个测试(4个UseCase:创建/获取/列表/重试) - `test_password_reset_use_case.py` — 20个测试(请求重置+重置密码) ### 测试结果 - 本波:41 passed - 全量:4556 passed, 8 skipped ### 累计进度 第1~38波累计约 1901 + 41 = ~1942个单测
xiaoxia added 3 commits 2026-07-24 11:44:19 +08:00
test: P3-1 第36波单元测试(assets/jwt_handler/password_handler/video_share)
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 6s
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 35s
CI/CD Pipeline / Validate - Code Quality (pull_request) Failing after 1m26s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 1m3s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 1m9s
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 1m50s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 43s
Preview Deploy / Deploy Preview Environment (pull_request) Failing after 22s
AI Code Review / AI Code Review (pull_request) Successful in 2m35s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 3m20s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 6m4s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 14m19s
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 2m21s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 3m4s
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 47s
040237169d
- test_assets_use_cases: 15个(ListAssetsUseCase + CreateAssetUseCase)
- test_jwt_handler: 18个(JWTHandler + 全局配置函数)
- test_password_handler: 22个(PasswordHandler + 全局配置函数)
- test_video_share_use_cases: 36个(8个UseCase全覆盖)
- 合计+77个测试,全量4554 passed
test: P3-1 第37波单元测试(text_splitter/pagination/password_hasher/bind_contact)
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 6s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 1m28s
CI/CD Pipeline / Validate - Code Quality (pull_request) Failing after 2m18s
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 / Validate - Migration (alembic) (pull_request) Successful in 1m14s
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been skipped
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 58s
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 1m38s
Preview Deploy / Deploy Preview Environment (pull_request) Failing after 18s
AI Code Review / AI Code Review (pull_request) Successful in 3m34s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 3m37s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 6m16s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 13m13s
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 / Unit Tests (pull_request) Successful in 2m36s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Integration Tests (pull_request) Successful in 2m50s
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 34s
d3ebfec015
- test_text_splitter: 18个(长文本分段工具)
- test_pagination: 25个(通用分页器)
- test_password_hasher: 24个(PasswordHasher + PasswordValidator)
- test_bind_contact_use_case: 29个(绑定手机/邮箱 + 发验证码)
- 合计+96个测试,全量通过
test: P3-1 第38波单元测试(ingest/classification/generation_tasks/password_reset)
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 32s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 1m2s
CI/CD Pipeline / Validate - Code Quality (pull_request) Failing after 2m14s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 1m26s
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 47s
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 / PR Build Web Image (pull_request) Successful in 56s
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been skipped
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 50s
Preview Deploy / Deploy Preview Environment (pull_request) Failing after 23s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 3m36s
AI Code Review / AI Code Review (pull_request) Successful in 4m14s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 5m24s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 9m44s
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 2m28s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 2m49s
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 56s
304dd364e3
- test_ingest_jobs: 5个(SubmitIngestJobUseCase)
- test_classification_jobs: 6个(SubmitClassificationJobUseCase)
- test_generation_tasks: 20个(4个UseCase)
- test_password_reset_use_case: 20个(请求重置+重置密码)
- 合计+41个测试,全量4556 passed
Collaborator

📊 审查概览

  • 整体评价:通过
  • 严重问题数量:0 个
  • 一般建议数量:2 个

需修改的问题(严重)

💡 改进建议(一般)

  1. [tests/unit/test_bind_contact_use_case.py: 323, 346] 无效格式测试的断言不够严谨

    • 具体内容:在 test_invalid_phone_formattest_invalid_email_format 中,仅使用了 assert error is not None 进行判断。如果被测实现返回空字符串 "" 而非具体的错误消息,测试将通过,但业务层逻辑可能将空字符串视为“无错误”从而导致处理异常。
    • 修改建议:建议修改为 assert error(判断真值)或使用 assert "格式" in error 匹配具体的错误提示信息,确保返回的是有效的错误对象。
  2. [tests/unit/test_classification_jobs.py: 56] ID 唯一性测试存在时序依赖

    • 具体内容test_submit_job_two_different_ids 依赖连续两次调用生成不同的 ID。如果 ID 生成逻辑依赖系统时间戳(如 UUID1 或时间戳+随机数),且测试用例执行速度极快,理论上存在生成相同 ID 的微小概率,导致测试不稳定。
    • 修改建议:虽然概率极低,但为了绝对的测试稳定性,建议在测试中 Mock ID 生成器,强制返回预设的不同 ID,从而解耦对系统时间的依赖。

良好实践

  • 测试覆盖全面:对空值、纯空格、前后缀处理(如手机号去+86)等边界条件均有覆盖。
  • Mock 使用规范:合理使用 MagicMockside_effect 模拟 Repository 和 Service 行为,隔离了依赖。
  • 断言清晰:大部分测试用例不仅检查返回值,还通过 assert_called_once_with 验证了方法的调用参数,确保了交互逻辑的正确性。

格式检查通过 | 逻辑审查通过 | 性能无问题


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

### 📊 审查概览 - **整体评价**:通过 - **严重问题数量**:0 个 - **一般建议数量**:2 个 ### ❌ 需修改的问题(严重) 无 ### 💡 改进建议(一般) 1. **[tests/unit/test_bind_contact_use_case.py: 323, 346] 无效格式测试的断言不够严谨** - **具体内容**:在 `test_invalid_phone_format` 和 `test_invalid_email_format` 中,仅使用了 `assert error is not None` 进行判断。如果被测实现返回空字符串 `""` 而非具体的错误消息,测试将通过,但业务层逻辑可能将空字符串视为“无错误”从而导致处理异常。 - **修改建议**:建议修改为 `assert error`(判断真值)或使用 `assert "格式" in error` 匹配具体的错误提示信息,确保返回的是有效的错误对象。 2. **[tests/unit/test_classification_jobs.py: 56] ID 唯一性测试存在时序依赖** - **具体内容**:`test_submit_job_two_different_ids` 依赖连续两次调用生成不同的 ID。如果 ID 生成逻辑依赖系统时间戳(如 UUID1 或时间戳+随机数),且测试用例执行速度极快,理论上存在生成相同 ID 的微小概率,导致测试不稳定。 - **修改建议**:虽然概率极低,但为了绝对的测试稳定性,建议在测试中 Mock ID 生成器,强制返回预设的不同 ID,从而解耦对系统时间的依赖。 ### ✅ 良好实践 - **测试覆盖全面**:对空值、纯空格、前后缀处理(如手机号去+86)等边界条件均有覆盖。 - **Mock 使用规范**:合理使用 `MagicMock` 和 `side_effect` 模拟 Repository 和 Service 行为,隔离了依赖。 - **断言清晰**:大部分测试用例不仅检查返回值,还通过 `assert_called_once_with` 验证了方法的调用参数,确保了交互逻辑的正确性。 --- ✅ 格式检查通过 | ✅ 逻辑审查通过 | ✅ 性能无问题 --- <sub>🤖 由 AI 代码审查机器人自动生成 | 2026-07-24 04:16:21 | 模型: </sub> <!-- AI_CODE_REVIEW_AUTO_COMMENT -->
xiaoxia merged commit afb2427089 into develop 2026-07-24 16:45:35 +08:00
xiaoxia deleted branch test/unit-test-wave38 2026-07-24 16:45:35 +08:00

🗑️ 预览环境已清理

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

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

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