# 05 a7-heavy 补码成果 Demo E2E(浏览器级冒烟) Type: task Status: claimed Blocked by: 01, 02, 03 ## Question 参照一期 [13-e2e-demo-smoke](../../a7-parity/issues/13-e2e-demo-smoke.md) 模式,对票 01–03 落地的二期补码成果做浏览器级 e2e 验证。底座**复用 a7-parity demo**(CSS / uid 直登 / toast / 弹窗 / api helper / 步骤面板 JS 模式,沿用 v2 修订后形态——`outBox/logLine` 助手收裸 id 走 `document.getElementById`),**新建** `.scratch/a7-heavy/demo/index.html`(不改动一期 demo),tab 仅覆盖二期三域;TS 经 URL `?ts=` 注入对齐脚本侧。 1. **同步任务(票 01)**: - 发起同步任务化:POST /sync/dingtalk 返任务编号(`SYNC-MMDD-序号` 格式断言)。⚠️ verify 环境钉钉凭据可达性票内核实——同步失败亦应有任务行(执行状态=失败+失败明细结构完整),demo 两态容忍(任务化契约验证为主,不预设同步成功)。 - tasks/page 筛选(任务编号/触发方式/执行状态)+ 时间倒序断言;tasks/detail 结构(执行结果/失败对象/接口错误/处理结果/进度)。 - settings 查询默认值 → 保存合法值 → 边界校验拒绝(重试间隔<1min、次数<1,断言新错误码)→ **还原设置**(不污染环境)。 - users/stats.lastSyncTime 数据源切换验证(口径=任务表最新成功行;环境同步失败则无值,断言策略票内定)。 - 自动调度(@Scheduled 每日触发)不进 e2e(时间不可控,单测覆盖);仅验 settings 出参「下次执行时间」推导。 2. **全局日志(票 02)**: - 采集验证:demo 内做写操作(建/删演示角色)→ operation/page 按操作人筛选出现记录;覆盖端点以票 02 落地清单为准(map 纪律「不追求全端点全采」)。 - 登录日志:⚠️ debug/token 是否落登录日志票内核实(调试端点可能不走正常登录采集点);不落则备选 /auth/login 真实登录一次,或降级为仅验 page 端点+筛选结构。 - 批量日志:LeadPool 导入+导出各一次(复用一期 xlsx 构造与 free_depts 错位取部门)→ batch/page 出现记录(result 含成功/部分成功态)+ /batch/file?id= 下载(ZIP 魔数断言)+ /batch/download ids[] 打包下载。 - 90 天过期不进 e2e(时间不可控,单测覆盖过期分支);e2e 验不存在文件 id 的错误处理(65001 或 404 形态)。 - 权限口径:非管理员 uid(如 BUDDY)调三 page 期望权限拒绝。 - 三 page 筛选逐字段(所属组织模糊/操作人模糊/时间范围/opType 枚举/批量 result 三态)。 3. **公海绑定数(票 03)**: - 建演示部门专用公海规则 → 发布 → 该部门建商机(`POST /api/opportunity/edit`,六必填+省市 code 入参照 opportunity-e2e demo 先例)→ detail `boundOppCount`=1;再建一商机 → =2。 - 默认规则兜底口径断言(按票 03 拍板口径:不命中部门专用规则的商机才入默认规则计数);公海态商机是否计入按票 03 落地口径核。 - 清理:删演示商机/规则(API 正门)。 4. 新建 `demo_smoke.py`(复用一期骨架):pre_clean 幂等清理(演示规则/商机/角色残留;**任务行与日志行为审计数据留存不删**;设置还原)+ 分步断言(run_step 按 `data-tab` 切页 + 分容器断言)+ console/page error 零容忍 + 网络层零 PUT/DELETE/路径变量断言 + 截图落 `shots/` + 结果写 `demo-smoke-result.json`。 5. 运行至全 PASS(两轮幂等重跑);发现真实缺陷当场修复需复验(改码后 `clean package` 重打 fat jar 重跑——fat jar 增量静默跳过坑见 opportunity-e2e 环境事实)。 运行环境:同一期(verify profile + MinIO env 起服 fat jar,完整命令见一期 `demo_smoke.py` 头注)。 验收基线:全 PASS 两轮幂等重跑 + console/page error 双零 + 网络层零旧契约形态(零 PUT/DELETE、零路径变量)。