@@ -8,11 +8,11 @@ import StakePoolDetails from '../staking/stakePoolDetails';
8
8
import testContext from '../../utils/testContext' ;
9
9
import { isPopupMode } from '../../utils/pageUtils' ;
10
10
import CommonDrawerElements from '../CommonDrawerElements' ;
11
- import { StakePoolListColumnType } from '../../types/staking' ;
12
11
import { StakePoolListItem } from './StakePoolListItem' ;
13
12
import { StakePoolGridCard } from './StakePoolGridCard' ;
14
13
import StakePoolDetailsDrawer from './StakePoolDetailsDrawer' ;
15
14
import MoreOptionsComponent from './MoreOptionsComponent' ;
15
+ import { StakePoolListColumn } from '../../enums/StakePoolListColumn' ;
16
16
17
17
class MultidelegationPage {
18
18
private ACTIVITY_TAB = '[data-testid="activity-tab"]' ;
@@ -41,6 +41,7 @@ class MultidelegationPage {
41
41
private COLUMN_HEADER_BLOCKS = '[data-testid="stake-pool-list-header-blocks"]' ;
42
42
private COLUMN_HEADER_PLEDGE = '[data-testid="stake-pool-list-header-pledge"]' ;
43
43
private COLUMN_HEADER_LIVE_STAKE = '[data-testid="stake-pool-list-header-liveStake"]' ;
44
+ private COLUMN_SORTING_INDICATOR_TEMPLATE = '[data-testid="stake-pool-sort-order-###"]' ;
44
45
private MANAGE_STAKING_BTN_NEXT = '[data-testid="preferences-next-button"]' ;
45
46
private CONFIRMATION_BTN_NEXT = '[data-testid="stake-pool-confirmation-btn"]' ;
46
47
private DELEGATED_POOL_ITEM = '[data-testid="delegated-pool-item"]' ;
@@ -73,6 +74,7 @@ class MultidelegationPage {
73
74
private STAKE_POOL_CARD_SKELETON = '[data-testid="stake-pool-card-skeleton"]' ;
74
75
private SELCECTED_STAKE_POOLS_IN_GRID_VIEW = '[data-testid="selected-pools-list"] [data-testid="stake-pool-card"]' ;
75
76
private SELCECTED_STAKE_POOLS_IN_LIST_VIEW = '[data-testid="selected-pools-list"] [data-testid="stake-pool-item"]' ;
77
+ private POOLS_COUNTER = '[data-testid="pools-counter"]' ;
76
78
77
79
get title ( ) {
78
80
return SectionTitle . sectionTitle ;
@@ -214,6 +216,10 @@ class MultidelegationPage {
214
216
return $ ( this . MANAGE_BTN ) ;
215
217
}
216
218
219
+ get poolsCounter ( ) {
220
+ return $ ( this . POOLS_COUNTER ) ;
221
+ }
222
+
217
223
delegatedPoolLogo ( index : number ) : ChainablePromiseElement < WebdriverIO . Element > {
218
224
return $$ ( this . DELEGATED_POOL_ITEM ) [ index ] . $ ( this . DELEGATED_POOL_LOGO ) ;
219
225
}
@@ -300,6 +306,43 @@ class MultidelegationPage {
300
306
) ) as WebdriverIO . Element ;
301
307
}
302
308
309
+ async getColumnSortingIndicator ( columnName : StakePoolListColumn , order : 'ascending' | 'descending' ) {
310
+ const orderDirection = order === 'ascending' ? 'asc' : 'desc' ;
311
+ const orderDirectionSelector = `${ this . COLUMN_SORTING_INDICATOR_TEMPLATE . replace ( '###' , orderDirection ) } ` ;
312
+ let selector = '' ;
313
+
314
+ switch ( columnName ) {
315
+ case StakePoolListColumn . Ticker :
316
+ selector = `${ this . COLUMN_HEADER_TICKER } ${ orderDirectionSelector } ` ;
317
+ break ;
318
+ case StakePoolListColumn . Saturation :
319
+ selector = `${ this . COLUMN_HEADER_SATURATION } ${ orderDirectionSelector } ` ;
320
+ break ;
321
+ case StakePoolListColumn . ROS :
322
+ selector = `${ this . COLUMN_HEADER_ROS } ${ orderDirectionSelector } ` ;
323
+ break ;
324
+ case StakePoolListColumn . Cost :
325
+ selector = `${ this . COLUMN_HEADER_COST } ${ orderDirectionSelector } ` ;
326
+ break ;
327
+ case StakePoolListColumn . Margin :
328
+ selector = `${ this . COLUMN_HEADER_MARGIN } ${ orderDirectionSelector } ` ;
329
+ break ;
330
+ case StakePoolListColumn . Blocks :
331
+ selector = `${ this . COLUMN_HEADER_BLOCKS } ${ orderDirectionSelector } ` ;
332
+ break ;
333
+ case StakePoolListColumn . Pledge :
334
+ selector = `${ this . COLUMN_HEADER_PLEDGE } ${ orderDirectionSelector } ` ;
335
+ break ;
336
+ case StakePoolListColumn . LiveStake :
337
+ selector = `${ this . COLUMN_HEADER_LIVE_STAKE } ${ orderDirectionSelector } ` ;
338
+ break ;
339
+ default :
340
+ throw new Error ( `Unsupported column name: ${ columnName } ` ) ;
341
+ }
342
+
343
+ return $ ( selector ) ;
344
+ }
345
+
303
346
async clickAndGetTabStateAttribute ( tab : 'Overview' | 'Browse pools' ) {
304
347
let tabElement ;
305
348
switch ( tab ) {
@@ -418,68 +461,69 @@ class MultidelegationPage {
418
461
await poolItem . click ( ) ;
419
462
}
420
463
421
- async hoverOverColumnWithName ( columnName : StakePoolListColumnType ) {
464
+ async hoverOverColumn ( column : StakePoolListColumn ) {
422
465
let header ;
423
- switch ( columnName ) {
424
- case 'Ticker' :
466
+
467
+ switch ( column ) {
468
+ case StakePoolListColumn . Ticker :
425
469
header = await this . columnHeaderTicker ;
426
470
break ;
427
- case ' Saturation' :
471
+ case StakePoolListColumn . Saturation :
428
472
header = await this . columnHeaderSaturation ;
429
473
break ;
430
- case ' ROS' :
474
+ case StakePoolListColumn . ROS :
431
475
header = await this . columnHeaderROS ;
432
476
break ;
433
- case ' Cost' :
477
+ case StakePoolListColumn . Cost :
434
478
header = await this . columnHeaderCost ;
435
479
break ;
436
- case ' Margin' :
480
+ case StakePoolListColumn . Margin :
437
481
header = await this . columnHeaderMargin ;
438
482
break ;
439
- case ' Blocks' :
483
+ case StakePoolListColumn . Blocks :
440
484
header = await this . columnHeaderBlocks ;
441
485
break ;
442
- case ' Pledge' :
486
+ case StakePoolListColumn . Pledge :
443
487
header = await this . columnHeaderPledge ;
444
488
break ;
445
- case 'Live Stake' :
489
+ case StakePoolListColumn . LiveStake :
446
490
header = await this . columnHeaderLiveStake ;
447
491
break ;
448
492
default :
449
- throw new Error ( `Unsupported column name: ${ columnName } ` ) ;
493
+ throw new Error ( `Unsupported column name: ${ column } ` ) ;
450
494
}
451
495
// make hovering over ANTD component more stable
452
496
await header ?. $ ( 'span span span' ) . moveTo ( ) ;
453
497
}
454
498
455
- async clickOnColumnWithName ( columnName : StakePoolListColumnType ) {
456
- switch ( columnName ) {
457
- case ' Ticker' :
499
+ async clickOnColumn ( column : StakePoolListColumn ) {
500
+ switch ( column ) {
501
+ case StakePoolListColumn . Ticker :
458
502
await this . columnHeaderTicker . click ( ) ;
459
503
break ;
460
- case ' Saturation' :
504
+ case StakePoolListColumn . Saturation :
461
505
await this . columnHeaderSaturation . click ( ) ;
462
506
break ;
463
- case ' ROS' :
507
+ case StakePoolListColumn . ROS :
464
508
await this . columnHeaderROS . click ( ) ;
465
509
break ;
466
- case ' Cost' :
510
+ case StakePoolListColumn . Cost :
467
511
await this . columnHeaderCost . click ( ) ;
468
512
break ;
469
- case ' Margin' :
513
+ case StakePoolListColumn . Margin :
470
514
await this . columnHeaderMargin . click ( ) ;
471
515
break ;
472
- case ' Blocks' :
516
+ case StakePoolListColumn . Blocks :
473
517
await this . columnHeaderBlocks . click ( ) ;
474
518
break ;
475
- case ' Pledge' :
519
+ case StakePoolListColumn . Pledge :
476
520
await this . columnHeaderPledge . click ( ) ;
477
521
break ;
478
- case 'Live Stake' :
522
+ case StakePoolListColumn . LiveStake :
479
523
await this . columnHeaderLiveStake . click ( ) ;
480
524
break ;
481
525
default :
482
- throw new Error ( `Unsupported column name: ${ columnName } ` ) ;
526
+ throw new Error ( `Unsupported column name: ${ column } ` ) ;
483
527
}
484
528
}
485
529
@@ -543,6 +587,69 @@ class MultidelegationPage {
543
587
const selectedTickers = await this . getTickersOfSelectedPools ( viewType ) ;
544
588
testContext . save ( 'selectedTickers' , selectedTickers ) ;
545
589
}
590
+
591
+ async getNumberOfPoolsFromCounter ( ) : Promise < number > {
592
+ const poolsCounterText = await this . poolsCounter . getText ( ) ;
593
+ return Number ( Number ( poolsCounterText . replace ( / .* \( / , '' ) . replace ( ')' , '' ) . replace ( ',' , '' ) ) ) ;
594
+ }
595
+
596
+ async waitForPoolsCounterToBeGreaterThanZero ( ) : Promise < void > {
597
+ await this . poolsCounter . waitForDisplayed ( ) ;
598
+ await browser . waitUntil ( async ( ) => ( await this . getNumberOfPoolsFromCounter ( ) ) > 0 , {
599
+ timeoutMsg : 'No stake pools!'
600
+ } ) ;
601
+ }
602
+
603
+ async extractColumnContent ( columnName : StakePoolListColumn , poolLimit = 100 ) : Promise < string [ ] > {
604
+ const columnContent : string [ ] = [ ] ;
605
+
606
+ await this . listContainer . waitForStable ( ) ;
607
+ await browser . pause ( 500 ) ;
608
+
609
+ for ( let i = 0 ; i < poolLimit ; i ++ ) {
610
+ const displayedPoolsCounter = await this . displayedPools . length ;
611
+ const listItem = new StakePoolListItem ( i ) ;
612
+ // Load more pools if all visible ones were processed
613
+ if ( i % ( displayedPoolsCounter - 1 ) === 0 ) {
614
+ await listItem . container . scrollIntoView ( ) ;
615
+ await this . stakePoolListRowSkeleton . waitForExist ( {
616
+ reverse : true ,
617
+ interval : 100 ,
618
+ timeout : 30_000
619
+ } ) ;
620
+ }
621
+ switch ( columnName ) {
622
+ case StakePoolListColumn . Ticker :
623
+ columnContent . push ( await listItem . ticker . getText ( ) ) ;
624
+ break ;
625
+ case StakePoolListColumn . Saturation :
626
+ columnContent . push ( await listItem . saturation . getText ( ) ) ;
627
+ break ;
628
+ case StakePoolListColumn . ROS :
629
+ columnContent . push ( await listItem . ros . getText ( ) ) ;
630
+ break ;
631
+ case StakePoolListColumn . Cost :
632
+ columnContent . push ( await listItem . cost . getText ( ) ) ;
633
+ break ;
634
+ case StakePoolListColumn . Margin :
635
+ columnContent . push ( await listItem . margin . getText ( ) ) ;
636
+ break ;
637
+ case StakePoolListColumn . Blocks :
638
+ columnContent . push ( await listItem . blocks . getText ( ) ) ;
639
+ break ;
640
+ case StakePoolListColumn . Pledge :
641
+ columnContent . push ( await listItem . pledge . getText ( ) ) ;
642
+ break ;
643
+ case StakePoolListColumn . LiveStake :
644
+ columnContent . push ( await listItem . liveStake . getText ( ) ) ;
645
+ break ;
646
+ default :
647
+ throw new Error ( `Not supported column name: ${ columnName } ` ) ;
648
+ }
649
+ }
650
+
651
+ return columnContent ;
652
+ }
546
653
}
547
654
548
655
export default new MultidelegationPage ( ) ;
0 commit comments