test(pagination): P3-1第十一波 通用分页器单测 52个 #715

Merged
auto-approve-bot merged 3 commits from feat/p3-1-pagination-tests into develop 2026-07-22 15:36:07 +08:00
Owner

P3-1 第十一波单元测试

新增

  • tests/unit/test_pagination.py - 52个测试

覆盖范围

  • PaginationParams (19个): 默认值、参数校验(page/page_size边界、非法值、类型错误)、offset计算、limit属性
  • PaginationMeta.from_params (13个): 空数据、刚好一页、不足一页、首/中/末页、整除/非整除、超出总页数
  • PaginatedResponse.create (3个): 正常数据、空数据、列表类型保留
  • paginate内存分页 (12个): 空列表、首/中/末页、超出范围、page_size大于总数、单元素、page_size=1、字符串元素、不修改原列表
## P3-1 第十一波单元测试 ### 新增 - `tests/unit/test_pagination.py` - 52个测试 ### 覆盖范围 - **PaginationParams** (19个): 默认值、参数校验(page/page_size边界、非法值、类型错误)、offset计算、limit属性 - **PaginationMeta.from_params** (13个): 空数据、刚好一页、不足一页、首/中/末页、整除/非整除、超出总页数 - **PaginatedResponse.create** (3个): 正常数据、空数据、列表类型保留 - **paginate内存分页** (12个): 空列表、首/中/末页、超出范围、page_size大于总数、单元素、page_size=1、字符串元素、不修改原列表
xiaoxia added 2 commits 2026-07-22 14:29:06 +08:00
test(p3-1): 第十波 - url_security 安全模块单测 72个
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 10s
CI/CD Pipeline / Validate - Code Quality (pull_request) Failing after 46s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 32s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 30s
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 56s
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 1m19s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 3m32s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 48s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 49s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 1m12s
AI Code Review / AI Code Review (pull_request) Successful in 5m35s
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
911478495a
覆盖 url_security.py 核心安全逻辑:
- validate_url_safety: scheme/端口/主机名/URL长度 等基础校验
- SSRF防护: 内网IP/回环/链路本地/组播/未指定/保留地址
- 内网主机名防护: localhost/.local/.internal/metadata
- 可信域名白名单: 精确匹配+子域名匹配
- is_url_safe 便捷函数
- 文件魔数校验: PNG/JPEG/GIF/WEBP/BMP/WAV/MP3/OGG/FLAC
- safe_download_file / safe_download_bytes (mock网络)
- 大小限制 / MIME类型白名单 / Content-Length预检
test(pagination): 补充通用分页器52个单元测试
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 24s
CI/CD Pipeline / Validate - Code Quality (pull_request) Failing after 47s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 26s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 25s
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 41s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 46s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 50s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 37s
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 5m59s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 6m6s
AI Code Review / AI Code Review (pull_request) Successful in 3m20s
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
a9bc314fed
覆盖 PaginationParams 默认值/校验/offset/limit、
PaginationMeta.from_params 边界场景、
PaginatedResponse.create 工厂方法、
paginate 内存分页函数

🚀 预览环境已部署

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

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

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

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

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

代码审查结果 - PR #715

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

  1. tests/unit/test_url_security.py 第262行起:测试中直接修改模块全局变量(mod.TRUSTED_DOMAINS),破坏了测试隔离性。
    • 问题描述:在 TestTrustedDomains 类中,部分测试方法(如 test_is_trusted_domain_subdomain)通过直接赋值 mod.TRUSTED_DOMAINS 来修改全局状态,虽然使用了 try...finally 进行还原,但这种做法在并行测试环境(如 pytest-xdist)下会导致严重的竞态条件(Race Condition),使得测试结果不可靠。此外,同文件第254行的 test_is_trusted_domain_exact_match 已经正确使用了 patch,代码风格不一致。
    • 修改建议:统一使用 unittest.mock.patchpytest.fixture 来管理全局状态的 mock,避免直接修改模块变量。

💡 建议(1个可选)

  1. tests/unit/test_pagination.py 第131行:边界测试值硬编码,缺乏可维护性。
    • 具体内容test_page_size_over_100_raises 中硬编码了 101100。如果业务逻辑中的最大页大小限制发生变化,此测试可能失效或测试错误的边界。建议从源代码模块中导入 MAX_PAGE_SIZE 常量(如果存在),并使用 MAX_PAGE_SIZE + 1 进行测试,确保测试逻辑与实现逻辑同步。

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


🤖 由 AI 代码审查机器人自动生成 | 2026-07-22 14:47:11 | 模型:

## 代码审查结果 - PR #715 ### ⚠️ 问题(1个需要修改) 1. **tests/unit/test_url_security.py 第262行起**:测试中直接修改模块全局变量(`mod.TRUSTED_DOMAINS`),破坏了测试隔离性。 - **问题描述**:在 `TestTrustedDomains` 类中,部分测试方法(如 `test_is_trusted_domain_subdomain`)通过直接赋值 `mod.TRUSTED_DOMAINS` 来修改全局状态,虽然使用了 `try...finally` 进行还原,但这种做法在并行测试环境(如 pytest-xdist)下会导致严重的竞态条件(Race Condition),使得测试结果不可靠。此外,同文件第254行的 `test_is_trusted_domain_exact_match` 已经正确使用了 `patch`,代码风格不一致。 - **修改建议**:统一使用 `unittest.mock.patch` 或 `pytest.fixture` 来管理全局状态的 mock,避免直接修改模块变量。 ### 💡 建议(1个可选) 1. **tests/unit/test_pagination.py 第131行**:边界测试值硬编码,缺乏可维护性。 - **具体内容**:`test_page_size_over_100_raises` 中硬编码了 `101` 和 `100`。如果业务逻辑中的最大页大小限制发生变化,此测试可能失效或测试错误的边界。建议从源代码模块中导入 `MAX_PAGE_SIZE` 常量(如果存在),并使用 `MAX_PAGE_SIZE + 1` 进行测试,确保测试逻辑与实现逻辑同步。 --- ✅ 格式检查通过 | ❌ 逻辑审查需修改 | ✅ 性能无明显问题 --- <sub>🤖 由 AI 代码审查机器人自动生成 | 2026-07-22 14:47:11 | 模型: </sub> <!-- AI_CODE_REVIEW_AUTO_COMMENT -->
xiaoxia added 1 commit 2026-07-22 14:50:07 +08:00
fix(ci): auto-fix lint/format issues
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
PR Automation / Auto Approve on CI Green (pull_request) Successful in 56s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 50s
AI Code Review / AI Code Review (pull_request) Successful in 10m23s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 19m29s
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 / Frontend Unit Tests (pull_request) Has been skipped
CI/CD Pipeline / Deploy Production (pull_request) Has been skipped
CI/CD Pipeline / Check if frontend-only change (pull_request) Has been skipped
CI/CD Pipeline / Validate - Code Quality (pull_request) Has been skipped
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Has been skipped
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Has been skipped
CI/CD Pipeline / Unit Tests (pull_request) Has been skipped
CI/CD Pipeline / Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / Frontend Lint (pull_request) Has been skipped
CI/CD Pipeline / PR Build API Image (pull_request) Has been skipped
CI/CD Pipeline / PR Build Web Image (pull_request) Has been skipped
CI/CD Pipeline / PR Build Worker Image (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
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 37s
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
ccb7c5d746
auto-approve-bot approved these changes 2026-07-22 15:17:04 +08:00
auto-approve-bot left a comment
Collaborator

CI全绿,自动审批通过。

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

CI全绿,自动审批通过。

CI全绿,自动审批通过。
auto-approve-bot merged commit 5f17fd5faf into develop 2026-07-22 15:36:07 +08:00
auto-approve-bot deleted branch feat/p3-1-pagination-tests 2026-07-22 15:36:07 +08:00

🗑️ 预览环境已清理

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

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

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