test(admin): unwrap container workbench details
This commit is contained in:
@@ -22,6 +22,7 @@ function failure(response) {
|
|||||||
|| (response?.http === 200 && codeOf(response) !== '200')
|
|| (response?.http === 200 && codeOf(response) !== '200')
|
||||||
}
|
}
|
||||||
function records(page) { return Array.isArray(page?.records) ? page.records : [] }
|
function records(page) { return Array.isArray(page?.records) ? page.records : [] }
|
||||||
|
function containerRecord(value) { return value?.container || value }
|
||||||
|
|
||||||
async function waitForCompletedTask(context, taskId, warehouseId, attempts = 45) {
|
async function waitForCompletedTask(context, taskId, warehouseId, attempts = 45) {
|
||||||
let response = null
|
let response = null
|
||||||
@@ -260,7 +261,7 @@ export async function run(context) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const containerDetailResponse = await context.request('GET', `${DOMESTIC_CONTAINERS}/${containerId}`)
|
const containerDetailResponse = await context.request('GET', `${DOMESTIC_CONTAINERS}/${containerId}`)
|
||||||
const containerDetail = context.apiSuccess(MODULE, '回查货柜详情', containerDetailResponse, '', OPTIONS)
|
const containerDetail = containerRecord(context.apiSuccess(MODULE, '回查货柜详情', containerDetailResponse, '', OPTIONS))
|
||||||
context.assert(MODULE, '货柜详情保留候选货物路线约束', containerDetailResponse,
|
context.assert(MODULE, '货柜详情保留候选货物路线约束', containerDetailResponse,
|
||||||
(!containerDetail?.destinationWarehouseCode || !candidate.destinationWarehouseCode
|
(!containerDetail?.destinationWarehouseCode || !candidate.destinationWarehouseCode
|
||||||
|| containerDetail.destinationWarehouseCode === candidate.destinationWarehouseCode)
|
|| containerDetail.destinationWarehouseCode === candidate.destinationWarehouseCode)
|
||||||
@@ -400,7 +401,7 @@ export async function run(context) {
|
|||||||
if (!unlinkedTaskAbsent) return
|
if (!unlinkedTaskAbsent) return
|
||||||
|
|
||||||
const simulationBeforeLinkResponse = await context.request('GET', `${DOMESTIC_CONTAINERS}/${containerId}`)
|
const simulationBeforeLinkResponse = await context.request('GET', `${DOMESTIC_CONTAINERS}/${containerId}`)
|
||||||
const simulationBeforeLink = context.apiSuccess(MODULE, '预装确认前读取模拟柜最新版本', simulationBeforeLinkResponse, '', OPTIONS)
|
const simulationBeforeLink = containerRecord(context.apiSuccess(MODULE, '预装确认前读取模拟柜最新版本', simulationBeforeLinkResponse, '', OPTIONS))
|
||||||
if (!Number.isInteger(Number(simulationBeforeLink?.version))) return
|
if (!Number.isInteger(Number(simulationBeforeLink?.version))) return
|
||||||
|
|
||||||
const bookingCreate = await request(context, 'POST', '/api/platform/v1/ocean-bookings',
|
const bookingCreate = await request(context, 'POST', '/api/platform/v1/ocean-bookings',
|
||||||
@@ -474,7 +475,7 @@ export async function run(context) {
|
|||||||
const activeContainersResponse = await context.request('GET',
|
const activeContainersResponse = await context.request('GET',
|
||||||
`${DOMESTIC_CONTAINERS}?page=1&size=50&keyword=${encodeURIComponent(realContainerNo)}`)
|
`${DOMESTIC_CONTAINERS}?page=1&size=50&keyword=${encodeURIComponent(realContainerNo)}`)
|
||||||
const activeContainers = context.apiSuccess(MODULE, '关联后按真实柜号回查正常货柜列表', activeContainersResponse, '', OPTIONS)
|
const activeContainers = context.apiSuccess(MODULE, '关联后按真实柜号回查正常货柜列表', activeContainersResponse, '', OPTIONS)
|
||||||
const activeRealRows = records(activeContainers).filter((item) => item.containerNo === realContainerNo)
|
const activeRealRows = records(activeContainers).map(containerRecord).filter((item) => item.containerNo === realContainerNo)
|
||||||
context.assert(MODULE, '关联后列表仅保留模拟柜原地补全的一条 ACTIVE 操作身份', activeContainersResponse,
|
context.assert(MODULE, '关联后列表仅保留模拟柜原地补全的一条 ACTIVE 操作身份', activeContainersResponse,
|
||||||
activeRealRows.length === 1 && id(activeRealRows[0]?.id) === containerId,
|
activeRealRows.length === 1 && id(activeRealRows[0]?.id) === containerId,
|
||||||
`activeIds=${activeRealRows.map((item) => id(item?.id)).join('|') || 'none'}`, OPTIONS)
|
`activeIds=${activeRealRows.map((item) => id(item?.id)).join('|') || 'none'}`, OPTIONS)
|
||||||
|
|||||||
@@ -26,8 +26,10 @@ const matrix = read('../../../docs/国内货柜履约/货柜管理全链验收
|
|||||||
|
|
||||||
test('container acceptance reads the canonical domestic workbench route', () => {
|
test('container acceptance reads the canonical domestic workbench route', () => {
|
||||||
assert.match(containerLoadingAcceptance, /const DOMESTIC_CONTAINERS = `\$\{CONTAINERS\}\/domestic`/)
|
assert.match(containerLoadingAcceptance, /const DOMESTIC_CONTAINERS = `\$\{CONTAINERS\}\/domestic`/)
|
||||||
|
assert.match(containerLoadingAcceptance, /function containerRecord\(value\) \{ return value\?\.container \|\| value \}/)
|
||||||
assert.doesNotMatch(containerLoadingAcceptance, /request\('GET', `\$\{CONTAINERS\}\/\$\{containerId\}`\)/)
|
assert.doesNotMatch(containerLoadingAcceptance, /request\('GET', `\$\{CONTAINERS\}\/\$\{containerId\}`\)/)
|
||||||
assert.match(phase3LoadingAcceptance, /\/api\/platform\/v1\/containers\/domestic\/\$\{containerBookingId\}/)
|
assert.match(phase3LoadingAcceptance, /\/api\/platform\/v1\/containers\/domestic\/\$\{containerBookingId\}/)
|
||||||
|
assert.match(phase3LoadingAcceptance, /containerRecord\(context\.apiSuccess/)
|
||||||
})
|
})
|
||||||
|
|
||||||
test('DRAFT stores all five transport fields and release validates the persisted snapshot', () => {
|
test('DRAFT stores all five transport fields and release validates the persisted snapshot', () => {
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ function failure(response) {
|
|||||||
return [400, 401, 403, 404, 409, 503].includes(response?.http)
|
return [400, 401, 403, 404, 409, 503].includes(response?.http)
|
||||||
|| (response?.http === 200 && codeOf(response) !== '200')
|
|| (response?.http === 200 && codeOf(response) !== '200')
|
||||||
}
|
}
|
||||||
|
function containerRecord(value) { return value?.container || value }
|
||||||
|
|
||||||
async function ensureMatsonSupplier(context, records) {
|
async function ensureMatsonSupplier(context, records) {
|
||||||
const existing = records.find((value) => value?.id && value?.name === MATSON_SUPPLIER_NAME)
|
const existing = records.find((value) => value?.id && value?.name === MATSON_SUPPLIER_NAME)
|
||||||
@@ -507,7 +508,7 @@ export async function run(context) {
|
|||||||
`bookingId=${bookingId || 'missing'}, status=${bookingConfirmed?.oceanBooking?.status || 'missing'}`, OPTIONS)
|
`bookingId=${bookingId || 'missing'}, status=${bookingConfirmed?.oceanBooking?.status || 'missing'}`, OPTIONS)
|
||||||
if (!bookingId || !requirement?.id || !frozenTransportMatches) return
|
if (!bookingId || !requirement?.id || !frozenTransportMatches) return
|
||||||
const latestContainerResponse = await context.request('GET', `/api/platform/v1/containers/domestic/${containerBookingId}`)
|
const latestContainerResponse = await context.request('GET', `/api/platform/v1/containers/domestic/${containerBookingId}`)
|
||||||
const latestContainer = context.apiSuccess(MODULE, '合并前读取模拟柜最新版本', latestContainerResponse, '', OPTIONS)
|
const latestContainer = containerRecord(context.apiSuccess(MODULE, '合并前读取模拟柜最新版本', latestContainerResponse, '', OPTIONS))
|
||||||
const linkResponse = await request(context, 'POST', `/api/platform/v1/containers/${containerBookingId}/ocean-booking-link`, {
|
const linkResponse = await request(context, 'POST', `/api/platform/v1/containers/${containerBookingId}/ocean-booking-link`, {
|
||||||
oceanBookingId: bookingId, requirementId: id(requirement.id),
|
oceanBookingId: bookingId, requirementId: id(requirement.id),
|
||||||
...(LATE_CONTAINER_GATE_ONLY ? {} : { containerNo }),
|
...(LATE_CONTAINER_GATE_ONLY ? {} : { containerNo }),
|
||||||
|
|||||||
Reference in New Issue
Block a user