test(phase3): provision dispatch and handoff evidence

This commit is contained in:
2026-08-24 14:01:02 +08:00
parent f041cf524b
commit 506cc69808
3 changed files with 44 additions and 8 deletions
@@ -17,6 +17,21 @@ async function post(context, path, body, operation) {
return context.request('POST', path, body, context.token, { 'Idempotency-Key': key(context, operation) })
}
async function uploadBillOfLading(context, appointmentId, index) {
const path = `${TRUCK_BASE}/${appointmentId}/attachments/upload?attachmentType=BILL_OF_LADING`
const form = new FormData()
const png = Uint8Array.from([137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,1,0,0,0,1,8,6,0,0,0,31,21,196,137,0,0,0,13,73,68,65,84,8,215,99,248,207,192,240,31,0,5,0,1,255,137,153,61,29,0,0,0,0,73,69,78,68,174,66,96,130])
form.append('file', new Blob([png], { type: 'image/png' }), `${context.marker}-truck-${index}.png`)
const response = await fetch(`${context.options.gateway}${path}`, {
method: 'POST', headers: { Accept: 'application/json', Authorization: `Bearer ${context.token}` },
body: form, signal: AbortSignal.timeout(60_000),
})
const body = await response.json()
return { method: 'POST', path, http: response.status, body,
requestId: body?.requestId || response.headers.get('x-request-id'),
traceId: body?.traceId || response.headers.get('x-trace-id') }
}
function oceanPayload(context, template, index) {
const source = template.oceanBooking
return { expectedVersion: 0, data: {
@@ -93,6 +108,9 @@ async function createTruck(context, oceanBooking, index) {
const response = await context.request('POST', TRUCK_BASE, truckPayload(context, oceanBooking, carrier, index))
const value = context.apiSuccess(MODULE, `创建拖车状态样本 ${index}`, response, '', OPTIONS)
if (!value?.id) throw new Error(`创建拖车样本 ${index} 失败`)
const billUpload = await uploadBillOfLading(context, id(value.id), index)
const billAttachment = context.apiSuccess(MODULE, `拖车状态样本 ${index} 上传提单附件`, billUpload, '', OPTIONS)
if (!billAttachment?.id) throw new Error(`拖车样本 ${index} 未上传有效提单附件`)
return value
}