chore(governance): update staking acs (#4123)
This commit is contained in:
parent
fc3c73ad24
commit
8f29824f9e
@ -54,7 +54,7 @@ context(
|
|||||||
'Staking Tab - with eth and vega wallets connected',
|
'Staking Tab - with eth and vega wallets connected',
|
||||||
{ tags: '@slow' },
|
{ tags: '@slow' },
|
||||||
function () {
|
function () {
|
||||||
// 2001-STKE-002, 2001-STKE-032
|
// 1002-STKE-002, 1002-STKE-032
|
||||||
before('visit staking tab and connect vega wallet', function () {
|
before('visit staking tab and connect vega wallet', function () {
|
||||||
cy.visit('/');
|
cy.visit('/');
|
||||||
ethereumWalletConnect();
|
ethereumWalletConnect();
|
||||||
@ -77,25 +77,41 @@ context(
|
|||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// 1002-STKE-035 1002-STKE-036
|
||||||
|
it('Unable to stake against a validator with less than minimum and more than associated amount', function () {
|
||||||
|
ensureSpecifiedUnstakedTokensAreAssociated('3');
|
||||||
|
verifyUnstakedBalance(3.0);
|
||||||
|
verifyEthWalletTotalAssociatedBalance('3.0');
|
||||||
|
verifyEthWalletAssociatedBalance('3.0');
|
||||||
|
cy.get('button').contains('Select a validator to nominate').click();
|
||||||
|
clickOnValidatorFromList(0);
|
||||||
|
cy.getByTestId(stakeAddStakeRadioButton, epochTimeout).click({
|
||||||
|
force: true,
|
||||||
|
});
|
||||||
|
cy.getByTestId(stakeTokenAmountInputBox).type('0.001');
|
||||||
|
cy.getByTestId(stakeTokenSubmitButton).should('be.disabled');
|
||||||
|
cy.getByTestId(stakeTokenAmountInputBox).clear().type('4');
|
||||||
|
cy.getByTestId(stakeTokenSubmitButton).should('be.disabled');
|
||||||
|
});
|
||||||
it('Able to stake against a validator - using vega from wallet', function () {
|
it('Able to stake against a validator - using vega from wallet', function () {
|
||||||
ensureSpecifiedUnstakedTokensAreAssociated('3');
|
ensureSpecifiedUnstakedTokensAreAssociated('3');
|
||||||
verifyUnstakedBalance(3.0);
|
verifyUnstakedBalance(3.0);
|
||||||
verifyEthWalletTotalAssociatedBalance('3.0');
|
verifyEthWalletTotalAssociatedBalance('3.0');
|
||||||
verifyEthWalletAssociatedBalance('3.0');
|
verifyEthWalletAssociatedBalance('3.0');
|
||||||
cy.get('button').contains('Select a validator to nominate').click();
|
cy.get('button').contains('Select a validator to nominate').click();
|
||||||
// 2001-STKE-031
|
// 1002-STKE-031
|
||||||
clickOnValidatorFromList(0);
|
clickOnValidatorFromList(0);
|
||||||
// 2001-STKE-033, 2001-STKE-034, 2001-STKE-037
|
// 1002-STKE-033, 1002-STKE-034, 1002-STKE-037
|
||||||
stakingValidatorPageAddStake('2');
|
stakingValidatorPageAddStake('2');
|
||||||
verifyUnstakedBalance(1.0);
|
verifyUnstakedBalance(1.0);
|
||||||
// 2001-STKE-039
|
// 1002-STKE-039
|
||||||
verifyStakedBalance(2.0);
|
verifyStakedBalance(2.0);
|
||||||
verifyNextEpochValue(2.0); // 2001-STKE-016 2001-STKE-038
|
verifyNextEpochValue(2.0); // 1002-STKE-016 1002-STKE-038
|
||||||
verifyThisEpochValue(2.0); // 2001-STKE-013
|
verifyThisEpochValue(2.0); // 1002-STKE-013
|
||||||
closeStakingDialog();
|
closeStakingDialog();
|
||||||
navigateTo(navigation.validators);
|
navigateTo(navigation.validators);
|
||||||
|
|
||||||
// 2002-SINC-007
|
// 2002-SINC-007 1002-STKE-015 1002-STKE-017 1002-STKE-052
|
||||||
validateValidatorListTotalStakeAndShare('0', '3,002.00', '50.02%');
|
validateValidatorListTotalStakeAndShare('0', '3,002.00', '50.02%');
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -218,7 +234,7 @@ context(
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
// 2001-STKE-041
|
// 1002-STKE-041 1002-STKE-053
|
||||||
it(
|
it(
|
||||||
'Able to remove part of a stake against a validator',
|
'Able to remove part of a stake against a validator',
|
||||||
{ tags: '@smoke' },
|
{ tags: '@smoke' },
|
||||||
@ -231,11 +247,11 @@ context(
|
|||||||
verifyUnstakedBalance(1.0);
|
verifyUnstakedBalance(1.0);
|
||||||
closeStakingDialog();
|
closeStakingDialog();
|
||||||
navigateTo(navigation.validators);
|
navigateTo(navigation.validators);
|
||||||
// 2001-STKE-040
|
// 1002-STKE-040
|
||||||
clickOnValidatorFromList(0);
|
clickOnValidatorFromList(0);
|
||||||
// 2001-STKE-044, 2001-STKE-048
|
// 1002-STKE-044, 1002-STKE-048
|
||||||
stakingValidatorPageRemoveStake('1');
|
stakingValidatorPageRemoveStake('1');
|
||||||
// 2001-STKE-049
|
// 1002-STKE-049
|
||||||
verifyNextEpochValue(2.0);
|
verifyNextEpochValue(2.0);
|
||||||
verifyUnstakedBalance(2.0);
|
verifyUnstakedBalance(2.0);
|
||||||
verifyStakedBalance(2.0);
|
verifyStakedBalance(2.0);
|
||||||
@ -255,7 +271,7 @@ context(
|
|||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
// 2001-STKE-045
|
// 1002-STKE-045
|
||||||
it('Able to remove a full stake against a validator', function () {
|
it('Able to remove a full stake against a validator', function () {
|
||||||
stakingPageAssociateTokens('3');
|
stakingPageAssociateTokens('3');
|
||||||
verifyUnstakedBalance(3.0);
|
verifyUnstakedBalance(3.0);
|
||||||
@ -303,6 +319,7 @@ context(
|
|||||||
.and('be.visible');
|
.and('be.visible');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// 1002-STKE-046 1002-STKE-047
|
||||||
it('Unable to remove a stake greater than staked amount next epoch for a validator', function () {
|
it('Unable to remove a stake greater than staked amount next epoch for a validator', function () {
|
||||||
stakingPageAssociateTokens('3');
|
stakingPageAssociateTokens('3');
|
||||||
verifyUnstakedBalance(3.0);
|
verifyUnstakedBalance(3.0);
|
||||||
@ -405,7 +422,7 @@ context(
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('Associating wallet tokens - when some already staked - auto stakes tokens to staked validator', function () {
|
it('Associating wallet tokens - when some already staked - auto stakes tokens to staked validator', function () {
|
||||||
// 2001-STKE-004
|
// 1002-STKE-004
|
||||||
stakingPageAssociateTokens('3');
|
stakingPageAssociateTokens('3');
|
||||||
verifyUnstakedBalance(3.0);
|
verifyUnstakedBalance(3.0);
|
||||||
cy.get('button').contains('Select a validator to nominate').click();
|
cy.get('button').contains('Select a validator to nominate').click();
|
||||||
@ -419,7 +436,7 @@ context(
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('Associating vesting contract tokens - when some already staked - auto stakes tokens to staked validator', function () {
|
it('Associating vesting contract tokens - when some already staked - auto stakes tokens to staked validator', function () {
|
||||||
// 2001-STKE-004
|
// 1002-STKE-004
|
||||||
stakingPageAssociateTokens('3', { type: 'contract' });
|
stakingPageAssociateTokens('3', { type: 'contract' });
|
||||||
verifyUnstakedBalance(3.0);
|
verifyUnstakedBalance(3.0);
|
||||||
cy.get('button').contains('Select a validator to nominate').click();
|
cy.get('button').contains('Select a validator to nominate').click();
|
||||||
@ -433,7 +450,7 @@ context(
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('Associating vesting contract tokens - when wallet tokens already staked - auto stakes tokens to staked validator', function () {
|
it('Associating vesting contract tokens - when wallet tokens already staked - auto stakes tokens to staked validator', function () {
|
||||||
// 2001-STKE-004
|
// 1002-STKE-004
|
||||||
stakingPageAssociateTokens('3', { type: 'wallet' });
|
stakingPageAssociateTokens('3', { type: 'wallet' });
|
||||||
verifyUnstakedBalance(3.0);
|
verifyUnstakedBalance(3.0);
|
||||||
cy.get('button').contains('Select a validator to nominate').click();
|
cy.get('button').contains('Select a validator to nominate').click();
|
||||||
@ -447,7 +464,7 @@ context(
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('Associating tokens - with multiple validators already staked - auto stakes to staked validators - abiding by existing stake ratio', function () {
|
it('Associating tokens - with multiple validators already staked - auto stakes to staked validators - abiding by existing stake ratio', function () {
|
||||||
// 2001-STKE-004
|
// 1002-STKE-004
|
||||||
stakingPageAssociateTokens('6');
|
stakingPageAssociateTokens('6');
|
||||||
verifyUnstakedBalance(6.0);
|
verifyUnstakedBalance(6.0);
|
||||||
cy.get('button').contains('Select a validator to nominate').click();
|
cy.get('button').contains('Select a validator to nominate').click();
|
||||||
@ -500,7 +517,7 @@ context(
|
|||||||
}
|
}
|
||||||
|
|
||||||
function verifyThisEpochValue(amount: number) {
|
function verifyThisEpochValue(amount: number) {
|
||||||
cy.getByTestId('stake-this-epoch', epochTimeout) // 2001-STKE-013
|
cy.getByTestId('stake-this-epoch', epochTimeout) // 1002-STKE-013
|
||||||
.contains(amount, epochTimeout)
|
.contains(amount, epochTimeout)
|
||||||
.should('be.visible');
|
.should('be.visible');
|
||||||
}
|
}
|
||||||
|
@ -40,209 +40,213 @@ context('Validators Page - verify elements on page', function () {
|
|||||||
});
|
});
|
||||||
|
|
||||||
describe('with wallets disconnected', { tags: '@smoke' }, function () {
|
describe('with wallets disconnected', { tags: '@smoke' }, function () {
|
||||||
describe('description section', function () {
|
it('Should have validators tab highlighted', function () {
|
||||||
it('Should have validators tab highlighted', function () {
|
verifyTabHighlighted(navigation.validators);
|
||||||
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 () {
|
it('Should have validators ON VEGA header visible', function () {
|
||||||
cy.getByTestId('total-stake')
|
verifyPageHeader('Validators');
|
||||||
.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 () {
|
it('Should have Staking Guide link visible', function () {
|
||||||
waitForBeginningOfEpoch();
|
// 1002-STKE-003
|
||||||
cy.getByTestId('total-stake').first().realHover();
|
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'
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
cy.get(stakedByOperatorToolTip)
|
// 1002-STKE-032
|
||||||
.invoke('text')
|
it('Should have button to connect vega wallet in validator page', function () {
|
||||||
.should('contain', 'Staked by operator: 3,000.00');
|
clickOnValidatorFromList(0);
|
||||||
cy.get(stakedByDelegatesToolTip)
|
cy.getByTestId('connect-to-vega-wallet-btn').should('be.visible');
|
||||||
.invoke('text')
|
cy.visit('/validators');
|
||||||
.should('contain', 'Staked by delegates: 0.00');
|
});
|
||||||
cy.get(totalStakedToolTip)
|
|
||||||
.invoke('text')
|
|
||||||
.should('contain', 'Total stake: 3,000.00');
|
|
||||||
});
|
|
||||||
|
|
||||||
it('Should be able to see validator normalised voting power', function () {
|
|
||||||
cy.getByTestId('normalised-voting-power')
|
|
||||||
.should('have.length.at.least', 1)
|
|
||||||
.each(($vPower) => {
|
|
||||||
cy.wrap($vPower).should('not.be.empty');
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
it('Should be able to see validator normalised voting power tooltip', function () {
|
|
||||||
waitForBeginningOfEpoch();
|
|
||||||
cy.getByTestId('normalised-voting-power').first().realHover();
|
|
||||||
|
|
||||||
cy.get(unnormalisedVotingPowerToolTip)
|
|
||||||
.invoke('text')
|
|
||||||
.should('contain', 'Unnormalised voting power: 20.00%');
|
|
||||||
cy.get(normalisedVotingPowerToolTip)
|
|
||||||
.invoke('text')
|
|
||||||
.should('contain', 'Normalised voting power: 50.00%');
|
|
||||||
});
|
|
||||||
|
|
||||||
// 2002-SINC-018
|
|
||||||
it('Should be able to see validator total penalties', function () {
|
|
||||||
cy.getByTestId('total-penalty')
|
|
||||||
.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 () {
|
|
||||||
waitForBeginningOfEpoch();
|
|
||||||
cy.getByTestId('total-penalty').realHover();
|
|
||||||
|
|
||||||
cy.get(performancePenaltyToolTip)
|
|
||||||
.invoke('text')
|
|
||||||
.should('contain', 'Performance penalty: 0.00%');
|
|
||||||
cy.get(overstakedPenaltyToolTip)
|
|
||||||
.invoke('text')
|
|
||||||
.should('contain', 'Overstaked penalty: 60.00%'); // value not asserted due to #2886
|
|
||||||
cy.get(totalPenaltyToolTip)
|
|
||||||
.invoke('text')
|
|
||||||
.should('contain', 'Total penalties: 60.00%');
|
|
||||||
});
|
|
||||||
|
|
||||||
it('Should be able to see validator pending stake', function () {
|
|
||||||
cy.getByTestId('total-pending-stake')
|
|
||||||
.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');
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
);
|
|
||||||
});
|
});
|
||||||
|
// 1002-STKE-020 1002-STKE-021 1002-STKE-022 1002-STKE-023 1002-STKE-024
|
||||||
|
describe(
|
||||||
|
'Should be able to see validator list from the staking page',
|
||||||
|
{ tags: '@regression' },
|
||||||
|
function () {
|
||||||
|
// 1002-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 () {
|
||||||
|
cy.getByTestId('total-stake')
|
||||||
|
.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 () {
|
||||||
|
waitForBeginningOfEpoch();
|
||||||
|
cy.getByTestId('total-stake').first().realHover();
|
||||||
|
|
||||||
|
cy.get(stakedByOperatorToolTip)
|
||||||
|
.invoke('text')
|
||||||
|
.should('contain', 'Staked by operator: 3,000.00');
|
||||||
|
cy.get(stakedByDelegatesToolTip)
|
||||||
|
.invoke('text')
|
||||||
|
.should('contain', 'Staked by delegates: 0.00');
|
||||||
|
cy.get(totalStakedToolTip)
|
||||||
|
.invoke('text')
|
||||||
|
.should('contain', 'Total stake: 3,000.00');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('Should be able to see validator normalised voting power', function () {
|
||||||
|
cy.getByTestId('normalised-voting-power')
|
||||||
|
.should('have.length.at.least', 1)
|
||||||
|
.each(($vPower) => {
|
||||||
|
cy.wrap($vPower).should('not.be.empty');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('Should be able to see validator normalised voting power tooltip', function () {
|
||||||
|
waitForBeginningOfEpoch();
|
||||||
|
cy.getByTestId('normalised-voting-power').first().realHover();
|
||||||
|
|
||||||
|
cy.get(unnormalisedVotingPowerToolTip)
|
||||||
|
.invoke('text')
|
||||||
|
.should('contain', 'Unnormalised voting power: 20.00%');
|
||||||
|
cy.get(normalisedVotingPowerToolTip)
|
||||||
|
.invoke('text')
|
||||||
|
.should('contain', 'Normalised voting power: 50.00%');
|
||||||
|
});
|
||||||
|
|
||||||
|
// 2002-SINC-018
|
||||||
|
it('Should be able to see validator total penalties', function () {
|
||||||
|
cy.getByTestId('total-penalty')
|
||||||
|
.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 () {
|
||||||
|
waitForBeginningOfEpoch();
|
||||||
|
cy.getByTestId('total-penalty').realHover();
|
||||||
|
|
||||||
|
cy.get(performancePenaltyToolTip)
|
||||||
|
.invoke('text')
|
||||||
|
.should('contain', 'Performance penalty: 0.00%');
|
||||||
|
cy.get(overstakedPenaltyToolTip)
|
||||||
|
.invoke('text')
|
||||||
|
.should('contain', 'Overstaked penalty: 60.00%'); // value not asserted due to #2886
|
||||||
|
cy.get(totalPenaltyToolTip)
|
||||||
|
.invoke('text')
|
||||||
|
.should('contain', 'Total penalties: 60.00%');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('Should be able to see validator pending stake', function () {
|
||||||
|
cy.getByTestId('total-pending-stake')
|
||||||
|
.should('have.length.at.least', 1)
|
||||||
|
.each(($pendingStake) => {
|
||||||
|
cy.wrap($pendingStake).should('contain.text', '0.00');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
// 1002-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);
|
||||||
|
});
|
||||||
|
|
||||||
|
// 1002-STKE-006
|
||||||
|
it('Should be able to see validator name', function () {
|
||||||
|
cy.get(validatorTitle).should('not.be.empty');
|
||||||
|
});
|
||||||
|
|
||||||
|
// 1002-STKE-007
|
||||||
|
it('Should be able to see validator id', function () {
|
||||||
|
cy.get(validatorId).should('not.be.empty');
|
||||||
|
});
|
||||||
|
|
||||||
|
// 1002-STKE-008
|
||||||
|
it('Should be able to see validator public key', function () {
|
||||||
|
cy.get(validatorPubKey).should('not.be.empty');
|
||||||
|
});
|
||||||
|
|
||||||
|
// 1002-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 1002-STKE-09
|
||||||
|
|
||||||
|
it('Should be able to see validator status', function () {
|
||||||
|
cy.get(validatorStatus).should('have.text', 'Consensus');
|
||||||
|
});
|
||||||
|
|
||||||
|
// 1002-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);
|
||||||
|
});
|
||||||
|
|
||||||
|
// 1002-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+)?)%/
|
||||||
|
);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
// 1002-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');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
);
|
||||||
});
|
});
|
||||||
|
Loading…
Reference in New Issue
Block a user