From 849cbb43c480b7d034528e698c9887b862287675 Mon Sep 17 00:00:00 2001 From: daro-maj <119658839+daro-maj@users.noreply.github.com> Date: Mon, 5 Jun 2023 09:25:31 +0200 Subject: [PATCH] test(trading): 6001-MARK-find_markets e2e tests (#4025) --- .../src/integration/market-all.cy.ts | 174 +++++++++++++++ .../src/integration/markets-proposed.cy.ts | 199 ++++++++++++++++++ .../trading-e2e/src/integration/markets.cy.ts | 144 +------------ 3 files changed, 375 insertions(+), 142 deletions(-) create mode 100644 apps/trading-e2e/src/integration/market-all.cy.ts create mode 100644 apps/trading-e2e/src/integration/markets-proposed.cy.ts diff --git a/apps/trading-e2e/src/integration/market-all.cy.ts b/apps/trading-e2e/src/integration/market-all.cy.ts new file mode 100644 index 000000000..f576a6ee5 --- /dev/null +++ b/apps/trading-e2e/src/integration/market-all.cy.ts @@ -0,0 +1,174 @@ +import * as Schema from '@vegaprotocol/types'; + +const rowSelector = + '[data-testid="tab-all-markets"] .ag-center-cols-container .ag-row'; + +describe('markets all table', { tags: '@smoke' }, () => { + beforeEach(() => { + cy.clearLocalStorage().then(() => { + cy.mockTradingPage( + Schema.MarketState.STATE_ACTIVE, + Schema.MarketTradingMode.TRADING_MODE_MONITORING_AUCTION, + Schema.AuctionTrigger.AUCTION_TRIGGER_LIQUIDITY_TARGET_NOT_MET + ); + cy.mockSubscription(); + cy.visit('/#/markets/all'); + }); + }); + + it('can see table headers', () => { + cy.wait('@Markets'); + cy.wait('@MarketsData'); + const headers = [ + 'Market', + 'Description', + 'Trading mode', + 'Status', + 'Best bid', + 'Best offer', + 'Mark price', + 'Settlement asset', + '', + ]; + cy.getByTestId('tab-all-markets').within(($headers) => { + cy.wrap($headers) + .get('.ag-header-cell-text') + .each(($header, i) => { + cy.wrap($header).should('have.text', headers[i]); + }); + }); + }); + + it('markets tab should be rendered properly', () => { + cy.get('[data-testid="All markets"]').should( + 'have.attr', + 'data-state', + 'active' + ); + cy.get('[data-testid="Proposed markets"]').should( + 'have.attr', + 'data-state', + 'inactive' + ); + cy.get('[data-testid="Closed markets"]').should( + 'have.attr', + 'data-state', + 'inactive' + ); + }); + it('renders markets correctly', () => { + // 6001-MARK-035 + cy.get(rowSelector) + .first() + .find('[col-id="tradableInstrument.instrument.code"]') + .should('have.text', 'SOLUSD'); + + // 6001-MARK-036 + cy.get(rowSelector) + .first() + .find('[col-id="tradableInstrument.instrument.name"]') + .should('have.text', 'SUSPENDED MARKET'); + + // 6001-MARK-037 + cy.get(rowSelector) + .first() + .find('[col-id="tradingMode"]') + .should('have.text', 'Continuous'); + + // 6001-MARK-038 + cy.get(rowSelector) + .first() + .find('[col-id="state"]') + .should('have.text', 'Active'); + + // 6001-MARK-039 + cy.get(rowSelector) + .first() + .find('[col-id="data.bestBidPrice"]') + .should('have.text', '0.00'); + + // 6001-MARK-040 + cy.get(rowSelector) + .first() + .find('[col-id="data.bestOfferPrice"]') + .should('have.text', '0.00'); + + // 6001-MARK-041 + cy.get(rowSelector) + .first() + .find('[col-id="data.markPrice"]') + .should('have.text', '84.41'); + + // 6001-MARK-042 + cy.get(rowSelector) + .first() + .find( + '[col-id="tradableInstrument.instrument.product.settlementAsset.symbol"]' + ) + .should('have.text', 'XYZalpha'); + + // 6001-MARK-043 + cy.get(rowSelector) + .first() + .find( + '[col-id="tradableInstrument.instrument.product.settlementAsset.symbol"] button' + ) + .click(); + cy.getByTestId('dialog-title').should('have.text', 'Asset details - tEURO'); + cy.getByTestId('close-asset-details-dialog').click(); + }); + + it('can open row actions', () => { + // 6001-MARK-044 + cy.get('.ag-pinned-right-cols-container') + .find('[col-id="market-actions"]') + .first() + .find('button') + .click(); + + // 6001-MARK-045 + const dropdownContent = '[data-testid="market-actions-content"]'; + const dropdownContentItem = '[role="menuitem"]'; + cy.get(dropdownContent) + .find(dropdownContentItem) + .eq(0) + // Cannot click the copy button as it falls back to window.prompt, blocking the test. + .should('have.text', 'Copy Market ID'); + + // 6001-MARK-046 + cy.get(dropdownContent) + .find(dropdownContentItem) + .eq(1) + .find('a') + .then(($el) => { + const href = $el.attr('href'); + expect(/\/markets\/market-1/.test(href || '')).to.equal(true); + }) + .should('have.text', 'View on Explorer'); + + // 6001-MARK-047 + cy.get(dropdownContent) + .find(dropdownContentItem) + .eq(2) + .should('have.text', 'View asset'); + cy.getByTestId('market-actions-content').click(); + }); + + it('able to open and sort full market list - market page', () => { + const ExpectedSortedMarkets = [ + 'AAPL.MF21', + 'BTCUSD.MF21', + 'ETHBTC.QM21', + 'SOLUSD', + ]; + cy.get('[data-testid="All markets"]').click({ force: true }); + cy.url().should('eq', Cypress.config('baseUrl') + '/#/markets/all'); + cy.contains('AAPL.MF21').should('be.visible'); + cy.get('.ag-header-cell-label').contains('Market').click(); // sort by market name + for (let i = 0; i < ExpectedSortedMarkets.length; i++) { + cy.get(`[row-index=${i}]`) + .find('[col-id="tradableInstrument.instrument.code"]') + .should('have.text', ExpectedSortedMarkets[i]); + } + }); +}); diff --git a/apps/trading-e2e/src/integration/markets-proposed.cy.ts b/apps/trading-e2e/src/integration/markets-proposed.cy.ts new file mode 100644 index 000000000..de9c5a13d --- /dev/null +++ b/apps/trading-e2e/src/integration/markets-proposed.cy.ts @@ -0,0 +1,199 @@ +import { checkSorting } from '@vegaprotocol/cypress'; + +const rowSelector = + '[data-testid="tab-proposed-markets"] .ag-center-cols-container .ag-row'; + +describe('markets proposed table', { tags: '@smoke' }, () => { + beforeEach(() => { + cy.clearLocalStorage().then(() => { + cy.mockTradingPage(); + cy.mockSubscription(); + cy.visit('/#/markets/all'); + cy.get('[data-testid="Proposed markets"]').click(); + }); + }); + + it('can see table headers', () => { + const headers = [ + 'Market', + 'Description', + 'Settlement asset', + 'State', + 'Voting', + 'Closing date', + 'Enactment date', + '', + ]; + cy.getByTestId('tab-proposed-markets').within(($headers) => { + cy.wrap($headers) + .get('.ag-header-cell-text') + .each(($header, i) => { + cy.wrap($header).should('have.text', headers[i]); + }); + }); + }); + + it('renders markets correctly', () => { + // 6001-MARK-049 + cy.get(rowSelector) + .first() + .find('[col-id="market"]') + .should('have.text', 'ETHUSD'); + + // 6001-MARK-050 + cy.get(rowSelector) + .first() + .find('[col-id="description"]') + .should('have.text', 'ETHUSD'); + + // 6001-MARK-051 + cy.get(rowSelector) + .first() + .find('[col-id="asset"]') + .should('have.text', 'tDAI TEST'); + + // 6001-MARK-052 + // 6001-MARK-053 + cy.get(rowSelector) + .first() + .find('[col-id="state"]') + .should('have.text', 'Open'); + + // 6001-MARK-054 + cy.get(rowSelector) + .first() + .find('[col-id="voting"]') + .should('have.text', ''); + + // 6001-MARK-056 + cy.get(rowSelector) + .first() + .find('[col-id="closing-date"]') + .should('not.be.empty'); + + // 6001-MARK-057 + cy.get(rowSelector) + .first() + .find('[col-id="enactment-date"]') + .should('not.be.empty'); + }); + + it('can open row actions', () => { + // 6001-MARK-058 + cy.get('.ag-pinned-right-cols-container') + .find('[col-id="proposal-actions"]') + .first() + .find('button') + .click(); + + const dropdownContent = '[data-testid="market-actions-content"]'; + const dropdownContentItem = '[role="menuitem"]'; + + // 6001-MARK-059 + cy.get(dropdownContent) + .find(dropdownContentItem) + .eq(0) + .find('a') + .should('have.text', 'View proposal') + .and( + 'have.attr', + 'href', + `${Cypress.env( + 'VEGA_TOKEN_URL' + )}/proposals/e9ec6d5c46a7e7bcabf9ba7a893fa5a5eeeec08b731f06f7a6eb7bf0e605b829` + ); + cy.getByTestId('market-actions-content').click(); + }); + + // 6001-MARK-060 + it('can see proposed market link', () => { + cy.getByTestId('tab-proposed-markets') + .find('[data-testid="external-link"]') + .should('have.length', 11) + .last() + .should('have.text', 'Propose a new market') + .and( + 'have.attr', + 'href', + `${Cypress.env('VEGA_TOKEN_URL')}/proposals/propose/new-market` + ); + }); + it('proposed markets tab should be sorted properly', () => { + cy.get('[data-testid="Proposed markets"]').click({ force: true }); + const marketColDefault = [ + 'ETHUSD', + 'LINKUSD', + 'ETHUSD', + 'ETHDAI.MF21', + 'AAPL.MF21', + 'BTCUSD.MF21', + 'TSLA.QM21', + 'AAVEDAI.MF21', + 'ETHBTC.QM21', + 'UNIDAI.MF21', + ]; + const marketColAsc = [ + 'AAPL.MF21', + 'AAVEDAI.MF21', + 'BTCUSD.MF21', + 'ETHBTC.QM21', + 'ETHDAI.MF21', + 'ETHUSD', + 'ETHUSD', + 'LINKUSD', + 'TSLA.QM21', + 'UNIDAI.MF21', + ]; + const marketColDesc = [ + 'UNIDAI.MF21', + 'TSLA.QM21', + 'LINKUSD', + 'ETHUSD', + 'ETHUSD', + 'ETHDAI.MF21', + 'ETHBTC.QM21', + 'BTCUSD.MF21', + 'AAVEDAI.MF21', + 'AAPL.MF21', + ]; + checkSorting('market', marketColDefault, marketColAsc, marketColDesc); + + const stateColDefault = [ + 'Open', + 'Passed', + 'Waiting for Node Vote', + 'Open', + 'Passed', + 'Open', + 'Passed', + 'Open', + 'Waiting for Node Vote', + 'Open', + ]; + const stateColAsc = [ + 'Open', + 'Open', + 'Open', + 'Open', + 'Open', + 'Passed', + 'Passed', + 'Passed', + 'Waiting for Node Vote', + 'Waiting for Node Vote', + ]; + const stateColDesc = [ + 'Waiting for Node Vote', + 'Waiting for Node Vote', + 'Passed', + 'Passed', + 'Passed', + 'Open', + 'Open', + 'Open', + 'Open', + 'Open', + ]; + checkSorting('state', stateColDefault, stateColAsc, stateColDesc); + }); +}); diff --git a/apps/trading-e2e/src/integration/markets.cy.ts b/apps/trading-e2e/src/integration/markets.cy.ts index c44db07dc..1a05f5ea3 100644 --- a/apps/trading-e2e/src/integration/markets.cy.ts +++ b/apps/trading-e2e/src/integration/markets.cy.ts @@ -1,5 +1,5 @@ import * as Schema from '@vegaprotocol/types'; -import { aliasGQLQuery, checkSorting } from '@vegaprotocol/cypress'; +import { aliasGQLQuery } from '@vegaprotocol/cypress'; import { marketsQuery } from '@vegaprotocol/mock'; import { getDateTimeFormat } from '@vegaprotocol/utils'; @@ -16,147 +16,7 @@ describe('markets table', { tags: '@smoke' }, () => { }); }); - it('renders markets correctly', () => { - cy.wait('@Markets'); - cy.wait('@MarketsData'); - cy.get('[data-testid^="market-link-"]').should('not.be.empty'); - cy.getByTestId('price').invoke('text').should('not.be.empty'); - cy.getByTestId('settlement-asset').should('not.be.empty'); - cy.getByTestId('price-change-percentage').should('not.be.empty'); - cy.getByTestId('price-change').should('not.be.empty'); - }); - - it('able to open and sort full market list - market page', () => { - const ExpectedSortedMarkets = [ - 'AAPL.MF21', - 'BTCUSD.MF21', - 'ETHBTC.QM21', - 'SOLUSD', - ]; - cy.url().should('eq', Cypress.config('baseUrl') + '/#/markets/all'); - cy.contains('AAPL.MF21').should('be.visible'); - cy.get('.ag-header-cell-label').contains('Market').click(); // sort by market name - for (let i = 0; i < ExpectedSortedMarkets.length; i++) { - cy.get(`[row-index=${i}]`) - .find('[col-id="tradableInstrument.instrument.code"]') - .should('have.text', ExpectedSortedMarkets[i]); - } - }); - - it('proposed markets tab should be rendered properly', () => { - cy.get('[data-testid="All markets"]').should( - 'have.attr', - 'data-state', - 'active' - ); - cy.get('[data-testid="Proposed markets"]').should( - 'have.attr', - 'data-state', - 'inactive' - ); - cy.get('[data-testid="Proposed markets"]').click(); - cy.get('[data-testid="Proposed markets"]').should( - 'have.attr', - 'data-state', - 'active' - ); - cy.getByTestId('tab-proposed-markets').should('be.visible'); - cy.get('.ag-body-viewport .ag-center-cols-container .ag-row').should( - 'have.length', - 10 - ); - cy.getByTestId('tab-proposed-markets') - .find('[data-testid="external-link"]') - .should('have.length', 11) - .last() - .should('have.text', 'Propose a new market') - .and( - 'have.attr', - 'href', - `${Cypress.env('VEGA_TOKEN_URL')}/proposals/propose/new-market` - ); - }); - - it('proposed markets tab should be sorted properly', () => { - cy.get('[data-testid="Proposed markets"]').click(); - const marketColDefault = [ - 'ETHUSD', - 'LINKUSD', - 'ETHUSD', - 'ETHDAI.MF21', - 'AAPL.MF21', - 'BTCUSD.MF21', - 'TSLA.QM21', - 'AAVEDAI.MF21', - 'ETHBTC.QM21', - 'UNIDAI.MF21', - ]; - const marketColAsc = [ - 'AAPL.MF21', - 'AAVEDAI.MF21', - 'BTCUSD.MF21', - 'ETHBTC.QM21', - 'ETHDAI.MF21', - 'ETHUSD', - 'ETHUSD', - 'LINKUSD', - 'TSLA.QM21', - 'UNIDAI.MF21', - ]; - const marketColDesc = [ - 'UNIDAI.MF21', - 'TSLA.QM21', - 'LINKUSD', - 'ETHUSD', - 'ETHUSD', - 'ETHDAI.MF21', - 'ETHBTC.QM21', - 'BTCUSD.MF21', - 'AAVEDAI.MF21', - 'AAPL.MF21', - ]; - checkSorting('market', marketColDefault, marketColAsc, marketColDesc); - - const stateColDefault = [ - 'Open', - 'Passed', - 'Waiting for Node Vote', - 'Open', - 'Passed', - 'Open', - 'Passed', - 'Open', - 'Waiting for Node Vote', - 'Open', - ]; - const stateColAsc = [ - 'Open', - 'Open', - 'Open', - 'Open', - 'Open', - 'Passed', - 'Passed', - 'Passed', - 'Waiting for Node Vote', - 'Waiting for Node Vote', - ]; - const stateColDesc = [ - 'Waiting for Node Vote', - 'Waiting for Node Vote', - 'Passed', - 'Passed', - 'Passed', - 'Open', - 'Open', - 'Open', - 'Open', - 'Open', - ]; - checkSorting('state', stateColDefault, stateColAsc, stateColDesc); - }); - - it.skip('opening auction subsets should be properly displayed', () => { + it('opening auction subsets should be properly displayed', () => { cy.mockTradingPage( Schema.MarketState.STATE_ACTIVE, Schema.MarketTradingMode.TRADING_MODE_OPENING_AUCTION