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 }]) })