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)
This commit is contained in:
@@ -186,7 +186,7 @@ cd frontend/admin && env -u NODE_ENV npm run test:run
|
|||||||
- 生产部署:`DEPLOY_GUIDE.md`
|
- 生产部署:`DEPLOY_GUIDE.md`
|
||||||
- 运行手册:`docs/guides/` 目录下的 7 个 Runbook
|
- 运行手册:`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`
|
完整项目状态:`docs/status/REAL_PROJECT_STATUS.md`
|
||||||
|
|
||||||
**2026-05-28 最新状态:**
|
**2026-05-29 最新状态:**
|
||||||
- 后端 build / vet / full test matrix 全绿
|
- 后端 build / vet / full test matrix 全绿
|
||||||
- 前端 lint / build / unit test 全绿
|
- 前端 lint / build / unit test 全绿
|
||||||
- 前端 dev toolchain 审计收敛为 0 漏洞
|
- 前端 dev toolchain 审计收敛为 0 漏洞
|
||||||
- 浏览器级真实 E2E 已闭环
|
- 浏览器级真实 E2E 已闭环
|
||||||
- 当前剩余工作主要是提交边界整理与文档/工作树卫生收口,而非新的功能性 blocker
|
- 全部 P0/P1 review blocker 已修复
|
||||||
|
- 当前项目评级:B / 有条件就绪
|
||||||
|
|
||||||
**边界说明:** 当前可以诚实宣称的是“本地可审计的后端/前端验证与浏览器级真实 E2E 已闭环”;不应夸大为“所有生产外部集成和完整上线材料都已全部闭环”。
|
**边界说明:** 当前可以诚实宣称的是“本地可审计的后端/前端验证与浏览器级真实 E2E 已闭环”;不应夸大为“所有生产外部集成和完整上线材料都已全部闭环”。
|
||||||
|
|||||||
57
internal/api/router/router_test.go
Normal file
57
internal/api/router/router_test.go
Normal file
@@ -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)
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user