2026-08-24 15:38:28 +08:00
import assert from 'node:assert/strict'
import fs from 'node:fs'
import path from 'node:path'
import test from 'node:test'
import { fileURLToPath } from 'node:url'
import { run } from './phase4-overseas-pda.mjs'
const here = path . dirname ( fileURLToPath ( import . meta . url ))
const source = fs . readFileSync ( path . join ( here , 'phase4-overseas-pda.mjs' ), 'utf8' )
test ( 'PDA module uses only injected development acceptance requests' , () => {
assert . match ( source , /export async function run\(context\)/ )
assert . match ( source , /context\.requestOverseas\(/ )
assert . match ( source , /context\.requestOverseasMultipart\(/ )
assert . doesNotMatch ( source , /https?:\/\// )
assert . doesNotMatch ( source , /process\.env|fetch\(/ )
})
test ( 'PDA module covers the complete receiving lifecycle and excludes outbound domains' , () => {
for ( const token of [ '/destination' , '/inbound-plans/convert' , '/pallets/' , '/push' , '/cartons/scan' , '/allocations/' ,
'/count' , '/pick' , '/unload-photos/files' , '/unload-photos' , '/complete' , '/inventory/balances' ]) {
assert . ok ( source . includes ( token ), token )
}
for ( const forbidden of [ '/outbound' , '/dispatch' , '/delivery' , '/internal/' ]) assert . equal ( source . includes ( forbidden ), false , forbidden )
assert . match ( source , /requestId=/ )
assert . match ( source , /traceId=/ )
assert . match ( source , /PENDING_ASSIGNMENT/ )
2026-08-24 16:40:25 +08:00
assert . match ( source , /nonBlank\(item\?\.containerNo\)/ )
2026-08-24 15:38:28 +08:00
assert . match ( source , /expectedCartons/ )
})
test ( 'missing source order is reported as a fixture prerequisite without business writes' , async () => {
const calls = []; const gaps = []; const steps = []
const context = {
marker : 'PDA-CONTRACT' , createdResources : {},
async request ( method , requestPath ) { calls . push ({ channel : 'domestic' , method , requestPath }); return { http : 200 , body : { code : '200' , data : { records : [], page : 1 , size : 200 , total : 0 , pages : 0 } } } },
async requestOverseas ( method , requestPath ) { calls . push ({ channel : 'overseas' , method , requestPath }); throw new Error ( 'overseas should not be called without customers' ) },
addStep (... args ) { steps . push ( args ) },
assert (... args ) { steps . push ( args ) },
addCoverageGap (... args ) { gaps . push ( args ) },
}
await run ( context )
assert . equal ( calls . length , 1 )
assert . equal ( calls [ 0 ]. method , 'GET' )
assert . equal ( gaps . length , 1 )
assert . match ( gaps [ 0 ][ 3 ], /三期装柜完成事件链/ )
assert . deepEqual ( context . createdResources . phase4OverseasPda . finalStatus , null )
})