From 0c2af8c75f1af52c5e45703e9a8ad2d40464bd55 Mon Sep 17 00:00:00 2001 From: Joe Tsang <30622993+jtsang586@users.noreply.github.com> Date: Wed, 24 May 2023 09:23:31 +0100 Subject: [PATCH] chore(governance): update nightly tests (#3913) --- .../integration/flow/proposal-details.cy.ts | 20 +-- .../src/integration/flow/rewards-flow.cy.ts | 1 - .../flow/token-association-flow.cy.ts | 43 ++---- .../integration/flow/withdrawal-flow.cy.ts | 144 ++++++++++++------ .../src/integration/view/proposal.cy.ts | 1 + .../src/support/wallet-eth.functions.ts | 2 +- 6 files changed, 122 insertions(+), 89 deletions(-) diff --git a/apps/governance-e2e/src/integration/flow/proposal-details.cy.ts b/apps/governance-e2e/src/integration/flow/proposal-details.cy.ts index f97a5ac1b..c0e1a343a 100644 --- a/apps/governance-e2e/src/integration/flow/proposal-details.cy.ts +++ b/apps/governance-e2e/src/integration/flow/proposal-details.cy.ts @@ -33,8 +33,9 @@ const proposalDetailsTitle = '[data-testid="proposal-title"]'; const proposalDetailsDescription = '[data-testid="proposal-description"]'; const openProposals = '[data-testid="open-proposals"]'; const viewProposalButton = '[data-testid="view-proposal-btn"]'; +const proposalDescriptionToggle = 'proposal-description-toggle'; const voteBreakdownToggle = 'vote-breakdown-toggle'; -const proposalTermsToggle = 'proposal-terms-toggle'; +const proposalTermsToggle = 'proposal-json-toggle'; describe( 'Governance flow for proposal details', @@ -73,6 +74,8 @@ describe( 'contain.text', rawProposal.rationale.title ); + cy.getByTestId(proposalDescriptionToggle).click(); + cy.getByTestId('proposal-description-toggle'); cy.get(proposalDetailsDescription) .find('p') .should('have.text', proposalDescription); @@ -82,7 +85,7 @@ describe( cy.get('code.language-json') .should('exist') .within(() => { - cy.get('.hljs-string').eq(0).should('have.text', '"ProposalTerms"'); + cy.get('.hljs-attr').eq(0).should('have.text', '"id"'); }); }); @@ -109,16 +112,9 @@ describe( closingDate ); }); - cy.wrap( - formatDateWithLocalTimezone( - new Date(createTenDigitUnixTimeStampForSpecifiedDays(0) * 1000) - ) - ).then((proposalDate) => { - getProposalInformationFromTable('Proposed on').should( - 'have.text', - proposalDate - ); - }); + getProposalInformationFromTable('Proposed on') + .invoke('text') + .should('not.be.empty'); }); it('Newly created proposal details - shows default status set to fail', function () { diff --git a/apps/governance-e2e/src/integration/flow/rewards-flow.cy.ts b/apps/governance-e2e/src/integration/flow/rewards-flow.cy.ts index a6c3ff780..1bf35b6f8 100644 --- a/apps/governance-e2e/src/integration/flow/rewards-flow.cy.ts +++ b/apps/governance-e2e/src/integration/flow/rewards-flow.cy.ts @@ -31,7 +31,6 @@ context('rewards - flow', { tags: '@slow' }, function () { cy.visit('/'); waitForSpinner(); depositAsset(vegaAssetAddress, '1000', 18); - cy.validatorsSelfDelegate(); ethereumWalletConnect(); cy.connectVegaWallet(); cy.VegaWalletTopUpRewardsPool(30, 200); diff --git a/apps/governance-e2e/src/integration/flow/token-association-flow.cy.ts b/apps/governance-e2e/src/integration/flow/token-association-flow.cy.ts index 16f91a941..3727ca52f 100644 --- a/apps/governance-e2e/src/integration/flow/token-association-flow.cy.ts +++ b/apps/governance-e2e/src/integration/flow/token-association-flow.cy.ts @@ -24,6 +24,7 @@ const ethWalletContainer = '[data-testid="ethereum-wallet"]'; const vegaWalletAssociatedBalance = '[data-testid="currency-value"]'; const vegaWalletUnstakedBalance = '[data-testid="vega-wallet-balance-unstaked"]'; +const currencyTitle = '[data-testid="currency-title"]:visible'; const txTimeout = Cypress.env('txTimeout'); const vegaWalletPublicKeyShort = Cypress.env('vegaWalletPublicKeyShort'); const ethWalletAssociateButton = '[data-testid="associate-btn"]:visible'; @@ -79,14 +80,11 @@ context( //0005-ETXN-005 stakingPageAssociateTokens('2', { skipConfirmation: true }); - cy.getByTestId('currency-title', txTimeout).should( - 'have.length.above', - 6 - ); + cy.get(currencyTitle, txTimeout).should('have.length.above', 4); validateWalletCurrency('Associated', '0.00'); validateWalletCurrency('Pending association', '2.00'); validateWalletCurrency('Total associated after pending', '2.00'); - cy.getByTestId('currency-title', txTimeout).should('have.length', 6); + cy.get(currencyTitle, txTimeout).should('have.length.at.least', 6); // 0005-ETXN-002 verifyEthWalletAssociatedBalance('2.0'); @@ -117,14 +115,11 @@ context( verifyEthWalletTotalAssociatedBalance('6,002.00'); cy.get('button').contains('Select a validator to nominate').click(); stakingPageDisassociateTokens('2'); - cy.getByTestId('currency-title', txTimeout).should( - 'have.length.above', - 6 - ); + cy.get(currencyTitle, txTimeout).should('have.length.above', 4); validateWalletCurrency('Associated', '2.00'); validateWalletCurrency('Pending association', '2.00'); validateWalletCurrency('Total associated after pending', '0.00'); - cy.getByTestId('currency-title', txTimeout).should('have.length', 6); + cy.get(currencyTitle, txTimeout).should('have.length.at.least', 6); cy.get( '[data-testid="eth-wallet-associated-balances"]:visible', txTimeout @@ -225,14 +220,11 @@ context( skipConfirmation: true, }); - cy.getByTestId('currency-title', txTimeout).should( - 'have.length.above', - 6 - ); + cy.get(currencyTitle, txTimeout).should('have.length.above', 4); validateWalletCurrency('Associated', '0.00'); validateWalletCurrency('Pending association', '2.00'); validateWalletCurrency('Total associated after pending', '2.00'); - cy.getByTestId('currency-title', txTimeout).should('have.length', 6); + cy.get(currencyTitle, txTimeout).should('have.length.at.least', 6); verifyEthWalletAssociatedBalance('2.0'); verifyEthWalletTotalAssociatedBalance('2.0'); cy.get(vegaWallet) @@ -248,14 +240,11 @@ context( type: 'contract', skipConfirmation: true, }); - cy.getByTestId('currency-title', txTimeout).should( - 'have.length.above', - 6 - ); + cy.get(currencyTitle, txTimeout).should('have.length.above', 4); validateWalletCurrency('Associated', '2.00'); validateWalletCurrency('Pending association', '1.00'); validateWalletCurrency('Total associated after pending', '1.00'); - cy.getByTestId('currency-title', txTimeout).should('have.length', 6); + cy.get(currencyTitle, txTimeout).should('have.length.at.least', 6); verifyEthWalletAssociatedBalance('1.0'); verifyEthWalletTotalAssociatedBalance('1.0'); }); @@ -339,14 +328,11 @@ context( // 1004-ASSO-004 it('Pending association outside of app is shown', function () { vegaWalletAssociate('2'); - cy.getByTestId('currency-title', txTimeout).should( - 'have.length.above', - 6 - ); + cy.get(currencyTitle, txTimeout).should('have.length.above', 4); validateWalletCurrency('Associated', '0.00'); validateWalletCurrency('Pending association', '2.00'); validateWalletCurrency('Total associated after pending', '2.00'); - cy.getByTestId('currency-title', txTimeout).should('have.length', 6); + cy.get(currencyTitle, txTimeout).should('have.length.at.least', 6); validateWalletCurrency('Associated', '2.00'); }); @@ -355,14 +341,11 @@ context( cy.wrap(validateWalletCurrency('Associated', '2.00')).then(() => { vegaWalletDisassociate('2'); }); - cy.getByTestId('currency-title', txTimeout).should( - 'have.length.above', - 6 - ); + cy.get(currencyTitle, txTimeout).should('have.length.above', 4); validateWalletCurrency('Associated', '2.00'); validateWalletCurrency('Pending association', '2.00'); validateWalletCurrency('Total associated after pending', '0.00'); - cy.getByTestId('currency-title', txTimeout).should('have.length', 6); + cy.get(currencyTitle, txTimeout).should('have.length.at.least', 6); validateWalletCurrency('Associated', '0.00'); }); diff --git a/apps/governance-e2e/src/integration/flow/withdrawal-flow.cy.ts b/apps/governance-e2e/src/integration/flow/withdrawal-flow.cy.ts index 1d5586c0a..588c7e463 100644 --- a/apps/governance-e2e/src/integration/flow/withdrawal-flow.cy.ts +++ b/apps/governance-e2e/src/integration/flow/withdrawal-flow.cy.ts @@ -15,13 +15,7 @@ const balanceAvailable = 'BALANCE_AVAILABLE_value'; const withdrawalThreshold = 'WITHDRAWAL_THRESHOLD_value'; const delayTime = 'DELAY_TIME_value'; const submitWithdrawalButton = 'submit-withdrawal'; -const dialogTitle = 'dialog-title'; const dialogClose = 'dialog-close'; -const txExplorerLink = 'tx-block-explorer'; -const withdrawalAssetSymbol = 'withdrawal-asset-symbol'; -const withdrawalAmount = 'withdrawal-amount'; -const withdrawalRecipient = 'withdrawal-recipient'; -const withdrawFundsButton = 'withdraw-funds'; const completeWithdrawalButton = 'complete-withdrawal'; const tableTxHash = '[col-id="txHash"]'; const tableAssetSymbol = '[col-id="asset.symbol"]'; @@ -30,14 +24,16 @@ const tableReceiverAddress = '[col-id="details.receiverAddress"]'; const tableWithdrawnTimeStamp = '[col-id="withdrawnTimestamp"]'; const tableWithdrawnStatus = '[col-id="status"]'; const tableCreatedTimeStamp = '[col-id="createdTimestamp"]'; -const toastContent = 'toast-content'; +const toast = 'toast'; const toastPanel = 'toast-panel'; +const toastClose = 'toast-close'; +const withdrawalDialogContent = 'dialog-content'; +const toastCompleteWithdrawal = 'toast-complete-withdrawal'; const usdtName = 'USDC (local)'; const usdcEthAddress = '0x1b8a1B6CBE5c93609b46D1829Cc7f3Cb8eeE23a0'; const usdcSymbol = 'tUSDC'; const usdtSelectValue = '993ed98f4f770d91a796faab1738551193ba45c62341d20597df70fea6704ede'; -const truncatedWithdrawalEthAddress = '0xEe7D…22d94F'; const formValidationError = 'input-error-text'; const txTimeout = Cypress.env('txTimeout'); @@ -107,29 +103,35 @@ context( cy.getByTestId(amountInput).click().type('120'); cy.getByTestId(submitWithdrawalButton).click(); }); - - cy.contains('Awaiting network confirmation').should('be.visible'); // assert withdrawal request - cy.getByTestId(dialogTitle, txTimeout).should( - 'have.text', - 'Transaction complete' - ); - cy.getByTestId(txExplorerLink) - .should('have.attr', 'href') - .and('contain', '/txs/'); - cy.getByTestId(withdrawalAssetSymbol).should('have.text', usdcSymbol); - cy.getByTestId(withdrawalAmount).should('have.text', '120.00'); - cy.getByTestId(withdrawalRecipient) - .should('have.text', truncatedWithdrawalEthAddress) - .and('have.attr', 'href') - .and('contain', `/address/${Cypress.env('ethWalletPublicKey')}`); - cy.getByTestId(withdrawFundsButton).click(); + cy.getByTestId(toast) + .first(txTimeout) + .should('contain.text', 'Funds unlocked') + .within(() => { + cy.getByTestId('external-link').should('exist'); + cy.getByTestId(toastPanel).should( + 'contain.text', + 'Withdraw 120.00 tUSDC' + ); + cy.getByTestId(toastCompleteWithdrawal).click(); + cy.getByTestId(toastClose).click(); + }); // withdrawal complete - cy.getByTestId(dialogTitle, txTimeout).should( - 'have.text', - 'Withdraw asset complete' - ); - cy.getByTestId(dialogClose).click(); + cy.getByTestId(toast) + .first(txTimeout) + .should('contain.text', 'The withdrawal has been approved.') + .within(() => { + cy.getByTestId(toastPanel).should( + 'contain.text', + 'Withdraw 120.00 tUSDC' + ); + }); + cy.getByTestId(toast) + .last(txTimeout) + .should('contain.text', 'Transaction confirmed') + .within(() => { + cy.getByTestId('external-link').should('exist'); + }); // withdrawal history for complete withdrawal displayed cy.get(tableWithdrawnStatus) .eq(1, txTimeout) @@ -168,13 +170,17 @@ context( cy.getByTestId(submitWithdrawalButton).click(); }); - cy.contains('Awaiting network confirmation').should('be.visible'); - // assert withdrawal request - cy.getByTestId(dialogTitle, txTimeout).should( - 'have.text', - 'Transaction complete' - ); - cy.getByTestId(dialogClose).click(); + cy.getByTestId(toast) + .first(txTimeout) + .should('contain.text', 'Funds unlocked') + .within(() => { + cy.getByTestId('external-link').should('exist'); + cy.getByTestId(toastPanel).should( + 'contain.text', + 'Withdraw 110.00 tUSDC' + ); + cy.getByTestId(toastClose).click(); + }); cy.get(tableTxHash) .eq(1) .should('have.text', 'Complete withdrawal') @@ -189,28 +195,75 @@ context( cy.get(tableCreatedTimeStamp).should('not.be.empty'); }); ethereumWalletConnect(); - cy.getByTestId(completeWithdrawalButton).click(); - cy.getByTestId(toastContent) - .last() + cy.getByTestId(completeWithdrawalButton).first().click(); + cy.getByTestId(toast) + .last(txTimeout) .should('contain.text', 'Awaiting confirmation') .within(() => { cy.getByTestId('external-link').should('exist'); }); - cy.getByTestId(toastContent) - .first() + cy.getByTestId(toast) + .first(txTimeout) .should('contain.text', 'The withdrawal has been approved.') .within(() => { cy.getByTestId(toastPanel).should('contain.text', '110.00', 'tUSDC'); }); - cy.getByTestId(toastContent) - .last() + cy.getByTestId(toast) + .last(txTimeout) .should('contain.text', 'Transaction confirmed') .within(() => { cy.getByTestId('external-link').should('exist'); }); }); - it('Unable to withdraw asset on pub key view', function () { + it('Should be able to see withdrawal details from toast', function () { + cy.getByTestId(withdraw).click(); + cy.getByTestId(withdrawalForm, txTimeout).within(() => { + cy.get('select').select(usdtSelectValue, { force: true }); + cy.getByTestId(balanceAvailable, txTimeout).should('exist'); + cy.getByTestId(withdrawalThreshold).should( + 'have.text', + '100,000.00000T' + ); + cy.getByTestId(amountInput).click().type('50'); + cy.getByTestId(submitWithdrawalButton).click(); + }); + cy.getByTestId(toast) + .first(txTimeout) + .should('contain.text', 'Funds unlocked') + .within(() => { + cy.getByTestId('external-link').should('exist'); + cy.getByTestId(toastPanel).should( + 'contain.text', + 'Withdraw 50.00 tUSDC' + ); + cy.contains('save your withdrawal details').click(); + }); + cy.getByTestId(withdrawalDialogContent) + .last() + .within(() => { + cy.getByTestId('assetSource_value').should( + 'have.text', + '0x1b8a1B6CBE5c93609b46D1829Cc7f3Cb8eeE23a0' + ); + cy.getByTestId('amount_value').should('have.text', '5000000'); + cy.getByTestId('nonce_value').invoke('text').should('not.be.empty'); + cy.getByTestId('signatures_value') + .invoke('text') + .should('not.be.empty'); + cy.getByTestId('targetAddress_value').should( + 'have.text', + Cypress.env('ethWalletPublicKey') + ); + cy.getByTestId('creation_value') + .invoke('text') + .should('not.be.empty'); + }); + cy.getByTestId(dialogClose).click(); + }); + + // Skipping test due to bug #3882 + it.skip('Unable to withdraw asset on pub key view', function () { const vegaWalletPubKey = Cypress.env('vegaWalletPublicKey'); const expectedErrorTxt = `You are connected in a view only state for public key: ${vegaWalletPubKey}. In order to send transactions you must connect to a real wallet.`; @@ -224,10 +277,11 @@ context( cy.get('select').select(usdtSelectValue, { force: true }); cy.getByTestId(balanceAvailable, txTimeout).should('exist'); cy.getByTestId(amountInput).click().type('100'); + cy.pause(); cy.getByTestId(submitWithdrawalButton).click(); }); - cy.getByTestId('dialog-content') + cy.getByTestId(withdrawalDialogContent) .last() .within(() => { cy.get('h1').should('have.text', 'Transaction failed'); diff --git a/apps/governance-e2e/src/integration/view/proposal.cy.ts b/apps/governance-e2e/src/integration/view/proposal.cy.ts index 549c8e88c..34b0bd781 100644 --- a/apps/governance-e2e/src/integration/view/proposal.cy.ts +++ b/apps/governance-e2e/src/integration/view/proposal.cy.ts @@ -128,6 +128,7 @@ context( .first() .find('[data-testid="view-proposal-btn"]') .click(); + cy.url().should('contain', '/protocol-upgrades/v1'); cy.getByTestId('protocol-upgrade-proposal').within(() => { cy.get('h1').should('have.text', 'Vega Release v1'); cy.getByTestId('protocol-upgrade-block-height').should( diff --git a/apps/governance-e2e/src/support/wallet-eth.functions.ts b/apps/governance-e2e/src/support/wallet-eth.functions.ts index be28907d2..7be70441a 100644 --- a/apps/governance-e2e/src/support/wallet-eth.functions.ts +++ b/apps/governance-e2e/src/support/wallet-eth.functions.ts @@ -5,7 +5,7 @@ const capsuleWalletConnectButton = '[data-testid="web3-connector-Unknown"]'; export function ethereumWalletConnect() { cy.highlight('Connecting Eth Wallet'); - cy.get(connectToEthButton).within(() => { + cy.get(connectToEthButton, { timeout: 60000 }).within(() => { cy.contains('Connect Ethereum wallet to associate $VEGA') .should('be.visible') .click();