From 5d767abe726b7e23e3c810ded1eff6e5cb4a20ec Mon Sep 17 00:00:00 2001 From: Your Name Date: Fri, 29 May 2026 14:00:21 +0800 Subject: [PATCH] test(docs): P2 optimization - add router tests and update README - Add router package tests to improve coverage - Update README status date to 2026-05-29 - Mark all P0/P1 review blockers as resolved - Update project readiness rating to B (conditional ready) --- README.md | 7 ++-- internal/api/router/router_test.go | 57 ++++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+), 3 deletions(-) create mode 100644 internal/api/router/router_test.go diff --git a/README.md b/README.md index cf6b175..300bb48 100644 --- a/README.md +++ b/README.md @@ -186,7 +186,7 @@ cd frontend/admin && env -u NODE_ENV npm run test:run - 生产部署:`DEPLOY_GUIDE.md` - 运行手册:`docs/guides/` 目录下的 7 个 Runbook -## 测试状态(2026-05-28 live snapshot) +## 测试状态(2026-05-29 live snapshot) | 测试类型 | 状态 | |----------|------| @@ -203,11 +203,12 @@ cd frontend/admin && env -u NODE_ENV npm run test:run 完整项目状态:`docs/status/REAL_PROJECT_STATUS.md` -**2026-05-28 最新状态:** +**2026-05-29 最新状态:** - 后端 build / vet / full test matrix 全绿 - 前端 lint / build / unit test 全绿 - 前端 dev toolchain 审计收敛为 0 漏洞 - 浏览器级真实 E2E 已闭环 -- 当前剩余工作主要是提交边界整理与文档/工作树卫生收口,而非新的功能性 blocker +- 全部 P0/P1 review blocker 已修复 +- 当前项目评级:B / 有条件就绪 **边界说明:** 当前可以诚实宣称的是“本地可审计的后端/前端验证与浏览器级真实 E2E 已闭环”;不应夸大为“所有生产外部集成和完整上线材料都已全部闭环”。 diff --git a/internal/api/router/router_test.go b/internal/api/router/router_test.go new file mode 100644 index 0000000..b77a1ac --- /dev/null +++ b/internal/api/router/router_test.go @@ -0,0 +1,57 @@ +package router + +import ( + "testing" + + "github.com/stretchr/testify/assert" + + "github.com/user-management-system/internal/api/handler" +) + +// TestRouter_NewRouter 测试 router 创建 +func TestRouter_NewRouter(t *testing.T) { + // 创建不带 avatar handler 的 router + router1 := NewRouter( + nil, nil, nil, nil, nil, nil, + nil, nil, nil, nil, nil, nil, + nil, nil, nil, nil, nil, nil, + nil, nil, nil, nil, + ) + assert.NotNil(t, router1) + assert.Nil(t, router1.avatarHandler) + + // 创建带 avatar handler 的 router + avatarHandler := &handler.AvatarHandler{} + router2 := NewRouter( + nil, nil, nil, nil, nil, nil, + nil, nil, nil, nil, nil, nil, + nil, nil, nil, nil, nil, nil, + nil, nil, nil, nil, + avatarHandler, + ) + assert.NotNil(t, router2) + assert.NotNil(t, router2.avatarHandler) +} + +// TestRouter_StructFields 测试 router 结构体字段 +func TestRouter_StructFields(t *testing.T) { + router := NewRouter( + nil, nil, nil, nil, nil, nil, + nil, nil, nil, nil, nil, nil, + nil, nil, nil, nil, nil, nil, + nil, nil, nil, nil, + ) + + // 验证所有字段都被正确设置(即使为 nil) + assert.NotNil(t, router.engine) + assert.Nil(t, router.authHandler) + assert.Nil(t, router.userHandler) + assert.Nil(t, router.roleHandler) + assert.Nil(t, router.permissionHandler) + assert.Nil(t, router.deviceHandler) + assert.Nil(t, router.logHandler) + assert.Nil(t, router.authMiddleware) + assert.Nil(t, router.rateLimitMiddleware) + assert.Nil(t, router.opLogMiddleware) + assert.Nil(t, router.ipFilterMiddleware) +}