Files
baiyue-firstleg/scripts/fba-remaining-nodes-acceptance.test.mjs
T
2026-10-08 17:07:57 +08:00

31 lines
1.9 KiB
JavaScript

import { test } from 'node:test'
import assert from 'node:assert/strict'
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/)
})
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 }])
})