diff --git a/tests/e2e/common-actions/databases-actions.ts b/tests/e2e/common-actions/databases-actions.ts index 0d1a19b768..52d2ba501f 100644 --- a/tests/e2e/common-actions/databases-actions.ts +++ b/tests/e2e/common-actions/databases-actions.ts @@ -24,10 +24,11 @@ export class DatabasesActions { */ async importDatabase(fileParameters: ImportDatabaseParameters): Promise { await t - .click(await myRedisDatabasePage.importDatabasesBtn) + .click(myRedisDatabasePage.AddRedisDatabaseDialog.addDatabaseButton) + .click(myRedisDatabasePage.importDatabasesBtn) .setFilesToUpload(myRedisDatabasePage.importDatabaseInput, [fileParameters.path]) - .click(myRedisDatabasePage.submitImportBtn) - .expect(myRedisDatabasePage.importDialogTitle.textContent).eql('Import Results', `Databases from ${fileParameters.type} not imported`); + .click(myRedisDatabasePage.submitChangesButton) + .expect(myRedisDatabasePage.successResultsAccordion.exists).ok(`Databases from ${fileParameters.type} not imported`); } /** diff --git a/tests/e2e/desktop.runner.ci.ts b/tests/e2e/desktop.runner.ci.ts index b827e49c47..133e031e33 100644 --- a/tests/e2e/desktop.runner.ci.ts +++ b/tests/e2e/desktop.runner.ci.ts @@ -40,9 +40,7 @@ import testcafe from 'testcafe'; speed: 1, quarantineMode: { successThreshold: 1, attemptLimit: 3 }, pageRequestTimeout: 20000, - disableMultipleWindows: true, - runExecutionTimeout: 280000, - testExecutionTimeout: 280000 + disableMultipleWindows: true }); }) .then((failedCount) => { diff --git a/tests/e2e/helpers/api/api-database.ts b/tests/e2e/helpers/api/api-database.ts index 7fdd557f14..e2556f37ff 100644 --- a/tests/e2e/helpers/api/api-database.ts +++ b/tests/e2e/helpers/api/api-database.ts @@ -7,7 +7,7 @@ import { databaseParameters, SentinelParameters, ClusterNodes -} from '../../pageObjects/components/myRedisDatabase/add-redis-database'; +} from '../../pageObjects/dialogs/add-redis-database-dialog'; import { ResourcePath } from '../constants'; import { sendGetRequest, diff --git a/tests/e2e/helpers/database.ts b/tests/e2e/helpers/database.ts index 0e7282fb94..39edd56eab 100644 --- a/tests/e2e/helpers/database.ts +++ b/tests/e2e/helpers/database.ts @@ -3,7 +3,7 @@ import { AddNewDatabaseParameters, SentinelParameters, OSSClusterParameters -} from '../pageObjects/components/myRedisDatabase/add-redis-database'; +} from '../pageObjects/dialogs/add-redis-database-dialog'; import { DiscoverMasterGroupsPage } from '../pageObjects/sentinel/discovered-sentinel-master-groups-page'; import { MyRedisDatabasePage, @@ -14,6 +14,7 @@ import { UserAgreementDialog } from '../pageObjects/dialogs'; import { DatabaseAPIRequests } from './api/api-database'; import { RedisOverviewPage } from './constants'; import { RdiInstancesListPage } from '../pageObjects/rdi-instances-list-page'; +import { updateControlNumber } from './insights'; const myRedisDatabasePage = new MyRedisDatabasePage(); const discoverMasterGroupsPage = new DiscoverMasterGroupsPage(); @@ -32,12 +33,12 @@ export class DatabaseHelper { databaseParameters: AddNewDatabaseParameters ): Promise { // Fill the add database form - await myRedisDatabasePage.AddRedisDatabase.addRedisDataBase( + await myRedisDatabasePage.AddRedisDatabaseDialog.addRedisDataBase( databaseParameters ); // Click for saving await t - .click(myRedisDatabasePage.AddRedisDatabase.addRedisDatabaseButton) + .click(myRedisDatabasePage.AddRedisDatabaseDialog.addRedisDatabaseButton) // Wait for database to be exist .expect( myRedisDatabasePage.dbNameList.withExactText( @@ -57,13 +58,13 @@ export class DatabaseHelper { databaseParameters: SentinelParameters ): Promise { // Fill sentinel parameters to auto-discover Master Groups - await myRedisDatabasePage.AddRedisDatabase.discoverSentinelDatabases( + await myRedisDatabasePage.AddRedisDatabaseDialog.discoverSentinelDatabases( databaseParameters ); // Click for autodiscover await t .click( - myRedisDatabasePage.AddRedisDatabase + myRedisDatabasePage.AddRedisDatabaseDialog .addRedisDatabaseButton ) .expect(discoverMasterGroupsPage.addPrimaryGroupButton.exists) @@ -83,12 +84,12 @@ export class DatabaseHelper { databaseParameters: AddNewDatabaseParameters ): Promise { // Fill the add database form - await myRedisDatabasePage.AddRedisDatabase.addAutodiscoverREClusterDatabase( + await myRedisDatabasePage.AddRedisDatabaseDialog.addAutodiscoverREClusterDatabase( databaseParameters ); // Click on submit button await t - .click(myRedisDatabasePage.AddRedisDatabase.addRedisDatabaseButton) + .click(myRedisDatabasePage.AddRedisDatabaseDialog.addRedisDatabaseButton) // Wait for database to be exist in the list of Autodiscover databases and select it .expect( autoDiscoverREDatabases.databaseName.withExactText( @@ -114,12 +115,12 @@ export class DatabaseHelper { databaseParameters: OSSClusterParameters ): Promise { // Enter required parameters for OSS Cluster - await myRedisDatabasePage.AddRedisDatabase.addOssClusterDatabase( + await myRedisDatabasePage.AddRedisDatabaseDialog.addOssClusterDatabase( databaseParameters ); // Click for saving await t - .click(myRedisDatabasePage.AddRedisDatabase.addRedisDatabaseButton) + .click(myRedisDatabasePage.AddRedisDatabaseDialog.addRedisDatabaseButton) // Check for info message that DB was added .expect(myRedisDatabasePage.Toast.toastHeader.exists) .ok('Info message not exists', { timeout: 10000 }) @@ -142,12 +143,12 @@ export class DatabaseHelper { cloudAPISecretKey: string ): Promise { // Fill the add database form and Submit - await myRedisDatabasePage.AddRedisDatabase.addAutodiscoverRECloudDatabase( + await myRedisDatabasePage.AddRedisDatabaseDialog.addAutodiscoverRECloudDatabase( cloudAPIAccessKey, cloudAPISecretKey ); await t.click( - myRedisDatabasePage.AddRedisDatabase.addRedisDatabaseButton + myRedisDatabasePage.AddRedisDatabaseDialog.addRedisDatabaseButton ); await t .expect( @@ -157,8 +158,8 @@ export class DatabaseHelper { ) .ok('Subscriptions list not displayed', { timeout: 120000 }); // Select subscriptions - await t.click(myRedisDatabasePage.AddRedisDatabase.selectAllCheckbox); - await t.click(myRedisDatabasePage.AddRedisDatabase.showDatabasesButton); + await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.selectAllCheckbox); + await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.showDatabasesButton); // Select databases for adding const databaseName = await autoDiscoverREDatabases.getDatabaseName(); await t.click(autoDiscoverREDatabases.databaseCheckbox); @@ -277,12 +278,12 @@ export class DatabaseHelper { const startTime = Date.now(); await this.acceptLicenseTerms(); - await myRedisDatabasePage.AddRedisDatabase.addRedisDataBase( + await myRedisDatabasePage.AddRedisDatabaseDialog.addRedisDataBase( databaseParameters ); // Click for saving await t.click( - myRedisDatabasePage.AddRedisDatabase.addRedisDatabaseButton + myRedisDatabasePage.AddRedisDatabaseDialog.addRedisDatabaseButton ); await t.wait(3000); // Reload page until db appears @@ -320,12 +321,12 @@ export class DatabaseHelper { ); const startTime = Date.now(); - await myRedisDatabasePage.AddRedisDatabase.addRedisDataBase( + await myRedisDatabasePage.AddRedisDatabaseDialog.addRedisDataBase( databaseParameters ); // Click for saving await t.click( - myRedisDatabasePage.AddRedisDatabase.addRedisDatabaseButton + myRedisDatabasePage.AddRedisDatabaseDialog.addRedisDatabaseButton ); await t.wait(3000); // Reload page until db appears @@ -348,13 +349,14 @@ export class DatabaseHelper { async acceptLicenseTerms(): Promise { await t.maximizeWindow(); await userAgreementDialog.acceptLicenseTerms(); + await updateControlNumber(48.2); // Open default databases list tab if RDI opened if (await rdiInstancesListPage.rdiInstanceButton.exists) { await myRedisDatabasePage.setActivePage(RedisOverviewPage.DataBase); } // TODO delete after releasing chatbot - if (await myRedisDatabasePage.AddRedisDatabase.aiChatMessage.exists) { - await t.click(myRedisDatabasePage.AddRedisDatabase.aiCloseMessage) + if (await myRedisDatabasePage.AddRedisDatabaseDialog.aiChatMessage.exists) { + await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.aiCloseMessage) } } @@ -365,7 +367,7 @@ export class DatabaseHelper { await t .click(myRedisDatabasePage.NavigationPanel.myRedisDBButton) .click( - myRedisDatabasePage.AddRedisDatabase.connectToRedisStackButton + myRedisDatabasePage.AddRedisDatabaseDialog.connectToRedisStackButton ); } @@ -376,7 +378,7 @@ export class DatabaseHelper { async deleteDatabase(databaseName: string): Promise { await t.click(myRedisDatabasePage.NavigationPanel.myRedisDBButton); if ( - await myRedisDatabasePage.AddRedisDatabase.addDatabaseButton.exists + await myRedisDatabasePage.AddRedisDatabaseDialog.addDatabaseButton.exists ) { await this.deleteDatabaseByNameApi(databaseName); } @@ -389,7 +391,7 @@ export class DatabaseHelper { async deleteCustomDatabase(databaseName: string): Promise { await t.click(myRedisDatabasePage.NavigationPanel.myRedisDBButton); if ( - await myRedisDatabasePage.AddRedisDatabase.addDatabaseButton.exists + await myRedisDatabasePage.AddRedisDatabaseDialog.addDatabaseButton.exists ) { await myRedisDatabasePage.deleteDatabaseByName(databaseName); } @@ -404,7 +406,7 @@ export class DatabaseHelper { databaseParameters: AddNewDatabaseParameters ): Promise { if ( - await myRedisDatabasePage.AddRedisDatabase.addDatabaseButton.exists + await myRedisDatabasePage.AddRedisDatabaseDialog.addDatabaseButton.exists ) { await this.acceptLicenseTermsAndAddDatabase(databaseParameters); } diff --git a/tests/e2e/helpers/insights.ts b/tests/e2e/helpers/insights.ts index 782deba977..24ced1b965 100644 --- a/tests/e2e/helpers/insights.ts +++ b/tests/e2e/helpers/insights.ts @@ -1,10 +1,9 @@ import * as path from 'path'; import * as fs from 'fs-extra'; -import { BasePage } from '../pageObjects'; import { syncFeaturesApi } from './api/api-info'; import { DatabaseScripts, DbTableParameters } from './database-scripts'; +import { t } from 'testcafe'; -const basePage = new BasePage(); const dbTableParams: DbTableParameters = { tableName: 'features_config', columnName: 'controlNumber', @@ -41,7 +40,7 @@ export async function updateControlNumber(controlNumber: number): Promise await syncFeaturesApi(); await DatabaseScripts.updateColumnValueInDBTable({ ...dbTableParams, rowValue: controlNumber }); await syncFeaturesApi(); - await basePage.reloadPage(); + await t.eval(() => location.reload()); } /** diff --git a/tests/e2e/package.json b/tests/e2e/package.json index 75f478488c..72e775371c 100644 --- a/tests/e2e/package.json +++ b/tests/e2e/package.json @@ -13,7 +13,7 @@ "build:ui": "yarn --cwd ../../ build:ui", "redis:last": "docker run --name redis-last-version -p 7777:6379 -d redislabs/redismod", "start:app": "cross-env yarn start:api", - "test:chrome": "testcafe --compiler-options typescript.configPath=tsconfig.testcafe.json --cache --disable-multiple-windows --concurrency 1 chrome tests/ -r html:./report/index.html,spec -e -s takeOnFails=true,path=report/screenshots/,pathPattern=${OS}_${BROWSER}/${DATE}_${TIME}/${FIXTURE}_${TEST}_${FILE_INDEX}.png", + "test:chrome": "ts-node ./web.runner.ts", "test:chrome:ci": "ts-node ./web.runner.ci.ts", "test": "yarn test:chrome", "lint": "eslint . --ext .ts,.js,.tsx,.jsx", diff --git a/tests/e2e/pageObjects/components/myRedisDatabase/add-redis-database.ts b/tests/e2e/pageObjects/dialogs/add-redis-database-dialog.ts similarity index 95% rename from tests/e2e/pageObjects/components/myRedisDatabase/add-redis-database.ts rename to tests/e2e/pageObjects/dialogs/add-redis-database-dialog.ts index 42e2bbbb44..ad7eaafb10 100644 --- a/tests/e2e/pageObjects/components/myRedisDatabase/add-redis-database.ts +++ b/tests/e2e/pageObjects/dialogs/add-redis-database-dialog.ts @@ -1,8 +1,8 @@ import { Selector, t } from 'testcafe'; -import { TlsCertificates } from '../../../helpers/constants'; -import { RedisCloudSigninPanel } from '../redis-cloud-sign-in-panel'; +import { TlsCertificates } from '../../helpers/constants'; +import { RedisCloudSigninPanel } from '../components/redis-cloud-sign-in-panel'; -export class AddRedisDatabase { +export class AddRedisDatabaseDialog { RedisCloudSigninPanel = new RedisCloudSigninPanel(); //------------------------------------------------------------------------------------------- @@ -14,8 +14,9 @@ export class AddRedisDatabase { // BUTTONS addDatabaseButton = Selector('[data-testid^=add-redis-database]'); addRedisDatabaseButton = Selector('[data-testid=btn-submit]'); - addDatabaseManually = Selector('[data-testid=add-manual]'); - addAutoDiscoverDatabase = Selector('[data-testid=add-auto]'); + addDatabaseManually = Selector('[data-testid=add-database_tab_manual]'); + addAutoDiscoverDatabase = Selector('[data-testid=add-database_tab_software]'); + addCloudDatabaseTab = Selector('[data-testid=add-database_tab_cloud]'); redisClusterType = Selector('[data-test-subj=radio-btn-enterprise-cluster]'); redisCloudProType = Selector('[data-test-subj=radio-btn-cloud-pro]'); redisSentinelType = Selector('[data-test-subj=radio-btn-sentinel]'); @@ -27,9 +28,7 @@ export class AddRedisDatabase { connectToRedisStackButton = Selector('[aria-label="Connect to database"]'); cloneDatabaseButton = Selector('[data-testid=clone-db-btn]'); sentinelNavigation = Selector('[data-testid=sentinel-nav-group]'); - cloneSentinelNavigation = Selector('[data-testid=sentinel-nav-group-clone]'); 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"]'); testConnectionBtn = Selector('[data-testid=btn-test-connection]'); @@ -60,17 +59,17 @@ export class AddRedisDatabase { caCertField = Selector('[data-testid=select-ca-cert]', { timeout: 500 }); clientCertField = Selector('[data-testid=select-cert]', { timeout: 500 }); selectCompressor = Selector('[data-testid=select-compressor]', { timeout: 1000 }); - useCloudAccount = Selector('[data-testid=use-cloud-account-accordion]'); - useCloudKeys = Selector('[data-testid=use-cloud-keys-accordion]'); certificateDropdownList = Selector('div.euiSuperSelect__listbox div'); - // CHECKBOXES useSSHCheckbox = Selector('[data-testid=use-ssh]~div', { timeout: 500 }); dataCompressorCheckbox = Selector('[data-testid=showCompressor] ~ label'); requiresTlsClientCheckbox = Selector('[data-testid=tls-required-checkbox] ~ label'); + useCloudAccount = Selector('#cloud-account').parent(); + useCloudKeys = Selector('#cloud-api-keys').parent(); // RADIO BUTTONS sshPasswordRadioBtn = Selector('#password~div', { timeout: 500 }); sshPrivateKeyRadioBtn = Selector('#privateKey~div', { timeout: 500 }); + cloudOptionsRadioBtn = Selector('[data-testid=cloud-options]'); // LABELS dataCompressorLabel = Selector('[data-testid=showCompressor] ~ label', { timeout: 1000 }); aiChatMessage = Selector('[data-testid=ai-chat-message-btn]'); @@ -221,7 +220,7 @@ export class AddRedisDatabase { await t .click(this.addDatabaseButton) - .click(this.addAutoDiscoverDatabase); + .click(this.addCloudDatabaseTab); await t .typeText(this.accessKeyInput, cloudAPIAccessKey, { replace: true, paste: true }) diff --git a/tests/e2e/pageObjects/dialogs/index.ts b/tests/e2e/pageObjects/dialogs/index.ts index c96a11a7c2..8d3d9c1ecd 100644 --- a/tests/e2e/pageObjects/dialogs/index.ts +++ b/tests/e2e/pageObjects/dialogs/index.ts @@ -1,7 +1,12 @@ +import { AddRedisDatabaseDialog } from './add-redis-database-dialog'; +import { AuthorizationDialog } from './authorization-dialog'; import { OnboardingCardsDialog } from './onboarding-cards-dialog'; import { UserAgreementDialog } from './user-agreement-dialog'; + export { + AddRedisDatabaseDialog, + AuthorizationDialog, OnboardingCardsDialog, UserAgreementDialog }; diff --git a/tests/e2e/pageObjects/my-redis-databases-page.ts b/tests/e2e/pageObjects/my-redis-databases-page.ts index 296d8c4251..69fcef375f 100644 --- a/tests/e2e/pageObjects/my-redis-databases-page.ts +++ b/tests/e2e/pageObjects/my-redis-databases-page.ts @@ -1,19 +1,18 @@ import { t, Selector } from 'testcafe'; import { DatabaseAPIRequests } from '../helpers/api/api-database'; -import { AddRedisDatabase } from './components/myRedisDatabase/add-redis-database'; import { InsightsPanel } from './components/insights-panel'; import { BaseOverviewPage } from './base-overview-page'; import { NavigationPanel } from './components/navigation-panel'; import { NavigationHeader } from './components/navigation/navigation-header'; import { AuthorizationDialog } from './dialogs/authorization-dialog'; -import { RedisCloudSigninPanel } from './components/redis-cloud-sign-in-panel'; +import { AddRedisDatabaseDialog } from './dialogs'; const databaseAPIRequests = new DatabaseAPIRequests(); export class MyRedisDatabasePage extends BaseOverviewPage { NavigationPanel = new NavigationPanel(); - AddRedisDatabase = new AddRedisDatabase(); + AddRedisDatabaseDialog = new AddRedisDatabaseDialog(); InsightsPanel = new InsightsPanel(); NavigationHeader = new NavigationHeader(); AuthorizationDialog = new AuthorizationDialog(); @@ -33,19 +32,20 @@ export class MyRedisDatabasePage extends BaseOverviewPage { deleteButtonInPopover = Selector('#deletePopover button'); confirmDeleteAllDbButton = Selector('[data-testid=delete-selected-dbs]'); editDatabaseButton = Selector('[data-testid^=edit-instance]'); - editAliasButton = Selector('[data-testid=edit-alias-btn]'); + popoverHeader = Selector('#formModalHeader'); submitChangesButton = Selector('[data-testid=btn-submit]'); promoButton = Selector('[data-testid=promo-btn]'); sortByDatabaseAlias = Selector('span').withAttribute('title', 'Database Alias'); sortByHostAndPort = Selector('span').withAttribute('title', 'Host:Port'); sortByConnectionType = Selector('span').withAttribute('title', 'Connection Type'); - importDatabasesBtn = Selector('[data-testid=import-from-file-btn]'); + importDatabasesBtn = Selector('[data-testid=add-database_tab_import]'); + retryImportBtn = Selector('[data-testid=btn-retry]'); submitImportBtn = Selector('[data-testid=submit-btn]'); - okDialogBtn = Selector('[data-testid=ok-btn]'); removeImportedFileBtn = Selector('[aria-label="Clear selected files"]'); exportBtn = Selector('[data-testid=export-btn]'); exportSelectedDbsBtn = Selector('[data-testid=export-selected-dbs]'); userProfileBtn = Selector('[data-testid=user-profile-btn]'); + closeImportBtn = Selector('[data-testid=btn-close]'); //CHECKBOXES selectAllCheckbox = Selector('[data-test-subj=checkboxSelectAll]'); exportPasswordsCheckbox = Selector('[data-testid=export-passwords]~div', { timeout: 500 }); @@ -74,12 +74,10 @@ export class MyRedisDatabasePage extends BaseOverviewPage { noResultsFoundMessage = Selector('div').withExactText('No results found'); noResultsFoundText = Selector('div').withExactText('No results matched your search. Try reducing the criteria.'); failedImportMessage = Selector('[data-testid=result-failed]'); - importDialogTitle = Selector('[data-testid=import-file-modal-title]'); importResult = Selector('[data-testid^=table-result-]'); userProfileAccountInfo = Selector('[data-testid^=profile-account-]'); portCloudDb = Selector('[class*=column_host]'); // DIALOG - importDbDialog = Selector('[data-testid=import-file-modal]'); successResultsAccordion = Selector('[data-testid^=success-results-]'); partialResultsAccordion = Selector('[data-testid^=partial-results-]'); failedResultsAccordion = Selector('[data-testid^=failed-results-]'); @@ -87,6 +85,7 @@ export class MyRedisDatabasePage extends BaseOverviewPage { databaseContainer = Selector('.databaseContainer'); connectionTypeTitle = Selector('[data-test-subj=tableHeaderCell_connectionType_2]'); signInAgreement = Selector('[class="euiCheckbox__square"]'); + addDatabaseImport = Selector('[data-testid=add-db_import]'); /** * Click on the database by name diff --git a/tests/e2e/tests/electron/critical-path/a-first-start-form/user-agreements-form.e2e.ts b/tests/e2e/tests/electron/critical-path/a-first-start-form/user-agreements-form.e2e.ts index 747dff16d0..0bfd626a13 100644 --- a/tests/e2e/tests/electron/critical-path/a-first-start-form/user-agreements-form.e2e.ts +++ b/tests/e2e/tests/electron/critical-path/a-first-start-form/user-agreements-form.e2e.ts @@ -15,7 +15,7 @@ test('Verify that user should accept User Agreements to continue working with th await t.expect(userAgreementDialog.userAgreementsPopup.exists).ok('User Agreements Popup is shown'); // Verify that I still has agreements popup & cannot add a database await t.expect(userAgreementDialog.submitButton.hasAttribute('disabled')).ok('Submit button not disabled by default'); - await t.expect(myRedisDatabasePage.AddRedisDatabase.addDatabaseManually.exists).notOk('User can\'t add a database'); + await t.expect(myRedisDatabasePage.AddRedisDatabaseDialog.addDatabaseManually.exists).notOk('User can\'t add a database'); }); test('Verify that the encryption enabled by default and specific message', async t => { const expectedPluginText = 'To avoid automatic execution of malicious code, when adding new Workbench plugins, use files from trusted authors only.'; diff --git a/tests/e2e/tests/electron/critical-path/database/add-ssh-db.e2e.ts b/tests/e2e/tests/electron/critical-path/database/add-ssh-db.e2e.ts index f96524df23..f524428805 100644 --- a/tests/e2e/tests/electron/critical-path/database/add-ssh-db.e2e.ts +++ b/tests/e2e/tests/electron/critical-path/database/add-ssh-db.e2e.ts @@ -69,29 +69,29 @@ test('Adding database with SSH', async t => { }; // Verify that if user have not entered any required value he can see that this field should be specified when hover over the button to add a database await t - .click(myRedisDatabasePage.AddRedisDatabase.addDatabaseButton) - .click(myRedisDatabasePage.AddRedisDatabase.addDatabaseManually) - .click(myRedisDatabasePage.AddRedisDatabase.useSSHCheckbox) - .click(myRedisDatabasePage.AddRedisDatabase.sshPrivateKeyRadioBtn) - .hover(myRedisDatabasePage.AddRedisDatabase.addRedisDatabaseButton); + .click(myRedisDatabasePage.AddRedisDatabaseDialog.addDatabaseButton) + .click(myRedisDatabasePage.AddRedisDatabaseDialog.addDatabaseManually) + .click(myRedisDatabasePage.AddRedisDatabaseDialog.useSSHCheckbox) + .click(myRedisDatabasePage.AddRedisDatabaseDialog.sshPrivateKeyRadioBtn) + .hover(myRedisDatabasePage.AddRedisDatabaseDialog.addRedisDatabaseButton); for (const text of tooltipText) { await browserActions.verifyTooltipContainsText(text, true); } // Verify that user can see the Test Connection button enabled/disabled with the same rules as the button to add/apply the changes - await t.hover(myRedisDatabasePage.AddRedisDatabase.testConnectionBtn); + await t.hover(myRedisDatabasePage.AddRedisDatabaseDialog.testConnectionBtn); for (const text of tooltipText) { await browserActions.verifyTooltipContainsText(text, true); } // Verify that user can add SSH tunnel with Password for Standalone database - await t.click(myRedisDatabasePage.AddRedisDatabase.cancelButton); - await myRedisDatabasePage.AddRedisDatabase.addStandaloneSSHDatabase(sshDbPass, sshWithPass); + await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.cancelButton); + await myRedisDatabasePage.AddRedisDatabaseDialog.addStandaloneSSHDatabase(sshDbPass, sshWithPass); await myRedisDatabasePage.clickOnDBByName(sshDbPass.databaseName); await Common.checkURLContainsText('browser'); // Verify that user can add SSH tunnel with Private Key await t.click(browserPage.OverviewPanel.myRedisDBLink); - await myRedisDatabasePage.AddRedisDatabase.addStandaloneSSHDatabase(sshDbPrivateKey, sshWithPrivateKey); + await myRedisDatabasePage.AddRedisDatabaseDialog.addStandaloneSSHDatabase(sshDbPrivateKey, sshWithPrivateKey); await myRedisDatabasePage.clickOnDBByName(sshDbPrivateKey.databaseName); await Common.checkURLContainsText('browser'); @@ -99,26 +99,25 @@ test('Adding database with SSH', async t => { await t.click(browserPage.OverviewPanel.myRedisDBLink); await myRedisDatabasePage.clickOnEditDBByName(sshDbPrivateKey.databaseName); await t - .typeText(myRedisDatabasePage.AddRedisDatabase.sshPrivateKeyInput, sshWithPassphrase.sshPrivateKey, { replace: true, paste: true }) - .typeText(myRedisDatabasePage.AddRedisDatabase.sshPassphraseInput, sshWithPassphrase.sshPassphrase, { replace: true, paste: true }); - await t.click(myRedisDatabasePage.AddRedisDatabase.addRedisDatabaseButton); - await t.expect(myRedisDatabasePage.AddRedisDatabase.addRedisDatabaseButton.exists).notOk('Edit database panel still displayed'); + .typeText(myRedisDatabasePage.AddRedisDatabaseDialog.sshPrivateKeyInput, sshWithPassphrase.sshPrivateKey, { replace: true, paste: true }) + .typeText(myRedisDatabasePage.AddRedisDatabaseDialog.sshPassphraseInput, sshWithPassphrase.sshPassphrase, { replace: true, paste: true }); + await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.addRedisDatabaseButton); + await t.expect(myRedisDatabasePage.AddRedisDatabaseDialog.addRedisDatabaseButton.exists).notOk('Edit database panel still displayed'); await databaseHelper.clickOnEditDatabaseByName(sshDbPrivateKey.databaseName); // Verify that password, passphrase and private key are hidden for SSH option await t - .expect(myRedisDatabasePage.AddRedisDatabase.sshPrivateKeyInput.textContent).eql(hiddenPass, 'Edited Private key not saved') - .expect(myRedisDatabasePage.AddRedisDatabase.sshPassphraseInput.value).eql(hiddenPass, 'Edited Passphrase not saved'); + .expect(myRedisDatabasePage.AddRedisDatabaseDialog.sshPrivateKeyInput.textContent).eql(hiddenPass, 'Edited Private key not saved') + .expect(myRedisDatabasePage.AddRedisDatabaseDialog.sshPassphraseInput.value).eql(hiddenPass, 'Edited Passphrase not saved'); // Verify that user can clone database with SSH tunnel - await databaseHelper.clickOnEditDatabaseByName(sshDbPrivateKey.databaseName); - await t.click(myRedisDatabasePage.AddRedisDatabase.cloneDatabaseButton); + await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.cloneDatabaseButton); // Edit Database alias before cloning - await t.typeText(myRedisDatabasePage.AddRedisDatabase.databaseAliasInput, newClonedDatabaseAlias, { replace: true }); - await t.click(myRedisDatabasePage.AddRedisDatabase.addRedisDatabaseButton); + await t.typeText(myRedisDatabasePage.AddRedisDatabaseDialog.databaseAliasInput, newClonedDatabaseAlias, { replace: true }); + await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.addRedisDatabaseButton); await t.expect(myRedisDatabasePage.dbNameList.withExactText(newClonedDatabaseAlias).exists).ok('DB with SSH was not cloned'); // Verify that user can add SSH tunnel with Passcode - await myRedisDatabasePage.AddRedisDatabase.addStandaloneSSHDatabase(sshDbPasscode, sshWithPassphrase); + await myRedisDatabasePage.AddRedisDatabaseDialog.addStandaloneSSHDatabase(sshDbPasscode, sshWithPassphrase); await myRedisDatabasePage.clickOnDBByName(sshDbPasscode.databaseName); await Common.checkURLContainsText('browser'); }); @@ -128,7 +127,7 @@ test('Adding OSS Cluster database with SSH', async t => { sshPassword: 'pass' }; // Verify that user can add SSH tunnel with Password for OSS Cluster database - await myRedisDatabasePage.AddRedisDatabase.addStandaloneSSHDatabase(sshDbClusterPass, sshWithPass); + await myRedisDatabasePage.AddRedisDatabaseDialog.addStandaloneSSHDatabase(sshDbClusterPass, sshWithPass); await myRedisDatabasePage.clickOnDBByName(sshDbPass.databaseName); await Common.checkURLContainsText('browser'); }); diff --git a/tests/e2e/tests/electron/critical-path/database/clone-databases.e2e.ts b/tests/e2e/tests/electron/critical-path/database/clone-databases.e2e.ts index 7f214bd55e..96c9df87c7 100644 --- a/tests/e2e/tests/electron/critical-path/database/clone-databases.e2e.ts +++ b/tests/e2e/tests/electron/critical-path/database/clone-databases.e2e.ts @@ -27,26 +27,26 @@ test('Verify that user can clone Standalone db', async t => { await databaseHelper.clickOnEditDatabaseByName(ossStandaloneConfig.databaseName); // Verify that user can test Standalone connection on edit and see the success message - await t.click(myRedisDatabasePage.AddRedisDatabase.testConnectionBtn); + await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.testConnectionBtn); await t.expect(myRedisDatabasePage.Toast.toastHeader.textContent).contains('Connection is successful', 'Standalone connection is not successful'); // Verify that user can cancel the Clone by clicking the “Cancel” or the “x” button - await t.click(myRedisDatabasePage.AddRedisDatabase.cloneDatabaseButton); - await t.click(myRedisDatabasePage.AddRedisDatabase.cancelButton); - await t.expect(myRedisDatabasePage.editAliasButton.withText('Clone ').exists).notOk('Clone panel is still displayed', { timeout: 2000 }); + await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.cloneDatabaseButton); + await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.cancelButton); + await t.expect(myRedisDatabasePage.popoverHeader.withText('Clone ').exists).notOk('Clone panel is still displayed', { timeout: 2000 }); await databaseHelper.clickOnEditDatabaseByName(ossStandaloneConfig.databaseName); - await t.click(myRedisDatabasePage.AddRedisDatabase.cloneDatabaseButton); + await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.cloneDatabaseButton); // Verify that user see the “Add Database Manually” form pre-populated with all the connection data when cloning DB await t // Verify that name in the header has the prefix “Clone” - .expect(myRedisDatabasePage.editAliasButton.withText('Clone ').exists).ok('Clone panel is not displayed') - .expect(myRedisDatabasePage.AddRedisDatabase.hostInput.getAttribute('value')).eql(ossStandaloneConfig.host, 'Wrong host value') - .expect(myRedisDatabasePage.AddRedisDatabase.portInput.getAttribute('value')).eql(ossStandaloneConfig.port, 'Wrong port value') - .expect(myRedisDatabasePage.AddRedisDatabase.databaseAliasInput.getAttribute('value')).eql(ossStandaloneConfig.databaseName, 'Wrong host value') + .expect(myRedisDatabasePage.popoverHeader.withText('Clone ').exists).ok('Clone panel is not displayed') + .expect(myRedisDatabasePage.AddRedisDatabaseDialog.hostInput.getAttribute('value')).eql(ossStandaloneConfig.host, 'Wrong host value') + .expect(myRedisDatabasePage.AddRedisDatabaseDialog.portInput.getAttribute('value')).eql(ossStandaloneConfig.port, 'Wrong port value') + .expect(myRedisDatabasePage.AddRedisDatabaseDialog.databaseAliasInput.getAttribute('value')).eql(ossStandaloneConfig.databaseName, 'Wrong host value') // Verify that timeout input is displayed for clone db window - .expect(myRedisDatabasePage.AddRedisDatabase.timeoutInput.value).eql('30', 'Timeout is not defaulted to 30 on clone window'); + .expect(myRedisDatabasePage.AddRedisDatabaseDialog.timeoutInput.value).eql('30', 'Timeout is not defaulted to 30 on clone window'); // Verify that user can confirm the creation of the database by clicking “Clone Database” - await t.click(myRedisDatabasePage.AddRedisDatabase.addRedisDatabaseButton); + await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.addRedisDatabaseButton); await t.expect(myRedisDatabasePage.dbNameList.withExactText(ossStandaloneConfig.databaseName).count).eql(2, 'DB was not cloned'); // Verify new connection badge for cloned database diff --git a/tests/e2e/tests/electron/regression/database/cloud-sso.e2e.ts b/tests/e2e/tests/electron/regression/database/cloud-sso.e2e.ts index e8597937d8..83fbc84a1f 100644 --- a/tests/e2e/tests/electron/regression/database/cloud-sso.e2e.ts +++ b/tests/e2e/tests/electron/regression/database/cloud-sso.e2e.ts @@ -48,16 +48,16 @@ test('Verify that user can see SSO feature if it is enabled in feature config', // await t.expect(myRedisDatabasePage.AuthorizationDialog.ssoAuth.exists).ok('SSO auth button not displayed in Sigh in modal'); // await t.click(myRedisDatabasePage.Modal.closeModalButton); - await t.click(myRedisDatabasePage.AddRedisDatabase.addDatabaseButton); - await t.click(myRedisDatabasePage.AddRedisDatabase.addAutoDiscoverDatabase); + await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.addDatabaseButton); + await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.addCloudDatabaseTab); // Verify that RE Cloud auto-discovery options Use Cloud Account and Use Cloud API Keys are displayed on Welcome screen - await t.expect(myRedisDatabasePage.AddRedisDatabase.useCloudAccount.exists).ok('Use Cloud Account accordion not displayed when SSO feature enabled'); - await t.expect(myRedisDatabasePage.AddRedisDatabase.useCloudKeys.exists).ok('Use Cloud Keys accordion not displayed when SSO feature enabled'); - await t.click(myRedisDatabasePage.AddRedisDatabase.useCloudAccount); + await t.expect(myRedisDatabasePage.AddRedisDatabaseDialog.useCloudAccount.exists).ok('Use Cloud Account accordion not displayed when SSO feature enabled'); + await t.expect(myRedisDatabasePage.AddRedisDatabaseDialog.useCloudKeys.exists).ok('Use Cloud Keys accordion not displayed when SSO feature enabled'); + await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.useCloudAccount); // Verify that Auth buttons are displayed for auto-discovery panel on Electron app - await t.expect(myRedisDatabasePage.AddRedisDatabase.RedisCloudSigninPanel.googleOauth.exists).ok('Google auth button not displayed when SSO feature enabled'); - await t.expect(myRedisDatabasePage.AddRedisDatabase.RedisCloudSigninPanel.githubOauth.exists).ok('Github auth button not displayed when SSO feature enabled'); - await t.expect(myRedisDatabasePage.AddRedisDatabase.RedisCloudSigninPanel.ssoOauth.exists).ok('SSO auth button not displayed when SSO feature enabled'); + await t.expect(myRedisDatabasePage.AddRedisDatabaseDialog.RedisCloudSigninPanel.googleOauth.exists).ok('Google auth button not displayed when SSO feature enabled'); + await t.expect(myRedisDatabasePage.AddRedisDatabaseDialog.RedisCloudSigninPanel.githubOauth.exists).ok('Github auth button not displayed when SSO feature enabled'); + await t.expect(myRedisDatabasePage.AddRedisDatabaseDialog.RedisCloudSigninPanel.ssoOauth.exists).ok('SSO auth button not displayed when SSO feature enabled'); }); // skip until adding tests for SSO feature test.skip('Verify that user can sign in using SSO SAML auth', async t => { diff --git a/tests/e2e/tests/electron/regression/database/edit-db.e2e.ts b/tests/e2e/tests/electron/regression/database/edit-db.e2e.ts index 51b83c0b7f..3d527d7225 100644 --- a/tests/e2e/tests/electron/regression/database/edit-db.e2e.ts +++ b/tests/e2e/tests/electron/regression/database/edit-db.e2e.ts @@ -31,8 +31,8 @@ fixture `List of Databases` // Clear and delete database await t.click(myRedisDatabasePage.NavigationPanel.myRedisDBButton); await databaseHelper.clickOnEditDatabaseByName(ossStandaloneConfig.databaseName); - await t.typeText(myRedisDatabasePage.AddRedisDatabase.portInput, ossStandaloneConfig.port, { replace: true, paste: true }); - await t.click(myRedisDatabasePage.AddRedisDatabase.addRedisDatabaseButton); + await t.typeText(myRedisDatabasePage.AddRedisDatabaseDialog.portInput, ossStandaloneConfig.port, { replace: true, paste: true }); + await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.addRedisDatabaseButton); await myRedisDatabasePage.clickOnDBByName(ossStandaloneConfig.databaseName); await apiKeyRequests.deleteKeyByNameApi(keyName, ossStandaloneConfig.databaseName); await databaseAPIRequests.deleteAllDatabasesApi(); @@ -49,8 +49,8 @@ test('Verify that context for previous database not saved after editing port/use await t.click(myRedisDatabasePage.NavigationPanel.myRedisDBButton); // Edit port of added database await databaseHelper.clickOnEditDatabaseByName(ossStandaloneConfig.databaseName); - await t.typeText(myRedisDatabasePage.AddRedisDatabase.portInput, ossStandaloneBigConfig.port, { replace: true, paste: true }); - await t.click(myRedisDatabasePage.AddRedisDatabase.addRedisDatabaseButton); + await t.typeText(myRedisDatabasePage.AddRedisDatabaseDialog.portInput, ossStandaloneBigConfig.port, { replace: true, paste: true }); + await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.addRedisDatabaseButton); await myRedisDatabasePage.clickOnDBByName(ossStandaloneConfig.databaseName); // Verify that keys from the database with new port are displayed await t.expect(browserPage.keysSummary.find('b').withText('18 00').exists).ok('DB with new port not opened'); diff --git a/tests/e2e/tests/web/critical-path/a-first-start-form/user-agreements-form.e2e.ts b/tests/e2e/tests/web/critical-path/a-first-start-form/user-agreements-form.e2e.ts index af72c36123..b3e1833a0d 100644 --- a/tests/e2e/tests/web/critical-path/a-first-start-form/user-agreements-form.e2e.ts +++ b/tests/e2e/tests/web/critical-path/a-first-start-form/user-agreements-form.e2e.ts @@ -19,7 +19,7 @@ test('Verify that user should accept User Agreements to continue working with th await t.expect(userAgreementDialog.userAgreementsPopup.exists).ok('User Agreements Popup is shown'); // Verify that I still has agreements popup & cannot add a database await t.expect(userAgreementDialog.submitButton.hasAttribute('disabled')).ok('Submit button not disabled by default'); - await t.expect(myRedisDatabasePage.AddRedisDatabase.addDatabaseManually.exists).notOk('User can\'t add a database'); + await t.expect(myRedisDatabasePage.AddRedisDatabaseDialog.addDatabaseManually.exists).notOk('User can\'t add a database'); }); test('Verify that the encryption enabled by default and specific message', async t => { const expectedPluginText = 'To avoid automatic execution of malicious code, when adding new Workbench plugins, use files from trusted authors only.'; diff --git a/tests/e2e/tests/web/critical-path/database/clone-databases.e2e.ts b/tests/e2e/tests/web/critical-path/database/clone-databases.e2e.ts index b4d5e9668e..a992567ca8 100644 --- a/tests/e2e/tests/web/critical-path/database/clone-databases.e2e.ts +++ b/tests/e2e/tests/web/critical-path/database/clone-databases.e2e.ts @@ -30,26 +30,26 @@ test await databaseHelper.clickOnEditDatabaseByName(ossStandaloneConfig.databaseName); // Verify that user can test Standalone connection on edit and see the success message - await t.click(myRedisDatabasePage.AddRedisDatabase.testConnectionBtn); + await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.testConnectionBtn); await t.expect(myRedisDatabasePage.Toast.toastHeader.textContent).contains('Connection is successful', 'Standalone connection is not successful'); // Verify that user can cancel the Clone by clicking the “Cancel” or the “x” button - await t.click(myRedisDatabasePage.AddRedisDatabase.cloneDatabaseButton); - await t.click(myRedisDatabasePage.AddRedisDatabase.cancelButton); - await t.expect(myRedisDatabasePage.editAliasButton.withText('Clone ').exists).notOk('Clone panel is still displayed', { timeout: 2000 }); + await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.cloneDatabaseButton); + await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.cancelButton); + await t.expect(myRedisDatabasePage.popoverHeader.withText('Clone ').exists).notOk('Clone panel is still displayed', { timeout: 2000 }); await databaseHelper.clickOnEditDatabaseByName(ossStandaloneConfig.databaseName); - await t.click(myRedisDatabasePage.AddRedisDatabase.cloneDatabaseButton); + await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.cloneDatabaseButton); // Verify that user see the “Add Database Manually” form pre-populated with all the connection data when cloning DB await t // Verify that name in the header has the prefix “Clone” - .expect(myRedisDatabasePage.editAliasButton.withText('Clone ').exists).ok('Clone panel is not displayed') - .expect(myRedisDatabasePage.AddRedisDatabase.hostInput.getAttribute('value')).eql(ossStandaloneConfig.host, 'Wrong host value') - .expect(myRedisDatabasePage.AddRedisDatabase.portInput.getAttribute('value')).eql(ossStandaloneConfig.port, 'Wrong port value') - .expect(myRedisDatabasePage.AddRedisDatabase.databaseAliasInput.getAttribute('value')).eql(ossStandaloneConfig.databaseName, 'Wrong host value') + .expect(myRedisDatabasePage.popoverHeader.withText('Clone ').exists).ok('Clone panel is not displayed') + .expect(myRedisDatabasePage.AddRedisDatabaseDialog.hostInput.getAttribute('value')).eql(ossStandaloneConfig.host, 'Wrong host value') + .expect(myRedisDatabasePage.AddRedisDatabaseDialog.portInput.getAttribute('value')).eql(ossStandaloneConfig.port, 'Wrong port value') + .expect(myRedisDatabasePage.AddRedisDatabaseDialog.databaseAliasInput.getAttribute('value')).eql(ossStandaloneConfig.databaseName, 'Wrong host value') // Verify that timeout input is displayed for clone db window - .expect(myRedisDatabasePage.AddRedisDatabase.timeoutInput.value).eql('30', 'Timeout is not defaulted to 30 on clone window'); + .expect(myRedisDatabasePage.AddRedisDatabaseDialog.timeoutInput.value).eql('30', 'Timeout is not defaulted to 30 on clone window'); // Verify that user can confirm the creation of the database by clicking “Clone Database” - await t.click(myRedisDatabasePage.AddRedisDatabase.addRedisDatabaseButton); + await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.addRedisDatabaseButton); await t.expect(myRedisDatabasePage.dbNameList.withExactText(ossStandaloneConfig.databaseName).count).eql(2, 'DB was not cloned'); // Verify new connection badge for cloned database @@ -70,17 +70,17 @@ test await databaseHelper.clickOnEditDatabaseByName(ossClusterConfig.ossClusterDatabaseName); // Verify that user can test OSS Cluster connection on edit and see the success message - await t.click(myRedisDatabasePage.AddRedisDatabase.testConnectionBtn); + await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.testConnectionBtn); await t.expect(myRedisDatabasePage.Toast.toastHeader.textContent).contains('Connection is successful', 'OSS Cluster connection is not successful'); - await t.click(myRedisDatabasePage.AddRedisDatabase.cloneDatabaseButton); + await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.cloneDatabaseButton); await t - .expect(myRedisDatabasePage.editAliasButton.withText('Clone ').exists).ok('Clone panel is not displayed') - .expect(myRedisDatabasePage.AddRedisDatabase.portInput.getAttribute('value')).eql(ossClusterConfig.ossClusterPort, 'Wrong port value') - .expect(myRedisDatabasePage.AddRedisDatabase.databaseAliasInput.getAttribute('value')).eql(ossClusterConfig.ossClusterDatabaseName, 'Wrong host value'); + .expect(myRedisDatabasePage.popoverHeader.withText('Clone ').exists).ok('Clone panel is not displayed') + .expect(myRedisDatabasePage.AddRedisDatabaseDialog.portInput.getAttribute('value')).eql(ossClusterConfig.ossClusterPort, 'Wrong port value') + .expect(myRedisDatabasePage.AddRedisDatabaseDialog.databaseAliasInput.getAttribute('value')).eql(ossClusterConfig.ossClusterDatabaseName, 'Wrong host value'); // Edit Database alias before cloning - await t.typeText(myRedisDatabasePage.AddRedisDatabase.databaseAliasInput, newOssDatabaseAlias, { replace: true }); - await t.click(myRedisDatabasePage.AddRedisDatabase.addRedisDatabaseButton); + await t.typeText(myRedisDatabasePage.AddRedisDatabaseDialog.databaseAliasInput, newOssDatabaseAlias, { replace: true }); + await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.addRedisDatabaseButton); await t.expect(myRedisDatabasePage.dbNameList.withExactText(newOssDatabaseAlias).exists).ok('DB was not closed'); await t.expect(myRedisDatabasePage.dbNameList.withExactText(ossClusterConfig.ossClusterDatabaseName).exists).ok('Original DB is not displayed'); @@ -103,28 +103,25 @@ test const hiddenPassword = '••••••••••••'; await databaseHelper.clickOnEditDatabaseByName(ossSentinelConfig.masters[1].alias); - await t.click(myRedisDatabasePage.AddRedisDatabase.cloneDatabaseButton); + await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.cloneDatabaseButton); // Verify that user can test Sentinel connection on edit and see the success message - await t.click(myRedisDatabasePage.AddRedisDatabase.testConnectionBtn); + await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.testConnectionBtn); await t.expect(myRedisDatabasePage.Toast.toastHeader.textContent).contains('Connection is successful', 'Sentinel connection is not successful'); // Verify that for Sentinel Host and Port fields are replaced with editable Primary Group Name field await t - .expect(myRedisDatabasePage.editAliasButton.withText('Clone ').exists).ok('Clone panel is not displayed') - .expect(myRedisDatabasePage.AddRedisDatabase.databaseAliasInput.getAttribute('value')).eql(ossSentinelConfig.masters[1].alias, 'Invalid primary group alias value') - .expect(myRedisDatabasePage.AddRedisDatabase.primaryGroupNameInput.getAttribute('value')).eql(ossSentinelConfig.masters[1].name, 'Invalid primary group name value'); + .expect(myRedisDatabasePage.popoverHeader.withText('Clone ').exists).ok('Clone panel is not displayed') + .expect(myRedisDatabasePage.AddRedisDatabaseDialog.databaseAliasInput.getAttribute('value')).eql(ossSentinelConfig.masters[1].alias, 'Invalid primary group alias value') + .expect(myRedisDatabasePage.AddRedisDatabaseDialog.primaryGroupNameInput.getAttribute('value')).eql(ossSentinelConfig.masters[1].name, 'Invalid primary group name value'); // Validate Databases section - await t - .click(myRedisDatabasePage.AddRedisDatabase.cloneSentinelDatabaseNavigation) - .expect(myRedisDatabasePage.AddRedisDatabase.masterGroupPassword.getAttribute('value')).eql(hiddenPassword, 'Invalid sentinel database password'); + await t.expect(myRedisDatabasePage.AddRedisDatabaseDialog.masterGroupPassword.getAttribute('value')).eql(hiddenPassword, 'Invalid sentinel database password'); // Validate Sentinel section await t - .click(myRedisDatabasePage.AddRedisDatabase.cloneSentinelNavigation) - .expect(myRedisDatabasePage.AddRedisDatabase.portInput.getAttribute('value')).eql(ossSentinelConfig.sentinelPort, 'Invalid sentinel port') - .expect(myRedisDatabasePage.AddRedisDatabase.passwordInput.getAttribute('value')).eql(hiddenPassword, 'Invalid sentinel password'); + .expect(myRedisDatabasePage.AddRedisDatabaseDialog.portInput.getAttribute('value')).eql(ossSentinelConfig.sentinelPort, 'Invalid sentinel port') + .expect(myRedisDatabasePage.AddRedisDatabaseDialog.passwordInput.getAttribute('value')).eql(hiddenPassword, 'Invalid sentinel password'); // Clone Sentinel Primary Group - await t.click(myRedisDatabasePage.AddRedisDatabase.addRedisDatabaseButton); + await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.addRedisDatabaseButton); await t.expect(myRedisDatabasePage.dbNameList.withExactText(ossSentinelConfig.masters[1].alias).count).gt(1, 'Primary Group was not cloned'); // Verify new connection badge for Sentinel db diff --git a/tests/e2e/tests/web/critical-path/database/connecting-to-the-db.e2e.ts b/tests/e2e/tests/web/critical-path/database/connecting-to-the-db.e2e.ts index 256cb9b2e5..5241f87e5e 100644 --- a/tests/e2e/tests/web/critical-path/database/connecting-to-the-db.e2e.ts +++ b/tests/e2e/tests/web/critical-path/database/connecting-to-the-db.e2e.ts @@ -48,14 +48,14 @@ test const errorMessage = `Could not connect to ${invalidOssStandaloneConfig.host}:${invalidOssStandaloneConfig.port}, please check the connection details.`; // Fill the add database form - await myRedisDatabasePage.AddRedisDatabase.addRedisDataBase(invalidOssStandaloneConfig); + await myRedisDatabasePage.AddRedisDatabaseDialog.addRedisDataBase(invalidOssStandaloneConfig); // Verify that when user request to test database connection is not successfull, can see standart connection error - await t.click(myRedisDatabasePage.AddRedisDatabase.testConnectionBtn); + await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.testConnectionBtn); await t.expect(myRedisDatabasePage.Toast.toastHeader.textContent).contains('Error', 'Invalid connection has no error on test'); // Click for saving - await t.click(myRedisDatabasePage.AddRedisDatabase.addRedisDatabaseButton); + await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.addRedisDatabaseButton); // Verify that the database is not in the list await t.expect(myRedisDatabasePage.Toast.toastError.textContent).contains('Error', 'Error message not displayed', { timeout: 10000 }); await t.expect(myRedisDatabasePage.Toast.toastError.textContent).contains(errorMessage, 'Error message not displayed', { timeout: 10000 }); @@ -67,21 +67,21 @@ test const defaultSentinelPort = '26379'; await t - .click(myRedisDatabasePage.AddRedisDatabase.addDatabaseButton) - .click(myRedisDatabasePage.AddRedisDatabase.addDatabaseManually); + .click(myRedisDatabasePage.AddRedisDatabaseDialog.addDatabaseButton) + .click(myRedisDatabasePage.AddRedisDatabaseDialog.addDatabaseManually); // Verify that the Host, Port, Database Alias values pre-populated by default for the manual flow await t - .expect(myRedisDatabasePage.AddRedisDatabase.hostInput.value).eql(defaultHost, 'Default host not prepopulated') - .expect(myRedisDatabasePage.AddRedisDatabase.portInput.value).eql(defaultPort, 'Default port not prepopulated') - .expect(myRedisDatabasePage.AddRedisDatabase.databaseAliasInput.value).eql(`${defaultHost}:${defaultPort}`, 'Default db alias not prepopulated'); + .expect(myRedisDatabasePage.AddRedisDatabaseDialog.hostInput.value).eql(defaultHost, 'Default host not prepopulated') + .expect(myRedisDatabasePage.AddRedisDatabaseDialog.portInput.value).eql(defaultPort, 'Default port not prepopulated') + .expect(myRedisDatabasePage.AddRedisDatabaseDialog.databaseAliasInput.value).eql(`${defaultHost}:${defaultPort}`, 'Default db alias not prepopulated'); // Verify that the Host, Port, Database Alias values pre-populated by default for Sentinel await t - .click(myRedisDatabasePage.AddRedisDatabase.addAutoDiscoverDatabase) - .click(myRedisDatabasePage.AddRedisDatabase.redisSentinelType); + .click(myRedisDatabasePage.AddRedisDatabaseDialog.addAutoDiscoverDatabase) + .click(myRedisDatabasePage.AddRedisDatabaseDialog.redisSentinelType); await t - .expect(myRedisDatabasePage.AddRedisDatabase.hostInput.value).eql(defaultHost, 'Default sentinel host not prepopulated') - .expect(myRedisDatabasePage.AddRedisDatabase.portInput.value).eql(defaultSentinelPort, 'Default sentinel port not prepopulated'); + .expect(myRedisDatabasePage.AddRedisDatabaseDialog.hostInput.value).eql(defaultHost, 'Default sentinel host not prepopulated') + .expect(myRedisDatabasePage.AddRedisDatabaseDialog.portInput.value).eql(defaultSentinelPort, 'Default sentinel port not prepopulated'); }); test .meta({ rte: rte.standalone }) @@ -112,31 +112,31 @@ test // Verify that if user have not entered any required value he can see that this field should be specified when hover over the button to add a database await t - .click(myRedisDatabasePage.AddRedisDatabase.addDatabaseButton) - .click(myRedisDatabasePage.AddRedisDatabase.addDatabaseManually); + .click(myRedisDatabasePage.AddRedisDatabaseDialog.addDatabaseButton) + .click(myRedisDatabasePage.AddRedisDatabaseDialog.addDatabaseManually); await t - .click(myRedisDatabasePage.AddRedisDatabase.useSSHCheckbox) - .click(myRedisDatabasePage.AddRedisDatabase.sshPrivateKeyRadioBtn) - .hover(myRedisDatabasePage.AddRedisDatabase.addRedisDatabaseButton); + .click(myRedisDatabasePage.AddRedisDatabaseDialog.useSSHCheckbox) + .click(myRedisDatabasePage.AddRedisDatabaseDialog.sshPrivateKeyRadioBtn) + .hover(myRedisDatabasePage.AddRedisDatabaseDialog.addRedisDatabaseButton); for (const text of tooltipText) { await browserActions.verifyTooltipContainsText(text, true); } // Verify that user can see the Test Connection button enabled/disabled with the same rules as the button to add/apply the changes - await t.hover(myRedisDatabasePage.AddRedisDatabase.testConnectionBtn); + await t.hover(myRedisDatabasePage.AddRedisDatabaseDialog.testConnectionBtn); for (const text of tooltipText) { await browserActions.verifyTooltipContainsText(text, true); } // Verify that user can add SSH tunnel with Password for Standalone database - await t.click(myRedisDatabasePage.AddRedisDatabase.cancelButton); - await myRedisDatabasePage.AddRedisDatabase.addStandaloneSSHDatabase(sshDbPass, sshWithPass); + await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.cancelButton); + await myRedisDatabasePage.AddRedisDatabaseDialog.addStandaloneSSHDatabase(sshDbPass, sshWithPass); await myRedisDatabasePage.clickOnDBByName(sshDbPass.databaseName); await Common.checkURLContainsText('browser'); // Verify that user can add SSH tunnel with Private Key await t.click(browserPage.OverviewPanel.myRedisDBLink); - await myRedisDatabasePage.AddRedisDatabase.addStandaloneSSHDatabase(sshDbPrivateKey, sshWithPrivateKey); + await myRedisDatabasePage.AddRedisDatabaseDialog.addStandaloneSSHDatabase(sshDbPrivateKey, sshWithPrivateKey); await myRedisDatabasePage.clickOnDBByName(sshDbPrivateKey.databaseName); await Common.checkURLContainsText('browser'); @@ -144,26 +144,27 @@ test await t.click(browserPage.OverviewPanel.myRedisDBLink); await myRedisDatabasePage.clickOnEditDBByName(sshDbPrivateKey.databaseName); await t - .typeText(myRedisDatabasePage.AddRedisDatabase.sshPrivateKeyInput, sshWithPassphrase.sshPrivateKey, { replace: true, paste: true }) - .typeText(myRedisDatabasePage.AddRedisDatabase.sshPassphraseInput, sshWithPassphrase.sshPassphrase, { replace: true, paste: true }); - await t.click(myRedisDatabasePage.AddRedisDatabase.addRedisDatabaseButton); - await t.expect(myRedisDatabasePage.AddRedisDatabase.addRedisDatabaseButton.exists).notOk('Edit database panel still displayed'); + .typeText(myRedisDatabasePage.AddRedisDatabaseDialog.sshPrivateKeyInput, sshWithPassphrase.sshPrivateKey, { replace: true, paste: true }) + .typeText(myRedisDatabasePage.AddRedisDatabaseDialog.sshPassphraseInput, sshWithPassphrase.sshPassphrase, { replace: true, paste: true }); + await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.addRedisDatabaseButton); + await t.expect(myRedisDatabasePage.AddRedisDatabaseDialog.addRedisDatabaseButton.exists).notOk('Edit database panel still displayed'); await databaseHelper.clickOnEditDatabaseByName(sshDbPrivateKey.databaseName); // Verify that password, passphrase and private key are hidden for SSH option await t - .expect(myRedisDatabasePage.AddRedisDatabase.sshPrivateKeyInput.textContent).eql(hiddenPass, 'Edited Private key not saved') - .expect(myRedisDatabasePage.AddRedisDatabase.sshPassphraseInput.value).eql(hiddenPass, 'Edited Passphrase not saved'); + .expect(myRedisDatabasePage.AddRedisDatabaseDialog.sshPrivateKeyInput.textContent).eql(hiddenPass, 'Edited Private key not saved') + .expect(myRedisDatabasePage.AddRedisDatabaseDialog.sshPassphraseInput.value).eql(hiddenPass, 'Edited Passphrase not saved'); // Verify that user can clone database with SSH tunnel + await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.cancelButton); await databaseHelper.clickOnEditDatabaseByName(sshDbPrivateKey.databaseName); - await t.click(myRedisDatabasePage.AddRedisDatabase.cloneDatabaseButton); + await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.cloneDatabaseButton); // Edit Database alias before cloning - await t.typeText(myRedisDatabasePage.AddRedisDatabase.databaseAliasInput, newClonedDatabaseAlias, { replace: true }); - await t.click(myRedisDatabasePage.AddRedisDatabase.addRedisDatabaseButton); + await t.typeText(myRedisDatabasePage.AddRedisDatabaseDialog.databaseAliasInput, newClonedDatabaseAlias, { replace: true }); + await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.addRedisDatabaseButton); await t.expect(myRedisDatabasePage.dbNameList.withExactText(newClonedDatabaseAlias).exists).ok('DB with SSH was not cloned'); // Verify that user can add SSH tunnel with Passcode - await myRedisDatabasePage.AddRedisDatabase.addStandaloneSSHDatabase(sshDbPasscode, sshWithPassphrase); + await myRedisDatabasePage.AddRedisDatabaseDialog.addStandaloneSSHDatabase(sshDbPasscode, sshWithPassphrase); await myRedisDatabasePage.clickOnDBByName(sshDbPasscode.databaseName); await Common.checkURLContainsText('browser'); }); @@ -178,7 +179,7 @@ test sshPassword: 'pass' }; // Verify that user can add SSH tunnel with Password for OSS Cluster database - await myRedisDatabasePage.AddRedisDatabase.addStandaloneSSHDatabase(sshDbClusterPass, sshWithPass); + await myRedisDatabasePage.AddRedisDatabaseDialog.addStandaloneSSHDatabase(sshDbClusterPass, sshWithPass); await myRedisDatabasePage.clickOnDBByName(sshDbPass.databaseName); await Common.checkURLContainsText('browser'); }); diff --git a/tests/e2e/tests/web/critical-path/database/encryption.e2e.ts b/tests/e2e/tests/web/critical-path/database/encryption.e2e.ts index 71bbc97741..e2f4a7301f 100644 --- a/tests/e2e/tests/web/critical-path/database/encryption.e2e.ts +++ b/tests/e2e/tests/web/critical-path/database/encryption.e2e.ts @@ -45,4 +45,5 @@ test('Verify that data encrypted using KEY', async t => { .eql('KEY', 'Encryption is not applied by RI_ENCRYPTION_KEY'); await databaseHelper.clickOnEditDatabaseByName(ossSentinelConfig.masters[1].alias); await t.expect(myRedisDatabasePage.Toast.toastError.textContent).contains(decryptionError, 'Invalid encrypted field is decrypted'); + await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.cancelButton); }); diff --git a/tests/e2e/tests/web/critical-path/database/export-databases.e2e.ts b/tests/e2e/tests/web/critical-path/database/export-databases.e2e.ts index 734c483ae3..8d128d7187 100644 --- a/tests/e2e/tests/web/critical-path/database/export-databases.e2e.ts +++ b/tests/e2e/tests/web/critical-path/database/export-databases.e2e.ts @@ -50,8 +50,8 @@ test const compressor = 'Brotli'; await databaseHelper.clickOnEditDatabaseByName(ossStandaloneConfig.databaseName); - await myRedisDatabasePage.AddRedisDatabase.setCompressorValue(compressor); - await t.click(myRedisDatabasePage.AddRedisDatabase.addRedisDatabaseButton); + await myRedisDatabasePage.AddRedisDatabaseDialog.setCompressorValue(compressor); + await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.addRedisDatabaseButton); // Select databases checkboxes await databasesActions.selectDatabasesByNames(databaseNames); @@ -79,7 +79,7 @@ test await databasesActions.importDatabase(exportedData); await t.expect(myRedisDatabasePage.successResultsAccordion.find(myRedisDatabasePage.cssNumberOfDbs).textContent) .contains(`${exportedData.successNumber}`, 'Not correct successfully imported number'); - await t.click(myRedisDatabasePage.okDialogBtn); + await t.click(myRedisDatabasePage.closeImportBtn); // Verify that user can import exported file with all datatypes and certificates await databasesActions.verifyDatabasesDisplayed(exportedData.dbImportedNames); @@ -89,12 +89,13 @@ test await t.expect(modulesDbRedisStackIcon.exists).ok('module icon is displayed'); await databaseHelper.clickOnEditDatabaseByName(databaseNames[1]); - await t.expect(myRedisDatabasePage.AddRedisDatabase.caCertField.textContent).contains('ca', 'CA certificate import incorrect'); - await t.expect(myRedisDatabasePage.AddRedisDatabase.clientCertField.textContent).contains('client', 'Client certificate import incorrect'); - await t.click(myRedisDatabasePage.AddRedisDatabase.cancelButton); + await t.expect(myRedisDatabasePage.AddRedisDatabaseDialog.caCertField.textContent).contains('ca', 'CA certificate import incorrect'); + await t.expect(myRedisDatabasePage.AddRedisDatabaseDialog.clientCertField.textContent).contains('client', 'Client certificate import incorrect'); + await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.cancelButton); await databaseHelper.clickOnEditDatabaseByName(ossStandaloneConfig.databaseName); - await t.expect(myRedisDatabasePage.AddRedisDatabase.selectCompressor.textContent).eql(compressor, 'Compressor import incorrect'); + await t.expect(myRedisDatabasePage.AddRedisDatabaseDialog.selectCompressor.textContent).eql(compressor, 'Compressor import incorrect'); + await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.cancelButton); }); test .before(async() => { @@ -124,7 +125,7 @@ test .wait(2000); foundExportedFiles = await databasesActions.findFilesByFileStarts(fileDownloadPath, 'RedisInsight_connections_'); - const parsedExportedJson = await databasesActions.parseDbJsonByPath(joinPath(fileDownloadPath, foundExportedFiles[0])); + const parsedExportedJson = databasesActions.parseDbJsonByPath(joinPath(fileDownloadPath, foundExportedFiles[0])); // Verify that user can export databases without database passwords and client key when “Export passwords” control not selected for (const db of parsedExportedJson) { await t.expect(db.hasOwnProperty('password')).eql(false, 'Databases exported with passwords'); diff --git a/tests/e2e/tests/web/critical-path/database/import-databases.e2e.ts b/tests/e2e/tests/web/critical-path/database/import-databases.e2e.ts index 4744232112..e7bbc26501 100644 --- a/tests/e2e/tests/web/critical-path/database/import-databases.e2e.ts +++ b/tests/e2e/tests/web/critical-path/database/import-databases.e2e.ts @@ -1,13 +1,12 @@ import * as path from 'path'; import { rte } from '../../../../helpers/constants'; -import { BrowserPage, MyRedisDatabasePage } from '../../../../pageObjects'; +import { MyRedisDatabasePage } from '../../../../pageObjects'; import { commonUrl, ossStandaloneConfig } from '../../../../helpers/conf'; import { DatabaseHelper } from '../../../../helpers/database'; import { DatabaseAPIRequests } from '../../../../helpers/api/api-database'; import { DatabasesActions } from '../../../../common-actions/databases-actions'; import { Common } from '../../../../helpers/common'; -const browserPage = new BrowserPage(); const myRedisDatabasePage = new MyRedisDatabasePage(); const databasesActions = new DatabasesActions(); const databaseHelper = new DatabaseHelper(); @@ -97,39 +96,36 @@ test.before(async() => { await databaseAPIRequests.addNewStandaloneDatabaseApi(ossStandaloneConfig); await myRedisDatabasePage.reloadPage(); })('Connection import modal window', async t => { - const tooltipText = 'Import Database Connections'; const defaultText = 'Select or drag and drop a file'; const parseFailedMsg = 'Failed to add database connections'; const parseFailedMsg2 = `Unable to parse ${fileNames.racompassInvalidJson}`; - // Verify that user can see the “Import Database Connections” tooltip + // *** - outdated - Verify that user can see the “Import Database Connections” tooltip + await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.addDatabaseButton); 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.expect(myRedisDatabasePage.addDatabaseImport.exists).ok('Import Database Connections dialog not opened'); await t.click(myRedisDatabasePage.NavigationPanel.myRedisDBButton); - await t.expect(myRedisDatabasePage.importDbDialog.exists).ok('Import Database Connections dialog not displayed'); + await t.expect(myRedisDatabasePage.addDatabaseImport.exists).ok('Import Database Connections dialog not displayed'); // Verify that user see the message when parse error appears await t .setFilesToUpload(myRedisDatabasePage.importDatabaseInput, [filePathes.racompassInvalidJsonPath]) - .click(myRedisDatabasePage.submitImportBtn) + .click(myRedisDatabasePage.submitChangesButton) .expect(myRedisDatabasePage.failedImportMessage.exists).ok('Failed to add database message not displayed') .expect(myRedisDatabasePage.failedImportMessage.textContent).contains(parseFailedMsg) .expect(myRedisDatabasePage.failedImportMessage.textContent).contains(parseFailedMsg2); // Verify that user can remove file from import input - await t.click(myRedisDatabasePage.Modal.closeModalButton); - await t.click(myRedisDatabasePage.importDatabasesBtn); + await t.click(myRedisDatabasePage.retryImportBtn); await t.setFilesToUpload(myRedisDatabasePage.importDatabaseInput, [rdmData.path]); - await t.expect(myRedisDatabasePage.importDbDialog.textContent).contains(fileNames.rdmFullJson, 'Filename not displayed in import input'); + await t.expect(myRedisDatabasePage.addDatabaseImport.textContent).contains(fileNames.rdmFullJson, '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'); + await t.expect(myRedisDatabasePage.addDatabaseImport.textContent).contains(defaultText, 'File not removed from import input'); }); test('Connection import from JSON', async t => { // Verify that user can import database with mandatory/optional fields @@ -146,95 +142,108 @@ test('Connection import from JSON', async t => { .contains(`${rdmData.failedNumber}`, 'Not correct import failed number'); // Verify that list of databases is reloaded when database added - await t.click(myRedisDatabasePage.okDialogBtn); + await t.click(myRedisDatabasePage.closeImportBtn); await databasesActions.verifyDatabasesDisplayed(rdmData.dbImportedNames); await databaseHelper.clickOnEditDatabaseByName(rdmData.dbImportedNames[1]); // Verify username imported - await t.expect(myRedisDatabasePage.AddRedisDatabase.usernameInput.value).eql(rdmListOfDB[1].username, 'Username import incorrect'); + await t.expect(myRedisDatabasePage.AddRedisDatabaseDialog.usernameInput.value).eql(rdmListOfDB[1].username, 'Username import incorrect'); // Verify password imported // Verify that user can see 12 hidden characters regardless of the actual database password when it is set - await t.expect(myRedisDatabasePage.AddRedisDatabase.passwordInput.value).eql(hiddenPassword, 'Password import incorrect'); + await t.expect(myRedisDatabasePage.AddRedisDatabaseDialog.passwordInput.value).eql(hiddenPassword, 'Password import incorrect'); + await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.cancelButton); // Verify cluster connection type imported await databaseHelper.clickOnEditDatabaseByName(rdmData.dbImportedNames[2]); - await t.expect(myRedisDatabasePage.AddRedisDatabase.connectionType.textContent).eql(rdmData.connectionType, 'Connection type import incorrect'); + await t.expect(myRedisDatabasePage.AddRedisDatabaseDialog.connectionType.textContent).eql(rdmData.connectionType, 'Connection type import incorrect'); + await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.cancelButton); /* - Verify that user can import database with CA certificate - Verify that user can import database with certificates by an absolute folder path(CA certificate, Client certificate, Client private key) - Verify that user can see the certificate name as the certificate file name - */ + Verify that user can import database with CA certificate + Verify that user can import database with certificates by an absolute folder path(CA certificate, Client certificate, Client private key) + Verify that user can see the certificate name as the certificate file name + */ await databaseHelper.clickOnEditDatabaseByName(await findImportedRdmDbNameInList('rdmHost+Port+Name+CaCert')); - await t.expect(myRedisDatabasePage.AddRedisDatabase.caCertField.textContent).eql('ca', 'CA certificate import incorrect'); - await t.expect(myRedisDatabasePage.AddRedisDatabase.clientCertField.exists).notOk('Client certificate was imported'); + await t.expect(myRedisDatabasePage.AddRedisDatabaseDialog.caCertField.textContent).eql('ca', 'CA certificate import incorrect'); + await t.expect(myRedisDatabasePage.AddRedisDatabaseDialog.clientCertField.exists).notOk('Client certificate was imported'); + await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.cancelButton); // Verify that user can import database with Client certificate, Client private key await databaseHelper.clickOnEditDatabaseByName(await findImportedRdmDbNameInList('rdmHost+Port+Name+clientCert+privateKey')); - await t.expect(myRedisDatabasePage.AddRedisDatabase.caCertField.textContent).eql('No CA Certificate', 'CA certificate was imported'); - await t.expect(myRedisDatabasePage.AddRedisDatabase.clientCertField.textContent).eql('client', 'Client certificate import incorrect'); + await t.expect(myRedisDatabasePage.AddRedisDatabaseDialog.caCertField.textContent).eql('No CA Certificate', 'CA certificate was imported'); + await t.expect(myRedisDatabasePage.AddRedisDatabaseDialog.clientCertField.textContent).eql('client', 'Client certificate import incorrect'); + await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.cancelButton); // Verify that user can import database with all certificates await databaseHelper.clickOnEditDatabaseByName(await findImportedRdmDbNameInList('rdmHost+Port+Name+CaCert+clientCert+privateKey')); - await t.expect(myRedisDatabasePage.AddRedisDatabase.caCertField.textContent).eql('ca', 'CA certificate import incorrect'); - await t.expect(myRedisDatabasePage.AddRedisDatabase.clientCertField.textContent).eql('client', 'Client certificate import incorrect'); + await t.expect(myRedisDatabasePage.AddRedisDatabaseDialog.caCertField.textContent).eql('ca', 'CA certificate import incorrect'); + await t.expect(myRedisDatabasePage.AddRedisDatabaseDialog.clientCertField.textContent).eql('client', 'Client certificate import incorrect'); + await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.cancelButton); // Verify that certificate not imported when any certificate field has not been parsed await databaseHelper.clickOnEditDatabaseByName(await findImportedRdmDbNameInList('rdmCaCertInvalidBody')); - await t.expect(myRedisDatabasePage.AddRedisDatabase.caCertField.textContent).eql('No CA Certificate', 'CA certificate was imported'); - await t.expect(myRedisDatabasePage.AddRedisDatabase.clientCertField.exists).notOk('Client certificate was imported'); + await t.expect(myRedisDatabasePage.AddRedisDatabaseDialog.caCertField.textContent).eql('No CA Certificate', 'CA certificate was imported'); + await t.expect(myRedisDatabasePage.AddRedisDatabaseDialog.clientCertField.exists).notOk('Client certificate was imported'); + await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.cancelButton); await databaseHelper.clickOnEditDatabaseByName(await findImportedRdmDbNameInList('rdmInvalidClientCert')); - await t.expect(myRedisDatabasePage.AddRedisDatabase.caCertField.textContent).eql('No CA Certificate', 'CA certificate was imported'); - await t.expect(myRedisDatabasePage.AddRedisDatabase.clientCertField.exists).notOk('Client certificate was imported'); + await t.expect(myRedisDatabasePage.AddRedisDatabaseDialog.caCertField.textContent).eql('No CA Certificate', 'CA certificate was imported'); + await t.expect(myRedisDatabasePage.AddRedisDatabaseDialog.clientCertField.exists).notOk('Client certificate was imported'); + await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.cancelButton); // 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 t.click(myRedisDatabasePage.closeImportBtn); await databasesActions.verifyDatabasesDisplayed(db.dbNames); } // Verify that user can import Sentinel database connections by corresponding fields in JSON await databaseHelper.clickOnEditDatabaseByName(dbData[1].dbNames[2]); - await t.expect(myRedisDatabasePage.AddRedisDatabase.sentinelForm.textContent).contains('Sentinel', 'Sentinel connection type import incorrect'); + await t.expect(myRedisDatabasePage.AddRedisDatabaseDialog.sentinelForm.textContent).contains('Sentinel', 'Sentinel connection type import incorrect'); + await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.cancelButton); await myRedisDatabasePage.clickOnDBByName(dbData[1].dbNames[2]); await Common.checkURLContainsText('browser'); }); test('Certificates import with/without path', async t => { await databasesActions.importDatabase({ path: rdmData.sshPath }); - await t.click(myRedisDatabasePage.okDialogBtn); + await t.click(myRedisDatabasePage.closeImportBtn); // Verify that when user imports a certificate and the same certificate body already exists, the existing certificate (with its name) is applied await databaseHelper.clickOnEditDatabaseByName(rdmListOfCertsDB[0].name); - await t.expect(myRedisDatabasePage.AddRedisDatabase.caCertField.textContent).eql(rdmListOfCertsDB[0].caCert.name, 'CA certificate import incorrect'); - await t.expect(myRedisDatabasePage.AddRedisDatabase.clientCertField.textContent).eql(rdmListOfCertsDB[0].clientCert.name, 'Client certificate import incorrect'); + await t.expect(myRedisDatabasePage.AddRedisDatabaseDialog.caCertField.textContent).eql(rdmListOfCertsDB[0].caCert.name, 'CA certificate import incorrect'); + await t.expect(myRedisDatabasePage.AddRedisDatabaseDialog.clientCertField.textContent).eql(rdmListOfCertsDB[0].clientCert.name, 'Client certificate import incorrect'); + await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.cancelButton); await databaseHelper.clickOnEditDatabaseByName(rdmListOfCertsDB[1].name); - await t.expect(myRedisDatabasePage.AddRedisDatabase.caCertField.textContent).eql(rdmListOfCertsDB[0].caCert.name, 'CA certificate name with the same body is incorrect'); - await t.expect(myRedisDatabasePage.AddRedisDatabase.clientCertField.textContent).eql(rdmListOfCertsDB[0].clientCert.name, 'Client certificate name with the same body is incorrect'); + await t.expect(myRedisDatabasePage.AddRedisDatabaseDialog.caCertField.textContent).eql(rdmListOfCertsDB[0].caCert.name, 'CA certificate name with the same body is incorrect'); + await t.expect(myRedisDatabasePage.AddRedisDatabaseDialog.clientCertField.textContent).eql(rdmListOfCertsDB[0].clientCert.name, 'Client certificate name with the same body is incorrect'); + await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.cancelButton); // Verify that when user imports a certificate and the same certificate name exists but with a different body, the certificate imported with "({incremental_number})_certificate_name" name await databaseHelper.clickOnEditDatabaseByName(rdmListOfCertsDB[2].name); - await t.expect(myRedisDatabasePage.AddRedisDatabase.caCertField.textContent).eql(`1_${rdmListOfCertsDB[0].caCert.name}`, 'CA certificate name with the same body is incorrect'); - await t.expect(myRedisDatabasePage.AddRedisDatabase.clientCertField.textContent).eql(`1_${rdmListOfCertsDB[0].clientCert.name}`, 'Client certificate name with the same body is incorrect'); + await t.expect(myRedisDatabasePage.AddRedisDatabaseDialog.caCertField.textContent).eql(`1_${rdmListOfCertsDB[0].caCert.name}`, 'CA certificate name with the same body is incorrect'); + await t.expect(myRedisDatabasePage.AddRedisDatabaseDialog.clientCertField.textContent).eql(`1_${rdmListOfCertsDB[0].clientCert.name}`, 'Client certificate name with the same body is incorrect'); + await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.cancelButton); // Verify that when user imports a certificate by path and the same certificate body already exists, the existing certificate (with its name) is applied await databaseHelper.clickOnEditDatabaseByName(rdmListOfCertsDB[3].name); - await t.expect(myRedisDatabasePage.AddRedisDatabase.caCertField.textContent).eql('caPath', 'CA certificate import incorrect'); - await t.expect(myRedisDatabasePage.AddRedisDatabase.clientCertField.textContent).eql('clientPath', 'Client certificate import incorrect'); + await t.expect(myRedisDatabasePage.AddRedisDatabaseDialog.caCertField.textContent).eql('caPath', 'CA certificate import incorrect'); + await t.expect(myRedisDatabasePage.AddRedisDatabaseDialog.clientCertField.textContent).eql('clientPath', 'Client certificate import incorrect'); + await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.cancelButton); await databaseHelper.clickOnEditDatabaseByName(rdmListOfCertsDB[4].name); - await t.expect(myRedisDatabasePage.AddRedisDatabase.caCertField.textContent).eql('caPath', 'CA certificate import incorrect'); - await t.expect(myRedisDatabasePage.AddRedisDatabase.clientCertField.textContent).eql('clientPath', 'Client certificate import incorrect'); + await t.expect(myRedisDatabasePage.AddRedisDatabaseDialog.caCertField.textContent).eql('caPath', 'CA certificate import incorrect'); + await t.expect(myRedisDatabasePage.AddRedisDatabaseDialog.clientCertField.textContent).eql('clientPath', 'Client certificate import incorrect'); + await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.cancelButton); // Verify that when user imports a certificate by path and the same certificate name exists but with a different body, the certificate imported with "({incremental_number})certificate_name" name await databaseHelper.clickOnEditDatabaseByName(rdmListOfCertsDB[5].name); - await t.expect(myRedisDatabasePage.AddRedisDatabase.caCertField.textContent).eql('1_caPath', 'CA certificate import incorrect'); - await t.expect(myRedisDatabasePage.AddRedisDatabase.clientCertField.textContent).eql('1_clientPath', 'Client certificate import incorrect'); + await t.expect(myRedisDatabasePage.AddRedisDatabaseDialog.caCertField.textContent).eql('1_caPath', 'CA certificate import incorrect'); + await t.expect(myRedisDatabasePage.AddRedisDatabaseDialog.clientCertField.textContent).eql('1_clientPath', 'Client certificate import incorrect'); + await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.cancelButton); }); test('Import SSH parameters', async t => { const sshAgentsResult = 'SSH Agents are not supported'; - // const sshPrivateKey = '-----BEGIN OPENSSH PRIVATE KEY-----'; await databasesActions.importDatabase(racompSSHData); // Fully imported table with SSH @@ -251,18 +260,20 @@ test('Import SSH parameters', async t => { // Verify that database is partially imported with corresponding message when the ssh_agent_path specified in imported JSON await t.expect(myRedisDatabasePage.importResult.withText(sshAgentsResult).exists).ok('SSH agents not supported message not displayed in result'); - await t.click(myRedisDatabasePage.okDialogBtn); + await t.click(myRedisDatabasePage.closeImportBtn); await databaseHelper.clickOnEditDatabaseByName(racompListOfSSHDB[0].name); // Verify that user can import the SSH parameters with Password - await t.expect(myRedisDatabasePage.AddRedisDatabase.sshHostInput.value).eql(racompListOfSSHDB[0].sshHost, 'SSH host import incorrect'); - await t.expect(myRedisDatabasePage.AddRedisDatabase.sshPortInput.value).eql((racompListOfSSHDB[0].sshPort).toString(), 'SSH port import incorrect'); - await t.expect(myRedisDatabasePage.AddRedisDatabase.sshUsernameInput.value).eql(racompListOfSSHDB[0].sshUser, 'SSH username import incorrect'); + await t.expect(myRedisDatabasePage.AddRedisDatabaseDialog.sshHostInput.value).eql(racompListOfSSHDB[0].sshHost, 'SSH host import incorrect'); + await t.expect(myRedisDatabasePage.AddRedisDatabaseDialog.sshPortInput.value).eql((racompListOfSSHDB[0].sshPort).toString(), 'SSH port import incorrect'); + await t.expect(myRedisDatabasePage.AddRedisDatabaseDialog.sshUsernameInput.value).eql(racompListOfSSHDB[0].sshUser, 'SSH username import incorrect'); // Verify that password, passphrase and private key are hidden for SSH option - await t.expect(myRedisDatabasePage.AddRedisDatabase.sshPasswordInput.value).eql(hiddenPassword, 'SSH password import incorrect'); + await t.expect(myRedisDatabasePage.AddRedisDatabaseDialog.sshPasswordInput.value).eql(hiddenPassword, 'SSH password import incorrect'); + await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.cancelButton); await databaseHelper.clickOnEditDatabaseByName(racompListOfSSHDB[1].name); // Verify that user can import the SSH Private Key both by its value specified in the file and by the file path - await t.expect(myRedisDatabasePage.AddRedisDatabase.sshPrivateKeyInput.textContent).contains(hiddenPassword, 'SSH Private key import incorrect'); + await t.expect(myRedisDatabasePage.AddRedisDatabaseDialog.sshPrivateKeyInput.textContent).contains(hiddenPassword, 'SSH Private key import incorrect'); // Verify that user can import the SSH parameters with Passcode - await t.expect(myRedisDatabasePage.AddRedisDatabase.sshPassphraseInput.value).eql(hiddenPassword, 'SSH Passphrase import incorrect'); + await t.expect(myRedisDatabasePage.AddRedisDatabaseDialog.sshPassphraseInput.value).eql(hiddenPassword, 'SSH Passphrase import incorrect'); + await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.cancelButton); }); diff --git a/tests/e2e/tests/web/critical-path/database/logical-databases.e2e.ts b/tests/e2e/tests/web/critical-path/database/logical-databases.e2e.ts index 4a5a43764d..6c24d9d96f 100644 --- a/tests/e2e/tests/web/critical-path/database/logical-databases.e2e.ts +++ b/tests/e2e/tests/web/critical-path/database/logical-databases.e2e.ts @@ -19,21 +19,21 @@ fixture `Logical databases` test('Verify that user can add DB with logical index via host and port from Add DB manually form', async t => { const index = '10'; - await myRedisDatabasePage.AddRedisDatabase.addRedisDataBase(ossStandaloneConfig); + await myRedisDatabasePage.AddRedisDatabaseDialog.addRedisDataBase(ossStandaloneConfig); // Verify that user can test database connection and see success message - await t.click(myRedisDatabasePage.AddRedisDatabase.testConnectionBtn); + await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.testConnectionBtn); await t.expect(myRedisDatabasePage.Toast.toastHeader.textContent).contains('Connection is successful', 'Standalone connection is not successful'); // Enter logical index - await t.click(myRedisDatabasePage.AddRedisDatabase.databaseIndexCheckbox); - await t.typeText(myRedisDatabasePage.AddRedisDatabase.databaseIndexInput, index, { replace: true, paste: true }); + await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.databaseIndexCheckbox); + await t.typeText(myRedisDatabasePage.AddRedisDatabaseDialog.databaseIndexInput, index, { replace: true, paste: true }); // *** - outdated - Verify that user when users select DB index they can see info message how to work with DB index in add DB screen // Verify that logical db message not displayed in add database form - await t.expect(myRedisDatabasePage.AddRedisDatabase.databaseIndexMessage.exists).notOk('Index message is still displayed') - .expect(myRedisDatabasePage.AddRedisDatabase.databaseIndexCheckbox.parent().withExactText('Select Logical Database').exists).ok('Checkbox text not displayed'); + await t.expect(myRedisDatabasePage.AddRedisDatabaseDialog.databaseIndexMessage.exists).notOk('Index message is still displayed') + .expect(myRedisDatabasePage.AddRedisDatabaseDialog.databaseIndexCheckbox.parent().withExactText('Select Logical Database').exists).ok('Checkbox text not displayed'); // Click for saving - await t.click(myRedisDatabasePage.AddRedisDatabase.addRedisDatabaseButton); + await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.addRedisDatabaseButton); // Verify that the database is in the list await t.expect(myRedisDatabasePage.dbNameList.withText(ossStandaloneConfig.databaseName).exists).ok('Database not exist', { timeout: 10000 }); // Verify that if user adds DB with logical DB > 0, DB name contains postfix "space+[{database index}]" diff --git a/tests/e2e/tests/web/critical-path/database/modules.e2e.ts b/tests/e2e/tests/web/critical-path/database/modules.e2e.ts index 33040e685a..d882f3c56d 100644 --- a/tests/e2e/tests/web/critical-path/database/modules.e2e.ts +++ b/tests/e2e/tests/web/critical-path/database/modules.e2e.ts @@ -49,15 +49,15 @@ test('Verify that user can see DB modules on DB list page for Standalone DB', as const expectedName = await moduleList[i].getAttribute('data-testid'); await t.expect(moduleName).eql(expectedName, `${moduleName} icon not found`); } - //Minimize the window to check quantifier + // Minimize the window to check quantifier await t.resizeWindow(1000, 700); - //Verify that user can see +N icon (where N>1) on DB list page when modules icons don't fit the Module column width + // Verify that user can see +N icon (where N>1) on DB list page when modules icons don't fit the Module column width await t.expect(myRedisDatabasePage.moduleQuantifier.textContent).eql('+3'); await t.expect(myRedisDatabasePage.moduleQuantifier.exists).ok('Quantifier icon not found'); - //Verify that user can hover over the module icons and see tooltip with all modules name + // Verify that user can hover over the module icons and see tooltip with all modules name await t.hover(myRedisDatabasePage.moduleQuantifier); await t.expect(myRedisDatabasePage.moduleTooltip.visible).ok('Module tooltip not found'); - //Verify that user can hover over the module icons and see tooltip with version. + // Verify that user can hover over the module icons and see tooltip with version. await myRedisDatabasePage.checkModulesInTooltip(moduleNameList); }); test('Verify that user can see full module list in the Edit mode', async t => { @@ -65,9 +65,9 @@ test('Verify that user can see full module list in the Edit mode', async t => { await t.expect(myRedisDatabasePage.connectionTypeTitle.visible).ok('connection type column not found'); // Open Edit mode await t.click(myRedisDatabasePage.editDatabaseButton); - await myRedisDatabasePage.NavigationHeader.togglePanel(true); - // Verify that module column is not displayed - await t.expect(myRedisDatabasePage.connectionTypeTitle.visible).notOk('connection type column not found'); + // **** Deprecated **** Verify that module column is not displayed + // await myRedisDatabasePage.NavigationHeader.togglePanel(true); + // await t.expect(myRedisDatabasePage.connectionTypeTitle.visible).notOk('connection type column not found'); // Verify modules in Edit mode await myRedisDatabasePage.checkModulesOnPage(moduleList); }); diff --git a/tests/e2e/tests/web/critical-path/memory-efficiency/recommendations.e2e.ts b/tests/e2e/tests/web/critical-path/memory-efficiency/recommendations.e2e.ts index 753896558e..b7a1f327c1 100644 --- a/tests/e2e/tests/web/critical-path/memory-efficiency/recommendations.e2e.ts +++ b/tests/e2e/tests/web/critical-path/memory-efficiency/recommendations.e2e.ts @@ -126,7 +126,7 @@ test keyName = `recomKey-${Common.generateWord(10)}`; await browserPage.addStringKey(stringKeyName, '2147476121', 'field'); await t.click(myRedisDatabasePage.NavigationPanel.myRedisDBButton); - await myRedisDatabasePage.AddRedisDatabase.addLogicalRedisDatabase(ossStandaloneConfig, index); + await myRedisDatabasePage.AddRedisDatabaseDialog.addLogicalRedisDatabase(ossStandaloneConfig, index); await myRedisDatabasePage.clickOnDBByName(`${ossStandaloneConfig.databaseName} [db${index}]`); await browserPage.addHashKey(keyName, '2147476121', 'field', 'value'); }) diff --git a/tests/e2e/tests/web/critical-path/rdi/add-job.e2e.ts b/tests/e2e/tests/web/critical-path/rdi/add-job.e2e.ts index 6f25d2c020..cadeb2496e 100644 --- a/tests/e2e/tests/web/critical-path/rdi/add-job.e2e.ts +++ b/tests/e2e/tests/web/critical-path/rdi/add-job.e2e.ts @@ -94,7 +94,7 @@ test('Verify that user insert template for jobs', async() => { await t.expect(enteredText).contains(templateWords, 'template is incorrect'); // Verify that user can see a standard validation on disabled Insert template button when the editor is not empty - await t.hover(myRedisDatabasePage.AddRedisDatabase.testConnectionBtn); + await t.hover(myRedisDatabasePage.AddRedisDatabaseDialog.testConnectionBtn); await rdiInstancePage.verifyTooltipContainsText(templateInsertedTooltip); const buttonClass = rdiInstancePage.templateButton.getAttribute('class'); await t.expect(buttonClass).contains(disabledAttribute, 'Insert Template button is not disabled'); diff --git a/tests/e2e/tests/web/critical-path/url-handling/url-handling.e2e.ts b/tests/e2e/tests/web/critical-path/url-handling/url-handling.e2e.ts index c24b2cdfea..a568f95a8b 100644 --- a/tests/e2e/tests/web/critical-path/url-handling/url-handling.e2e.ts +++ b/tests/e2e/tests/web/critical-path/url-handling/url-handling.e2e.ts @@ -45,10 +45,10 @@ test redirect: 'workbench' }; await t.navigateTo(generateLink(connectUrlParams, redisConnect,commonUrl)); - await t.expect(myRedisDatabasePage.AddRedisDatabase.disabledDatabaseInfo.nth(0).getAttribute('title')).contains(host, 'Wrong host value'); - await t.expect(myRedisDatabasePage.AddRedisDatabase.disabledDatabaseInfo.nth(1).getAttribute('title')).contains(port, 'Wrong port value'); + await t.expect(myRedisDatabasePage.AddRedisDatabaseDialog.disabledDatabaseInfo.nth(0).getAttribute('title')).contains(host, 'Wrong host value'); + await t.expect(myRedisDatabasePage.AddRedisDatabaseDialog.disabledDatabaseInfo.nth(1).getAttribute('title')).contains(port, 'Wrong port value'); await t.wait(5_000); - await t.click(myRedisDatabasePage.AddRedisDatabase.addRedisDatabaseButton); + await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.addRedisDatabaseButton); // wait for db is added await t.wait(10_000); await t.expect(workbenchPage.submitCommandButton.exists).ok('Redirection to Workbench is not correct'); diff --git a/tests/e2e/tests/web/regression/cli/cli-logical-db.e2e.ts b/tests/e2e/tests/web/regression/cli/cli-logical-db.e2e.ts index 8ee79c6f03..bc37fc5915 100644 --- a/tests/e2e/tests/web/regression/cli/cli-logical-db.e2e.ts +++ b/tests/e2e/tests/web/regression/cli/cli-logical-db.e2e.ts @@ -33,7 +33,7 @@ test // Delete database await databaseAPIRequests.deleteStandaloneDatabaseApi(ossStandaloneConfig); })('Verify that working with logical DBs, user can not see 0 DB index in CLI', async t => { - await myRedisDatabasePage.AddRedisDatabase.addLogicalRedisDatabase(ossStandaloneConfig, index); + await myRedisDatabasePage.AddRedisDatabaseDialog.addLogicalRedisDatabase(ossStandaloneConfig, index); await myRedisDatabasePage.clickOnDBByName(ossStandaloneConfig.databaseName); // Open CLI await t.click(browserPage.Cli.cliExpandButton); @@ -46,7 +46,7 @@ test test('Verify that working with logical DBs, user can see N DB index in CLI', async t => { index = '1'; - await myRedisDatabasePage.AddRedisDatabase.addLogicalRedisDatabase(ossStandaloneConfig, index); + await myRedisDatabasePage.AddRedisDatabaseDialog.addLogicalRedisDatabase(ossStandaloneConfig, index); await myRedisDatabasePage.clickOnDBByName(`${ossStandaloneConfig.databaseName } [db${index}]`); // Open CLI await t.click(browserPage.Cli.cliExpandButton); @@ -61,7 +61,7 @@ test('Verify that user can see DB index in the endpoint in CLI header is automat index = '2'; const indexAfter = '3'; - await myRedisDatabasePage.AddRedisDatabase.addLogicalRedisDatabase(ossStandaloneConfig, index); + await myRedisDatabasePage.AddRedisDatabaseDialog.addLogicalRedisDatabase(ossStandaloneConfig, index); await myRedisDatabasePage.clickOnDBByName(`${ossStandaloneConfig.databaseName } [db${index}]`); // Open CLI and verify that user can see DB index in CLI diff --git a/tests/e2e/tests/web/regression/database-overview/database-overview-keys.e2e.ts b/tests/e2e/tests/web/regression/database-overview/database-overview-keys.e2e.ts index 7a6d50c333..880b923804 100644 --- a/tests/e2e/tests/web/regression/database-overview/database-overview-keys.e2e.ts +++ b/tests/e2e/tests/web/regression/database-overview/database-overview-keys.e2e.ts @@ -32,7 +32,7 @@ fixture `Database overview` await databaseHelper.acceptLicenseTermsAndAddDatabase(ossStandaloneRedisearch); await browserPage.addStringKey(keyName); await t.click(myRedisDatabasePage.NavigationPanel.myRedisDBButton); - await myRedisDatabasePage.AddRedisDatabase.addLogicalRedisDatabase(ossStandaloneRedisearch, index); + await myRedisDatabasePage.AddRedisDatabaseDialog.addLogicalRedisDatabase(ossStandaloneRedisearch, index); await myRedisDatabasePage.clickOnDBByName(`${ossStandaloneRedisearch.databaseName} [db${index}]`); keys = await Common.createArrayWithKeyValue(keysAmount); await browserPage.Cli.sendCommandInCli(`MSET ${keys.join(' ')}`); diff --git a/tests/e2e/tests/web/regression/database-overview/database-tls-certificates.e2e.ts b/tests/e2e/tests/web/regression/database-overview/database-tls-certificates.e2e.ts index 0937171d8b..5065d54366 100644 --- a/tests/e2e/tests/web/regression/database-overview/database-tls-certificates.e2e.ts +++ b/tests/e2e/tests/web/regression/database-overview/database-tls-certificates.e2e.ts @@ -26,34 +26,34 @@ fixture `tls certificates` test('Verify that user can remove added certificates', async t => { await t.click(browserPage.NavigationPanel.myRedisDBButton); await myRedisDatabasePage.clickOnEditDBByName(ossStandaloneTlsConfig.databaseName); - await myRedisDatabasePage.AddRedisDatabase.removeCertificateButton(TlsCertificates.CA, 'ca'); + await myRedisDatabasePage.AddRedisDatabaseDialog.removeCertificateButton(TlsCertificates.CA, 'ca'); await myRedisDatabasePage.reloadPage(); // wait for dbs are displayed await t.expect(myRedisDatabasePage.dbNameList.count).gt(0); await myRedisDatabasePage.clickOnEditDBByName(ossStandaloneTlsConfig.databaseName); //verify that ca certificate is deleted - await t.expect(myRedisDatabasePage.AddRedisDatabase.caCertField.textContent).contains('No CA Certificate', 'CA certificate was not deleted'); - await t.click(myRedisDatabasePage.AddRedisDatabase.caCertField); - await t.expect(myRedisDatabasePage.AddRedisDatabase.certificateDropdownList.exists).notOk('CA certificate was not deleted'); + await t.expect(myRedisDatabasePage.AddRedisDatabaseDialog.caCertField.textContent).contains('No CA Certificate', 'CA certificate was not deleted'); + await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.caCertField); + await t.expect(myRedisDatabasePage.AddRedisDatabaseDialog.certificateDropdownList.exists).notOk('CA certificate was not deleted'); //verify that client certificate is deleted - await myRedisDatabasePage.AddRedisDatabase.removeCertificateButton(TlsCertificates.Client, 'client'); + await myRedisDatabasePage.AddRedisDatabaseDialog.removeCertificateButton(TlsCertificates.Client, 'client'); await myRedisDatabasePage.reloadPage(); // wait for dbs are displayed await t.expect(myRedisDatabasePage.dbNameList.count).gt(0); await myRedisDatabasePage.clickOnEditDBByName(ossStandaloneTlsConfig.databaseName); - await t.click(myRedisDatabasePage.AddRedisDatabase.requiresTlsClientCheckbox); - await t.expect(myRedisDatabasePage.AddRedisDatabase.clientCertField.textContent).contains('Add new certificate', 'Client certificate was not deleted'); - - //TODO should be uncommented when the bug is fixed https://redislabs.atlassian.net/browse/RI-6136 + await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.requiresTlsClientCheckbox); + await t.expect(myRedisDatabasePage.AddRedisDatabaseDialog.clientCertField.textContent).contains('Add new certificate', 'Client certificate was not deleted'); + await myRedisDatabasePage.reloadPage(); - // await myRedisDatabasePage.clickOnEditDBByName(ossStandaloneTlsConfig.databaseName); - // await t.expect(myRedisDatabasePage.AddRedisDatabase.requiresTlsClientCheckbox.checked).notOk('the certificate was not removed'); + await myRedisDatabasePage.clickOnEditDBByName(ossStandaloneTlsConfig.databaseName); + await t.expect(myRedisDatabasePage.AddRedisDatabaseDialog.requiresTlsClientCheckbox.checked).notOk('the certificate was not removed'); + await myRedisDatabasePage.reloadPage(); - // await myRedisDatabasePage.clickOnDBByName(ossStandaloneConfig.databaseName!); - // - // await t.click(browserPage.NavigationPanel.myRedisDBButton); - // await myRedisDatabasePage.clickOnDBByName(ossStandaloneTlsConfig.databaseName); - // await t.expect(browserPage.Toast.toastError.textContent).contains('CA or Client certificate', 'user can connect to db without certificates'); + await myRedisDatabasePage.clickOnDBByName(ossStandaloneConfig.databaseName!); + + await t.click(browserPage.NavigationPanel.myRedisDBButton); + await myRedisDatabasePage.clickOnDBByName(ossStandaloneTlsConfig.databaseName); + await t.expect(browserPage.Toast.toastError.textContent).contains('CA or Client certificate', 'user can connect to db without certificates'); }); diff --git a/tests/e2e/tests/web/regression/database/cloud-sso.e2e.ts b/tests/e2e/tests/web/regression/database/cloud-sso.e2e.ts index 0c8d39393e..7ed3b04416 100644 --- a/tests/e2e/tests/web/regression/database/cloud-sso.e2e.ts +++ b/tests/e2e/tests/web/regression/database/cloud-sso.e2e.ts @@ -38,9 +38,9 @@ test('Verify that user can not see the promo Cloud databases for docker build', // Verify that when SSO flag disabled - Use Cloud API Keys displayed not as dropdown await t.click( - myRedisDatabasePage.AddRedisDatabase.addDatabaseButton); + myRedisDatabasePage.AddRedisDatabaseDialog.addDatabaseButton); await t.click( - myRedisDatabasePage.AddRedisDatabase.addAutoDiscoverDatabase); - await t.expect(myRedisDatabasePage.AddRedisDatabase.useCloudAccount.exists).notOk('Use Cloud Account accordion displayed for docker build'); - await t.expect(myRedisDatabasePage.AddRedisDatabase.useCloudKeys.exists).notOk('Use Cloud Keys accordion displayed for docker build'); + myRedisDatabasePage.AddRedisDatabaseDialog.addCloudDatabaseTab); + await t.expect(myRedisDatabasePage.AddRedisDatabaseDialog.useCloudAccount.exists).notOk('Use Cloud Account accordion displayed for docker build'); + await t.expect(myRedisDatabasePage.AddRedisDatabaseDialog.useCloudKeys.exists).notOk('Use Cloud Keys accordion displayed for docker build'); }); diff --git a/tests/e2e/tests/web/regression/database/database-sorting.e2e.ts b/tests/e2e/tests/web/regression/database/database-sorting.e2e.ts index 0f2a4a3b02..ba24f80a56 100644 --- a/tests/e2e/tests/web/regression/database/database-sorting.e2e.ts +++ b/tests/e2e/tests/web/regression/database/database-sorting.e2e.ts @@ -80,9 +80,8 @@ test('Verify that user has the same sorting if db name is changed', async t => { await myRedisDatabasePage.compareInstances(actualDatabaseList, await sortList()); // Change DB name inside of sorted list await databaseHelper.clickOnEditDatabaseByName(ossStandaloneConfig.databaseName); - await t.click(myRedisDatabasePage.editAliasButton); - await t.typeText(myRedisDatabasePage.aliasInput, newDBName, { replace: true, paste: true }); - await t.pressKey('enter'); + await t.typeText(myRedisDatabasePage.AddRedisDatabaseDialog.databaseAliasInput, newDBName, { replace: true, paste: true }); + await t.click(myRedisDatabasePage.submitChangesButton); // Change DB is control list const index = databases.findIndex((item) => { return item.databaseName === oldDBName; diff --git a/tests/e2e/tests/web/regression/database/edit-db.e2e.ts b/tests/e2e/tests/web/regression/database/edit-db.e2e.ts index 1b816bd1b8..202fd5c8ea 100644 --- a/tests/e2e/tests/web/regression/database/edit-db.e2e.ts +++ b/tests/e2e/tests/web/regression/database/edit-db.e2e.ts @@ -34,11 +34,9 @@ test('Verify that user can edit DB alias of Standalone DB', async t => { await databaseHelper.clickOnEditDatabaseByName(database.databaseName); // Verify that timeout input is displayed for edit db window with default value when it wasn't specified - await t.expect(myRedisDatabasePage.AddRedisDatabase.timeoutInput.value).eql('30', 'Timeout is not defaulted to 30'); + await t.expect(myRedisDatabasePage.AddRedisDatabaseDialog.timeoutInput.value).eql('30', 'Timeout is not defaulted to 30'); - await t.click(myRedisDatabasePage.editAliasButton); - await t.typeText(myRedisDatabasePage.aliasInput, newDatabaseName, { replace: true }); - await t.click(myRedisDatabasePage.EditorButton.applyBtn); + await t.typeText(myRedisDatabasePage.AddRedisDatabaseDialog.databaseAliasInput, newDatabaseName, { replace: true, paste: true }); await t.click(myRedisDatabasePage.submitChangesButton); // Verify that database has new alias await t.expect(myRedisDatabasePage.dbNameList.withExactText(newDatabaseName).exists).ok('The database with new alias is in not the list', { timeout: 10000 }); diff --git a/tests/e2e/tests/web/regression/database/logical-databases.e2e.ts b/tests/e2e/tests/web/regression/database/logical-databases.e2e.ts index 597f802ffd..a16d6f6e2d 100644 --- a/tests/e2e/tests/web/regression/database/logical-databases.e2e.ts +++ b/tests/e2e/tests/web/regression/database/logical-databases.e2e.ts @@ -23,10 +23,10 @@ test('Verify that if user enters any index of the logical database that does not const index = '0'; // Add database with logical index - await myRedisDatabasePage.AddRedisDatabase.addRedisDataBase(ossStandaloneConfig); - await t.click(myRedisDatabasePage.AddRedisDatabase.databaseIndexCheckbox); - await t.typeText(myRedisDatabasePage.AddRedisDatabase.databaseIndexInput, index, { paste: true }); - await t.click(myRedisDatabasePage.AddRedisDatabase.addRedisDatabaseButton); + await myRedisDatabasePage.AddRedisDatabaseDialog.addRedisDataBase(ossStandaloneConfig); + await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.databaseIndexCheckbox); + await t.typeText(myRedisDatabasePage.AddRedisDatabaseDialog.databaseIndexInput, index, { paste: true }); + await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.addRedisDatabaseButton); // Open database and run command with non-existing index await myRedisDatabasePage.clickOnDBByName(ossStandaloneConfig.databaseName); await t.click(browserPage.Cli.cliExpandButton); diff --git a/tests/e2e/tests/web/regression/database/redisstack.e2e.ts b/tests/e2e/tests/web/regression/database/redisstack.e2e.ts index 046b3f3e3d..30adf93637 100644 --- a/tests/e2e/tests/web/regression/database/redisstack.e2e.ts +++ b/tests/e2e/tests/web/regression/database/redisstack.e2e.ts @@ -40,7 +40,8 @@ test('Verify that user can see module list Redis Stack icon hovering (without Re // Check all Redis Stack modules inside await myRedisDatabasePage.checkModulesInTooltip(moduleNameList); }); -test('Verify that user can see Redis Stack icon in Edit mode near the DB name', async t => { +// Deprecated since RI-6268, TODO remove after entire feature +test.skip('Verify that user can see Redis Stack icon in Edit mode near the DB name', async t => { // Open Edit mode await t.click(myRedisDatabasePage.editDatabaseButton); // Check redis stack icon near the db name diff --git a/tests/e2e/tests/web/regression/url-handling/url-handling.e2e.ts b/tests/e2e/tests/web/regression/url-handling/url-handling.e2e.ts index e431d6955d..2a6facde89 100644 --- a/tests/e2e/tests/web/regression/url-handling/url-handling.e2e.ts +++ b/tests/e2e/tests/web/regression/url-handling/url-handling.e2e.ts @@ -50,16 +50,16 @@ test ]; await t.navigateTo(generateLink(connectUrlParams)); - await t.expect(myRedisDatabasePage.AddRedisDatabase.caCertField.textContent).contains('Add new CA certificate', 'add CA certificate is not shown'); - await t.expect(myRedisDatabasePage.AddRedisDatabase.clientCertField.textContent).contains('Add new certificate', 'add client certificate is not shown'); - await t.hover(myRedisDatabasePage.AddRedisDatabase.addRedisDatabaseButton); + await t.expect(myRedisDatabasePage.AddRedisDatabaseDialog.caCertField.textContent).contains('Add new CA certificate', 'add CA certificate is not shown'); + await t.expect(myRedisDatabasePage.AddRedisDatabaseDialog.clientCertField.textContent).contains('Add new certificate', 'add client certificate is not shown'); + await t.hover(myRedisDatabasePage.AddRedisDatabaseDialog.addRedisDatabaseButton); for (const text of tooltipText) { await browserActions.verifyTooltipContainsText(text, true); } // Verify that user can see the Test Connection button enabled/disabled with the same rules as the button to add/apply the changes - await t.hover(myRedisDatabasePage.AddRedisDatabase.testConnectionBtn); + await t.hover(myRedisDatabasePage.AddRedisDatabaseDialog.testConnectionBtn); for (const text of tooltipText) { await browserActions.verifyTooltipContainsText(text, true); } diff --git a/tests/e2e/tests/web/smoke/database/add-standalone-db.e2e.ts b/tests/e2e/tests/web/smoke/database/add-standalone-db.e2e.ts index 8ee97ab8df..0c57940312 100644 --- a/tests/e2e/tests/web/smoke/database/add-standalone-db.e2e.ts +++ b/tests/e2e/tests/web/smoke/database/add-standalone-db.e2e.ts @@ -50,20 +50,19 @@ test databaseName = `test_standalone-${chance.string({ length: 10 })}`; // Fill the add database form - await myRedisDatabasePage.AddRedisDatabase.addDatabaseButton.with({ visibilityCheck: true, timeout: 10000 })(); - await t - .click(myRedisDatabasePage.AddRedisDatabase.addDatabaseButton); + await myRedisDatabasePage.AddRedisDatabaseDialog.addDatabaseButton.with({ visibilityCheck: true, timeout: 10000 })(); + await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.addDatabaseButton); // Verify that telemetry event 'CONFIG_DATABASES_CLICKED' sent and has all expected properties await telemetry.verifyEventHasProperties(telemetryEvents[1], clickButtonExpectedProperties, logger); - await t.click(myRedisDatabasePage.AddRedisDatabase.addDatabaseManually); + await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.addDatabaseManually); await t - .typeText(myRedisDatabasePage.AddRedisDatabase.hostInput, ossStandaloneConfig.host, { replace: true, paste: true }) - .typeText(myRedisDatabasePage.AddRedisDatabase.portInput, ossStandaloneConfig.port, { replace: true, paste: true }) - .typeText(myRedisDatabasePage.AddRedisDatabase.databaseAliasInput, databaseName, { replace: true, paste: true }) + .typeText(myRedisDatabasePage.AddRedisDatabaseDialog.hostInput, ossStandaloneConfig.host, { replace: true, paste: true }) + .typeText(myRedisDatabasePage.AddRedisDatabaseDialog.portInput, ossStandaloneConfig.port, { replace: true, paste: true }) + .typeText(myRedisDatabasePage.AddRedisDatabaseDialog.databaseAliasInput, databaseName, { replace: true, paste: true }) // Verify that user can customize the connection timeout for the manual flow - .typeText(myRedisDatabasePage.AddRedisDatabase.timeoutInput, connectionTimeout, { replace: true, paste: true }); + .typeText(myRedisDatabasePage.AddRedisDatabaseDialog.timeoutInput, connectionTimeout, { replace: true, paste: true }); await t - .click(myRedisDatabasePage.AddRedisDatabase.addRedisDatabaseButton) + .click(myRedisDatabasePage.AddRedisDatabaseDialog.addRedisDatabaseButton) // Wait for database to be exist .expect(myRedisDatabasePage.dbNameList.withExactText(databaseName).exists).ok('The database not displayed', { timeout: 10000 }) // Close message @@ -83,7 +82,8 @@ test // Verify that connection timeout value saved await myRedisDatabasePage.clickOnEditDBByName(databaseName); - await t.expect(myRedisDatabasePage.AddRedisDatabase.timeoutInput.value).eql(connectionTimeout, 'Connection timeout is not customized'); + await t.expect(myRedisDatabasePage.AddRedisDatabaseDialog.timeoutInput.value).eql(connectionTimeout, 'Connection timeout is not customized'); + await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.cancelButton); }); test .meta({ rte: rte.ossCluster }) diff --git a/tests/e2e/tests/web/smoke/database/autodiscover-db.e2e.ts b/tests/e2e/tests/web/smoke/database/autodiscover-db.e2e.ts index 47d794b3e1..453a7f8eaa 100644 --- a/tests/e2e/tests/web/smoke/database/autodiscover-db.e2e.ts +++ b/tests/e2e/tests/web/smoke/database/autodiscover-db.e2e.ts @@ -31,17 +31,17 @@ test // unskip after closing https://redislabs.atlassian.net/browse/RI-5768 test.skip .meta({ rte: rte.reCloud })('Verify that user can add a subscription via auto-discover flow', async t => { - await myRedisDatabasePage.AddRedisDatabase.addAutodiscoverRECloudDatabase( + await myRedisDatabasePage.AddRedisDatabaseDialog.addAutodiscoverRECloudDatabase( cloudDatabaseConfig.accessKey, cloudDatabaseConfig.secretKey ); await t.click( - myRedisDatabasePage.AddRedisDatabase.addRedisDatabaseButton); + myRedisDatabasePage.AddRedisDatabaseDialog.addRedisDatabaseButton); await t.expect(autoDiscoverREDatabases.title.withExactText('Redis Cloud Subscriptions').exists) .ok('Subscriptions list not displayed', { timeout: 120000 }); // Select subscriptions - await t.click(myRedisDatabasePage.AddRedisDatabase.selectAllCheckbox); - await t.click(myRedisDatabasePage.AddRedisDatabase.showDatabasesButton); + await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.selectAllCheckbox); + await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.showDatabasesButton); await t.expect(autoDiscoverREDatabases.title.withExactText('Redis Cloud Databases').exists) .ok('database page is not displayed', { timeout: 120000 }); }); diff --git a/tests/e2e/tests/web/smoke/database/edit-db.e2e.ts b/tests/e2e/tests/web/smoke/database/edit-db.e2e.ts index 8014159832..5c4f6c4c7a 100644 --- a/tests/e2e/tests/web/smoke/database/edit-db.e2e.ts +++ b/tests/e2e/tests/web/smoke/database/edit-db.e2e.ts @@ -27,7 +27,7 @@ test await databaseHelper.deleteDatabase(ossStandaloneConfig.databaseName); })('Verify that user open edit view of database', async t => { await userAgreementDialog.acceptLicenseTerms(); - await t.expect(myRedisDatabasePage.AddRedisDatabase.addDatabaseButton.exists).ok('The add redis database view not found', { timeout: 10000 }); + await t.expect(myRedisDatabasePage.AddRedisDatabaseDialog.addDatabaseButton.exists).ok('The add redis database view not found', { timeout: 10000 }); await databaseHelper.addNewStandaloneDatabase(ossStandaloneConfig); await myRedisDatabasePage.clickOnDBByName(ossStandaloneConfig.databaseName); await t.expect(getPageUrl()).contains('browser', 'Browser page not opened'); diff --git a/tests/e2e/web.runner.ci.ts b/tests/e2e/web.runner.ci.ts index 0589af67e4..2699224643 100644 --- a/tests/e2e/web.runner.ci.ts +++ b/tests/e2e/web.runner.ci.ts @@ -34,7 +34,7 @@ import testcafe from 'testcafe'; ]) .run({ skipJsErrors: true, - browserInitTimeout: 60000, + browserInitTimeout: 120000, selectorTimeout: 5000, assertionTimeout: 5000, speed: 1,