// 已读取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 apiCode = fs.readFileSync(path.join(rootDir, 'pwuniapp/common/api.js'), 'utf-8'); const routeBlock = (marker: string, len = 1400) => { const start = indexCode.indexOf(marker); expect(start).toBeGreaterThan(-1); return indexCode.slice(start, start + len); }; describe('1. 钱包充值不得为他人刷余额', () => { it('充值身份以服务端会话为准', () => { const block = routeBlock("app.post('/api/users/:id/recharge'"); expect(block).toContain("'充值余额'"); expect(block).not.toContain('const userId = Number(req.params.id);\n await assertUserNotBanned(userId, \'充值余额\')'); }); }); describe('2. 订单支付仅限下单买家本人', () => { it('支付前必须做订单归属校验', () => { const block = routeBlock("app.post('/api/orders/:id/pay'"); expect(block).toContain('repo.getOrderOwnership(orderId)'); expect(block).toContain("'确认订单支付'"); expect(block).toContain('仅下单买家本人可确认支付该订单'); }); }); describe('3. 小程序支付携带当前用户身份', () => { it('payOrder 必须注入 userId', () => { const start = apiCode.indexOf('export async function payOrder('); const block = apiCode.slice(start, start + 300); expect(block).toContain('userId: normalizeUserId(payload.userId)'); }); }); });