240 lines
7.9 KiB
JavaScript
240 lines
7.9 KiB
JavaScript
const tokenAmountInputBox = '[data-testid="token-amount-input"]';
|
|
const tokenSubmitButton = '[data-testid="token-input-submit-button"]';
|
|
const tokenInputApprove = '[data-testid="token-input-approve-button"]';
|
|
const addStakeRadioButton = '[data-testid="add-stake-radio"]';
|
|
const removeStakeRadioButton = '[data-testid="remove-stake-radio"]';
|
|
const ethWalletAssociateButton = '[href="/token/associate"]';
|
|
const ethWalletDissociateButton = '[href="/token/disassociate"]';
|
|
const vegaWalletUnstakedBalance =
|
|
'[data-testid="vega-wallet-balance-unstaked"]';
|
|
const vegaWalletAssociatedBalance = '[data-testid="currency-value"]';
|
|
const associateWalletRadioButton = '[data-testid="associate-radio-wallet"]';
|
|
const associateContractRadioButton = '[data-testid="associate-radio-contract"]';
|
|
const stakeMaximumTokens = '[data-testid="token-amount-use-maximum"]';
|
|
const stakeValidatorListPendingStake = '[col-id="pendingStake"]';
|
|
const stakeValidatorListTotalStake = '[col-id="stake"] > div > span';
|
|
const stakeValidatorListTotalShare = '[col-id="stakeShare"] > div > span';
|
|
const stakeValidatorListName = '[col-id="validator"]';
|
|
const vegaKeySelector = '#vega-key-selector';
|
|
const dialogCloseButton = '[data-testid="dialog-close"]';
|
|
|
|
const txTimeout = Cypress.env('txTimeout');
|
|
const epochTimeout = Cypress.env('epochTimeout');
|
|
|
|
Cypress.Commands.add('wait_for_beginning_of_epoch', () => {
|
|
cy.contains('Waiting for next epoch to start', epochTimeout).should(
|
|
'not.exist'
|
|
);
|
|
cy.contains('Waiting for next epoch to start', epochTimeout).should(
|
|
'be.visible'
|
|
);
|
|
});
|
|
|
|
Cypress.Commands.add('staking_validator_page_add_stake', (stake) => {
|
|
cy.highlight(`Adding a stake of ${stake}`);
|
|
cy.get(addStakeRadioButton, epochTimeout).click({ force: true });
|
|
cy.get(tokenAmountInputBox).type(stake);
|
|
cy.wait_for_beginning_of_epoch();
|
|
cy.get(tokenSubmitButton, epochTimeout)
|
|
.should('be.enabled')
|
|
.and('contain', `Add ${stake} $VEGA tokens`)
|
|
.and('be.visible')
|
|
.click();
|
|
});
|
|
|
|
Cypress.Commands.add('staking_validator_page_remove_stake', (stake) => {
|
|
cy.highlight(`Removing a stake of ${stake}`);
|
|
cy.get(removeStakeRadioButton, epochTimeout).click();
|
|
cy.get(tokenAmountInputBox).type(stake);
|
|
cy.wait_for_beginning_of_epoch();
|
|
cy.get(tokenSubmitButton)
|
|
.should('be.enabled', epochTimeout)
|
|
.and('contain', `Remove ${stake} $VEGA tokens at the end of epoch`)
|
|
.and('be.visible')
|
|
.click();
|
|
cy.get(dialogCloseButton).click();
|
|
});
|
|
|
|
Cypress.Commands.add('staking_page_associate_tokens', (amount, options) => {
|
|
let approve = options && options.approve ? options.approve : false;
|
|
let type = options && options.type ? options.type : 'wallet';
|
|
let skipConfirmation =
|
|
options && options.skipConfirmation ? options.skipConfirmation : false;
|
|
|
|
cy.highlight(`Associating ${amount} tokens from ${type}`);
|
|
cy.get(ethWalletAssociateButton).first().click();
|
|
if (type === 'wallet') {
|
|
cy.get(associateWalletRadioButton, { timeout: 30000 }).click();
|
|
} else if (type === 'contract') {
|
|
cy.get(associateContractRadioButton, { timeout: 30000 }).click();
|
|
} else {
|
|
cy.highlight(`${type} is not association option`);
|
|
}
|
|
cy.get(tokenAmountInputBox, epochTimeout).type(amount);
|
|
if (approve) {
|
|
cy.get(tokenInputApprove, txTimeout).should('be.enabled').click();
|
|
cy.contains('Approve $VEGA Tokens for staking on Vega').should(
|
|
'be.visible'
|
|
);
|
|
cy.contains('Approve $VEGA Tokens for staking on Vega', txTimeout).should(
|
|
'not.exist'
|
|
);
|
|
}
|
|
cy.get(tokenSubmitButton, txTimeout).should('be.enabled').click();
|
|
|
|
if (!skipConfirmation) {
|
|
cy.contains(
|
|
`Associating with Vega key. Waiting for ${Cypress.env(
|
|
'blockConfirmations'
|
|
)} more confirmations..`,
|
|
txTimeout
|
|
).should('be.visible');
|
|
cy.contains(
|
|
'can now participate in governance and nominate a validator',
|
|
txTimeout
|
|
).should('be.visible');
|
|
}
|
|
});
|
|
|
|
Cypress.Commands.add('staking_page_disassociate_tokens', (amount, options) => {
|
|
let type = options && options.type ? options.type : 'wallet';
|
|
cy.highlight(
|
|
`Disassociating ${amount} tokens via Staking Page back to ${type}`
|
|
);
|
|
cy.get(ethWalletDissociateButton).first().click();
|
|
|
|
cy.get(vegaKeySelector, txTimeout)
|
|
.invoke('attr', 'disabled')
|
|
.then((disabled) => {
|
|
if (!disabled) {
|
|
cy.get(vegaKeySelector).select(
|
|
`${type}-${Cypress.env('vegaWalletPublicKey')}`
|
|
);
|
|
}
|
|
});
|
|
|
|
cy.get(tokenAmountInputBox, epochTimeout).type(amount);
|
|
cy.get(tokenSubmitButton, epochTimeout).should('be.enabled').click();
|
|
|
|
if (type === 'wallet') {
|
|
cy.contains(
|
|
`${amount} $VEGA tokens have been returned to Ethereum wallet`,
|
|
txTimeout
|
|
).should('be.visible');
|
|
} else if (type === 'contract') {
|
|
cy.contains(
|
|
`${amount} $VEGA tokens have been returned to Vesting contract`,
|
|
txTimeout
|
|
).should('be.visible');
|
|
}
|
|
});
|
|
|
|
Cypress.Commands.add(
|
|
'staking_page_disassociate_all_tokens',
|
|
(type = 'wallet') => {
|
|
cy.highlight(`Disassociating all tokens via Staking Page`);
|
|
cy.get(ethWalletDissociateButton).first().click();
|
|
cy.get(stakeMaximumTokens, epochTimeout).click();
|
|
cy.get(tokenSubmitButton, epochTimeout).click();
|
|
if (type === 'wallet') {
|
|
cy.contains(
|
|
`$VEGA tokens have been returned to Ethereum wallet`,
|
|
txTimeout
|
|
).should('be.visible');
|
|
} else if (type === 'contract') {
|
|
cy.contains(
|
|
`$VEGA tokens have been returned to Vesting contract`,
|
|
txTimeout
|
|
).should('be.visible');
|
|
}
|
|
}
|
|
);
|
|
|
|
Cypress.Commands.add(
|
|
'click_on_validator_from_list',
|
|
(validatorNumber, validatorName = null) => {
|
|
cy.contains('Loading...', epochTimeout).should('not.exist');
|
|
cy.wait_for_beginning_of_epoch();
|
|
// below is to ensure validator list is shown
|
|
cy.get(stakeValidatorListName, { timeout: 10000 }).should('exist');
|
|
cy.get(stakeValidatorListPendingStake, txTimeout).should(
|
|
'not.contain',
|
|
'2,000,000,000,000,000,000.00' // number due to bug #936
|
|
);
|
|
if (validatorName) {
|
|
cy.contains(validatorName).click();
|
|
} else {
|
|
cy.get(`[row-id="${validatorNumber}"]`)
|
|
.should('be.visible')
|
|
.find(stakeValidatorListName)
|
|
.click();
|
|
}
|
|
}
|
|
);
|
|
|
|
Cypress.Commands.add(
|
|
'validate_validator_list_total_stake_and_share',
|
|
(positionOnList, expectedTotalStake, expectedTotalShare) => {
|
|
cy.contains('Loading...', epochTimeout).should('not.exist');
|
|
cy.wait_for_beginning_of_epoch();
|
|
cy.get(`[row-id="${positionOnList}"]`).within(() => {
|
|
cy.get(stakeValidatorListTotalStake, epochTimeout).should(
|
|
'have.text',
|
|
expectedTotalStake
|
|
);
|
|
cy.get(stakeValidatorListTotalShare, epochTimeout).should(
|
|
'have.text',
|
|
expectedTotalShare
|
|
);
|
|
});
|
|
}
|
|
);
|
|
|
|
Cypress.Commands.add(
|
|
'ensure_specified_unstaked_tokens_are_associated',
|
|
(tokenAmount) => {
|
|
cy.highlight(`Ensuring ${tokenAmount} token(s) associated`);
|
|
cy.get(vegaWalletUnstakedBalance)
|
|
.children()
|
|
.children()
|
|
.eq(1)
|
|
.invoke('text')
|
|
.then((unstakedBalance) => {
|
|
if (parseFloat(unstakedBalance) != parseFloat(tokenAmount)) {
|
|
cy.vega_wallet_teardown();
|
|
cy.get(vegaWalletAssociatedBalance, txTimeout).contains(
|
|
'0.00',
|
|
txTimeout
|
|
);
|
|
cy.staking_page_associate_tokens(tokenAmount);
|
|
}
|
|
});
|
|
}
|
|
);
|
|
|
|
Cypress.Commands.add('close_staking_dialog', () => {
|
|
cy.getByTestId('dialog-title').should(
|
|
'contain.text',
|
|
'At the beginning of the next epoch'
|
|
);
|
|
cy.getByTestId('dialog-content').within(() => {
|
|
cy.get('a').should('have.text', 'Back to Staking').click();
|
|
});
|
|
});
|
|
|
|
Cypress.Commands.add(
|
|
'validate_wallet_currency',
|
|
(currencyTitle, expectedAmount) => {
|
|
cy.get("[data-testid='currency-title']")
|
|
.contains(currencyTitle)
|
|
.parent()
|
|
.parent()
|
|
.within(() => {
|
|
cy.getByTestId('currency-value', txTimeout).should(
|
|
'have.text',
|
|
expectedAmount
|
|
);
|
|
});
|
|
}
|
|
);
|