// 已读取AGENTS.md import * as fs from 'fs'; import * as path from 'path'; /** * 第十九批回归闸门:预支付金额不可篡改(低价支付高价订单) */ describe('第十九批支付金额完整性闸门', () => { const rootDir = path.resolve(__dirname, '../../'); const indexCode = fs.readFileSync(path.join(rootDir, 'server/src/index.ts'), 'utf-8'); const repoCode = fs.readFileSync(path.join(rootDir, 'server/src/db/repository.ts'), 'utf-8'); it('订单归属解析必须携带订单金额', () => { const start = repoCode.indexOf('async getOrderOwnership('); const block = repoCode.slice(start, start + 900); expect(block).toContain('o.amount'); expect(block).toContain('amount: Number(r.amount)'); }); it('入账必须校验实收金额与支付意图一致', () => { const start = repoCode.indexOf('async applyPaymentSuccess('); const block = repoCode.slice(start, start + 1800); expect(block).toContain('amountMismatch'); expect(block).toContain("reason: 'amount_mismatch'"); }); it('预支付:仅买家可发起,且订单金额以服务端订单为准', () => { const start = indexCode.indexOf("app.post('/api/pay/wechat/prepay'"); const block = indexCode.slice(start, start + 2200); expect(block).toContain("'发起微信支付'"); expect(block).toContain('repo.getOrderOwnership(String(orderId))'); expect(block).toContain('payAmount = Number(own.amount) || 0'); expect(block).not.toContain('const uid = Number(userId) || 0;'); }); });