// 已读取AGENTS.md import * as fs from 'fs'; import * as path from 'path'; /** * 第二十七批回归闸门:请求层错误透传 + 核销码反查冲突优先级 */ describe('第二十七批请求层与核销码反查闸门', () => { const rootDir = path.resolve(__dirname, '../../'); const requestJs = fs.readFileSync(path.join(rootDir, 'pwuniapp/common/request.js'), 'utf-8'); const repoCode = fs.readFileSync(path.join(rootDir, 'server/src/db/repository.ts'), 'utf-8'); describe('1. 小程序请求层', () => { it('错误必须附带业务 code / statusCode', () => { expect(requestJs).toContain('bizErr.code = res.data.code'); expect(requestJs).toContain('bizErr.statusCode = res.statusCode'); expect(requestJs).toContain('httpErr.statusCode = res.statusCode'); }); it('登录过期必须清理会话并提示', () => { expect(requestJs).toContain('function handleAuthExpired('); expect(requestJs).toContain('40100'); expect(requestJs).toContain('登录已过期'); }); }); describe('2. 核销码反查冲突优先级', () => { it('活动核销码优先未核销、最新记录', () => { const start = repoCode.indexOf('async queryCheckinCodeInfo('); const block = repoCode.slice(start, start + 1000); expect(block).toContain('ORDER BY p.checkin_status ASC, p.created_at DESC'); }); it('订单核销码排除已关闭状态并优先待核销', () => { const start = repoCode.indexOf('async queryCheckinCodeInfo('); const block = repoCode.slice(start, start + 2600); expect(block).toContain("AND status NOT IN ('已取消', '已退款', '已全额退款')"); expect(block).toContain("ORDER BY FIELD(status, '履约中', '服务中', '待确认'"); }); }); });