-
Notifications
You must be signed in to change notification settings - Fork 407
RI-3892 - Tree View Improvements #1488
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
nmammadli
merged 10 commits into
feature/RI-3355_Tree_view_improvments
from
e2e/feature/RI-3892_treeViewImprovements
Dec 14, 2022
Merged
Changes from all commits
Commits
Show all changes
10 commits
Select commit
Hold shift + click to select a range
c81758a
added createRandomIndexNamewithCLI, openTreeFolders
nmammadli c483807
Impelement feedback, cleaning code
nmammadli 4702ba5
Clear code
nmammadli 2bcba0e
Merge branch 'feature/RI-3355_Tree_view_improvments' of https://githu…
nmammadli 38b0512
Impelementation of last comments from review
nmammadli b276e72
Merge branch 'feature/RI-3355_Tree_view_improvments' into e2e/feature…
vlad-dargel 24831d9
Delete copy
nmammadli 51fee49
Merge branch 'e2e/feature/RI-3892_treeViewImprovements' of https://gi…
nmammadli 1ec6d33
Add comments from checklist
nmammadli dbe0380
Comments from check list
nmammadli File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
183 changes: 183 additions & 0 deletions
183
tests/e2e/tests/critical-path/tree-view/tree-view-improvements.e2e.ts
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,183 @@ | ||
import { Selector, t } from 'testcafe'; | ||
import { acceptLicenseTermsAndAddDatabaseApi } from '../../../helpers/database'; | ||
import { | ||
BrowserPage, CliPage | ||
} from '../../../pageObjects'; | ||
import { | ||
commonUrl, | ||
ossStandaloneBigConfig, | ||
ossStandaloneConfig | ||
} from '../../../helpers/conf'; | ||
import { KeyTypesTexts, rte } from '../../../helpers/constants'; | ||
import { deleteStandaloneDatabaseApi } from '../../../helpers/api/api-database'; | ||
import { Common } from '../../../helpers/common'; | ||
import { verifyKeysDisplayedInTheList, verifyKeysNotDisplayedInTheList } from '../../../helpers/keys'; | ||
|
||
const browserPage = new BrowserPage(); | ||
const common = new Common(); | ||
const cliPage = new CliPage(); | ||
let keyNames: string[]; | ||
let keyName1: string; | ||
let keyName2: string; | ||
let keynameSingle: string; | ||
let index: string; | ||
|
||
fixture`Tree view navigations improvement tests` | ||
.meta({ type: 'critical_path', rte: rte.standalone }) | ||
.page(commonUrl); | ||
test | ||
.before(async () => { | ||
await acceptLicenseTermsAndAddDatabaseApi(ossStandaloneConfig, ossStandaloneConfig.databaseName); | ||
}) | ||
.after(async () => { | ||
await t.click(browserPage.patternModeBtn); | ||
await browserPage.deleteKeysByNames(keyNames); | ||
await deleteStandaloneDatabaseApi(ossStandaloneConfig); | ||
})('Tree view preselected folder', async t => { | ||
keyName1 = common.generateWord(10); // used to create index name | ||
keyName2 = common.generateWord(10); // used to create index name | ||
keynameSingle = common.generateWord(10); | ||
keyNames = [`${keyName1}:1`, `${keyName1}:2`, `${keyName2}:1`, `${keyName2}:2`, keynameSingle]; | ||
|
||
const commands = [ | ||
`HSET ${keyNames[0]} field value`, | ||
`HSET ${keyNames[1]} field value`, | ||
`HSET ${keyNames[2]} field value`, | ||
`HSET ${keyNames[3]} field value`, | ||
`SADD ${keyNames[4]} value` | ||
]; | ||
|
||
// Create 5 keys | ||
await cliPage.sendCommandsInCli(commands); | ||
await t.click(browserPage.treeViewButton); | ||
// The folder without any patterns selected and the list of keys is displayed when there is a folder without any patterns | ||
await verifyKeysDisplayedInTheList([keynameSingle]); | ||
|
||
await browserPage.openTreeFolders([await browserPage.getTextFromNthTreeElement(1)]); | ||
await browserPage.selectFilterGroupType(KeyTypesTexts.Set); | ||
// The folder without any namespaces is selected (if exists) when folder does not exist after search/filter | ||
await verifyKeysDisplayedInTheList([keynameSingle]); | ||
|
||
await t.click(browserPage.setDeleteButton); | ||
// The folder without any patterns selected and the list of keys is displayed when there is a folder without any patterns | ||
await verifyKeysDisplayedInTheList([keynameSingle]); | ||
await verifyKeysNotDisplayedInTheList([`${keyNames[0]}:1`, `${keyNames[2]}:2`]); | ||
|
||
// switch between browser view and tree view | ||
await t.click(browserPage.browserViewButton) | ||
.click(browserPage.treeViewButton); | ||
await browserPage.deleteKeyByName(keyNames[4]); | ||
await t.click(browserPage.clearFilterButton); | ||
// get first folder name | ||
const firstTreeItemText = await browserPage.getTextFromNthTreeElement(0); | ||
const firstTreeItemKeys = Selector(`[data-testid="node-item_${firstTreeItemText}:keys:keys:"]`); // keys after node item opened | ||
// The first folder with namespaces is expanded and selected when there is no folder without any patterns | ||
await t.expect(firstTreeItemKeys.visible) | ||
.ok('First folder is not expanded'); | ||
await verifyKeysDisplayedInTheList([`${firstTreeItemText}:1`, `${firstTreeItemText}:2`]); | ||
|
||
const commands1 = [ | ||
`HSET ${keyNames[4]} field value` | ||
]; | ||
|
||
await cliPage.sendCommandsInCli(commands1); | ||
await t.click(browserPage.refreshKeysButton); | ||
// Refreshed Tree view preselected folder | ||
await t.expect(firstTreeItemKeys.visible) | ||
.ok('Folder is not selected'); | ||
await verifyKeysDisplayedInTheList([`${firstTreeItemText}:1`, `${firstTreeItemText}:2`]); | ||
|
||
await browserPage.selectFilterGroupType(KeyTypesTexts.Hash); | ||
await t.expect(firstTreeItemKeys.visible).ok('Folder is not selected after searching with HASH'); | ||
// Filterred Tree view preselected folder | ||
await verifyKeysDisplayedInTheList([`${firstTreeItemText}:1`, `${firstTreeItemText}:2`]); | ||
|
||
await browserPage.searchByKeyName('*'); | ||
// Search capability Filterred Tree view preselected folder | ||
await t.expect(firstTreeItemKeys.visible).ok('Folder is not selected'); | ||
await verifyKeysDisplayedInTheList([`${firstTreeItemText}:1`, `${firstTreeItemText}:2`]); | ||
|
||
await t.click(browserPage.clearFilterButton); | ||
// Filterred Tree view preselected folder | ||
await t.expect(firstTreeItemKeys.visible).ok('Folder is not selected'); | ||
await verifyKeysDisplayedInTheList([`${firstTreeItemText}:1`, `${firstTreeItemText}:2`]); | ||
|
||
await browserPage.selectFilterGroupType(KeyTypesTexts.Stream); | ||
// Filterred Tree view preselected folder | ||
await t.expect(browserPage.keyListTable.textContent).contains('No results found.', 'Key is not found message not displayed'); | ||
|
||
await t.click(browserPage.streamDeleteButton); // clear stream from filter | ||
// Filterred Tree view preselected folder | ||
await t.expect(browserPage.keyListTable.textContent).notContains('No results found.', 'Key is not found message still displayed'); | ||
await t.expect( | ||
firstTreeItemKeys.visible) | ||
.notOk('First folder is expanded'); | ||
}); | ||
|
||
test | ||
.before(async () => { | ||
await acceptLicenseTermsAndAddDatabaseApi(ossStandaloneBigConfig, ossStandaloneBigConfig.databaseName); | ||
}) | ||
.after(async () => { | ||
await cliPage.sendCommandInCli(`FT.DROPINDEX ${index}`); | ||
await deleteStandaloneDatabaseApi(ossStandaloneBigConfig); | ||
})('Verify tree view navigation for index based search', async t => { | ||
// generate index based on keyName | ||
const folders = ['mobile', '2014']; | ||
index = await cliPage.createIndexwithCLI(folders.join(':')); | ||
await t.click(browserPage.redisearchModeBtn); // click redisearch button | ||
await browserPage.selectIndexByName(index); | ||
await t.click(browserPage.treeViewButton); | ||
await t.click(Selector(`[data-testid="${`node-item_${folders[0]}:`}"]`)); // close folder | ||
await browserPage.openTreeFolders(folders); | ||
await t.click(browserPage.refreshKeysButton); | ||
// Refreshed Tree view preselected folder for index based search | ||
await t.expect( | ||
Selector(`[data-testid="node-item_${folders[0]}:${folders[1]}:keys:keys:"]`).visible) | ||
.ok('Folder is not selected'); | ||
}); | ||
|
||
test | ||
.before(async () => { | ||
await acceptLicenseTermsAndAddDatabaseApi(ossStandaloneConfig, ossStandaloneConfig.databaseName); | ||
}) | ||
.after(async () => { | ||
await t.click(browserPage.patternModeBtn); | ||
await browserPage.deleteKeysByNames(keyNames.slice(1)); | ||
await deleteStandaloneDatabaseApi(ossStandaloneConfig); | ||
})('Search capability Refreshed Tree view preselected folder', async t => { | ||
keyName1 = common.generateWord(10); // used to create index name | ||
keyName2 = common.generateWord(10); // used to create index name | ||
keynameSingle = common.generateWord(10); | ||
keyNames = [`${keyName1}:1`, `${keyName1}:2`, `${keyName2}:1`, `${keyName2}:2`, keynameSingle]; | ||
const commands = [ | ||
`HSET ${keyNames[0]} field value`, | ||
`HSET ${keyNames[1]} field value`, | ||
`RPUSH ${keyNames[2]} field`, | ||
`RPUSH ${keyNames[3]} field`, | ||
`SADD ${keyNames[4]} value` | ||
]; | ||
await cliPage.sendCommandsInCli(commands); | ||
await t.click(browserPage.treeViewButton); | ||
// The folder without any patterns selected and the list of keys is displayed when there is a folder without any patterns | ||
await verifyKeysDisplayedInTheList([keynameSingle]); | ||
|
||
await browserPage.openTreeFolders([keyName1]); // Type: hash | ||
await browserPage.openTreeFolders([keyName2]); // Type: list | ||
await browserPage.selectFilterGroupType(KeyTypesTexts.Hash); | ||
// The first folder with namespaces is expanded and selected when folder and folder without any namespaces does not exist after search/filter | ||
await verifyKeysDisplayedInTheList([keyNames[0], keyNames[1]]); | ||
|
||
await t.click(browserPage.hashDeleteButton); | ||
await cliPage.sendCommandsInCli([`DEL ${keyNames[0]}`]); | ||
await t.click(browserPage.refreshKeysButton); // refresh keys | ||
// The previously selected folder is preselected when key does not exist after keys refresh | ||
await verifyKeysDisplayedInTheList([keyNames[1]]); | ||
await verifyKeysNotDisplayedInTheList([keyNames[0], keyNames[2], keyNames[3], keyNames[4]]); | ||
|
||
await browserPage.searchByKeyName('*'); | ||
await t.click(browserPage.refreshKeysButton); | ||
// Search capability Refreshed Tree view preselected folder | ||
await verifyKeysDisplayedInTheList([keyNames[1]]); | ||
await verifyKeysNotDisplayedInTheList([keyNames[0], keyNames[2], keyNames[3], keyNames[4]]); | ||
}); |
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.