test: align phase3 and overseas business acceptance
This commit is contained in:
@@ -248,14 +248,32 @@ async function procurementFlow(context, prerequisite) {
|
||||
|
||||
const rejected = await overseas(context, 'POST', '驳回本轮采购订单并进入合法终态',
|
||||
query(`${BASE}/overseas-procurements/${encodeURIComponent(owned.orderNo)}/review`, { customerId }),
|
||||
{ decision: 'REJECT', remark: `${context.marker}-REJECTED` })
|
||||
{ version: Number(afterConflictSummary?.version), decision: 'REJECT',
|
||||
idempotencyKey: `${context.marker}-procurement-review-reject`.slice(0, 255),
|
||||
remark: `${context.marker}-REJECTED` })
|
||||
const rejectedSummary = summary(rejected.data)
|
||||
context.assert(MODULE, '采购审核正向驳回成功', rejected.response,
|
||||
rejectedSummary?.status === 'REJECTED' && Number(rejectedSummary?.version) === Number(clearedSummary?.version) + 1,
|
||||
`status=${rejectedSummary?.status || 'missing'}, version=${rejectedSummary?.version ?? 'missing'}; ${trace(rejected.response)}`, OPTIONS)
|
||||
const rejectedReplayBody = { version: Number(afterConflictSummary?.version), decision: 'REJECT',
|
||||
idempotencyKey: `${context.marker}-procurement-review-reject`.slice(0, 255),
|
||||
remark: `${context.marker}-REJECTED` }
|
||||
const rejectedReplay = await overseas(context, 'POST', '采购审核同键同载荷精确重放',
|
||||
query(`${BASE}/overseas-procurements/${encodeURIComponent(owned.orderNo)}/review`, { customerId }),
|
||||
rejectedReplayBody)
|
||||
context.assert(MODULE, '采购审核重放复用终态且版本不漂移', rejectedReplay.response,
|
||||
summary(rejectedReplay.data)?.status === 'REJECTED'
|
||||
&& Number(summary(rejectedReplay.data)?.version) === Number(rejectedSummary?.version),
|
||||
trace(rejectedReplay.response), OPTIONS)
|
||||
const reviewHashConflict = await context.requestOverseas('POST',
|
||||
query(`${BASE}/overseas-procurements/${encodeURIComponent(owned.orderNo)}/review`, { customerId }),
|
||||
{ ...rejectedReplayBody, remark: 'DIFFERENT-DO-NOT-APPLY' })
|
||||
expectedConflict(context, '采购审核同键异载荷返回冲突', reviewHashConflict)
|
||||
const reverseReview = await context.requestOverseas('POST',
|
||||
query(`${BASE}/overseas-procurements/${encodeURIComponent(owned.orderNo)}/review`, { customerId }),
|
||||
{ decision: 'APPROVE', remark: 'REVERSE-DO-NOT-APPLY' })
|
||||
{ version: Number(rejectedSummary?.version), decision: 'APPROVE',
|
||||
idempotencyKey: `${context.marker}-procurement-review-terminal-reverse`.slice(0, 255),
|
||||
remark: 'REVERSE-DO-NOT-APPLY' })
|
||||
expectedConflict(context, '采购审核终态逆向返回冲突', reverseReview)
|
||||
|
||||
const final = await overseas(context, 'GET', '采购最终状态与流水回查', path)
|
||||
@@ -328,8 +346,11 @@ async function cancelMarkerOrder(context, resource, base, cancellableStatuses, l
|
||||
return
|
||||
}
|
||||
const statusPath = query(`${base}/${encodeURIComponent(resource.orderNo)}/status`, { customerId: resource.customerId })
|
||||
const keyScope = label === '卡车' ? 'truck' : 'looseboard'
|
||||
const cancelled = await overseas(context, 'PATCH', `取消 marker ${label}订单`, statusPath,
|
||||
{ version: Number(currentSummary.version), status: 'CANCELLED', remark: `${context.marker}-acceptance-cleanup` })
|
||||
{ version: Number(currentSummary.version), status: 'CANCELLED',
|
||||
idempotencyKey: `${context.marker}-${keyScope}-${resource.orderNo}-cancel`.slice(0, 255),
|
||||
remark: `${context.marker}-acceptance-cleanup` })
|
||||
const cancelledSummary = summary(cancelled.data)
|
||||
const verified = await overseas(context, 'GET', `回查 marker ${label}订单最终状态`, detailPath)
|
||||
const finalSummary = summary(verified.data)
|
||||
@@ -381,17 +402,29 @@ async function truckFlow(context, customerId) {
|
||||
afterStaleSummary?.destination === after?.destination && Number(afterStaleSummary?.version) === Number(after?.version),
|
||||
`destination=${afterStaleSummary?.destination || 'missing'}, version=${afterStaleSummary?.version ?? 'missing'}; ${trace(afterStale.response)}`, OPTIONS)
|
||||
|
||||
const statusPath = query(`${base}/${encodeURIComponent(orderNo)}/status`, { customerId })
|
||||
const forwarded = await overseas(context, 'PATCH', '卡车状态正向推进到待入仓', statusPath,
|
||||
{ version: Number(afterStaleSummary?.version), status: 'WAITING_INBOUND', remark: `${context.marker}-FORWARD` })
|
||||
const reviewPath = query(`${base}/${encodeURIComponent(orderNo)}/review`, { customerId })
|
||||
const reviewBody = { version: Number(afterStaleSummary?.version), decision: 'APPROVE',
|
||||
idempotencyKey: `${context.marker}-truck-review-approve`.slice(0, 255),
|
||||
remark: `${context.marker}-FORWARD` }
|
||||
const forwarded = await overseas(context, 'POST', '卡车审核正向推进到待入仓', reviewPath, reviewBody)
|
||||
const forwardedSummary = summary(forwarded.data)
|
||||
context.assert(MODULE, '卡车状态正向推进成功', forwarded.response,
|
||||
forwardedSummary?.status === 'WAITING_INBOUND'
|
||||
&& Number(forwardedSummary?.version) === Number(afterStaleSummary?.version) + 1,
|
||||
`status=${forwardedSummary?.status || 'missing'}, version=${forwardedSummary?.version ?? 'missing'}; ${trace(forwarded.response)}`, OPTIONS)
|
||||
const reversed = await context.requestOverseas('PATCH', statusPath,
|
||||
{ version: Number(forwardedSummary?.version), status: 'PENDING_REVIEW', remark: 'REVERSE-DO-NOT-APPLY' })
|
||||
expectedConflict(context, '卡车状态逆向回退返回冲突', reversed)
|
||||
const reviewReplay = await overseas(context, 'POST', '卡车审核同键同载荷精确重放', reviewPath, reviewBody)
|
||||
context.assert(MODULE, '卡车审核重放复用待入仓终态且版本不漂移', reviewReplay.response,
|
||||
summary(reviewReplay.data)?.status === 'WAITING_INBOUND'
|
||||
&& Number(summary(reviewReplay.data)?.version) === Number(forwardedSummary?.version),
|
||||
trace(reviewReplay.response), OPTIONS)
|
||||
const reviewMismatch = await context.requestOverseas('POST', reviewPath,
|
||||
{ ...reviewBody, remark: 'DIFFERENT-DO-NOT-APPLY' })
|
||||
expectedConflict(context, '卡车审核同键异载荷返回冲突', reviewMismatch)
|
||||
const reversed = await context.requestOverseas('POST', reviewPath,
|
||||
{ version: Number(forwardedSummary?.version), decision: 'REJECT',
|
||||
idempotencyKey: `${context.marker}-truck-review-terminal-reverse`.slice(0, 255),
|
||||
remark: 'REVERSE-DO-NOT-APPLY' })
|
||||
expectedConflict(context, '卡车审核终态逆向返回冲突', reversed)
|
||||
const history = await overseas(context, 'GET', '卡车状态冲突后流水回查', path)
|
||||
const historySummary = summary(history.data)
|
||||
const histories = Array.isArray(history.data?.histories) ? history.data.histories : []
|
||||
@@ -448,14 +481,30 @@ async function looseboardFlow(context, customerId) {
|
||||
|
||||
const statusPath = query(`${base}/${encodeURIComponent(orderNo)}/status`, { customerId })
|
||||
const forwarded = await overseas(context, 'PATCH', '散板状态正向推进到已派车', statusPath,
|
||||
{ version: Number(afterStaleSummary?.version), status: 'DISPATCHED', remark: `${context.marker}-FORWARD` })
|
||||
{ version: Number(afterStaleSummary?.version), status: 'DISPATCHED',
|
||||
idempotencyKey: `${context.marker}-looseboard-status-dispatched`.slice(0, 255),
|
||||
remark: `${context.marker}-FORWARD` })
|
||||
const forwardedSummary = summary(forwarded.data)
|
||||
context.assert(MODULE, '散板状态正向推进成功', forwarded.response,
|
||||
forwardedSummary?.status === 'DISPATCHED'
|
||||
&& Number(forwardedSummary?.version) === Number(afterStaleSummary?.version) + 1,
|
||||
`status=${forwardedSummary?.status || 'missing'}, version=${forwardedSummary?.version ?? 'missing'}; ${trace(forwarded.response)}`, OPTIONS)
|
||||
const forwardBody = { version: Number(afterStaleSummary?.version), status: 'DISPATCHED',
|
||||
idempotencyKey: `${context.marker}-looseboard-status-dispatched`.slice(0, 255),
|
||||
remark: `${context.marker}-FORWARD` }
|
||||
const forwardReplay = await overseas(context, 'PATCH', '散板状态同键同载荷精确重放', statusPath,
|
||||
forwardBody)
|
||||
context.assert(MODULE, '散板状态重放复用已派车终态且版本不漂移', forwardReplay.response,
|
||||
summary(forwardReplay.data)?.status === 'DISPATCHED'
|
||||
&& Number(summary(forwardReplay.data)?.version) === Number(forwardedSummary?.version),
|
||||
trace(forwardReplay.response), OPTIONS)
|
||||
const forwardMismatch = await context.requestOverseas('PATCH', statusPath,
|
||||
{ ...forwardBody, remark: 'DIFFERENT-DO-NOT-APPLY' })
|
||||
expectedConflict(context, '散板状态同键异载荷返回冲突', forwardMismatch)
|
||||
const reversed = await context.requestOverseas('PATCH', statusPath,
|
||||
{ version: Number(forwardedSummary?.version), status: 'PENDING_ACCEPTANCE', remark: 'REVERSE-DO-NOT-APPLY' })
|
||||
{ version: Number(forwardedSummary?.version), status: 'PENDING_ACCEPTANCE',
|
||||
idempotencyKey: `${context.marker}-looseboard-status-terminal-reverse`.slice(0, 255),
|
||||
remark: 'REVERSE-DO-NOT-APPLY' })
|
||||
expectedConflict(context, '散板状态逆向回退返回冲突', reversed)
|
||||
const history = await overseas(context, 'GET', '散板状态冲突后流水回查', path)
|
||||
const historySummary = summary(history.data)
|
||||
@@ -501,7 +550,9 @@ async function finalizePendingPurchase(context, resource) {
|
||||
const rejected = await overseas(context, 'POST', '驳回未完成的本轮采购订单',
|
||||
query(`${BASE}/overseas-procurements/${encodeURIComponent(resource.orderNo)}/review`,
|
||||
{ customerId: resource.customerId }),
|
||||
{ decision: 'REJECT', remark: `${context.marker}-prerequisite-cleanup` })
|
||||
{ version: Number(currentSummary?.version), decision: 'REJECT',
|
||||
idempotencyKey: `${context.marker}-procurement-review-cleanup`.slice(0, 255),
|
||||
remark: `${context.marker}-prerequisite-cleanup` })
|
||||
const rejectedSummary = summary(rejected.data)
|
||||
const verified = await overseas(context, 'GET', '回查未完成采购订单最终状态', path)
|
||||
const finalSummary = summary(verified.data)
|
||||
|
||||
Reference in New Issue
Block a user