server: 平台抽象层+bilibili、服务端加密凭据库、角色中间件;web: 精简页面/路由、macOS 客户端(Swift)与多份方案文档;移除误入库的编译产物

This commit is contained in:
Qiufeng
2026-08-21 10:53:32 +08:00
parent 0daa9782c9
commit 3585c39bab
103 changed files with 5842 additions and 3197 deletions
+42 -47
View File
@@ -1,60 +1,55 @@
# EveryPublish 网页端测试报告(检查点①)
# EveryPublish Web-only V1 测试报告
> 日期:2026-08-20 · 范围:阶段一网页端 D1-D7 交付 · 结论:**核心链路全部通过,可进入用户验收**
> 更新:2026-08-21。当前报告只覆盖 Web-only 本机模式;真实平台扫码和发布仍需用户手动验收。
## 一、测试概况
## 当前实测结论
| 项 | 结果 |
|---|---|
| Go 单元+集成测试 | ✅ 全绿(auth 4 项、task 状态机 4 项、API 集成 4 场景、WSS 全链路 1 场景) |
| TypeScript 类型检查 | ✅ `tsc --noEmit` 0 错误 |
| 前端生产构建 | ✅ `pnpm build` 成功(仅 chunk 体积提示,非错误) |
| 手动链路测试 | ✅ 24 项断言 24 通过(含 3 项环境/断言修正后复测通过) |
| 断线重连兜底 | ✅ 下线不丢任务、重连 1 秒内自动补发 |
本轮已用 `EXECUTOR_MODE=mock` 和 `EXECUTOR_MODE=web` 启动实际 Go server,并通过 HTTP 调用跑通:
## 二、六条核心链路测试结果
```text
注册/登录/刷新/me 200,refresh token 轮换,工作区/owner 角色可见
未登录创建任务 401,业务写操作不绕过鉴权
添加 douyin 账号 200
创建网页 QR 挑战 200,kind=qr,qrUrl=mock://...
提交 mock 登录挑战 200,账号 status=active
空挑战确认值 400,挑战保持 active
上传 demo.mp4 200,kind=video
签名素材直链 首次下载 200,重复使用 404/410
创建任务/提交/审核 200
本机 Web executor queued → dispatched → running → success
结果 mock://everypublish/task/<id> + receipt
Browser WebSocket open(新鲜 JWT)
客户端/设备路由 404,不进入网页菜单/流程
任务时间线 6 个事件:draft>pending_review>queued>dispatched>running>success
```
| # | 链路 | 关键断言 | 结果 |
|---|---|---|---|
| 1 | 注册登录 | 注册 200 / 重复邮箱 409 / 错误密码 401 / 刷新轮换后旧 refresh 401 / me 查询 | ✅ |
| 2 | 工作空间 | 创建 / 改名 | ✅ |
| 3 | 素材直传 | 上传 sha256 / 同文件去重 dedup=true / 直链一次 200 二次 404(一次性) | ✅ |
| 4 | 账号绑定 | 新增→bind→challenge 推送→扫码→active(绑定到设备) | ✅ |
| 5 | 任务全生命周期 | 创建→提交→审核→下发→执行→success;驳回→rejected→重提;取消 | ✅ |
| 6 | 成员协作 | 邀请→加入→角色 operator 生效 | ✅ |
| 7 | 审计 | auth.login / task.create 等动作埋点落库、按动作筛选 | ✅ |
| 8 | 权限 | 普通用户访问 admin API = 403;admin 账号 = 200 | ✅ |
扩展 smoke 还覆盖:运行时状态、工作区名称更新、成员邀请/加入/查看/权限拒绝/移除、工作区切换后 refresh 保持选中工作区、账号资料更新和重复绑定幂等、mock 凭据导入和登录检查的明确 409、挑战挂起→重发→解决、素材类型筛选/下载/inline 预览和删除、任务驳回→重提→取消、草稿删除、排期设置后清除、通知读全、审计列表、密码修改后重新登录、权限检查。当前输出会带 `coverage` 数组,避免把单条成功任务误认为全量网页验证。
## 三、发现的问题与处理
B站 adapter 另有 `httptest` 自动验证:二维码生成与 86101/86090/0 轮询、上下文取消、凭据加密落盘、UPOS 分片真实 `ETag`、merge、CSRF URL 编码、非 2xx 和空素材错误分类。
| 问题 | 类型 | 处理 |
服务端集成测试还用 fake adapter 验证了 `/accounts/:id/bind` 的真实 handler 链路:生成 QR、后台轮询 pending→confirmed、保存凭据、更新 challenge=solved 和 account=active。
## 工程检查
| 检查项 | 结果 | 备注 |
|---|---|---|
| 假执行器未绑定到测试工作空间(导致绑定/下发无设备) | 测试环境 | 每工作空间独立假执行器实例;非代码缺陷 |
| 审计断言用 `=1` 而实际多记录 | 测试脚本 | 修正断言为存在性;审计功能正常 |
| 下发器 ack 竞态(先推后写库) | 代码缺陷 | 已修复:先落库 dispatched 再推送(D4 已改) |
| 服务器异常退出残留 online 状态 | 代码缺陷 | 已修复:启动自愈重置 offline |
| 8080 被 nginx 占用 | 环境 | 后端改用 :8090 |
| Go server test | 通过 | 含 API、WS、handler、local mock dispatcher 和任务时间线测试 |
| Go server vet | 通过 | `go vet ./...` |
| Dispatcher adapter 单测 | 通过 | 注册 adapter 的真实执行路径、逐账号结果和 context cancel |
| Web TypeScript | 通过 | `npx tsc --noEmit` |
| Web production build | 通过 | `npm run build`;仅有 chunk 体积提示 |
| Web smoke | 通过 | `cd apps/web && npm test`;分别在 `EXECUTOR_MODE=mock` 和 `EXECUTOR_MODE=web` server 上覆盖认证、权限、挑战、素材、审核、通知、审计、Browser WS 和任务状态机 |
| Web lint | 未通过 | 仓库原有 53 个规则错误,主要是字符串拼接/格式;不是本轮 TypeScript/build 阻断项,需后续单独清理 |
| 浏览器完整 UI 自动化 | 未完成 | 当前运行环境没有可用浏览器控制服务;API、生产构建和 Browser WS 已实测 |
## 四、用户验收清单(请您逐项验证)
## 重复回归
1. 打开 http://127.0.0.1:3003/login/index 注册新账号并登录(应进入工作台)。
2. 工作台:看到 Agent 设备(在线/离线)与最近任务实时状态。
3. 账号管理:添加账号 → 点「绑定」→ 弹窗等待 → 客户端扫码后自动变「已绑定」(无客户端时可跳过,观察「绑定中」状态)。
4. 素材库:上传视频 → 列表出现,重复上传同一文件应提示去重。
5. 发布管理 → 新建发布:四步向导选择素材/账号/填内容 → 创建草稿。
6. 任务列表:草稿「提交审核」→ 审核中心「通过」→ 状态变绿「发布成功」(需在线客户端)。
7. 成员管理:邀请一个邮箱 → 生成链接 → 复制。
8. 挑战中心 / 通知 / 审计:数据可查看、操作可用。
9. 设置 → Agent 设备:可吊销设备(吊销后设备下线)。
10. 退出登录 → 重新登录(令牌刷新正常)。
最新源码重新编译后:`EXECUTOR_MODE=mock` 连续 3 次、`EXECUTOR_MODE=web` 连续 2 次均通过;加入成员/工作区/排期/密码回归后,8090 最新二进制再次通过。每次时间线均严格为 `draft>pending_review>queued>dispatched>running>success`,未再出现并发轮询造成的重复 `dispatched/running` 事件。
## 五、环境与运行状态
## 仍需用户手动验收
- 后端 Go 服务:http://127.0.0.1:8090(`/health` 200)
- 前端 dev:http://127.0.0.1:3003(生产构建已通过,`apps/web/dist/`)
- MySQL(Docker everypublish-mysql)+ Redis(本机)运行中
- 假执行器:demo 工作空间 + tester1 工作空间各一台(模拟客户端)
1. 在账号管理选择 B站并完成真实扫码,确认账号从“等待扫码/已扫码”变为“已绑定”。
2. 选择真实 B站账号和视频素材发布一条测试内容,确认平台页面内容、链接、回执和任务日志。
3. 检查平台风控/验证码/登录过期时挑战、失败和重试是否符合预期。
## 六、结论
网页端阶段一交付满足《docs/delivery-plan.md》§7 第 1-5 项验收。**建议进入用户验收;确认通过后开始阶段二(Windows 客户端 D8-D11)。**
没有人工扫码时,不能把真实平台登录或真实平台发布写成“已完成”。mock URL 只证明网页任务状态机和本机执行器联调。