test: align manual booking list dependencies

This commit is contained in:
2026-08-14 23:14:11 +08:00
parent 32e9b69556
commit 5bb8f4db6d
6 changed files with 87 additions and 8 deletions
@@ -2,6 +2,8 @@ const MODULE = 'manual-state-ocean-trucking'
const OPTIONS = { scenario: 'manual-ocean-trucking-state-matrix', deploymentBlocker: true }
const OCEAN_BASE = '/api/platform/v1/ocean-bookings'
const TRUCK_BASE = '/api/platform/v1/truck-appointments'
const OCEAN_LIST_STATUSES = ['CONFIRMED', 'CHANGE_PENDING', 'RELEASED', 'CANCELLED']
const OCEAN_HIDDEN_STATUSES = ['DRAFT', 'SUBMITTED', 'FAILED']
const OCEAN_STATUSES = ['DRAFT', 'SUBMITTED', 'CONFIRMED', 'RELEASED', 'FAILED', 'CHANGE_PENDING', 'CANCELLED']
const TRUCK_STATUSES = ['DRAFT', 'PENDING_DISPATCH', 'DISPATCHED', 'PICKUP_IN_PROGRESS', 'ARRIVED_WAREHOUSE',
'LOADING', 'DEPARTED', 'COMPLETED', 'RESCHEDULED', 'EXCEPTION', 'CANCELLED']
@@ -128,6 +130,19 @@ async function verify(context, base, status, resourceId) {
`status=${status}, id=${resourceId}`, OPTIONS)
}
async function verifyHiddenOcean(context, status, resourceId) {
const listResponse = await context.request('GET', `${OCEAN_BASE}?page=1&size=100&status=${status}`)
context.assert(MODULE, `${status} 不进入正式订舱列表筛选`, listResponse,
listResponse?.http === 200 && code(listResponse) === 'A0400',
`HTTP=${listResponse?.http ?? 'missing'}, code=${code(listResponse)}, id=${resourceId}`, OPTIONS)
const detailResponse = await context.request('GET', `${OCEAN_BASE}/${resourceId}`)
const detail = context.apiSuccess(MODULE, `${status} 后台样本仅通过详情契约验证`, detailResponse, '', OPTIONS)
context.assert(MODULE, `${status} 后台详情身份与状态正确`, detailResponse,
id(detail?.oceanBooking?.id) === resourceId && detail?.oceanBooking?.status === status,
`id=${id(detail?.oceanBooking?.id) || 'missing'}, actual=${detail?.oceanBooking?.status || 'missing'}`, OPTIONS)
}
export async function run(context, matrix = context.createdResources.manualStateMatrix) {
const sourceOceanId = id(context.createdResources?.oceanBooking?.id)
if (!sourceOceanId) throw new Error('缺少现有订舱生命周期模块生成的模板资源')
@@ -136,17 +151,26 @@ export async function run(context, matrix = context.createdResources.manualState
if (!template?.oceanBooking || !template?.parties?.length || !template?.containerRequirements?.length) {
throw new Error('订舱模板缺少渠道、仓库、参与方或箱型需求')
}
matrix.pages.oceanBookings = { requiredStatuses: OCEAN_STATUSES, fixtures: {} }
matrix.pages.oceanBookings = { requiredStatuses: OCEAN_LIST_STATUSES, fixtures: {}, hiddenFixtures: {} }
for (const [index, status] of OCEAN_STATUSES.entries()) {
const value = await buildOcean(context, template, status, index)
const resourceId = id(value?.oceanBooking?.id); const actual = value?.oceanBooking?.status
matrix.pages.oceanBookings.fixtures[status] = {
id: resourceId, status: actual, detailPath: `/ocean-bookings/${resourceId}`,
context.assert(MODULE, `订舱保留 ${status}`, null, resourceId && actual === status,
`id=${resourceId || 'missing'}, actual=${actual || 'missing'}`, OPTIONS)
if (!resourceId || actual !== status) continue
const fixtureValue = {
id: resourceId, status: actual,
customerId: id(value?.oceanBooking?.customerId), customerName: value?.oceanBooking?.customerName,
warehouseId: id(value?.oceanBooking?.warehouseId),
}
context.assert(MODULE, `订舱保留 ${status}`, null, resourceId && actual === status,
`id=${resourceId || 'missing'}, actual=${actual || 'missing'}`, OPTIONS)
if (OCEAN_HIDDEN_STATUSES.includes(status)) {
matrix.pages.oceanBookings.hiddenFixtures[status] = fixtureValue
await verifyHiddenOcean(context, status, resourceId)
continue
}
matrix.pages.oceanBookings.fixtures[status] = {
...fixtureValue, detailPath: `/ocean-bookings/${resourceId}`,
}
await verify(context, OCEAN_BASE, status, resourceId)
}