Test/294 orders list (#301)

* Order mocks generated

* Tests passing with orders
This commit is contained in:
Joe Tsang 2022-04-27 18:22:37 +01:00 committed by GitHub
parent 29cd7dd2e4
commit 448e0ec78f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 143 additions and 4 deletions

View File

@ -28,3 +28,9 @@ Feature: Markets page
And I connect to Vega Wallet
When I click on positions tab
Then positions are displayed
Scenario: Placed orders displayed
Given I am on the trading page for an active market
And I connect to Vega Wallet
When I click on orders tab
Then placed orders are displayed

View File

@ -0,0 +1,79 @@
import merge from 'lodash/merge';
import type { PartialDeep } from 'type-fest';
import type { Orders, Orders_party_orders } from '@vegaprotocol/order-list';
import {
OrderStatus,
OrderTimeInForce,
OrderType,
Side,
} from '@vegaprotocol/types';
export const generateOrders = (override?: PartialDeep<Orders>): Orders => {
const orders: Orders_party_orders[] = [
{
__typename: 'Order',
id: '066468C06549101DAF7BC51099E1412A0067DC08C246B7D8013C9D0CBF1E8EE7',
market: {
__typename: 'Market',
id: 'c9f5acd348796011c075077e4d58d9b7f1689b7c1c8e030a5e886b83aa96923d',
name: 'AAVEDAI Monthly (30 Jun 2022)',
decimalPlaces: 5,
tradableInstrument: {
__typename: 'TradableInstrument',
instrument: {
__typename: 'Instrument',
code: 'AAVEDAI.MF21',
},
},
},
size: '10',
type: OrderType.Limit,
status: OrderStatus.Filled,
side: Side.Buy,
remaining: '0',
price: '20000000',
timeInForce: OrderTimeInForce.GTC,
createdAt: new Date().toISOString(),
updatedAt: null,
expiresAt: null,
rejectionReason: null,
},
{
__typename: 'Order',
id: '48DB6767E4E4E0F649C5A13ABFADE39F8451C27DA828DAF14B7A1E8E5EBDAD99',
market: {
__typename: 'Market',
id: '5a4b0b9e9c0629f0315ec56fcb7bd444b0c6e4da5ec7677719d502626658a376',
name: 'Tesla Quarterly (30 Jun 2022)',
decimalPlaces: 5,
tradableInstrument: {
__typename: 'TradableInstrument',
instrument: {
__typename: 'Instrument',
code: 'TSLA.QM21',
},
},
},
size: '1',
type: OrderType.Limit,
status: OrderStatus.Filled,
side: Side.Buy,
remaining: '0',
price: '0',
timeInForce: OrderTimeInForce.GTC,
createdAt: new Date().toISOString(),
updatedAt: null,
expiresAt: null,
rejectionReason: null,
},
];
const defaultResult = {
party: {
id: Cypress.env('vegaPublicKey'),
orders,
__typename: 'Party',
},
};
return merge(defaultResult, override);
};

View File

@ -1,18 +1,20 @@
import { Given, Then } from 'cypress-cucumber-preprocessor/steps';
import { Given, When, Then } from 'cypress-cucumber-preprocessor/steps';
import { hasOperationName } from '..';
import { MarketState } from '@vegaprotocol/types';
import TradesList from '../trading-windows/trades-list';
import TradingPage from '../pages/trading-page';
import { generateChart } from '../mocks/generate-chart';
import { generateCandles } from '../mocks/generate-candles';
import { generateTrades } from '../mocks/generate-trades';
import { generateDealTicketQuery } from '../mocks/generate-deal-ticket-query';
import { generateMarket } from '../mocks/generate-market';
import { generateOrders } from '../mocks/generate-orders';
import { generatePositions } from '../mocks/generate-positions';
import TradesList from '../trading-windows/trades-list';
import TradingPage from '../pages/trading-page';
import OrderList from '../trading-windows/orders-list';
const tradesList = new TradesList();
const tradingPage = new TradingPage();
/* eslint-enable @nrwl/nx/enforce-module-boundaries */
const ordersList = new OrderList();
const mockMarket = (state: MarketState) => {
cy.mockGQL('Market', (req) => {
@ -28,6 +30,12 @@ const mockMarket = (state: MarketState) => {
});
}
if (hasOperationName(req, 'Orders')) {
req.reply({
body: { data: generateOrders() },
});
}
if (hasOperationName(req, 'Positions')) {
req.reply({
body: { data: generatePositions() },
@ -76,6 +84,10 @@ Given('I am on the trading page for a suspended market', () => {
cy.contains('Market: SUSPENDED MARKET');
});
When('I click on orders tab', () => {
tradingPage.clickOnOrdersTab();
});
Then('trading page for {string} market is displayed', (marketType) => {
switch (marketType) {
case 'active':
@ -92,3 +104,7 @@ Then('trading page for {string} market is displayed', (marketType) => {
tradingPage.clickOnTradesTab();
tradesList.verifyTradesListDisplayed();
});
Then('placed orders are displayed', () => {
ordersList.verifyOrdersDisplayed();
});

View File

@ -0,0 +1,37 @@
export default class OrdersList {
orderSymbol = 'market.tradableInstrument.instrument.code';
orderSize = 'size';
orderType = 'type';
orderStatus = 'status';
orderRemaining = 'remaining';
orderPrice = 'price';
orderTimeInForce = 'timeInForce';
orderCreatedAt = 'createdAt';
verifyOrdersDisplayed() {
cy.get(`[col-id='${this.orderSymbol}']`).each(($symbol) => {
cy.wrap($symbol).invoke('text').should('not.be.empty');
});
cy.get(`[col-id='${this.orderSize}']`).each(($size) => {
cy.wrap($size).invoke('text').should('not.be.empty');
});
cy.get(`[col-id='${this.orderType}']`).each(($type) => {
cy.wrap($type).invoke('text').should('not.be.empty');
});
cy.get(`[col-id='${this.orderStatus}']`).each(($status) => {
cy.wrap($status).invoke('text').should('not.be.empty');
});
cy.get(`[col-id='${this.orderRemaining}']`).each(($remaining) => {
cy.wrap($remaining).invoke('text').should('not.be.empty');
});
cy.get(`[col-id='${this.orderPrice}']`).each(($price) => {
cy.wrap($price).invoke('text').should('not.be.empty');
});
cy.get(`[col-id='${this.orderTimeInForce}']`).each(($timeInForce) => {
cy.wrap($timeInForce).invoke('text').should('not.be.empty');
});
cy.get(`[col-id='${this.orderCreatedAt}']`).each(($dateTime) => {
cy.wrap($dateTime).invoke('text').should('not.be.empty');
});
}
}

View File

@ -1,2 +1,3 @@
export * from './lib/order-list';
export * from './lib/order-list-container';
export * from './lib/__generated__/Orders';