Skip to content

Commit b77534d

Browse files
authored
Merge pull request #4098 from RedisInsight/e2e/feature/RI-6268_enhance-form-to-add-database-connections
E2e/feature/ri 6268 enhance form to add database connections
2 parents e8d9c3c + d17a45f commit b77534d

38 files changed

+309
-298
lines changed

tests/e2e/common-actions/databases-actions.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,11 @@ export class DatabasesActions {
2424
*/
2525
async importDatabase(fileParameters: ImportDatabaseParameters): Promise<void> {
2626
await t
27-
.click(await myRedisDatabasePage.importDatabasesBtn)
27+
.click(myRedisDatabasePage.AddRedisDatabaseDialog.addDatabaseButton)
28+
.click(myRedisDatabasePage.importDatabasesBtn)
2829
.setFilesToUpload(myRedisDatabasePage.importDatabaseInput, [fileParameters.path])
29-
.click(myRedisDatabasePage.submitImportBtn)
30-
.expect(myRedisDatabasePage.importDialogTitle.textContent).eql('Import Results', `Databases from ${fileParameters.type} not imported`);
30+
.click(myRedisDatabasePage.submitChangesButton)
31+
.expect(myRedisDatabasePage.successResultsAccordion.exists).ok(`Databases from ${fileParameters.type} not imported`);
3132
}
3233

3334
/**

tests/e2e/desktop.runner.ci.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,9 +40,7 @@ import testcafe from 'testcafe';
4040
speed: 1,
4141
quarantineMode: { successThreshold: 1, attemptLimit: 3 },
4242
pageRequestTimeout: 20000,
43-
disableMultipleWindows: true,
44-
runExecutionTimeout: 280000,
45-
testExecutionTimeout: 280000
43+
disableMultipleWindows: true
4644
});
4745
})
4846
.then((failedCount) => {

tests/e2e/helpers/api/api-database.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import {
77
databaseParameters,
88
SentinelParameters,
99
ClusterNodes
10-
} from '../../pageObjects/components/myRedisDatabase/add-redis-database';
10+
} from '../../pageObjects/dialogs/add-redis-database-dialog';
1111
import { ResourcePath } from '../constants';
1212
import {
1313
sendGetRequest,

tests/e2e/helpers/database.ts

Lines changed: 25 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import {
33
AddNewDatabaseParameters,
44
SentinelParameters,
55
OSSClusterParameters
6-
} from '../pageObjects/components/myRedisDatabase/add-redis-database';
6+
} from '../pageObjects/dialogs/add-redis-database-dialog';
77
import { DiscoverMasterGroupsPage } from '../pageObjects/sentinel/discovered-sentinel-master-groups-page';
88
import {
99
MyRedisDatabasePage,
@@ -14,6 +14,7 @@ import { UserAgreementDialog } from '../pageObjects/dialogs';
1414
import { DatabaseAPIRequests } from './api/api-database';
1515
import { RedisOverviewPage } from './constants';
1616
import { RdiInstancesListPage } from '../pageObjects/rdi-instances-list-page';
17+
import { updateControlNumber } from './insights';
1718

1819
const myRedisDatabasePage = new MyRedisDatabasePage();
1920
const discoverMasterGroupsPage = new DiscoverMasterGroupsPage();
@@ -32,12 +33,12 @@ export class DatabaseHelper {
3233
databaseParameters: AddNewDatabaseParameters
3334
): Promise<void> {
3435
// Fill the add database form
35-
await myRedisDatabasePage.AddRedisDatabase.addRedisDataBase(
36+
await myRedisDatabasePage.AddRedisDatabaseDialog.addRedisDataBase(
3637
databaseParameters
3738
);
3839
// Click for saving
3940
await t
40-
.click(myRedisDatabasePage.AddRedisDatabase.addRedisDatabaseButton)
41+
.click(myRedisDatabasePage.AddRedisDatabaseDialog.addRedisDatabaseButton)
4142
// Wait for database to be exist
4243
.expect(
4344
myRedisDatabasePage.dbNameList.withExactText(
@@ -57,13 +58,13 @@ export class DatabaseHelper {
5758
databaseParameters: SentinelParameters
5859
): Promise<void> {
5960
// Fill sentinel parameters to auto-discover Master Groups
60-
await myRedisDatabasePage.AddRedisDatabase.discoverSentinelDatabases(
61+
await myRedisDatabasePage.AddRedisDatabaseDialog.discoverSentinelDatabases(
6162
databaseParameters
6263
);
6364
// Click for autodiscover
6465
await t
6566
.click(
66-
myRedisDatabasePage.AddRedisDatabase
67+
myRedisDatabasePage.AddRedisDatabaseDialog
6768
.addRedisDatabaseButton
6869
)
6970
.expect(discoverMasterGroupsPage.addPrimaryGroupButton.exists)
@@ -83,12 +84,12 @@ export class DatabaseHelper {
8384
databaseParameters: AddNewDatabaseParameters
8485
): Promise<void> {
8586
// Fill the add database form
86-
await myRedisDatabasePage.AddRedisDatabase.addAutodiscoverREClusterDatabase(
87+
await myRedisDatabasePage.AddRedisDatabaseDialog.addAutodiscoverREClusterDatabase(
8788
databaseParameters
8889
);
8990
// Click on submit button
9091
await t
91-
.click(myRedisDatabasePage.AddRedisDatabase.addRedisDatabaseButton)
92+
.click(myRedisDatabasePage.AddRedisDatabaseDialog.addRedisDatabaseButton)
9293
// Wait for database to be exist in the list of Autodiscover databases and select it
9394
.expect(
9495
autoDiscoverREDatabases.databaseName.withExactText(
@@ -114,12 +115,12 @@ export class DatabaseHelper {
114115
databaseParameters: OSSClusterParameters
115116
): Promise<void> {
116117
// Enter required parameters for OSS Cluster
117-
await myRedisDatabasePage.AddRedisDatabase.addOssClusterDatabase(
118+
await myRedisDatabasePage.AddRedisDatabaseDialog.addOssClusterDatabase(
118119
databaseParameters
119120
);
120121
// Click for saving
121122
await t
122-
.click(myRedisDatabasePage.AddRedisDatabase.addRedisDatabaseButton)
123+
.click(myRedisDatabasePage.AddRedisDatabaseDialog.addRedisDatabaseButton)
123124
// Check for info message that DB was added
124125
.expect(myRedisDatabasePage.Toast.toastHeader.exists)
125126
.ok('Info message not exists', { timeout: 10000 })
@@ -142,12 +143,12 @@ export class DatabaseHelper {
142143
cloudAPISecretKey: string
143144
): Promise<string> {
144145
// Fill the add database form and Submit
145-
await myRedisDatabasePage.AddRedisDatabase.addAutodiscoverRECloudDatabase(
146+
await myRedisDatabasePage.AddRedisDatabaseDialog.addAutodiscoverRECloudDatabase(
146147
cloudAPIAccessKey,
147148
cloudAPISecretKey
148149
);
149150
await t.click(
150-
myRedisDatabasePage.AddRedisDatabase.addRedisDatabaseButton
151+
myRedisDatabasePage.AddRedisDatabaseDialog.addRedisDatabaseButton
151152
);
152153
await t
153154
.expect(
@@ -157,8 +158,8 @@ export class DatabaseHelper {
157158
)
158159
.ok('Subscriptions list not displayed', { timeout: 120000 });
159160
// Select subscriptions
160-
await t.click(myRedisDatabasePage.AddRedisDatabase.selectAllCheckbox);
161-
await t.click(myRedisDatabasePage.AddRedisDatabase.showDatabasesButton);
161+
await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.selectAllCheckbox);
162+
await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.showDatabasesButton);
162163
// Select databases for adding
163164
const databaseName = await autoDiscoverREDatabases.getDatabaseName();
164165
await t.click(autoDiscoverREDatabases.databaseCheckbox);
@@ -277,12 +278,12 @@ export class DatabaseHelper {
277278
const startTime = Date.now();
278279

279280
await this.acceptLicenseTerms();
280-
await myRedisDatabasePage.AddRedisDatabase.addRedisDataBase(
281+
await myRedisDatabasePage.AddRedisDatabaseDialog.addRedisDataBase(
281282
databaseParameters
282283
);
283284
// Click for saving
284285
await t.click(
285-
myRedisDatabasePage.AddRedisDatabase.addRedisDatabaseButton
286+
myRedisDatabasePage.AddRedisDatabaseDialog.addRedisDatabaseButton
286287
);
287288
await t.wait(3000);
288289
// Reload page until db appears
@@ -320,12 +321,12 @@ export class DatabaseHelper {
320321
);
321322
const startTime = Date.now();
322323

323-
await myRedisDatabasePage.AddRedisDatabase.addRedisDataBase(
324+
await myRedisDatabasePage.AddRedisDatabaseDialog.addRedisDataBase(
324325
databaseParameters
325326
);
326327
// Click for saving
327328
await t.click(
328-
myRedisDatabasePage.AddRedisDatabase.addRedisDatabaseButton
329+
myRedisDatabasePage.AddRedisDatabaseDialog.addRedisDatabaseButton
329330
);
330331
await t.wait(3000);
331332
// Reload page until db appears
@@ -348,13 +349,14 @@ export class DatabaseHelper {
348349
async acceptLicenseTerms(): Promise<void> {
349350
await t.maximizeWindow();
350351
await userAgreementDialog.acceptLicenseTerms();
352+
await updateControlNumber(48.2);
351353
// Open default databases list tab if RDI opened
352354
if (await rdiInstancesListPage.rdiInstanceButton.exists) {
353355
await myRedisDatabasePage.setActivePage(RedisOverviewPage.DataBase);
354356
}
355357
// TODO delete after releasing chatbot
356-
if (await myRedisDatabasePage.AddRedisDatabase.aiChatMessage.exists) {
357-
await t.click(myRedisDatabasePage.AddRedisDatabase.aiCloseMessage)
358+
if (await myRedisDatabasePage.AddRedisDatabaseDialog.aiChatMessage.exists) {
359+
await t.click(myRedisDatabasePage.AddRedisDatabaseDialog.aiCloseMessage)
358360
}
359361
}
360362

@@ -365,7 +367,7 @@ export class DatabaseHelper {
365367
await t
366368
.click(myRedisDatabasePage.NavigationPanel.myRedisDBButton)
367369
.click(
368-
myRedisDatabasePage.AddRedisDatabase.connectToRedisStackButton
370+
myRedisDatabasePage.AddRedisDatabaseDialog.connectToRedisStackButton
369371
);
370372
}
371373

@@ -376,7 +378,7 @@ export class DatabaseHelper {
376378
async deleteDatabase(databaseName: string): Promise<void> {
377379
await t.click(myRedisDatabasePage.NavigationPanel.myRedisDBButton);
378380
if (
379-
await myRedisDatabasePage.AddRedisDatabase.addDatabaseButton.exists
381+
await myRedisDatabasePage.AddRedisDatabaseDialog.addDatabaseButton.exists
380382
) {
381383
await this.deleteDatabaseByNameApi(databaseName);
382384
}
@@ -389,7 +391,7 @@ export class DatabaseHelper {
389391
async deleteCustomDatabase(databaseName: string): Promise<void> {
390392
await t.click(myRedisDatabasePage.NavigationPanel.myRedisDBButton);
391393
if (
392-
await myRedisDatabasePage.AddRedisDatabase.addDatabaseButton.exists
394+
await myRedisDatabasePage.AddRedisDatabaseDialog.addDatabaseButton.exists
393395
) {
394396
await myRedisDatabasePage.deleteDatabaseByName(databaseName);
395397
}
@@ -404,7 +406,7 @@ export class DatabaseHelper {
404406
databaseParameters: AddNewDatabaseParameters
405407
): Promise<void> {
406408
if (
407-
await myRedisDatabasePage.AddRedisDatabase.addDatabaseButton.exists
409+
await myRedisDatabasePage.AddRedisDatabaseDialog.addDatabaseButton.exists
408410
) {
409411
await this.acceptLicenseTermsAndAddDatabase(databaseParameters);
410412
}

tests/e2e/helpers/insights.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
11
import * as path from 'path';
22
import * as fs from 'fs-extra';
3-
import { BasePage } from '../pageObjects';
43
import { syncFeaturesApi } from './api/api-info';
54
import { DatabaseScripts, DbTableParameters } from './database-scripts';
5+
import { t } from 'testcafe';
66

7-
const basePage = new BasePage();
87
const dbTableParams: DbTableParameters = {
98
tableName: 'features_config',
109
columnName: 'controlNumber',
@@ -41,7 +40,7 @@ export async function updateControlNumber(controlNumber: number): Promise<void>
4140
await syncFeaturesApi();
4241
await DatabaseScripts.updateColumnValueInDBTable({ ...dbTableParams, rowValue: controlNumber });
4342
await syncFeaturesApi();
44-
await basePage.reloadPage();
43+
await t.eval(() => location.reload());
4544
}
4645

4746
/**

tests/e2e/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
"build:ui": "yarn --cwd ../../ build:ui",
1414
"redis:last": "docker run --name redis-last-version -p 7777:6379 -d redislabs/redismod",
1515
"start:app": "cross-env yarn start:api",
16-
"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",
16+
"test:chrome": "ts-node ./web.runner.ts",
1717
"test:chrome:ci": "ts-node ./web.runner.ci.ts",
1818
"test": "yarn test:chrome",
1919
"lint": "eslint . --ext .ts,.js,.tsx,.jsx",

tests/e2e/pageObjects/components/myRedisDatabase/add-redis-database.ts renamed to tests/e2e/pageObjects/dialogs/add-redis-database-dialog.ts

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import { Selector, t } from 'testcafe';
2-
import { TlsCertificates } from '../../../helpers/constants';
3-
import { RedisCloudSigninPanel } from '../redis-cloud-sign-in-panel';
2+
import { TlsCertificates } from '../../helpers/constants';
3+
import { RedisCloudSigninPanel } from '../components/redis-cloud-sign-in-panel';
44

5-
export class AddRedisDatabase {
5+
export class AddRedisDatabaseDialog {
66
RedisCloudSigninPanel = new RedisCloudSigninPanel();
77

88
//-------------------------------------------------------------------------------------------
@@ -14,8 +14,9 @@ export class AddRedisDatabase {
1414
// BUTTONS
1515
addDatabaseButton = Selector('[data-testid^=add-redis-database]');
1616
addRedisDatabaseButton = Selector('[data-testid=btn-submit]');
17-
addDatabaseManually = Selector('[data-testid=add-manual]');
18-
addAutoDiscoverDatabase = Selector('[data-testid=add-auto]');
17+
addDatabaseManually = Selector('[data-testid=add-database_tab_manual]');
18+
addAutoDiscoverDatabase = Selector('[data-testid=add-database_tab_software]');
19+
addCloudDatabaseTab = Selector('[data-testid=add-database_tab_cloud]');
1920
redisClusterType = Selector('[data-test-subj=radio-btn-enterprise-cluster]');
2021
redisCloudProType = Selector('[data-test-subj=radio-btn-cloud-pro]');
2122
redisSentinelType = Selector('[data-test-subj=radio-btn-sentinel]');
@@ -27,9 +28,7 @@ export class AddRedisDatabase {
2728
connectToRedisStackButton = Selector('[aria-label="Connect to database"]');
2829
cloneDatabaseButton = Selector('[data-testid=clone-db-btn]');
2930
sentinelNavigation = Selector('[data-testid=sentinel-nav-group]');
30-
cloneSentinelNavigation = Selector('[data-testid=sentinel-nav-group-clone]');
3131
sentinelDatabaseNavigation = Selector('[data-testid=database-nav-group]');
32-
cloneSentinelDatabaseNavigation = Selector('[data-testid=database-nav-group-clone]');
3332
cancelButton = Selector('[data-testid=btn-cancel]');
3433
showPasswordBtn = Selector('[aria-label^="Show password"]');
3534
testConnectionBtn = Selector('[data-testid=btn-test-connection]');
@@ -60,17 +59,17 @@ export class AddRedisDatabase {
6059
caCertField = Selector('[data-testid=select-ca-cert]', { timeout: 500 });
6160
clientCertField = Selector('[data-testid=select-cert]', { timeout: 500 });
6261
selectCompressor = Selector('[data-testid=select-compressor]', { timeout: 1000 });
63-
useCloudAccount = Selector('[data-testid=use-cloud-account-accordion]');
64-
useCloudKeys = Selector('[data-testid=use-cloud-keys-accordion]');
6562
certificateDropdownList = Selector('div.euiSuperSelect__listbox div');
66-
6763
// CHECKBOXES
6864
useSSHCheckbox = Selector('[data-testid=use-ssh]~div', { timeout: 500 });
6965
dataCompressorCheckbox = Selector('[data-testid=showCompressor] ~ label');
7066
requiresTlsClientCheckbox = Selector('[data-testid=tls-required-checkbox] ~ label');
67+
useCloudAccount = Selector('#cloud-account').parent();
68+
useCloudKeys = Selector('#cloud-api-keys').parent();
7169
// RADIO BUTTONS
7270
sshPasswordRadioBtn = Selector('#password~div', { timeout: 500 });
7371
sshPrivateKeyRadioBtn = Selector('#privateKey~div', { timeout: 500 });
72+
cloudOptionsRadioBtn = Selector('[data-testid=cloud-options]');
7473
// LABELS
7574
dataCompressorLabel = Selector('[data-testid=showCompressor] ~ label', { timeout: 1000 });
7675
aiChatMessage = Selector('[data-testid=ai-chat-message-btn]');
@@ -221,7 +220,7 @@ export class AddRedisDatabase {
221220

222221
await t
223222
.click(this.addDatabaseButton)
224-
.click(this.addAutoDiscoverDatabase);
223+
.click(this.addCloudDatabaseTab);
225224

226225
await t
227226
.typeText(this.accessKeyInput, cloudAPIAccessKey, { replace: true, paste: true })
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,12 @@
1+
import { AddRedisDatabaseDialog } from './add-redis-database-dialog';
2+
import { AuthorizationDialog } from './authorization-dialog';
13
import { OnboardingCardsDialog } from './onboarding-cards-dialog';
24
import { UserAgreementDialog } from './user-agreement-dialog';
35

6+
47
export {
8+
AddRedisDatabaseDialog,
9+
AuthorizationDialog,
510
OnboardingCardsDialog,
611
UserAgreementDialog
712
};

tests/e2e/pageObjects/my-redis-databases-page.ts

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,18 @@
11
import { t, Selector } from 'testcafe';
22
import { DatabaseAPIRequests } from '../helpers/api/api-database';
3-
import { AddRedisDatabase } from './components/myRedisDatabase/add-redis-database';
43
import { InsightsPanel } from './components/insights-panel';
54
import { BaseOverviewPage } from './base-overview-page';
65
import { NavigationPanel } from './components/navigation-panel';
76
import { NavigationHeader } from './components/navigation/navigation-header';
87
import { AuthorizationDialog } from './dialogs/authorization-dialog';
9-
import { RedisCloudSigninPanel } from './components/redis-cloud-sign-in-panel';
8+
import { AddRedisDatabaseDialog } from './dialogs';
109

1110
const databaseAPIRequests = new DatabaseAPIRequests();
1211

1312
export class MyRedisDatabasePage extends BaseOverviewPage {
1413

1514
NavigationPanel = new NavigationPanel();
16-
AddRedisDatabase = new AddRedisDatabase();
15+
AddRedisDatabaseDialog = new AddRedisDatabaseDialog();
1716
InsightsPanel = new InsightsPanel();
1817
NavigationHeader = new NavigationHeader();
1918
AuthorizationDialog = new AuthorizationDialog();
@@ -33,19 +32,20 @@ export class MyRedisDatabasePage extends BaseOverviewPage {
3332
deleteButtonInPopover = Selector('#deletePopover button');
3433
confirmDeleteAllDbButton = Selector('[data-testid=delete-selected-dbs]');
3534
editDatabaseButton = Selector('[data-testid^=edit-instance]');
36-
editAliasButton = Selector('[data-testid=edit-alias-btn]');
35+
popoverHeader = Selector('#formModalHeader');
3736
submitChangesButton = Selector('[data-testid=btn-submit]');
3837
promoButton = Selector('[data-testid=promo-btn]');
3938
sortByDatabaseAlias = Selector('span').withAttribute('title', 'Database Alias');
4039
sortByHostAndPort = Selector('span').withAttribute('title', 'Host:Port');
4140
sortByConnectionType = Selector('span').withAttribute('title', 'Connection Type');
42-
importDatabasesBtn = Selector('[data-testid=import-from-file-btn]');
41+
importDatabasesBtn = Selector('[data-testid=add-database_tab_import]');
42+
retryImportBtn = Selector('[data-testid=btn-retry]');
4343
submitImportBtn = Selector('[data-testid=submit-btn]');
44-
okDialogBtn = Selector('[data-testid=ok-btn]');
4544
removeImportedFileBtn = Selector('[aria-label="Clear selected files"]');
4645
exportBtn = Selector('[data-testid=export-btn]');
4746
exportSelectedDbsBtn = Selector('[data-testid=export-selected-dbs]');
4847
userProfileBtn = Selector('[data-testid=user-profile-btn]');
48+
closeImportBtn = Selector('[data-testid=btn-close]');
4949
//CHECKBOXES
5050
selectAllCheckbox = Selector('[data-test-subj=checkboxSelectAll]');
5151
exportPasswordsCheckbox = Selector('[data-testid=export-passwords]~div', { timeout: 500 });
@@ -74,19 +74,18 @@ export class MyRedisDatabasePage extends BaseOverviewPage {
7474
noResultsFoundMessage = Selector('div').withExactText('No results found');
7575
noResultsFoundText = Selector('div').withExactText('No results matched your search. Try reducing the criteria.');
7676
failedImportMessage = Selector('[data-testid=result-failed]');
77-
importDialogTitle = Selector('[data-testid=import-file-modal-title]');
7877
importResult = Selector('[data-testid^=table-result-]');
7978
userProfileAccountInfo = Selector('[data-testid^=profile-account-]');
8079
portCloudDb = Selector('[class*=column_host]');
8180
// DIALOG
82-
importDbDialog = Selector('[data-testid=import-file-modal]');
8381
successResultsAccordion = Selector('[data-testid^=success-results-]');
8482
partialResultsAccordion = Selector('[data-testid^=partial-results-]');
8583
failedResultsAccordion = Selector('[data-testid^=failed-results-]');
8684
// CONTAINERS
8785
databaseContainer = Selector('.databaseContainer');
8886
connectionTypeTitle = Selector('[data-test-subj=tableHeaderCell_connectionType_2]');
8987
signInAgreement = Selector('[class="euiCheckbox__square"]');
88+
addDatabaseImport = Selector('[data-testid=add-db_import]');
9089

9190
/**
9291
* Click on the database by name

0 commit comments

Comments
 (0)