Files
wecom_it_smart_desk/docs/E2E-CHECKLIST-v0.7.0.md
T
Simon e96fbb2475 docs: v0.7.0 E2E 验收清单(扫码+MFA+P0 回归+回滚预案)
35 项验收项,7 大类:
1. 扫码登录(6 项)
2. MFA 绑定(3 项)
3. MFA 验证(高危守卫,8 项)
4. P0/P1 合规(4 项)
5. 端到端业务流(3 项)
6. 性能稳定性(4 项)
7. 回滚预案

每项给预期结果 + 验证方法 + 失败处理。
部署完 v0.7.0 后逐项打勾,任何一项  立即回滚。

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-21 03:12:33 +08:00

177 lines
5.4 KiB
Markdown

# E2E 验收清单 v0.7.0(扫码登录 + MFA)
> 部署完 v0.7.0 后,**逐项打勾**。任何一项 ❌ 立即回滚。
> 每项给出预期结果 + 验证方法 + 失败处理。
---
## 0. 部署完成(用户跑过 DEPLOY-LOGIN-MIGRATION-v0.7.0.md 全部步骤)
- [ ] 后端 `alembic upgrade head` 跑通(head = `025_messages_id_uuid`)
- [ ] 4 端 dist 已上传到宿主机 `/opt/wecom-it-desk/frontend-*/dist/`
- [ ] nginx `nginx -t` 通过 + `nginx -s reload` 完成
- [ ] `docker restart wecom_it_backend` 成功
- [ ] 容器状态 `docker ps` 显示 backend/redis/postgres 全部 Up
---
## 1. 扫码登录(Phase 1.1 / 1.2 / 1.3)
### 1.1 门户页面加载
- [ ] 浏览器打开 `https://<生产域名>/itportal/`
- [ ] 看到 QrcodeLogin 页面(二维码 + 倒计时)
- [ ] 不再显示旧的"账号密码"登录
### 1.2 二维码生成
- [ ] 倒计时从 120 秒开始
- [ ] 刷新按钮可用
- [ ] DevTools Network: `POST /api/auth_qrcode/create` 返回 200 + ticket
### 1.3 扫码
- [ ] 用企微扫 → 企微 OAuth2 跳回 callback
- [ ] 门户页面状态从 `waiting``scanned`(显示"已扫码,等待确认")
- [ ] DevTools Network: `POST /api/auth_qrcode/scan` 成功
### 1.4 坐席确认
- [ ] 已登录坐席在 `/itagent/` 收到确认弹窗
- [ ] 点"确认"→ 门户 `waiting``confirmed` → 跳转 `/itagent/`
- [ ] localStorage 有 `agent_token` / `portal_token`
### 1.5 角色分发
- [ ] 双角色坐席(admin+agent)→ 跳 `/itportal/select`
- [ ] 仅 admin → 跳 `/itadmin/`
- [ ] 仅 agent → 跳 `/itagent/`
- [ ] 仅 user → 跳 `/itdesk/`
### 1.6 过期处理
- [ ] 120 秒不扫 → 状态变 `expired` + 提示"二维码已过期,请刷新"
---
## 2. MFA 绑定(Phase 2.4)
### 2.1 绑定入口
- [ ] 坐席登录后 → 顶栏头像 → "绑定 MFA"
- [ ]`/itagent/mfa-bind` 页面
### 2.2 扫码绑定
- [ ] 看到 TOTP 二维码(otpauth://totp/...)
- [ ] 用 Google Authenticator / 微软 Authenticator 扫
- [ ] 输入 6 位 OTP → 点"验证" → 成功
- [ ] 页面显示"已绑定" + 备份信息
### 2.3 API 验证
- [ ] `GET /api/mfa/status` 返回 `bound: true, enabled: true`
- [ ] `GET /api/mfa/users` (admin) 看到该坐席 bound=true
---
## 3. MFA 验证(高危操作守卫)
### 3.1 30 分钟有效期
- [ ] 坐席 admin 角色登录 → 绑 MFA → 调 `/api/admin/high-risk/demo/role_change`
- [ ] **未先调 /api/mfa/verify** → 返回 `2001 需要 OTP`
- [ ]`POST /api/mfa/verify {otp_code: "123456"}` → 成功
- [ ] **再调** 高危端点 → 200 通过
- [ ] 等 31 分钟 → 再次调 → 又返回 2001(TTL 失效)
### 3.2 5 类高危操作
- [ ] `POST /api/admin/high-risk/demo/role_change` → 200
- [ ] `POST /api/admin/high-risk/demo/config_change` → 200
- [ ] `POST /api/admin/high-risk/demo/data_export` → 200
- [ ] `POST /api/admin/high-risk/demo/account_disable` → 200
- [ ] `POST /api/admin/high-risk/demo/account_create_reset` → 200
### 3.3 角色拒绝
- [ ] 非 admin 角色调高危端点 → 4003 仅管理员
### 3.4 白名单查询
- [ ] `GET /api/admin/high-risk/whitelist` 返回 5 类元数据
---
## 4. P0/P1 合规验证
### 4.1 WebSocket 连接
- [ ] H5 员工端开 DevTools → Network → WS
- [ ] WS 连接建立,**没有 1006 / missing argument 错误**
- [ ] 坐席发消息 → H5 端 100ms 内收到(无轮询 3-5s 延迟)
### 4.2 消息 ID 类型
- [ ] `psql -d wecom_it -c 'SELECT id FROM messages LIMIT 1;'` 返回 UUID 格式
- [ ] 前端消息轮询不再偶发 500
- [ ] 跨会话消息不再串号
### 4.3 nginx access_log
- [ ] `docker exec wecom_it_nginx tail /var/log/nginx/access.log | head -3`
- [ ] 不包含 `Authorization:` / `Cookie:` 字样
- [ ] 只剩 IP / method / path / status
### 4.4 Gitea token
- [ ] `cat .git/config | grep 5ad83d` 返回空(token 已撤销)
- [ ] `git push` 试一下:**应该失败**(无 push 权限,符合预期)
---
## 5. 端到端业务流(回归)
### 5.1 H5 → 坐席 完整流程
- [ ] H5 员工发起会话 → 排队
- [ ] 坐席收到分配 → WS 推送
- [ ] 坐席发消息 → 员工 < 100ms 收到
- [ ] 转人工、邀请、满意度流程无 regression
### 5.2 管理员后台
- [ ] 仪表盘加载正常
- [ ] 坐席管理 CRUD 正常
- [ ] 功能开关可切换
- [ ] 集成配置 6 个系统显示完整
- [ ] MFA 管理页 `/mfa-manage` 表格可搜索/过滤/分页
- [ ] 重置 MFA 按钮可弹 ElMessageBox 二次确认
### 5.3 端点路径(临时 4 xfail)
- [ ] `POST /api/conversations/{id}/messages` **仍 404** — pre-existing,不影响生产
- [ ] 实际走 H5 的 `/api/h5/conversations/current/messages` 路径
---
## 6. 性能与稳定性
- [ ] 长时间压测(可选): `wrk -t4 -c100 -d60s https://<域>/api/auth_qrcode/create`
- [ ] 无 5xx 错误
- [ ] Redis 连接稳定(无 timeout)
- [ ] PG CPU < 50%
---
## 7. 回滚预案
如果任意 ❌ 项:
```bash
# 1. 停止后端
sudo docker stop wecom_it_backend
# 2. 恢复 4 端 dist
sudo cp -r /opt/wecom-it-desk/dist-backup-*/* /opt/wecom-it-desk/frontend-*/dist/
# 3. 回滚 alembic(只回 025,022/023 保留)
sudo docker start wecom_it_backend
sudo docker exec wecom_it_backend alembic downgrade 024
# 4. nginx 回滚
sudo docker exec wecom_it_nginx nginx -s reload
```
详见 `DEPLOY-LOGIN-MIGRATION-v0.7.0.md` 末尾"回滚预案"。
---
## ✅ 验收人签字
| 角色 | 姓名 | 日期 | 结果 |
|---|---|---|---|
| 部署 | | | |
| 验收 | | | |
| 复核 | | | |