import assert from 'node:assert/strict' import { readFileSync } from 'node:fs' import test from 'node:test' import ts from 'typescript' const compiled = ts.transpileModule(readFileSync(new URL('./discardDocuments.ts', import.meta.url), 'utf8'), { compilerOptions: { module: ts.ModuleKind.ESNext, target: ts.ScriptTarget.ES2022 } }).outputText const { groupDiscardDocuments } = await import(`data:text/javascript;base64,${Buffer.from(compiled).toString('base64')}`) const returned = (id, warehouse = 'WH', document = 'TT-BYWL-261019152551') => ({ orderId: `return:${id}`, returnCartonId: id, sourceType: 'RETURN_CARTON', overseasWarehouseId: warehouse, inboundCode: document, inboundOrderNo: document, availablePackages: 5, cartonSelectionSupported: true, cartons: [{ cartonId: id, cartonMark: `BOX-${id}`, skus: [{ skuCode: 'A', availablePackages: 5 }] }], skus: [{ skuCode: 'A', availablePackages: 5 }], }) test('同单两箱合并成一个选项,可用量为两箱而非十件,保留原始提交身份', () => { const sources = [returned('1'), returned('2')] const result = groupDiscardDocuments(sources) assert.equal(result.length, 1) assert.equal(result[0].availablePackages, 2) assert.deepEqual(result[0].sources, sources) assert.equal(result[0].cartonSelectionSupported, true) }) test('不同单据或操作仓独立展示,混装SKU不重复计算物理箱', () => { assert.equal(groupDiscardDocuments([returned('1'), returned('2', 'OTHER'), returned('3', 'WH', 'TT-OTHER')]).length, 3) const source = { ...returned('1'), sourceType: 'INVENTORY', orderId: 'inventory:1', inventoryPositionId: '1', availablePackages: 10 } const second = { ...source, orderId: 'inventory:2', inventoryPositionId: '2', cartons: source.cartons } assert.equal(groupDiscardDocuments([source, second])[0].availablePackages, 1) }) test('缺少箱级记录时合并仓位可用箱数并保持全部废弃明细', () => { const first = { ...returned('1'), sourceType: 'INVENTORY', orderId: 'inventory:1', cartonSelectionSupported: false, availablePackages: 3 } const second = { ...first, orderId: 'inventory:2', availablePackages: 4 } const result = groupDiscardDocuments([first, second])[0] assert.equal(result.availablePackages, 7) assert.equal(result.cartonSelectionSupported, false) assert.equal(result.sources.length, 2) }) test('接口 Long 字符串按数值相加,不串联数字', () => { const source = { ...returned('1'), sourceType: 'INVENTORY', cartonSelectionSupported: false } const sources = ['50', '100', '97'].map((availablePackages, index) => ({ ...source, orderId: `inventory:${index}`, returnCartonId: undefined, availablePackages })) assert.equal(groupDiscardDocuments(sources)[0].availablePackages, 247) assert.equal(groupDiscardDocuments([{ ...source, orderId: 'i:1', returnCartonId: undefined, availablePackages: '125' }, { ...source, orderId: 'i:2', returnCartonId: undefined, availablePackages: '125' }])[0].availablePackages, 250) }) test('相同仓位重复关联只计一次,零值与未知可用量不进入可选来源', () => { const source = { ...returned('1'), returnCartonId: undefined, sourceType: 'INVENTORY', inventoryPositionId: 'position:1', cartonSelectionSupported: false, availablePackages: 2 } assert.equal(groupDiscardDocuments([source, source])[0].availablePackages, 2) for (const availablePackages of [0, null, undefined, 'invalid']) assert.equal(groupDiscardDocuments([{ ...source, availablePackages }]).length, 0) }) test('相同来源的混箱分片保留全部SKU和实箱,且不修改接口原始对象', () => { const a = { ...returned('1'), sourceType: 'INVENTORY', inventoryPositionId: 'P', skus: [{ skuCode: 'A', availablePackages: 1 }] } const b = { ...a, skus: [{ skuCode: 'B', availablePackages: 1 }], cartons: [{ ...a.cartons[0], skus: [{ skuCode: 'B', availablePackages: 1 }] }] } const doc = groupDiscardDocuments([a, b])[0] assert.equal(doc.availablePackages, 1) assert.equal(doc.sources.length, 1) assert.deepEqual(doc.sources[0].skus.map(sku => sku.skuCode), ['A', 'B']) assert.deepEqual(doc.sources[0].cartons[0].skus.map(sku => sku.skuCode), ['A', 'B']) assert.equal(a.skus.length, 1) })