Merge pull request #5361 from vegaprotocol/chore/backmerge-main

chore(trading): back merge main
This commit is contained in:
Matthew Russell 2023-11-27 22:33:19 -08:00 committed by GitHub
commit d615587564
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 158 additions and 159 deletions

3
.gitignore vendored
View File

@ -59,5 +59,4 @@ apps/trading/e2e/logs/
apps/trading/e2e/.pytest_cache/ apps/trading/e2e/.pytest_cache/
apps/trading/e2e/traces/ apps/trading/e2e/traces/
.nx/cache .nx/

View File

@ -29,7 +29,7 @@ def test_transfer_submit(continuous_market, vega: VegaService, page: Page):
page.select_option('[data-testid=transfer-form] [name="toVegaKey"]', index=2) page.select_option('[data-testid=transfer-form] [name="toVegaKey"]', index=2)
page.select_option('[data-testid=transfer-form] [name="fromAccount"]', index=1) page.select_option('[data-testid=transfer-form] [name="fromAccount"]', index=1)
expected_asset_text = re.compile(r"tDAI tDAI999,991.49731 tDAI.{6}….{4}") expected_asset_text = re.compile(r"tDAI tDAI999991.49731 tDAI.{6}….{4}")
actual_asset_text = page.get_by_test_id('select-asset').text_content().strip() actual_asset_text = page.get_by_test_id('select-asset').text_content().strip()
assert expected_asset_text.search(actual_asset_text), f"Expected pattern not found in {actual_asset_text}" assert expected_asset_text.search(actual_asset_text), f"Expected pattern not found in {actual_asset_text}"

View File

@ -1,5 +1,5 @@
import { useCallback, useState } from 'react'; import { useCallback, useState } from 'react';
import { getAsset, getProductType, getQuoteName } from '@vegaprotocol/markets'; import { getAsset, getQuoteName } from '@vegaprotocol/markets';
import type { OrderSubmissionBody } from '@vegaprotocol/wallet'; import type { OrderSubmissionBody } from '@vegaprotocol/wallet';
import { useVegaWallet } from '@vegaprotocol/wallet'; import { useVegaWallet } from '@vegaprotocol/wallet';
@ -297,19 +297,9 @@ export const DealTicketMarginDetails = ({
); );
const quoteName = getQuoteName(market); const quoteName = getQuoteName(market);
const productType = getProductType(market);
return ( return (
<div className="flex flex-col w-full gap-2 pt-2"> <div className="flex flex-col w-full gap-2 pt-2">
{/*
TODO: remove this conditional check once the following PRs are deployed
and the estimatePosition query is working for perps
- https://github.com/vegaprotocol/vega/pull/10119
- https://github.com/vegaprotocol/vega/pull/10122
*/}
{productType === 'Future' && (
<>
<Accordion> <Accordion>
<AccordionPanel <AccordionPanel
itemId="margin" itemId="margin"
@ -335,9 +325,7 @@ export const DealTicketMarginDetails = ({
{ assetSymbol } { assetSymbol }
)} )}
> >
<span className="text-muted"> <span className="text-muted">{t('Margin required')}</span>
{t('Margin required')}
</span>
</Tooltip> </Tooltip>
<AccordionChevron size={10} /> <AccordionChevron size={10} />
@ -423,8 +411,6 @@ export const DealTicketMarginDetails = ({
</AccordionPanel> </AccordionPanel>
</Accordion> </Accordion>
{projectedMargin} {projectedMargin}
</>
)}
<KeyValue <KeyValue
label={t('Liquidation')} label={t('Liquidation')}
value={liquidationPriceEstimateRange} value={liquidationPriceEstimateRange}

View File

@ -6,14 +6,17 @@ import { MockedProvider } from '@apollo/client/testing';
import { MAXGOINT64 } from '@vegaprotocol/utils'; import { MAXGOINT64 } from '@vegaprotocol/utils';
const mockCreate = jest.fn(); const mockCreate = jest.fn();
jest.mock('@vegaprotocol/wallet', () => ({ jest.mock('@vegaprotocol/wallet', () => ({
...jest.requireActual('@vegaprotocol/wallet'), ...jest.requireActual('@vegaprotocol/wallet'),
useVegaWallet: jest.fn(() => ({ pubKey: 'partyId' })), useVegaWallet: jest.fn(() => ({ pubKey: 'partyId' })),
})); }));
jest.mock('@vegaprotocol/web3', () => ({ jest.mock('@vegaprotocol/web3', () => ({
...jest.requireActual('@vegaprotocol/web3'), ...jest.requireActual('@vegaprotocol/web3'),
useVegaTransactionStore: jest.fn(() => mockCreate), useVegaTransactionStore: jest.fn(() => mockCreate),
})); }));
// eslint-disable-next-line @typescript-eslint/no-explicit-any // eslint-disable-next-line @typescript-eslint/no-explicit-any
const mockUseDataProvider = (args: any) => { const mockUseDataProvider = (args: any) => {
if (args.dataProvider === positionsMarketsProvider) { if (args.dataProvider === positionsMarketsProvider) {
@ -21,17 +24,20 @@ const mockUseDataProvider = (args: any) => {
} }
return { data: [singleRow] }; return { data: [singleRow] };
}; };
jest.mock('@vegaprotocol/data-provider', () => ({ jest.mock('@vegaprotocol/data-provider', () => ({
...jest.requireActual('@vegaprotocol/data-provider'), ...jest.requireActual('@vegaprotocol/data-provider'),
useDataProvider: jest.fn((args) => mockUseDataProvider(args)), useDataProvider: jest.fn((args) => mockUseDataProvider(args)),
})); }));
describe('PositionsManager', () => { describe('PositionsManager', () => {
it('should close position with max uint64', async () => { // TODO: Close position temporarily disabled in https://github.com/vegaprotocol/frontend-monorepo/pull/5350
// eslint-disable-next-line jest/no-disabled-tests
it.skip('should close position with max uint64', async () => {
render(<PositionsManager partyIds={['partyId']} isReadOnly={false} />, { render(<PositionsManager partyIds={['partyId']} isReadOnly={false} />, {
wrapper: MockedProvider, wrapper: MockedProvider,
}); });
expect(await screen.getByTestId('close-position')).toBeInTheDocument(); expect(await screen.findByTestId('close-position')).toBeInTheDocument();
fireEvent.click(screen.getByTestId('close-position')); fireEvent.click(screen.getByTestId('close-position'));

View File

@ -1,7 +1,4 @@
import { useCallback } from 'react';
import { PositionsTable } from './positions-table'; import { PositionsTable } from './positions-table';
import * as Schema from '@vegaprotocol/types';
import { useVegaTransactionStore } from '@vegaprotocol/web3';
import { useVegaWallet } from '@vegaprotocol/wallet'; import { useVegaWallet } from '@vegaprotocol/wallet';
import { useDataProvider } from '@vegaprotocol/data-provider'; import { useDataProvider } from '@vegaprotocol/data-provider';
import { import {
@ -9,9 +6,15 @@ import {
positionsMarketsProvider, positionsMarketsProvider,
} from './positions-data-providers'; } from './positions-data-providers';
import type { useDataGridEvents } from '@vegaprotocol/datagrid'; import type { useDataGridEvents } from '@vegaprotocol/datagrid';
import { MAXGOINT64 } from '@vegaprotocol/utils';
import { useT } from '../use-t'; import { useT } from '../use-t';
// TODO: Close position temporarily disabled in https://github.com/vegaprotocol/frontend-monorepo/pull/5350
//
// import { useCallback } from 'react';
// import * as Schema from '@vegaprotocol/types';
// import { useVegaTransactionStore } from '@vegaprotocol/web3';
// import { MAXGOINT64 } from '@vegaprotocol/utils';
interface PositionsManagerProps { interface PositionsManagerProps {
partyIds: string[]; partyIds: string[];
onMarketClick?: (marketId: string) => void; onMarketClick?: (marketId: string) => void;
@ -29,33 +32,37 @@ export const PositionsManager = ({
}: PositionsManagerProps) => { }: PositionsManagerProps) => {
const t = useT(); const t = useT();
const { pubKeys, pubKey } = useVegaWallet(); const { pubKeys, pubKey } = useVegaWallet();
const create = useVegaTransactionStore((store) => store.create);
const onClose = useCallback( // TODO: Close position temporarily disabled in https://github.com/vegaprotocol/frontend-monorepo/pull/5350
({ marketId, openVolume }: { marketId: string; openVolume: string }) => //
create({ // const create = useVegaTransactionStore((store) => store.create);
batchMarketInstructions: { //
cancellations: [ // const onClose = useCallback(
{ // ({ marketId, openVolume }: { marketId: string; openVolume: string }) =>
marketId, // create({
orderId: '', // omit order id to cancel all active orders // batchMarketInstructions: {
}, // cancellations: [
], // {
submissions: [ // marketId,
{ // orderId: '', // omit order id to cancel all active orders
marketId: marketId, // },
type: Schema.OrderType.TYPE_MARKET as const, // ],
timeInForce: Schema.OrderTimeInForce.TIME_IN_FORCE_IOC as const, // submissions: [
side: openVolume.startsWith('-') // {
? Schema.Side.SIDE_BUY // marketId: marketId,
: Schema.Side.SIDE_SELL, // type: Schema.OrderType.TYPE_MARKET as const,
size: MAXGOINT64, // improvement for avoiding leftovers filled in the meantime when close request has been sent // timeInForce: Schema.OrderTimeInForce.TIME_IN_FORCE_IOC as const,
reduceOnly: true, // side: openVolume.startsWith('-')
}, // ? Schema.Side.SIDE_BUY
], // : Schema.Side.SIDE_SELL,
}, // size: MAXGOINT64, // improvement for avoiding leftovers filled in the meantime when close request has been sent
}), // reduceOnly: true,
[create] // },
); // ],
// },
// }),
// [create]
// );
const { data: marketIds } = useDataProvider({ const { data: marketIds } = useDataProvider({
dataProvider: positionsMarketsProvider, dataProvider: positionsMarketsProvider,
@ -74,7 +81,8 @@ export const PositionsManager = ({
pubKeys={pubKeys} pubKeys={pubKeys}
rowData={data} rowData={data}
onMarketClick={onMarketClick} onMarketClick={onMarketClick}
onClose={onClose} // TODO: temporarily disable close position
// onClose={onClose}
isReadOnly={isReadOnly} isReadOnly={isReadOnly}
multipleKeys={partyIds.length > 1} multipleKeys={partyIds.length > 1}
overlayNoRowsTemplate={error ? error.message : t('No positions')} overlayNoRowsTemplate={error ? error.message : t('No positions')}