2026-10-05 00:37:18 +08:00
|
|
|
import { test } from 'node:test'
|
|
|
|
|
import assert from 'node:assert/strict'
|
2026-10-08 17:07:57 +08:00
|
|
|
import { requirePassed, selectSteps, transferConclusion, discardCoverageBoundary } from './fba-remaining-nodes-acceptance.mjs'
|
|
|
|
|
|
|
|
|
|
test('discard audit follows approval reservation and PDA actual confirmation without claiming closure', () => {
|
|
|
|
|
const boundary = discardCoverageBoundary()
|
|
|
|
|
assert.equal(boundary.category, '需真实操作')
|
|
|
|
|
assert.match(boundary.conclusion, /approval keeps reservations/)
|
|
|
|
|
assert.match(boundary.conclusion, /PDA confirmation deducts/)
|
|
|
|
|
assert.match(boundary.next, /identical replay with zero new writes/)
|
|
|
|
|
assert.match(boundary.next, /changed quantity rejection/)
|
|
|
|
|
assert.doesNotMatch(boundary.conclusion, /decision pending/)
|
|
|
|
|
})
|
2026-10-05 00:37:18 +08:00
|
|
|
|
|
|
|
|
test('missing and partially failed evidence cannot close a branch', () => {
|
|
|
|
|
assert.equal(requirePassed([]), false)
|
|
|
|
|
assert.equal(requirePassed([{ passed: true }, { passed: false }]), false)
|
|
|
|
|
assert.equal(requirePassed([{ passed: true }, {}]), false)
|
|
|
|
|
assert.equal(requirePassed([{ passed: true }]), true)
|
|
|
|
|
})
|
|
|
|
|
test('approved stock transfer and a signed unrelated order do not prove transfer receipt', () => {
|
|
|
|
|
assert.equal(transferConclusion({ status: 'APPROVED', orderStatus: 'DELIVERED' }).completed, false)
|
|
|
|
|
assert.equal(transferConclusion({ status: 'RECEIVED' }).completed, false)
|
|
|
|
|
assert.equal(transferConclusion({ status: 'OUTBOUNDED', actualShipAt: '2026-10-04' }).completed, false)
|
|
|
|
|
assert.equal(transferConclusion({ status: 'RECEIVED', actualShipAt: '2026-10-04', allocations: [{ status: 'RECEIVED', destinationInventoryPositionId: '42' }] }).completed, true)
|
|
|
|
|
})
|
|
|
|
|
test('selection keeps exact original JSON pointer and failure evidence', () => {
|
|
|
|
|
const rows = selectSteps({ steps: [{ name: 'other', passed: true }, { name: 'original', passed: false }] }, s => s.name === 'original')
|
|
|
|
|
assert.deepEqual(rows, [{ pointer: '/steps/1', name: 'original', passed: false }])
|
|
|
|
|
})
|