test(wave130): jwt_service JWT服务 + 50单测 #1033

Closed
xiaoxia wants to merge 1 commits from test/wave130-jwt-service into develop
Owner

wave130: JWT 服务单测覆盖

测试覆盖

模块 用例数 覆盖场景
JWTConfig 10 正常/自定义/空密钥/空白/None/7种不安全默认值
JWTService初始化 2 正常/None配置报错
create_access_token 10 格式/user_id/role/默认role/token类型/iat&exp/过期时间/额外声明/None声明/签名验证
create_refresh_token 4 格式/session_id/token类型/过期天数
verify_token 5 正常/过期/无效token/错误签名/篡改payload
verify_access_token 3 通过/refresh类型被拒/过期
verify_refresh_token 3 通过/access类型被拒/session_id验证
TokenType常量 3 access值/refresh值/不相同
多算法支持 3 HS384/HS512/算法不匹配
边界用例 5 空ID/长ID/特殊字符/Unicode/50个额外声明
合计 50

说明

  • 覆盖 JWT 全生命周期:创建→验证→类型检查→异常处理
  • 安全性验证:签名校验、防篡改、算法一致性
  • 全部本地测试,无外部依赖
## wave130: JWT 服务单测覆盖 ### 测试覆盖 | 模块 | 用例数 | 覆盖场景 | |------|--------|----------| | JWTConfig | 10 | 正常/自定义/空密钥/空白/None/7种不安全默认值 | | JWTService初始化 | 2 | 正常/None配置报错 | | create_access_token | 10 | 格式/user_id/role/默认role/token类型/iat&exp/过期时间/额外声明/None声明/签名验证 | | create_refresh_token | 4 | 格式/session_id/token类型/过期天数 | | verify_token | 5 | 正常/过期/无效token/错误签名/篡改payload | | verify_access_token | 3 | 通过/refresh类型被拒/过期 | | verify_refresh_token | 3 | 通过/access类型被拒/session_id验证 | | TokenType常量 | 3 | access值/refresh值/不相同 | | 多算法支持 | 3 | HS384/HS512/算法不匹配 | | 边界用例 | 5 | 空ID/长ID/特殊字符/Unicode/50个额外声明 | | **合计** | **50** | | ### 说明 - 覆盖 JWT 全生命周期:创建→验证→类型检查→异常处理 - 安全性验证:签名校验、防篡改、算法一致性 - 全部本地测试,无外部依赖

🚀 预览环境已部署

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

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

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

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

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

代码审查结果 - PR #1033

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

  1. tests/unit/test_jwt_service.py 第5行:未使用的导入 import time

    • 代码中移除了 time.sleep 的调用,但保留了 import time。虽然不影响运行,但违反了代码整洁原则,应删除。
  2. tests/unit/test_jwt_service.py 第165-176行 & 第217-228行:时间相关的断言存在竞态条件风险。

    • test_expiration_correcttest_refresh_expiration_days 中,通过 datetime.now() 记录 beforeafter 来判断过期时间是否在窗口内。在 CI/CD 高负载环境下,代码执行时间可能超过设定的 1-2 秒容差窗口,导致测试不稳定(Flaky Tests)。
    • 修改建议:使用 unittest.mock.patchfreezegun 库来 mock 时间,确保时间计算是确定性的,不依赖系统时钟和执行速度。

💡 建议(1个可选)

  1. tests/unit/test_jwt_service.py 第135、141等行:建议使用常量替代硬编码算法字符串。
    • 在多处使用 pyjwt.decode(..., algorithms=["HS256"]) 时,硬编码了 "HS256"。虽然当前测试主要针对 HS256,但为了代码的可维护性和一致性,建议使用文件顶部定义的 TEST_ALGORITHM 常量,避免未来修改默认算法时遗漏修改测试代码。

格式检查通过 | 逻辑审查需修改 | 建议关注性能


🤖 由 AI 代码审查机器人自动生成 | 2026-07-27 08:36:59 | 模型:

## 代码审查结果 - PR #1033 ### ⚠️ 问题(2个需要修改) 1. **tests/unit/test_jwt_service.py 第5行**:未使用的导入 `import time`。 - 代码中移除了 `time.sleep` 的调用,但保留了 `import time`。虽然不影响运行,但违反了代码整洁原则,应删除。 2. **tests/unit/test_jwt_service.py 第165-176行 & 第217-228行**:时间相关的断言存在竞态条件风险。 - 在 `test_expiration_correct` 和 `test_refresh_expiration_days` 中,通过 `datetime.now()` 记录 `before` 和 `after` 来判断过期时间是否在窗口内。在 CI/CD 高负载环境下,代码执行时间可能超过设定的 1-2 秒容差窗口,导致测试不稳定(Flaky Tests)。 - **修改建议**:使用 `unittest.mock.patch` 或 `freezegun` 库来 mock 时间,确保时间计算是确定性的,不依赖系统时钟和执行速度。 ### 💡 建议(1个可选) 1. **tests/unit/test_jwt_service.py 第135、141等行**:建议使用常量替代硬编码算法字符串。 - 在多处使用 `pyjwt.decode(..., algorithms=["HS256"])` 时,硬编码了 `"HS256"`。虽然当前测试主要针对 HS256,但为了代码的可维护性和一致性,建议使用文件顶部定义的 `TEST_ALGORITHM` 常量,避免未来修改默认算法时遗漏修改测试代码。 --- ✅ 格式检查通过 | ❌ 逻辑审查需修改 | ✅ 建议关注性能 --- <sub>🤖 由 AI 代码审查机器人自动生成 | 2026-07-27 08:36:59 | 模型: </sub> <!-- AI_CODE_REVIEW_AUTO_COMMENT -->
xiaoxia added 1 commit 2026-07-27 18:28:14 +08:00
test(wave130): jwt_service JWT服务+50单测
ACR Cleanup / ACR Image Cleanup (pull_request_target) Has been cancelled
CI/CD Pipeline / Validate - Code Quality (pull_request) Failing after 0s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Failing after 1s
CI/CD Pipeline / Check if frontend-only change (pull_request) Failing after 1s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Failing after 0s
AI Code Review / AI Code Review (pull_request) Failing after 1s
PR Automation / Auto Approve on CI Green (pull_request) Failing after 1s
CI/CD Pipeline / Frontend Lint (pull_request) Failing after 1s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Failing after 0s
CI/CD Pipeline / Unit Tests (pull_request) Failing after 1s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Failing after 0s
CI/CD Pipeline / Integration Tests (pull_request) Failing after 0s
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
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 1m20s
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 1m41s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 1m39s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 30s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 4m53s
CI/CD Pipeline / CI Gate (pull_request) Failing after 0s
CI/CD Pipeline / Build Production API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Web Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
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 / Canary Release to Production (pull_request) Has been cancelled
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
dbd854a64a
- JWTConfig: 正常配置/自定义/空密钥/空白密钥/None密钥/不安全默认值(7种)
- JWTService初始化: 正常/None配置报错
- create_access_token: 格式/用户ID/角色/默认角色/token类型/iat&exp/过期时间验证/额外声明/None声明/签名验证
- create_refresh_token: 格式/session_id/token类型/过期天数
- verify_token: 正常验证/过期token/无效token/错误签名/篡改payload
- verify_access_token: 通过/refresh被拒/过期
- verify_refresh_token: 通过/access被拒/session_id
- 多算法支持: HS256/HS384/HS512/算法不匹配
- 边界用例: 空用户ID/长ID/特殊字符/Unicode/大量额外声明
xiaoxia force-pushed test/wave130-jwt-service from e032257304 to dbd854a64a 2026-07-27 18:28:14 +08:00 Compare
xiaoxia closed this pull request 2026-07-27 18:30:27 +08:00

🗑️ 预览环境已清理

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

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

🗑️ **预览环境已清理** PR #1033 已关闭或合并,对应的预览环境已被清理。 > 如有需要,可以重新打开 PR 来重新生成预览环境。
Some checks are pending
ACR Cleanup / ACR Image Cleanup (pull_request_target) Has been cancelled
CI/CD Pipeline / Validate - Code Quality (pull_request) Failing after 0s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Failing after 1s
CI/CD Pipeline / Check if frontend-only change (pull_request) Failing after 1s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Failing after 0s
AI Code Review / AI Code Review (pull_request) Failing after 1s
PR Automation / Auto Approve on CI Green (pull_request) Failing after 1s
CI/CD Pipeline / Frontend Lint (pull_request) Failing after 1s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Failing after 0s
CI/CD Pipeline / Unit Tests (pull_request) Failing after 1s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Failing after 0s
CI/CD Pipeline / Integration Tests (pull_request) Failing after 0s
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
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 1m20s
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 1m41s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 1m39s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 30s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 4m53s
CI/CD Pipeline / CI Gate (pull_request) Failing after 0s
CI/CD Pipeline / Build Production API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Web Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
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 / Canary Release to Production (pull_request) Has been cancelled
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped

Pull request closed

Sign in to join this conversation.