2023-03-22 17:35:00 +00:00
/// <reference types="cypress" />
import {
navigation ,
verifyPageHeader ,
verifyTabHighlighted ,
} from '../../support/common.functions' ;
import { clickOnValidatorFromList } from '../../support/staking.functions' ;
const guideLink = '[data-testid="staking-guide-link"]' ;
const validatorTitle = '[data-testid="validator-node-title"]' ;
const validatorId = '[data-testid="validator-id"]' ;
const validatorPubKey = '[data-testid="validator-public-key"]' ;
const ethAddressLink = '[data-testid="link"]' ;
const validatorStatus = '[data-testid="validator-status"]' ;
const totalStake = '[data-testid="total-stake"]' ;
const pendingStake = '[data-testid="pending-stake"]' ;
const stakedByOperator = '[data-testid="staked-by-operator"]' ;
const stakedByDelegates = '[data-testid="staked-by-delegates"]' ;
const stakeShare = '[data-testid="stake-percentage"]' ;
const stakedByOperatorToolTip = '[data-testid="staked-operator-tooltip"]' ;
const stakedByDelegatesToolTip = '[data-testid="staked-delegates-tooltip"]' ;
const totalStakedToolTip = '[data-testid="total-staked-tooltip"]' ;
const unnormalisedVotingPowerToolTip =
'[data-testid="unnormalised-voting-power-tooltip"]' ;
const normalisedVotingPowerToolTip =
'[data-testid="normalised-voting-power-tooltip"]' ;
const performancePenaltyToolTip = '[data-testid="performance-penalty-tooltip"]' ;
const overstakedPenaltyToolTip = '[data-testid="overstaked-penalty-tooltip"]' ;
const totalPenaltyToolTip = '[data-testid="total-penalty-tooltip"]' ;
const epochCountDown = '[data-testid="epoch-countdown"]' ;
const stakeNumberRegex = /^\d*\.?\d*$/ ;
context ( 'Validators Page - verify elements on page' , function ( ) {
before ( 'navigate to validators page' , function ( ) {
2023-04-20 11:56:33 +00:00
cy . visit ( '/validators' ) ;
2023-03-22 17:35:00 +00:00
} ) ;
describe ( 'with wallets disconnected' , { tags : '@smoke' } , function ( ) {
describe ( 'description section' , function ( ) {
it ( 'Should have validators tab highlighted' , function ( ) {
verifyTabHighlighted ( navigation . validators ) ;
} ) ;
it ( 'Should have validators ON VEGA header visible' , function ( ) {
verifyPageHeader ( 'Validators' ) ;
} ) ;
it ( 'Should have Staking Guide link visible' , function ( ) {
// 2001-STKE-003
cy . get ( guideLink )
. should ( 'be.visible' )
. and ( 'have.text' , 'Read more about staking on Vega' )
. and (
'have.attr' ,
'href' ,
'https://docs.vega.xyz/mainnet/concepts/vega-chain/#staking-on-vega'
) ;
} ) ;
} ) ;
describe (
'Should be able to see validator list from the staking page' ,
{ tags : '@regression' } ,
function ( ) {
// 2001-STKE-050
it ( 'Should be able to see validator names' , function ( ) {
cy . get ( '[col-id="validator"] > div > span' )
. should ( 'have.length.at.least' , 1 )
. each ( ( $name ) = > {
cy . wrap ( $name ) . should ( 'not.be.empty' ) ;
} ) ;
} ) ;
it ( 'Should be able to see validator stake' , function ( ) {
2023-03-28 14:28:15 +00:00
cy . getByTestId ( 'total-stake' )
2023-03-22 17:35:00 +00:00
. should ( 'have.length.at.least' , 1 )
. each ( ( $stake ) = > {
cy . wrap ( $stake ) . should ( 'not.be.empty' ) ;
} ) ;
} ) ;
it ( 'Should be able to see validator stake tooltip' , function ( ) {
2023-03-28 14:28:15 +00:00
cy . getByTestId ( 'total-stake' ) . first ( ) . realHover ( ) ;
2023-03-22 17:35:00 +00:00
cy . get ( stakedByOperatorToolTip )
. invoke ( 'text' )
. should ( 'contain' , 'Staked by operator: 0.00' ) ;
cy . get ( stakedByDelegatesToolTip )
. invoke ( 'text' )
. should ( 'contain' , 'Staked by delegates: 0.00' ) ;
cy . get ( totalStakedToolTip )
. invoke ( 'text' )
. should ( 'contain' , 'Total stake: 0.00' ) ;
} ) ;
it ( 'Should be able to see validator normalised voting power' , function ( ) {
2023-03-28 14:28:15 +00:00
cy . getByTestId ( 'normalised-voting-power' )
2023-03-22 17:35:00 +00:00
. should ( 'have.length.at.least' , 1 )
. each ( ( $vPower ) = > {
cy . wrap ( $vPower ) . should ( 'not.be.empty' ) ;
} ) ;
} ) ;
2023-03-28 14:28:15 +00:00
it ( 'Should be able to see validator normalised voting power tooltip' , function ( ) {
cy . getByTestId ( 'normalised-voting-power' ) . first ( ) . realHover ( ) ;
2023-03-22 17:35:00 +00:00
cy . get ( unnormalisedVotingPowerToolTip )
. invoke ( 'text' )
. should ( 'contain' , 'Unnormalised voting power: 0.00%' ) ;
cy . get ( normalisedVotingPowerToolTip )
. invoke ( 'text' )
. should ( 'contain' , 'Normalised voting power: 0.10%' ) ;
} ) ;
// 2002-SINC-018
it ( 'Should be able to see validator total penalties' , function ( ) {
2023-03-28 14:28:15 +00:00
cy . getByTestId ( 'total-penalty' )
2023-03-22 17:35:00 +00:00
. should ( 'have.length.at.least' , 1 )
. each ( ( $penalties ) = > {
cy . wrap ( $penalties ) . should ( 'contain.text' , '0%' ) ;
} ) ;
} ) ;
it ( 'Should be able to see validator penalties tooltip' , function ( ) {
2023-03-28 14:28:15 +00:00
cy . getByTestId ( 'total-penalty' ) . realHover ( ) ;
2023-03-22 17:35:00 +00:00
cy . get ( performancePenaltyToolTip )
. invoke ( 'text' )
. should ( 'contain' , 'Performance penalty: 100.00%' ) ;
cy . get ( overstakedPenaltyToolTip )
. invoke ( 'text' )
. should ( 'contain' , 'Overstaked penalty:' ) ; // value not asserted due to #2886
cy . get ( totalPenaltyToolTip )
. invoke ( 'text' )
. should ( 'contain' , 'Total penalties: 0.00%' ) ;
} ) ;
it ( 'Should be able to see validator pending stake' , function ( ) {
2023-03-28 14:28:15 +00:00
cy . getByTestId ( 'total-pending-stake' )
2023-03-22 17:35:00 +00:00
. should ( 'have.length.at.least' , 1 )
. each ( ( $pendingStake ) = > {
cy . wrap ( $pendingStake ) . should ( 'contain.text' , '0.00' ) ;
} ) ;
} ) ;
}
) ;
// 2001-STKE-050
describe (
'Should be able to see static information about a validator' ,
{ tags : '@smoke' } ,
function ( ) {
before ( 'connect wallets and click on validator' , function ( ) {
cy . connectVegaWallet ( ) ;
clickOnValidatorFromList ( 0 ) ;
} ) ;
// 2001-STKE-006
it ( 'Should be able to see validator name' , function ( ) {
cy . get ( validatorTitle ) . should ( 'not.be.empty' ) ;
} ) ;
// 2001-STKE-007
it ( 'Should be able to see validator id' , function ( ) {
cy . get ( validatorId ) . should ( 'not.be.empty' ) ;
} ) ;
// 2001-STKE-008
it ( 'Should be able to see validator public key' , function ( ) {
cy . get ( validatorPubKey ) . should ( 'not.be.empty' ) ;
} ) ;
// 2001-STKE-010
it ( 'Should be able to see Ethereum address' , function ( ) {
cy . get ( ethAddressLink )
. should ( 'not.be.empty' )
. and ( 'have.attr' , 'href' ) ;
} ) ;
// TODO validators missing url for more information about them 2001-STKE-09
it ( 'Should be able to see validator status' , function ( ) {
cy . get ( validatorStatus ) . should ( 'have.text' , 'Consensus' ) ;
} ) ;
// 2001-STKE-012
it ( 'Should be able to see total stake' , function ( ) {
cy . get ( totalStake ) . invoke ( 'text' ) . should ( 'match' , stakeNumberRegex ) ;
} ) ;
it ( 'Should be able to see pending stake' , function ( ) {
cy . get ( pendingStake ) . invoke ( 'text' ) . should ( 'match' , stakeNumberRegex ) ;
} ) ;
it ( 'Should be able to see staked by operator' , function ( ) {
cy . get ( stakedByOperator )
. invoke ( 'text' )
. should ( 'match' , stakeNumberRegex ) ;
} ) ;
it ( 'Should be able to see staked by delegates' , function ( ) {
cy . get ( stakedByDelegates )
. invoke ( 'text' )
. should ( 'match' , stakeNumberRegex ) ;
} ) ;
// 2001-STKE-051
it ( 'Should be able to see stake share in percentage' , function ( ) {
cy . get ( stakeShare )
. invoke ( 'text' )
. then ( ( $stakePercentage ) = > {
// The pattern must start at a word boundary (\b).
// The pattern cannot be immediately preceded by a dot ((?<!\.)).
// The pattern can be one of the following:
// A percentage value of zero (0%), or
// A non-zero percentage value that can be:
// A single digit (\d) between 0 and 9, or
// A two-digit number between 0 and 99 (\d{1,2}), or
// The number 100.
// The pattern can optionally include a decimal point and one or more digits after the decimal point ((?:(?<!100)\.\d+)?). However, if the number is 100, it cannot have a decimal point.
// The pattern must end with a percentage sign (%).
cy . wrap ( $stakePercentage ) . should (
'match' ,
/\b(?<!\.)(?:0+(?:\.0+)?%|(?:\d|\d{1,2}|100)(?:(?<!100)\.\d+)?)%/
) ;
} ) ;
} ) ;
// 2001-STKE-011 2002-SINC-001 2002-SINC-002
it ( 'Should be able to see epoch information' , function ( ) {
const epochTitle = 'h3' ;
const nextEpochInfo = 'p' ;
cy . get ( epochCountDown ) . within ( ( ) = > {
cy . get ( epochTitle ) . should ( 'not.be.empty' ) ;
cy . get ( nextEpochInfo ) . should ( 'contain.text' , 'Next epoch' ) ;
} ) ;
} ) ;
}
) ;
} ) ;
} ) ;