// 已读取AGENTS.md import * as fs from 'fs'; import * as path from 'path'; /** * 第五十五批回归闸门:提现「真实微信打款」闭环 */ describe('第五十五批提现打款闭环闸门', () => { const rootDir = path.resolve(__dirname, '../../'); const payV3 = fs.readFileSync(path.join(rootDir, 'server/src/core/pay/wechat-pay-v3.ts'), 'utf-8'); 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'); const mysqlCode = fs.readFileSync(path.join(rootDir, 'server/src/db/mysql.ts'), 'utf-8'); it('支付客户端具备商家转账到零钱能力', () => { expect(payV3).toContain('export async function transferToWallet('); expect(payV3).toContain("'/v3/fund-app/mch-transfer/transfer-bills'"); expect(payV3).toContain('export async function queryTransferByOutBillNo('); expect(payV3).toContain('export function encryptSensitiveInfo('); }); it('提现审核通过按模式真实打款 / 生产未就绪拒绝', () => { const start = indexCode.indexOf("app.post('/api/finance/withdrawals/:id/review'"); expect(start).toBeGreaterThan(-1); const block = indexCode.slice(start, start + 4600); expect(block).toContain('cfg.isReadyForTransfer'); expect(block).toContain('transferToWallet(cfg'); expect(block).toContain('getWithdrawalForTransfer(wdId)'); expect(block).toContain('微信商家转账未就绪'); expect(block).not.toContain('款项已通过微信商户零钱打款'); // 移除误导文案 }); it('提供转账结果回调与最终态落库', () => { expect(indexCode).toContain("app.post('/api/pay/wechat/transfer-notify'"); expect(repoCode).toContain('async finalizeWithdrawalTransfer('); expect(repoCode).toContain('async getWithdrawalForTransfer('); expect(repoCode).toContain('async markWithdrawalTransfer('); }); it('提现表具备转账/收款人字段', () => { expect(mysqlCode).toContain('transfer_bill_no'); expect(mysqlCode).toContain('transfer_status'); expect(mysqlCode).toContain('payee_name'); }); });