docs: 归档任务 #52

This commit is contained in:
chengma
2026-08-09 13:57:17 +08:00
parent 9959fac31a
commit 0181170457
@@ -0,0 +1,76 @@
# 52 Admin:验证网页登录不影响 Client 四接口
- 类型:需求
- 父级大工单:#14
- 所属 MVP / 版本:#15 / MVP
- 状态:已完成
- 日期:2026-08-09
- Gitea 工单:<http://ilaer.eicp.net:8418/chengma/cmautobuy/issues/52>
## 背景与目标
#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)