Skip to content

Commit c81758a

Browse files
committed
added createRandomIndexNamewithCLI, openTreeFolders
1 parent 9c96148 commit c81758a

File tree

3 files changed

+193
-0
lines changed

3 files changed

+193
-0
lines changed

tests/e2e/pageObjects/browser-page.ts

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ export class BrowserPage {
2222
//*The following categories are ordered alphabetically (Alerts, Buttons, Checkboxes, etc.).
2323
//-------------------------------------------------------------------------------------------
2424
//BUTTONS
25+
streamDeleteButton = Selector(`[data-testid="stream-delete-btn"]`);
2526
myRedisDbIcon = Selector('[data-testid=my-redis-db-icon]');
2627
deleteKeyButton = Selector('[data-testid=delete-key-btn]');
2728
confirmDeleteKeyButton = Selector('[data-testid=delete-key-confirm-btn]');
@@ -1013,6 +1014,39 @@ export class BrowserPage {
10131014
.click(this.selectIndexDdn)
10141015
.click(option);
10151016
}
1017+
1018+
/**
1019+
* Get text from first tree element
1020+
*/
1021+
1022+
async getTextFromFirstTreeElement(): Promise<String> {
1023+
return (await Selector(`[role="treeitem"]`).nth(0).find(`div`).textContent).replace(/\s/g, '');
1024+
}
1025+
1026+
/**
1027+
* Get text from first tree element
1028+
* @param names folder names with sequence of subfolder
1029+
* Example: if names ['mobile', '2']
1030+
* It will go to mobile -> 2 -> keys
1031+
*/
1032+
1033+
async openTreeFolders(names: string[]): Promise<void> {
1034+
let base = `node-item_${names[0]}:`
1035+
await t.click(Selector(`[data-testid="${base}"]`));
1036+
if (names.length > 1) {
1037+
for (let i = 1; i < names.length; i++) {
1038+
base = base + `${names[i]}:`;
1039+
await t.click(Selector(`[data-testid="${base}"]`));
1040+
}
1041+
}
1042+
await t.click(Selector(`[data-testid="${base}keys:keys:"]`));
1043+
1044+
await t.expect(
1045+
Selector(`[data-testid="${base}keys:keys:"]`).visible)
1046+
.ok("Folder is not selected");
1047+
}
1048+
1049+
10161050
}
10171051

10181052
/**

tests/e2e/pageObjects/cli-page.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,4 +171,19 @@ export class CliPage {
171171
await t.click(this.readMoreButton);
172172
await t.expect(getPageUrl()).eql(url, 'The opened page not correct');
173173
}
174+
175+
/**
176+
* Create random index name with CLI and return
177+
*/
178+
179+
async createRandomIndexNamewithCLI(): Promise<string> {
180+
let word = common.generateWord(10);
181+
let index = 'idx:' + word;
182+
const commands = [
183+
`FT.CREATE ${index} ON HASH SCHEMA "name" TEXT`,
184+
];
185+
await this.sendCommandsInCli(commands);
186+
187+
return index;
188+
}
174189
}
Lines changed: 144 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,144 @@
1+
import { acceptLicenseTermsAndAddDatabaseApi } from '../../../helpers/database';
2+
import {
3+
BrowserPage, CliPage
4+
} from '../../../pageObjects';
5+
import {
6+
commonUrl,
7+
ossStandaloneBigConfig,
8+
ossStandaloneConfig
9+
} from '../../../helpers/conf';
10+
import { KeyTypesTexts, rte } from '../../../helpers/constants';
11+
import { deleteStandaloneDatabaseApi } from '../../../helpers/api/api-database';
12+
import { Common } from '../../../helpers/common';
13+
import { Selector, t } from 'testcafe';
14+
import { verifyKeysDisplayedInTheList } from '../../../helpers/keys';
15+
16+
const browserPage = new BrowserPage();
17+
const common = new Common();
18+
19+
const cliPage = new CliPage();
20+
21+
let keyNames: string[];
22+
23+
let keyName1: string;
24+
let keyName2: string;
25+
let keynameSingle: string;
26+
27+
let index: string;
28+
29+
fixture`Tree view navigations improvement tests`
30+
.meta({ type: 'critical_path', rte: rte.standalone })
31+
.page(commonUrl)
32+
test
33+
.before(async () => {
34+
await acceptLicenseTermsAndAddDatabaseApi(ossStandaloneConfig, ossStandaloneConfig.databaseName);
35+
})
36+
.after(async () => {
37+
await t.click(browserPage.patternModeBtn);
38+
await browserPage.deleteKeysByNames(keyNames);
39+
await deleteStandaloneDatabaseApi(ossStandaloneConfig);
40+
})
41+
('Verify that if any keys are found and will not be redirected from the previously selected directory', async t => {
42+
43+
keyName1 = common.generateWord(10); // used to create index name
44+
keyName2 = common.generateWord(10); // used to create index name
45+
keynameSingle = common.generateWord(10);
46+
keyNames = [`${keyName1}:1`, `${keyName1}:2`, `${keyName2}:1`, `${keyName2}:2`, keynameSingle];
47+
48+
const commands = [
49+
`HSET ${keyNames[0]} field value`,
50+
`HSET ${keyNames[1]} field value`,
51+
`HSET ${keyNames[2]} field value`,
52+
`HSET ${keyNames[3]} field value`,
53+
`HSET ${keyNames[4]} field value`,
54+
];
55+
56+
// Create 5 keys
57+
await cliPage.sendCommandsInCli(commands);
58+
59+
// Switch to tree view
60+
await browserPage.deleteKeyByName(keyNames[4]);
61+
await t.click(browserPage.clearFilterButton);
62+
await t.click(browserPage.treeViewButton);
63+
64+
// get first folder name
65+
const firstTreeItemText = await browserPage.getTextFromFirstTreeElement();
66+
const treeItemKeys = Selector(`[data-testid="node-item_${firstTreeItemText}:keys:keys:"]`); // keys after node item opened
67+
68+
// verify that the first folder with namespaces is expanded and selected
69+
await t.expect(
70+
treeItemKeys.visible).
71+
ok("First folder is not expanded");
72+
await verifyKeysDisplayedInTheList([firstTreeItemText + ":1", firstTreeItemText + ":2"]); // verify created keys are visible
73+
74+
const commands1 = [
75+
`HSET ${keyNames[4]} field value`,
76+
];
77+
78+
// Create 4 keys and index
79+
await cliPage.sendCommandsInCli(commands1);
80+
await t.click(browserPage.refreshKeysButton); // refresh keys
81+
82+
await t.expect(
83+
treeItemKeys.visible).
84+
ok("Folder is not selected");
85+
await verifyKeysDisplayedInTheList([firstTreeItemText + ":1", firstTreeItemText + ":2"]); // verify created keys are visible
86+
87+
await browserPage.selectFilterGroupType(KeyTypesTexts.Hash);
88+
89+
await t.expect(treeItemKeys.visible).ok("Folder is not selected after searching with HASH");
90+
await verifyKeysDisplayedInTheList([firstTreeItemText + ":1", firstTreeItemText + ":2"]); // verify created keys are visible
91+
92+
await browserPage.searchByKeyName('*');
93+
94+
await t.expect(treeItemKeys.visible).ok("Folder is not selected");
95+
await verifyKeysDisplayedInTheList([firstTreeItemText + ":1", firstTreeItemText + ":2"]); // verify created keys are visible
96+
97+
await t.click(browserPage.clearFilterButton);
98+
99+
await t.expect(treeItemKeys.visible).ok("Folder is not selected");
100+
await verifyKeysDisplayedInTheList([firstTreeItemText + ":1", firstTreeItemText + ":2"]); // verify created keys are visible
101+
102+
await browserPage.selectFilterGroupType(KeyTypesTexts.Stream);
103+
104+
await t.expect(
105+
Selector(`[role="rowgroup"]`).find(`div`).withText("No results found.").visible).
106+
ok("No results text is visible"); // verify no results found
107+
108+
await t.click(browserPage.streamDeleteButton); // clear stream from filter
109+
110+
await t.expect(
111+
Selector(`[role="rowgroup"]`).find(`div`).withText("No results found.").visible).
112+
notOk("No result text is still visible");
113+
await t.expect(
114+
treeItemKeys.visible).
115+
notOk("First folder is expanded");
116+
117+
});
118+
119+
test
120+
.before(async () => {
121+
await acceptLicenseTermsAndAddDatabaseApi(ossStandaloneBigConfig, ossStandaloneBigConfig.databaseName);
122+
})
123+
.after(async () => {
124+
await cliPage.sendCommandInCli(`FT.DROPINDEX ${index}`);
125+
await deleteStandaloneDatabaseApi(ossStandaloneBigConfig);
126+
})
127+
('Verify tree view navigation for index based search', async t => {
128+
// generate index based on keyName
129+
let folders = ["mobile", "2"];
130+
131+
index = await cliPage.createRandomIndexNamewithCLI();
132+
133+
await t.click(browserPage.redisearchModeBtn); // click redisearch button
134+
await browserPage.selectIndexByName(index);
135+
136+
await t.click(browserPage.treeViewButton);
137+
await browserPage.openTreeFolders(folders);
138+
await t.click(browserPage.refreshKeysButton);
139+
140+
await t.expect(
141+
Selector(`[data-testid="node-item_${folders[0]}:${folders[1]}:keys:keys:"]`).visible)
142+
.ok("Folder is not selected");
143+
144+
});

0 commit comments

Comments
 (0)