Skip to content

Commit a307304

Browse files
authored
test(extension): add tests for LW-10143, LW-10147, LW-10148, LW-10149 (#994)
* test(extension): add tests for LW-10143, LW-10147, LW-10148, LW-10149 * test(extension): make LW-2550 and LW-2561 more stable * test(extension): adjust timeout
1 parent 8dbe257 commit a307304

File tree

13 files changed

+395
-61
lines changed

13 files changed

+395
-61
lines changed
Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
import MoreOptionsComponent from '../../elements/multidelegation/MoreOptionsComponent';
2+
import { expect } from 'chai';
3+
import { t } from '../../utils/translationService';
4+
5+
class MoreOptionsComponentAssert {
6+
assertSeeMoreOptionsComponent = async (tab: 'sorting' | 'filtering') => {
7+
await MoreOptionsComponent.moreOptionsLabel.waitForDisplayed();
8+
expect(await MoreOptionsComponent.moreOptionsLabel.getText()).to.equal(
9+
await t('browsePools.preferencesCard.headers.moreOptions', 'staking')
10+
);
11+
12+
// TODO: uncomment when USE_MULTI_DELEGATION_STAKING_FILTERS=true
13+
// await MoreOptionsComponent.sortingToggle.waitForDisplayed();
14+
// expect(await MoreOptionsComponent.sortingToggle.getText()).to.equal(
15+
// await t('browsePools.preferencesCard.headers.sorting', 'staking')
16+
// );
17+
// await MoreOptionsComponent.filtersToggle.waitForDisplayed();
18+
// expect(await MoreOptionsComponent.filtersToggle.getText()).to.equal(
19+
// await t('browsePools.preferencesCard.headers.filters', 'staking')
20+
// );
21+
22+
if (tab === 'sorting') {
23+
// TODO: uncomment when USE_MULTI_DELEGATION_STAKING_FILTERS=true
24+
// expect(await MoreOptionsComponent.sortingToggle.getAttribute('aria-checked')).to.equal('true');
25+
await this.assertSeeSortingTab();
26+
} else {
27+
expect(await MoreOptionsComponent.filtersToggle.getAttribute('aria-checked')).to.equal('true');
28+
await this.assertSeeFiltersTab();
29+
}
30+
};
31+
32+
assertSeeSortingTab = async () => {
33+
await MoreOptionsComponent.tickerOption.radioButton.waitForDisplayed();
34+
await MoreOptionsComponent.tickerOption.label.waitForDisplayed();
35+
expect(await MoreOptionsComponent.tickerOption.label.getText()).to.equal(
36+
await t('browsePools.preferencesCard.sort.ticker', 'staking')
37+
);
38+
await MoreOptionsComponent.saturationOption.radioButton.waitForDisplayed();
39+
await MoreOptionsComponent.saturationOption.label.waitForDisplayed();
40+
expect(await MoreOptionsComponent.saturationOption.label.getText()).to.equal(
41+
await t('browsePools.preferencesCard.sort.saturation', 'staking')
42+
);
43+
await MoreOptionsComponent.rosOption.radioButton.waitForDisplayed();
44+
await MoreOptionsComponent.rosOption.label.waitForDisplayed();
45+
expect(await MoreOptionsComponent.rosOption.label.getText()).to.equal(
46+
await t('browsePools.preferencesCard.sort.ros', 'staking')
47+
);
48+
await MoreOptionsComponent.costOption.radioButton.waitForDisplayed();
49+
await MoreOptionsComponent.costOption.label.waitForDisplayed();
50+
expect(await MoreOptionsComponent.costOption.label.getText()).to.equal(
51+
await t('browsePools.preferencesCard.sort.cost', 'staking')
52+
);
53+
await MoreOptionsComponent.marginOption.radioButton.waitForDisplayed();
54+
await MoreOptionsComponent.marginOption.label.waitForDisplayed();
55+
expect(await MoreOptionsComponent.marginOption.label.getText()).to.equal(
56+
await t('browsePools.preferencesCard.sort.margin', 'staking')
57+
);
58+
await MoreOptionsComponent.blocksOption.radioButton.waitForDisplayed();
59+
await MoreOptionsComponent.blocksOption.label.waitForDisplayed();
60+
expect(await MoreOptionsComponent.blocksOption.label.getText()).to.equal(
61+
await t('browsePools.preferencesCard.sort.blocks', 'staking')
62+
);
63+
await MoreOptionsComponent.pledgeOption.radioButton.waitForDisplayed();
64+
await MoreOptionsComponent.pledgeOption.label.waitForDisplayed();
65+
expect(await MoreOptionsComponent.pledgeOption.label.getText()).to.equal(
66+
await t('browsePools.preferencesCard.sort.pledge', 'staking')
67+
);
68+
await MoreOptionsComponent.liveStakeOption.radioButton.waitForDisplayed();
69+
await MoreOptionsComponent.liveStakeOption.label.waitForDisplayed();
70+
expect(await MoreOptionsComponent.liveStakeOption.label.getText()).to.equal(
71+
await t('browsePools.preferencesCard.sort.liveStake', 'staking')
72+
);
73+
};
74+
75+
assertSeeFiltersTab = async () => {
76+
await MoreOptionsComponent.saturationFilterLabel.waitForDisplayed();
77+
expect(await MoreOptionsComponent.saturationFilterLabel.getText()).to.equal(
78+
await t('browsePools.preferencesCard.filter.saturation', 'staking')
79+
);
80+
await MoreOptionsComponent.profitMarginFilterLabel.waitForDisplayed();
81+
expect(await MoreOptionsComponent.profitMarginFilterLabel.getText()).to.equal(
82+
await t('browsePools.preferencesCard.filter.profitMargin', 'staking')
83+
);
84+
await MoreOptionsComponent.performanceFilterLabel.waitForDisplayed();
85+
expect(await MoreOptionsComponent.performanceFilterLabel.getText()).to.equal(
86+
await t('browsePools.preferencesCard.filter.performance', 'staking')
87+
);
88+
await MoreOptionsComponent.rosFilterLabel.waitForDisplayed();
89+
expect(await MoreOptionsComponent.rosFilterLabel.getText()).to.equal(
90+
await t('browsePools.preferencesCard.filter.ros.title', 'staking')
91+
);
92+
// TODO: add assertions for input fields when USE_MULTI_DELEGATION_STAKING_FILTERS=true
93+
};
94+
}
95+
96+
export default new MoreOptionsComponentAssert();

packages/e2e-tests/src/assert/multidelegation/MultidelegationPageAssert.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import { StakePoolGridCard } from '../../elements/multidelegation/StakePoolGridC
1111

1212
class MultidelegationPageAssert {
1313
assertSeeStakingOnPoolsCounter = async (poolsCount: number) => {
14-
await MultidelegationPage.delegationCardPoolsValue.waitForClickable({ timeout: 60_000 });
14+
await MultidelegationPage.delegationCardPoolsValue.waitForClickable({ timeout: 120_000 });
1515
const poolsCounter = Number(await MultidelegationPage.delegationCardPoolsValue.getText());
1616
expect(poolsCounter).to.equal(poolsCount);
1717
};

packages/e2e-tests/src/assert/transactionDetailsAssert.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,9 @@ class TransactionsDetailsAssert {
156156
for (let i = 0; i <= rowsNumber && i < 10; i++) {
157157
await TransactionsPage.clickOnTransactionRow(i);
158158
await TransactionDetailsPage.transactionDetailsInputsDropdown.click();
159+
await TransactionDetailsPage.transactionDetailsInputsDropdown.waitForStable();
159160
await TransactionDetailsPage.transactionDetailsOutputsDropdown.click();
161+
await TransactionDetailsPage.transactionDetailsOutputsDropdown.waitForStable();
160162

161163
const txDetailsInputADAValueString = await TransactionDetailsPage.transactionDetailsInputAdaAmount.getText();
162164
const txDetailsInputADAValue = Number(txDetailsInputADAValueString.split(' ', 1));
Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
import { SortingOption } from './SortingOption';
2+
import { StakePoolSortingOptionType } from '../../types/staking';
3+
4+
class MoreOptionsComponent {
5+
private MORE_OPTIONS_LABEL = '[data-testid="stake-pools-more-options-label"]';
6+
private SORTING_TOGGLE = '[data-testid="stake-pools-sorting-toggle"]';
7+
private FILTERS_TOGGLE = '[data-testid="stake-pools-filters-toggle"]';
8+
private SATURATION_FILTER_LABEL = '[data-testid="filter-Saturation-label"]';
9+
private PROFIT_MARGIN_FILTER_LABEL = '[data-testid="filter-ProfitMargin-label"]';
10+
private PERFORMANCE_FILTER_LABEL = '[data-testid="filter-Performance-label"]';
11+
private ROS_FILTER_LABEL = '[data-testid="filter-Ros-label"]';
12+
13+
get moreOptionsLabel() {
14+
return $(this.MORE_OPTIONS_LABEL);
15+
}
16+
17+
get sortingToggle() {
18+
return $(this.SORTING_TOGGLE);
19+
}
20+
21+
get filtersToggle() {
22+
return $(this.FILTERS_TOGGLE);
23+
}
24+
25+
get tickerOption() {
26+
return new SortingOption('ticker');
27+
}
28+
29+
get saturationOption() {
30+
return new SortingOption('saturation');
31+
}
32+
33+
get rosOption() {
34+
return new SortingOption('ros');
35+
}
36+
37+
get costOption() {
38+
return new SortingOption('cost');
39+
}
40+
41+
get marginOption() {
42+
return new SortingOption('margin');
43+
}
44+
45+
get blocksOption() {
46+
return new SortingOption('blocks');
47+
}
48+
49+
get pledgeOption() {
50+
return new SortingOption('pledge');
51+
}
52+
53+
get liveStakeOption() {
54+
return new SortingOption('liveStake');
55+
}
56+
57+
get saturationFilterLabel() {
58+
return $(this.SATURATION_FILTER_LABEL);
59+
}
60+
61+
get profitMarginFilterLabel() {
62+
return $(this.PROFIT_MARGIN_FILTER_LABEL);
63+
}
64+
65+
get performanceFilterLabel() {
66+
return $(this.PERFORMANCE_FILTER_LABEL);
67+
}
68+
69+
get rosFilterLabel() {
70+
return $(this.ROS_FILTER_LABEL);
71+
}
72+
73+
async selectSortingOption(sortingOption: StakePoolSortingOptionType) {
74+
switch (sortingOption) {
75+
case 'Ticker':
76+
await this.tickerOption.radioButton.click();
77+
break;
78+
case 'Saturation':
79+
await this.saturationOption.radioButton.click();
80+
break;
81+
case 'ROS':
82+
await this.rosOption.radioButton.click();
83+
break;
84+
case 'Cost':
85+
await this.costOption.radioButton.click();
86+
break;
87+
case 'Margin':
88+
await this.marginOption.radioButton.click();
89+
break;
90+
case 'Produced blocks':
91+
await this.blocksOption.radioButton.click();
92+
break;
93+
case 'Pledge':
94+
await this.pledgeOption.radioButton.click();
95+
break;
96+
case 'Live Stake':
97+
await this.liveStakeOption.radioButton.click();
98+
break;
99+
default:
100+
throw new Error(`Unsupported column name: ${sortingOption}`);
101+
}
102+
}
103+
}
104+
105+
export default new MoreOptionsComponent();

packages/e2e-tests/src/elements/multidelegation/MultidelegationPage.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import { StakePoolListColumnType } from '../../types/staking';
1212
import { StakePoolListItem } from './StakePoolListItem';
1313
import { StakePoolGridCard } from './StakePoolGridCard';
1414
import StakePoolDetailsDrawer from './StakePoolDetailsDrawer';
15+
import MoreOptionsComponent from './MoreOptionsComponent';
1516

1617
class MultidelegationPage {
1718
private ACTIVITY_TAB = '[data-testid="activity-tab"]';
@@ -289,6 +290,10 @@ class MultidelegationPage {
289290
return $$(this.SELCECTED_STAKE_POOLS_IN_LIST_VIEW);
290291
}
291292

293+
get moreOptionsComponent(): typeof MoreOptionsComponent {
294+
return MoreOptionsComponent;
295+
}
296+
292297
async getPoolByTicker(ticker: string) {
293298
return (await this.displayedPools.find(
294299
async (item) => (await item.$(this.POOL_TICKER).getText()) === ticker
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
/* eslint-disable no-undef */
2+
import { ChainablePromiseElement } from 'webdriverio';
3+
4+
export class SortingOption {
5+
private readonly optionName;
6+
constructor(optionName: 'ticker' | 'saturation' | 'ros' | 'cost' | 'margin' | 'blocks' | 'pledge' | 'liveStake') {
7+
this.optionName = optionName;
8+
}
9+
10+
get radioButton(): ChainablePromiseElement<WebdriverIO.Element> {
11+
return $(`#radio-btn-control-id-${this.optionName}`);
12+
}
13+
14+
get label(): ChainablePromiseElement<WebdriverIO.Element> {
15+
return $(`#radio-btn-label-id-${this.optionName}`);
16+
}
17+
}

packages/e2e-tests/src/features/MultiDelegationPageExtended.feature

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -205,3 +205,9 @@ Feature: Staking Page - Extended View
205205
Then I see 4 stake pool cards in a row
206206
When I resize the window to a width of: 1023 and a height of: 1080
207207
Then I see 3 stake pool cards in a row
208+
209+
@LW-10143 @Testnet @Mainnet
210+
Scenario: Extended View - Staking - More options - Sorting options are displayed
211+
When I am on Staking extended page
212+
And I open Browse pools tab
213+
Then "More options" component with stake pool sorting options is displayed
Lines changed: 60 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -1,61 +1,67 @@
1-
@Analytics-Staking-SwitchingPools-Extended-E2E @Analytics @Testnet @Pending
2-
Feature: Analytics - Posthog - Switching pools - Extended View
1+
@Staking-NonDelegatedFunds-Extended @Analytics @Testnet
2+
Feature: Analytics - PostHog - Staking - Extended View
33

44
Background:
55
Given Wallet is synced
66

7-
@LW-7868
8-
Scenario: Analytics - Extended View - Staking - Success screen - Close drawer
9-
Given I set up request interception for posthog analytics request(s)
10-
And I save token: "Cardano" balance
7+
@LW-10147
8+
Scenario: Analytics - Extended View - Staking - switching between views
119
When I navigate to Staking extended page
12-
Then I validate latest analytics single event "staking | staking | click"
13-
Then I see currently staking stake pool in extended mode and choose new pool as "OtherStakePool"
14-
When I input "OtherStakePool" to the search bar
15-
And I wait for single search result
16-
And I click stake pool with name "OtherStakePool"
17-
Then I validate latest analytics single event "staking | staking | stake pool | click"
18-
Then I see drawer with "OtherStakePool" stake pool details and a button available for staking
19-
When I click "Stake on this pool" button on stake pool details drawer
20-
Then I validate latest analytics single event "staking | stake pool detail | stake on this pool | click"
21-
And I click "Fine by me" button on "Switching pool?" modal
22-
Then I validate latest analytics single event "staking | switching pool? | fine by me | click"
23-
Then I see drawer with stakepool: "OtherStakePool" confirmation screen in extended mode
24-
And I click "Next" button on staking confirmation drawer
25-
Then I validate latest analytics single event "staking | manage delegation | stake pool confirmation | next | click"
26-
And I enter correct wallet password and confirm staking
27-
Then Switching Delegation success screen is displayed in extended mode
28-
And I validate latest analytics multiple events:
29-
| staking \| manage delegation \| hurray! \| view |
30-
| staking \| manage delegation \| password confirmation \| confirm \| click |
31-
When I click "Close" button on staking success drawer
32-
Then I validate latest analytics single event "staking | manage delegation | hurray! | close | click"
33-
And I validate that 8 analytics event(s) have been sent
10+
And I open Browse pools tab
11+
And I set up request interception for posthog analytics request(s)
12+
And I switch to list view on "Browse pools" tab
13+
Then I validate latest analytics single event "staking | browse pools | toggle | list view | click"
14+
# TODO: enable when USE_MULTI_DELEGATION_STAKING_GRID_VIEW=true by default
15+
# When I switch to grid view on "Browse pools" tab
16+
# Then I validate latest analytics single event "staking | browse pools | toggle | grid view | click"
17+
And I validate that 1 analytics event(s) have been sent
3418

35-
@LW-7869
36-
Scenario: Analytics - Extended View - Staking - Success screen - Close drawer by clicking X button
37-
Given I set up request interception for posthog analytics request(s)
38-
And I save token: "Cardano" balance
19+
@LW-10148
20+
Scenario: Analytics - Extended View - Staking - List View - click on column headers
3921
When I navigate to Staking extended page
40-
Then I validate latest analytics single event "staking | staking | click"
41-
Then I see currently staking stake pool in extended mode and choose new pool as "OtherStakePool"
42-
When I input "OtherStakePool" to the search bar
43-
And I wait for single search result
44-
And I click stake pool with name "OtherStakePool"
45-
Then I validate latest analytics single event "staking | staking | stake pool | click"
46-
Then I see drawer with "OtherStakePool" stake pool details and a button available for staking
47-
When I click "Stake on this pool" button on stake pool details drawer
48-
Then I validate latest analytics single event "staking | stake pool detail | stake on this pool | click"
49-
And I click "Fine by me" button on "Switching pool?" modal
50-
Then I validate latest analytics single event "staking | switching pool? | fine by me | click"
51-
Then I see drawer with stakepool: "OtherStakePool" confirmation screen in extended mode
52-
And I click "Next" button on staking confirmation drawer
53-
Then I validate latest analytics single event "staking | manage delegation | stake pool confirmation | next | click"
54-
And I enter correct wallet password and confirm staking
55-
Then Switching Delegation success screen is displayed in extended mode
56-
And I validate latest analytics multiple events:
57-
| staking \| manage delegation \| hurray! \| view |
58-
| staking \| manage delegation \| password confirmation \| confirm \| click |
59-
When I close the drawer by clicking close button
60-
Then I validate latest analytics single event "staking | manage delegation | hurray! | x | click"
61-
And I validate that 8 analytics event(s) have been sent
22+
And I open Browse pools tab
23+
And I switch to list view on "Browse pools" tab
24+
And I set up request interception for posthog analytics request(s)
25+
And I click on stake pools table "Ticker" column header
26+
Then I validate latest analytics single event "staking | browse pools | ticker | click"
27+
When I click on stake pools table "Saturation" column header
28+
Then I validate latest analytics single event "staking | browse pools | saturation | click"
29+
# TODO: Uncomment when USE_ROS_STAKING_COLUMN=true
30+
# When I click on stake pools table "ROS" column header
31+
# Then I validate latest analytics single event "staking | browse pools | ros | click"
32+
When I click on stake pools table "Cost" column header
33+
Then I validate latest analytics single event "staking | browse pools | cost | click"
34+
When I click on stake pools table "Margin" column header
35+
Then I validate latest analytics single event "staking | browse pools | margin | click"
36+
When I click on stake pools table "Blocks" column header
37+
Then I validate latest analytics single event "staking | browse pools | blocks | click"
38+
When I click on stake pools table "Pledge" column header
39+
Then I validate latest analytics single event "staking | browse pools | pledge | click"
40+
When I click on stake pools table "Live Stake" column header
41+
Then I validate latest analytics single event "staking | browse pools | live-stake | click"
42+
And I validate that 7 analytics event(s) have been sent
43+
44+
@LW-10149
45+
Scenario: Analytics - Extended View - Staking - More options - Sorting - select each option
46+
When I navigate to Staking extended page
47+
And I open Browse pools tab
48+
And I switch to list view on "Browse pools" tab
49+
And I set up request interception for posthog analytics request(s)
50+
When I select "Saturation" sorting option from "More options" component
51+
Then I validate latest analytics single event "staking | browse pools | more options sorting | saturation | click"
52+
# TODO: Uncomment when USE_ROS_STAKING_COLUMN=true
53+
# When I select "ROS" sorting option from "More options" component
54+
# Then I validate latest analytics single event "staking | browse pools | more options sorting | ros | click"
55+
When I select "Cost" sorting option from "More options" component
56+
Then I validate latest analytics single event "staking | browse pools | more options sorting | cost | click"
57+
When I select "Margin" sorting option from "More options" component
58+
Then I validate latest analytics single event "staking | browse pools | more options sorting | margin | click"
59+
When I select "Produced blocks" sorting option from "More options" component
60+
Then I validate latest analytics single event "staking | browse pools | more options sorting | produced blocks | click"
61+
When I select "Pledge" sorting option from "More options" component
62+
Then I validate latest analytics single event "staking | browse pools | more options sorting | pledge | click"
63+
When I select "Live Stake" sorting option from "More options" component
64+
Then I validate latest analytics single event "staking | browse pools | more options sorting | live-stake | click"
65+
And I select "Ticker" sorting option from "More options" component
66+
Then I validate latest analytics single event "staking | browse pools | more options sorting | ticker | click"
67+
And I validate that 7 analytics event(s) have been sent

0 commit comments

Comments
 (0)