|
|
@@ -1,8 +1,10 @@
|
|
|
# 权限管理系统 (perms-system-server) — 测试报告
|
|
|
|
|
|
-> 报告日期: 2026-04-18
|
|
|
-> 测试范围: API (go-zero REST, 全 POST) + gRPC (status codes) + Model 层 (_gen.go 模板生成 + 自定义方法) + Logic 单元测试 + util 层 + 访问控制 + UserDetailsLoader + 限流中间件
|
|
|
-> 测试用例设计详见 [test-design.md](./test-design.md)
|
|
|
+> 报告日期: 2026-04-18
|
|
|
+> 测试范围: API (go-zero REST, 全 POST) + gRPC (status codes) + Model 层 (_gen.go 模板生成 + 自定义方法) + Logic 单元测试 + util 层 + 访问控制 + UserDetailsLoader + 限流中间件
|
|
|
+> 测试用例设计详见 [test-design.md](./test-design.md)
|
|
|
+> 执行命令: `go test -count=1 -timeout 600s -cover ./...`
|
|
|
+> 覆盖率命令: `go test -count=1 -coverpkg=./internal/... -coverprofile=cover.out ./internal/... && go tool cover -func=cover.out`
|
|
|
|
|
|
---
|
|
|
|
|
|
@@ -10,771 +12,920 @@
|
|
|
|
|
|
| 指标 | 数值 |
|
|
|
| :--- | :--- |
|
|
|
-| 测试用例总数 (test-design.md) | 558 |
|
|
|
-| 已覆盖 TC 数 | 557 |
|
|
|
-| 未实现 TC 数 | 1 (TC-0228 不可达防御分支 t.Skip) |
|
|
|
-| 测试函数总数 | 735 |
|
|
|
-| 测试子用例总数 (含 table-driven) | 816 |
|
|
|
-| 测试包数量 | 23 |
|
|
|
-| ✅ 通过 | **734 / 735** |
|
|
|
+| 测试包总数 (可运行) | 23 |
|
|
|
+| TC 用例总数 (test-design.md) | **555** |
|
|
|
+| 顶层 Test 函数总数 | **714** |
|
|
|
+| 子用例 (`t.Run`) 数量 | **87** |
|
|
|
+| 测试执行事件总数 (含子用例) | **801** |
|
|
|
+| ✅ 通过 | **800** |
|
|
|
| ❌ 失败 | **0** |
|
|
|
-| ⏭️ 跳过 | **1** (TC-0228 — 防御性不可达分支) |
|
|
|
-
|
|
|
-### 1.1 各包测试耗时
|
|
|
-
|
|
|
-| 测试包 | 状态 | 耗时 |
|
|
|
-| :--- | :--- | :--- |
|
|
|
-| handler/pub | ✅ ok | 3.887s |
|
|
|
-| loaders | ✅ ok | 4.451s |
|
|
|
-| logic/auth | ✅ ok | 12.255s |
|
|
|
-| logic/dept | ✅ ok | 5.968s |
|
|
|
-| logic/member | ✅ ok | 6.744s |
|
|
|
-| logic/perm | ✅ ok | 5.111s |
|
|
|
-| logic/product | ✅ ok | 11.583s |
|
|
|
-| logic/pub | ✅ ok | 9.044s |
|
|
|
-| logic/role | ✅ ok | 9.519s |
|
|
|
-| logic/user | ✅ ok | 11.197s |
|
|
|
-| middleware | ✅ ok | 10.859s |
|
|
|
-| model/dept | ✅ ok | 11.690s |
|
|
|
-| model/perm | ✅ ok | 12.527s |
|
|
|
-| model/product | ✅ ok | 13.272s |
|
|
|
-| model/productmember | ✅ ok | 12.531s |
|
|
|
-| model/role | ✅ ok | 12.742s |
|
|
|
-| model/roleperm | ✅ ok | 12.897s |
|
|
|
-| model/user | ✅ ok | 13.014s |
|
|
|
-| model/userperm | ✅ ok | 12.975s |
|
|
|
-| model/userrole | ✅ ok | 11.406s |
|
|
|
-| response | ✅ ok | 9.247s |
|
|
|
-| server | ✅ ok | 10.234s |
|
|
|
-| util | ✅ ok | 9.563s |
|
|
|
+| ⏭️ 跳过 | **1** (TC-0263 防御性不可达分支) |
|
|
|
+| 整体语句覆盖率 (coverpkg=./internal/...) | **69.8%** |
|
|
|
+| 通过率 (TC 维度) | **99.8%** |
|
|
|
+
|
|
|
+### 1.1 各测试包结果 & 覆盖率
|
|
|
+
|
|
|
+| 测试包 | 状态 | 耗时 | 语句覆盖率 | 顶层 Test 函数数 |
|
|
|
+| :--- | :--- | :--- | :--- | ---: |
|
|
|
+| handler/pub | ✅ ok | 1.190s | 25.0% | 2 |
|
|
|
+| loaders | ✅ ok | 2.323s | 86.3% | 23 |
|
|
|
+| logic/auth | ✅ ok | 6.703s | 82.5% | 44 |
|
|
|
+| logic/dept | ✅ ok | 3.719s | 89.6% | 28 |
|
|
|
+| logic/member | ✅ ok | 3.004s | 84.7% | 17 |
|
|
|
+| logic/perm | ✅ ok | 4.319s | 78.6% | 4 |
|
|
|
+| logic/product | ✅ ok | 5.804s | 84.0% | 26 |
|
|
|
+| logic/pub | ✅ ok | 5.983s | 90.1% | 46 |
|
|
|
+| logic/role | ✅ ok | 6.519s | 83.4% | 23 |
|
|
|
+| logic/user | ✅ ok | 10.001s | 88.4% | 87 |
|
|
|
+| middleware | ✅ ok | 6.890s | 93.0% | 15 |
|
|
|
+| model/dept | ✅ ok | 6.874s | 87.9% | 32 |
|
|
|
+| model/perm | ✅ ok | 7.631s | 93.0% | 47 |
|
|
|
+| model/product | ✅ ok | 8.296s | 93.5% | 28 |
|
|
|
+| model/productmember | ✅ ok | 9.111s | 93.5% | 38 |
|
|
|
+| model/role | ✅ ok | 9.927s | 95.1% | 50 |
|
|
|
+| model/roleperm | ✅ ok | 10.414s | 93.7% | 39 |
|
|
|
+| model/user | ✅ ok | 11.669s | 87.9% | 51 |
|
|
|
+| model/userperm | ✅ ok | 10.627s | 93.8% | 36 |
|
|
|
+| model/userrole | ✅ ok | 9.918s | 91.8% | 39 |
|
|
|
+| response | ✅ ok | 10.164s | 94.7% | 8 |
|
|
|
+| server | ✅ ok | 9.225s | 73.8% | 28 |
|
|
|
+| util | ✅ ok | 9.295s | 40.9% | 3 |
|
|
|
+
|
|
|
+### 1.2 测试覆盖统计说明
|
|
|
+
|
|
|
+- **整体语句覆盖率 69.8%** 为跨 `./internal/...` 所有包(包含 handler/svc/mocks)的合并语句覆盖率.
|
|
|
+- `handler/*` 为 go-zero 代码生成的薄路由层, 其逻辑在 logic 层已被单测/集成测试覆盖, 本次未对 handler 入口再写重复用例, 故 handler 语句覆盖率偏低(除 `handler/pub` 登录/管理后台登录 HTTP 入口被 loginHandler_test.go / adminLoginHandler_test.go 直接覆盖外).
|
|
|
+- `util` 包覆盖率 40.9% 因 `util` 包内存在大量 string/path 辅助函数未在生产代码使用, 仅 `NormalizePage` / `IsValidEmail` / `IsValidPhone` 等对外暴露方法被测试覆盖.
|
|
|
+- 核心业务包 (logic/*, model/*, loaders, middleware, server) 语句覆盖率均 ≥ 73.8%, 其中 Model 层普遍 ≥ 87%, 中间件 93%, 统一响应 94.7%.
|
|
|
+- 整体 `801` 次测试执行事件中, `800` 通过, `1` 跳过, `0` 失败, 未发现 BUG.
|
|
|
|
|
|
---
|
|
|
|
|
|
## 二、TC 测试结果明细
|
|
|
|
|
|
-### 2.1 REST API — 产品端登录 (TC-0001 ~ TC-0014)
|
|
|
-
|
|
|
-| TC编号 | 测试场景 | 测试结果 |
|
|
|
-| :--- | :--- | :--- |
|
|
|
-| TC-0001 | 正常登录(普通用户+productCode) | ✅ pass |
|
|
|
-| TC-0002 | 正常登录-带productCode+ADMIN成员 | ✅ pass |
|
|
|
-| TC-0003 | 超管通过产品端登录被拒绝(403) | ✅ pass |
|
|
|
-| TC-0004 | 超管无productCode被拒绝(403) | ✅ pass |
|
|
|
-| TC-0005 | 用户不存在 | ✅ pass |
|
|
|
-| TC-0006 | DB异常(非ErrNotFound) | ✅ pass |
|
|
|
-| TC-0007 | 密码错误 | ✅ pass |
|
|
|
-| TC-0008 | 账号冻结 | ✅ pass |
|
|
|
-| TC-0009 | 非产品成员 | ✅ pass |
|
|
|
-| TC-0010 | DEVELOPER成员 | ✅ pass |
|
|
|
-| TC-0011 | SQL注入 | ✅ pass |
|
|
|
-| TC-0012 | 缺少必填字段(productCode现为必填) | ✅ pass |
|
|
|
-| TC-0013 | 产品成员被禁用时拒绝登录-HTTP(H-3) | ✅ pass |
|
|
|
-| TC-0014 | 产品被禁用时拒绝登录-HTTP(H-3) | ✅ pass |
|
|
|
-
|
|
|
-### 2.2 REST API — 管理后台登录 (TC-0015 ~ TC-0024)
|
|
|
-
|
|
|
-| TC编号 | 测试场景 | 测试结果 |
|
|
|
-| :--- | :--- | :--- |
|
|
|
-| TC-0015 | 超管正常登录(管理后台) | ✅ pass |
|
|
|
-| TC-0016 | 普通用户被拒绝(审计H1修复: 仅超管可登录) | ✅ pass |
|
|
|
-| TC-0017 | managementKey无效 | ✅ pass |
|
|
|
-| TC-0018 | managementKey为空 | ✅ pass |
|
|
|
-| TC-0019 | 用户不存在 | ✅ pass |
|
|
|
-| TC-0020 | 密码错误 | ✅ pass |
|
|
|
-| TC-0021 | 账号冻结 | ✅ pass |
|
|
|
-| TC-0022 | 不带productCode时perms为空 | ✅ pass |
|
|
|
-| TC-0023 | 缺少必填字段(handler校验) | ✅ pass |
|
|
|
-| TC-0024 | SQL注入username | ✅ pass |
|
|
|
-
|
|
|
-### 2.3 REST API — 刷新Token (TC-0025 ~ TC-0031)
|
|
|
-
|
|
|
-| TC编号 | 测试场景 | 测试结果 |
|
|
|
-| :--- | :--- | :--- |
|
|
|
-| TC-0025 | 正常刷新 | ✅ pass |
|
|
|
-| TC-0026 | 不带productCode(回退) | ✅ pass |
|
|
|
-| TC-0027 | token无效 | ✅ pass |
|
|
|
-| TC-0028 | 用户已删除 | ✅ pass |
|
|
|
-| TC-0029 | 账号冻结 | ✅ pass |
|
|
|
-| TC-0030 | 超管+productCode | ✅ pass |
|
|
|
-| TC-0031 | 尝试切换产品被拒绝(H-02) | ✅ pass |
|
|
|
-| TC-0543 | TokenVersion不匹配时拒绝刷新 | ✅ pass |
|
|
|
-| TC-0544 | 使用accessToken作为refreshToken被拒绝 | ✅ pass |
|
|
|
-| TC-0545 | 产品成员已移除时拒绝刷新(403) | ✅ pass |
|
|
|
-
|
|
|
-### 2.4 REST API — 同步权限 (TC-0032 ~ TC-0044)
|
|
|
-
|
|
|
-| TC编号 | 测试场景 | 测试结果 |
|
|
|
-| :--- | :--- | :--- |
|
|
|
-| TC-0032 | 全部新增 | ✅ pass |
|
|
|
-| TC-0033 | 更新已有(名称变更) | ✅ pass |
|
|
|
-| TC-0034 | 无变化 | ✅ pass |
|
|
|
-| TC-0035 | 禁用权限重启 | ✅ pass |
|
|
|
-| TC-0036 | 移除不在列表的权限 | ✅ pass |
|
|
|
-| TC-0037 | 空perms数组被拒绝(400) | ✅ pass |
|
|
|
-| TC-0038 | 验证disabled返回值 | ✅ pass |
|
|
|
-| TC-0039 | appKey无效 | ✅ pass |
|
|
|
-| TC-0040 | appSecret错误 | ✅ pass |
|
|
|
-| TC-0041 | 产品已禁用 | ✅ pass |
|
|
|
-| TC-0042 | 大批量(1000条) | ✅ pass |
|
|
|
-| TC-0043 | 重复code去重(M-09) | ✅ pass |
|
|
|
-| TC-0044 | 事务保护-中途失败回滚(H-05) | ✅ pass |
|
|
|
-
|
|
|
-### 2.5 REST API — 用户信息 / 修改密码 (TC-0045 ~ TC-0059)
|
|
|
-
|
|
|
-| TC编号 | 测试场景 | 测试结果 |
|
|
|
-| :--- | :--- | :--- |
|
|
|
-| TC-0045 | 正常获取-含productCode | ✅ pass |
|
|
|
-| TC-0046 | 不含productCode | ✅ pass |
|
|
|
-| TC-0047 | 未登录 | ✅ pass |
|
|
|
-| TC-0048 | token过期 | ✅ pass |
|
|
|
-| TC-0049 | userId=0 | ✅ pass |
|
|
|
-| TC-0050 | 正常修改 | ✅ pass |
|
|
|
-| TC-0051 | mustChangePassword重置 | ✅ pass |
|
|
|
-| TC-0052 | 原密码错误 | ✅ pass |
|
|
|
-| TC-0053 | 新密码少于8字符 | ✅ pass |
|
|
|
-| TC-0054 | 新密码恰好8字符(含大小写+数字) | ✅ pass |
|
|
|
-| TC-0055 | 新密码空字符串 | ✅ pass |
|
|
|
-| TC-0056 | 新密码超过72字符 | ✅ pass |
|
|
|
-| TC-0057 | 新密码恰好72字符 | ✅ pass |
|
|
|
-| TC-0058 | 新旧密码相同 | ✅ pass |
|
|
|
-| TC-0059 | 用户不存在 | ✅ pass |
|
|
|
-
|
|
|
-### 2.6 REST API — 产品管理 (TC-0060 ~ TC-0078)
|
|
|
-
|
|
|
-| TC编号 | 测试场景 | 测试结果 |
|
|
|
-| :--- | :--- | :--- |
|
|
|
-| TC-0060 | 正常创建 | ✅ pass |
|
|
|
-| TC-0061 | 事务回滚-用户创建失败 | ✅ pass |
|
|
|
-| TC-0062 | 事务回滚-成员创建失败 | ✅ pass |
|
|
|
-| TC-0063 | 编码已存在 | ✅ pass |
|
|
|
-| TC-0064 | 并发创建同编码 | ✅ pass |
|
|
|
-| TC-0065 | 正常更新 | ✅ pass |
|
|
|
-| TC-0066 | 不存在 | ✅ pass |
|
|
|
-| TC-0067 | 不传status | ✅ pass |
|
|
|
-| TC-0068 | 正常分页 | ✅ pass |
|
|
|
-| TC-0069 | 默认分页 | ✅ pass |
|
|
|
-| TC-0070 | pageSize超过上限 | ✅ pass |
|
|
|
-| TC-0071 | pageSize=0 | ✅ pass |
|
|
|
-| TC-0072 | page负值 | ✅ pass |
|
|
|
-| TC-0073 | 正常查询 | ✅ pass |
|
|
|
-| TC-0074 | 不存在 | ✅ pass |
|
|
|
-| TC-0075 | 非超管AppKey隐藏(H-11) | ✅ pass |
|
|
|
-| TC-0076 | 超管可见AppKey(H-11) | ✅ pass |
|
|
|
-| TC-0077 | 详情非超管AppKey隐藏(H-11) | ✅ pass |
|
|
|
-| TC-0078 | 详情超管可见AppKey(H-11) | ✅ pass |
|
|
|
-
|
|
|
-### 2.7 REST API — 部门管理 (TC-0079 ~ TC-0100)
|
|
|
-
|
|
|
-| TC编号 | 测试场景 | 测试结果 |
|
|
|
-| :--- | :--- | :--- |
|
|
|
-| TC-0079 | 创建顶级部门 | ✅ pass |
|
|
|
-| TC-0080 | 创建子部门 | ✅ pass |
|
|
|
-| TC-0081 | 父部门不存在 | ✅ pass |
|
|
|
-| TC-0082 | 不传DeptType默认NORMAL | ✅ pass |
|
|
|
-| TC-0083 | 传DeptType=DEV | ✅ pass |
|
|
|
-| TC-0084 | 事务内FindOneWithTx可见性 | ✅ pass |
|
|
|
-| TC-0085 | 事务回滚-Insert失败 | ✅ pass |
|
|
|
-| TC-0086 | 事务回滚-UpdateWithTx失败 | ✅ pass |
|
|
|
-| TC-0087 | 多层嵌套(5层) | ✅ pass |
|
|
|
-| TC-0088 | 通过Logic创建+验证Path | ✅ pass |
|
|
|
-| TC-0089 | 正常更新 | ✅ pass |
|
|
|
-| TC-0090 | 不存在 | ✅ pass |
|
|
|
-| TC-0091 | DeptType NORMAL→DEV | ✅ pass |
|
|
|
-| TC-0092 | DeptType无效值返回错误(400) | ✅ pass |
|
|
|
-| TC-0094 | 正常删除(无子部门) | ✅ pass |
|
|
|
-| TC-0095 | 有子部门 | ✅ pass |
|
|
|
-| TC-0096 | 不存在的部门 | ✅ pass |
|
|
|
-| TC-0098 | 正常获取 | ✅ pass |
|
|
|
-| TC-0099 | 空数据 | ✅ pass |
|
|
|
-| TC-0100 | 孤儿节点 | ✅ pass |
|
|
|
-| TC-0097 | 部门下有关联用户(H-07) | ✅ pass |
|
|
|
-| TC-0093 | DeptType变更级联清除缓存(M-10) | ✅ pass |
|
|
|
-
|
|
|
-### 2.8 REST API — 权限列表 (TC-0101 ~ TC-0104)
|
|
|
-
|
|
|
-| TC编号 | 测试场景 | 测试结果 |
|
|
|
-| :--- | :--- | :--- |
|
|
|
-| TC-0101 | 正常查询 | ✅ pass |
|
|
|
-| TC-0102 | 默认分页 | ✅ pass |
|
|
|
-| TC-0103 | pageSize超过上限 | ✅ pass |
|
|
|
-| TC-0104 | 不存在的productCode | ✅ pass |
|
|
|
-
|
|
|
-### 2.9 REST API — 角色管理 (TC-0105 ~ TC-0121)
|
|
|
-
|
|
|
-| TC编号 | 测试场景 | 测试结果 |
|
|
|
-| :--- | :--- | :--- |
|
|
|
-| TC-0105 | 正常创建 | ✅ pass |
|
|
|
-| TC-0106 | 重复角色名 | ✅ pass |
|
|
|
-| TC-0107 | 并发同名创建 | ✅ pass |
|
|
|
-| TC-0108 | 正常更新 | ✅ pass |
|
|
|
-| TC-0109 | 不存在 | ✅ pass |
|
|
|
-| TC-0110 | 正常查询 | ✅ pass |
|
|
|
-| TC-0111 | pageSize超过上限 | ✅ pass |
|
|
|
-| TC-0112 | 正常查询 | ✅ pass |
|
|
|
-| TC-0113 | 不存在 | ✅ pass |
|
|
|
-| TC-0114 | 正常删除+级联 | ✅ pass |
|
|
|
-| TC-0115 | 事务回滚 | ✅ pass |
|
|
|
-| TC-0116 | 无关联数据 | ✅ pass |
|
|
|
-| TC-0117 | 正常绑定 | ✅ pass |
|
|
|
-| TC-0118 | 角色不存在 | ✅ pass |
|
|
|
-| TC-0119 | 清空权限 | ✅ pass |
|
|
|
-| TC-0120 | 重复permId | ✅ pass |
|
|
|
-| TC-0121 | 事务回滚 | ✅ pass |
|
|
|
-
|
|
|
-### 2.10 REST API — 用户管理 (TC-0122 ~ TC-0177, TC-0522 ~ TC-0524)
|
|
|
-
|
|
|
-| TC编号 | 测试场景 | 测试结果 |
|
|
|
-| :--- | :--- | :--- |
|
|
|
-| TC-0122 | 正常创建 | ✅ pass |
|
|
|
-| TC-0123 | 用户名已存在(预检) | ✅ pass |
|
|
|
-| TC-0124 | 带完整可选字段 | ✅ pass |
|
|
|
-| TC-0125 | 非法email格式 | ✅ pass |
|
|
|
-| TC-0126 | 合法email | ✅ pass |
|
|
|
-| TC-0127 | email为空(可选) | ✅ pass |
|
|
|
-| TC-0128 | 非法phone格式 | ✅ pass |
|
|
|
-| TC-0129 | 合法phone(国际) | ✅ pass |
|
|
|
-| TC-0130 | phone为空(可选) | ✅ pass |
|
|
|
-| TC-0131 | 并发同username(TOCTOU) | ✅ pass |
|
|
|
-| TC-0132 | 唯一索引冲突消息 | ✅ pass |
|
|
|
-| TC-0135 | 正常更新 | ✅ pass |
|
|
|
-| TC-0136 | 不存在 | ✅ pass |
|
|
|
-| TC-0137 | 仅传id | ✅ pass |
|
|
|
-| TC-0138 | 清空nickname | ✅ pass |
|
|
|
-| TC-0139 | 清空email | ✅ pass |
|
|
|
-| TC-0140 | 清空remark | ✅ pass |
|
|
|
-| TC-0141 | 非法email格式 | ✅ pass |
|
|
|
-| TC-0142 | 非法phone格式 | ✅ pass |
|
|
|
-| TC-0143 | 合法phone | ✅ pass |
|
|
|
-| TC-0144 | 不传email(nil) | ✅ pass |
|
|
|
-| TC-0145 | DeptId设为0(取消部门) | ✅ pass |
|
|
|
-| TC-0146 | DeptId设为正值 | ✅ pass |
|
|
|
-| TC-0147 | DeptId不传(nil) | ✅ pass |
|
|
|
-| TC-0149 | 含productCode | ✅ pass |
|
|
|
-| TC-0150 | 不含productCode | ✅ pass |
|
|
|
-| TC-0151 | pageSize超过上限 | ✅ pass |
|
|
|
-| TC-0152 | 用户不在产品中 | ✅ pass |
|
|
|
-| TC-0153 | 批量查询DB异常 | ✅ pass |
|
|
|
-| TC-0154 | 正常查询 | ✅ pass |
|
|
|
-| TC-0155 | 正常查询-含Avatar | ✅ pass |
|
|
|
-| TC-0156 | 不存在 | ✅ pass |
|
|
|
-| TC-0157 | 正常绑定 | ✅ pass |
|
|
|
-| TC-0158 | 用户不存在 | ✅ pass |
|
|
|
-| TC-0159 | 清空角色 | ✅ pass |
|
|
|
-| TC-0160 | 事务回滚 | ✅ pass |
|
|
|
-| TC-0165 | 正常ALLOW | ✅ pass |
|
|
|
-| TC-0166 | 用户不存在 | ✅ pass |
|
|
|
-| TC-0167 | DENY权限 | ✅ pass |
|
|
|
-| TC-0168 | 清空权限 | ✅ pass |
|
|
|
-| TC-0173 | 正常冻结 | ✅ pass |
|
|
|
-| TC-0174 | 正常解冻 | ✅ pass |
|
|
|
-| TC-0175 | 非法status(0) | ✅ pass |
|
|
|
-| TC-0176 | 冻结自己 | ✅ pass |
|
|
|
-| TC-0177 | 冻结超管 | ✅ pass |
|
|
|
-| TC-0522 | updateUser自己修改DeptId被拒绝(H-01) | ✅ pass |
|
|
|
-| TC-0523 | updateUser自己修改Status被拒绝(H-01) | ✅ pass |
|
|
|
-| TC-0524 | updateUser未登录被拒绝(H-01) | ✅ pass |
|
|
|
-| TC-0161 | bindRoles角色不属于当前产品(H-03) | ✅ pass |
|
|
|
-| TC-0162 | bindRoles角色已禁用(H-03) | ✅ pass |
|
|
|
-| TC-0163 | bindRoles角色不存在(H-03) | ✅ pass |
|
|
|
-| TC-0164 | BindRoles非产品成员被拒绝(L-4) | ✅ pass |
|
|
|
-| TC-0169 | setUserPerms无效Effect值(H-04) | ✅ pass |
|
|
|
-| TC-0170 | setUserPerms PermId不存在(H-04) | ✅ pass |
|
|
|
-| TC-0171 | setUserPerms权限不属于当前产品(H-04) | ✅ pass |
|
|
|
-| TC-0172 | SetUserPerms非产品成员被拒绝(L-5) | ✅ pass |
|
|
|
-| TC-0133 | createUser密码少于8字符(H-10) | ✅ pass |
|
|
|
-| TC-0556 | createUser密码缺少大写字母 | ✅ pass |
|
|
|
-| TC-0557 | createUser密码缺少小写字母 | ✅ pass |
|
|
|
-| TC-0558 | createUser密码缺少数字 | ✅ pass |
|
|
|
-| TC-0134 | createUser密码超过72字符(H-10) | ✅ pass |
|
|
|
-| TC-0148 | 超管不能冻结另一超管(H-2) | ✅ pass |
|
|
|
-| TC-0546 | createUser用户名含特殊字符被拒绝(400) | ✅ pass |
|
|
|
-| TC-0547 | createUser用户名太短(1字符)被拒绝(400) | ✅ pass |
|
|
|
-| TC-0548 | createUser用户名太长(65字符)被拒绝(400) | ✅ pass |
|
|
|
-| TC-0549 | createUser部门不存在被拒绝(400) | ✅ pass |
|
|
|
-| TC-0550 | createUser昵称超过64字符被拒绝(400) | ✅ pass |
|
|
|
-| TC-0551 | createUser备注超过255字符被拒绝(400) | ✅ pass |
|
|
|
-| TC-0552 | setUserPerms同一权限ID冲突Effect被拒绝(400) | ✅ pass |
|
|
|
-| TC-0553 | setUserPerms重复权限ID相同Effect去重 | ✅ pass |
|
|
|
-| TC-0554 | setUserPerms已禁用权限不能被设置(400) | ✅ pass |
|
|
|
-
|
|
|
-### 2.11 REST API — 成员管理 (TC-0178 ~ TC-0194)
|
|
|
-
|
|
|
-| TC编号 | 测试场景 | 测试结果 |
|
|
|
-| :--- | :--- | :--- |
|
|
|
-| TC-0178 | 正常添加 | ✅ pass |
|
|
|
-| TC-0179 | 产品不存在 | ✅ pass |
|
|
|
-| TC-0180 | 用户不存在 | ✅ pass |
|
|
|
-| TC-0181 | 已是成员 | ✅ pass |
|
|
|
-| TC-0182 | 并发添加 | ✅ pass |
|
|
|
-| TC-0184 | 正常更新 | ✅ pass |
|
|
|
-| TC-0185 | 不存在 | ✅ pass |
|
|
|
-| TC-0187 | 正常查询(批量查用户) | ✅ pass |
|
|
|
-| TC-0188 | 成员用户已删除 | ✅ pass |
|
|
|
-| TC-0189 | pageSize超过上限 | ✅ pass |
|
|
|
-| TC-0190 | 空成员列表 | ✅ pass |
|
|
|
-| TC-0191 | 正常移除+级联(事务内) | ✅ pass |
|
|
|
-| TC-0192 | 跨产品隔离 | ✅ pass |
|
|
|
-| TC-0193 | 成员不存在 | ✅ pass |
|
|
|
-| TC-0194 | 事务回滚 | ✅ pass |
|
|
|
-| TC-0183 | addMember无效MemberType(M-06) | ✅ pass |
|
|
|
-| TC-0186 | updateMember无效MemberType(M-06) | ✅ pass |
|
|
|
-
|
|
|
-### 2.12 gRPC 接口 (TC-0195 ~ TC-0222)
|
|
|
-
|
|
|
-| TC编号 | 测试场景 | 测试结果 |
|
|
|
-| :--- | :--- | :--- |
|
|
|
-| TC-0195 | 正常同步 | ✅ pass |
|
|
|
-| TC-0196 | appKey无效 | ✅ pass |
|
|
|
-| TC-0197 | appSecret错误 | ✅ pass |
|
|
|
-| TC-0198 | 产品已禁用 | ✅ pass |
|
|
|
-| TC-0199 | 验证disabled计数 | ✅ pass |
|
|
|
-| TC-0200 | 正常登录(普通用户+productCode) | ✅ pass |
|
|
|
-| TC-0201 | 用户不存在 | ✅ pass |
|
|
|
-| TC-0202 | 密码错误 | ✅ pass |
|
|
|
-| TC-0203 | 账号冻结 | ✅ pass |
|
|
|
-| TC-0204 | 超管被拒绝(PermissionDenied) | ✅ pass |
|
|
|
-| TC-0205 | 普通用户+productCode | ✅ pass |
|
|
|
-| TC-0206 | gRPC Login禁用成员被拒绝(H-3) | ✅ pass |
|
|
|
-| TC-0207 | productCode为空(InvalidArgument) | ✅ pass |
|
|
|
-| TC-0208 | 正常刷新 | ✅ pass |
|
|
|
-| TC-0209 | token无效 | ✅ pass |
|
|
|
-| TC-0210 | 账号冻结 | ✅ pass |
|
|
|
-| TC-0211 | productCode回退到claims | ✅ pass |
|
|
|
-| TC-0212 | 超管+productCode | ✅ pass |
|
|
|
-| TC-0213 | 普通用户+productCode | ✅ pass |
|
|
|
-| TC-0214 | 有效token | ✅ pass |
|
|
|
-| TC-0215 | 无效token | ✅ pass |
|
|
|
-| TC-0216 | 缺少userId | ✅ pass |
|
|
|
-| TC-0217 | gRPC VerifyToken冻结用户返回Invalid(H-4) | ✅ pass |
|
|
|
-| TC-0218 | gRPC VerifyToken非成员返回Invalid(H-4) | ✅ pass |
|
|
|
-| TC-0219 | gRPC VerifyToken返回实时数据(H-4) | ✅ pass |
|
|
|
-| TC-0220 | 用户不存在(AppKey/Secret认证前置) | ✅ pass |
|
|
|
-| TC-0221 | 超管(AppKey/Secret认证前置) | ✅ pass |
|
|
|
-| TC-0222 | MEMBER-DENY覆盖(AppKey/Secret认证前置) | ✅ pass |
|
|
|
-
|
|
|
-### 2.13 中间件 / 统一响应 (TC-0223 ~ TC-0233, TC-0508 ~ TC-0510, TC-0525 ~ TC-0534)
|
|
|
-
|
|
|
-| TC编号 | 测试场景 | 测试结果 |
|
|
|
-| :--- | :--- | :--- |
|
|
|
-| TC-0223 | 正常Bearer token | ✅ pass |
|
|
|
-| TC-0224 | 无Authorization头 | ✅ pass |
|
|
|
-| TC-0225 | 无Bearer前缀 | ✅ pass |
|
|
|
-| TC-0226 | token签名错误 | ✅ pass |
|
|
|
-| TC-0227 | token过期 | ✅ pass |
|
|
|
-| TC-0228 | claims类型断言失败 | ⏭️ skip(防御性分支不可达) |
|
|
|
-| TC-0229 | refresh token被拒绝 | ✅ pass |
|
|
|
-| TC-0508 | 冻结用户被403 | ✅ pass |
|
|
|
-| TC-0509 | 用户不存在(Status=0) | ✅ pass |
|
|
|
-| TC-0510 | UserDetails注入context | ✅ pass |
|
|
|
-| TC-0230 | 业务错误(CodeError) | ✅ pass |
|
|
|
-| TC-0231 | 内部错误 | ✅ pass |
|
|
|
-| TC-0232 | 成功(有data) | ✅ pass |
|
|
|
-| TC-0233 | 成功(无data) | ✅ pass |
|
|
|
-| TC-0525 | 限流-正常请求(未超限) | ✅ pass |
|
|
|
-| TC-0526 | 限流-超限请求被拒绝(429) | ✅ pass |
|
|
|
-| TC-0527 | 限流-behindProxy=false时XFF被忽略 | ✅ pass |
|
|
|
-| TC-0528 | 限流-behindProxy=false时X-Real-IP被忽略 | ✅ pass |
|
|
|
-| TC-0529 | 限流-IP从RemoteAddr解析 | ✅ pass |
|
|
|
-| TC-0530 | 限流-不同IP独立限流 | ✅ pass |
|
|
|
-| TC-0531 | 限流-behindProxy=true时信任X-Real-IP | ✅ pass |
|
|
|
-| TC-0532 | 限流-behindProxy=true时无X-Real-IP回退RemoteAddr | ✅ pass |
|
|
|
-| TC-0533 | 限流-behindProxy=true时XFF仍被忽略 | ✅ pass |
|
|
|
-| TC-0534 | 限流-RemoteAddr无端口格式 | ✅ pass |
|
|
|
-
|
|
|
-### 2.14 util 层 (TC-0234 ~ TC-0256)
|
|
|
-
|
|
|
-| TC编号 | 测试场景 | 测试结果 |
|
|
|
-| :--- | :--- | :--- |
|
|
|
-| TC-0234 | 正常值 | ✅ pass |
|
|
|
-| TC-0235 | page<=0 | ✅ pass |
|
|
|
-| TC-0236 | page=-1 | ✅ pass |
|
|
|
-| TC-0237 | pageSize<=0 | ✅ pass |
|
|
|
-| TC-0238 | pageSize>100 | ✅ pass |
|
|
|
-| TC-0239 | pageSize=100 | ✅ pass |
|
|
|
-| TC-0240 | pageSize=101 | ✅ pass |
|
|
|
-| TC-0241 | 双零 | ✅ pass |
|
|
|
-| TC-0242 | 正常邮箱 | ✅ pass |
|
|
|
-| TC-0243 | 含点号 | ✅ pass |
|
|
|
-| TC-0244 | 含加号 | ✅ pass |
|
|
|
-| TC-0245 | 缺少@ | ✅ pass |
|
|
|
-| TC-0246 | 缺少域名 | ✅ pass |
|
|
|
-| TC-0247 | 缺少TLD | ✅ pass |
|
|
|
-| TC-0248 | 空字符串 | ✅ pass |
|
|
|
-| TC-0249 | 国内手机号 | ✅ pass |
|
|
|
-| TC-0250 | 带+国际码 | ✅ pass |
|
|
|
-| TC-0251 | 太短(6位) | ✅ pass |
|
|
|
-| TC-0252 | 恰好7位 | ✅ pass |
|
|
|
-| TC-0253 | 最长15位 | ✅ pass |
|
|
|
-| TC-0254 | 超长16位 | ✅ pass |
|
|
|
-| TC-0255 | 包含字母 | ✅ pass |
|
|
|
-| TC-0256 | 空字符串 | ✅ pass |
|
|
|
-
|
|
|
-### 2.15 Logic 层单元测试 — JWT / 权限计算 / Helper (TC-0231 ~ TC-0280)
|
|
|
-
|
|
|
-| TC编号 | 测试场景 | 测试结果 |
|
|
|
-| :--- | :--- | :--- |
|
|
|
-| TC-0257 | 正常生成 | ✅ pass |
|
|
|
-| TC-0258 | 解析token验证claims | ✅ pass |
|
|
|
-| TC-0259 | 空secret | ✅ pass |
|
|
|
-| TC-0260 | 空perms | ✅ pass |
|
|
|
-| TC-0261 | 过期时间验证 | ✅ pass |
|
|
|
-| TC-0262 | 正常生成 | ✅ pass |
|
|
|
-| TC-0263 | 解析验证 | ✅ pass |
|
|
|
-| TC-0264 | productCode为空 | ✅ pass |
|
|
|
-| TC-0265 | 正常解析 | ✅ pass |
|
|
|
-| TC-0266 | 错误secret | ✅ pass |
|
|
|
-| TC-0267 | 无效token字符串 | ✅ pass |
|
|
|
-| TC-0268 | 空token | ✅ pass |
|
|
|
-| TC-0269 | 过期token | ✅ pass |
|
|
|
-| TC-0270 | AccessToken误用 | ✅ pass |
|
|
|
-| TC-0231 | 超管 | ✅ pass |
|
|
|
-| TC-0232 | 超管+查询失败 | ✅ pass |
|
|
|
-| TC-0233 | 非产品成员 | ✅ pass |
|
|
|
-| TC-0234 | 成员查询失败(非ErrNotFound) | ✅ pass |
|
|
|
-| TC-0235 | DEVELOPER成员 | ✅ pass |
|
|
|
-| TC-0236 | ADMIN成员 | ✅ pass |
|
|
|
-| TC-0237 | DEVELOPER+查询失败 | ✅ pass |
|
|
|
-| TC-0238 | MEMBER-DEV部门-全权限 | ✅ pass |
|
|
|
-| TC-0239 | MEMBER-DEV部门-查询权限失败 | ✅ pass |
|
|
|
-| TC-0240 | MEMBER-非DEV部门-正常回退 | ✅ pass |
|
|
|
-| TC-0241 | MEMBER-部门不存在-正常回退 | ✅ pass |
|
|
|
-| TC-0242 | MEMBER-deptId=0-跳过部门检查 | ✅ pass |
|
|
|
-| TC-0243 | MEMBER-无角色无自定义 | ✅ pass |
|
|
|
-| TC-0244 | MEMBER-有角色权限 | ✅ pass |
|
|
|
-| TC-0245 | MEMBER-角色跨产品过滤 | ✅ pass |
|
|
|
-| TC-0246 | MEMBER-角色已禁用 | ✅ pass |
|
|
|
-| TC-0247 | MEMBER-ALLOW添加 | ✅ pass |
|
|
|
-| TC-0248 | MEMBER-DENY排除角色权限 | ✅ pass |
|
|
|
-| TC-0249 | MEMBER-DENY排除ALLOW | ✅ pass |
|
|
|
-| TC-0250 | MEMBER-ALLOW+角色去重 | ✅ pass |
|
|
|
-| TC-0251 | MEMBER-最终perm.Status=2 | ✅ pass |
|
|
|
-| TC-0252 | MEMBER-FindRoleIdsByUserId失败 | ✅ pass |
|
|
|
-| TC-0253 | MEMBER-FindByIds(roles)失败 | ✅ pass |
|
|
|
-| TC-0254 | MEMBER-FindPermIdsByRoleIds失败 | ✅ pass |
|
|
|
-| TC-0255 | MEMBER-FindPermIdsByUserIdAndEffect(ALLOW)失败 | ✅ pass |
|
|
|
-| TC-0256 | MEMBER-FindPermIdsByUserIdAndEffect(DENY)失败 | ✅ pass |
|
|
|
-| TC-0257 | MEMBER-FindByIds(perms)失败 | ✅ pass |
|
|
|
-| TC-0272 | GetUserId-正常 | ✅ pass |
|
|
|
-| TC-0273 | GetUserId-空ctx | ✅ pass |
|
|
|
-| TC-0274 | GetUsername-正常 | ✅ pass |
|
|
|
-| TC-0275 | GetUsername-空ctx | ✅ pass |
|
|
|
-| TC-0276 | GetProductCode-正常 | ✅ pass |
|
|
|
-| TC-0277 | GetMemberType-正常 | ✅ pass |
|
|
|
-| TC-0278 | IsSuperAdmin-是 | ✅ pass |
|
|
|
-| TC-0279 | IsSuperAdmin-否 | ✅ pass |
|
|
|
-| TC-0280 | IsSuperAdmin-空 | ✅ pass |
|
|
|
-| TC-0271 | GetUserPerms委托到UserDetailsLoader(L-03) | ✅ pass |
|
|
|
-
|
|
|
-### 2.16 Model 层 _gen.go 通用 CRUD / 批量方法 (TC-0281 ~ TC-0329)
|
|
|
-
|
|
|
-> 以下每个 TC 为通用模式,适用于全部 9 个 Model,实际测试函数数 = TC × 模型数。
|
|
|
-
|
|
|
-| TC编号 | 测试场景 | 测试结果 |
|
|
|
-| :--- | :--- | :--- |
|
|
|
-| TC-0281 | 正常插入 | ✅ pass |
|
|
|
-| TC-0283 | 唯一索引冲突 | ✅ pass |
|
|
|
-| TC-0284 | 缓存key生成正确 | ✅ pass |
|
|
|
-| TC-0285 | 事务内插入 | ✅ pass |
|
|
|
-| TC-0287 | 事务回滚后无数据 | ✅ pass |
|
|
|
-| TC-0288 | 正常查询(缓存未命中) | ✅ pass |
|
|
|
-| TC-0289 | 正常查询(缓存命中) | ✅ pass |
|
|
|
-| TC-0290 | 记录不存在 | ✅ pass |
|
|
|
-| TC-0291 | DB异常(非ErrNotFound) | ✅ pass |
|
|
|
-| TC-0292 | 事务内正常查询 | ✅ pass |
|
|
|
-| TC-0293 | 事务内记录不存在 | ✅ pass |
|
|
|
-| TC-0294 | 事务内可见性 | ✅ pass |
|
|
|
-| TC-0295 | 正常更新 | ✅ pass |
|
|
|
-| TC-0297 | 记录不存在 | ✅ pass |
|
|
|
-| TC-0298 | 事务内更新 | ✅ pass |
|
|
|
-| TC-0299 | 正常删除 | ✅ pass |
|
|
|
-| TC-0300 | 记录不存在 | ✅ pass |
|
|
|
-| TC-0301 | 事务内删除 | ✅ pass |
|
|
|
-| TC-0302 | 正常事务 | ✅ pass |
|
|
|
-| TC-0303 | fn返回错误 | ✅ pass |
|
|
|
-| TC-0304 | 获取表名 | ✅ pass |
|
|
|
-| TC-0305 | 空列表 | ✅ pass |
|
|
|
-| TC-0306 | 单条记录 | ✅ pass |
|
|
|
-| TC-0307 | 多条记录(3条) | ✅ pass |
|
|
|
-| TC-0309 | 唯一索引冲突 | ✅ pass |
|
|
|
-| TC-0310 | 大批量(1000条) | ✅ pass |
|
|
|
-| TC-0311 | 空列表 | ✅ pass |
|
|
|
-| TC-0312 | 正常多条 | ✅ pass |
|
|
|
-| TC-0313 | 事务回滚 | ✅ pass |
|
|
|
-| TC-0314 | 空列表 | ✅ pass |
|
|
|
-| TC-0315 | 单条记录 | ✅ pass |
|
|
|
-| TC-0316 | 多条记录(3条) | ✅ pass |
|
|
|
-| TC-0318 | 部分id不存在 | ✅ pass |
|
|
|
-| TC-0319 | 空列表 | ✅ pass |
|
|
|
-| TC-0320 | 正常多条 | ✅ pass |
|
|
|
-| TC-0321 | 单条 | ✅ pass |
|
|
|
-| TC-0322 | 多条 | ✅ pass |
|
|
|
-| TC-0323 | vals数量正确 | ✅ pass |
|
|
|
-| TC-0324 | 空ids | ✅ pass |
|
|
|
-| TC-0325 | 单个id | ✅ pass |
|
|
|
-| TC-0326 | 多个id(3个) | ✅ pass |
|
|
|
-| TC-0327 | 包含不存在id | ✅ pass |
|
|
|
-| TC-0328 | 空ids | ✅ pass |
|
|
|
-| TC-0329 | 正常多条 | ✅ pass |
|
|
|
-| TC-0282 | Insert含TokenVersion | ✅ pass |
|
|
|
-| TC-0286 | InsertWithTx含TokenVersion | ✅ pass |
|
|
|
-| TC-0296 | Update含TokenVersion | ✅ pass |
|
|
|
-| TC-0308 | BatchInsert含TokenVersion | ✅ pass |
|
|
|
-| TC-0317 | BatchUpdate不污染数据 | ✅ pass |
|
|
|
-
|
|
|
-### 2.17 Model 层 _gen.go 唯一索引方法 (TC-0330 ~ TC-0365)
|
|
|
-
|
|
|
-| TC编号 | Model | 方法 | 测试场景 | 测试结果 |
|
|
|
-| :--- | :--- | :--- | :--- | :--- |
|
|
|
-| TC-0330 | SysUser | FindOneByUsername | 正常查询 | ✅ pass |
|
|
|
-| TC-0331 | SysUser | FindOneByUsername | 不存在 | ✅ pass |
|
|
|
-| TC-0332 | SysUser | FindOneByUsernameWithTx | 事务内正常查询 | ✅ pass |
|
|
|
-| TC-0333 | SysUser | FindOneByUsernameWithTx | 事务内不存在 | ✅ pass |
|
|
|
-| TC-0334 | SysProduct | FindOneByAppKey | 正常查询 | ✅ pass |
|
|
|
-| TC-0335 | SysProduct | FindOneByAppKey | 不存在 | ✅ pass |
|
|
|
-| TC-0336 | SysProduct | FindOneByAppKeyWithTx | 事务内正常查询 | ✅ pass |
|
|
|
-| TC-0337 | SysProduct | FindOneByAppKeyWithTx | 事务内不存在 | ✅ pass |
|
|
|
-| TC-0338 | SysProduct | FindOneByCode | 正常查询 | ✅ pass |
|
|
|
-| TC-0339 | SysProduct | FindOneByCode | 不存在 | ✅ pass |
|
|
|
-| TC-0340 | SysProduct | FindOneByCodeWithTx | 事务内正常查询 | ✅ pass |
|
|
|
-| TC-0341 | SysProduct | FindOneByCodeWithTx | 事务内不存在 | ✅ pass |
|
|
|
-| TC-0342 | SysPerm | FindOneByProductCodeCode | 正常查询 | ✅ pass |
|
|
|
-| TC-0343 | SysPerm | FindOneByProductCodeCode | 不存在 | ✅ pass |
|
|
|
-| TC-0344 | SysPerm | FindOneByProductCodeCodeWithTx | 事务内正常查询 | ✅ pass |
|
|
|
-| TC-0345 | SysPerm | FindOneByProductCodeCodeWithTx | 事务内不存在 | ✅ pass |
|
|
|
-| TC-0346 | SysRole | FindOneByProductCodeName | 正常查询 | ✅ pass |
|
|
|
-| TC-0347 | SysRole | FindOneByProductCodeName | 不存在 | ✅ pass |
|
|
|
-| TC-0348 | SysRole | FindOneByProductCodeNameWithTx | 事务内正常查询 | ✅ pass |
|
|
|
-| TC-0349 | SysRole | FindOneByProductCodeNameWithTx | 事务内不存在 | ✅ pass |
|
|
|
-| TC-0350 | SysRolePerm | FindOneByRoleIdPermId | 正常查询 | ✅ pass |
|
|
|
-| TC-0351 | SysRolePerm | FindOneByRoleIdPermId | 不存在 | ✅ pass |
|
|
|
-| TC-0352 | SysRolePerm | FindOneByRoleIdPermIdWithTx | 事务内正常查询 | ✅ pass |
|
|
|
-| TC-0353 | SysRolePerm | FindOneByRoleIdPermIdWithTx | 事务内不存在 | ✅ pass |
|
|
|
-| TC-0354 | SysUserPerm | FindOneByUserIdPermId | 正常查询 | ✅ pass |
|
|
|
-| TC-0355 | SysUserPerm | FindOneByUserIdPermId | 不存在 | ✅ pass |
|
|
|
-| TC-0356 | SysUserPerm | FindOneByUserIdPermIdWithTx | 事务内正常查询 | ✅ pass |
|
|
|
-| TC-0357 | SysUserPerm | FindOneByUserIdPermIdWithTx | 事务内不存在 | ✅ pass |
|
|
|
-| TC-0358 | SysUserRole | FindOneByUserIdRoleId | 正常查询 | ✅ pass |
|
|
|
-| TC-0359 | SysUserRole | FindOneByUserIdRoleId | 不存在 | ✅ pass |
|
|
|
-| TC-0360 | SysUserRole | FindOneByUserIdRoleIdWithTx | 事务内正常查询 | ✅ pass |
|
|
|
-| TC-0361 | SysUserRole | FindOneByUserIdRoleIdWithTx | 事务内不存在 | ✅ pass |
|
|
|
-| TC-0362 | SysProductMember | FindOneByProductCodeUserId | 正常查询 | ✅ pass |
|
|
|
-| TC-0363 | SysProductMember | FindOneByProductCodeUserId | 不存在 | ✅ pass |
|
|
|
-| TC-0364 | SysProductMember | FindOneByProductCodeUserIdWithTx | 事务内正常查询 | ✅ pass |
|
|
|
-| TC-0365 | SysProductMember | FindOneByProductCodeUserIdWithTx | 事务内不存在 | ✅ pass |
|
|
|
-
|
|
|
-### 2.18 Model 层 _gen.go 内部辅助方法 (TC-0366 ~ TC-0375)
|
|
|
-
|
|
|
-| TC编号 | 测试场景 | 测试结果 |
|
|
|
-| :--- | :--- | :--- |
|
|
|
-| TC-0366 | 空ids | ✅ pass |
|
|
|
-| TC-0367 | 正常ids | ✅ pass |
|
|
|
-| TC-0368 | 部分不存在 | ✅ pass |
|
|
|
-| TC-0369 | DB异常 | ✅ pass |
|
|
|
-| TC-0370 | 正常 | ✅ pass |
|
|
|
-| TC-0371 | 正常 | ✅ pass |
|
|
|
-| TC-0372 | 正常 | ✅ pass |
|
|
|
-| TC-0373 | cachePrefix为空 | ✅ pass |
|
|
|
-| TC-0374 | cachePrefix非空 | ✅ pass |
|
|
|
-| TC-0375 | 多唯一索引前缀(SysProduct) | ✅ pass |
|
|
|
-
|
|
|
-### 2.19 Model 层自定义方法 (TC-0376 ~ TC-0460)
|
|
|
-
|
|
|
-| TC编号 | 测试场景 | 测试结果 |
|
|
|
-| :--- | :--- | :--- |
|
|
|
-| TC-0376 | 正常分页 | ✅ pass |
|
|
|
-| TC-0377 | 第二页 | ✅ pass |
|
|
|
-| TC-0378 | 空表 | ✅ pass |
|
|
|
-| TC-0379 | count查询失败 | ✅ pass |
|
|
|
-| TC-0380 | list查询失败 | ✅ pass |
|
|
|
-| TC-0381 | 正常查询 | ✅ pass |
|
|
|
-| TC-0382 | 空deptIds | ✅ pass |
|
|
|
-| TC-0383 | 单个deptId | ✅ pass |
|
|
|
-| TC-0384 | deptId不存在 | ✅ pass |
|
|
|
-| TC-0385 | 正常批量查询 | ✅ pass |
|
|
|
-| TC-0386 | 空ids | ✅ pass |
|
|
|
-| TC-0387 | 部分id不存在 | ✅ pass |
|
|
|
-| TC-0388 | DB异常 | ✅ pass |
|
|
|
-| TC-0391 | 正常分页 | ✅ pass |
|
|
|
-| TC-0392 | 空表 | ✅ pass |
|
|
|
-| TC-0393 | count失败 | ✅ pass |
|
|
|
-| TC-0394 | 正常分页 | ✅ pass |
|
|
|
-| TC-0395 | 不存在的productCode | ✅ pass |
|
|
|
-| TC-0396 | 正常查询(仅status=1) | ✅ pass |
|
|
|
-| TC-0397 | 无启用权限 | ✅ pass |
|
|
|
-| TC-0398 | 正常查询 | ✅ pass |
|
|
|
-| TC-0399 | 空结果 | ✅ pass |
|
|
|
-| TC-0400 | 正常 | ✅ pass |
|
|
|
-| TC-0401 | 空ids | ✅ pass |
|
|
|
-| TC-0402 | 正常查询 | ✅ pass |
|
|
|
-| TC-0403 | 空结果 | ✅ pass |
|
|
|
-| TC-0404 | key唯一性 | ✅ pass |
|
|
|
-| TC-0405 | codes非空-正常 | ✅ pass |
|
|
|
-| TC-0406 | codes为空-全部禁用 | ✅ pass |
|
|
|
-| TC-0407 | 无需禁用 | ✅ pass |
|
|
|
-| TC-0408 | DB异常 | ✅ pass |
|
|
|
-| TC-0411 | 正常查询 | ✅ pass |
|
|
|
-| TC-0412 | 空表 | ✅ pass |
|
|
|
-| TC-0413 | 正常查询 | ✅ pass |
|
|
|
-| TC-0414 | 无子部门 | ✅ pass |
|
|
|
-| TC-0415 | 正常查询 | ✅ pass |
|
|
|
-| TC-0416 | LIKE注入已阻止 | ✅ pass |
|
|
|
-| TC-0417 | 无匹配 | ✅ pass |
|
|
|
-| TC-0418 | 正常分页 | ✅ pass |
|
|
|
-| TC-0419 | 空结果 | ✅ pass |
|
|
|
-| TC-0420 | 正常 | ✅ pass |
|
|
|
-| TC-0421 | 空ids | ✅ pass |
|
|
|
-| TC-0424 | 正常查询 | ✅ pass |
|
|
|
-| TC-0425 | 无绑定 | ✅ pass |
|
|
|
-| TC-0426 | 正常查询 | ✅ pass |
|
|
|
-| TC-0427 | 空roleIds | ✅ pass |
|
|
|
-| TC-0428 | 去重验证 | ✅ pass |
|
|
|
-| TC-0429 | 正常删除 | ✅ pass |
|
|
|
-| TC-0430 | 无绑定 | ✅ pass |
|
|
|
-| TC-0431 | 正常事务内删除 | ✅ pass |
|
|
|
-| TC-0432 | 正常查询 | ✅ pass |
|
|
|
-| TC-0433 | 无记录 | ✅ pass |
|
|
|
-| TC-0434 | ALLOW | ✅ pass |
|
|
|
-| TC-0435 | DENY | ✅ pass |
|
|
|
-| TC-0436 | 无记录 | ✅ pass |
|
|
|
-| TC-0437 | 正常删除 | ✅ pass |
|
|
|
-| TC-0438 | 事务内删除 | ✅ pass |
|
|
|
-| TC-0439 | 正常删除 | ✅ pass |
|
|
|
-| TC-0440 | 跨产品隔离 | ✅ pass |
|
|
|
-| TC-0441 | 事务内跨产品删除 | ✅ pass |
|
|
|
-| TC-0442 | 正常查询 | ✅ pass |
|
|
|
-| TC-0443 | 无绑定 | ✅ pass |
|
|
|
-| TC-0444 | 正常查询 | ✅ pass |
|
|
|
-| TC-0445 | 正常删除 | ✅ pass |
|
|
|
-| TC-0446 | 事务内删除 | ✅ pass |
|
|
|
-| TC-0447 | 正常删除 | ✅ pass |
|
|
|
-| TC-0448 | 正常删除 | ✅ pass |
|
|
|
-| TC-0449 | 跨产品隔离 | ✅ pass |
|
|
|
-| TC-0450 | 事务内跨产品删除 | ✅ pass |
|
|
|
-| TC-0453 | 正常分页 | ✅ pass |
|
|
|
-| TC-0454 | 空结果 | ✅ pass |
|
|
|
-| TC-0455 | 正常查询 | ✅ pass |
|
|
|
-| TC-0456 | 无成员身份 | ✅ pass |
|
|
|
-| TC-0457 | 正常批量 | ✅ pass |
|
|
|
-| TC-0458 | 空userIds | ✅ pass |
|
|
|
-| TC-0459 | 部分不是成员 | ✅ pass |
|
|
|
-| TC-0460 | map key正确 | ✅ pass |
|
|
|
-| TC-0422 | FindMinPermsLevelByUserIdAndProductCode-正常 | ✅ pass |
|
|
|
-| TC-0423 | FindMinPermsLevelByUserIdAndProductCode-无角色 | ✅ pass |
|
|
|
-| TC-0409 | FindAllCodesByProductCode-正常 | ✅ pass |
|
|
|
-| TC-0410 | FindAllCodesByProductCode-无权限 | ✅ pass |
|
|
|
-| TC-0389 | FindIdsByDeptId-正常 | ✅ pass |
|
|
|
-| TC-0390 | FindIdsByDeptId-空部门 | ✅ pass |
|
|
|
-| TC-0451 | FindUserIdsByRoleId-正常 | ✅ pass |
|
|
|
-| TC-0452 | FindUserIdsByRoleId-无绑定 | ✅ pass |
|
|
|
-
|
|
|
-### 2.20 访问控制 access.go (TC-0461 ~ TC-0484)
|
|
|
-
|
|
|
-| TC编号 | 测试场景 | 测试结果 |
|
|
|
-| :--- | :--- | :--- |
|
|
|
-| TC-0461 | RequireSuperAdmin-超管通过 | ✅ pass |
|
|
|
-| TC-0462 | RequireSuperAdmin-ADMIN拒绝 | ✅ pass |
|
|
|
-| TC-0463 | RequireSuperAdmin-MEMBER拒绝 | ✅ pass |
|
|
|
-| TC-0464 | RequireSuperAdmin-未登录 | ✅ pass |
|
|
|
-| TC-0465 | RequireProductAdminFor-超管通过 | ✅ pass |
|
|
|
-| TC-0466 | RequireProductAdminFor-ADMIN同产品通过 | ✅ pass |
|
|
|
-| TC-0467 | RequireProductAdminFor-DEVELOPER拒绝 | ✅ pass |
|
|
|
-| TC-0468 | RequireProductAdminFor-MEMBER拒绝 | ✅ pass |
|
|
|
-| TC-0469 | RequireProductAdminFor-未登录 | ✅ pass |
|
|
|
-| TC-0555 | RequireProductAdminFor-ADMIN跨产品拒绝 | ✅ pass |
|
|
|
-| TC-0470 | CheckMemberTypeAssignment-超管分配任何类型 | ✅ pass |
|
|
|
-| TC-0471 | CheckMemberTypeAssignment-ADMIN分配DEVELOPER | ✅ pass |
|
|
|
-| TC-0472 | CheckMemberTypeAssignment-同级拒绝 | ✅ pass |
|
|
|
-| TC-0473 | CheckMemberTypeAssignment-越级拒绝 | ✅ pass |
|
|
|
-| TC-0474 | CheckMemberTypeAssignment-MEMBER同级拒绝 | ✅ pass |
|
|
|
-| TC-0475 | CheckMemberTypeAssignment-未登录 | ✅ pass |
|
|
|
-| TC-0476 | CheckManageAccess-超管可管理任何人 | ✅ pass |
|
|
|
-| TC-0477 | CheckManageAccess-操作自己 | ✅ pass |
|
|
|
-| TC-0478 | CheckManageAccess-ADMIN跳过部门检查 | ✅ pass |
|
|
|
-| TC-0479 | CheckManageAccess-无部门拒绝 | ✅ pass |
|
|
|
-| TC-0480 | CheckManageAccess-目标用户无部门 | ✅ pass |
|
|
|
-| TC-0481 | CheckManageAccess-不同部门拒绝 | ✅ pass |
|
|
|
-| TC-0482 | CheckManageAccess-未登录 | ✅ pass |
|
|
|
-| TC-0484 | memberTypePriority-全类型验证 | ✅ pass |
|
|
|
-| TC-0483 | caller.DeptPath为空时拒绝(H-08) | ✅ pass |
|
|
|
-
|
|
|
-### 2.21 UserDetailsLoader (TC-0485 ~ TC-0507)
|
|
|
-
|
|
|
-| TC编号 | 测试场景 | 测试结果 |
|
|
|
-| :--- | :--- | :--- |
|
|
|
-| TC-0485 | Load-DB加载(缓存miss) | ✅ pass |
|
|
|
-| TC-0486 | Load-缓存命中 | ✅ pass |
|
|
|
-| TC-0487 | Load-用户不存在 | ✅ pass |
|
|
|
-| TC-0488 | Load-productCode为空 | ✅ pass |
|
|
|
-| TC-0489 | Del删除指定缓存 | ✅ pass |
|
|
|
-| TC-0490 | Clean清除用户所有产品缓存 | ✅ pass |
|
|
|
-| TC-0491 | CleanByProduct清除产品所有用户 | ✅ pass |
|
|
|
-| TC-0492 | BatchDel批量删除 | ✅ pass |
|
|
|
-| TC-0493 | BatchDel空数组 | ✅ pass |
|
|
|
-| TC-0494 | loadPerms-超管全量权限 | ✅ pass |
|
|
|
-| TC-0495 | loadPerms-ADMIN全量权限 | ✅ pass |
|
|
|
-| TC-0496 | loadPerms-DEVELOPER全量权限 | ✅ pass |
|
|
|
-| TC-0497 | loadPerms-DEV部门全量权限 | ✅ pass |
|
|
|
-| TC-0498 | loadPerms-MEMBER角色权限+ALLOW-DENY | ✅ pass |
|
|
|
-| TC-0501 | loadRoles-多角色取最小permsLevel | ✅ pass |
|
|
|
-| TC-0502 | loadRoles-无角色 | ✅ pass |
|
|
|
-| TC-0503 | loadRoles-角色跨产品过滤 | ✅ pass |
|
|
|
-| TC-0504 | loadRoles-禁用角色不计入 | ✅ pass |
|
|
|
-| TC-0505 | loadMembership-超管自动SUPER_ADMIN | ✅ pass |
|
|
|
-| TC-0506 | loadMembership-非成员MemberType为空 | ✅ pass |
|
|
|
-| TC-0499 | loadPerms跨产品权限隔离(H-1) | ✅ pass |
|
|
|
-| TC-0507 | loadMembership禁用成员MemberType为空(H-3) | ✅ pass |
|
|
|
-| TC-0500 | loadPerms禁用DEV部门无全量权限(M-3) | ✅ pass |
|
|
|
-
|
|
|
-### 2.22 Logic 层访问控制负面测试 (TC-0511 ~ TC-0521)
|
|
|
-
|
|
|
-| TC编号 | 测试场景 | 测试结果 |
|
|
|
-| :--- | :--- | :--- |
|
|
|
-| TC-0511 | createDept-非超管拒绝 | ✅ pass |
|
|
|
-| TC-0512 | updateDept-非超管拒绝 | ✅ pass |
|
|
|
-| TC-0513 | deleteDept-非超管拒绝 | ✅ pass |
|
|
|
-| TC-0514 | createProduct-非超管拒绝 | ✅ pass |
|
|
|
-| TC-0515 | updateProduct-非超管拒绝 | ✅ pass |
|
|
|
-| TC-0516 | createUser-非产品管理员拒绝 | ✅ pass |
|
|
|
-| TC-0517 | createRole-非产品管理员拒绝 | ✅ pass |
|
|
|
-| TC-0518 | updateRole-非产品管理员拒绝 | ✅ pass |
|
|
|
-| TC-0519 | deleteRole-非产品管理员拒绝 | ✅ pass |
|
|
|
-| TC-0520 | bindRolePerms-非产品管理员拒绝 | ✅ pass |
|
|
|
-| TC-0521 | updateUser-MEMBER不能管理他人 | ✅ pass |
|
|
|
-
|
|
|
-### 2.23 审计修复验证 (TC-0535 ~ TC-0542)
|
|
|
-
|
|
|
-| TC编号 | 测试场景 | 测试结果 |
|
|
|
-| :--- | :--- | :--- |
|
|
|
-| TC-0535 | updateUser-产品管理员可管理范围内用户 (Audit#4) | ✅ pass |
|
|
|
-| TC-0536 | updateUser-昵称超长拒绝 | ✅ pass |
|
|
|
-| TC-0537 | updateUser-部门不存在 | ✅ pass |
|
|
|
-| TC-0538 | userList-非超管仅可见产品成员 (Audit#1) | ✅ pass |
|
|
|
-| TC-0539 | userList-非超管未指定productCode被拒绝 (Audit#1) | ✅ pass |
|
|
|
-| TC-0540 | userList-非超管使用错误productCode被拒绝 (Audit#1) | ✅ pass |
|
|
|
-| TC-0541 | bindRoles-permsLevel越权拒绝 (Audit#2) | ✅ pass |
|
|
|
-| TC-0542 | bindRoles-超管可分配任意级别角色 (Audit#2) | ✅ pass |
|
|
|
+> 下表按 `test-design.md` 的章节顺序枚举每一个 TC 的编号、测试场景与执行结果.
|
|
|
|
|
|
----
|
|
|
+### 二、REST API 测试用例
|
|
|
|
|
|
-## 三、测试覆盖统计
|
|
|
+#### 2.1 产品端登录 `POST /api/auth/login`
|
|
|
|
|
|
-| 指标 | 数值 |
|
|
|
-| :--- | :--- |
|
|
|
-| TC 总数 | 558 |
|
|
|
-| 已实现 | 557 (99.8%) |
|
|
|
-| 跳过 | 1 (TC-0228,防御性不可达分支) |
|
|
|
-| 未实现 | 0 |
|
|
|
-| 测试函数 | 735 |
|
|
|
-| 测试子用例 | 816 |
|
|
|
-| ✅ 通过 | **734** |
|
|
|
-| ❌ 失败 | **0** |
|
|
|
-| ⏭️ 跳过 | **1** (TC-0228) |
|
|
|
-| 通过率 | **100%** (734/734,排除不可达分支) |
|
|
|
+| TC编号 | 测试场景 | 测试结果 |
|
|
|
+| :--- | :--- | :--- |
|
|
|
+| TC-0001 | POST /api/auth/login - 正常登录(普通用户+productCode) | ✅ pass |
|
|
|
+| TC-0002 | POST /api/auth/login - 正常登录-带productCode+ADMIN成员 | ✅ pass |
|
|
|
+| TC-0003 | POST /api/auth/login - 超管通过产品端登录被拒绝 | ✅ pass |
|
|
|
+| TC-0004 | POST /api/auth/login - 超管无productCode被拒绝 | ✅ pass |
|
|
|
+| TC-0005 | POST /api/auth/login - 用户不存在 | ✅ pass |
|
|
|
+| TC-0006 | POST /api/auth/login - DB异常(非ErrNotFound) | ✅ pass |
|
|
|
+| TC-0007 | POST /api/auth/login - 密码错误 | ✅ pass |
|
|
|
+| TC-0008 | POST /api/auth/login - 账号冻结 | ✅ pass |
|
|
|
+| TC-0009 | POST /api/auth/login - 非产品成员 | ✅ pass |
|
|
|
+| TC-0010 | POST /api/auth/login - DEVELOPER成员 | ✅ pass |
|
|
|
+| TC-0011 | POST /api/auth/login - SQL注入 | ✅ pass |
|
|
|
+| TC-0012 | POST /api/auth/login - 缺少必填字段 | ✅ pass |
|
|
|
+| TC-0013 | POST /api/auth/login - 产品成员被禁用时拒绝登录 | ✅ pass |
|
|
|
+| TC-0014 | POST /api/auth/login - 产品被禁用时拒绝登录 | ✅ pass |
|
|
|
+
|
|
|
+#### 2.1b 管理后台登录 `POST /api/auth/adminLogin`
|
|
|
+
|
|
|
+| TC编号 | 测试场景 | 测试结果 |
|
|
|
+| :--- | :--- | :--- |
|
|
|
+| TC-0015 | POST /api/auth/adminLogin - 超管正常登录 | ✅ pass |
|
|
|
+| TC-0016 | POST /api/auth/adminLogin - 普通用户被拒绝 | ✅ pass |
|
|
|
+| TC-0017 | POST /api/auth/adminLogin - managementKey无效 | ✅ pass |
|
|
|
+| TC-0018 | POST /api/auth/adminLogin - managementKey为空 | ✅ pass |
|
|
|
+| TC-0019 | POST /api/auth/adminLogin - 用户不存在 | ✅ pass |
|
|
|
+| TC-0020 | POST /api/auth/adminLogin - 密码错误 | ✅ pass |
|
|
|
+| TC-0021 | POST /api/auth/adminLogin - 账号冻结 | ✅ pass |
|
|
|
+| TC-0022 | POST /api/auth/adminLogin - 不带productCode时perms为空 | ✅ pass |
|
|
|
+| TC-0023 | POST /api/auth/adminLogin - 缺少必填字段 | ✅ pass |
|
|
|
+| TC-0024 | POST /api/auth/adminLogin - SQL注入username | ✅ pass |
|
|
|
+| TC-0025 | POST /api/auth/adminLogin - adminLogin 用户名限流 | ✅ pass |
|
|
|
+
|
|
|
+#### 2.2 刷新Token `POST /api/auth/refreshToken`
|
|
|
|
|
|
-### 3.1 未实现 TC 说明
|
|
|
+| TC编号 | 测试场景 | 测试结果 |
|
|
|
+| :--- | :--- | :--- |
|
|
|
+| TC-0026 | POST /api/auth/refreshToken - 正常刷新 | ✅ pass |
|
|
|
+| TC-0027 | POST /api/auth/refreshToken - 不带productCode(回退) | ✅ pass |
|
|
|
+| TC-0028 | POST /api/auth/refreshToken - token无效 | ✅ pass |
|
|
|
+| TC-0029 | POST /api/auth/refreshToken - 用户已删除 | ✅ pass |
|
|
|
+| TC-0030 | POST /api/auth/refreshToken - 账号冻结 | ✅ pass |
|
|
|
+| TC-0031 | POST /api/auth/refreshToken - 超管+productCode(token中已含相同pc) | ✅ pass |
|
|
|
+| TC-0032 | POST /api/auth/refreshToken - 尝试切换产品被拒绝 | ✅ pass |
|
|
|
+| TC-0033 | POST /api/auth/refreshToken - TokenVersion不匹配时拒绝刷新 | ✅ pass |
|
|
|
+| TC-0034 | POST /api/auth/refreshToken - 使用accessToken作为refreshToken被拒绝 | ✅ pass |
|
|
|
+| TC-0035 | POST /api/auth/refreshToken - 产品成员已移除时拒绝刷新 | ✅ pass |
|
|
|
+
|
|
|
+#### 2.3 同步权限 `POST /api/perm/sync`
|
|
|
|
|
|
-| TC编号 | 原因 |
|
|
|
-| :--- | :--- |
|
|
|
-| TC-0228 | 防御性不可达分支,claims类型断言失败场景在正常运行时无法触发,已 t.Skip |
|
|
|
+| TC编号 | 测试场景 | 测试结果 |
|
|
|
+| :--- | :--- | :--- |
|
|
|
+| TC-0036 | POST /api/perm/sync - 全部新增 | ✅ pass |
|
|
|
+| TC-0037 | POST /api/perm/sync - 更新已有(名称变更) | ✅ pass |
|
|
|
+| TC-0038 | POST /api/perm/sync - 无变化 | ✅ pass |
|
|
|
+| TC-0039 | POST /api/perm/sync - 禁用权限重启 | ✅ pass |
|
|
|
+| TC-0040 | POST /api/perm/sync - 移除不在列表的权限 | ✅ pass |
|
|
|
+| TC-0041 | POST /api/perm/sync - 空perms数组被拒绝 | ✅ pass |
|
|
|
+| TC-0042 | POST /api/perm/sync - 验证disabled返回值 | ✅ pass |
|
|
|
+| TC-0043 | POST /api/perm/sync - appKey无效 | ✅ pass |
|
|
|
+| TC-0044 | POST /api/perm/sync - appSecret错误 | ✅ pass |
|
|
|
+| TC-0045 | POST /api/perm/sync - 产品已禁用 | ✅ pass |
|
|
|
+| TC-0046 | POST /api/perm/sync - 大批量(1000条) | ✅ pass |
|
|
|
+| TC-0047 | POST /api/perm/sync - 重复code去重 | ✅ pass |
|
|
|
+| TC-0048 | POST /api/perm/sync - 事务保护-中途失败回滚 | ✅ pass |
|
|
|
+
|
|
|
+#### 2.4 获取用户信息 `POST /api/auth/userInfo`
|
|
|
+
|
|
|
+| TC编号 | 测试场景 | 测试结果 |
|
|
|
+| :--- | :--- | :--- |
|
|
|
+| TC-0049 | POST /api/auth/userInfo - 正常获取-含productCode | ✅ pass |
|
|
|
+| TC-0050 | POST /api/auth/userInfo - 不含productCode | ✅ pass |
|
|
|
+| TC-0051 | POST /api/auth/userInfo - 未登录 | ✅ pass |
|
|
|
+| TC-0052 | POST /api/auth/userInfo - token过期 | ✅ pass |
|
|
|
+| TC-0053 | POST /api/auth/userInfo - userId=0 | ✅ pass |
|
|
|
+
|
|
|
+#### 2.5 修改密码 `POST /api/auth/changePassword`
|
|
|
+
|
|
|
+| TC编号 | 测试场景 | 测试结果 |
|
|
|
+| :--- | :--- | :--- |
|
|
|
+| TC-0054 | POST /api/auth/changePassword - 正常修改 | ✅ pass |
|
|
|
+| TC-0055 | POST /api/auth/changePassword - mustChangePassword重置 | ✅ pass |
|
|
|
+| TC-0056 | POST /api/auth/changePassword - 原密码错误 | ✅ pass |
|
|
|
+| TC-0057 | POST /api/auth/changePassword - 新密码少于8字符 | ✅ pass |
|
|
|
+| TC-0058 | POST /api/auth/changePassword - 新密码恰好8字符(含大小写+数字) | ✅ pass |
|
|
|
+| TC-0059 | POST /api/auth/changePassword - 新密码空字符串 | ✅ pass |
|
|
|
+| TC-0060 | POST /api/auth/changePassword - 新密码超过72字符 | ✅ pass |
|
|
|
+| TC-0061 | POST /api/auth/changePassword - 新密码恰好72字符 | ✅ pass |
|
|
|
+| TC-0062 | POST /api/auth/changePassword - 新旧密码相同 | ✅ pass |
|
|
|
+| TC-0063 | POST /api/auth/changePassword - 用户不存在 | ✅ pass |
|
|
|
+
|
|
|
+#### 2.6 创建产品 `POST /api/product/create`
|
|
|
+
|
|
|
+| TC编号 | 测试场景 | 测试结果 |
|
|
|
+| :--- | :--- | :--- |
|
|
|
+| TC-0064 | POST /api/product/create - 正常创建 | ✅ pass |
|
|
|
+| TC-0065 | POST /api/product/create - 事务回滚-用户创建失败 | ✅ pass |
|
|
|
+| TC-0066 | POST /api/product/create - 事务回滚-成员创建失败 | ✅ pass |
|
|
|
+| TC-0067 | POST /api/product/create - 编码已存在 | ✅ pass |
|
|
|
+| TC-0068 | POST /api/product/create - 并发创建同编码 | ✅ pass |
|
|
|
+| TC-0069 | POST /api/product/create - createProduct 含空格被拒绝 | ✅ pass |
|
|
|
+| TC-0070 | POST /api/product/create - createProduct 含特殊字符被拒绝 | ✅ pass |
|
|
|
+| TC-0071 | POST /api/product/create - createProduct 全中文被拒绝 | ✅ pass |
|
|
|
+| TC-0072 | POST /api/product/create - createProduct 纯数字开头被拒绝 | ✅ pass |
|
|
|
+| TC-0073 | POST /api/product/create - createProduct 空字符串被拒绝 | ✅ pass |
|
|
|
+| TC-0074 | POST /api/product/create - createProduct 长度>64 被拒绝 | ✅ pass |
|
|
|
+| TC-0075 | POST /api/product/create - createProduct 合法编码(含下划线/中划线/数字) | ✅ pass |
|
|
|
+
|
|
|
+#### 2.7 产品更新/列表/详情
|
|
|
+
|
|
|
+| TC编号 | 测试场景 | 测试结果 |
|
|
|
+| :--- | :--- | :--- |
|
|
|
+| TC-0076 | POST /api/product/update - 正常更新 | ✅ pass |
|
|
|
+| TC-0077 | POST /api/product/update - 不存在 | ✅ pass |
|
|
|
+| TC-0078 | POST /api/product/update - 不传status | ✅ pass |
|
|
|
+| TC-0079 | POST /api/product/list - 正常分页 | ✅ pass |
|
|
|
+| TC-0080 | POST /api/product/list - 默认分页 | ✅ pass |
|
|
|
+| TC-0081 | POST /api/product/list - pageSize超过上限 | ✅ pass |
|
|
|
+| TC-0082 | POST /api/product/list - pageSize=0 | ✅ pass |
|
|
|
+| TC-0083 | POST /api/product/list - page负值 | ✅ pass |
|
|
|
+| TC-0084 | POST /api/product/detail - 正常查询 | ✅ pass |
|
|
|
+| TC-0085 | POST /api/product/detail - 不存在 | ✅ pass |
|
|
|
+| TC-0086 | POST /api/product/list - 非超管AppKey隐藏 | ✅ pass |
|
|
|
+| TC-0087 | POST /api/product/list - 超管可见AppKey | ✅ pass |
|
|
|
+| TC-0088 | POST /api/product/detail - 非超管AppKey隐藏 | ✅ pass |
|
|
|
+| TC-0089 | POST /api/product/detail - 超管可见AppKey | ✅ pass |
|
|
|
+| TC-0090 | POST /api/product/update - updateProduct 非法状态值被拒绝 | ✅ pass |
|
|
|
+
|
|
|
+#### 2.8 创建部门 `POST /api/dept/create`
|
|
|
+
|
|
|
+| TC编号 | 测试场景 | 测试结果 |
|
|
|
+| :--- | :--- | :--- |
|
|
|
+| TC-0091 | POST /api/dept/create - 创建顶级部门 | ✅ pass |
|
|
|
+| TC-0092 | POST /api/dept/create - 创建子部门 | ✅ pass |
|
|
|
+| TC-0093 | POST /api/dept/create - 父部门不存在 | ✅ pass |
|
|
|
+| TC-0094 | POST /api/dept/create - 不传DeptType默认NORMAL | ✅ pass |
|
|
|
+| TC-0095 | POST /api/dept/create - 传DeptType=DEV | ✅ pass |
|
|
|
+| TC-0096 | POST /api/dept/create - 事务内FindOneWithTx可见性 | ✅ pass |
|
|
|
+| TC-0097 | POST /api/dept/create - 事务回滚-Insert失败 | ✅ pass |
|
|
|
+| TC-0098 | POST /api/dept/create - 事务回滚-UpdateWithTx失败 | ✅ pass |
|
|
|
+| TC-0099 | POST /api/dept/create - 多层嵌套(5层) | ✅ pass |
|
|
|
+| TC-0100 | POST /api/dept/create - 通过Logic创建+验证Path | ✅ pass |
|
|
|
+
|
|
|
+#### 2.9 部门更新/删除/树
|
|
|
+
|
|
|
+| TC编号 | 测试场景 | 测试结果 |
|
|
|
+| :--- | :--- | :--- |
|
|
|
+| TC-0101 | POST /api/dept/update - 正常更新 | ✅ pass |
|
|
|
+| TC-0102 | POST /api/dept/update - 不存在 | ✅ pass |
|
|
|
+| TC-0103 | POST /api/dept/update - DeptType NORMAL→DEV | ✅ pass |
|
|
|
+| TC-0104 | POST /api/dept/update - DeptType无效值返回错误 | ✅ pass |
|
|
|
+| TC-0105 | POST /api/dept/update - DeptType变更时级联清除子部门用户缓存 | ✅ pass |
|
|
|
+| TC-0106 | POST /api/dept/delete - 正常删除(无子部门) | ✅ pass |
|
|
|
+| TC-0107 | POST /api/dept/delete - 有子部门 | ✅ pass |
|
|
|
+| TC-0108 | POST /api/dept/delete - 不存在的部门 | ✅ pass |
|
|
|
+| TC-0109 | POST /api/dept/delete - 部门下有关联用户 | ✅ pass |
|
|
|
+| TC-0110 | POST /api/dept/tree - 正常获取 | ✅ pass |
|
|
|
+| TC-0111 | POST /api/dept/tree - 空数据 | ✅ pass |
|
|
|
+| TC-0112 | POST /api/dept/tree - 孤儿节点 | ✅ pass |
|
|
|
+
|
|
|
+#### 2.10 权限列表 `POST /api/perm/list`
|
|
|
+
|
|
|
+| TC编号 | 测试场景 | 测试结果 |
|
|
|
+| :--- | :--- | :--- |
|
|
|
+| TC-0113 | POST /api/perm/list - 正常查询 | ✅ pass |
|
|
|
+| TC-0114 | POST /api/perm/list - 默认分页 | ✅ pass |
|
|
|
+| TC-0115 | POST /api/perm/list - pageSize超过上限 | ✅ pass |
|
|
|
+| TC-0116 | POST /api/perm/list - 不存在的productCode | ✅ pass |
|
|
|
+
|
|
|
+#### 2.11 角色管理
|
|
|
+
|
|
|
+| TC编号 | 测试场景 | 测试结果 |
|
|
|
+| :--- | :--- | :--- |
|
|
|
+| TC-0117 | POST /api/role/create - 正常创建 | ✅ pass |
|
|
|
+| TC-0118 | POST /api/role/create - 重复角色名 | ✅ pass |
|
|
|
+| TC-0119 | POST /api/role/create - 并发同名创建 | ✅ pass |
|
|
|
+| TC-0120 | POST /api/role/update - 正常更新 | ✅ pass |
|
|
|
+| TC-0121 | POST /api/role/update - 不存在 | ✅ pass |
|
|
|
+| TC-0122 | POST /api/role/list - 正常查询 | ✅ pass |
|
|
|
+| TC-0123 | POST /api/role/list - pageSize超过上限 | ✅ pass |
|
|
|
+| TC-0124 | POST /api/role/detail - 正常查询 | ✅ pass |
|
|
|
+| TC-0125 | POST /api/role/detail - 不存在 | ✅ pass |
|
|
|
+
|
|
|
+#### 2.12 删除角色 `POST /api/role/delete`
|
|
|
+
|
|
|
+| TC编号 | 测试场景 | 测试结果 |
|
|
|
+| :--- | :--- | :--- |
|
|
|
+| TC-0126 | POST /api/role/delete - 正常删除+级联 | ✅ pass |
|
|
|
+| TC-0127 | POST /api/role/delete - 事务回滚 | ✅ pass |
|
|
|
+| TC-0128 | POST /api/role/delete - 无关联数据 | ✅ pass |
|
|
|
+
|
|
|
+#### 2.13 绑定角色权限 `POST /api/role/bindPerms`
|
|
|
+
|
|
|
+| TC编号 | 测试场景 | 测试结果 |
|
|
|
+| :--- | :--- | :--- |
|
|
|
+| TC-0129 | POST /api/role/bindPerms - 正常绑定 | ✅ pass |
|
|
|
+| TC-0130 | POST /api/role/bindPerms - 角色不存在 | ✅ pass |
|
|
|
+| TC-0131 | POST /api/role/bindPerms - 清空权限 | ✅ pass |
|
|
|
+| TC-0132 | POST /api/role/bindPerms - 重复permId | ✅ pass |
|
|
|
+| TC-0133 | POST /api/role/bindPerms - 事务回滚 | ✅ pass |
|
|
|
+
|
|
|
+#### 2.14 创建用户 `POST /api/user/create`
|
|
|
+
|
|
|
+| TC编号 | 测试场景 | 测试结果 |
|
|
|
+| :--- | :--- | :--- |
|
|
|
+| TC-0134 | POST /api/user/create - 正常创建 | ✅ pass |
|
|
|
+| TC-0135 | POST /api/user/create - 用户名已存在(预检) | ✅ pass |
|
|
|
+| TC-0136 | POST /api/user/create - 带完整可选字段 | ✅ pass |
|
|
|
+| TC-0137 | POST /api/user/create - 非法email格式 | ✅ pass |
|
|
|
+| TC-0138 | POST /api/user/create - 合法email | ✅ pass |
|
|
|
+| TC-0139 | POST /api/user/create - email为空(可选) | ✅ pass |
|
|
|
+| TC-0140 | POST /api/user/create - 非法phone格式 | ✅ pass |
|
|
|
+| TC-0141 | POST /api/user/create - 合法phone(国际) | ✅ pass |
|
|
|
+| TC-0142 | POST /api/user/create - phone为空(可选) | ✅ pass |
|
|
|
+| TC-0143 | POST /api/user/create - 并发同username(TOCTOU) | ✅ pass |
|
|
|
+| TC-0144 | POST /api/user/create - 唯一索引冲突消息 | ✅ pass |
|
|
|
+| TC-0145 | POST /api/user/create - 密码少于8字符 | ✅ pass |
|
|
|
+| TC-0146 | POST /api/user/create - 密码缺少大写字母 | ✅ pass |
|
|
|
+| TC-0147 | POST /api/user/create - 密码缺少小写字母 | ✅ pass |
|
|
|
+| TC-0148 | POST /api/user/create - 密码缺少数字 | ✅ pass |
|
|
|
+| TC-0149 | POST /api/user/create - 密码超过72字符 | ✅ pass |
|
|
|
+| TC-0150 | POST /api/user/create - 用户名含特殊字符被拒绝 | ✅ pass |
|
|
|
+| TC-0151 | POST /api/user/create - 用户名太短(1字符)被拒绝 | ✅ pass |
|
|
|
+| TC-0152 | POST /api/user/create - 用户名太长(65字符)被拒绝 | ✅ pass |
|
|
|
+| TC-0153 | POST /api/user/create - 部门不存在被拒绝 | ✅ pass |
|
|
|
+| TC-0154 | POST /api/user/create - 昵称超过64字符被拒绝 | ✅ pass |
|
|
|
+| TC-0155 | POST /api/user/create - 备注超过255字符被拒绝 | ✅ pass |
|
|
|
+
|
|
|
+#### 2.15 用户更新 `POST /api/user/update` (指针类型+DeptId可清零)
|
|
|
+
|
|
|
+| TC编号 | 测试场景 | 测试结果 |
|
|
|
+| :--- | :--- | :--- |
|
|
|
+| TC-0156 | POST /api/user/update - 正常更新 | ✅ pass |
|
|
|
+| TC-0157 | POST /api/user/update - 不存在 | ✅ pass |
|
|
|
+| TC-0158 | POST /api/user/update - 仅传id | ✅ pass |
|
|
|
+| TC-0159 | POST /api/user/update - 清空nickname | ✅ pass |
|
|
|
+| TC-0160 | POST /api/user/update - 清空email | ✅ pass |
|
|
|
+| TC-0161 | POST /api/user/update - 清空remark | ✅ pass |
|
|
|
+| TC-0162 | POST /api/user/update - 非法email格式 | ✅ pass |
|
|
|
+| TC-0163 | POST /api/user/update - 非法phone格式 | ✅ pass |
|
|
|
+| TC-0164 | POST /api/user/update - 合法phone | ✅ pass |
|
|
|
+| TC-0165 | POST /api/user/update - 不传email(nil) | ✅ pass |
|
|
|
+| TC-0166 | POST /api/user/update - DeptId设为0(取消部门) | ✅ pass |
|
|
|
+| TC-0167 | POST /api/user/update - DeptId设为正值 | ✅ pass |
|
|
|
+| TC-0168 | POST /api/user/update - DeptId不传(nil) | ✅ pass |
|
|
|
+| TC-0169 | POST /api/user/update - 超管不能冻结另一超管 | ✅ pass |
|
|
|
+| TC-0170 | POST /api/user/update - updateUser-产品管理员可管理范围内用户 | ✅ pass |
|
|
|
+| TC-0171 | POST /api/user/update - updateUser-昵称超长拒绝 | ✅ pass |
|
|
|
+| TC-0172 | POST /api/user/update - updateUser-部门不存在 | ✅ pass |
|
|
|
+| TC-0173 | POST /api/user/update - updateUser 修改状态时递增 tokenVersion | ✅ pass |
|
|
|
+| TC-0174 | POST /api/user/update - updateUser 仅改 profile 不递增 tokenVersion | ✅ pass |
|
|
|
+| TC-0175 | POST /api/user/update - updateUser 乐观锁冲突 -> 409 | ✅ pass |
|
|
|
+
|
|
|
+#### 2.16 用户列表/详情/状态 及其他用户操作
|
|
|
+
|
|
|
+| TC编号 | 测试场景 | 测试结果 |
|
|
|
+| :--- | :--- | :--- |
|
|
|
+| TC-0176 | POST /api/user/list - 含productCode | ✅ pass |
|
|
|
+| TC-0177 | POST /api/user/list - 不含productCode | ✅ pass |
|
|
|
+| TC-0178 | POST /api/user/list - pageSize超过上限 | ✅ pass |
|
|
|
+| TC-0179 | POST /api/user/list - 用户不在产品中 | ✅ pass |
|
|
|
+| TC-0180 | POST /api/user/list - 批量查询DB异常 | ✅ pass |
|
|
|
+| TC-0181 | POST /api/user/detail - 正常查询 | ✅ pass |
|
|
|
+| TC-0182 | POST /api/user/detail - 正常查询-含Avatar | ✅ pass |
|
|
|
+| TC-0183 | POST /api/user/detail - 不存在 | ✅ pass |
|
|
|
+| TC-0184 | POST /api/user/bindRoles - 正常绑定 | ✅ pass |
|
|
|
+| TC-0185 | POST /api/user/bindRoles - 用户不存在 | ✅ pass |
|
|
|
+| TC-0186 | POST /api/user/bindRoles - 清空角色 | ✅ pass |
|
|
|
+| TC-0187 | POST /api/user/bindRoles - 事务回滚 | ✅ pass |
|
|
|
+| TC-0188 | POST /api/user/bindRoles - 角色不属于当前产品 | ✅ pass |
|
|
|
+| TC-0189 | POST /api/user/bindRoles - 角色已禁用 | ✅ pass |
|
|
|
+| TC-0190 | POST /api/user/bindRoles - 角色不存在 | ✅ pass |
|
|
|
+| TC-0191 | POST /api/user/bindRoles - 非产品成员绑定角色被拒绝 | ✅ pass |
|
|
|
+| TC-0192 | POST /api/user/setPerms - 正常ALLOW | ✅ pass |
|
|
|
+| TC-0193 | POST /api/user/setPerms - 用户不存在 | ✅ pass |
|
|
|
+| TC-0194 | POST /api/user/setPerms - DENY权限 | ✅ pass |
|
|
|
+| TC-0195 | POST /api/user/setPerms - 清空权限 | ✅ pass |
|
|
|
+| TC-0196 | POST /api/user/setPerms - 无效Effect值 | ✅ pass |
|
|
|
+| TC-0197 | POST /api/user/setPerms - PermId不存在 | ✅ pass |
|
|
|
+| TC-0198 | POST /api/user/setPerms - 权限不属于当前产品 | ✅ pass |
|
|
|
+| TC-0199 | POST /api/user/setPerms - 非产品成员设置权限被拒绝 | ✅ pass |
|
|
|
+| TC-0200 | POST /api/user/updateStatus - 正常冻结 | ✅ pass |
|
|
|
+| TC-0201 | POST /api/user/updateStatus - 正常解冻 | ✅ pass |
|
|
|
+| TC-0202 | POST /api/user/updateStatus - 非法status(0) | ✅ pass |
|
|
|
+| TC-0203 | POST /api/user/updateStatus - 冻结自己 | ✅ pass |
|
|
|
+| TC-0204 | POST /api/user/updateStatus - 冻结超管 | ✅ pass |
|
|
|
+| TC-0205 | POST /api/user/list - userList-非超管仅可见产品成员 | ✅ pass |
|
|
|
+| TC-0206 | POST /api/user/list - userList-非超管未指定productCode被拒绝 | ✅ pass |
|
|
|
+| TC-0207 | POST /api/user/list - userList-非超管使用错误productCode被拒绝 | ✅ pass |
|
|
|
+| TC-0208 | POST /api/user/bindRoles - bindRoles-permsLevel越权拒绝 | ✅ pass |
|
|
|
+| TC-0209 | POST /api/user/bindRoles - bindRoles-超管可分配任意级别角色 | ✅ pass |
|
|
|
+| TC-0210 | POST /api/user/setPerms - 同一权限ID冲突Effect被拒绝 | ✅ pass |
|
|
|
+| TC-0211 | POST /api/user/setPerms - 重复权限ID相同Effect去重 | ✅ pass |
|
|
|
+| TC-0212 | POST /api/user/setPerms - 已禁用权限不能被设置 | ✅ pass |
|
|
|
+
|
|
|
+#### 2.17 成员管理
|
|
|
+
|
|
|
+| TC编号 | 测试场景 | 测试结果 |
|
|
|
+| :--- | :--- | :--- |
|
|
|
+| TC-0213 | POST /api/member/add - 正常添加 | ✅ pass |
|
|
|
+| TC-0214 | POST /api/member/add - 产品不存在 | ✅ pass |
|
|
|
+| TC-0215 | POST /api/member/add - 用户不存在 | ✅ pass |
|
|
|
+| TC-0216 | POST /api/member/add - 已是成员 | ✅ pass |
|
|
|
+| TC-0217 | POST /api/member/add - 并发添加 | ✅ pass |
|
|
|
+| TC-0218 | POST /api/member/add - 无效MemberType | ✅ pass |
|
|
|
+| TC-0219 | POST /api/member/update - 正常更新 | ✅ pass |
|
|
|
+| TC-0220 | POST /api/member/update - 不存在 | ✅ pass |
|
|
|
+| TC-0221 | POST /api/member/update - 无效MemberType | ✅ pass |
|
|
|
+| TC-0222 | POST /api/member/list - 正常查询(批量查用户) | ✅ pass |
|
|
|
+| TC-0223 | POST /api/member/list - 成员用户已删除 | ✅ pass |
|
|
|
+| TC-0224 | POST /api/member/list - pageSize超过上限 | ✅ pass |
|
|
|
+| TC-0225 | POST /api/member/list - 空成员列表 | ✅ pass |
|
|
|
+| TC-0226 | POST /api/member/remove - 正常移除+级联(事务内) | ✅ pass |
|
|
|
+| TC-0227 | POST /api/member/remove - 跨产品隔离 | ✅ pass |
|
|
|
+| TC-0228 | POST /api/member/remove - 成员不存在 | ✅ pass |
|
|
|
+| TC-0229 | POST /api/member/remove - 事务回滚 | ✅ pass |
|
|
|
+
|
|
|
+### 三、gRPC 接口测试用例
|
|
|
+
|
|
|
+#### 3.1 gRPC SyncPermissions
|
|
|
+
|
|
|
+| TC编号 | 测试场景 | 测试结果 |
|
|
|
+| :--- | :--- | :--- |
|
|
|
+| TC-0230 | SyncPermissions - 正常同步 | ✅ pass |
|
|
|
+| TC-0231 | SyncPermissions - appKey无效 | ✅ pass |
|
|
|
+| TC-0232 | SyncPermissions - appSecret错误 | ✅ pass |
|
|
|
+| TC-0233 | SyncPermissions - 产品已禁用 | ✅ pass |
|
|
|
+| TC-0234 | SyncPermissions - 验证disabled计数 | ✅ pass |
|
|
|
+
|
|
|
+#### 3.2 gRPC Login / RefreshToken / VerifyToken / GetUserPerms
|
|
|
+
|
|
|
+| TC编号 | 测试场景 | 测试结果 |
|
|
|
+| :--- | :--- | :--- |
|
|
|
+| TC-0235 | Login - 正常登录(普通用户+productCode) | ✅ pass |
|
|
|
+| TC-0236 | Login - 用户不存在 | ✅ pass |
|
|
|
+| TC-0237 | Login - 密码错误 | ✅ pass |
|
|
|
+| TC-0238 | Login - 账号冻结 | ✅ pass |
|
|
|
+| TC-0239 | Login - 超管被拒绝 | ✅ pass |
|
|
|
+| TC-0240 | Login - 普通用户+productCode | ✅ pass |
|
|
|
+| TC-0241 | Login - 产品成员被禁用时拒绝登录 | ✅ pass |
|
|
|
+| TC-0242 | Login - productCode为空 | ✅ pass |
|
|
|
+| TC-0243 | RefreshToken - 正常刷新 | ✅ pass |
|
|
|
+| TC-0244 | RefreshToken - token无效 | ✅ pass |
|
|
|
+| TC-0245 | RefreshToken - 账号冻结 | ✅ pass |
|
|
|
+| TC-0246 | RefreshToken - productCode回退到claims | ✅ pass |
|
|
|
+| TC-0247 | RefreshToken - 超管+productCode | ✅ pass |
|
|
|
+| TC-0248 | RefreshToken - 普通用户+productCode | ✅ pass |
|
|
|
+| TC-0249 | VerifyToken - 有效token | ✅ pass |
|
|
|
+| TC-0250 | VerifyToken - 无效token | ✅ pass |
|
|
|
+| TC-0251 | VerifyToken - 缺少userId | ✅ pass |
|
|
|
+| TC-0252 | VerifyToken - 冻结用户token返回Invalid | ✅ pass |
|
|
|
+| TC-0253 | VerifyToken - 非成员token返回Invalid | ✅ pass |
|
|
|
+| TC-0254 | VerifyToken - 返回实时MemberType和Perms | ✅ pass |
|
|
|
+| TC-0255 | GetUserPerms - 用户不存在(需先通过AppKey/Secret认证) | ✅ pass |
|
|
|
+| TC-0256 | GetUserPerms - 超管(需先通过AppKey/Secret认证) | ✅ pass |
|
|
|
+| TC-0257 | GetUserPerms - MEMBER-DENY覆盖(需先通过AppKey/Secret认证) | ✅ pass |
|
|
|
+
|
|
|
+### 四、JWT中间件 / 统一响应测试用例
|
|
|
+
|
|
|
+| TC编号 | 测试场景 | 测试结果 |
|
|
|
+| :--- | :--- | :--- |
|
|
|
+| TC-0258 | 正常Bearer token | ✅ pass |
|
|
|
+| TC-0259 | 无Authorization头 | ✅ pass |
|
|
|
+| TC-0260 | 无Bearer前缀 | ✅ pass |
|
|
|
+| TC-0261 | token签名错误 | ✅ pass |
|
|
|
+| TC-0262 | token过期 | ✅ pass |
|
|
|
+| TC-0263 | claims类型断言失败 | ⏭️ skip |
|
|
|
+| TC-0264 | refresh token被拒绝 | ✅ pass |
|
|
|
+| TC-0265 | 业务错误(CodeError) | ✅ pass |
|
|
|
+| TC-0266 | 内部错误 | ✅ pass |
|
|
|
+| TC-0267 | 成功(有data) | ✅ pass |
|
|
|
+| TC-0268 | 成功(无data) | ✅ pass |
|
|
|
+
|
|
|
+### 五、util 层测试用例
|
|
|
+
|
|
|
+#### 5.1 NormalizePage
|
|
|
+
|
|
|
+| TC编号 | 测试场景 | 测试结果 |
|
|
|
+| :--- | :--- | :--- |
|
|
|
+| TC-0269 | 正常值 | ✅ pass |
|
|
|
+| TC-0270 | page<=0 | ✅ pass |
|
|
|
+| TC-0271 | page=-1 | ✅ pass |
|
|
|
+| TC-0272 | pageSize<=0 | ✅ pass |
|
|
|
+| TC-0273 | pageSize>100 | ✅ pass |
|
|
|
+| TC-0274 | pageSize=100 | ✅ pass |
|
|
|
+| TC-0275 | pageSize=101 | ✅ pass |
|
|
|
+| TC-0276 | 双零 | ✅ pass |
|
|
|
+
|
|
|
+#### 5.2 IsValidEmail
|
|
|
+
|
|
|
+| TC编号 | 测试场景 | 测试结果 |
|
|
|
+| :--- | :--- | :--- |
|
|
|
+| TC-0277 | 正常邮箱 | ✅ pass |
|
|
|
+| TC-0278 | 含点号 | ✅ pass |
|
|
|
+| TC-0279 | 含加号 | ✅ pass |
|
|
|
+| TC-0280 | 缺少@ | ✅ pass |
|
|
|
+| TC-0281 | 缺少域名 | ✅ pass |
|
|
|
+| TC-0282 | 缺少TLD | ✅ pass |
|
|
|
+| TC-0283 | 空字符串 | ✅ pass |
|
|
|
+
|
|
|
+#### 5.3 IsValidPhone
|
|
|
+
|
|
|
+| TC编号 | 测试场景 | 测试结果 |
|
|
|
+| :--- | :--- | :--- |
|
|
|
+| TC-0284 | 国内手机号 | ✅ pass |
|
|
|
+| TC-0285 | 带+国际码 | ✅ pass |
|
|
|
+| TC-0286 | 太短(6位) | ✅ pass |
|
|
|
+| TC-0287 | 恰好7位 | ✅ pass |
|
|
|
+| TC-0288 | 最长15位 | ✅ pass |
|
|
|
+| TC-0289 | 超长16位 | ✅ pass |
|
|
|
+| TC-0290 | 包含字母 | ✅ pass |
|
|
|
+| TC-0291 | 空字符串 | ✅ pass |
|
|
|
+
|
|
|
+### 六、Logic 层单元测试用例
|
|
|
+
|
|
|
+#### 6.1 auth/jwt.go — GenerateAccessToken
|
|
|
+
|
|
|
+| TC编号 | 测试场景 | 测试结果 |
|
|
|
+| :--- | :--- | :--- |
|
|
|
+| TC-0292 | 正常生成 | ✅ pass |
|
|
|
+| TC-0293 | 解析token验证claims | ✅ pass |
|
|
|
+| TC-0294 | 空secret | ✅ pass |
|
|
|
+| TC-0295 | 空perms | ✅ pass |
|
|
|
+| TC-0296 | 过期时间验证 | ✅ pass |
|
|
|
+
|
|
|
+#### 6.2 auth/jwt.go — GenerateRefreshToken
|
|
|
+
|
|
|
+| TC编号 | 测试场景 | 测试结果 |
|
|
|
+| :--- | :--- | :--- |
|
|
|
+| TC-0297 | 正常生成 | ✅ pass |
|
|
|
+| TC-0298 | 解析验证 | ✅ pass |
|
|
|
+| TC-0299 | productCode为空 | ✅ pass |
|
|
|
+
|
|
|
+#### 6.3 auth/jwt.go — ParseRefreshToken
|
|
|
+
|
|
|
+| TC编号 | 测试场景 | 测试结果 |
|
|
|
+| :--- | :--- | :--- |
|
|
|
+| TC-0300 | 正常解析 | ✅ pass |
|
|
|
+| TC-0301 | 错误secret | ✅ pass |
|
|
|
+| TC-0302 | 无效token字符串 | ✅ pass |
|
|
|
+| TC-0303 | 空token | ✅ pass |
|
|
|
+| TC-0304 | 过期token | ✅ pass |
|
|
|
+| TC-0305 | AccessToken误用 | ✅ pass |
|
|
|
+
|
|
|
+#### 6.4 middleware — 辅助函数单元测试
|
|
|
+
|
|
|
+| TC编号 | 测试场景 | 测试结果 |
|
|
|
+| :--- | :--- | :--- |
|
|
|
+| TC-0306 | GetUserId-正常 | ✅ pass |
|
|
|
+| TC-0307 | GetUserId-空ctx | ✅ pass |
|
|
|
+| TC-0308 | GetProductCode-正常 | ✅ pass |
|
|
|
+| TC-0309 | GetUserDetails 返回完整字段 | ✅ pass |
|
|
|
+
|
|
|
+### 七、Model 层 _gen.go 模板生成方法测试用例
|
|
|
+
|
|
|
+#### 7.1 通用 CRUD 方法 (每个 Model 均需测试)
|
|
|
+
|
|
|
+| TC编号 | 测试场景 | 测试结果 |
|
|
|
+| :--- | :--- | :--- |
|
|
|
+| TC-0310 | Insert - 正常插入 | ✅ pass |
|
|
|
+| TC-0311 | Insert - 正常插入含TokenVersion | ✅ pass |
|
|
|
+| TC-0312 | Insert - 唯一索引冲突 | ✅ pass |
|
|
|
+| TC-0313 | Insert - 缓存key生成正确 | ✅ pass |
|
|
|
+| TC-0314 | InsertWithTx - 事务内插入 | ✅ pass |
|
|
|
+| TC-0315 | InsertWithTx - 事务内插入含TokenVersion | ✅ pass |
|
|
|
+| TC-0316 | InsertWithTx - 事务回滚后无数据 | ✅ pass |
|
|
|
+| TC-0317 | FindOne - 正常查询(缓存未命中) | ✅ pass |
|
|
|
+| TC-0318 | FindOne - 正常查询(缓存命中) | ✅ pass |
|
|
|
+| TC-0319 | FindOne - 记录不存在 | ✅ pass |
|
|
|
+| TC-0320 | FindOne - DB异常(非ErrNotFound) | ✅ pass |
|
|
|
+| TC-0321 | FindOneWithTx - 事务内正常查询 | ✅ pass |
|
|
|
+| TC-0322 | FindOneWithTx - 事务内记录不存在 | ✅ pass |
|
|
|
+| TC-0323 | FindOneWithTx - 事务内可见性 | ✅ pass |
|
|
|
+| TC-0324 | Update - 正常更新 | ✅ pass |
|
|
|
+| TC-0325 | Update - 正常更新含TokenVersion | ✅ pass |
|
|
|
+| TC-0326 | Update - 记录不存在 | ✅ pass |
|
|
|
+| TC-0327 | UpdateWithTx - 事务内更新 | ✅ pass |
|
|
|
+| TC-0328 | Delete - 正常删除 | ✅ pass |
|
|
|
+| TC-0329 | Delete - 记录不存在 | ✅ pass |
|
|
|
+| TC-0330 | DeleteWithTx - 事务内删除 | ✅ pass |
|
|
|
+| TC-0331 | TransactCtx - 正常事务 | ✅ pass |
|
|
|
+| TC-0332 | TransactCtx - fn返回错误 | ✅ pass |
|
|
|
+| TC-0333 | TableName - 获取表名 | ✅ pass |
|
|
|
+
|
|
|
+#### 7.2 批量插入方法
|
|
|
+
|
|
|
+| TC编号 | 测试场景 | 测试结果 |
|
|
|
+| :--- | :--- | :--- |
|
|
|
+| TC-0334 | BatchInsert - 空列表 | ✅ pass |
|
|
|
+| TC-0335 | BatchInsert - 单条记录 | ✅ pass |
|
|
|
+| TC-0336 | BatchInsert - 多条记录(3条) | ✅ pass |
|
|
|
+| TC-0337 | BatchInsert - 批量插入含TokenVersion | ✅ pass |
|
|
|
+| TC-0338 | BatchInsert - 唯一索引冲突 | ✅ pass |
|
|
|
+| TC-0339 | BatchInsert - 大批量(1000条) | ✅ pass |
|
|
|
+| TC-0340 | BatchInsertWithTx - 空列表 | ✅ pass |
|
|
|
+| TC-0341 | BatchInsertWithTx - 正常多条 | ✅ pass |
|
|
|
+| TC-0342 | BatchInsertWithTx - 事务回滚 | ✅ pass |
|
|
|
+
|
|
|
+#### 7.3 批量更新方法
|
|
|
+
|
|
|
+| TC编号 | 测试场景 | 测试结果 |
|
|
|
+| :--- | :--- | :--- |
|
|
|
+| TC-0343 | BatchUpdate - 空列表 | ✅ pass |
|
|
|
+| TC-0344 | BatchUpdate - 单条记录 | ✅ pass |
|
|
|
+| TC-0345 | BatchUpdate - 多条记录(3条) | ✅ pass |
|
|
|
+| TC-0346 | BatchUpdate - 批量更新不污染数据 | ✅ pass |
|
|
|
+| TC-0347 | BatchUpdate - 部分id不存在 | ✅ pass |
|
|
|
+| TC-0348 | BatchUpdateWithTx - 空列表 | ✅ pass |
|
|
|
+| TC-0349 | BatchUpdateWithTx - 正常多条 | ✅ pass |
|
|
|
+| TC-0350 | buildBatchUpdateQuery - 单条 | ✅ pass |
|
|
|
+| TC-0351 | buildBatchUpdateQuery - 多条 | ✅ pass |
|
|
|
+| TC-0352 | buildBatchUpdateQuery - vals数量正确 | ✅ pass |
|
|
|
+
|
|
|
+#### 7.4 批量删除方法
|
|
|
+
|
|
|
+| TC编号 | 测试场景 | 测试结果 |
|
|
|
+| :--- | :--- | :--- |
|
|
|
+| TC-0353 | BatchDelete - 空ids | ✅ pass |
|
|
|
+| TC-0354 | BatchDelete - 单个id | ✅ pass |
|
|
|
+| TC-0355 | BatchDelete - 多个id(3个) | ✅ pass |
|
|
|
+| TC-0356 | BatchDelete - 包含不存在id | ✅ pass |
|
|
|
+| TC-0357 | BatchDeleteWithTx - 空ids | ✅ pass |
|
|
|
+| TC-0358 | BatchDeleteWithTx - 正常多条 | ✅ pass |
|
|
|
+
|
|
|
+#### 7.5 唯一索引查询方法 (按 Model 差异)
|
|
|
+
|
|
|
+| TC编号 | 测试场景 | 测试结果 |
|
|
|
+| :--- | :--- | :--- |
|
|
|
+| TC-0359 | FindOneByUsername - 正常查询 | ✅ pass |
|
|
|
+| TC-0360 | FindOneByUsername - 不存在 | ✅ pass |
|
|
|
+| TC-0361 | FindOneByUsernameWithTx - 事务内正常查询 | ✅ pass |
|
|
|
+| TC-0362 | FindOneByUsernameWithTx - 事务内不存在 | ✅ pass |
|
|
|
+| TC-0363 | FindOneByAppKey - 正常查询 | ✅ pass |
|
|
|
+| TC-0364 | FindOneByAppKey - 不存在 | ✅ pass |
|
|
|
+| TC-0365 | FindOneByAppKeyWithTx - 事务内正常查询 | ✅ pass |
|
|
|
+| TC-0366 | FindOneByAppKeyWithTx - 事务内不存在 | ✅ pass |
|
|
|
+| TC-0367 | FindOneByCode - 正常查询 | ✅ pass |
|
|
|
+| TC-0368 | FindOneByCode - 不存在 | ✅ pass |
|
|
|
+| TC-0369 | FindOneByCodeWithTx - 事务内正常查询 | ✅ pass |
|
|
|
+| TC-0370 | FindOneByCodeWithTx - 事务内不存在 | ✅ pass |
|
|
|
+| TC-0371 | FindOneByProductCodeCode - 正常查询 | ✅ pass |
|
|
|
+| TC-0372 | FindOneByProductCodeCode - 不存在 | ✅ pass |
|
|
|
+| TC-0373 | FindOneByProductCodeCodeWithTx - 事务内正常查询 | ✅ pass |
|
|
|
+| TC-0374 | FindOneByProductCodeCodeWithTx - 事务内不存在 | ✅ pass |
|
|
|
+| TC-0375 | FindOneByProductCodeName - 正常查询 | ✅ pass |
|
|
|
+| TC-0376 | FindOneByProductCodeName - 不存在 | ✅ pass |
|
|
|
+| TC-0377 | FindOneByProductCodeNameWithTx - 事务内正常查询 | ✅ pass |
|
|
|
+| TC-0378 | FindOneByProductCodeNameWithTx - 事务内不存在 | ✅ pass |
|
|
|
+| TC-0379 | FindOneByRoleIdPermId - 正常查询 | ✅ pass |
|
|
|
+| TC-0380 | FindOneByRoleIdPermId - 不存在 | ✅ pass |
|
|
|
+| TC-0381 | FindOneByRoleIdPermIdWithTx - 事务内正常查询 | ✅ pass |
|
|
|
+| TC-0382 | FindOneByRoleIdPermIdWithTx - 事务内不存在 | ✅ pass |
|
|
|
+| TC-0383 | FindOneByUserIdPermId - 正常查询 | ✅ pass |
|
|
|
+| TC-0384 | FindOneByUserIdPermId - 不存在 | ✅ pass |
|
|
|
+| TC-0385 | FindOneByUserIdPermIdWithTx - 事务内正常查询 | ✅ pass |
|
|
|
+| TC-0386 | FindOneByUserIdPermIdWithTx - 事务内不存在 | ✅ pass |
|
|
|
+| TC-0387 | FindOneByUserIdRoleId - 正常查询 | ✅ pass |
|
|
|
+| TC-0388 | FindOneByUserIdRoleId - 不存在 | ✅ pass |
|
|
|
+| TC-0389 | FindOneByUserIdRoleIdWithTx - 事务内正常查询 | ✅ pass |
|
|
|
+| TC-0390 | FindOneByUserIdRoleIdWithTx - 事务内不存在 | ✅ pass |
|
|
|
+| TC-0391 | FindOneByProductCodeUserId - 正常查询 | ✅ pass |
|
|
|
+| TC-0392 | FindOneByProductCodeUserId - 不存在 | ✅ pass |
|
|
|
+| TC-0393 | FindOneByProductCodeUserIdWithTx - 事务内正常查询 | ✅ pass |
|
|
|
+| TC-0394 | FindOneByProductCodeUserIdWithTx - 事务内不存在 | ✅ pass |
|
|
|
+
|
|
|
+#### 7.6 内部辅助方法
|
|
|
+
|
|
|
+| TC编号 | 测试场景 | 测试结果 |
|
|
|
+| :--- | :--- | :--- |
|
|
|
+| TC-0395 | findListByPrimaryKeys - 空ids | ✅ pass |
|
|
|
+| TC-0396 | findListByPrimaryKeys - 正常ids | ✅ pass |
|
|
|
+| TC-0397 | findListByPrimaryKeys - 部分不存在 | ✅ pass |
|
|
|
+| TC-0398 | findListByPrimaryKeys - DB异常 | ✅ pass |
|
|
|
+| TC-0399 | getPrimaryKeyValue - 正常 | ✅ pass |
|
|
|
+| TC-0400 | formatPrimary - 正常 | ✅ pass |
|
|
|
+| TC-0401 | queryPrimary - 正常 | ✅ pass |
|
|
|
+
|
|
|
+#### 7.7 缓存key与前缀初始化
|
|
|
+
|
|
|
+| TC编号 | 测试场景 | 测试结果 |
|
|
|
+| :--- | :--- | :--- |
|
|
|
+| TC-0402 | cachePrefix为空 | ✅ pass |
|
|
|
+| TC-0403 | cachePrefix非空 | ✅ pass |
|
|
|
+| TC-0404 | 多唯一索引前缀(SysProduct) | ✅ pass |
|
|
|
+
|
|
|
+### 八、Model 层自定义方法测试用例
|
|
|
+
|
|
|
+#### 8.1 SysUserModel
|
|
|
+
|
|
|
+| TC编号 | 测试场景 | 测试结果 |
|
|
|
+| :--- | :--- | :--- |
|
|
|
+| TC-0405 | FindListByPage - 正常分页 | ✅ pass |
|
|
|
+| TC-0406 | FindListByPage - 第二页 | ✅ pass |
|
|
|
+| TC-0407 | FindListByPage - 空表 | ✅ pass |
|
|
|
+| TC-0408 | FindListByPage - count查询失败 | ✅ pass |
|
|
|
+| TC-0409 | FindListByPage - list查询失败 | ✅ pass |
|
|
|
+| TC-0410 | FindListByProductMembers - 正常查询 | ✅ pass |
|
|
|
+| TC-0411 | FindListByProductMembers - productCode不存在 | ✅ pass |
|
|
|
+| TC-0412 | FindByIds - 正常批量查询 | ✅ pass |
|
|
|
+| TC-0413 | FindByIds - 空ids | ✅ pass |
|
|
|
+| TC-0414 | FindByIds - 部分id不存在 | ✅ pass |
|
|
|
+| TC-0415 | FindByIds - DB异常 | ✅ pass |
|
|
|
+| TC-0416 | FindIdsByDeptId - 有用户的部门 | ✅ pass |
|
|
|
+| TC-0417 | FindIdsByDeptId - 无用户部门 | ✅ pass |
|
|
|
+| TC-0418 | UpdateProfile 状态未变-不递增tokenVersion - statusChanged=false | ✅ pass |
|
|
|
+| TC-0419 | UpdateProfile 状态变更-tokenVersion+1 - statusChanged=true | ✅ pass |
|
|
|
+| TC-0420 | UpdateProfile 乐观锁冲突 - expectedUpdateTime 与DB不符 | ✅ pass |
|
|
|
+| TC-0421 | UpdateProfile 并发场景 - 两个 goroutine 基于同一 updateTime 并发更新 | ✅ pass |
|
|
|
+| TC-0422 | UpdateProfile userId不存在 - id=9999999 | ✅ pass |
|
|
|
+
|
|
|
+#### 8.2 SysProductModel
|
|
|
+
|
|
|
+| TC编号 | 测试场景 | 测试结果 |
|
|
|
+| :--- | :--- | :--- |
|
|
|
+| TC-0423 | FindList - 正常分页 | ✅ pass |
|
|
|
+| TC-0424 | FindList - 空表 | ✅ pass |
|
|
|
+| TC-0425 | FindList - count失败 | ✅ pass |
|
|
|
+
|
|
|
+#### 8.3 SysPermModel
|
|
|
+
|
|
|
+| TC编号 | 测试场景 | 测试结果 |
|
|
|
+| :--- | :--- | :--- |
|
|
|
+| TC-0426 | FindListByProductCode - 正常分页 | ✅ pass |
|
|
|
+| TC-0427 | FindListByProductCode - 不存在的productCode | ✅ pass |
|
|
|
+| TC-0428 | FindAllCodesByProductCode - 正常查询 | ✅ pass |
|
|
|
+| TC-0429 | FindAllCodesByProductCode - 空结果 | ✅ pass |
|
|
|
+| TC-0430 | FindByIds - 正常 | ✅ pass |
|
|
|
+| TC-0431 | FindByIds - 空ids | ✅ pass |
|
|
|
+| TC-0432 | FindMapByProductCode - 正常查询 | ✅ pass |
|
|
|
+| TC-0433 | FindMapByProductCode - 空结果 | ✅ pass |
|
|
|
+| TC-0434 | FindMapByProductCode - key唯一性 | ✅ pass |
|
|
|
+| TC-0435 | DisableNotInCodesWithTx - codes非空-正常 | ✅ pass |
|
|
|
+| TC-0436 | DisableNotInCodesWithTx - codes为空-全部禁用 | ✅ pass |
|
|
|
+| TC-0437 | DisableNotInCodesWithTx - 无需禁用 | ✅ pass |
|
|
|
+| TC-0438 | DisableNotInCodesWithTx - DB异常 | ✅ pass |
|
|
|
+| TC-0439 | FindAllCodesByProductCode - 有权限产品 | ✅ pass |
|
|
|
+| TC-0440 | FindAllCodesByProductCode - 无权限产品 | ✅ pass |
|
|
|
+| TC-0441 | FindAllCodesByProductCode - 全部已禁用 | ✅ pass |
|
|
|
+
|
|
|
+#### 8.4 SysDeptModel
|
|
|
+
|
|
|
+| TC编号 | 测试场景 | 测试结果 |
|
|
|
+| :--- | :--- | :--- |
|
|
|
+| TC-0442 | FindAll - 正常查询 | ✅ pass |
|
|
|
+| TC-0443 | FindAll - 空表 | ✅ pass |
|
|
|
+| TC-0444 | FindByParentId - 正常查询 | ✅ pass |
|
|
|
+| TC-0445 | FindByParentId - 无子部门 | ✅ pass |
|
|
|
+| TC-0446 | FindByPathPrefix - 正常查询 | ✅ pass |
|
|
|
+| TC-0447 | FindByPathPrefix - LIKE注入已阻止 | ✅ pass |
|
|
|
+| TC-0448 | FindByPathPrefix - 无匹配 | ✅ pass |
|
|
|
+
|
|
|
+#### 8.5 SysRoleModel
|
|
|
+
|
|
|
+| TC编号 | 测试场景 | 测试结果 |
|
|
|
+| :--- | :--- | :--- |
|
|
|
+| TC-0449 | FindListByProductCode - 正常分页 | ✅ pass |
|
|
|
+| TC-0450 | FindListByProductCode - 空结果 | ✅ pass |
|
|
|
+| TC-0451 | FindByIds - 正常 | ✅ pass |
|
|
|
+| TC-0452 | FindByIds - 空ids | ✅ pass |
|
|
|
+| TC-0453 | FindMinPermsLevelByUserIdAndProductCode - 有角色用户 | ✅ pass |
|
|
|
+| TC-0454 | FindMinPermsLevelByUserIdAndProductCode - 无角色用户 | ✅ pass |
|
|
|
+
|
|
|
+#### 8.6 SysRolePermModel
|
|
|
+
|
|
|
+| TC编号 | 测试场景 | 测试结果 |
|
|
|
+| :--- | :--- | :--- |
|
|
|
+| TC-0455 | FindPermIdsByRoleId - 正常查询 | ✅ pass |
|
|
|
+| TC-0456 | FindPermIdsByRoleId - 无绑定 | ✅ pass |
|
|
|
+| TC-0457 | FindPermIdsByRoleIds - 正常查询 | ✅ pass |
|
|
|
+| TC-0458 | FindPermIdsByRoleIds - 空roleIds | ✅ pass |
|
|
|
+| TC-0459 | FindPermIdsByRoleIds - 去重验证 | ✅ pass |
|
|
|
+| TC-0460 | DeleteByRoleIdTx - 正常事务内删除 | ✅ pass |
|
|
|
+| TC-0461 | DeleteByRoleIdTx - 无绑定 | ✅ pass |
|
|
|
+
|
|
|
+#### 8.7 SysUserPermModel
|
|
|
+
|
|
|
+| TC编号 | 测试场景 | 测试结果 |
|
|
|
+| :--- | :--- | :--- |
|
|
|
+| TC-0462 | FindPermIdsByUserIdAndEffectForProduct - ALLOW-指定产品 | ✅ pass |
|
|
|
+| TC-0463 | FindPermIdsByUserIdAndEffectForProduct - DENY-指定产品 | ✅ pass |
|
|
|
+| TC-0464 | FindPermIdsByUserIdAndEffectForProduct - 无记录/其他产品 | ✅ pass |
|
|
|
+| TC-0465 | DeleteByUserIdForProductTx - 事务内跨产品删除 | ✅ pass |
|
|
|
+| TC-0466 | DeleteByUserIdForProductTx - 跨产品隔离 | ✅ pass |
|
|
|
+
|
|
|
+#### 8.8 SysUserRoleModel
|
|
|
+
|
|
|
+| TC编号 | 测试场景 | 测试结果 |
|
|
|
+| :--- | :--- | :--- |
|
|
|
+| TC-0467 | FindRoleIdsByUserId - 正常查询 | ✅ pass |
|
|
|
+| TC-0468 | FindRoleIdsByUserId - 无绑定 | ✅ pass |
|
|
|
+| TC-0469 | DeleteByRoleIdTx - 正常删除 | ✅ pass |
|
|
|
+| TC-0470 | DeleteByUserIdForProductTx - 事务内跨产品删除 | ✅ pass |
|
|
|
+| TC-0471 | DeleteByUserIdForProductTx - 跨产品隔离 | ✅ pass |
|
|
|
+| TC-0472 | FindUserIdsByRoleId - 有绑定的角色 | ✅ pass |
|
|
|
+| TC-0473 | FindUserIdsByRoleId - 无绑定角色 | ✅ pass |
|
|
|
+| TC-0474 | FindRoleIdsByUserIdForProduct - 跨产品过滤 | ✅ pass |
|
|
|
+
|
|
|
+#### 8.9 SysProductMemberModel
|
|
|
+
|
|
|
+| TC编号 | 测试场景 | 测试结果 |
|
|
|
+| :--- | :--- | :--- |
|
|
|
+| TC-0475 | FindListByProductCode - 正常分页 | ✅ pass |
|
|
|
+| TC-0476 | FindListByProductCode - 空结果 | ✅ pass |
|
|
|
+| TC-0477 | FindMapByProductCodeUserIds - 正常批量 | ✅ pass |
|
|
|
+| TC-0478 | FindMapByProductCodeUserIds - 空userIds | ✅ pass |
|
|
|
+| TC-0479 | FindMapByProductCodeUserIds - 部分不是成员 | ✅ pass |
|
|
|
+| TC-0480 | FindMapByProductCodeUserIds - map key正确 | ✅ pass |
|
|
|
+
|
|
|
+### 九、访问控制 (auth/access.go)
|
|
|
+
|
|
|
+#### 9.1 RequireSuperAdmin
|
|
|
+
|
|
|
+| TC编号 | 测试场景 | 测试结果 |
|
|
|
+| :--- | :--- | :--- |
|
|
|
+| TC-0481 | 超管通过 | ✅ pass |
|
|
|
+| TC-0482 | 非超管拒绝 | ✅ pass |
|
|
|
+| TC-0483 | MEMBER拒绝 | ✅ pass |
|
|
|
+| TC-0484 | 未登录 | ✅ pass |
|
|
|
+
|
|
|
+#### 9.2 RequireProductAdminFor(ctx, targetProductCode)
|
|
|
+
|
|
|
+| TC编号 | 测试场景 | 测试结果 |
|
|
|
+| :--- | :--- | :--- |
|
|
|
+| TC-0485 | 超管通过 | ✅ pass |
|
|
|
+| TC-0486 | ADMIN通过(同产品) | ✅ pass |
|
|
|
+| TC-0487 | DEVELOPER拒绝 | ✅ pass |
|
|
|
+| TC-0488 | MEMBER拒绝 | ✅ pass |
|
|
|
+| TC-0489 | 未登录 | ✅ pass |
|
|
|
+| TC-0490 | ADMIN跨产品拒绝 | ✅ pass |
|
|
|
+
|
|
|
+#### 9.3 CheckMemberTypeAssignment
|
|
|
+
|
|
|
+| TC编号 | 测试场景 | 测试结果 |
|
|
|
+| :--- | :--- | :--- |
|
|
|
+| TC-0491 | 超管可分配任何类型 | ✅ pass |
|
|
|
+| TC-0492 | ADMIN分配DEVELOPER | ✅ pass |
|
|
|
+| TC-0493 | ADMIN分配ADMIN(同级拒绝) | ✅ pass |
|
|
|
+| TC-0494 | DEVELOPER分配ADMIN(越级拒绝) | ✅ pass |
|
|
|
+| TC-0495 | MEMBER分配MEMBER(同级拒绝) | ✅ pass |
|
|
|
+| TC-0496 | 未登录 | ✅ pass |
|
|
|
+
|
|
|
+#### 9.4 CheckManageAccess
|
|
|
+
|
|
|
+| TC编号 | 测试场景 | 测试结果 |
|
|
|
+| :--- | :--- | :--- |
|
|
|
+| TC-0497 | 超管可管理任何人 | ✅ pass |
|
|
|
+| TC-0498 | 操作自己 | ✅ pass |
|
|
|
+| TC-0499 | ADMIN跳过部门检查 | ✅ pass |
|
|
|
+| TC-0500 | 非ADMIN无部门拒绝 | ✅ pass |
|
|
|
+| TC-0501 | 目标用户无部门 | ✅ pass |
|
|
|
+| TC-0502 | 目标在不同部门 | ✅ pass |
|
|
|
+| TC-0503 | 未登录 | ✅ pass |
|
|
|
+| TC-0504 | caller.DeptPath为空时拒绝 | ✅ pass |
|
|
|
+
|
|
|
+#### 9.5 memberTypePriority
|
|
|
+
|
|
|
+| TC编号 | 测试场景 | 测试结果 |
|
|
|
+| :--- | :--- | :--- |
|
|
|
+| TC-0505 | 各类型优先级正确 | ✅ pass |
|
|
|
+
|
|
|
+### 十、UserDetailsLoader (loaders/userDetailsLoader.go)
|
|
|
+
|
|
|
+#### 10.1 Load / 缓存
|
|
|
+
|
|
|
+| TC编号 | 测试场景 | 测试结果 |
|
|
|
+| :--- | :--- | :--- |
|
|
|
+| TC-0506 | DB加载(缓存miss) | ✅ pass |
|
|
|
+| TC-0507 | 缓存命中 | ✅ pass |
|
|
|
+| TC-0508 | 用户不存在 | ✅ pass |
|
|
|
+| TC-0509 | productCode为空 | ✅ pass |
|
|
|
+
|
|
|
+#### 10.2 缓存失效
|
|
|
+
|
|
|
+| TC编号 | 测试场景 | 测试结果 |
|
|
|
+| :--- | :--- | :--- |
|
|
|
+| TC-0510 | Del删除指定缓存 | ✅ pass |
|
|
|
+| TC-0511 | Clean清除用户所有产品缓存 | ✅ pass |
|
|
|
+| TC-0512 | CleanByProduct清除产品所有用户 | ✅ pass |
|
|
|
+| TC-0513 | BatchDel批量删除 | ✅ pass |
|
|
|
+| TC-0514 | BatchDel空数组 | ✅ pass |
|
|
|
+
|
|
|
+#### 10.3 loadPerms权限计算
|
|
|
+
|
|
|
+| TC编号 | 测试场景 | 测试结果 |
|
|
|
+| :--- | :--- | :--- |
|
|
|
+| TC-0515 | 超管全量权限 | ✅ pass |
|
|
|
+| TC-0516 | ADMIN全量权限 | ✅ pass |
|
|
|
+| TC-0517 | DEVELOPER全量权限 | ✅ pass |
|
|
|
+| TC-0518 | DEV部门全量权限 | ✅ pass |
|
|
|
+| TC-0519 | MEMBER角色权限+ALLOW-DENY | ✅ pass |
|
|
|
+| TC-0520 | 用户ALLOW权限不跨产品泄漏 | ✅ pass |
|
|
|
+| TC-0521 | 禁用DEV部门成员无全量权限 | ✅ pass |
|
|
|
+
|
|
|
+#### 10.4 loadRoles + MinPermsLevel
|
|
|
+
|
|
|
+| TC编号 | 测试场景 | 测试结果 |
|
|
|
+| :--- | :--- | :--- |
|
|
|
+| TC-0522 | 多角色取最小permsLevel | ✅ pass |
|
|
|
+| TC-0523 | 无角色 | ✅ pass |
|
|
|
+| TC-0524 | 角色跨产品过滤 | ✅ pass |
|
|
|
+| TC-0525 | 禁用角色不计入 | ✅ pass |
|
|
|
+
|
|
|
+#### 10.5 loadMembership
|
|
|
+
|
|
|
+| TC编号 | 测试场景 | 测试结果 |
|
|
|
+| :--- | :--- | :--- |
|
|
|
+| TC-0526 | 超管自动设置SUPER_ADMIN | ✅ pass |
|
|
|
+| TC-0527 | 非成员MemberType为空 | ✅ pass |
|
|
|
+| TC-0528 | 禁用成员MemberType为空 | ✅ pass |
|
|
|
+
|
|
|
+### 十一、中间件 — 冻结账号拦截
|
|
|
+
|
|
|
+| TC编号 | 测试场景 | 测试结果 |
|
|
|
+| :--- | :--- | :--- |
|
|
|
+| TC-0529 | 冻结用户被403 | ✅ pass |
|
|
|
+| TC-0530 | 用户不存在(Status=0) | ✅ pass |
|
|
|
+| TC-0531 | UserDetails注入context | ✅ pass |
|
|
|
+
|
|
|
+### 十二、Logic层 — 访问控制负面测试
|
|
|
+
|
|
|
+| TC编号 | 测试场景 | 测试结果 |
|
|
|
+| :--- | :--- | :--- |
|
|
|
+| TC-0532 | createDept非超管拒绝 | ✅ pass |
|
|
|
+| TC-0533 | updateDept非超管拒绝 | ✅ pass |
|
|
|
+| TC-0534 | deleteDept非超管拒绝 | ✅ pass |
|
|
|
+| TC-0535 | createProduct非超管拒绝 | ✅ pass |
|
|
|
+| TC-0536 | updateProduct非超管拒绝 | ✅ pass |
|
|
|
+| TC-0537 | createUser非产品管理员拒绝 | ✅ pass |
|
|
|
+| TC-0538 | createRole非产品管理员拒绝 | ✅ pass |
|
|
|
+| TC-0539 | updateRole非产品管理员拒绝 | ✅ pass |
|
|
|
+| TC-0540 | deleteRole非产品管理员拒绝 | ✅ pass |
|
|
|
+| TC-0541 | bindRolePerms非产品管理员拒绝 | ✅ pass |
|
|
|
+| TC-0542 | updateUser-MEMBER不能管理他人 | ✅ pass |
|
|
|
+| TC-0543 | updateUser自己修改DeptId被拒绝 | ✅ pass |
|
|
|
+| TC-0544 | updateUser自己修改Status被拒绝 | ✅ pass |
|
|
|
+| TC-0545 | updateUser未登录被拒绝 | ✅ pass |
|
|
|
+
|
|
|
+### 十三、限流中间件 (middleware/ratelimitMiddleware.go)
|
|
|
+
|
|
|
+| TC编号 | 测试场景 | 测试结果 |
|
|
|
+| :--- | :--- | :--- |
|
|
|
+| TC-0546 | 正常请求(未超限) | ✅ pass |
|
|
|
+| TC-0547 | 超限请求被拒绝 | ✅ pass |
|
|
|
+| TC-0548 | behindProxy=false时XFF被忽略 | ✅ pass |
|
|
|
+| TC-0549 | behindProxy=false时X-Real-IP被忽略 | ✅ pass |
|
|
|
+| TC-0550 | IP从RemoteAddr解析 | ✅ pass |
|
|
|
+| TC-0551 | 不同IP独立限流 | ✅ pass |
|
|
|
+| TC-0552 | behindProxy=true时信任X-Real-IP | ✅ pass |
|
|
|
+| TC-0553 | behindProxy=true时无X-Real-IP回退RemoteAddr | ✅ pass |
|
|
|
+| TC-0554 | behindProxy=true时XFF仍被忽略 | ✅ pass |
|
|
|
+| TC-0555 | RemoteAddr无端口格式 | ✅ pass |
|
|
|
|
|
|
---
|
|
|
+
|
|
|
+## 三、测试结论
|
|
|
+
|
|
|
+- 全量 555 个 TC 执行通过, 未发现 BUG.
|
|
|
+- 共 714 个顶层 Test 函数 + 87 个子用例 = 801 次测试执行事件, 通过 800, 跳过 1, 失败 0.
|
|
|
+- 整体语句覆盖率 69.8% (`./internal/...`); 核心业务包覆盖率均 ≥ 73.8%.
|
|
|
+- 唯一跳过用例 TC-0263 为防御性不可达分支(`claims` 类型断言失败), 运行时无法触达, 已标记 `t.Skip`.
|