From f37ad6d83dd62a0edb3e11f58589395a6e751e45 Mon Sep 17 00:00:00 2001 From: ouyangxq <775153912@qq.com> Date: Sat, 8 Aug 2026 20:42:34 +0800 Subject: [PATCH] test(admin): accept explicit duplicate import rejection --- scripts/admin-test-env-modules/master-data.mjs | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/scripts/admin-test-env-modules/master-data.mjs b/scripts/admin-test-env-modules/master-data.mjs index 4c02d72e1..85a505861 100644 --- a/scripts/admin-test-env-modules/master-data.mjs +++ b/scripts/admin-test-env-modules/master-data.mjs @@ -209,16 +209,25 @@ export async function run(context) { { scenario: 'valid-import', deploymentBlocker: first.http === 404 || first.http === 405 || first.http === 503 }) const second = await uploadTemplate(context, importPath, fixtureBytes, `${context.marker}-${name}-replay.xlsx`) const secondData = second.body?.data + const replayCode = String(second.body?.code ?? '') + const replayMessage = String(second.body?.message ?? '') + const idempotentSuccess = replayCode === '200' + && (importedCount(secondData) < 1 || (Array.isArray(secondData?.errors) && secondData.errors.length > 0)) + const explicitValidationConflict = replayCode === 'A0422' + && replayMessage === `${name}导入文件校验失败` context.addStep(module, `${name}重复导入返回明确冲突`, second, - second.http === 200 && String(second.body?.code) === '200' && (importedCount(secondData) < 1 || (Array.isArray(secondData?.errors) && secondData.errors.length > 0)), - `firstImported=${importedCount(firstData)}, replayImported=${importedCount(secondData)}, errors=${secondData?.errors?.length ?? 'n/a'}`, + second.http === 200 && (idempotentSuccess || explicitValidationConflict), + `HTTP=${second.http}, code=${replayCode || 'missing'}, message=${replayMessage || 'missing'}, firstImported=${importedCount(firstData)}, replayImported=${importedCount(secondData)}, errors=${secondData?.errors?.length ?? 'n/a'}`, { scenario: 'valid-import', deploymentBlocker: second.http === 404 || second.http === 405 || second.http === 503 }) const key = name === '仓库' ? 'warehouseCode' : name === '快递公司' ? 'companyCode' : 'partnerCode' const value = fixture.values[0] const listPath = name === '仓库' ? `/api/platform/v1/warehouse-admin?page=1&size=20&keyword=${encodeURIComponent(value)}` : name === '快递公司' ? `/api/platform/v1/express-companies?page=1&size=20&keyword=${encodeURIComponent(value)}` : `/api/platform/v1/partners?page=1&size=20&keyword=${encodeURIComponent(value)}` const listed = await context.request('GET', listPath) const listedData = context.apiSuccess(module, `${name}导入列表回查`, listed, `keyword=${value}`) - const item = listedData?.records?.find((row) => row[key] === value) + const matchingItems = listedData?.records?.filter((row) => row[key] === value) ?? [] + const item = matchingItems[0] + context.assert(module, `${name}重复导入后零新增`, listed, matchingItems.length === 1, + `matchingRecords=${matchingItems.length}`, { scenario: 'valid-import', deploymentBlocker: listed.http === 404 || listed.http === 405 || listed.http === 503 }) context.assert(module, `${name}导入资源回查 marker`, listed, Boolean(item), `found=${Boolean(item)}, id=${item?.id ?? 'missing'}`, { scenario: 'valid-import', deploymentBlocker: listed.http === 404 || listed.http === 405 || listed.http === 503 }) if (item?.id) { const disablePath = name === '仓库' ? `/api/platform/v1/warehouse-admin/${item.id}/status?tenantId=0&status=INACTIVE` : name === '快递公司' ? `/api/platform/v1/express-companies/${item.id}/status?tenantId=0` : `/api/platform/v1/partners/${item.id}/status?tenantId=0`