test(wave209): JWT服务与处理器单测补全 +64测 #1179

Merged
xiaoxia merged 1 commits from test/wave209-jwt-auth into develop 2026-07-30 07:34:57 +08:00
Owner

概述

JWT 服务与处理器单元测试补全。

覆盖范围

  • JWTConfig:有效配置/空值密钥/不安全密钥/自定义配置
  • JWTService:access/refresh token创建与验证
  • Token验证:过期token、篡改token、错误密钥、空token
  • 类型校验:access/refresh token类型互斥验证
  • JWTHandler:委托层完整封装
  • 全局Handler:配置、获取、重新配置

共计 64 个测试用例,10个测试类。

测试统计

  • 64 passed
  • 0 failed
## 概述 JWT 服务与处理器单元测试补全。 ## 覆盖范围 - **JWTConfig**:有效配置/空值密钥/不安全密钥/自定义配置 - **JWTService**:access/refresh token创建与验证 - **Token验证**:过期token、篡改token、错误密钥、空token - **类型校验**:access/refresh token类型互斥验证 - **JWTHandler**:委托层完整封装 - **全局Handler**:配置、获取、重新配置 共计 **64 个测试用例**,10个测试类。 ## 测试统计 - 64 passed - 0 failed
xiaoxia added 1 commit 2026-07-30 07:14:51 +08:00
test(wave209): JWT服务与处理器单测补全 +64测
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 38s
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 / Validate - Type Check (mypy) (pull_request) Successful in 1m28s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 1m32s
Preview Deploy / Deploy Preview Environment (pull_request) Failing after 45s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 1m16s
AI Code Review / AI Code Review (pull_request) Successful in 2m35s
CI/CD Pipeline / Validate - Code Quality (pull_request) Successful in 3m33s
CI/CD Pipeline / Frontend Lint (pull_request) Has been skipped
CI/CD Pipeline / Frontend Unit Tests (pull_request) Has been skipped
CI/CD Pipeline / PR Build Web Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
PR Automation / Auto Approve on CI Green (pull_request) Successful in 3m54s
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 / Unit Tests (pull_request) Successful in 3m1s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 2m53s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 7m9s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 7m2s
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 / Canary Release to Production (pull_request) Has been cancelled
CI/CD Pipeline / Deploy Production (pull_request) Has been skipped
CI/CD Pipeline / CI Gate (pull_request) Successful in 41s
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 46s
a81e76112c
覆盖范围:
- JWTConfig: 有效/空值/不安全密钥/自定义配置
- JWTService: access/refresh token创建与验证
- 过期token、篡改token、错误密钥验证
- 类型校验(access vs refresh)
- JWTHandler委托层
- 全局handler配置与获取

64 test cases, 10 test classes
Collaborator

代码审查结果 - PR #1179

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

  1. tests/unit/test_jwt_service.py 第295行test_expired_refresh_token_raises 测试用例存在竞态条件/逻辑缺陷。该测试将 refresh_token_expire_days 设为 0 并立即验证 Token。由于 exp(过期时间)通常等于 iat(签发时间)+ 0,即 exp == iat。如果验证代码执行速度足够快,当前时间 now 可能等于 iat,导致 exp 并不小于 now,从而无法触发预期的 ExpiredSignatureError 异常,导致测试偶发性失败。对比同文件中 test_verify_expired_token_raises 的实现,该处缺少 time.sleep(0.1) 来确保时间流逝。

💡 建议(1个可选)

  1. tests/unit/test_jwt_service.py 第140行:在 test_additional_claims_can_override_standard 测试中,验证了 additional_claims 可以覆盖标准字段(如 sub)。虽然测试代码本身正确反映了当前实现,但从安全角度看,允许调用方通过 additional_claims 覆盖 sub(用户ID)可能存在权限绕过风险。建议确认业务逻辑是否确实需要这种灵活性,或者在 Service 层增加保护机制禁止覆盖关键字段。

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


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

## 代码审查结果 - PR #1179 ### ⚠️ 问题(1个需要修改) 1. **tests/unit/test_jwt_service.py 第295行**:`test_expired_refresh_token_raises` 测试用例存在竞态条件/逻辑缺陷。该测试将 `refresh_token_expire_days` 设为 0 并立即验证 Token。由于 `exp`(过期时间)通常等于 `iat`(签发时间)+ 0,即 `exp == iat`。如果验证代码执行速度足够快,当前时间 `now` 可能等于 `iat`,导致 `exp` 并不小于 `now`,从而无法触发预期的 `ExpiredSignatureError` 异常,导致测试偶发性失败。对比同文件中 `test_verify_expired_token_raises` 的实现,该处缺少 `time.sleep(0.1)` 来确保时间流逝。 ### 💡 建议(1个可选) 1. **tests/unit/test_jwt_service.py 第140行**:在 `test_additional_claims_can_override_standard` 测试中,验证了 `additional_claims` 可以覆盖标准字段(如 `sub`)。虽然测试代码本身正确反映了当前实现,但从安全角度看,允许调用方通过 `additional_claims` 覆盖 `sub`(用户ID)可能存在权限绕过风险。建议确认业务逻辑是否确实需要这种灵活性,或者在 Service 层增加保护机制禁止覆盖关键字段。 --- ✅ 格式检查通过 | ❌ 逻辑审查需修改 | ✅ 性能无问题 --- <sub>🤖 由 AI 代码审查机器人自动生成 | 2026-07-29 23:19:07 | 模型: </sub> <!-- AI_CODE_REVIEW_AUTO_COMMENT -->
xiaoxia merged commit 060307197c into develop 2026-07-30 07:34:57 +08:00

🗑️ 预览环境已清理

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

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

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