diff --git a/scripts/admin-test-env-modules/phase3-container-loading.mjs b/scripts/admin-test-env-modules/phase3-container-loading.mjs index 420529fe7..d3ff65a11 100644 --- a/scripts/admin-test-env-modules/phase3-container-loading.mjs +++ b/scripts/admin-test-env-modules/phase3-container-loading.mjs @@ -196,8 +196,8 @@ export async function run(context) { const claimedPlanResponse = await context.request('GET', `${SMART}/plans/${planId}`) const claimedPlan = context.apiSuccess(MODULE, '领取后回查装柜计划', claimedPlanResponse, '', OPTIONS) - context.assert(MODULE, '仅领取任务不提前开始装柜', claimedPlanResponse, - claimedPlan?.status === 'EDITING' && Number(claimedPlan?.version) === Number(pushed?.version), + context.assert(MODULE, '领取任务后计划进入 LOADING 且版本递增', claimedPlanResponse, + claimedPlan?.status === 'LOADING' && Number(claimedPlan?.version) === Number(pushed?.version) + 1, `status=${claimedPlan?.status || 'missing'}, version=${claimedPlan?.version ?? 'missing'}`, OPTIONS) const batchPath = `${PDA}/tasks/${taskId}/batch` diff --git a/scripts/admin-test-env-modules/phase3-loading.mjs b/scripts/admin-test-env-modules/phase3-loading.mjs index 3e000960d..3df3ddbe8 100644 --- a/scripts/admin-test-env-modules/phase3-loading.mjs +++ b/scripts/admin-test-env-modules/phase3-loading.mjs @@ -203,8 +203,8 @@ export async function run(context) { const claimedPlanResponse = await context.request('GET', `${smartLoadingBase}/plans/${loadingPlanId}`) const claimedPlan = context.apiSuccess(MODULE, '领取后回查柜次计划', claimedPlanResponse, '', OPTIONS) - context.assert(MODULE, '仅领取 PDA 任务不提前开始装柜', claimedPlanResponse, - claimedPlan?.status === 'EDITING' && Number(claimedPlan?.version) === Number(pushedLoadingPlan?.version), + context.assert(MODULE, '领取 PDA 任务后计划进入 LOADING 且版本递增', claimedPlanResponse, + claimedPlan?.status === 'LOADING' && Number(claimedPlan?.version) === Number(pushedLoadingPlan?.version) + 1, `status=${claimedPlan?.status || 'missing'}, version=${claimedPlan?.version ?? 'missing'}`, OPTIONS) const batchPath = `${pdaBase}/tasks/${canonicalTaskId}/batch` @@ -321,9 +321,14 @@ export async function run(context) { const confirm = await request(context, 'POST', `${base}/preload/confirm?tenantId=${encodeURIComponent(tenantId)}`, { expectedVersion: Number(confirmingData.preloadPlan.version) }, { 'Idempotency-Key': `${context.marker}-p3-confirm`.slice(0, 128) }) const confirmed = context.apiSuccess(MODULE, '确认预装并进入装柜中', confirm, '', OPTIONS) - context.assert(MODULE, '预装确认推进主状态 LOADING 和计划 CONFIRMED', confirm, - confirmed?.mainStatus === 'LOADING' && confirmed?.preloadPlan?.status === 'CONFIRMED' - && Number(confirmed?.preloadPlan?.version) === 3, + context.assert(MODULE, directPdaCompletion + ? '装柜已开始时预装确认保持 LOADING 和 CONFIRMING' + : '预装确认推进主状态 LOADING 和计划 CONFIRMED', confirm, + directPdaCompletion + ? confirmed?.mainStatus === 'LOADING' && confirmed?.preloadPlan?.status === 'CONFIRMING' + && Number(confirmed?.preloadPlan?.version) === 2 + : confirmed?.mainStatus === 'LOADING' && confirmed?.preloadPlan?.status === 'CONFIRMED' + && Number(confirmed?.preloadPlan?.version) === 3, `mainStatus=${confirmed?.mainStatus || 'missing'}, planStatus=${confirmed?.preloadPlan?.status || 'missing'}, version=${confirmed?.preloadPlan?.version ?? 'missing'}`, OPTIONS) if (confirmed?.mainStatus !== 'LOADING') return diff --git a/scripts/admin-test-env-modules/phase3-producer-chain-contract.test.mjs b/scripts/admin-test-env-modules/phase3-producer-chain-contract.test.mjs index d28de81b8..5a5016a18 100644 --- a/scripts/admin-test-env-modules/phase3-producer-chain-contract.test.mjs +++ b/scripts/admin-test-env-modules/phase3-producer-chain-contract.test.mjs @@ -70,7 +70,7 @@ test('container loading follows push, claim, real pick, completed sequence', () assert.match(value, /containerDetail\?\.planStatus === 'WAIT_LOADING'/) assertOrder(value, [ "pushed?.status === 'EDITING'", - "claimedPlan?.status === 'EDITING'", + "claimedPlan?.status === 'LOADING'", "const pickResponse = await request", "finalPlan?.status === 'COMPLETED'", ]) @@ -80,10 +80,22 @@ test('bridge loading starts through a real PDA batch before preload confirmation const value = source('./phase3-loading.mjs') assertOrder(value, [ "pushedLoadingPlan?.status === 'EDITING'", - "claimedPlan?.status === 'EDITING'", + "claimedPlan?.status === 'LOADING'", "const canonicalPick = await request", "pickedPlan?.status === 'COMPLETED'", "const confirming = await request", ]) + assert.match(value, /confirmed\?\.mainStatus === 'LOADING' && confirmed\?\.preloadPlan\?\.status === 'CONFIRMING'/) + assert.match(value, /confirmed\?\.preloadPlan\?\.status === 'CONFIRMED'/) assert.doesNotMatch(value, /关联柜次计划进入 LOADING/) }) + +test('downstream producers prefer the phase3Loading container fixture', () => { + const ocean = source('./ocean-bookings.mjs') + const customs = source('./phase3-customs.mjs') + const serviceCenter = source('./service-center-flow.mjs') + assert.match(ocean, /context\.createdResources\?\.phase3Loading\s*\|\|\s*context\.createdResources\?\.phase3ContainerLoading/) + assert.match(customs, /createdResources\?\.phase3Loading,\s*\n\s*createdResources\?\.phase3ContainerLoading/) + assert.match(serviceCenter, /context\.createdResources\?\.phase3Loading\s*\|\|\s*context\.createdResources\?\.phase3ContainerLoading/) + assert.match(ocean, /await action\('放舱', 'release'/) +})