From 2a9f4d5b216a8ad6d5da06aa2aa5fc663b9bffc1 Mon Sep 17 00:00:00 2001 From: Smart-Codi Date: Tue, 5 Apr 2022 23:43:47 -0400 Subject: [PATCH] fix: Dashboard import holding issue (#19112) * fix dashboard import holding issue * resolve comment --- superset-frontend/src/views/CRUD/hooks.ts | 5 +++- .../src/views/CRUD/utils.test.tsx | 25 +++++++++++++++++++ superset-frontend/src/views/CRUD/utils.tsx | 20 ++++++++------- 3 files changed, 40 insertions(+), 10 deletions(-) diff --git a/superset-frontend/src/views/CRUD/hooks.ts b/superset-frontend/src/views/CRUD/hooks.ts index 69b4f42431a38..97df78ecb24f5 100644 --- a/superset-frontend/src/views/CRUD/hooks.ts +++ b/superset-frontend/src/views/CRUD/hooks.ts @@ -450,7 +450,10 @@ export function useImportResource( t( 'An error occurred while importing %s: %s', resourceLabel, - error.errors.map(payload => payload.message).join('\n'), + [ + ...error.errors.map(payload => payload.message), + t('Please re-export your file and try importing again'), + ].join('\n'), ), ); } else { diff --git a/superset-frontend/src/views/CRUD/utils.test.tsx b/superset-frontend/src/views/CRUD/utils.test.tsx index 493c781d9368e..b30db757ea6d3 100644 --- a/superset-frontend/src/views/CRUD/utils.test.tsx +++ b/superset-frontend/src/views/CRUD/utils.test.tsx @@ -46,6 +46,25 @@ const terminalErrors = { ], }; +const terminalErrorsWithOnlyIssuesCode = { + errors: [ + { + message: 'Error importing database', + error_type: 'GENERIC_COMMAND_ERROR', + level: 'warning', + extra: { + issue_codes: [ + { + code: 1010, + message: + 'Issue 1010 - Superset encountered an error while running a command.', + }, + ], + }, + }, + ], +}; + const overwriteNeededErrors = { errors: [ { @@ -146,6 +165,12 @@ test('detects if the error message is terminal or if it requires uses interventi expect(isTerminal).toBe(false); }); +test('error message is terminal when the "extra" field contains only the "issue_codes" key', () => { + expect(hasTerminalValidation(terminalErrorsWithOnlyIssuesCode.errors)).toBe( + true, + ); +}); + test('does not ask for password when the import type is wrong', () => { const error = { errors: [ diff --git a/superset-frontend/src/views/CRUD/utils.tsx b/superset-frontend/src/views/CRUD/utils.tsx index 96d9bd35b4368..5a1849929a6c4 100644 --- a/superset-frontend/src/views/CRUD/utils.tsx +++ b/superset-frontend/src/views/CRUD/utils.tsx @@ -409,15 +409,17 @@ export const getAlreadyExists = (errors: Record[]) => .flat(); export const hasTerminalValidation = (errors: Record[]) => - errors.some( - error => - !Object.entries(error.extra) - .filter(([key, _]) => key !== 'issue_codes') - .every( - ([_, payload]) => - isNeedsPassword(payload) || isAlreadyExists(payload), - ), - ); + errors.some(error => { + const noIssuesCodes = Object.entries(error.extra).filter( + ([key]) => key !== 'issue_codes', + ); + + if (noIssuesCodes.length === 0) return true; + + return !noIssuesCodes.every( + ([, payload]) => isNeedsPassword(payload) || isAlreadyExists(payload), + ); + }); export const checkUploadExtensions = ( perm: Array,