import assert from 'node:assert/strict' import { readFileSync } from 'node:fs' import test from 'node:test' import { candidateLoadingPlanIds, ownershipAllocations, withoutInbound, } from './firstleg-container-fee-allocation.mjs' const source = readFileSync(new URL('./firstleg-container-fee-allocation.mjs', import.meta.url), 'utf8') test('candidate plans only come from resources created by the current acceptance run', () => { assert.deepEqual(candidateLoadingPlanIds({ phase3ContainerLoading: { loadingPlanId: '101' }, coloadGroupAcceptance: { fullPlanId: '102', planId: '103' }, manualLoadingComplete: { loadingPlanId: '101' }, financeFullFixtures: { feeSources: [{ loadingPlanId: '104' }] }, }), ['101', '102', '103', '104']) assert.doesNotMatch(source, /pageSize=\d+.*smart-loading|containers\?page|历史柜/) assert.match(source, /channelGroupCode:\s*channelGroup\(first\.channelCode\)/) }) test('allocation builder selects one real order per distinct customer and preserves exact cents', () => { const allocations = ownershipAllocations([ { accountId: '11', orderId: '21', orderNo: 'FL-21', inboundId: '31', inboundCode: 'IN-31' }, { accountId: '11', orderId: '22', orderNo: 'FL-22', inboundId: '32', inboundCode: 'IN-32' }, { accountId: '12', orderId: '23', orderNo: 'FL-23', inboundId: '33', inboundCode: 'IN-33' }, { accountId: '13', orderId: '24', orderNo: 'FL-24', inboundId: '34', inboundCode: 'IN-34' }, ], 100) assert.equal(allocations.length, 3) assert.equal(new Set(allocations.map((item) => item.customerId)).size, 3) assert.equal(allocations.reduce((sum, item) => sum + Number(item.amount), 0), 100) assert.deepEqual(withoutInbound(allocations[0]), { customerId: '11', orderId: '21', orderNo: 'FL-21', amount: '33.33', }) }) test('module freezes all required real HTTP invariants and provisions a formal cross-customer fixture', async () => { for (const token of [ '/allocation-groups', '分摊金额合计不一致被拒绝', '分摊客户必填', '分摊订单必填', '伪造非柜内订单归属被拒绝', '伪造非柜内入仓码被拒绝', '不填写入仓码原子创建跨客户分摊组', '单行审核不能破坏分摊组一致性', '整组审核原子成功', '缺少组成员的调整被拒绝', '整组调整原子成功', '整组作废原子成功', '已作废冻结分摊组拒绝继续调整', '非柜内客户不能读取柜次费用', 'requestId=', 'traceId=', 'deploymentBlocker: true', ]) assert.ok(source.includes(token), token) for (const token of [ 'createMerchant(context)', 'createCustomerWaitSplit', 'provisionCrossCustomerPlan', 'originalUsername', 'originalPassword', 'delete process.env.MERCHANT_TEST_USERNAME', 'delete process.env.MERCHANT_TEST_PASSWORD', ]) assert.ok(source.includes(token), token) assert.doesNotMatch(source, /\bfetch\s*\(|\/internal\/|mysql|SELECT\s/i) })