56 lines
2.9 KiB
JavaScript
56 lines
2.9 KiB
JavaScript
import test from 'node:test'
|
|
import assert from 'node:assert/strict'
|
|
import { isNoCurrentReceiving, isReceivingConflict, normalizeReceivingCandidate, normalizeReceivingSession, RECEIVING_PHOTO_ROLES, toReceivingError } from '../src/api/receiving-adapter.js'
|
|
|
|
test('receiving adapter preserves the three signed photo roles in workflow order', () => {
|
|
const snowflakeFileId = '2092476334483931138'
|
|
const session = normalizeReceivingSession({
|
|
status: 'WAIT_SIGN', totalPackages: 8, receivedPackages: 2, pendingPackages: 6,
|
|
photos: [{ role: 'DOOR_OPEN', fileId: '3' }, { role: 'LICENSE_PLATE', fileId: snowflakeFileId }, { role: 'CONTAINER_SEAL', fileId: '2' }, { role: 'DOOR_OPEN', fileId: '4' }],
|
|
inbounds: [{ inboundCode: 'IN-1', plannedPalletCount: 2, totalPackages: 8, receivedPackages: 2, pendingPackages: 6 }]
|
|
})
|
|
assert.deepEqual(session.photos.map(({ role }) => role), RECEIVING_PHOTO_ROLES)
|
|
assert.equal(session.photos[0].fileId, snowflakeFileId)
|
|
assert.equal(session.photos.length, 3)
|
|
assert.equal(session.inbounds[0].plannedPalletCount, 2)
|
|
})
|
|
|
|
test('receiving adapter exposes calculable candidate facts and workflow errors', () => {
|
|
const candidate = normalizeReceivingCandidate({ containerNo: ' C10000000 ', status: 'WAIT_SIGN', planCount: 15, inboundCodeCount: 15, destinationCodes: ['ONT8', 'LAX'], plannedPalletCount: 4, currentAccount: true })
|
|
assert.equal(candidate.containerNo, 'C10000000')
|
|
assert.equal(candidate.status, 'WAIT_SIGN')
|
|
assert.equal(candidate.planCount, 15)
|
|
assert.equal(candidate.inboundCodeCount, 15)
|
|
assert.deepEqual(candidate.destinationCodes, ['ONT8', 'LAX'])
|
|
assert.equal(candidate.plannedPalletCount, 4)
|
|
assert.equal(candidate.currentAccount, true)
|
|
assert.equal(isNoCurrentReceiving({ code: 404 }), true)
|
|
assert.equal(isReceivingConflict({ code: 'B0409' }), true)
|
|
})
|
|
|
|
test('unusable warehouse pallet error is actionable Chinese and retains diagnostics', () => {
|
|
const mapped = toReceivingError({
|
|
code: 'S0503',
|
|
message: 'Warehouse pallet service returned no usable response',
|
|
requestId: '4dd3028c-9112-429d-a9d2-4f71233c5c64',
|
|
traceId: 'c01eeddb77afc5c018828c3cb8ccc1ec'
|
|
}, '校验托盘失败')
|
|
assert.equal(mapped.message, '该托盘当前不可用于收货,请更换可用托盘或联系管理员检查托盘状态')
|
|
assert.equal(mapped.code, 'S0503')
|
|
assert.equal(mapped.requestId, '4dd3028c-9112-429d-a9d2-4f71233c5c64')
|
|
assert.equal(mapped.traceId, 'c01eeddb77afc5c018828c3cb8ccc1ec')
|
|
|
|
const occupied = toReceivingError({
|
|
code: 'A0409',
|
|
message: 'Pallet is not idle',
|
|
requestId: 'occupied-request',
|
|
traceId: 'occupied-trace'
|
|
})
|
|
assert.equal(occupied.message, '该托盘已被占用,当前不可用于收货,请更换可用托盘')
|
|
assert.equal(occupied.requestId, 'occupied-request')
|
|
assert.equal(occupied.traceId, 'occupied-trace')
|
|
|
|
const unknown = toReceivingError({ code: 'S0503', message: 'Another warehouse failure' }, '校验托盘失败')
|
|
assert.equal(unknown.message, 'Another warehouse failure')
|
|
})
|