fix: 严格校验批量失败行号
This commit is contained in:
@@ -326,6 +326,28 @@ describe('batch-form-model', () => {
|
|||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('keeps every row when a runtime row index is not a number', () => {
|
||||||
|
const rows = [createBatchRow()];
|
||||||
|
const result = applyBatchResult(rows, {
|
||||||
|
successCount: 0,
|
||||||
|
failureCount: 1,
|
||||||
|
failures: [
|
||||||
|
{
|
||||||
|
clientKey: 'unknown-key',
|
||||||
|
rowIndex: '1' as unknown as number,
|
||||||
|
errorCode: 'INVALID_INDEX',
|
||||||
|
message: '行号类型错误',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
});
|
||||||
|
const generalError = '批量保存结果无法匹配,请核对后重试';
|
||||||
|
|
||||||
|
expect(result.rows).toEqual(rows);
|
||||||
|
expect(result.rowErrors).toEqual(
|
||||||
|
new Map(rows.map((row) => [row.clientKey, generalError])),
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
it('returns no rows or errors when every row succeeds', () => {
|
it('returns no rows or errors when every row succeeds', () => {
|
||||||
const result = applyBatchResult([createBatchRow()], {
|
const result = applyBatchResult([createBatchRow()], {
|
||||||
successCount: 1,
|
successCount: 1,
|
||||||
|
|||||||
@@ -111,6 +111,13 @@ export function applyBatchResult(
|
|||||||
const failedClientKeys = new Set<string>();
|
const failedClientKeys = new Set<string>();
|
||||||
const rowErrors = new Map<string, string>();
|
const rowErrors = new Map<string, string>();
|
||||||
for (const failure of result.failures) {
|
for (const failure of result.failures) {
|
||||||
|
if (
|
||||||
|
!Number.isInteger(failure.rowIndex) ||
|
||||||
|
failure.rowIndex < 1 ||
|
||||||
|
failure.rowIndex > rows.length
|
||||||
|
) {
|
||||||
|
return unsafeResult();
|
||||||
|
}
|
||||||
const rowByKey = rowByClientKey.get(failure.clientKey);
|
const rowByKey = rowByClientKey.get(failure.clientKey);
|
||||||
const rowByIndex = rows[failure.rowIndex - 1];
|
const rowByIndex = rows[failure.rowIndex - 1];
|
||||||
if (
|
if (
|
||||||
|
|||||||
Reference in New Issue
Block a user