From ce23dc63433b51c203906d572547fff136dc2480 Mon Sep 17 00:00:00 2001 From: mariasergeenko Date: Wed, 17 May 2023 15:26:25 +0200 Subject: [PATCH] update vote test --- .../common-actions/recommendations-actions.ts | 30 ++++++++++++------- .../memory-efficiency/recommendations.e2e.ts | 16 +++++----- .../insights/live-recommendations.e2e.ts | 22 +++++++++----- 3 files changed, 44 insertions(+), 24 deletions(-) diff --git a/tests/e2e/common-actions/recommendations-actions.ts b/tests/e2e/common-actions/recommendations-actions.ts index 3b33f005b6..b7db8e0a74 100644 --- a/tests/e2e/common-actions/recommendations-actions.ts +++ b/tests/e2e/common-actions/recommendations-actions.ts @@ -1,4 +1,4 @@ -import {Selector, t} from 'testcafe'; +import { Selector, t } from 'testcafe'; export class RecommendationsActions { /** @@ -12,19 +12,19 @@ export class RecommendationsActions { /** * Get vote selector by recommendation name * @param recommendationName Name of recommendation - * @param option Option can be "very-useful/useful/not-useful" + * @param option Option can be "useful/not-useful" */ async getVoteSelectorByName(recommendationName: string, option: string): Promise { const recomSelector = await this.getRecommendationSelectorByName(recommendationName); - return recomSelector.find(`[data-testid=${option}-vote-btn]`); + return recomSelector.find(`[data-testid='${option}-vote-btn']`); } /** * Vote for recommendation by name and option * @param recommendationName Name of recommendation - * @param option Option can be "very-useful/useful/not-useful" - */ + * @param option Option can be "useful/not-useful" + */ async voteForRecommendation(recommendationName: string, option: string): Promise { const voteSelector = await this.getVoteSelectorByName(recommendationName, option); @@ -32,13 +32,23 @@ export class RecommendationsActions { } /** - * Verify that vote is disabled by recommendation name and option + * Verify that vote is selected by recommendation name and option * @param recommendationName Name of recommendation - * @param option Option can be "very-useful/useful/not-useful" - */ - async verifyVoteDisabled(recommendationName: string, option: string): Promise { + * @param option Option can be "useful/not-useful" + */ + async verifyVoteIsSelected(recommendationName: string, option: string): Promise { const voteSelector = await this.getVoteSelectorByName(recommendationName, option); - await t.expect(voteSelector.hasAttribute('disabled')).ok(`${option} vote button for ${recommendationName} recommendation is not disabled`); + await t.expect(voteSelector.getAttribute('class')).contains('selected', `${option} vote button for ${recommendationName} recommendation is not selected`); + } + + /** + * Verify that vote popup is displayed by recommendation name and option + * @param recommendationName Name of recommendation + * @param option Option can be "useful/not-useful" + */ + async verifyVotePopUpIsDisplayed(recommendationName: string, option: string): Promise { + const popoverSelector = Selector(`[data-testid='${recommendationName}-${option}-popover']`); + await t.expect(popoverSelector.visible).ok(`popover is displayed for ${recommendationName}`); } } diff --git a/tests/e2e/tests/critical-path/memory-efficiency/recommendations.e2e.ts b/tests/e2e/tests/critical-path/memory-efficiency/recommendations.e2e.ts index 37d82c0854..35d3e2a16a 100644 --- a/tests/e2e/tests/critical-path/memory-efficiency/recommendations.e2e.ts +++ b/tests/e2e/tests/critical-path/memory-efficiency/recommendations.e2e.ts @@ -139,21 +139,23 @@ test }).after(async() => { await deleteStandaloneDatabaseApi(ossStandaloneV5Config); })('Verify that user can upvote recommendations', async t => { - await recommendationsActions.voteForRecommendation(redisVersionRecommendation, 'not-useful'); - // Verify that user can rate recommendations with one of 3 existing types at the same time - await recommendationsActions.verifyVoteDisabled(redisVersionRecommendation, 'not-useful'); + const notUsefulVoteOption = 'not useful'; + const usefulVoteOption = 'useful'; + await recommendationsActions.voteForRecommendation(redisVersionRecommendation, notUsefulVoteOption); + // Verify that user can rate recommendations with one of 2 existing types at the same time + await recommendationsActions.verifyVoteIsSelected(redisVersionRecommendation, notUsefulVoteOption); // Verify that user can see the popup with link when he votes for “Not useful” - await t.expect(memoryEfficiencyPage.recommendationsFeedbackBtn.visible).ok('popup did not appear after voting for not useful'); + await recommendationsActions.verifyVotePopUpIsDisplayed(redisVersionRecommendation, notUsefulVoteOption); // Verify that user can see previous votes when reload the page await memoryEfficiencyPage.reloadPage(); await t.click(memoryEfficiencyPage.recommendationsTab); - await recommendationsActions.verifyVoteDisabled(redisVersionRecommendation, 'not-useful'); + await recommendationsActions.verifyVoteIsSelected(redisVersionRecommendation, notUsefulVoteOption); await t.click(memoryEfficiencyPage.newReportBtn); - await recommendationsActions.voteForRecommendation(redisVersionRecommendation, 'useful'); - await recommendationsActions.verifyVoteDisabled(redisVersionRecommendation, 'useful'); + await recommendationsActions.voteForRecommendation(redisVersionRecommendation, usefulVoteOption); + await recommendationsActions.verifyVoteIsSelected(redisVersionRecommendation, usefulVoteOption); }); test .before(async t => { diff --git a/tests/e2e/tests/regression/insights/live-recommendations.e2e.ts b/tests/e2e/tests/regression/insights/live-recommendations.e2e.ts index 70e2d2f6bf..02187bca72 100644 --- a/tests/e2e/tests/regression/insights/live-recommendations.e2e.ts +++ b/tests/e2e/tests/regression/insights/live-recommendations.e2e.ts @@ -27,6 +27,7 @@ const keyName = `recomKey-${Common.generateWord(10)}`; const logger = telemetry.createLogger(); const telemetryEvent = 'INSIGHTS_RECOMMENDATION_VOTED'; const expectedProperties = [ + 'buildType', 'databaseId', 'name', 'provider', @@ -95,25 +96,32 @@ test await acceptLicenseTermsAndAddDatabaseApi(ossStandaloneV5Config, ossStandaloneV5Config.databaseName); }).after(async() => { await deleteStandaloneDatabaseApi(ossStandaloneV5Config); - })('Verify that user can upvote recommendations', async t => { + })('Verify that user can upvote recommendations', async() => { + const notUsefulVoteOption = 'not useful'; + const usefulVoteOption = 'useful'; await browserPage.InsightsPanel.toggleInsightsPanel(true); - await recommendationsActions.voteForRecommendation(redisVersionRecom, 'not-useful'); - // Verify that user can rate recommendations with one of 3 existing types at the same time - await recommendationsActions.verifyVoteDisabled(redisVersionRecom, 'not-useful'); + await recommendationsActions.voteForRecommendation(redisVersionRecom, notUsefulVoteOption); + // Verify that user can rate recommendations with one of 2 existing types at the same time + await recommendationsActions.verifyVoteIsSelected(redisVersionRecom, notUsefulVoteOption); // Verify that user can see the popup with link when he votes for “Not useful” - await t.expect(memoryEfficiencyPage.recommendationsFeedbackBtn.visible).ok('popup did not appear after voting for not useful'); + await recommendationsActions.verifyVotePopUpIsDisplayed(redisVersionRecom, notUsefulVoteOption); // Verify that the INSIGHTS_RECOMMENDATIONS_VOTED event sent with Database ID, Recommendation_name, Vote type parameters when user voted for recommendation await telemetry.verifyEventHasProperties(telemetryEvent, expectedProperties, logger); await telemetry.verifyEventPropertyValue(telemetryEvent, 'name', 'updateDatabase', logger); - await telemetry.verifyEventPropertyValue(telemetryEvent, 'vote', 'not useful', logger); + await telemetry.verifyEventPropertyValue(telemetryEvent, 'vote', notUsefulVoteOption, logger); // Verify that user can see previous votes when reload the page await browserPage.reloadPage(); await browserPage.InsightsPanel.toggleInsightsPanel(true); await browserPage.InsightsPanel.toggleRecommendation(redisVersionRecom, true); - await recommendationsActions.verifyVoteDisabled(redisVersionRecom, 'not-useful'); + await recommendationsActions.verifyVoteIsSelected(redisVersionRecom, notUsefulVoteOption); + + // Verify that user can change previous votes + await recommendationsActions.voteForRecommendation(redisVersionRecom, usefulVoteOption); + // Verify that user can rate recommendations with one of 2 existing types at the same time + await recommendationsActions.verifyVoteIsSelected(redisVersionRecom, usefulVoteOption); }); test('Verify that user can hide recommendations and checkbox value is saved', async t => { const commandToGetRecommendation = 'FT.INFO';