fix(pda): restore whole-trip departure and handover after merge
This commit is contained in:
@@ -13,6 +13,35 @@ import { toDispatchError } from '../src/utils/dispatch-error.js'
|
||||
|
||||
const read = (path) => readFile(new URL(path, import.meta.url), 'utf8')
|
||||
|
||||
test('dispatch merge retains return carton picking and review gates together', async () => {
|
||||
const source = (await read('../src/pages/dispatch/dispatch.vue')).match(/<script>([\s\S]*?)<\/script>/)[1]
|
||||
const definition = new Function('PortalHeader', 'ScanTargetInput', 'DispatchHandoverStatus',
|
||||
source.replace(/^\s*import .*$/gm, '').replace('export default', 'return'))({}, {}, {})
|
||||
const state = { current: { canPick: true }, selectedItem: { returnCartons: [{}] },
|
||||
selectedReturnCarton: { cartonMark: 'RETURN-BOX' }, selectedPosition: null,
|
||||
packages: 1, selectedRemaining: 1, pickingCompleted: false, plannedPackages: 1, remainingPackages: 0 }
|
||||
assert.equal(definition.computed.canPick.call(state), true)
|
||||
state.selectedReturnCarton = null
|
||||
assert.equal(definition.computed.canPick.call(state), false)
|
||||
state.selectedItem.returnCartons = []
|
||||
state.selectedPosition = { id: 'position' }
|
||||
assert.equal(definition.computed.canPick.call(state), true)
|
||||
for (const canPick of [false, undefined, 'true']) {
|
||||
state.current.canPick = canPick
|
||||
assert.equal(definition.computed.canPick.call(state), false)
|
||||
assert.equal(definition.computed.canComplete.call(state), false)
|
||||
}
|
||||
const calls = []
|
||||
const deps = { pickDispatchItem: async (...args) => calls.push(args), getDispatchTask: async () => state.current,
|
||||
fulfillmentIdempotencyKey: () => ({ value: 'retry-key', signature: 'signature' }), releaseFulfillmentKey() {},
|
||||
updateFulfillmentDraft() {}, playSuccessSound() {}, PortalHeader: {}, ScanTargetInput: {}, DispatchHandoverStatus: {} }
|
||||
const page = new Function(...Object.keys(deps), source.replace(/^\s*import .*$/gm, '').replace('export default', 'return'))(...Object.values(deps))
|
||||
await page.methods.submitPick.call({ canPick: true, current: { dispatchNo: 'DS-RETURN' },
|
||||
selectedItem: { dispatchItemId: 'item' }, selectedReturnCarton: { cartonMark: 'RETURN-BOX', productQuantity: 5 },
|
||||
run: async (_, work) => work() })
|
||||
assert.deepEqual(calls, [['DS-RETURN', 'item', { positionId: null, cartonMark: 'RETURN-BOX', packages: 1, productQuantity: 5, idempotencyKey: 'retry-key' }]])
|
||||
})
|
||||
|
||||
test('trip departure preserves version zero and rejects incomplete trip identity', () => {
|
||||
const task = normalizeDispatchTask({ tripNo: 'TR-1', tripRecordVersion: 0, tripDispatchCount: 2, items: [] })
|
||||
assert.equal(task.tripRecordVersion, '0')
|
||||
|
||||
Reference in New Issue
Block a user