status: done created: 2026-07-26
/apply 后先运行 Auth Starter 现有测试,记录初始基线。| 项目 | 值 |
|---|---|
| JUnit 版本 | JUnit Jupiter 5,由当前 Spring Boot 3.5.13 BOM 管理 |
| Mock 框架 | Mockito + AssertJ |
| 测试数量 | Auth Starter 实施前 2 个测试类/7 条,阶段末 4 个测试类/20 条 |
| 已有测试风格 | 直接构造被测对象、Mockito mock、AssertJ 断言,不启动 Spring Context |
CaptchaServiceImpl| 方法 | 场景 | 输入 | Mock 行为 | 预期结果 |
|---|---|---|---|---|
generateGraphicCaptcha |
默认配置 | devEchoCode=false |
缓存正常 | code=null,图片和 key 正常 |
generateGraphicCaptcha |
开发回显 | dev/local + true |
缓存正常 | 返回实际验证码 |
generateGraphicCaptcha |
生产误配 | prod + true |
缓存正常 | 仍为 code=null |
sendSmsCaptcha |
无真实 Sender | prod |
Sender 列表为空 | status=fail,不保留验证码和 interval |
sendSmsCaptcha |
Sender 成功 | prod |
返回 true | 缓存验证码和 interval,响应不含 code |
sendSmsCaptcha |
Sender 失败 | prod |
返回 false | 删除验证码,不创建 interval,返回 fail |
sendSmsCaptcha |
Sender 异常 | prod |
抛异常 | 脱敏日志,删除验证码,返回 fail |
sendSmsCaptcha |
开发模拟 | dev + true |
不调用 Sender | 缓存并回显验证码,返回 success |
validateAndDeleteSmsCaptcha |
正确验证码 | 缓存匹配 | 返回缓存值 | 返回 true 并删除短信 key |
validateAndDeleteSmsCaptcha |
错误验证码 | 缓存不匹配 | 返回缓存值 | 返回 false 且不删除正确答案 |
CaptchaResponseSerializationTest| 场景 | 输入 | 预期结果 |
|---|---|---|
| 图形 code 为 null | CaptchaResult |
JSON 不含 code 属性 |
| 短信 code 为 null | SmsCaptchaResult |
JSON 不含 code 属性 |
| 开发 code 非空 | 两个 DTO | JSON 正常包含 code |
MessageSmsCaptchaSender| 场景 | Mock 行为 | 预期结果 |
|---|---|---|
| MessageClient 成功 | SendResult.ok |
SMS 渠道、单手机号、验证码参数和有效期正确,返回 true |
| MessageClient 失败 | SendResult.fail |
返回 false,不抛供应商错误 |
| MessageClient 异常 | 抛 RuntimeException | 返回 false,日志手机号脱敏且不含验证码 |
UserLoadServiceImpl| 方法 | 场景 | 预期结果 |
|---|---|---|
validatePhoneCode |
手机号登录 | 精确调用 validateAndDeleteSmsCaptcha(phone, code) |
application.yml 默认 FORGE_CAPTCHA_DEV_ECHO_CODE=false。forge-admin-ui 不读取或记录响应 data.code。ICacheService 合同,本阶段未改变并发模型。git diff --check。| 时间 | 范围 | 命令 | 结果 | 备注 |
|---|---|---|---|---|
| 2026-07-26 | Proposal 文档 | 未执行代码测试 | 待 /apply |
HARD-GATE 前未修改生产代码 |
| 2026-07-26 15:34 CST | Auth Starter 实施前基线 | mvn -Penable-tests -pl forge-framework/forge-starter-parent/forge-starter-auth -am test |
通过 | Auth 7 条、上游 Outbound 48 条、Flow Client 11 条,均 0 失败/错误/跳过 |
| 时间 | 变更范围 | 必跑项 | 实际命令 | 结果 | 跳过/警告 |
|---|---|---|---|---|---|
| 2026-07-26 | Task 1-4 | Auth/System 测试、Admin package、UI build、静态扫描 | 完整命令和证据见 execution-log.md |
完成,相关模块测试、聚合 package、UI build 和静态扫描已执行 | 真实短信 E2E 依赖外部配置;聚合 test 受既有 datascope 配置阻断 |
| 2026-07-26 15:50 CST | Task 3 | System 目标测试与模块完整测试 | mvn -Penable-tests -pl forge-framework/forge-plugin-parent/forge-plugin-system test |
通过,4 条测试均 0 失败/错误/跳过 | Reactor -am Red 命令被既有 datascope Surefire 配置截断;真实短信 E2E 跳过 |
| 2026-07-26 15:56 CST | Task 4 | Admin 配置、登录页、阶段收尾 | Auth + System Reactor test、Admin package、Node 20.19.0 UI build、YAML 解析、精确敏感扫描、diff check | 相关模块测试、43 模块 package、8725 模块 UI build 和静态检查通过 | Reactor test 被既有 datascope 配置阻断;真实短信 E2E 跳过;既有 Vite 警告不阻断 |
execution-log.md:实施时逐 Task 追加完整命令和关键输出。GET /auth/captcha、POST /auth/captcha/sms、手机号验证码登录。