diff --git a/redisinsight/ui/src/pages/home/components/AddInstanceForm/InstanceForm/InstanceForm.tsx b/redisinsight/ui/src/pages/home/components/AddInstanceForm/InstanceForm/InstanceForm.tsx index c9af186d30..42e85eef0a 100644 --- a/redisinsight/ui/src/pages/home/components/AddInstanceForm/InstanceForm/InstanceForm.tsx +++ b/redisinsight/ui/src/pages/home/components/AddInstanceForm/InstanceForm/InstanceForm.tsx @@ -448,7 +448,7 @@ const AddStandaloneForm = (props: Props) => { label={( Connection Type: - + {capitalize(connectionType)} diff --git a/tests/e2e/common-actions/databases-actions.ts b/tests/e2e/common-actions/databases-actions.ts new file mode 100644 index 0000000000..3167ce1b2c --- /dev/null +++ b/tests/e2e/common-actions/databases-actions.ts @@ -0,0 +1,50 @@ +import { t } from 'testcafe'; +import { MyRedisDatabasePage } from '../pageObjects'; + +const myRedisDatabasePage = new MyRedisDatabasePage(); + +export class DatabasesActions { + /** + * Verify that databases are displayed + * @param databases The list of databases to verify + */ + async verifyDatabasesDisplayed(databases: string[]): Promise { + for (const db of databases) { + const databaseName = myRedisDatabasePage.dbNameList.withText(db); + await t.expect(databaseName.exists).ok(`"${db}" database doesn't exist`); + } + } + + /** + * Import database using file + * @param fileParameters The arguments of imported file + */ + async importDatabase(fileParameters: ImportDatabaseParameters): Promise { + await t + .click(myRedisDatabasePage.importDatabasesBtn) + .setFilesToUpload(myRedisDatabasePage.importDatabaseInput, [fileParameters.path]) + .click(myRedisDatabasePage.submitImportBtn) + .expect(myRedisDatabasePage.successImportMessage.exists).ok(`Successfully added ${fileParameters.type} databases message not displayed`); + } + +} + +/** + * Import database parameters + * @param path The path to file + * @param type The type of application + * @param dbNames The names of databases + * @param userName The username of db + * @param password The password of db + * @param connectionType The connection type of db + * @param fileName The file name + */ +export type ImportDatabaseParameters = { + path: string, + type?: string, + dbNames?: string[], + userName?: string, + password?: string, + connectionType?: string, + fileName?: string +}; diff --git a/tests/e2e/helpers/api/api-database.ts b/tests/e2e/helpers/api/api-database.ts index 4f87be5e4c..8cd2693be8 100644 --- a/tests/e2e/helpers/api/api-database.ts +++ b/tests/e2e/helpers/api/api-database.ts @@ -153,6 +153,20 @@ export async function deleteStandaloneDatabaseApi(databaseParameters: AddNewData .expect(200); } +/** + * Delete Standalone databases using their names through api + * @param databaseNames Databases names + */ +export async function deleteStandaloneDatabasesByNamesApi(databaseNames: string[]): Promise { + databaseNames.forEach(async databaseName => { + const databaseId = await getDatabaseByName(databaseName); + await request(endpoint).delete('/databases') + .send({ 'ids': [`${databaseId}`] }) + .set('Accept', 'application/json') + .expect(200); + }); +} + /** * Delete database from OSS Cluster through api * @param databaseParameters The database parameters diff --git a/tests/e2e/pageObjects/add-redis-database-page.ts b/tests/e2e/pageObjects/add-redis-database-page.ts index ff93abfd52..22fcad871b 100644 --- a/tests/e2e/pageObjects/add-redis-database-page.ts +++ b/tests/e2e/pageObjects/add-redis-database-page.ts @@ -28,6 +28,7 @@ export class AddRedisDatabasePage { sentinelDatabaseNavigation = Selector('[data-testid=database-nav-group]'); cloneSentinelDatabaseNavigation = Selector('[data-testid=database-nav-group-clone]'); cancelButton = Selector('[data-testid=btn-cancel]'); + showPasswordBtn = Selector('[aria-label^="Show password"]'); //TEXT INPUTS (also referred to as 'Text fields') hostInput = Selector('[data-testid=host]'); portInput = Selector('[data-testid=port]'); @@ -42,6 +43,7 @@ export class AddRedisDatabasePage { databaseIndexMessage = Selector('[data-testid=db-index-message]'); primaryGroupNameInput = Selector('[data-testid=primary-group]'); masterGroupPassword = Selector('[data-testid=sentinel-master-password]'); + connectionType = Selector('[data-testid=connection-type]'); //Links buildFromSource = Selector('a').withExactText('Build from source'); buildFromDocker = Selector('a').withExactText('Docker'); diff --git a/tests/e2e/pageObjects/my-redis-databases-page.ts b/tests/e2e/pageObjects/my-redis-databases-page.ts index e749a9d795..668c1d5f40 100644 --- a/tests/e2e/pageObjects/my-redis-databases-page.ts +++ b/tests/e2e/pageObjects/my-redis-databases-page.ts @@ -15,7 +15,7 @@ export class MyRedisDatabasePage { githubButton = Selector('[data-testid=github-repo-icon]'); browserButton = Selector('[data-testid=browser-page-btn]'); pubSubButton = Selector('[data-testid=pub-sub-page-btn]'); - myRedisDBButton = Selector('[data-test-subj=home-page-btn]'); + myRedisDBButton = Selector('[data-test-subj=home-page-btn]', { timeout: 1000 }); deleteDatabaseButton = Selector('[data-testid^=delete-instance-]'); confirmDeleteButton = Selector('[data-testid^=delete-instance-]').withExactText('Remove'); toastCloseButton = Selector('[data-test-subj=toastCloseButton]'); @@ -30,6 +30,11 @@ export class MyRedisDatabasePage { sortByHostAndPort = Selector('span').withAttribute('title', 'Host:Port'); sortByConnectionType = Selector('span').withAttribute('title', 'Connection Type'); sortByLastConnection = Selector('span').withAttribute('title', 'Last connection'); + importDatabasesBtn = Selector('[data-testid=import-dbs-btn]'); + submitImportBtn = Selector('[data-testid=submit-btn]'); + closeDialogBtn = Selector('[aria-label="Closes this modal window"]'); + okDialogBtn = Selector('[data-testid=ok-btn]'); + removeImportedFileBtn = Selector('[aria-label="Clear selected files"]'); //CHECKBOXES selectAllCheckbox = Selector('[data-test-subj=checkboxSelectAll]'); //ICONS @@ -46,6 +51,7 @@ export class MyRedisDatabasePage { //TEXT INPUTS (also referred to as 'Text fields') aliasInput = Selector('[data-testid=alias-input]'); searchInput = Selector('[data-testid=search-database-list]'); + importDatabaseInput = Selector('[data-testid=import-databases-input-file]'); //TEXT ELEMENTS moduleTooltip = Selector('.euiToolTipPopover'); moduleQuantifier = Selector('[data-testid=_module]'); @@ -55,6 +61,10 @@ export class MyRedisDatabasePage { hostPort = Selector('[data-testid=host-port]'); noResultsFoundMessage = Selector('div').withExactText('No results found'); noResultsFoundText = Selector('div').withExactText('No databases matched your search. Try reducing the criteria.'); + failedImportMessage = Selector('[data-testid=result-failed]'); + successImportMessage = Selector('[data-testid=result-success]'); + // DIALOG + importDbDialog = Selector('[data-testid=import-dbs-dialog]'); /** * Click on the database by name diff --git a/tests/e2e/test-data/ardm-valid.ano b/tests/e2e/test-data/ardm-valid.ano new file mode 100644 index 0000000000..7c557d1989 --- /dev/null +++ b/tests/e2e/test-data/ardm-valid.ano @@ -0,0 +1 @@ +W3siaG9zdCI6ImxvY2FsaG9zdCIsInBvcnQiOiI2Mzc5IiwiYXV0aCI6InBhc3MiLCJ1c2VybmFtZSI6InVzZXJuYW1lVGVzdCIsIm5hbWUiOiJhcmRtV2l0aFBhc3NBbmRVc2VybmFtZSIsInNlcGFyYXRvciI6IjoiLCJjbHVzdGVyIjpmYWxzZSwia2V5IjoiMTY1MDM3MzUyNTY1MV9naHFwciIsIm9yZGVyIjowfSx7Imhvc3QiOiJhcmRtTm9OYW1lIiwicG9ydCI6IjEyMDAxIiwiYXV0aCI6IiIsInVzZXJuYW1lIjoiIiwic2VwYXJhdG9yIjoiOiIsImNsdXN0ZXIiOmZhbHNlLCJrZXkiOiIxNjUwODk3NjIxNzU0X2I1bjB2Iiwib3JkZXIiOjF9XQ== \ No newline at end of file diff --git a/tests/e2e/test-data/racompass-invalid.json b/tests/e2e/test-data/racompass-invalid.json new file mode 100644 index 0000000000..aab8b3e325 --- /dev/null +++ b/tests/e2e/test-data/racompass-invalid.json @@ -0,0 +1,171 @@ +[ + { + "srvRecords": [ + { + "priority": null, + "weight": null, + "port": null, + "name": null + } + ], + "useSRVRecords": false, + "natMaps": [ + { + "privateHost": null, + "privatePort": null, + "publicHost": null, + "publicPort": null + } + ], + "enableNatMaps": false, + "clusterOptions": { + "slotsRefreshInterval": 5000, + "slotsRefreshTimeout": 1000, + "retryDelayOnTryAgain": 100, + "retryDelayOnClusterDown": 100, + "retryDelayOnFailover": 100, + "retryDelayOnMoved": 0, + "maxRedirections": 16, + "dnsLookup": false, + "scaleReads": "master", + "startupNodes": [ + { + "host": null, + "port": null + } + ] + }, + "enableStartupNodes": false, + "sentinelOptions": { + "tls": { + "key": null, + "keyBookmark": null, + "ca": null, + "caBookmark": null, + "cert": null, + "certBookmark": null + }, + "preferredSlaves": [ + { + "host": null, + "port": null, + "priority": null + } + ], + "role": null, + "sentinelPassword": null, + "name": null + }, + "enablePreferredSlaves": false, + "sshKeyPassphrase": null, + "sshKeyFileBookmark": null, + "sshKeyFile": null, + "sshUser": null, + "sshPort": null, + "sshHost": null, + "ssh": false, + "caCertBookmark": null, + "caCert": null, + "certificateBookmark": null, + "certificate": null, + "keyFileBookmark": null, + "keyFile": null, + "ssl": false, + "default": false, + "star": false, + "totalDb": 16, + "db": 0, + "password": "", + "color": "#4B5563", + "host": "localhost", + "keyPrefix": null, + "type": "standalone", + "id": "f99a5d6d-daf4-489c-885b-6f8e411adbc9" + }, + { + "srvRecords": [ + { + "priority": null, + "weight": null, + "port": null, + "name": null + } + ], + "useSRVRecords": false, + "natMaps": [ + { + "privateHost": null, + "privatePort": null, + "publicHost": null, + "publicPort": null + } + ], + "enableNatMaps": false, + "clusterOptions": { + "slotsRefreshInterval": 5000, + "slotsRefreshTimeout": 1000, + "retryDelayOnTryAgain": 100, + "retryDelayOnClusterDown": 100, + "retryDelayOnFailover": 100, + "retryDelayOnMoved": 0, + "maxRedirections": 16, + "dnsLookup": false, + "scaleReads": "master", + "startupNodes": [ + { + "host": null, + "port": null + } + ] + }, + "enableStartupNodes": false, + "sentinelOptions": { + "tls": { + "key": null, + "keyBookmark": null, + "ca": null, + "caBookmark": null, + "cert": null, + "certBookmark": null + }, + "preferredSlaves": [ + { + "host": null, + "port": null, + "priority": null + } + ], + "role": null, + "sentinelPassword": null, + "name": null + }, + "enablePreferredSlaves": false, + "sshKeyPassphrase": null, + "sshKeyFileBookmark": null, + "sshKeyFile": null, + "sshUser": null, + "sshPort": null, + "sshHost": null, + "ssh": false, + "caCertBookmark": null, + "caCert": null, + "certificateBookmark": null, + "certificate": null, + "keyFileBookmark": null, + "keyFile": null, + "ssl": false, + "default": false, + "star": false, + "totalDb": 16, + "db": 1, + "password": "vfsd", + "color": "#4B5563", + "port": 1111, + "keyPrefix": null, + "type": "standalone", + "connectionName": "vd", + "id": "f99a5d6d-daf4-489c-885b-6f8e411adbc9", + "cluster": true, + "name": "vd long host" + } +] \ No newline at end of file diff --git a/tests/e2e/test-data/racompass-valid.json b/tests/e2e/test-data/racompass-valid.json new file mode 100644 index 0000000000..dc4e32dcf5 --- /dev/null +++ b/tests/e2e/test-data/racompass-valid.json @@ -0,0 +1,171 @@ +[ + { + "srvRecords": [ + { + "priority": null, + "weight": null, + "port": null, + "name": null + } + ], + "useSRVRecords": false, + "natMaps": [ + { + "privateHost": null, + "privatePort": null, + "publicHost": null, + "publicPort": null + } + ], + "enableNatMaps": false, + "clusterOptions": { + "slotsRefreshInterval": 5000, + "slotsRefreshTimeout": 1000, + "retryDelayOnTryAgain": 100, + "retryDelayOnClusterDown": 100, + "retryDelayOnFailover": 100, + "retryDelayOnMoved": 0, + "maxRedirections": 16, + "dnsLookup": false, + "scaleReads": "master", + "startupNodes": [ + { + "host": null, + "port": null + } + ] + }, + "enableStartupNodes": false, + "sentinelOptions": { + "tls": { + "key": null, + "keyBookmark": null, + "ca": null, + "caBookmark": null, + "cert": null, + "certBookmark": null + }, + "preferredSlaves": [ + { + "host": null, + "port": null, + "priority": null + } + ], + "role": null, + "sentinelPassword": null, + "name": null + }, + "enablePreferredSlaves": false, + "sshKeyPassphrase": null, + "sshKeyFileBookmark": null, + "sshKeyFile": null, + "sshUser": null, + "sshPort": null, + "sshHost": null, + "ssh": false, + "caCertBookmark": null, + "caCert": null, + "certificateBookmark": null, + "certificate": null, + "keyFileBookmark": null, + "keyFile": null, + "ssl": false, + "default": false, + "star": false, + "totalDb": 16, + "db": 1, + "password": "", + "color": "#4B5563", + "port": 8100, + "host": "racompassDbWithIndex", + "keyPrefix": null, + "type": "standalone", + "id": "f99a5d6d-daf4-489c-885b-6f8e411adbc9" + }, + { + "srvRecords": [ + { + "priority": null, + "weight": null, + "port": null, + "name": null + } + ], + "useSRVRecords": false, + "natMaps": [ + { + "privateHost": null, + "privatePort": null, + "publicHost": null, + "publicPort": null + } + ], + "enableNatMaps": false, + "clusterOptions": { + "slotsRefreshInterval": 5000, + "slotsRefreshTimeout": 1000, + "retryDelayOnTryAgain": 100, + "retryDelayOnClusterDown": 100, + "retryDelayOnFailover": 100, + "retryDelayOnMoved": 0, + "maxRedirections": 16, + "dnsLookup": false, + "scaleReads": "master", + "startupNodes": [ + { + "host": null, + "port": null + } + ] + }, + "enableStartupNodes": false, + "sentinelOptions": { + "tls": { + "key": null, + "keyBookmark": null, + "ca": null, + "caBookmark": null, + "cert": null, + "certBookmark": null + }, + "preferredSlaves": [ + { + "host": null, + "port": null, + "priority": null + } + ], + "role": null, + "sentinelPassword": null, + "name": null + }, + "enablePreferredSlaves": false, + "sshKeyPassphrase": null, + "sshKeyFileBookmark": null, + "sshKeyFile": null, + "sshUser": null, + "sshPort": null, + "sshHost": null, + "ssh": false, + "caCertBookmark": null, + "caCert": null, + "certificateBookmark": null, + "certificate": null, + "keyFileBookmark": null, + "keyFile": null, + "ssl": false, + "default": false, + "star": false, + "totalDb": 16, + "db": 0, + "password": "vfsd", + "color": "#4B5563", + "host": "localhost", + "port": 1111, + "keyPrefix": null, + "id": "f99a5d6d-daf4-489c-885b-6f8e411adbc9", + "cluster": true, + "name": "racompassCluster" + } +] \ No newline at end of file diff --git a/tests/e2e/test-data/rdm-valid.json b/tests/e2e/test-data/rdm-valid.json new file mode 100644 index 0000000000..845fe507e7 --- /dev/null +++ b/tests/e2e/test-data/rdm-valid.json @@ -0,0 +1,62 @@ +[ + { + "password": "new", + "filter_history": { + "*": 1, + "stream1": 1 + }, + "host": "localhost", + "name": "vfd das jashd ashdkjh kjhasfh hfjks dahfjk shdk fhskjad hfkj sdhkj fashk dhfk sahkj fhsak dhfskja hsd kfjh dsakj fhsdjk fhskdjal fhksjd hfkjsd hfkjs hakdjfh sjkdah fjksdh fjksdh jkfh ksdh fsdkjhfksjhfkhsdkf hksjdhf kjsdhf skdhf sdf sdfsda fsdfsd fsd fsdf sd f sdf sd f sd fsd f sd f sd fsd f sad fs df sd f s dsa fsdf vfd das jashd ashdkjh", + "ssh_port": 22, + "timeout_connect": 60000, + "timeout_execute": 60000, + "cluster": false, + "invalid_field": "inv", + "db": 0 + }, + { + "host": "rdmWithUsernameAndPass1", + "port": "1561", + "cluster": true, + "username": "rdmUsername", + "auth": "rdmAuth" + }, + { + "auth": "", + "host": "172.30.100.151", + "name": "oss cluster", + "ssh_port": 22, + "cluster": true, + "timeout_connect": 60000, + "timeout_execute": 60000 + }, + { + "auth": "longname database >500 symbols invalid", + "host": "172.30.100.181", + "port": 1000, + "keys_pattern": "*", + "name": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla rutrum nec libero aliquet ultricies. Donec ut blandit dui, ac hendrerit risus. Vestibulum sodales sed risus ac auctor. Integer quis justo vel leo gravida volutpat quis et risus. Nam vestibulum fermentum eros, in ullamcorper nulla laoreet quis. Vestibulum ut arcu nec turpis elementum malesuada. Maecenas congue felis nec posuere ullamcorper. Phasellus auctor leo sit amet ligula scelerisque, quis elementum ligula auctor. Quisque id leo r", + "namespace_separator": ":", + "ssh_port": 22, + "ssl": true, + "ssl_ca_cert_path": "E:/Redis/redisinsight-envs/cluster-tls-client/certs/ca.crt", + "ssl_local_cert_path": "E:/Redis/redisinsight-envs/cluster-tls-client/certs/client.crt", + "ssl_private_key_path": "E:/Redis/redisinsight-envs/cluster-tls-client/certs/client.key", + "timeout_connect": 60000, + "timeout_execute": 60000 + }, + { + "auth": "pass", + "host": "localhost", + "name": "plain-certs+pass", + "port": 65537, + "ssh_port": 22, + "ssl_local_cert_path": "C:/Users/enaboko/Downloads/certificates", + "timeout_connect": 60000, + "timeout_execute": 60000 + }, + { + "host": "rdmOnlyHostPortDB2", + "port": 6379 + } +] diff --git a/tests/e2e/tests/critical-path/database/import-databases.e2e.ts b/tests/e2e/tests/critical-path/database/import-databases.e2e.ts new file mode 100644 index 0000000000..ce738b9dac --- /dev/null +++ b/tests/e2e/tests/critical-path/database/import-databases.e2e.ts @@ -0,0 +1,112 @@ +import { rte } from '../../../helpers/constants'; +import { AddRedisDatabasePage, BrowserPage, MyRedisDatabasePage } from '../../../pageObjects'; +import { commonUrl } from '../../../helpers/conf'; +import { acceptLicenseTerms, clickOnEditDatabaseByName } from '../../../helpers/database'; +import { deleteStandaloneDatabasesByNamesApi } from '../../../helpers/api/api-database'; +import { DatabasesActions } from '../../../common-actions/databases-actions'; + +const browserPage = new BrowserPage(); +const myRedisDatabasePage = new MyRedisDatabasePage(); +const databasesActions = new DatabasesActions(); +const addRedisDatabasePage = new AddRedisDatabasePage(); + +const invalidJsonPath = '../../../test-data/racompass-invalid.json'; +const rdmData = { + type: 'rdm', + path: '../../../test-data/rdm-valid.json', + dbNames: ['rdmWithUsernameAndPass1:1561', 'rdmOnlyHostPortDB2:6379'], + userName: 'rdmUsername', + password: 'rdmAuth', + connectionType: 'Cluster', + fileName: 'rdm-valid.json' +}; +const dbData = [ + { + type: 'racompass', + path: '../../../test-data/racompass-valid.json', + dbNames: ['racompassCluster', 'racompassDbWithIndex:8100 [1]'] + }, + { + type: 'ardm', + path: '../../../test-data/ardm-valid.ano', + dbNames: ['ardmNoName:12001', 'ardmWithPassAndUsername'] + } +]; +// List of all created databases to delete +const databases = [ + rdmData.dbNames[0], + rdmData.dbNames[1], + dbData[0].dbNames[0], + dbData[0].dbNames[1].split(' ')[0], + dbData[1].dbNames[0], + dbData[1].dbNames[1] +]; + +fixture `Import databases` + .meta({ type: 'critical_path', rte: rte.standalone }) + .page(commonUrl); +test + .before(async() => { + await acceptLicenseTerms(); + }) + .after(async() => { + // Delete databases + deleteStandaloneDatabasesByNamesApi(databases); + })('Connection import from JSON', async t => { + const tooltipText = 'Import Database Connections'; + const partialImportedMsg = 'Successfully added 2 of 6 database connections'; + const defaultText = 'Select or drag and drop a file'; + + // Verify that user can see the “Import Database Connections” tooltip + await t.expect(myRedisDatabasePage.importDatabasesBtn.visible).ok('The import databases button not displayed'); + await t.hover(myRedisDatabasePage.importDatabasesBtn); + await t.expect(browserPage.tooltip.innerText).contains(tooltipText, 'The tooltip message not displayed/correct'); + + // Verify that Import dialogue is not closed when clicking any area outside the box + await t.click(myRedisDatabasePage.importDatabasesBtn); + await t.expect(myRedisDatabasePage.importDbDialog.exists).ok('Import Database Connections dialog not opened'); + await t.click(myRedisDatabasePage.myRedisDBButton); + await t.expect(myRedisDatabasePage.importDbDialog.exists).ok('Import Database Connections dialog not displayed'); + + // Verify that user see the message when parse error appears + await t + .setFilesToUpload(myRedisDatabasePage.importDatabaseInput, [invalidJsonPath]) + .click(myRedisDatabasePage.submitImportBtn) + .expect(myRedisDatabasePage.failedImportMessage.exists).ok('Failed to add database message not displayed'); + + // Verify that user can remove file from import input + await t.click(myRedisDatabasePage.closeDialogBtn); + await t.click(myRedisDatabasePage.importDatabasesBtn); + await t.setFilesToUpload(myRedisDatabasePage.importDatabaseInput, [rdmData.path]); + await t.expect(myRedisDatabasePage.importDbDialog.textContent).contains(rdmData.fileName, 'Filename not displayed in import input'); + // Click on remove button + await t.click(myRedisDatabasePage.removeImportedFileBtn); + await t.expect(myRedisDatabasePage.importDbDialog.textContent).contains(defaultText, 'File not removed from import input'); + + // Verify that user can import database with mandatory fields + await t.click(myRedisDatabasePage.closeDialogBtn); + await databasesActions.importDatabase(rdmData); + // Verify that success message is displayed + await t.expect(myRedisDatabasePage.successImportMessage.textContent).contains(partialImportedMsg, 'Databases not imported successfully'); + + // Verify that list of databases is reloaded when database added + await t.click(myRedisDatabasePage.okDialogBtn); + await databasesActions.verifyDatabasesDisplayed(rdmData.dbNames); + + // Verify that user can import database with mandatory+optional data + await clickOnEditDatabaseByName(rdmData.dbNames[0]); + // Verify username imported + await t.expect(addRedisDatabasePage.usernameInput.value).eql(rdmData.userName); + // Verify password imported + await t.click(addRedisDatabasePage.showPasswordBtn); + await t.expect(addRedisDatabasePage.passwordInput.value).eql(rdmData.password); + // Verify cluster connection type imported + await t.expect(addRedisDatabasePage.connectionType.textContent).eql(rdmData.connectionType); + + // Verify that user can import files from Racompass, ARDM, RDM + for (const db of dbData) { + await databasesActions.importDatabase(db); + await t.click(myRedisDatabasePage.okDialogBtn); + await databasesActions.verifyDatabasesDisplayed(db.dbNames); + } + });