test(order): assert multipart rejection for oversized imports
This commit is contained in:
@@ -271,11 +271,11 @@ function importHarness(fault = '') {
|
|||||||
addDraft('leaked-first', parsed[0])
|
addDraft('leaked-first', parsed[0])
|
||||||
}
|
}
|
||||||
if (fault === 'changed-existing-row') orders.get('second').order.customerRemark = 'incorrectly-overwritten'
|
if (fault === 'changed-existing-row') orders.get('second').order.customerRemark = 'incorrectly-overwritten'
|
||||||
} else code = 'A0422'
|
} else code = name === 'reject over five MiB' ? 'A0400' : 'A0422'
|
||||||
} else if (request.path.includes('?page=')) {
|
} else if (request.path.includes('?page=')) {
|
||||||
data = { page: 1, total: orders.size, records: [...orders.keys()].map(orderId => ({ orderId })) }
|
data = { page: 1, total: orders.size, records: [...orders.keys()].map(orderId => ({ orderId })) }
|
||||||
} else data = structuredClone(orders.get(request.path.split('/').at(-1)))
|
} else data = structuredClone(orders.get(request.path.split('/').at(-1)))
|
||||||
const response = { status: 200, headers: new Map([['content-type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet']]), bytes, json: { code, data } }
|
const response = { status: 200, headers: new Map([['content-type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet']]), bytes, json: { code, data, message: code === 'A0400' ? '上传文件超过服务允许大小' : undefined } }
|
||||||
validate(response); return response
|
validate(response); return response
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -2441,7 +2441,11 @@ async function orderExcelImportModule() {
|
|||||||
missingHeader.set('xl/worksheets/sheet1.xml', missingHeader.get('xl/worksheets/sheet1.xml').replace(/<row\b[^>]*\br="2"[^>]*>[\s\S]*?<\/row>/, '<row r="2"/>'))
|
missingHeader.set('xl/worksheets/sheet1.xml', missingHeader.get('xl/worksheets/sheet1.xml').replace(/<row\b[^>]*\br="2"[^>]*>[\s\S]*?<\/row>/, '<row r="2"/>'))
|
||||||
invalidCases.push(['missing Chinese headers', orderZipWrite(missingHeader), 'orders.xlsx'])
|
invalidCases.push(['missing Chinese headers', orderZipWrite(missingHeader), 'orders.xlsx'])
|
||||||
for (const [name, bytes, filename] of invalidCases) {
|
for (const [name, bytes, filename] of invalidCases) {
|
||||||
await upload(`reject ${name}`, 'ATOMIC', newIdempotencyKey('excel-invalid'), bytes, rejection('A0422'), filename)
|
await upload(`reject ${name}`, 'ATOMIC', newIdempotencyKey('excel-invalid'), bytes, response => {
|
||||||
|
// Multipart rejects the oversized file before the import service validates its contents.
|
||||||
|
rejection(name === 'over five MiB' ? 'A0400' : 'A0422')(response)
|
||||||
|
if (name === 'over five MiB') assertTrue(/上传文件.*(?:超过|大小)/.test(response.json.message), 'explicit upload size rejection')
|
||||||
|
}, filename)
|
||||||
await importOrderSet(`${name}: order set unchanged`, seeded)
|
await importOrderSet(`${name}: order set unchanged`, seeded)
|
||||||
}
|
}
|
||||||
const forged = makeRow('forged-catalog'); forged[3] = `FORGED-${marker}`
|
const forged = makeRow('forged-catalog'); forged[3] = `FORGED-${marker}`
|
||||||
|
|||||||
Reference in New Issue
Block a user