Files
baiyue-firstleg/scripts/admin-test-env-modules/phase3-waiting-for-loading.mjs
T

31 lines
2.3 KiB
JavaScript

const MODULE = 'phase3-waiting-for-loading'
const OPTIONS = { scenario: 'waiting-for-loading-status', deploymentBlocker: true }
const BASE = '/api/platform/v1/first-leg/outbound-dispatches'
export async function run(context) {
const fixture = context.createdResources?.phase3OutboundDispatch
if (!fixture?.inboundId || !fixture?.containerBookingId || fixture.marker !== context.marker) {
context.addCoverageGap(MODULE, OPTIONS.scenario, 'WAITING_FOR_LOADING 状态与历史',
'本轮未取得 phase3-outbound-dispatch 的 marker 隔离聚合,未使用历史资源', 'fixture')
return
}
const selector = `inboundId=${encodeURIComponent(fixture.inboundId)}&containerBookingId=${encodeURIComponent(fixture.containerBookingId)}`
const response = await context.request('GET', `${BASE}/detail?${selector}`)
const detail = context.apiSuccess(MODULE, '回查 WAITING_FOR_LOADING 状态历史', response, selector, OPTIONS)
const history = Array.isArray(detail?.timeline)
? detail.timeline.filter((item) => item.module === 'OUTBOUND_DISPATCH') : []
const confirmed = history.find((item) => item.action === 'CONFIRM_DISPATCH')
const reversed = history.find((item) => item.action === 'REVERSE_DISPATCH')
context.assert(MODULE, '确认出仓真实进入 WAITING_FOR_LOADING', response,
fixture.confirmedStatus === 'WAITING_FOR_LOADING'
&& fixture.confirmedInboundStatus === 'LOADED'
&& confirmed?.fromStatus === 'READY_FOR_DISPATCH' && confirmed?.toStatus === 'WAITING_FOR_LOADING'
&& Boolean(confirmed?.operatorId) && Boolean(confirmed?.operatorName) && Boolean(confirmed?.occurredAt),
`confirmed=${confirmed?.fromStatus || 'missing'}->${confirmed?.toStatus || 'missing'}, version=${fixture.confirmedVersion ?? 'missing'}`, OPTIONS)
context.assert(MODULE, '撤销后状态恢复且 WAITING 历史不可变', response,
detail?.aggregate?.dispatchStatus === 'READY_FOR_DISPATCH' && detail?.aggregate?.inboundStatus === 'LOADED'
&& reversed?.fromStatus === 'WAITING_FOR_LOADING' && reversed?.toStatus === 'READY_FOR_DISPATCH'
&& Boolean(reversed?.operatorId) && Boolean(reversed?.occurredAt),
`current=${detail?.aggregate?.dispatchStatus || 'missing'}, reversed=${reversed?.fromStatus || 'missing'}->${reversed?.toStatus || 'missing'}`, OPTIONS)
}