From 318017a221267ec9d838a38f6ad4bd73c0987159 Mon Sep 17 00:00:00 2001 From: nmammadli Date: Tue, 14 Feb 2023 15:30:52 +0100 Subject: [PATCH 1/3] add test for https://redislabs.atlassian.net/browse/RI-3995 --- tests/e2e/common-actions/browser-actions.ts | 18 ++++- .../tests/regression/browser/add-keys.e2e.ts | 65 ++++++++++++++++++- 2 files changed, 78 insertions(+), 5 deletions(-) diff --git a/tests/e2e/common-actions/browser-actions.ts b/tests/e2e/common-actions/browser-actions.ts index 0462bb95f2..e85bdd7a9a 100644 --- a/tests/e2e/common-actions/browser-actions.ts +++ b/tests/e2e/common-actions/browser-actions.ts @@ -1,4 +1,4 @@ -import { t } from 'testcafe'; +import {Selector, t} from 'testcafe'; import { BrowserPage } from '../pageObjects'; const browserPage = new BrowserPage(); @@ -29,9 +29,8 @@ export class BrowserActions { } } } - /** - * Verify toolip contains text + * Verify tooltip contains text * @param expectedText Expected link that is compared with actual * @param contains Should this tooltip contains or not contains text */ @@ -40,4 +39,17 @@ export class BrowserActions { ? await t.expect(browserPage.tooltip.textContent).contains(expectedText, `"${expectedText}" Text is incorrect in tooltip`) : await t.expect(browserPage.tooltip.textContent).notContains(expectedText, `Tooltip still contains text "${expectedText}"`); } + /** + * Verify that the new key is displayed at the top of the list of keys and opened and pre-selected in List view + * */ + async verifyKeyDisplayedTopAndOpened(keyName: string): Promise { + await t.expect(Selector('[aria-rowindex="1"]').withText(keyName).visible).ok(`element with ${keyName} is not visible in the top of list`); + await t.expect(Selector('[data-testid="key-name-text"]').withText(keyName).visible).ok(`element with ${keyName} is not opened`); + } + /** + * Verify that the new key is not displayed at the top of the list of keys and opened and pre-selected in List view + * */ + async verifyKeyIsNotDisplayedTop(keyName: string): Promise { + await t.expect(Selector('[aria-rowindex="1"]').withText(keyName).visible).notOk(`element with ${keyName} is not visible in the top of list`); + } } diff --git a/tests/e2e/tests/regression/browser/add-keys.e2e.ts b/tests/e2e/tests/regression/browser/add-keys.e2e.ts index 991628a3ed..5aa30d3145 100644 --- a/tests/e2e/tests/regression/browser/add-keys.e2e.ts +++ b/tests/e2e/tests/regression/browser/add-keys.e2e.ts @@ -1,14 +1,23 @@ -import { rte } from '../../../helpers/constants'; +import {keyLength, rte} from '../../../helpers/constants'; import { acceptLicenseTermsAndAddDatabaseApi } from '../../../helpers/database'; import { BrowserPage, CliPage } from '../../../pageObjects'; import { commonUrl, ossStandaloneConfig } from '../../../helpers/conf'; import { deleteStandaloneDatabaseApi } from '../../../helpers/api/api-database'; +import {addKeysViaCli, deleteKeysViaCli, keyTypes} from '../../../helpers/keys'; +import {Common} from '../../../helpers/common'; +import {BrowserActions} from '../../../common-actions/browser-actions'; const browserPage = new BrowserPage(); +const browserActions = new BrowserActions(); +const common = new Common(); const cliPage = new CliPage(); const jsonKeys = [['JSON-string', '"test"'], ['JSON-number', '782364'], ['JSON-boolean', 'true'], ['JSON-null', 'null'], ['JSON-array', '[1, 2, 3]']]; +const keysData = keyTypes.map(object => ({ ...object })); +let keyNames: string[]; +let indexName: string; +keysData.forEach(key => key.keyName = `${key.keyName}` + '-' + `${common.generateWord(keyLength)}`); -fixture `Different JSON types creation` +fixture `Add keys` .meta({ type: 'regression', rte: rte.standalone @@ -44,3 +53,55 @@ test('Verify that user can create different types(string, number, null, array, b } } }); +// https://redislabs.atlassian.net/browse/RI-3995 +test + .before(async() => { + await acceptLicenseTermsAndAddDatabaseApi(ossStandaloneConfig, ossStandaloneConfig.databaseName); + await addKeysViaCli(keysData); + }) + .after(async() => { + let commandString = 'DEL'; + for (const key of keyNames) { + commandString = commandString.concat(` ${key}`); + } + const commands = [`FT.DROPINDEX ${indexName}`, commandString]; + await deleteKeysViaCli(keysData); + await cliPage.sendCommandsInCli(commands); + await deleteStandaloneDatabaseApi(ossStandaloneConfig); + })('Verify that the new key is displayed at the top of the list', async t => { + const keyName = common.generateWord(12); + const keyName1 = common.generateWord(12); + const keyName2 = common.generateWord(36); // to be sure element will not be displayed be at the top of list + const keyName3 = common.generateWord(10); + const keyName4 = `${common.generateWord(10)}-test`; + const keyName5 = `hash-${common.generateWord(12)}`; + keyNames = [keyName, keyName1, keyName2, keyName3, keyName4, keyName5]; + indexName = `idx:${keyName5}`; + const command = `FT.CREATE ${indexName} ON HASH PREFIX 1 hash- SCHEMA name TEXT`; + await cliPage.sendCommandInCli(command); + + await browserPage.addStringKey(keyName); + await browserActions.verifyKeyDisplayedTopAndOpened(keyName); + // Verify displaying added multiple keys + await browserPage.addSetKey(keyName1); + await browserActions.verifyKeyDisplayedTopAndOpened(keyName1); + + await browserPage.addHashKey(keyName2); + await browserActions.verifyKeyDisplayedTopAndOpened(keyName2); + // Verify that the new key is not displayed at the top when filter per key name applied + await browserPage.searchByKeyName('*test'); + await browserPage.addHashKey(keyName4); + await browserActions.verifyKeyIsNotDisplayedTop(keyName4); + + await t.click(browserPage.clearFilterButton); + await t.click(browserPage.treeViewButton); + await browserPage.addHashKey(keyName3); + // Verify that user can see Tree view recalculated when new key is added in Tree view + await browserActions.verifyKeyDisplayedTopAndOpened(keyName3); + + await t.click(browserPage.redisearchModeBtn); + await browserPage.selectIndexByName(indexName); + await browserPage.addHashKey(keyName5, '100000', 'name', 'value'); + // Verify that the new key is not displayed at the top for the Search capability + await browserActions.verifyKeyIsNotDisplayedTop(keyName3); + }); From e9617428debe353c54d6d03c2812da541a2edf6b Mon Sep 17 00:00:00 2001 From: nmammadli Date: Thu, 16 Feb 2023 11:20:49 +0100 Subject: [PATCH 2/3] add step for verifying after refresh --- tests/e2e/common-actions/browser-actions.ts | 4 ++-- .../tests/regression/browser/add-keys.e2e.ts | 19 +++++++++---------- 2 files changed, 11 insertions(+), 12 deletions(-) diff --git a/tests/e2e/common-actions/browser-actions.ts b/tests/e2e/common-actions/browser-actions.ts index e85bdd7a9a..4eb63aacc5 100644 --- a/tests/e2e/common-actions/browser-actions.ts +++ b/tests/e2e/common-actions/browser-actions.ts @@ -44,12 +44,12 @@ export class BrowserActions { * */ async verifyKeyDisplayedTopAndOpened(keyName: string): Promise { await t.expect(Selector('[aria-rowindex="1"]').withText(keyName).visible).ok(`element with ${keyName} is not visible in the top of list`); - await t.expect(Selector('[data-testid="key-name-text"]').withText(keyName).visible).ok(`element with ${keyName} is not opened`); + await t.expect(browserPage.keyNameFormDetails.withText(keyName).visible).ok(`element with ${keyName} is not opened`); } /** * Verify that the new key is not displayed at the top of the list of keys and opened and pre-selected in List view * */ async verifyKeyIsNotDisplayedTop(keyName: string): Promise { - await t.expect(Selector('[aria-rowindex="1"]').withText(keyName).visible).notOk(`element with ${keyName} is not visible in the top of list`); + await t.expect(Selector('[aria-rowindex="1"]').withText(keyName).exists).notOk(`element with ${keyName} is not visible in the top of list`); } } diff --git a/tests/e2e/tests/regression/browser/add-keys.e2e.ts b/tests/e2e/tests/regression/browser/add-keys.e2e.ts index 5aa30d3145..94cba45b76 100644 --- a/tests/e2e/tests/regression/browser/add-keys.e2e.ts +++ b/tests/e2e/tests/regression/browser/add-keys.e2e.ts @@ -1,9 +1,8 @@ -import {keyLength, rte} from '../../../helpers/constants'; +import {rte} from '../../../helpers/constants'; import { acceptLicenseTermsAndAddDatabaseApi } from '../../../helpers/database'; import { BrowserPage, CliPage } from '../../../pageObjects'; -import { commonUrl, ossStandaloneConfig } from '../../../helpers/conf'; +import {commonUrl, ossStandaloneBigConfig, ossStandaloneConfig} from '../../../helpers/conf'; import { deleteStandaloneDatabaseApi } from '../../../helpers/api/api-database'; -import {addKeysViaCli, deleteKeysViaCli, keyTypes} from '../../../helpers/keys'; import {Common} from '../../../helpers/common'; import {BrowserActions} from '../../../common-actions/browser-actions'; @@ -12,10 +11,8 @@ const browserActions = new BrowserActions(); const common = new Common(); const cliPage = new CliPage(); const jsonKeys = [['JSON-string', '"test"'], ['JSON-number', '782364'], ['JSON-boolean', 'true'], ['JSON-null', 'null'], ['JSON-array', '[1, 2, 3]']]; -const keysData = keyTypes.map(object => ({ ...object })); let keyNames: string[]; let indexName: string; -keysData.forEach(key => key.keyName = `${key.keyName}` + '-' + `${common.generateWord(keyLength)}`); fixture `Add keys` .meta({ @@ -55,9 +52,9 @@ test('Verify that user can create different types(string, number, null, array, b }); // https://redislabs.atlassian.net/browse/RI-3995 test + .only .before(async() => { - await acceptLicenseTermsAndAddDatabaseApi(ossStandaloneConfig, ossStandaloneConfig.databaseName); - await addKeysViaCli(keysData); + await acceptLicenseTermsAndAddDatabaseApi(ossStandaloneBigConfig, ossStandaloneBigConfig.databaseName); }) .after(async() => { let commandString = 'DEL'; @@ -65,13 +62,12 @@ test commandString = commandString.concat(` ${key}`); } const commands = [`FT.DROPINDEX ${indexName}`, commandString]; - await deleteKeysViaCli(keysData); await cliPage.sendCommandsInCli(commands); - await deleteStandaloneDatabaseApi(ossStandaloneConfig); + await deleteStandaloneDatabaseApi(ossStandaloneBigConfig); })('Verify that the new key is displayed at the top of the list', async t => { const keyName = common.generateWord(12); const keyName1 = common.generateWord(12); - const keyName2 = common.generateWord(36); // to be sure element will not be displayed be at the top of list + const keyName2 = common.generateWord(36); const keyName3 = common.generateWord(10); const keyName4 = `${common.generateWord(10)}-test`; const keyName5 = `hash-${common.generateWord(12)}`; @@ -88,6 +84,9 @@ test await browserPage.addHashKey(keyName2); await browserActions.verifyKeyDisplayedTopAndOpened(keyName2); + // Verify that user can see the key removed from the top when refresh List view + await t.click(browserPage.refreshKeysButton); + await browserActions.verifyKeyIsNotDisplayedTop(keyName1); // Verify that the new key is not displayed at the top when filter per key name applied await browserPage.searchByKeyName('*test'); await browserPage.addHashKey(keyName4); From dac16c875b003e0a83bde328650b4f6e7793f3ca Mon Sep 17 00:00:00 2001 From: nmammadli Date: Thu, 16 Feb 2023 11:21:58 +0100 Subject: [PATCH 3/3] Update add-keys.e2e.ts delete .only --- tests/e2e/tests/regression/browser/add-keys.e2e.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/e2e/tests/regression/browser/add-keys.e2e.ts b/tests/e2e/tests/regression/browser/add-keys.e2e.ts index 94cba45b76..477352ce49 100644 --- a/tests/e2e/tests/regression/browser/add-keys.e2e.ts +++ b/tests/e2e/tests/regression/browser/add-keys.e2e.ts @@ -52,7 +52,6 @@ test('Verify that user can create different types(string, number, null, array, b }); // https://redislabs.atlassian.net/browse/RI-3995 test - .only .before(async() => { await acceptLicenseTermsAndAddDatabaseApi(ossStandaloneBigConfig, ossStandaloneBigConfig.databaseName); })