diff --git a/apps/token-e2e/src/integration/flow/governance-forms-flow.cy.js b/apps/token-e2e/src/integration/flow/governance-forms-flow.cy.js index 3869cb5f9..413ca98d2 100644 --- a/apps/token-e2e/src/integration/flow/governance-forms-flow.cy.js +++ b/apps/token-e2e/src/integration/flow/governance-forms-flow.cy.js @@ -61,7 +61,7 @@ context( // 3002-PROP-007 cy.get(newProposalDescription).type('E2E test for proposals'); - cy.get(proposalParameterSelect).find('option').should('have.length', 115); + cy.get(proposalParameterSelect).find('option').should('have.length', 116); cy.get(proposalParameterSelect).select( // 3007-PNEC-002 'governance_proposal_asset_minEnact' diff --git a/apps/token-e2e/src/integration/flow/staking-flow.cy.js b/apps/token-e2e/src/integration/flow/staking-flow.cy.js index d2711be24..82eafd1d0 100644 --- a/apps/token-e2e/src/integration/flow/staking-flow.cy.js +++ b/apps/token-e2e/src/integration/flow/staking-flow.cy.js @@ -93,6 +93,7 @@ context( .contains(2.0, epochTimeout) .should('be.visible'); + cy.close_staking_dialog(); cy.navigate_to('validators'); // 2002-SINC-007 @@ -145,6 +146,7 @@ context( .contains(2.0, epochTimeout) .should('be.visible'); + cy.close_staking_dialog(); cy.navigate_to('validators'); cy.validate_validator_list_total_stake_and_share( @@ -209,6 +211,7 @@ context( .contains(6.0, epochTimeout) .should('be.visible'); + cy.close_staking_dialog(); cy.navigate_to('validators'); cy.validate_validator_list_total_stake_and_share( @@ -243,6 +246,7 @@ context( .parent() .should('contain', 2.0, txTimeout); + cy.close_staking_dialog(); cy.navigate_to('validators'); cy.click_on_validator_from_list(1); @@ -264,6 +268,7 @@ context( .eq(1) .should('contain', 1.0, txTimeout); + cy.close_staking_dialog(); cy.navigate_to('validators'); cy.get(`[row-id="${0}"]`).within(() => { @@ -323,6 +328,7 @@ context( txTimeout ); + cy.close_staking_dialog(); cy.navigate_to('validators'); // 2001-STKE-040 cy.click_on_validator_from_list(0); @@ -388,6 +394,7 @@ context( txTimeout ); + cy.close_staking_dialog(); cy.navigate_to('validators'); cy.click_on_validator_from_list('0'); @@ -447,6 +454,7 @@ context( txTimeout ); + cy.close_staking_dialog(); cy.navigate_to('validators'); cy.click_on_validator_from_list(0); @@ -488,6 +496,7 @@ context( txTimeout ); + cy.close_staking_dialog(); cy.navigate_to('validators'); cy.click_on_validator_from_list(0); diff --git a/apps/token-e2e/src/integration/flow/withdrawal-flow.cy.js b/apps/token-e2e/src/integration/flow/withdrawal-flow.cy.js index 335d66d6d..bb61544fe 100644 --- a/apps/token-e2e/src/integration/flow/withdrawal-flow.cy.js +++ b/apps/token-e2e/src/integration/flow/withdrawal-flow.cy.js @@ -170,6 +170,27 @@ context( }); }); + it('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.`; + + // Disconnect vega wallet + cy.getByTestId('manage-vega-wallet').click(); + cy.getByTestId('disconnect').click(); + + cy.connectPublicKey(vegaWalletPubKey); + cy.getByTestId(withdraw).should('be.visible').click(); + cy.getByTestId(selectAsset).select(usdtName); + cy.getByTestId(balanceAvailable, txTimeout).should('exist'); + cy.getByTestId(amountInput).click().type('100'); + cy.getByTestId(submitWithdrawalButton).click(); + + cy.getByTestId('dialog-content').within(() => { + cy.get('h1').should('have.text', 'Transaction failed'); + cy.getByTestId('Error').should('have.text', expectedErrorTxt); + }); + }); + function waitForAssetsDisplayed(expectedAsset) { cy.contains(expectedAsset, txTimeout).should('be.visible'); } diff --git a/apps/token-e2e/src/integration/view/pubkey-view.cy.js b/apps/token-e2e/src/integration/view/pubkey-view.cy.js new file mode 100644 index 000000000..001b6d469 --- /dev/null +++ b/apps/token-e2e/src/integration/view/pubkey-view.cy.js @@ -0,0 +1,62 @@ +/// +const vegaWalletPubKey = Cypress.env('vegaWalletPublicKey2'); +const vegaPubkeyTruncated = Cypress.env('vegaWalletPublicKey2Short'); +const banner = 'view-banner'; + +context('View functionality with public key', { tags: '@smoke' }, function () { + before('send asset to wallet', function () { + cy.vega_wallet_faucet_assets_without_check( + 'fUSDC', + '1000000', + vegaWalletPubKey + ); + }); + + beforeEach('visit home page', function () { + cy.visit('/'); + cy.wait_for_spinner(); + cy.connectPublicKey(vegaWalletPubKey); + }); + + it('Able to connect public key via wallet', function () { + verifyConnectedToPubKey(); + cy.getByTestId('currency-title').should('contain.text', 'USDC (fake)'); + }); + + it('Able to connect public key using url', function () { + cy.getByTestId('exit-view').click(); + cy.visit(`/?address=${vegaWalletPubKey}`); + verifyConnectedToPubKey(); + }); + + it('Unable to submit proposal with public key', function () { + 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.`; + + cy.navigate_to('proposals'); + cy.go_to_make_new_proposal('Freeform'); + cy.enter_unique_freeform_proposal_body('50', 'pub key proposal test'); + cy.getByTestId('proposal-submit').should('be.visible').click(); + cy.getByTestId('dialog-content').within(() => { + cy.get('h1').should('have.text', 'Transaction failed'); + cy.getByTestId('Error').should('have.text', expectedErrorTxt); + }); + }); + + it('Able to disconnect via banner', function () { + cy.getByTestId('exit-view').click(); + cy.getByTestId(banner).should('not.exist'); + }); + + it('Able to disconnect via wallet', function () { + cy.getByTestId('manage-vega-wallet').click(); + cy.getByTestId('disconnect').click(); + cy.getByTestId(banner).should('not.exist'); + }); + + function verifyConnectedToPubKey() { + cy.getByTestId(banner).should( + 'contain.text', + `Viewing as Vega user: ${vegaPubkeyTruncated}` + ); + } +}); diff --git a/apps/token-e2e/src/support/staking.functions.js b/apps/token-e2e/src/support/staking.functions.js index 2dc4a8945..7833bf4a1 100644 --- a/apps/token-e2e/src/support/staking.functions.js +++ b/apps/token-e2e/src/support/staking.functions.js @@ -40,7 +40,6 @@ Cypress.Commands.add('staking_validator_page_add_stake', (stake) => { .and('contain', `Add ${stake} $VEGA tokens`) .and('be.visible') .click(); - cy.get(dialogCloseButton).click(); }); Cypress.Commands.add('staking_validator_page_remove_stake', (stake) => { diff --git a/libs/cypress/src/index.ts b/libs/cypress/src/index.ts index 66587ab9a..4f6727205 100644 --- a/libs/cypress/src/index.ts +++ b/libs/cypress/src/index.ts @@ -16,6 +16,7 @@ import { } from './lib/commands/vega-wallet-connect'; import { addMockTransactionResponse } from './lib/commands/mock-transaction-response'; import { addCreateMarket } from './lib/commands/create-market'; +import { addConnectPublicKey } from './lib/commands/add-connect-public-key'; addGetTestIdcommand(); addSlackCommand(); @@ -33,6 +34,7 @@ addVegaWalletConnect(); addSetVegaWallet(); addMockTransactionResponse(); addCreateMarket(); +addConnectPublicKey(); export { mockConnectWallet } from './lib/commands/vega-wallet-connect'; export type { onMessage } from './lib/mock-ws'; diff --git a/libs/cypress/src/lib/commands/add-connect-public-key.ts b/libs/cypress/src/lib/commands/add-connect-public-key.ts new file mode 100644 index 000000000..87697e73e --- /dev/null +++ b/libs/cypress/src/lib/commands/add-connect-public-key.ts @@ -0,0 +1,23 @@ +declare global { + // eslint-disable-next-line @typescript-eslint/no-namespace + namespace Cypress { + // eslint-disable-next-line @typescript-eslint/no-unused-vars + interface Chainable { + connectPublicKey(publicKey: string): void; + } + } +} + +export const addConnectPublicKey = () => { + Cypress.Commands.add('connectPublicKey', (publicKey) => { + cy.getByTestId('connect-vega-wallet').then((connectWallet) => { + if (connectWallet.length) { + cy.getByTestId('connect-vega-wallet').click(); + cy.getByTestId('connector-view').should('be.visible').click(); + cy.getByTestId('address').click(); + cy.getByTestId('address').type(publicKey); + cy.getByTestId('connect').click(); + } + }); + }); +}; diff --git a/libs/ui-toolkit/src/components/viewing-as-user/index.tsx b/libs/ui-toolkit/src/components/viewing-as-user/index.tsx index d62a7689f..30878be44 100644 --- a/libs/ui-toolkit/src/components/viewing-as-user/index.tsx +++ b/libs/ui-toolkit/src/components/viewing-as-user/index.tsx @@ -21,11 +21,16 @@ export const ViewingAsBanner = ({ disconnect, }: ViewingAsBannerProps) => { return ( -
+
{t('Viewing as Vega user:')} {pubKey && truncateMiddle(pubKey)}
- +
); }; diff --git a/libs/wallet/src/connect-dialog/view-connector-form.tsx b/libs/wallet/src/connect-dialog/view-connector-form.tsx index a98b21c7c..87496a7b9 100644 --- a/libs/wallet/src/connect-dialog/view-connector-form.tsx +++ b/libs/wallet/src/connect-dialog/view-connector-form.tsx @@ -56,7 +56,7 @@ export function ViewConnectorForm({ {errors.address.message} )} -