Skip to content

Commit 2e5ef81

Browse files
Merge pull request #2109 from RedisInsight/e2e/feature/RI-4075_livetime_recommendations
E2e/feature/ri 4075 livetime recommendations
2 parents e33f3e9 + ce23dc6 commit 2e5ef81

File tree

3 files changed

+44
-24
lines changed

3 files changed

+44
-24
lines changed
Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import {Selector, t} from 'testcafe';
1+
import { Selector, t } from 'testcafe';
22

33
export class RecommendationsActions {
44
/**
@@ -12,33 +12,43 @@ export class RecommendationsActions {
1212
/**
1313
* Get vote selector by recommendation name
1414
* @param recommendationName Name of recommendation
15-
* @param option Option can be "very-useful/useful/not-useful"
15+
* @param option Option can be "useful/not-useful"
1616
*/
1717
async getVoteSelectorByName(recommendationName: string, option: string): Promise<Selector> {
1818
const recomSelector = await this.getRecommendationSelectorByName(recommendationName);
1919

20-
return recomSelector.find(`[data-testid=${option}-vote-btn]`);
20+
return recomSelector.find(`[data-testid='${option}-vote-btn']`);
2121
}
2222

2323
/**
2424
* Vote for recommendation by name and option
2525
* @param recommendationName Name of recommendation
26-
* @param option Option can be "very-useful/useful/not-useful"
27-
*/
26+
* @param option Option can be "useful/not-useful"
27+
*/
2828
async voteForRecommendation(recommendationName: string, option: string): Promise<void> {
2929
const voteSelector = await this.getVoteSelectorByName(recommendationName, option);
3030

3131
await t.click(voteSelector);
3232
}
3333

3434
/**
35-
* Verify that vote is disabled by recommendation name and option
35+
* Verify that vote is selected by recommendation name and option
3636
* @param recommendationName Name of recommendation
37-
* @param option Option can be "very-useful/useful/not-useful"
38-
*/
39-
async verifyVoteDisabled(recommendationName: string, option: string): Promise<void> {
37+
* @param option Option can be "useful/not-useful"
38+
*/
39+
async verifyVoteIsSelected(recommendationName: string, option: string): Promise<void> {
4040
const voteSelector = await this.getVoteSelectorByName(recommendationName, option);
4141

42-
await t.expect(voteSelector.hasAttribute('disabled')).ok(`${option} vote button for ${recommendationName} recommendation is not disabled`);
42+
await t.expect(voteSelector.getAttribute('class')).contains('selected', `${option} vote button for ${recommendationName} recommendation is not selected`);
43+
}
44+
45+
/**
46+
* Verify that vote popup is displayed by recommendation name and option
47+
* @param recommendationName Name of recommendation
48+
* @param option Option can be "useful/not-useful"
49+
*/
50+
async verifyVotePopUpIsDisplayed(recommendationName: string, option: string): Promise<void> {
51+
const popoverSelector = Selector(`[data-testid='${recommendationName}-${option}-popover']`);
52+
await t.expect(popoverSelector.visible).ok(`popover is displayed for ${recommendationName}`);
4353
}
4454
}

tests/e2e/tests/critical-path/memory-efficiency/recommendations.e2e.ts

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -139,21 +139,23 @@ test
139139
}).after(async() => {
140140
await deleteStandaloneDatabaseApi(ossStandaloneV5Config);
141141
})('Verify that user can upvote recommendations', async t => {
142-
await recommendationsActions.voteForRecommendation(redisVersionRecommendation, 'not-useful');
143-
// Verify that user can rate recommendations with one of 3 existing types at the same time
144-
await recommendationsActions.verifyVoteDisabled(redisVersionRecommendation, 'not-useful');
142+
const notUsefulVoteOption = 'not useful';
143+
const usefulVoteOption = 'useful';
144+
await recommendationsActions.voteForRecommendation(redisVersionRecommendation, notUsefulVoteOption);
145+
// Verify that user can rate recommendations with one of 2 existing types at the same time
146+
await recommendationsActions.verifyVoteIsSelected(redisVersionRecommendation, notUsefulVoteOption);
145147

146148
// Verify that user can see the popup with link when he votes for “Not useful”
147-
await t.expect(memoryEfficiencyPage.recommendationsFeedbackBtn.visible).ok('popup did not appear after voting for not useful');
149+
await recommendationsActions.verifyVotePopUpIsDisplayed(redisVersionRecommendation, notUsefulVoteOption);
148150

149151
// Verify that user can see previous votes when reload the page
150152
await memoryEfficiencyPage.reloadPage();
151153
await t.click(memoryEfficiencyPage.recommendationsTab);
152-
await recommendationsActions.verifyVoteDisabled(redisVersionRecommendation, 'not-useful');
154+
await recommendationsActions.verifyVoteIsSelected(redisVersionRecommendation, notUsefulVoteOption);
153155

154156
await t.click(memoryEfficiencyPage.newReportBtn);
155-
await recommendationsActions.voteForRecommendation(redisVersionRecommendation, 'useful');
156-
await recommendationsActions.verifyVoteDisabled(redisVersionRecommendation, 'useful');
157+
await recommendationsActions.voteForRecommendation(redisVersionRecommendation, usefulVoteOption);
158+
await recommendationsActions.verifyVoteIsSelected(redisVersionRecommendation, usefulVoteOption);
157159
});
158160
test
159161
.before(async t => {

tests/e2e/tests/regression/insights/live-recommendations.e2e.ts

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ const keyName = `recomKey-${Common.generateWord(10)}`;
2727
const logger = telemetry.createLogger();
2828
const telemetryEvent = 'INSIGHTS_RECOMMENDATION_VOTED';
2929
const expectedProperties = [
30+
'buildType',
3031
'databaseId',
3132
'name',
3233
'provider',
@@ -95,25 +96,32 @@ test
9596
await acceptLicenseTermsAndAddDatabaseApi(ossStandaloneV5Config, ossStandaloneV5Config.databaseName);
9697
}).after(async() => {
9798
await deleteStandaloneDatabaseApi(ossStandaloneV5Config);
98-
})('Verify that user can upvote recommendations', async t => {
99+
})('Verify that user can upvote recommendations', async() => {
100+
const notUsefulVoteOption = 'not useful';
101+
const usefulVoteOption = 'useful';
99102
await browserPage.InsightsPanel.toggleInsightsPanel(true);
100-
await recommendationsActions.voteForRecommendation(redisVersionRecom, 'not-useful');
101-
// Verify that user can rate recommendations with one of 3 existing types at the same time
102-
await recommendationsActions.verifyVoteDisabled(redisVersionRecom, 'not-useful');
103+
await recommendationsActions.voteForRecommendation(redisVersionRecom, notUsefulVoteOption);
104+
// Verify that user can rate recommendations with one of 2 existing types at the same time
105+
await recommendationsActions.verifyVoteIsSelected(redisVersionRecom, notUsefulVoteOption);
103106

104107
// Verify that user can see the popup with link when he votes for “Not useful”
105-
await t.expect(memoryEfficiencyPage.recommendationsFeedbackBtn.visible).ok('popup did not appear after voting for not useful');
108+
await recommendationsActions.verifyVotePopUpIsDisplayed(redisVersionRecom, notUsefulVoteOption);
106109

107110
// Verify that the INSIGHTS_RECOMMENDATIONS_VOTED event sent with Database ID, Recommendation_name, Vote type parameters when user voted for recommendation
108111
await telemetry.verifyEventHasProperties(telemetryEvent, expectedProperties, logger);
109112
await telemetry.verifyEventPropertyValue(telemetryEvent, 'name', 'updateDatabase', logger);
110-
await telemetry.verifyEventPropertyValue(telemetryEvent, 'vote', 'not useful', logger);
113+
await telemetry.verifyEventPropertyValue(telemetryEvent, 'vote', notUsefulVoteOption, logger);
111114

112115
// Verify that user can see previous votes when reload the page
113116
await browserPage.reloadPage();
114117
await browserPage.InsightsPanel.toggleInsightsPanel(true);
115118
await browserPage.InsightsPanel.toggleRecommendation(redisVersionRecom, true);
116-
await recommendationsActions.verifyVoteDisabled(redisVersionRecom, 'not-useful');
119+
await recommendationsActions.verifyVoteIsSelected(redisVersionRecom, notUsefulVoteOption);
120+
121+
// Verify that user can change previous votes
122+
await recommendationsActions.voteForRecommendation(redisVersionRecom, usefulVoteOption);
123+
// Verify that user can rate recommendations with one of 2 existing types at the same time
124+
await recommendationsActions.verifyVoteIsSelected(redisVersionRecom, usefulVoteOption);
117125
});
118126
test('Verify that user can hide recommendations and checkbox value is saved', async t => {
119127
const commandToGetRecommendation = 'FT.INFO';

0 commit comments

Comments
 (0)