// 已读取AGENTS.md import * as fs from 'fs'; import * as path from 'path'; /** * 第二十一批回归闸门:订单金额与优惠券服务端权威化 */ describe('第二十一批订单金额完整性闸门', () => { const rootDir = path.resolve(__dirname, '../../'); const repoCode = fs.readFileSync(path.join(rootDir, 'server/src/db/repository.ts'), 'utf-8'); const createOrderBlock = () => { const start = repoCode.indexOf('async createOrder('); expect(start).toBeGreaterThan(-1); return repoCode.slice(start, start + 4200); }; it('服务单价必须按服务端大神档案校验', () => { const block = createOrderBlock(); expect(block).toContain('resolveCompanionRow(expertId)'); expect(block).toContain('compRate'); expect(block).toContain('hourlyRate = compRate'); }); it('订单金额由服务端计算,不再直接信任客户端 amount', () => { const block = createOrderBlock(); expect(block).toContain('const amount = Number(Math.max(baseAmount - couponDiscount, 0.01).toFixed(2))'); expect(block).not.toContain('const amount = Number(data.amount) || hourlyRate * durationHours;'); }); it('优惠券折扣必须经服务端有效券校验', () => { expect(repoCode).toContain('async resolveCouponDiscount('); const block = createOrderBlock(); expect(block).toContain('resolveCouponDiscount(rawDiscount, track, baseAmount)'); }); });