test(p3-1): 第二十四波 - 注册+密码重置 use case 39个单测 #730

Merged
xiaoxia merged 2 commits from test/p3-1-wave24-register-password-reset-tests into develop 2026-07-22 22:42:06 +08:00
Owner

P3-1 单元测试补充 - 第二十四波

新增测试文件

  • tests/unit/test_auth_register_password_reset.py — 39个测试

覆盖范围

RegisterUserUseCase (13个)

  • 成功注册、email strip+lowercase、username strip、display_name strip
  • 空email/username/display_name、弱密码、邮箱已注册、用户名已占用
  • 邮件发送失败(用户仍创建)、邮件服务异常(用户仍创建)、异常处理、user_id生成

VerifyEmailUseCase (6个)

  • 验证成功、空token、无效token、已验证幂等、token清除、异常处理

RequestPasswordResetUseCase (9个)

  • 请求成功、空email、用户不存在仍返回true(防枚举)、token过期时间正确
  • 默认过期时间、邮件发送失败仍返回true、邮件异常仍返回true、email规范化、异常处理

ResetPasswordUseCase (11个)

  • 重置成功、空token、空新密码、弱密码、无效token、已过期token
  • naive datetime过期处理、无过期时间、token清除、异常处理

累计

  • 第二十四波:39个
  • 累计:约1330+个单测
## P3-1 单元测试补充 - 第二十四波 ### 新增测试文件 - `tests/unit/test_auth_register_password_reset.py` — 39个测试 ### 覆盖范围 **RegisterUserUseCase (13个)** - 成功注册、email strip+lowercase、username strip、display_name strip - 空email/username/display_name、弱密码、邮箱已注册、用户名已占用 - 邮件发送失败(用户仍创建)、邮件服务异常(用户仍创建)、异常处理、user_id生成 **VerifyEmailUseCase (6个)** - 验证成功、空token、无效token、已验证幂等、token清除、异常处理 **RequestPasswordResetUseCase (9个)** - 请求成功、空email、用户不存在仍返回true(防枚举)、token过期时间正确 - 默认过期时间、邮件发送失败仍返回true、邮件异常仍返回true、email规范化、异常处理 **ResetPasswordUseCase (11个)** - 重置成功、空token、空新密码、弱密码、无效token、已过期token - naive datetime过期处理、无过期时间、token清除、异常处理 ### 累计 - 第二十四波:39个 - 累计:约1330+个单测
xiaoxia added 1 commit 2026-07-22 18:31:44 +08:00
test(p3-1): add 39 unit tests for register + password reset use cases
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 56s
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 54s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 43s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 41s
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 1m13s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Failing after 1m6s
CI/CD Pipeline / Validate - Code Quality (pull_request) Failing after 2m46s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 1m42s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 47s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 7m38s
CI/CD Pipeline / Unit Tests (pull_request) Has been cancelled
CI/CD Pipeline / Integration Tests (pull_request) Has been cancelled
CI/CD Pipeline / Frontend Unit Tests (pull_request) Has been cancelled
CI/CD Pipeline / PR Build Worker Image (pull_request) Has been cancelled
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been cancelled
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been cancelled
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been cancelled
CI/CD Pipeline / Build Production API Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Production Web Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been cancelled
CI/CD Pipeline / Deploy Production (pull_request) Has been cancelled
CI/CD Pipeline / Production Browser E2E (pull_request) Has been cancelled
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been cancelled
AI Code Review / AI Code Review (pull_request) Has been cancelled
14c98c5779
Covers:
- RegisterUserUseCase (13 cases): success, email normalize, username/display
  name strip, empty fields, weak password, email exists, username taken,
  email service failure, email service exception, exception handling, user id
- VerifyEmailUseCase (6 cases): success, empty token, invalid token,
  already verified idempotent, token cleared, exception handling
- RequestPasswordResetUseCase (9 cases): success, empty email, nonexistent
  user security (returns true), token expiry, default expiry, email failure,
  email exception, email normalize, exception handling
- ResetPasswordUseCase (11 cases): success, empty token, empty password,
  weak password, invalid token, expired token, naive datetime expiry,
  no expiry, token cleared, exception handling

🚀 预览环境已部署

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

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

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

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

🚀 **预览环境已部署** | 项目 | 详情 | |------|------| | PR号 | #730 | | 预览链接 | [https://pr-730.preview.xiaoxiajianji.com](https://pr-730.preview.xiaoxiajianji.com) | | API环境 | staging | > 💡 预览环境使用 staging API 数据,请勿在预览环境中操作重要数据。 > > 🔄 每次提交新代码后预览环境会自动更新。 > > 🗑️ PR 关闭或合并后,预览环境会自动清理。
xiaoxia added 1 commit 2026-07-22 19:07:21 +08:00
fix(ci): auto-fix lint/format issues
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 1m5s
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 33s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 40s
CI/CD Pipeline / Validate - Code Quality (pull_request) Successful in 1m49s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 22s
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 35s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 52s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Failing after 50s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 5m27s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 38s
AI Code Review / AI Code Review (pull_request) Successful in 3m22s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 21m29s
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 1m33s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Has been skipped
CI/CD Pipeline / Integration Tests (pull_request) Failing after 2m58s
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 1m43s
532f1e7fb2
auto-approve-bot approved these changes 2026-07-22 19:32:35 +08:00
auto-approve-bot left a comment
Collaborator

CI全绿,自动审批通过。

CI全绿,自动审批通过。
auto-approve-bot approved these changes 2026-07-22 19:32:35 +08:00
auto-approve-bot left a comment
Collaborator

CI全绿,自动审批通过。

CI全绿,自动审批通过。
Collaborator

代码审查结果 - PR #730

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

  1. tests/unit/test_auth_register_password_reset.py 第565行:测试用例 test_email_stripped_lowercased 逻辑不完整。代码中仅创建了 RequestPasswordResetRequest 对象并断言了其属性,但未调用 use_case.execute(req)。这导致该测试实际上只验证了请求对象(DTO)自身的初始化/规范化逻辑,而未验证 Use Case 层是否正确利用规范化后的邮箱去查找用户。根据注释意图,应当执行完整的用例流程。

💡 建议(1个可选)

  1. tests/unit/test_auth_register_password_reset.py:在涉及时间计算的测试(如 test_token_expiry_set_correctlytest_default_expire_hours)中,建议使用 freezegun 等库来冻结时间。虽然当前代码使用了 beforeafter 时间戳加 1 秒容错来处理,但在极高负载或 CI 环境抖动下,仍存在极低概率的失败风险,冻结时间能提供更确定的断言。

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


🤖 由 AI 代码审查机器人自动生成 | 2026-07-22 19:34:43 | 模型:

## 代码审查结果 - PR #730 ### ⚠️ 问题(1个需要修改) 1. **tests/unit/test_auth_register_password_reset.py 第565行**:测试用例 `test_email_stripped_lowercased` 逻辑不完整。代码中仅创建了 `RequestPasswordResetRequest` 对象并断言了其属性,但**未调用 `use_case.execute(req)`**。这导致该测试实际上只验证了请求对象(DTO)自身的初始化/规范化逻辑,而未验证 Use Case 层是否正确利用规范化后的邮箱去查找用户。根据注释意图,应当执行完整的用例流程。 ### 💡 建议(1个可选) 1. **tests/unit/test_auth_register_password_reset.py**:在涉及时间计算的测试(如 `test_token_expiry_set_correctly`、`test_default_expire_hours`)中,建议使用 `freezegun` 等库来冻结时间。虽然当前代码使用了 `before` 和 `after` 时间戳加 1 秒容错来处理,但在极高负载或 CI 环境抖动下,仍存在极低概率的失败风险,冻结时间能提供更确定的断言。 --- ✅ 格式检查通过 | ❌ 逻辑审查需修改 | ✅ 性能无明显问题 --- <sub>🤖 由 AI 代码审查机器人自动生成 | 2026-07-22 19:34:43 | 模型: </sub> <!-- AI_CODE_REVIEW_AUTO_COMMENT -->
xiaoxia merged commit 0f6496a945 into develop 2026-07-22 22:42:06 +08:00

🗑️ 预览环境已清理

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

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

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