Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 32 additions & 0 deletions tests/e2e/common-actions/browser-actions.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
import { t } from 'testcafe';
import { BrowserPage } from '../pageObjects';

const browserPage = new BrowserPage();

export class BrowserActions {
/**
* Check that all rendered keys on page has info displayed
*/
async verifyAllRenderedKeysHasText(): Promise<void> {
const keyListItems = browserPage.virtualTableContainer.find(browserPage.cssVirtualTableRow);

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Does it make sense to add some prints to this function? It's not a must-have

// Take 1st, middle and last one rendered items for test
const keysForTest = [keyListItems.nth(0), keyListItems.nth(Math.round(await keyListItems.count / 2)), keyListItems.nth(await keyListItems.count - 2)];

// Verify that keys info in all columns is not empty
for (const key of keysForTest) {
const keyColumnsSelectors = [
browserPage.cssSelectorKey,
browserPage.cssKeyBadge,
browserPage.cssKeyTtl,
browserPage.cssKeySize
];

for (const columnSelector of keyColumnsSelectors) {
const keyRenderedName = await key.find(keyColumnsSelectors[0]).innerText;
const listRenderedKeyInfo = await key.find(columnSelector).innerText;

await t.expect(listRenderedKeyInfo).notEql('', `"${keyRenderedName}" Key has empty data`);
}
}
}
}
1 change: 0 additions & 1 deletion tests/e2e/common-actions/cli-actions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import { CliPage } from '../pageObjects';
const cliPage = new CliPage();

export class CliActions {

/**
* Check list of commands searched
* @param searchedCommand Searched command in Command Helper
Expand Down
4 changes: 4 additions & 0 deletions tests/e2e/pageObjects/browser-page.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,10 @@ export class BrowserPage {
cssSelectorKey = '[data-testid^=key-]';
cssFilteringLabel = '[data-testid=multi-search]';
cssJsonValue = '[data-tesid=value-as-json]';
cssVirtualTableRow = '[aria-label=row]';
cssKeyBadge = '[data-testid^=badge-]';
cssKeyTtl = '[data-testid^=ttl-]';
cssKeySize = '[data-testid^=size-]';
//-------------------------------------------------------------------------------------------
//DECLARATION OF SELECTORS
//*Declare all elements/components of the relevant page.
Expand Down
48 changes: 46 additions & 2 deletions tests/e2e/tests/regression/browser/keys-all-databases.e2e.ts
Original file line number Diff line number Diff line change
@@ -1,25 +1,30 @@
import { t } from 'testcafe';
import { env, rte } from '../../../helpers/constants';
import {
acceptLicenseTermsAndAddDatabaseApi,
acceptLicenseTermsAndAddOSSClusterDatabase,
acceptLicenseTermsAndAddRECloudDatabase,
acceptLicenseTermsAndAddREClusterDatabase,
acceptLicenseTermsAndAddSentinelDatabaseApi,
deleteDatabase
} from '../../../helpers/database';
import { BrowserPage } from '../../../pageObjects';
import { BrowserPage, MyRedisDatabasePage } from '../../../pageObjects';
import {
cloudDatabaseConfig,
commonUrl,
ossClusterConfig,
ossSentinelConfig,
ossStandaloneBigConfig,
redisEnterpriseClusterConfig
} from '../../../helpers/conf';
import { Common } from '../../../helpers/common';
import { deleteOSSClusterDatabaseApi, deleteAllSentinelDatabasesApi } from '../../../helpers/api/api-database';
import { deleteOSSClusterDatabaseApi, deleteAllSentinelDatabasesApi, deleteStandaloneDatabaseApi } from '../../../helpers/api/api-database';
import { BrowserActions } from '../../../common-actions/browser-actions';

const browserPage = new BrowserPage();
const common = new Common();
const myRedisDatabasePage = new MyRedisDatabasePage();
const browserActions = new BrowserActions();

let keyName = common.generateWord(10);
const verifyKeysAdded = async(): Promise<void> => {
Expand Down Expand Up @@ -86,3 +91,42 @@ test
})('Verify that user can add Key in Sentinel Primary Group', async() => {
await verifyKeysAdded();
});
test
.meta({ rte: rte.standalone })
.before(async() => {
await acceptLicenseTermsAndAddDatabaseApi(ossStandaloneBigConfig, ossStandaloneBigConfig.databaseName);
})
.after(async() => {
// Delete database
await deleteStandaloneDatabaseApi(ossStandaloneBigConfig);
})('Verify that user can scroll key virtualized table and see keys info displayed', async() => {
const listItems = browserPage.virtualTableContainer.find(browserPage.cssVirtualTableRow);
const maxNumberOfScrolls = 15;
let numberOfScrolls = 0;

// Scroll down the virtualized list 15 times
while (numberOfScrolls < maxNumberOfScrolls) {
const currentLastRenderedItemIndex = await listItems.count - 1;
const currentLastRenderedItemText = await listItems.nth(currentLastRenderedItemIndex).find(browserPage.cssSelectorKey).innerText;
const currentLastRenderedItem = listItems.withText(currentLastRenderedItemText);

await t.scrollIntoView(currentLastRenderedItem);
numberOfScrolls++;
// Verify that last rendered item name is not empty
await t.expect(currentLastRenderedItemText).notEql('', `"${currentLastRenderedItemText}" Key name is empty`);
}

// Verify that keys info in row not empty
await browserActions.verifyAllRenderedKeysHasText();

await t.click(browserPage.refreshKeysButton);
// Verify that keys info in row not empty after refreshing page
await browserActions.verifyAllRenderedKeysHasText();

// Go to Workbench page
await t.click(myRedisDatabasePage.workbenchButton);
// Go to Browser Page
await t.click(myRedisDatabasePage.browserButton);
// Verify that keys info in row not empty after switching between pages
await browserActions.verifyAllRenderedKeysHasText();
});
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ test.skip
// Verify that search results are displayed in Text view
await t.expect(workbenchPage.queryCardContainer.nth(0).find(workbenchPage.cssQueryTextResult).visible).ok('The result is displayed in Text view');
});
test('Big output in workbench is visible in virtuallized table', async t => {
test('Big output in workbench is visible in virtualized table', async t => {
// Send commands
const command = 'graph.query t "UNWIND range(1,1000) AS x return x"';
const bottomText = 'Query internal execution time';
Expand Down