2022-06-30 07:52:25 +00:00
|
|
|
import { aliasQuery } from '@vegaprotocol/cypress';
|
|
|
|
import { generateFill, generateFills } from '../support/mocks/generate-fills';
|
|
|
|
import { Side } from '@vegaprotocol/types';
|
2022-08-31 06:03:56 +00:00
|
|
|
import { MarketState } from '@vegaprotocol/types';
|
2022-06-30 07:52:25 +00:00
|
|
|
import { connectVegaWallet } from '../support/vega-wallet';
|
2022-08-31 06:03:56 +00:00
|
|
|
import { mockTradingPage } from '../support/trading';
|
2022-07-14 16:12:28 +00:00
|
|
|
import { generateNetworkParameters } from '../support/mocks/generate-network-parameters';
|
2022-06-30 07:52:25 +00:00
|
|
|
|
2022-08-31 06:03:56 +00:00
|
|
|
const fills = [
|
|
|
|
generateFill({
|
|
|
|
buyer: {
|
|
|
|
id: Cypress.env('VEGA_PUBLIC_KEY'),
|
|
|
|
},
|
|
|
|
}),
|
|
|
|
generateFill({
|
|
|
|
id: '1',
|
|
|
|
seller: {
|
|
|
|
id: Cypress.env('VEGA_PUBLIC_KEY'),
|
|
|
|
},
|
|
|
|
aggressor: Side.SIDE_SELL,
|
|
|
|
buyerFee: {
|
|
|
|
infrastructureFee: '5000',
|
|
|
|
},
|
|
|
|
market: {
|
2022-09-07 18:37:39 +00:00
|
|
|
tradableInstrument: {
|
|
|
|
instrument: {
|
|
|
|
name: 'Apples Daily v3',
|
|
|
|
},
|
|
|
|
},
|
2022-08-31 06:03:56 +00:00
|
|
|
positionDecimalPlaces: 2,
|
|
|
|
},
|
|
|
|
}),
|
|
|
|
generateFill({
|
|
|
|
id: '2',
|
|
|
|
seller: {
|
|
|
|
id: Cypress.env('VEGA_PUBLIC_KEY'),
|
|
|
|
},
|
|
|
|
aggressor: Side.SIDE_BUY,
|
|
|
|
}),
|
|
|
|
generateFill({
|
|
|
|
id: '3',
|
|
|
|
aggressor: Side.SIDE_SELL,
|
|
|
|
market: {
|
2022-09-07 18:37:39 +00:00
|
|
|
tradableInstrument: {
|
|
|
|
instrument: {
|
|
|
|
name: 'ETHBTC Quarterly (30 Jun 2022)',
|
|
|
|
},
|
|
|
|
},
|
2022-08-31 06:03:56 +00:00
|
|
|
},
|
|
|
|
buyer: {
|
|
|
|
id: Cypress.env('VEGA_PUBLIC_KEY'),
|
|
|
|
},
|
|
|
|
}),
|
|
|
|
];
|
|
|
|
const result = generateFills({
|
|
|
|
party: {
|
|
|
|
tradesConnection: {
|
|
|
|
edges: fills.map((f, i) => {
|
|
|
|
return {
|
|
|
|
__typename: 'TradeEdge',
|
|
|
|
node: f,
|
|
|
|
cursor: i.toString(),
|
|
|
|
};
|
2022-06-30 07:52:25 +00:00
|
|
|
}),
|
2022-08-31 06:03:56 +00:00
|
|
|
},
|
|
|
|
},
|
|
|
|
});
|
|
|
|
|
|
|
|
describe('fills', () => {
|
|
|
|
beforeEach(() => {
|
2022-06-30 07:52:25 +00:00
|
|
|
cy.mockGQL((req) => {
|
|
|
|
aliasQuery(req, 'Fills', result);
|
2022-07-14 16:12:28 +00:00
|
|
|
aliasQuery(req, 'NetworkParamsQuery', generateNetworkParameters());
|
2022-06-30 07:52:25 +00:00
|
|
|
});
|
|
|
|
});
|
|
|
|
|
2022-08-31 06:03:56 +00:00
|
|
|
it('renders fills on portfolio page', () => {
|
|
|
|
cy.visit('/portfolio');
|
|
|
|
cy.get('main[data-testid="portfolio"]').should('exist');
|
2022-06-30 07:52:25 +00:00
|
|
|
cy.getByTestId('Fills').click();
|
2022-07-14 16:12:28 +00:00
|
|
|
cy.getByTestId('tab-fills').contains('Connect your Vega wallet');
|
2022-08-31 06:03:56 +00:00
|
|
|
connectVegaWallet();
|
|
|
|
validateFillsDisplayed();
|
|
|
|
});
|
2022-06-30 07:52:25 +00:00
|
|
|
|
2022-08-31 06:03:56 +00:00
|
|
|
it('renders fills on trading tab', () => {
|
|
|
|
cy.mockGQL((req) => {
|
|
|
|
mockTradingPage(req, MarketState.STATE_ACTIVE);
|
|
|
|
});
|
|
|
|
cy.visit('/markets/market-0');
|
|
|
|
cy.getByTestId('Fills').click();
|
|
|
|
cy.getByTestId('tab-fills').contains('Please connect Vega wallet');
|
2022-06-30 07:52:25 +00:00
|
|
|
connectVegaWallet();
|
2022-08-31 06:03:56 +00:00
|
|
|
validateFillsDisplayed();
|
|
|
|
});
|
2022-06-30 07:52:25 +00:00
|
|
|
|
2022-08-31 06:03:56 +00:00
|
|
|
function validateFillsDisplayed() {
|
2022-06-30 07:52:25 +00:00
|
|
|
cy.getByTestId('tab-fills').should('be.visible');
|
|
|
|
|
|
|
|
cy.getByTestId('tab-fills')
|
2022-09-07 18:37:39 +00:00
|
|
|
.get(
|
|
|
|
'[role="gridcell"][col-id="market.tradableInstrument.instrument.name"]'
|
|
|
|
)
|
2022-06-30 07:52:25 +00:00
|
|
|
.each(($marketSymbol) => {
|
|
|
|
cy.wrap($marketSymbol).invoke('text').should('not.be.empty');
|
|
|
|
});
|
|
|
|
cy.getByTestId('tab-fills')
|
|
|
|
.get('[role="gridcell"][col-id="size"]')
|
|
|
|
.each(($amount) => {
|
|
|
|
cy.wrap($amount).invoke('text').should('not.be.empty');
|
|
|
|
});
|
|
|
|
cy.getByTestId('tab-positions')
|
|
|
|
.get('[role="gridcell"][col-id="price"]')
|
|
|
|
.each(($prices) => {
|
|
|
|
cy.wrap($prices).invoke('text').should('not.be.empty');
|
|
|
|
});
|
|
|
|
cy.getByTestId('tab-positions')
|
|
|
|
.get('[role="gridcell"][col-id="price_1"]')
|
|
|
|
.each(($total) => {
|
|
|
|
cy.wrap($total).invoke('text').should('not.be.empty');
|
|
|
|
});
|
|
|
|
cy.getByTestId('tab-positions')
|
|
|
|
.get('[role="gridcell"][col-id="aggressor"]')
|
|
|
|
.each(($role) => {
|
|
|
|
cy.wrap($role)
|
|
|
|
.invoke('text')
|
|
|
|
.then((text) => {
|
|
|
|
const roles = ['Maker', 'Taker'];
|
|
|
|
expect(roles.indexOf(text.trim())).to.be.greaterThan(-1);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
cy.getByTestId('tab-positions')
|
|
|
|
.get(
|
|
|
|
'[role="gridcell"][col-id="market.tradableInstrument.instrument.product"]'
|
|
|
|
)
|
|
|
|
.each(($fees) => {
|
|
|
|
cy.wrap($fees).invoke('text').should('not.be.empty');
|
|
|
|
});
|
|
|
|
const dateTimeRegex =
|
|
|
|
/(\d{1,2})\/(\d{1,2})\/(\d{4}), (\d{1,2}):(\d{1,2}):(\d{1,2})/gm;
|
|
|
|
cy.get('[col-id="createdAt"]').each(($tradeDateTime, index) => {
|
|
|
|
if (index != 0) {
|
|
|
|
//ignore header
|
|
|
|
cy.wrap($tradeDateTime).invoke('text').should('match', dateTimeRegex);
|
|
|
|
}
|
|
|
|
});
|
2022-08-31 06:03:56 +00:00
|
|
|
}
|
2022-06-30 07:52:25 +00:00
|
|
|
});
|