From 0d23c47fa9ffb90aaa583869efd7b6a958660768 Mon Sep 17 00:00:00 2001 From: mariasergeenko Date: Tue, 27 Aug 2024 10:53:25 +0200 Subject: [PATCH 1/6] add tests for time format --- tests/e2e/pageObjects/settings-page.ts | 34 ++++++++ .../web/regression/settings/settings.e2e.ts | 80 +++++++++++++++++++ 2 files changed, 114 insertions(+) create mode 100644 tests/e2e/tests/web/regression/settings/settings.e2e.ts diff --git a/tests/e2e/pageObjects/settings-page.ts b/tests/e2e/pageObjects/settings-page.ts index 057facbcef..89a79253ea 100644 --- a/tests/e2e/pageObjects/settings-page.ts +++ b/tests/e2e/pageObjects/settings-page.ts @@ -25,6 +25,18 @@ export class SettingsPage extends BasePage { commandsInPipelineInput = Selector('[data-testid=pipeline-bunch-input]'); pipelineLink = Selector('[data-testid=pipelining-link]'); + //Date and Time Format + selectFormatDropdown = Selector('[data-test-subj=select-datetime]'); + selectTimezoneDropdown = Selector('[data-test-subj=select-timezone]'); + getDateTimeOption = (option: string): Selector => + Selector(`[data-test-subj^=date-option-${option}]`); + getZoneOption = (option: string): Selector => + Selector(`[data-test-subj=zone-option-${option}]`); + dataPreview = Selector('[data-testid=data-preview]'); + customRadioButton = Selector('[id=custom]').sibling(); + customTextField = Selector('[data-testid=custom-datetime-input]'); + saveCustomFormatButton = Selector('[data-testid=datetime-custom-btn]'); + /** * Change Keys to Scan value * @param value Value for scan @@ -107,4 +119,26 @@ export class SettingsPage extends BasePage { await t.click(this.switchAnalyticsOption); } } + + /** + * Select data time option in Settings + */ + async selectDataFormatDropdown(value: string): Promise{ + await t.click(this.selectFormatDropdown); + await t.click(this.getDateTimeOption(value)); + } + + /** + * Select timezone option in Settings + */ + async selectTimeZoneDropdown(value: string): Promise{ + await t.click(this.selectTimezoneDropdown); + await t.click(this.getZoneOption(value)); + } + /** + * Enter text in custom field Select timezone option in Settings + */ + async enterTextInCustom(command: string): Promise{ + await t.typeText(this.customTextField, command, { replace: true }); + } } diff --git a/tests/e2e/tests/web/regression/settings/settings.e2e.ts b/tests/e2e/tests/web/regression/settings/settings.e2e.ts new file mode 100644 index 0000000000..7429f34d66 --- /dev/null +++ b/tests/e2e/tests/web/regression/settings/settings.e2e.ts @@ -0,0 +1,80 @@ +import { rte } from '../../../../helpers/constants'; +import { BrowserPage, MemoryEfficiencyPage, SettingsPage, WorkbenchPage } from '../../../../pageObjects'; +import { + commonUrl, ossClusterConfig +} from '../../../../helpers/conf'; +import { DatabaseAPIRequests } from '../../../../helpers/api/api-database'; +import { deleteAllKeysFromDB } from '../../../../helpers/keys'; + +const browserPage = new BrowserPage(); +const databaseAPIRequests = new DatabaseAPIRequests(); +const workbenchPage = new WorkbenchPage(); +const settingsPage = new SettingsPage(); +const memoryEfficiencyPage = new MemoryEfficiencyPage(); + +fixture `Add keys` + .meta({ + type: 'regression', + rte: rte.standalone + }) + .page(commonUrl) + .beforeEach(async() => { + await databaseAPIRequests.addNewOSSClusterDatabaseApi(ossClusterConfig); + }) + .afterEach(async() => { + await deleteAllKeysFromDB(ossClusterConfig.ossClusterPort, ossClusterConfig.ossClusterPort); + await databaseAPIRequests.deleteAllDatabasesApi(); + }); +test('Verify that user can select date time format', async t => { + const defaultDateRegExp = /^([01]\d|2[0-3]):[0-5]\d:[0-5]\d\.\d{3} \d{1,2} (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) \d{4}$/; + const selectedDateReqExp = /^(0[1-9]|[12]\d|3[01])\.(0[1-9]|1[0-2])\.\d{4} ([01]\d|2[0-3]):[0-5]\d:[0-5]\d$/; + const keyName = 'DateTimeTestKey'; + const hashField = '1724674140'; + + const selectorForOption = 'dd\\.MM\\.yyyy'; + const selectedOption = 'dd.MM.yyyy HH:mm:ss'; + const zoneSelectOption = 'UTC'; + + await browserPage.addHashKey(keyName, '100000', hashField, hashField); + await browserPage.openKeyDetails(keyName); + await browserPage.selectFormatter('DateTime'); + await t.expect(defaultDateRegExp.test(await browserPage.getHashKeyValue())).ok('date is not in default format HH:mm:ss.SSS d MMM yyyy'); + + await t.click(workbenchPage.NavigationPanel.settingsButton); + await t.click(settingsPage.accordionAppearance); + await settingsPage.selectDataFormatDropdown(selectorForOption); + await t.expect(settingsPage.selectFormatDropdown.textContent).eql(selectedOption, 'option is not selected'); + await t.expect(selectedDateReqExp.test(await settingsPage.dataPreview.textContent)).ok(`preview is not valid for ${selectedOption}`); + + await t.click(workbenchPage.NavigationPanel.myRedisDBButton); + await t.click(workbenchPage.NavigationPanel.browserButton); + await browserPage.openKeyDetails(keyName); + await t.expect(selectedDateReqExp.test(await browserPage.getHashKeyValue())).ok(`date is not in selected format ${selectedOption}`); + + await t.click(workbenchPage.NavigationPanel.settingsButton); + await t.click(settingsPage.accordionAppearance); + await settingsPage.selectTimeZoneDropdown(zoneSelectOption); + await t.expect(settingsPage.selectTimezoneDropdown.textContent).eql(zoneSelectOption, 'option is not selected'); + + await t.click(browserPage.NavigationPanel.workbenchButton); + await workbenchPage.sendCommandInWorkbench('info'); + const dateTime = await workbenchPage.queryCardContainer.nth(0).find(workbenchPage.cssCommandExecutionDateTime).textContent; + await t.expect(selectedDateReqExp.test(dateTime)).ok('date is not in default format HH:mm:ss.SSS d MMM yyyy'); + +}); + +test('Verify that user can select date time format', async t => { + const enteredFormat = 'MMM dd yyyy/ HH.mm.ss'; + const enteredDateReqExp = /^(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) ([0-2]\d|3[01]) \d{4}\/ ([01]\d|2[0-3])\.[0-5]\d\.[0-5]\d$/; + + await t.click(workbenchPage.NavigationPanel.settingsButton); + await t.click(settingsPage.accordionAppearance); + await t.click(settingsPage.customRadioButton); + await settingsPage.enterTextInCustom(enteredFormat); + await t.expect(enteredDateReqExp.test(await settingsPage.dataPreview.textContent)).ok(`preview is not valid for ${enteredFormat}`); + await t.click(settingsPage.saveCustomFormatButton); + + await t.click(settingsPage.NavigationPanel.analysisPageButton); + await t.click(memoryEfficiencyPage.newReportBtn); + await t.expect(enteredDateReqExp.test(await memoryEfficiencyPage.selectedReport.textContent)).ok(`custom format is not working ${enteredFormat}`); +}); From 34c6ec27bcb45960160090d589be347b1d18c65b Mon Sep 17 00:00:00 2001 From: mariasergeenko Date: Tue, 27 Aug 2024 10:54:00 +0200 Subject: [PATCH 2/6] add test ids --- .../datetime-formatter/DateTimeFormatter.tsx | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/redisinsight/ui/src/pages/settings/components/general-settings/datetime-formatter/DateTimeFormatter.tsx b/redisinsight/ui/src/pages/settings/components/general-settings/datetime-formatter/DateTimeFormatter.tsx index e68a052a50..a5b0faf2c8 100644 --- a/redisinsight/ui/src/pages/settings/components/general-settings/datetime-formatter/DateTimeFormatter.tsx +++ b/redisinsight/ui/src/pages/settings/components/general-settings/datetime-formatter/DateTimeFormatter.tsx @@ -170,7 +170,8 @@ const DateTimeFormatter = () => { ({ ...option, 'data-test-subj': `date-option-${option.value}` }))} valueOfSelected={formik.values.commonFormat} onChange={(option) => onCommonFormatChange(option)} disabled={formik.values.selectedRadioOption !== DatetimeRadioOption.Common} @@ -247,7 +248,8 @@ const DateTimeFormatter = () => {
({ ...option, 'data-test-subj': `zone-option-${option.value}` }))} valueOfSelected={formik.values.timezone} onChange={(option) => onTimezoneChange(option)} data-test-subj="select-timezone" @@ -257,7 +259,7 @@ const DateTimeFormatter = () => {
Preview: - {preview} + {preview}
From 236d7d93336f7cd97066e02ca1dfa173de41324e Mon Sep 17 00:00:00 2001 From: mariasergeenko Date: Tue, 27 Aug 2024 12:01:01 +0200 Subject: [PATCH 3/6] update test name --- tests/e2e/tests/web/regression/settings/settings.e2e.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/e2e/tests/web/regression/settings/settings.e2e.ts b/tests/e2e/tests/web/regression/settings/settings.e2e.ts index 7429f34d66..7f8295fefc 100644 --- a/tests/e2e/tests/web/regression/settings/settings.e2e.ts +++ b/tests/e2e/tests/web/regression/settings/settings.e2e.ts @@ -63,7 +63,7 @@ test('Verify that user can select date time format', async t => { }); -test('Verify that user can select date time format', async t => { +test('Verify that user can set custom date time format', async t => { const enteredFormat = 'MMM dd yyyy/ HH.mm.ss'; const enteredDateReqExp = /^(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) ([0-2]\d|3[01]) \d{4}\/ ([01]\d|2[0-3])\.[0-5]\d\.[0-5]\d$/; From 04863938acef984378d7476e7e918c97bc501968 Mon Sep 17 00:00:00 2001 From: mariasergeenko Date: Tue, 27 Aug 2024 12:43:48 +0200 Subject: [PATCH 4/6] fix for tests --- tests/e2e/tests/web/regression/settings/settings.e2e.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tests/e2e/tests/web/regression/settings/settings.e2e.ts b/tests/e2e/tests/web/regression/settings/settings.e2e.ts index 7f8295fefc..809ee2e17e 100644 --- a/tests/e2e/tests/web/regression/settings/settings.e2e.ts +++ b/tests/e2e/tests/web/regression/settings/settings.e2e.ts @@ -5,12 +5,14 @@ import { } from '../../../../helpers/conf'; import { DatabaseAPIRequests } from '../../../../helpers/api/api-database'; import { deleteAllKeysFromDB } from '../../../../helpers/keys'; +import { DatabaseHelper } from '../../../../helpers'; const browserPage = new BrowserPage(); const databaseAPIRequests = new DatabaseAPIRequests(); const workbenchPage = new WorkbenchPage(); const settingsPage = new SettingsPage(); const memoryEfficiencyPage = new MemoryEfficiencyPage(); +const databaseHelper = new DatabaseHelper(); fixture `Add keys` .meta({ @@ -19,7 +21,7 @@ fixture `Add keys` }) .page(commonUrl) .beforeEach(async() => { - await databaseAPIRequests.addNewOSSClusterDatabaseApi(ossClusterConfig); + await databaseHelper.acceptLicenseTermsAndAddOSSClusterDatabase(ossClusterConfig); }) .afterEach(async() => { await deleteAllKeysFromDB(ossClusterConfig.ossClusterPort, ossClusterConfig.ossClusterPort); From 33def994a6614dcf61eae4d78d77d65f29df3cfc Mon Sep 17 00:00:00 2001 From: mariasergeenko Date: Tue, 27 Aug 2024 14:25:40 +0200 Subject: [PATCH 5/6] fix for tests#2 --- tests/e2e/pageObjects/memory-efficiency-page.ts | 1 + tests/e2e/tests/web/regression/settings/settings.e2e.ts | 1 + 2 files changed, 2 insertions(+) diff --git a/tests/e2e/pageObjects/memory-efficiency-page.ts b/tests/e2e/pageObjects/memory-efficiency-page.ts index 08233ecbe2..9238696c65 100644 --- a/tests/e2e/pageObjects/memory-efficiency-page.ts +++ b/tests/e2e/pageObjects/memory-efficiency-page.ts @@ -13,6 +13,7 @@ export class MemoryEfficiencyPage extends InstancePage { cssReadMoreLink = '[data-testid=read-more-link]'; cssKeyName = '[data-testid=recommendation-key-name]'; // BUTTONS + databaseAnalysisTab = Selector('[data-testid=analytics-tab-DatabaseAnalysis]'); newReportBtn = Selector('[data-testid=start-database-analysis-btn]'); expandArrowBtn = Selector('[data-testid^=expand-arrow-]'); sortByKeyPattern = Selector('[data-testid=tableHeaderSortButton]'); diff --git a/tests/e2e/tests/web/regression/settings/settings.e2e.ts b/tests/e2e/tests/web/regression/settings/settings.e2e.ts index 809ee2e17e..7fe0ad37cf 100644 --- a/tests/e2e/tests/web/regression/settings/settings.e2e.ts +++ b/tests/e2e/tests/web/regression/settings/settings.e2e.ts @@ -77,6 +77,7 @@ test('Verify that user can set custom date time format', async t => { await t.click(settingsPage.saveCustomFormatButton); await t.click(settingsPage.NavigationPanel.analysisPageButton); + await t.click(memoryEfficiencyPage.databaseAnalysisTab); await t.click(memoryEfficiencyPage.newReportBtn); await t.expect(enteredDateReqExp.test(await memoryEfficiencyPage.selectedReport.textContent)).ok(`custom format is not working ${enteredFormat}`); }); From 51eacfc8a314b15c258aa6f86fbcde89ed7e70c2 Mon Sep 17 00:00:00 2001 From: mariasergeenko Date: Tue, 27 Aug 2024 14:39:20 +0200 Subject: [PATCH 6/6] fix per comments --- tests/e2e/pageObjects/settings-page.ts | 9 +++++---- tests/e2e/tests/web/regression/settings/settings.e2e.ts | 2 +- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/tests/e2e/pageObjects/settings-page.ts b/tests/e2e/pageObjects/settings-page.ts index 89a79253ea..298a45c8b4 100644 --- a/tests/e2e/pageObjects/settings-page.ts +++ b/tests/e2e/pageObjects/settings-page.ts @@ -28,15 +28,16 @@ export class SettingsPage extends BasePage { //Date and Time Format selectFormatDropdown = Selector('[data-test-subj=select-datetime]'); selectTimezoneDropdown = Selector('[data-test-subj=select-timezone]'); - getDateTimeOption = (option: string): Selector => - Selector(`[data-test-subj^=date-option-${option}]`); - getZoneOption = (option: string): Selector => - Selector(`[data-test-subj=zone-option-${option}]`); dataPreview = Selector('[data-testid=data-preview]'); customRadioButton = Selector('[id=custom]').sibling(); customTextField = Selector('[data-testid=custom-datetime-input]'); saveCustomFormatButton = Selector('[data-testid=datetime-custom-btn]'); + getDateTimeOption = (option: string): Selector => + Selector(`[data-test-subj^=date-option-${option}]`); + getZoneOption = (option: string): Selector => + Selector(`[data-test-subj=zone-option-${option}]`); + /** * Change Keys to Scan value * @param value Value for scan diff --git a/tests/e2e/tests/web/regression/settings/settings.e2e.ts b/tests/e2e/tests/web/regression/settings/settings.e2e.ts index 7fe0ad37cf..d53cf35038 100644 --- a/tests/e2e/tests/web/regression/settings/settings.e2e.ts +++ b/tests/e2e/tests/web/regression/settings/settings.e2e.ts @@ -14,7 +14,7 @@ const settingsPage = new SettingsPage(); const memoryEfficiencyPage = new MemoryEfficiencyPage(); const databaseHelper = new DatabaseHelper(); -fixture `Add keys` +fixture `DataTime format setting` .meta({ type: 'regression', rte: rte.standalone