admin-fund-pin.php
✔ 隔离库 jnc_ma_e2e_h8 就绪(105 张表,缺列 0)
【组 C 影响面预览 —— 不带 confirm 就只回人数与金额,一分钱不动】
✅ 预览时 M1 余额未变
✅ 预览时零流水
✅ 预览回的是 JSON 且 info=1
✅ 预览报的人数 = 2
✅ 确认文案里有人数 2
✅ 确认文案里带着后端算出的货币符号 RM
✅ 确认文案里有合计金额(2500 分 × 2 人 = 50.00)
✅ 确认文案里有档位名「发放奖金」
✅ 积分档预览用「点」而不是货币符号
✅ 积分档预览同样零写入
✅ 组 C 全程零流水
✅ 预览路径不校验 PIN(PIN 给错也照样回预览)
✅ 给错 PIN 的预览同样零写入
· 执行回执必须同时报「执行了几个 / 跳过了几个」
✅ 回执报了执行数
✅ 回执报了跳过数
✅ 组 C 收尾:流水清零
【组 P 二级 PIN —— 未设 / 缺失 / 错误 一律拒且钱不动】
✅ 未设 PIN → 提示先去设置
✅ 未设 PIN 时 M1 余额未变
✅ 未设 PIN 时零流水
✅ 缺 PIN → 拒(空 PIN 判为 wrong)
✅ 缺 PIN 时 M1 余额未变
✅ PIN 错 → 拒
✅ PIN 错时 M1 余额未变
✅ PIN 未通过时全程零流水
✅ PIN 正确 → M1 余额精确 +4200
✅ PIN 正确 → 记了一条流水
✅ 组 P 收尾:流水已清零
· huiyuanguanli_huiyuan_xiugai cmd=2 同样要 PIN
✅ cmd=2 PIN 错 → 拒
✅ cmd=2 PIN 错时积分未变
✅ cmd=2 PIN 对 → 积分写进去了
· 🔴 守卫:cmd=1/3/4 不是资金面,不该被 PIN 拦
✅ cmd=1 冻结:不带 PIN 照样生效
✅ cmd=1 解冻:不带 PIN 照样生效
✅ cmd=3 改等级:不带 PIN 照样生效
【组 V 数值校验 —— 非法值一律拒,余额逐分不变】
✅ value=-5 (负数) 被拒
✅ value=-5 后 M1 余额未变
✅ value=-5 未产生 PHP 异常
✅ value=abc (非数字) 被拒
✅ value=abc 后 M1 余额未变
✅ value=abc 未产生 PHP 异常
✅ value= (空串) 被拒
✅ value= 后 M1 余额未变
✅ value= 未产生 PHP 异常
✅ value=0 (零(增量语义下会让 affected 守卫失去分辨力)) 被拒
✅ value=0 后 M1 余额未变
✅ value=0 未产生 PHP 异常
✅ value=1.5 (小数) 被拒
✅ value=1.5 后 M1 余额未变
✅ value=1.5 未产生 PHP 异常
✅ value=100000001 (超上限) 被拒
✅ value=100000001 后 M1 余额未变
✅ value=100000001 未产生 PHP 异常
✅ 组 V 全程零流水
【组 U uid 校验 —— 非法 JSON 不再 Fatal;vip 组只认会员档位】
✅ uid=[1,2,abc] (非法 JSON(json_decode 返 null,原实现 count(null) 是 Fatal)) 被拒
✅ uid=[1,2,abc] 未产生 PHP 异常(不是 Fatal)
✅ uid=[] (空数组) 被拒
✅ uid=[] 未产生 PHP 异常(不是 Fatal)
✅ uid=[990991,"x"] (数组里混了非数字) 被拒
✅ uid=[990991,"x"] 未产生 PHP 异常(不是 Fatal)
✅ uid="notanarray" (不是数组) 被拒
✅ uid="notanarray" 未产生 PHP 异常(不是 Fatal)
✅ 组 U 后 M1 余额未变
· vip 组白名单(§2.12 过载字段:9/10=管理员 100=DDM 101=SucaiManager)
✅ cmdid=2 uid=[10](管理员档) → 解析为空
✅ cmdid=2 uid=[100](DDM 档) → 解析为空(⚠️ 当前库无 vip=100,此条恒真)
✅ cmdid=2 uid=[101](SucaiManager 档) → 解析为空
✅ cmdid=2 uid=[0,1,9] 混入 9 → 整体解析为空(不静默丢弃那一档)
✅ cmdid=2 uid=[0] 合法档确实解析得出人(否则上面几条是恒真断言)
✅ cmdid=2 uid=[10] 走完整写路径同样被拒
✅ 管理员余额未被批量发钱按钮改动
✅ 组 U 全程零流水
【组 S 扣除不足 —— 跳过而非抛 ERROR 1690】
✅ 积分扣超额没有抛 ERROR 1690
✅ 积分扣超额没有抛任何 PHP 异常
✅ M1(score=100) 被跳过,积分不变
✅ M2(score=1000) 扣成 500
✅ 只给真的扣成的那一个记了流水
✅ 那条流水属于 M2
✅ 余额扣超额没有抛异常
✅ M3 余额未被扣成负数
✅ 余额扣超额未新增流水
【组 L 流水 —— 记会员本人;没改到行就不记】
✅ 合法发放未报异常
✅ M1 余额精确 +2500
✅ 发放后新增一条流水
✅ 🔴 流水 dealuserid = 会员本人(不是管理员)
✅ 🔴 全部流水都不属于管理员
· 会员 id 不存在时不得留下流水
✅ 不存在的会员未报异常
✅ 不存在的会员没有产生流水
· 混合名单:一个存在、一个不存在
✅ 存在的那个照常 +300
✅ 只多了一条流水(不存在的那个没记)
【组 D 借贷方向 —— 发放只填 dealin,不能两列都填】
· 发放积分
✅ 发放积分未报异常
✅ M1 积分精确 +77
✅ 发放积分产生了一条流水
✅ 币种档位是积分(dealgoldmode=2)
✅ dealin = 发放数
✅ 🔴 dealout = 0
✅ 明细页渲染出的这一行确实是本次那条流水
✅ 「用户收入」格显示了发放数 77
✅ 🔴「用户支出」格逐字是 -(改前这一格也会显示 77 积分)
✅ 🔴 收入格与支出格不相同(改前两格逐字一样)
· 守卫:扣除积分仍然只填支出侧(证明不是把判据整个翻过来)
✅ 扣除积分未报异常
✅ 扣除产生了一条流水
✅ 扣除:dealin = 0
✅ 扣除:dealout = 扣除数
✅ 扣除:「用户收入」格是 -
✅ 扣除:「用户支出」格显示了 55
· 守卫:发放余额不受影响
✅ 发余额产生了一条流水
✅ 发余额:币种档位是虚拟货币(dealgoldmode=0)
✅ 发余额:dealin = 1200
✅ 发余额:dealout = 0
【组 G 守卫 —— huiyuanguanli_huiyuan_xiugai 的其余分支未被误伤】
✅ cmd=1 冻结仍然生效
✅ cmd=1 解冻仍然生效
✅ cmd=3 改会员等级仍然生效
· cmd=2 改积分:非法值拒、合法值成
✅ cmd=2 value=-1 (负数) 被拒
✅ cmd=2 value=-1 后积分未变
✅ cmd=2 value=-1 未 Fatal
✅ cmd=2 value=abc (非数字) 被拒
✅ cmd=2 value=abc 后积分未变
✅ cmd=2 value=abc 未 Fatal
✅ cmd=2 value=100000001 (超上限) 被拒
✅ cmd=2 value=100000001 后积分未变
✅ cmd=2 value=100000001 未 Fatal
✅ cmd=2 合法值仍然写得进去
✅ cmd=2 允许清零(绝对赋值语义,下限是 0 不是 1)
✅ 还原:管理员 admin_pin 回到原值
✅ 还原:所有夹具账号的余额与积分都回到原值
✅ 🔴 非夹具账号的余额与积分总和一分未动
✅ 清理:本轮产生的资金流水已删净
=== PASS=125 FAIL=0 ===
✔ 已销毁 jnc_ma_e2e_h8