receipt-title-required

20260916-201504 轮 · 看它的历史
靶子 BASE=http://localhost:20098 clone=h8 container=wt_h8_tp8  ddnum=202608130045438700285587  ghost=E2E_NO_SUCH_DDNUM_1789563192130

[A 管理端入口 —— 凭证处理台,权限位 39]
  PASS A1) 凭证处理台上「个人抬头」下拉可见
  PASS A2) 未配置时初值 = 必须填写抬头(回落现状)  [期望 "1" / 实测 "1"]
  PASS A3) 原有「对外叫法」入口没被挤掉(同一条配置栏)
  PASS A4) 说明里点名了公司抬头不受此项影响(§1.7:两个相关设置必须互相点名)
  PASS A5) 保存后弹出成功反馈(jncAlert,非原生 alert)
  PASS A6) 重载后读回「可以不填」(真持久化,不是只改了 DOM)  [期望 "0" / 实测 "0"]
  PASS A7) DB 里确实是 0(证明写的是 corp_config 而非别处)  [期望 "0" / 实测 "0"]

[B PC 前台 UI —— 开关=可不填]
  PASS B0) 申请表单确实渲染了(否则下面的不可见断言会假绿)
  PASS B1) 个人抬头下「*」隐藏  [期望 false / 实测 false]
  PASS B2) 出现「可以不填」说明  [期望 true / 实测 true]
  PASS B3) 切到公司抬头「*」必须回来(公司恒必填)  [期望 true / 实测 true]
  PASS B4) 公司抬头下「可以不填」说明隐藏  [期望 false / 实测 false]
  PASS B5) 切回个人抬头「*」再次隐藏  [期望 false / 实测 false]
  PASS B6) 可不填档:空抬头点提交,前端放行并真的发出了请求  [期望 1 / 实测 1]

[C PC 服务端 User::receipt_apply_post —— 用不存在的 ddnum,零写库]
  PASS C0) 从页面取到 CSRF token(取不到则下面全是 CSRF 拒,与真结果同形)
  PASS C1) 开关=可不填:空抬头**越过**抬头闸(不再回「抬头必填」)
  PASS C2) 越过后落到 receiptEligible 的拒绝(证明真走到了后面,不是被别的闸挡住)

[D WxApi::receiptApply —— Bearer,独立端点各自验]
  PASS D1) 开关=可不填:空抬头越过抬头闸,落到 not_found  [期望 "not_found" / 实测 "not_found"]

[E 切回「必须填写」—— 两个端点都要变回拦截]
  PASS E1) 读回「必须填写抬头」  [期望 "1" / 实测 "1"]
  PASS E2) DB 已还原为 1  [期望 "1" / 实测 "1"]
  PASS E3) PC:空抬头重新被「抬头必填」拦下
  PASS E4) WxApi:空抬头重新被 invalid_title 拦下  [期望 "invalid_title" / 实测 "invalid_title"]
  PASS E5) 前台「*」回来了  [期望 true / 实测 true]
  PASS E6) 「可以不填」说明不再渲染  [期望 0 / 实测 0]
  PASS E7) 守卫:必填档下空抬头点提交被前端拦下(请求数没有增加)  [期望 1 / 实测 1]

[F 零副作用]
  PASS F1) ghost ddnum 没建出任何凭证单  [期望 "0" / 实测 "0"]
  PASS F2) 真实 ddnum 也没被本次跑污染  [期望 "0" / 实测 "0"]

PASS=27 FAIL=0   截图: /data/AICode/e2e/ma_dev_v2/ma/bin/workspace/test-results/playwright-images/receipt-title-required