test(merchant): 补齐自动提现全链路端到端验收
新增 AutoWithdrawalEndToEndAcceptanceTests,用真实服务从 submitOnboarding 一路走到提现
到账:进件与绑卡结果、微信商户配置、商户业务开通回调、收款能力快照、下单固定收款子商户、
支付预下单、验签回调落账、商户核销、次日日汇总、提交主动取现、异步通知与定时查询收敛、
商户端三状态展示。所有斗拱网关用 @MockitoBean 替换,链路零出网调用。
覆盖链路级异常与幂等:重复回调与重复核销不产生第二次业务变更、终态提现不被重复通知和迟到
结果改写、重复任务不重复出账、处理中由查询收敛且等待期内不查询、失败顺延到次日汇总、退款
在途与退款成功都排除出提现范围、已进入提现记录的订单不能再撤销核销或退款、未支付订单不能
核销也不能汇总、验签失败与金额被改动的回调都不履约、能力快照未确认不放行。
进件真实入口的验收暴露并修掉两个既有缺陷:
1. merchant_onboarding_application 缺列:submitOnboarding 建单时写入的注册地址编码、营业
执照有效期和 subject_cert_end_date 从未被任何迁移创建,商户第一次提交进件就以 Unknown
column 失败。补 V137、V138,并同步 MerchantOnboardingSchemaInitializer 的兜底加列。
2. 能力快照刷新自锁:进件审核回调在锁着进件记录的事务里触发快照刷新,而刷新用另一条连接
写同一行,行锁互等到 innodb_lock_wait_timeout 后失败,商户进件通过却永远不能收款。改为
注册 afterCommit 提交后再刷新,并去掉刷新路径上会把调用方行锁撞死的 for update。
另补 docs/automatic-withdrawal-acceptance.md:开关现状(通道开关在 yml 里默认开启且指向
prod,只有自动提现任务默认关闭)、哪些配置项支持环境变量覆盖、沙盒环境、不必等一天的汇总
触发方式、逐条验收清单、带自动化覆盖标注的异常构造表、受控真实极小金额的商户/银行卡/账号
白名单与金额笔数上限登记表,以及必须由沙盒给出结论的 5 项遗留。
工单里「沙盒验证」「提现页面只展示三种状态」「真实金额受白名单与上限约束」三项保持未勾选:
自动化只能覆盖服务端读接口与路由表,沙盒、真机页面和真实到账都还没有执行过。
全量 196 项测试仅剩 docs/agents/testing.md 记录的 3 项基线失败。