receipt-title-required
靶子 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