This commit is contained in:
2026-10-13 14:46:59 +08:00
parent c72c819f95
commit 4db8700817
5 changed files with 49 additions and 5 deletions
@@ -0,0 +1,31 @@
import assert from 'node:assert/strict'
import { readFileSync } from 'node:fs'
import test from 'node:test'
import ts from 'typescript'
const source = readFileSync(new URL('./returnRelabelCandidates.ts', import.meta.url), 'utf8')
const js = ts.transpileModule(source, { compilerOptions: { module: ts.ModuleKind.ESNext, target: ts.ScriptTarget.ES2022 } }).outputText
const { returnRelabelCandidate } = await import(`data:text/javascript;base64,${Buffer.from(js).toString('base64')}`)
const converted = {
returnCartonId: '20', cartonMark: 'NEW-BOX', availablePackages: 0, skuItems: [],
cartonAvailablePackages: 1, cartonSkuItems: [{ skuCode: 'NEW-A', quantity: 10 }, { skuCode: 'NEW-B', quantity: 5 }],
}
test('carton labeling selects the current box and both converted SKUs', () => {
const candidate = returnRelabelCandidate(converted, 'carton')
assert.equal(candidate.cartonMark, 'NEW-BOX')
assert.equal(candidate.availablePackages, 1)
assert.equal(candidate.skuCode, 'NEW-A,NEW-B')
assert.deepEqual(candidate.skuItems, converted.cartonSkuItems)
})
test('SKU and combined labeling still exclude completed SKU quantities', () => {
for (const mode of ['sku', 'carton_and_sku']) {
assert.equal(returnRelabelCandidate(converted, mode).availablePackages, 0)
assert.deepEqual(returnRelabelCandidate(converted, mode).skuItems, [])
}
})
test('an occupied box cannot be selected for carton labeling', () => {
assert.equal(returnRelabelCandidate({ ...converted, cartonAvailablePackages: 0 }, 'carton').availablePackages, 0)
})
@@ -0,0 +1,11 @@
import type { RelabelInventoryCandidate } from '../api/warehouseServices'
export function returnRelabelCandidate(candidate: RelabelInventoryCandidate, mode: string): RelabelInventoryCandidate {
if (!candidate.returnCartonId || mode !== 'carton') return candidate
return {
...candidate,
availablePackages: candidate.cartonAvailablePackages,
skuItems: candidate.cartonSkuItems,
skuCode: candidate.cartonSkuItems.map(item => item.skuCode).join(','),
}
}