Files
client-web/src/modules/overseas-warehouse/utils/discardDocuments.test.mjs
T
2026-10-20 14:00:59 +08:00

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)
})