Commit c9cbceaa4c8478cb2b4a973960419f7c9b236dc4

Authored by zichun
1 parent 78ddc80a

docs(verify:REQ-USR-001): 证据验证

docs/superpowers/reviews/2026-06-01-REQ-USR-001-verify.md 0 → 100644
  1 +# REQ-USR-001 增加用户 — 功能测试证据(verify, round 0)
  2 +
  3 +> 阶段:后端(backend)。本证据由 verify 子代理通过 Bash 后台分离子进程(`run_in_background`)派发测试执行后,按结构化结果渲染。**主会话从不内联跑测试,也不自由编写证据。**
  4 +> 上游 spec:`docs/superpowers/specs/2026-06-01-REQ-USR-001.md`
  5 +> 被测提交:`78ddc80`(HEAD)`test(usr): 新增用户端到端验收回归 REQ-USR-001`
  6 +> 验证时间:2026-06-01 13:40 CST
  7 +> 运行环境:JDK 17(`openjdk version "17.0.19"`,JAVA_HOME 固定 `/opt/homebrew/Cellar/openjdk@17/17.0.19/...`;系统默认 JDK 25,按项目目标降级至 17);Maven `/opt/homebrew/bin/mvn`;数据库 `xlyweberp_vibe_erp_test`,Flyway 已 apply 至 V1("Schema is up to date")。
  8 +
  9 +---
  10 +
  11 +## 1. 总判定
  12 +
  13 +**GREEN — 全部通过。** `exit_code = 0`,`failed = 0`,`failed_list = 空`。
  14 +
  15 +| 指标 | 值 |
  16 +|---|---|
  17 +| 测试类总数 | 9 |
  18 +| 测试用例总数 | 24 |
  19 +| 通过 | 24 |
  20 +| 失败(failures) | 0 |
  21 +| 错误(errors) | 0 |
  22 +| 跳过(skipped) | 0 |
  23 +| 失败清单 | 无 |
  24 +
  25 +> 24 = 19(Surefire 单元 / 集成 `*Test`)+ 5(`UsrUserCreateIT` 端到端验收回归),与上游 TDD 摘要一致。
  26 +
  27 +---
  28 +
  29 +## 2. 派发命令与结构化结果
  30 +
  31 +测试经独立后台分离子进程执行(独立于主会话推理循环),主会话仅消费结构化结果(`command / exit_code / passed / failed / failed_list`)。`pom.xml` 未配置 Failsafe 插件,Surefire 默认包含模式(`*Test` / `Test*` / `*Tests`)不匹配 `*IT` 后缀,故 `*IT` 端到端用例由第二条命令以 `-Dtest` 显式驱动执行,以覆盖 AC1/2/4/5/7。
  32 +
  33 +### 命令 1 — 锁定单元闸(docs/04 § 零 `unit`)
  34 +
  35 +```json
  36 +{
  37 + "command": "mvn -q -B test",
  38 + "exit_code": 0,
  39 + "passed": 19,
  40 + "failed": 0,
  41 + "skipped": 0,
  42 + "failed_list": ""
  43 +}
  44 +```
  45 +
  46 +### 命令 2 — 端到端验收回归(@SpringBootTest)
  47 +
  48 +```json
  49 +{
  50 + "command": "mvn -q -B test -Dtest=UsrUserCreateIT -DfailIfNoTests=false",
  51 + "exit_code": 0,
  52 + "passed": 5,
  53 + "failed": 0,
  54 + "skipped": 0,
  55 + "report_present": true
  56 +}
  57 +```
  58 +
  59 +---
  60 +
  61 +## 3. 逐类明细(Surefire 报告解析)
  62 +
  63 +| 测试类 | 用例 | 失败 | 错误 | 跳过 | 耗时(s) | 覆盖 plan 任务 |
  64 +|---|---|---|---|---|---|---|
  65 +| `com.xly.erp.ErpApplicationTests` | 1 | 0 | 0 | 0 | 2.553 | T1 contextLoads(Flyway apply V1) |
  66 +| `com.xly.erp.common.response.ResultTest` | 2 | 0 | 0 | 0 | 0.021 | T2 Result/ResultCode |
  67 +| `com.xly.erp.common.exception.GlobalExceptionHandlerTest` | 1 | 0 | 0 | 0 | 0.000 | T2 全局异常处理 |
  68 +| `com.xly.erp.common.security.JwtUtilTest` | 1 | 0 | 0 | 0 | 0.086 | T3 JWT 工具 |
  69 +| `com.xly.erp.common.config.SecurityConfigTest` | 1 | 0 | 0 | 0 | 0.187 | T3 Security/BCrypt/无状态 |
  70 +| `com.xly.erp.modules.usr.dto.CreateUserDTOValidationTest` | 3 | 0 | 0 | 0 | 0.019 | T4 Bean Validation |
  71 +| `com.xly.erp.modules.usr.service.UsrUserServiceImplTest` | 7 | 0 | 0 | 0 | 0.135 | T5+T6 查重/哈希/审计/关联校验/批量授权 |
  72 +| `com.xly.erp.modules.usr.controller.UsrUserControllerTest` | 3 | 0 | 0 | 0 | 0.222 | T7 Controller 管理员前置/@Valid |
  73 +| `com.xly.erp.modules.usr.UsrUserCreateIT` | 5 | 0 | 0 | 0 | 4.622 | T8 端到端 AC1/2/4/5/7 |
  74 +| **合计** | **24** | **0** | **0** | **0** | — | T1–T8 |
  75 +
  76 +---
  77 +
  78 +## 4. 验收标准(AC)覆盖核对
  79 +
  80 +| AC | 描述 | 覆盖测试 | 状态 |
  81 +|---|---|---|---|
  82 +| AC1 | 正常新增:`code=0`、`data.id` 正整数、BCrypt 哈希落库、`iIsVoid=0`、审计字段已填 | `UsrUserCreateIT` + `UsrUserServiceImplTest` | 通过 |
  83 +| AC2 | 重复用户名 → `40901`,事务回滚无新增 | `UsrUserCreateIT` + `UsrUserServiceImplTest`(并发 DuplicateKey 兜底) | 通过 |
  84 +| AC3 | 参数非法 → `40001`,无副作用 | `CreateUserDTOValidationTest` + `UsrUserControllerTest` | 通过 |
  85 +| AC4 | 权限组授权批量插入 + 去重 | `UsrUserCreateIT` + `UsrUserServiceImplTest` | 通过 |
  86 +| AC5 | 越权访问 → `40301` / 401,不创建记录 | `UsrUserCreateIT` + `UsrUserControllerTest` | 通过 |
  87 +| AC6 | 默认密码 `666666` 哈希入库 | `UsrUserServiceImplTest` | 通过 |
  88 +| AC7 | 响应不含密码(仅 `data.id`) | `UsrUserCreateIT`(`sPassword @JsonIgnore`) | 通过 |
  89 +
  90 +---
  91 +
  92 +## 5. 结论
  93 +
  94 +`exit_code = 0`,`failed = 0`,24/24 用例全绿,无失败、无错误、无跳过;AC1–AC7 均有测试覆盖且通过。工作树在被测提交 `78ddc80` 处干净,未触碰 `frontend/`。**判定 GREEN,可进入 review。**
... ...