diff --git a/docs/task/52-admin-client接口网页登录隔离回归.md b/docs/task/52-admin-client接口网页登录隔离回归.md new file mode 100644 index 0000000..300e0ad --- /dev/null +++ b/docs/task/52-admin-client接口网页登录隔离回归.md @@ -0,0 +1,76 @@ +# 52 Admin:验证网页登录不影响 Client 四接口 + +- 类型:需求 +- 父级大工单:#14 +- 所属 MVP / 版本:#15 / MVP +- 状态:已完成 +- 日期:2026-08-09 +- Gitea 工单: + +## 背景与目标 + +#50 和 #51 为 Admin 网页增加了初始化、登录和角色权限,路由装配发生了变化。 +本任务以独立回归证明 Client 的登记、领取、成功提交和失败提交仍是原 JSON 契约, +不会被网页登录重定向、HTML 错误页、Web Session 或 CSRF 校验影响。 + +## 最终方案 + +- 新增完整 Gin 路由集成测试,分别在“Admin 未初始化”“已有管理员但 Web 未登录” + 和“管理员 Web 已登录”三种状态下调用 Client 四接口。 +- 每种状态都实际执行显式登记、领取两个任务、提交一个成功结果、提交一个失败结果, + 再次领取验证空队列仍返回无响应体的 `204 No Content`。 +- 所有 Client 请求故意携带无效 Web CSRF Cookie;已登录场景还携带有效 Web Session。 + 测试统一拒绝 3xx、登录 HTML、CSRF 错误和非 JSON 的非 204 响应。 +- 在 HTTP 层单独复核:任务取消后原 Client 的成功结果仍接受;任务重派后原 Client + 的失败结果仍接受;相同幂等键和内容返回完全相同响应;同键不同内容返回 JSON + `409 IDEMPOTENCY_CONFLICT`;从未领取返回 JSON `403 TASK_NOT_ASSIGNED`。 +- 在迁移测试中显式构造 v1、v2、v3、v4、v5 起点,逐一升级到 v6 并执行完整 + schema 自检;原有 v2 两种真实历史结构收敛测试继续保留。 +- 继续运行既有服务层全量测试,复用登记幂等、领取原子性、成功/失败映射、取消、 + 重派、多 Client 结果和幂等冲突等既有契约用例。 + +测试没有发现路由隔离缺陷,因此没有修改生产代码、Client 契约、请求头、字段、 +状态码、幂等规则或任务业务规则,也没有增加 API Key。 + +## 改了哪些 + +- `admin/client_api_auth_regression_test.go`:三种 Web 状态下的 Client 四接口完整 HTTP + 回归,以及取消、重派、幂等和错误映射测试。 +- `admin/repository/migrate_test.go`:v1–v5 到 v6 的显式迁移矩阵。 + +## 验收结果 + +| 验收标准 | 结果 | +|---|---| +| 四个 Client API 在无 Web Session 时保持原状态码和 JSON/204 | 通过 | +| Client API 不返回 3xx、登录页面或 Web CSRF 错误 | 通过 | +| 登记、领取、成功结果、失败结果和幂等契约 | 通过 | +| 取消后提交继续接受 | 通过 | +| 重派后原 Client 提交继续接受 | 通过 | +| 从未领取仍返回稳定 JSON 403 | 通过 | +| Web 未登录、管理员和采购员页面权限 | 通过(#50、#51 集成测试) | +| v1–v5 及两种 v2 历史结构均可迁移到 v6 | 通过 | +| 未改变 Client 请求及任务业务契约 | 通过(仅修改测试文件) | +| Go 1.23.0 全量 vet、构建和测试 | 通过 | +| 未调用真实 Client、Android 设备或采购下单 | 通过 | + +## 测试 + +- 执行的命令: + + ```powershell + cd D:\chengma\cmautobuy\admin + gofmt -l . + go vet ./... + go build ./... + go test ./... -count=1 + go version + ``` + +- 结果:全部通过;`gofmt -l .` 无输出;Go 为 `go1.23.0 windows/amd64`。 +- **没验证到的部分**:按工单要求没有调用真实 Client、Android 设备或采购下单; + 网络边界由真实 Gin 路由和 `httptest` 请求覆盖,未占用真实监听端口。 + +## 相关提交 + +- `9959fac` test: 验证网页登录不影响 Client 四接口 (#52)