test(acceptance): reconcile dropship runtime facts
This commit is contained in:
@@ -536,6 +536,29 @@ async function requestWithHeaders(context, method, path, body, extraHeaders) {
|
||||
}
|
||||
}
|
||||
|
||||
async function updateConfirmedPackageCount(context, measurementPath, itemId, body) {
|
||||
const updatePath = measurementPath.replace(/\?.*$/, '')
|
||||
+ `/items/${encodeURIComponent(itemId)}/confirmed-package-count?${measurementPath.split('?')[1] || ''}`
|
||||
let lastResponse = null
|
||||
for (let attempt = 1; attempt <= 2; attempt += 1) {
|
||||
lastResponse = await context.request('PUT', updatePath, body)
|
||||
if (lastResponse?.http !== 0) return lastResponse
|
||||
const recovered = await context.request('GET', measurementPath)
|
||||
const detail = recovered?.http === 200 && String(recovered?.body?.code) === '200'
|
||||
? recovered.body?.data : null
|
||||
const item = detail?.items?.find((candidate) => asId(candidate?.id) === asId(itemId))
|
||||
if (Number(item?.confirmedPackageCount) === Number(body.confirmedPackageCount)
|
||||
&& Number(detail?.version) > Number(body.measurementVersion)) {
|
||||
return {
|
||||
...recovered, method: 'GET', path: measurementPath, recoveredFromTransportFailure: true,
|
||||
body: { ...recovered.body, data: { ...item, measurementVersion: Number(detail.version) } },
|
||||
}
|
||||
}
|
||||
if (attempt < 2) await new Promise((resolve) => setTimeout(resolve, 500))
|
||||
}
|
||||
return lastResponse
|
||||
}
|
||||
|
||||
function finishScenario(context, start) {
|
||||
const steps = context.steps.slice(start)
|
||||
context.scenarios.push({
|
||||
@@ -651,11 +674,10 @@ export async function run(context) {
|
||||
&& closeTo(firstItem?.heightCm, firstDimensions.height),
|
||||
`itemFound=${Boolean(firstItem)}, imageFileId=${asId(firstItem?.intelligentImageFileId) || 'missing'}`, OPTIONS)
|
||||
|
||||
const countResponse = await context.request('PUT',
|
||||
`/api/platform/v1/first-leg/inbounds/${inboundId}/measurement/items/${firstScan.itemId}/confirmed-package-count?${query(tenantId)}`,
|
||||
const countResponse = await updateConfirmedPackageCount(context, measurementPath, firstScan.itemId,
|
||||
{ measurementVersion: Number(firstScan.measurementVersion), confirmedPackageCount: originalPackageCount })
|
||||
const countResult = context.apiSuccess(MODULE, '人工确认当前测量代表箱数', countResponse,
|
||||
`confirmedPackageCount=${originalPackageCount}`, OPTIONS)
|
||||
`confirmedPackageCount=${originalPackageCount}, transportRecovered=${countResponse?.recoveredFromTransportFailure === true}`, OPTIONS)
|
||||
context.assert(MODULE, '人工箱数更新且测量版本递增', countResponse,
|
||||
Number(countResult?.confirmedPackageCount) === originalPackageCount
|
||||
&& Number(countResult?.measurementVersion) === Number(firstScan.measurementVersion) + 1,
|
||||
@@ -722,8 +744,7 @@ export async function run(context) {
|
||||
`detailCount=${incrementalDetailCount}, packageCounts=${detailPackageCounts.join('+')}, frozen=${originalPackageCount}`, OPTIONS)
|
||||
if (expectedPackages === originalPackageCount) {
|
||||
const firstDetailPackageCount = detailPackageCounts[0]
|
||||
const resetFirstCountResponse = await context.request('PUT',
|
||||
`/api/platform/v1/first-leg/inbounds/${inboundId}/measurement/items/${firstScan.itemId}/confirmed-package-count?${query(tenantId)}`,
|
||||
const resetFirstCountResponse = await updateConfirmedPackageCount(context, measurementPath, firstScan.itemId,
|
||||
{ measurementVersion: Number(measured?.version), confirmedPackageCount: firstDetailPackageCount })
|
||||
const resetFirstCount = context.apiSuccess(MODULE,
|
||||
'增量 fixture 将首条货物确认箱数恢复为自身箱数', resetFirstCountResponse,
|
||||
@@ -751,8 +772,7 @@ export async function run(context) {
|
||||
&& asId(scanned?.itemId) !== asId(firstScan.itemId),
|
||||
`itemId=${asId(scanned?.itemId) || 'missing'}, inboundDetailId=${asId(scanned?.inboundDetailId) || 'pending-query'}`, OPTIONS)
|
||||
if (!scanned?.itemId) continue
|
||||
const countDetailResponse = await context.request('PUT',
|
||||
`/api/platform/v1/first-leg/inbounds/${inboundId}/measurement/items/${scanned.itemId}/confirmed-package-count?${query(tenantId)}`,
|
||||
const countDetailResponse = await updateConfirmedPackageCount(context, measurementPath, scanned.itemId,
|
||||
{ measurementVersion: Number(scanned.measurementVersion), confirmedPackageCount: detailPackageCount })
|
||||
const countDetail = context.apiSuccess(MODULE,
|
||||
`增量第${detailIndex + 1}条货物确认自身箱数`, countDetailResponse,
|
||||
|
||||
Reference in New Issue
Block a user