# 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)