63 lines
4.1 KiB
JavaScript
63 lines
4.1 KiB
JavaScript
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)
|
|
})
|