import assert from 'node:assert/strict' import { readFile } from 'node:fs/promises' import test from 'node:test' import { buildDirectPaidBody, findDirectPaidCost, findOpenSettlement } from './finance-direct-paid-isolation.mjs' const source = await readFile(new URL('./finance-direct-paid-isolation.mjs', import.meta.url), 'utf8') const acceptance = await readFile(new URL('../admin-test-env-acceptance.mjs', import.meta.url), 'utf8') test('直接收付款幂等在全量结算模块产生收付款结果之后执行', () => { const modules = acceptance.match(/const CONFIGURED_MODULES = \[([^\n]+)\]/)?.[1] || '' assert.ok(modules.indexOf("'finance-reconciliation-full'") < modules.indexOf("'finance-settlement-full'")) assert.ok(modules.indexOf("'finance-settlement-full'") < modules.indexOf("'finance-direct-paid-isolation'")) }) test('DIRECT_PAID 请求只绑定客户、仓库、供应商且不伪造业务关联', () => { const body = buildDirectPaidBody('RUN-001', { customerId: '101', customerName: '客户A' }, { id: '201', name: '供应商A' }, { id: '301' }) assert.equal(body.businessType, 'WAREHOUSE_SERVICE') assert.equal(body.sourceType, 'OVERSEAS_WAREHOUSE_FEE') assert.equal(body.settlementMode, 'DIRECT_PAID') assert.equal(body.direction, 'PAYABLE') assert.equal(body.customerId, '101') assert.equal(body.warehouseId, '301') assert.equal(body.supplierId, '201') assert.equal(body.orderId, null) assert.equal(body.inboundId, null) assert.equal(body.inboundCode, null) assert.equal(body.containerId, null) assert.match(body.paymentReferenceNo, /DIRECT-PAID/) }) test('成本与未结清结算单选择严格命中客户金额和可支付状态', () => { const body = { customerId: '101', amount: 17.31, feeItemName: '海外仓服务已付费用' } assert.equal(findDirectPaidCost([ { id: 1, customerId: '102', amount: 17.31, feeItemName: body.feeItemName }, { id: 2, customerId: '101', amount: 17.31, feeItemName: body.feeItemName }, ], body)?.id, 2) assert.equal(findOpenSettlement([ { settlementId: 3, outstandingAmount: 0, status: 'ISSUED' }, { settlementId: 1, outstandingAmount: 0, status: 'PAID' }, { settlementId: 2, outstandingAmount: 9, status: 'ISSUED' }, ])?.settlementId, 2) }) test('HTTP 模块覆盖直接已付投影、AP 排除、幂等冲突、冻结和第二客户隔离', () => { for (const token of [ 'BUSINESS_DIRECT_PAID', 'customer-accounts/', 'cost-entries', 'fee-pool', 'payable-settlements', '收款同键同参重放且异参冲突', 'AP 付款同键同参重放且异参冲突', '拒绝编辑、调整和作废且零漂移', '第二客户不能读取或确认他人账单', 'foreign-receipt', 'foreign-payable', 'merchant-qualification-fixture.mjs', 'multi-bill-receipt', 'ap-partial-payment', 'settlementKey', ]) assert.ok(source.includes(token), token) assert.match(source, /fixture\.marker !== context\.marker/) assert.match(source, /禁止借历史财务单据/) assert.doesNotMatch(source, /INSERT\s+INTO|UPDATE\s+fin_|DELETE\s+FROM/i) }) test('敏感凭据不写入输出且临时客户上下文完整恢复', () => { assert.match(source, /originalUsername/) assert.match(source, /originalPassword/) assert.match(source, /delete process\.env\.MERCHANT_TEST_PASSWORD/) assert.doesNotMatch(source, /console\.log\([^)]*password/i) assert.doesNotMatch(source, /MYSQL_PWD|Authorization:\s*`Bearer[^$]/) })