From 47694e7b72dcfe9ab1c6294bcd72720d218b68eb Mon Sep 17 00:00:00 2001 From: Joe Tsang <30622993+jtsang586@users.noreply.github.com> Date: Tue, 25 Jul 2023 11:25:37 +0100 Subject: [PATCH] chore(explorer): explorer market e2e test (#4355) --- apps/explorer-e2e/.env | 7 +- .../explorer-e2e/src/integration/market.cy.js | 131 ++++++++++++++++-- .../src/support/common.functions.js | 41 +++++- .../src/app/components/header/header.tsx | 5 +- 4 files changed, 171 insertions(+), 13 deletions(-) diff --git a/apps/explorer-e2e/.env b/apps/explorer-e2e/.env index 5b5e8f6e5..425c2f657 100644 --- a/apps/explorer-e2e/.env +++ b/apps/explorer-e2e/.env @@ -16,5 +16,10 @@ NX_EXPLORER_NETWORK_PARAMETERS=1 NX_EXPLORER_PARTIES=1 NX_EXPLORER_VALIDATORS=1 -CYPRESS_VEGA_WALLET_API_TOKEN= CYPRESS_VEGA_URL=http://localhost:3008/graphql +CYPRESS_ETH_WALLET_MNEMONIC=ozone access unlock valid olympic save include omit supply green clown session +CYPRESS_ETHEREUM_PROVIDER_URL=http://localhost:8545 +CYPRESS_FAUCET_URL=http://localhost:1790/api/v1/mint +CYPRESS_VEGA_PUBLIC_KEY=02eceaba4df2bef76ea10caf728d8a099a2aa846cced25737cccaa9812342f65 +CYPRESS_VEGA_WALLET_URL=http://localhost:1789 +CYPRESS_VEGA_WALLET_API_TOKEN= diff --git a/apps/explorer-e2e/src/integration/market.cy.js b/apps/explorer-e2e/src/integration/market.cy.js index f6c072e9e..f72b49df4 100644 --- a/apps/explorer-e2e/src/integration/market.cy.js +++ b/apps/explorer-e2e/src/integration/market.cy.js @@ -1,19 +1,130 @@ -//Tests set to skip until market bug for capsule checkpoint is fixed -context.skip('Market page', { tags: '@regression' }, function () { +context('Market page', { tags: '@regression' }, function () { describe('Verify elements on page', function () { - const marketHeaders = '[data-testid="markets-header"]'; - const marketNavigation = 'a[href="/markets"]'; + const marketHeaders = 'markets-heading'; + const createdMarketId = + '2eab0e66545a789047561bc5a2e5cbc3b19eb708da41104e3cac2474ee36c4d4'; - it('Markets page is displayed', function () { + before('Create market', function () { cy.visit('/'); - cy.get(marketNavigation).click(); - cy.common_validate_blocks_data_displayed(marketHeaders); + cy.createMarket(); }); - it('Markets page displayed on mobile', function () { + beforeEach('Get market id', function () { + cy.navigate_to('markets'); + cy.get('[col-id="id"]').eq(1).invoke('text').as('createdMarketId'); + }); + + it('Market displayed on market page', function () { + cy.navigate_to('markets'); + cy.getByTestId(marketHeaders).should('be.visible'); + cy.get(`[row-id="${this.createdMarketId}"]`) + .should('be.visible') + .within(() => { + cy.get_element_by_col_id('code').should('have.text', 'TEST.24h'); + cy.get_element_by_col_id('name').should('have.text', 'Test market 1'); + cy.get_element_by_col_id('state').should('have.text', 'Pending'); + cy.get_element_by_col_id('asset').should('have.text', 'fUSDC'); + cy.get_element_by_col_id('id').should( + 'have.text', + this.createdMarketId + ); + cy.get_element_by_col_id('actions') + .find('a') + .should('have.attr', 'href', `/markets/${this.createdMarketId}`); + }); + }); + + it('Able to go to market details page', function () { + cy.navigate_to('markets'); + cy.get_element_by_col_id('actions').eq(1).click(); + cy.getByTestId(marketHeaders).should('have.text', 'Test market 1'); + cy.validate_element_from_table('Name', 'Test market 1'); + cy.validate_element_from_table('Market ID', this.createdMarketId); + cy.validate_element_from_table('Trading Mode', 'Opening auction'); + cy.validate_element_from_table('Market Decimal Places', '5'); + cy.validate_element_from_table('Position Decimal Places', '5'); + cy.validate_element_from_table('Settlement Asset Decimal Places', '5'); + // Instrument + cy.validate_element_from_table('Market Name', 'Test market 1'); + cy.validate_element_from_table('Code', 'TEST.24h'); + cy.validate_element_from_table('Product Type', 'Future'); + cy.validate_element_from_table('Quote Name', 'fUSDC'); + // Settlement Asset + cy.validate_element_from_table('Quote Name', 'fUSDC'); + cy.validate_element_from_table('Symbol', 'fUSDC'); + cy.validate_element_from_table('Decimals', '5'); + cy.validate_element_from_table('Quantum', '0.00'); + cy.validate_element_from_table('Status', 'Enabled'); + cy.validate_element_from_table('Max faucet amount', '10,000,000.00'); + cy.validate_element_from_table( + 'Infrastructure fee account balance', + '0.00' + ); + cy.validate_element_from_table( + 'Global reward pool account balance', + '0.00' + ); + // Metadata + cy.validate_element_from_table('Sector', 'tech'); + cy.validate_element_from_table('Source', 'docs.vega.xyz'); + // Risk model + cy.validate_element_from_table('Tau', '0.0001140771161'); + cy.validate_element_from_table('Risk Aversion Parameter', '0.01'); + // Risk parameters + // cy.validate_element_from_table('R', '0.016') + cy.validate_element_from_table('Sigma', '0.5'); + // Risk factors + cy.validate_element_from_table('Short', '0.0143218738374871'); + cy.validate_element_from_table('Long', '0.0141450471498822'); + // Price monitoring settings 1 + cy.validate_element_from_table('Horizon Secs', '43,200'); + cy.validate_element_from_table('Probability', '1'); + cy.validate_element_from_table('Auction Extension Secs', '600'); + // Liquidity Monitoring + cy.validate_element_from_table('Triggering Ratio', '0.7'); + cy.validate_element_from_table('Time Window', '3,600'); + cy.validate_element_from_table('Scaling Factor', '10'); + // Liquidity + cy.validate_element_from_table('Target Stake', '0.00 fUSDC'); + cy.validate_element_from_table('Supplied Stake', '0.00 fUSDC'); + cy.validate_element_from_table('Market Value Proxy', '0.00 fUSDC'); + // Liquidity price range + cy.validate_element_from_table( + 'Liquidity Price Range', + '1,000.00% of mid price' + ); + cy.validate_element_from_table('Lowest Price', '0.00 fUSDC'); + cy.validate_element_from_table('Highest Price', '0.00 fUSDC'); + + cy.getByTestId('oracle-spec-links') + .should('have.attr', 'href') + .and( + 'contain', + '/oracles/bf242aa5c9f64fcbb77808aa8582e73711519f4b35264eb797a80f1803590a24' + ); + + // Able to view Json + cy.contains('View JSON').click(); + cy.get('.language-json').should('exist'); + }); + + // Skipping due to resize observer loop limit error + it.skip('Markets page displayed on mobile', function () { cy.common_switch_to_mobile_and_click_toggle(); - cy.get(marketNavigation).click(); - cy.common_validate_blocks_data_displayed(marketHeaders); + cy.navigate_to('markets', true); + cy.getByTestId(marketHeaders).should('be.visible'); + cy.get(`[row-id="${createdMarketId}"]`) + .should('be.visible') + .within(() => { + cy.get_element_by_col_id('code').should('have.text', 'TEST.24h'); + cy.get_element_by_col_id('name').should('have.text', 'Test market 1'); + cy.get_element_by_col_id('state').should('have.text', 'Pending'); + cy.get_element_by_col_id('asset').should('have.text', 'fUSDC'); + cy.get_element_by_col_id('id').should('have.text', createdMarketId); + cy.get_element_by_col_id('actions') + .find('a') + .should('have.attr', 'href', `/markets/${createdMarketId}`); + }); }); }); }); diff --git a/apps/explorer-e2e/src/support/common.functions.js b/apps/explorer-e2e/src/support/common.functions.js index 8986f8a0e..6ef2860f1 100644 --- a/apps/explorer-e2e/src/support/common.functions.js +++ b/apps/explorer-e2e/src/support/common.functions.js @@ -28,7 +28,7 @@ Cypress.Commands.add('switchToMobile', () => { Cypress.Commands.add('common_switch_to_mobile_and_click_toggle', function () { cy.viewport('iphone-x'); cy.visit('/'); - cy.get('[data-testid="open-menu"]').click(); + cy.get('[data-testid="button-menu-drawer"]').click(); }); Cypress.Commands.add('monitor_clipboard', () => { @@ -88,3 +88,42 @@ Cypress.Commands.add('convert_number_to_max_four_decimal', (number) => { maximumFractionDigits: 4, }); }); + +Cypress.Commands.add('navigate_to', (page, mobileView = false) => { + const navigation = { + transactions: '/txs', + blocks: '/blocks', + oracles: '/oracles', + validators: '/validators', + parties: '/parties', + assets: '/assets', + markets: '/markets', + governanceProposals: '/governance', + networkParameters: '/network-parameters', + genesisParameters: '/genesis', + }; + + const topLevelRoutes = ['transactions', 'blocks', 'oracles', 'validators']; + + cy.getByTestId('navigation').within(() => { + if (!topLevelRoutes.includes(page) && mobileView === false) { + cy.getByTestId('other').first().click(); + } + cy.get(`[href="${navigation[page]}"]`).first().click(); + }); + cy.url().should('include', navigation[page]); +}); + +Cypress.Commands.add('get_element_by_col_id', (elementName) => { + cy.get(`[col-id="${elementName}"]`); +}); + +Cypress.Commands.add( + 'validate_element_from_table', + (tableRowName, tableRowValue) => { + cy.contains(tableRowName) + .parentsUntil("[data-testid='key-value-table-row']") + .siblings() + .should('have.text', tableRowValue); + } +); diff --git a/apps/explorer/src/app/components/header/header.tsx b/apps/explorer/src/app/components/header/header.tsx index dd30c0443..1a292798c 100644 --- a/apps/explorer/src/app/components/header/header.tsx +++ b/apps/explorer/src/app/components/header/header.tsx @@ -95,7 +95,10 @@ export const Header = () => { {mainItems.map(routeToNavigationItem)} {groupedItems && groupedItems.length > 0 && ( - + {t('Other')}