test(admin): align phase3 loading producer contract
This commit is contained in:
@@ -196,8 +196,8 @@ export async function run(context) {
|
|||||||
|
|
||||||
const claimedPlanResponse = await context.request('GET', `${SMART}/plans/${planId}`)
|
const claimedPlanResponse = await context.request('GET', `${SMART}/plans/${planId}`)
|
||||||
const claimedPlan = context.apiSuccess(MODULE, '领取后回查装柜计划', claimedPlanResponse, '', OPTIONS)
|
const claimedPlan = context.apiSuccess(MODULE, '领取后回查装柜计划', claimedPlanResponse, '', OPTIONS)
|
||||||
context.assert(MODULE, '仅领取任务不提前开始装柜', claimedPlanResponse,
|
context.assert(MODULE, '领取任务后计划进入 LOADING 且版本递增', claimedPlanResponse,
|
||||||
claimedPlan?.status === 'EDITING' && Number(claimedPlan?.version) === Number(pushed?.version),
|
claimedPlan?.status === 'LOADING' && Number(claimedPlan?.version) === Number(pushed?.version) + 1,
|
||||||
`status=${claimedPlan?.status || 'missing'}, version=${claimedPlan?.version ?? 'missing'}`, OPTIONS)
|
`status=${claimedPlan?.status || 'missing'}, version=${claimedPlan?.version ?? 'missing'}`, OPTIONS)
|
||||||
|
|
||||||
const batchPath = `${PDA}/tasks/${taskId}/batch`
|
const batchPath = `${PDA}/tasks/${taskId}/batch`
|
||||||
|
|||||||
@@ -203,8 +203,8 @@ export async function run(context) {
|
|||||||
|
|
||||||
const claimedPlanResponse = await context.request('GET', `${smartLoadingBase}/plans/${loadingPlanId}`)
|
const claimedPlanResponse = await context.request('GET', `${smartLoadingBase}/plans/${loadingPlanId}`)
|
||||||
const claimedPlan = context.apiSuccess(MODULE, '领取后回查柜次计划', claimedPlanResponse, '', OPTIONS)
|
const claimedPlan = context.apiSuccess(MODULE, '领取后回查柜次计划', claimedPlanResponse, '', OPTIONS)
|
||||||
context.assert(MODULE, '仅领取 PDA 任务不提前开始装柜', claimedPlanResponse,
|
context.assert(MODULE, '领取 PDA 任务后计划进入 LOADING 且版本递增', claimedPlanResponse,
|
||||||
claimedPlan?.status === 'EDITING' && Number(claimedPlan?.version) === Number(pushedLoadingPlan?.version),
|
claimedPlan?.status === 'LOADING' && Number(claimedPlan?.version) === Number(pushedLoadingPlan?.version) + 1,
|
||||||
`status=${claimedPlan?.status || 'missing'}, version=${claimedPlan?.version ?? 'missing'}`, OPTIONS)
|
`status=${claimedPlan?.status || 'missing'}, version=${claimedPlan?.version ?? 'missing'}`, OPTIONS)
|
||||||
|
|
||||||
const batchPath = `${pdaBase}/tasks/${canonicalTaskId}/batch`
|
const batchPath = `${pdaBase}/tasks/${canonicalTaskId}/batch`
|
||||||
@@ -321,8 +321,13 @@ export async function run(context) {
|
|||||||
const confirm = await request(context, 'POST', `${base}/preload/confirm?tenantId=${encodeURIComponent(tenantId)}`,
|
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) })
|
{ expectedVersion: Number(confirmingData.preloadPlan.version) }, { 'Idempotency-Key': `${context.marker}-p3-confirm`.slice(0, 128) })
|
||||||
const confirmed = context.apiSuccess(MODULE, '确认预装并进入装柜中', confirm, '', OPTIONS)
|
const confirmed = context.apiSuccess(MODULE, '确认预装并进入装柜中', confirm, '', OPTIONS)
|
||||||
context.assert(MODULE, '预装确认推进主状态 LOADING 和计划 CONFIRMED', confirm,
|
context.assert(MODULE, directPdaCompletion
|
||||||
confirmed?.mainStatus === 'LOADING' && confirmed?.preloadPlan?.status === 'CONFIRMED'
|
? '装柜已开始时预装确认保持 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,
|
&& Number(confirmed?.preloadPlan?.version) === 3,
|
||||||
`mainStatus=${confirmed?.mainStatus || 'missing'}, planStatus=${confirmed?.preloadPlan?.status || 'missing'}, version=${confirmed?.preloadPlan?.version ?? 'missing'}`, OPTIONS)
|
`mainStatus=${confirmed?.mainStatus || 'missing'}, planStatus=${confirmed?.preloadPlan?.status || 'missing'}, version=${confirmed?.preloadPlan?.version ?? 'missing'}`, OPTIONS)
|
||||||
if (confirmed?.mainStatus !== 'LOADING') return
|
if (confirmed?.mainStatus !== 'LOADING') return
|
||||||
|
|||||||
@@ -70,7 +70,7 @@ test('container loading follows push, claim, real pick, completed sequence', ()
|
|||||||
assert.match(value, /containerDetail\?\.planStatus === 'WAIT_LOADING'/)
|
assert.match(value, /containerDetail\?\.planStatus === 'WAIT_LOADING'/)
|
||||||
assertOrder(value, [
|
assertOrder(value, [
|
||||||
"pushed?.status === 'EDITING'",
|
"pushed?.status === 'EDITING'",
|
||||||
"claimedPlan?.status === 'EDITING'",
|
"claimedPlan?.status === 'LOADING'",
|
||||||
"const pickResponse = await request",
|
"const pickResponse = await request",
|
||||||
"finalPlan?.status === 'COMPLETED'",
|
"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')
|
const value = source('./phase3-loading.mjs')
|
||||||
assertOrder(value, [
|
assertOrder(value, [
|
||||||
"pushedLoadingPlan?.status === 'EDITING'",
|
"pushedLoadingPlan?.status === 'EDITING'",
|
||||||
"claimedPlan?.status === 'EDITING'",
|
"claimedPlan?.status === 'LOADING'",
|
||||||
"const canonicalPick = await request",
|
"const canonicalPick = await request",
|
||||||
"pickedPlan?.status === 'COMPLETED'",
|
"pickedPlan?.status === 'COMPLETED'",
|
||||||
"const confirming = await request",
|
"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/)
|
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'/)
|
||||||
|
})
|
||||||
|
|||||||
Reference in New Issue
Block a user