Files
baiyue-firstleg/scripts/admin-test-env-modules/finance-direct-paid-isolation-contract.test.mjs
T

65 lines
3.4 KiB
JavaScript

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[^$]/)
})