Feat/63 Deal ticket (#82)
* scaffold dealticket package, remove trading views from react-helpers
* add deal ticket component, add intent utils, expand dialog and form group styles
* add splash component, show market not found message if market doesnt exist
* tidy up error handling
* add handleError method for vega tx hook
* add better testname for provider test, flesh out tests a bit more for deal ticket
* Add unit tests for useVegaTransaction and useOrderSubmit hooks
* add wrapper component for order dialog styles
* add vega styled loader to ui toolkit and use in order dialog
* add title prop to order dialog
* split limit and market tickets into own files
* add button radio component
* revert dialog styles
* move splash component to ui-toolkit, add story
* convert intent to enum
* Make button always type=button unless type prop is passed
* inline filter logic for tif selector
* add date-fns, add datetime to helpers
* add order types to wallet package, make price undefined if order type is market
* use enums in deal ticket logic
* tidy up order state by moving submit and transaction hooks out of deal ticket
* add comment for dialog styles
* remove decimal from price input
* add types package, delete old generated types from trading project
* rename types package to graphql
* update generate command to point to correct locations
* fix use order submit test
* use intent shadow helper
* remove date-fns and format manually, update submit button error to use input-error
* remove stray console.log
2022-03-17 19:35:46 +00:00
|
|
|
import '@testing-library/jest-dom';
|
|
|
|
import {
|
|
|
|
VegaWalletContext,
|
|
|
|
OrderTimeInForce,
|
|
|
|
OrderType,
|
|
|
|
} from '@vegaprotocol/wallet';
|
|
|
|
import { addDecimal } from '@vegaprotocol/react-helpers';
|
|
|
|
import { fireEvent, render, screen } from '@testing-library/react';
|
2022-03-29 23:19:23 +00:00
|
|
|
import { DealTicket } from './deal-ticket';
|
Feat/63 Deal ticket (#82)
* scaffold dealticket package, remove trading views from react-helpers
* add deal ticket component, add intent utils, expand dialog and form group styles
* add splash component, show market not found message if market doesnt exist
* tidy up error handling
* add handleError method for vega tx hook
* add better testname for provider test, flesh out tests a bit more for deal ticket
* Add unit tests for useVegaTransaction and useOrderSubmit hooks
* add wrapper component for order dialog styles
* add vega styled loader to ui toolkit and use in order dialog
* add title prop to order dialog
* split limit and market tickets into own files
* add button radio component
* revert dialog styles
* move splash component to ui-toolkit, add story
* convert intent to enum
* Make button always type=button unless type prop is passed
* inline filter logic for tif selector
* add date-fns, add datetime to helpers
* add order types to wallet package, make price undefined if order type is market
* use enums in deal ticket logic
* tidy up order state by moving submit and transaction hooks out of deal ticket
* add comment for dialog styles
* remove decimal from price input
* add types package, delete old generated types from trading project
* rename types package to graphql
* update generate command to point to correct locations
* fix use order submit test
* use intent shadow helper
* remove date-fns and format manually, update submit button error to use input-error
* remove stray console.log
2022-03-17 19:35:46 +00:00
|
|
|
import { Order } from './use-order-state';
|
2022-03-29 23:19:23 +00:00
|
|
|
import { DealTicketQuery_market } from './__generated__/DealTicketQuery';
|
|
|
|
import { MarketState, MarketTradingMode } from '@vegaprotocol/types';
|
Feat/63 Deal ticket (#82)
* scaffold dealticket package, remove trading views from react-helpers
* add deal ticket component, add intent utils, expand dialog and form group styles
* add splash component, show market not found message if market doesnt exist
* tidy up error handling
* add handleError method for vega tx hook
* add better testname for provider test, flesh out tests a bit more for deal ticket
* Add unit tests for useVegaTransaction and useOrderSubmit hooks
* add wrapper component for order dialog styles
* add vega styled loader to ui toolkit and use in order dialog
* add title prop to order dialog
* split limit and market tickets into own files
* add button radio component
* revert dialog styles
* move splash component to ui-toolkit, add story
* convert intent to enum
* Make button always type=button unless type prop is passed
* inline filter logic for tif selector
* add date-fns, add datetime to helpers
* add order types to wallet package, make price undefined if order type is market
* use enums in deal ticket logic
* tidy up order state by moving submit and transaction hooks out of deal ticket
* add comment for dialog styles
* remove decimal from price input
* add types package, delete old generated types from trading project
* rename types package to graphql
* update generate command to point to correct locations
* fix use order submit test
* use intent shadow helper
* remove date-fns and format manually, update submit button error to use input-error
* remove stray console.log
2022-03-17 19:35:46 +00:00
|
|
|
|
|
|
|
const order: Order = {
|
|
|
|
type: OrderType.Market,
|
|
|
|
size: '100',
|
|
|
|
timeInForce: OrderTimeInForce.FOK,
|
|
|
|
side: null,
|
|
|
|
};
|
2022-03-29 23:19:23 +00:00
|
|
|
const market: DealTicketQuery_market = {
|
|
|
|
__typename: 'Market',
|
Feat/63 Deal ticket (#82)
* scaffold dealticket package, remove trading views from react-helpers
* add deal ticket component, add intent utils, expand dialog and form group styles
* add splash component, show market not found message if market doesnt exist
* tidy up error handling
* add handleError method for vega tx hook
* add better testname for provider test, flesh out tests a bit more for deal ticket
* Add unit tests for useVegaTransaction and useOrderSubmit hooks
* add wrapper component for order dialog styles
* add vega styled loader to ui toolkit and use in order dialog
* add title prop to order dialog
* split limit and market tickets into own files
* add button radio component
* revert dialog styles
* move splash component to ui-toolkit, add story
* convert intent to enum
* Make button always type=button unless type prop is passed
* inline filter logic for tif selector
* add date-fns, add datetime to helpers
* add order types to wallet package, make price undefined if order type is market
* use enums in deal ticket logic
* tidy up order state by moving submit and transaction hooks out of deal ticket
* add comment for dialog styles
* remove decimal from price input
* add types package, delete old generated types from trading project
* rename types package to graphql
* update generate command to point to correct locations
* fix use order submit test
* use intent shadow helper
* remove date-fns and format manually, update submit button error to use input-error
* remove stray console.log
2022-03-17 19:35:46 +00:00
|
|
|
id: 'market-id',
|
|
|
|
decimalPlaces: 2,
|
2022-03-29 23:19:23 +00:00
|
|
|
tradingMode: MarketTradingMode.Continuous,
|
|
|
|
state: MarketState.Active,
|
Feat/63 Deal ticket (#82)
* scaffold dealticket package, remove trading views from react-helpers
* add deal ticket component, add intent utils, expand dialog and form group styles
* add splash component, show market not found message if market doesnt exist
* tidy up error handling
* add handleError method for vega tx hook
* add better testname for provider test, flesh out tests a bit more for deal ticket
* Add unit tests for useVegaTransaction and useOrderSubmit hooks
* add wrapper component for order dialog styles
* add vega styled loader to ui toolkit and use in order dialog
* add title prop to order dialog
* split limit and market tickets into own files
* add button radio component
* revert dialog styles
* move splash component to ui-toolkit, add story
* convert intent to enum
* Make button always type=button unless type prop is passed
* inline filter logic for tif selector
* add date-fns, add datetime to helpers
* add order types to wallet package, make price undefined if order type is market
* use enums in deal ticket logic
* tidy up order state by moving submit and transaction hooks out of deal ticket
* add comment for dialog styles
* remove decimal from price input
* add types package, delete old generated types from trading project
* rename types package to graphql
* update generate command to point to correct locations
* fix use order submit test
* use intent shadow helper
* remove date-fns and format manually, update submit button error to use input-error
* remove stray console.log
2022-03-17 19:35:46 +00:00
|
|
|
tradableInstrument: {
|
2022-03-29 23:19:23 +00:00
|
|
|
__typename: 'TradableInstrument',
|
Feat/63 Deal ticket (#82)
* scaffold dealticket package, remove trading views from react-helpers
* add deal ticket component, add intent utils, expand dialog and form group styles
* add splash component, show market not found message if market doesnt exist
* tidy up error handling
* add handleError method for vega tx hook
* add better testname for provider test, flesh out tests a bit more for deal ticket
* Add unit tests for useVegaTransaction and useOrderSubmit hooks
* add wrapper component for order dialog styles
* add vega styled loader to ui toolkit and use in order dialog
* add title prop to order dialog
* split limit and market tickets into own files
* add button radio component
* revert dialog styles
* move splash component to ui-toolkit, add story
* convert intent to enum
* Make button always type=button unless type prop is passed
* inline filter logic for tif selector
* add date-fns, add datetime to helpers
* add order types to wallet package, make price undefined if order type is market
* use enums in deal ticket logic
* tidy up order state by moving submit and transaction hooks out of deal ticket
* add comment for dialog styles
* remove decimal from price input
* add types package, delete old generated types from trading project
* rename types package to graphql
* update generate command to point to correct locations
* fix use order submit test
* use intent shadow helper
* remove date-fns and format manually, update submit button error to use input-error
* remove stray console.log
2022-03-17 19:35:46 +00:00
|
|
|
instrument: {
|
2022-03-29 23:19:23 +00:00
|
|
|
__typename: 'Instrument',
|
Feat/63 Deal ticket (#82)
* scaffold dealticket package, remove trading views from react-helpers
* add deal ticket component, add intent utils, expand dialog and form group styles
* add splash component, show market not found message if market doesnt exist
* tidy up error handling
* add handleError method for vega tx hook
* add better testname for provider test, flesh out tests a bit more for deal ticket
* Add unit tests for useVegaTransaction and useOrderSubmit hooks
* add wrapper component for order dialog styles
* add vega styled loader to ui toolkit and use in order dialog
* add title prop to order dialog
* split limit and market tickets into own files
* add button radio component
* revert dialog styles
* move splash component to ui-toolkit, add story
* convert intent to enum
* Make button always type=button unless type prop is passed
* inline filter logic for tif selector
* add date-fns, add datetime to helpers
* add order types to wallet package, make price undefined if order type is market
* use enums in deal ticket logic
* tidy up order state by moving submit and transaction hooks out of deal ticket
* add comment for dialog styles
* remove decimal from price input
* add types package, delete old generated types from trading project
* rename types package to graphql
* update generate command to point to correct locations
* fix use order submit test
* use intent shadow helper
* remove date-fns and format manually, update submit button error to use input-error
* remove stray console.log
2022-03-17 19:35:46 +00:00
|
|
|
product: {
|
2022-03-29 23:19:23 +00:00
|
|
|
__typename: 'Future',
|
Feat/63 Deal ticket (#82)
* scaffold dealticket package, remove trading views from react-helpers
* add deal ticket component, add intent utils, expand dialog and form group styles
* add splash component, show market not found message if market doesnt exist
* tidy up error handling
* add handleError method for vega tx hook
* add better testname for provider test, flesh out tests a bit more for deal ticket
* Add unit tests for useVegaTransaction and useOrderSubmit hooks
* add wrapper component for order dialog styles
* add vega styled loader to ui toolkit and use in order dialog
* add title prop to order dialog
* split limit and market tickets into own files
* add button radio component
* revert dialog styles
* move splash component to ui-toolkit, add story
* convert intent to enum
* Make button always type=button unless type prop is passed
* inline filter logic for tif selector
* add date-fns, add datetime to helpers
* add order types to wallet package, make price undefined if order type is market
* use enums in deal ticket logic
* tidy up order state by moving submit and transaction hooks out of deal ticket
* add comment for dialog styles
* remove decimal from price input
* add types package, delete old generated types from trading project
* rename types package to graphql
* update generate command to point to correct locations
* fix use order submit test
* use intent shadow helper
* remove date-fns and format manually, update submit button error to use input-error
* remove stray console.log
2022-03-17 19:35:46 +00:00
|
|
|
quoteName: 'quote-name',
|
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
depth: {
|
2022-03-29 23:19:23 +00:00
|
|
|
__typename: 'MarketDepth',
|
Feat/63 Deal ticket (#82)
* scaffold dealticket package, remove trading views from react-helpers
* add deal ticket component, add intent utils, expand dialog and form group styles
* add splash component, show market not found message if market doesnt exist
* tidy up error handling
* add handleError method for vega tx hook
* add better testname for provider test, flesh out tests a bit more for deal ticket
* Add unit tests for useVegaTransaction and useOrderSubmit hooks
* add wrapper component for order dialog styles
* add vega styled loader to ui toolkit and use in order dialog
* add title prop to order dialog
* split limit and market tickets into own files
* add button radio component
* revert dialog styles
* move splash component to ui-toolkit, add story
* convert intent to enum
* Make button always type=button unless type prop is passed
* inline filter logic for tif selector
* add date-fns, add datetime to helpers
* add order types to wallet package, make price undefined if order type is market
* use enums in deal ticket logic
* tidy up order state by moving submit and transaction hooks out of deal ticket
* add comment for dialog styles
* remove decimal from price input
* add types package, delete old generated types from trading project
* rename types package to graphql
* update generate command to point to correct locations
* fix use order submit test
* use intent shadow helper
* remove date-fns and format manually, update submit button error to use input-error
* remove stray console.log
2022-03-17 19:35:46 +00:00
|
|
|
lastTrade: {
|
2022-03-29 23:19:23 +00:00
|
|
|
__typename: 'Trade',
|
Feat/63 Deal ticket (#82)
* scaffold dealticket package, remove trading views from react-helpers
* add deal ticket component, add intent utils, expand dialog and form group styles
* add splash component, show market not found message if market doesnt exist
* tidy up error handling
* add handleError method for vega tx hook
* add better testname for provider test, flesh out tests a bit more for deal ticket
* Add unit tests for useVegaTransaction and useOrderSubmit hooks
* add wrapper component for order dialog styles
* add vega styled loader to ui toolkit and use in order dialog
* add title prop to order dialog
* split limit and market tickets into own files
* add button radio component
* revert dialog styles
* move splash component to ui-toolkit, add story
* convert intent to enum
* Make button always type=button unless type prop is passed
* inline filter logic for tif selector
* add date-fns, add datetime to helpers
* add order types to wallet package, make price undefined if order type is market
* use enums in deal ticket logic
* tidy up order state by moving submit and transaction hooks out of deal ticket
* add comment for dialog styles
* remove decimal from price input
* add types package, delete old generated types from trading project
* rename types package to graphql
* update generate command to point to correct locations
* fix use order submit test
* use intent shadow helper
* remove date-fns and format manually, update submit button error to use input-error
* remove stray console.log
2022-03-17 19:35:46 +00:00
|
|
|
price: '100',
|
|
|
|
},
|
|
|
|
},
|
|
|
|
};
|
2022-03-29 23:19:23 +00:00
|
|
|
const submit = jest.fn();
|
|
|
|
const transactionStatus = 'default';
|
Feat/63 Deal ticket (#82)
* scaffold dealticket package, remove trading views from react-helpers
* add deal ticket component, add intent utils, expand dialog and form group styles
* add splash component, show market not found message if market doesnt exist
* tidy up error handling
* add handleError method for vega tx hook
* add better testname for provider test, flesh out tests a bit more for deal ticket
* Add unit tests for useVegaTransaction and useOrderSubmit hooks
* add wrapper component for order dialog styles
* add vega styled loader to ui toolkit and use in order dialog
* add title prop to order dialog
* split limit and market tickets into own files
* add button radio component
* revert dialog styles
* move splash component to ui-toolkit, add story
* convert intent to enum
* Make button always type=button unless type prop is passed
* inline filter logic for tif selector
* add date-fns, add datetime to helpers
* add order types to wallet package, make price undefined if order type is market
* use enums in deal ticket logic
* tidy up order state by moving submit and transaction hooks out of deal ticket
* add comment for dialog styles
* remove decimal from price input
* add types package, delete old generated types from trading project
* rename types package to graphql
* update generate command to point to correct locations
* fix use order submit test
* use intent shadow helper
* remove date-fns and format manually, update submit button error to use input-error
* remove stray console.log
2022-03-17 19:35:46 +00:00
|
|
|
|
|
|
|
function generateJsx() {
|
|
|
|
return (
|
|
|
|
<VegaWalletContext.Provider value={{} as any}>
|
2022-03-29 23:19:23 +00:00
|
|
|
<DealTicket
|
|
|
|
defaultOrder={order}
|
|
|
|
market={market}
|
|
|
|
submit={submit}
|
|
|
|
transactionStatus={transactionStatus}
|
|
|
|
/>
|
Feat/63 Deal ticket (#82)
* scaffold dealticket package, remove trading views from react-helpers
* add deal ticket component, add intent utils, expand dialog and form group styles
* add splash component, show market not found message if market doesnt exist
* tidy up error handling
* add handleError method for vega tx hook
* add better testname for provider test, flesh out tests a bit more for deal ticket
* Add unit tests for useVegaTransaction and useOrderSubmit hooks
* add wrapper component for order dialog styles
* add vega styled loader to ui toolkit and use in order dialog
* add title prop to order dialog
* split limit and market tickets into own files
* add button radio component
* revert dialog styles
* move splash component to ui-toolkit, add story
* convert intent to enum
* Make button always type=button unless type prop is passed
* inline filter logic for tif selector
* add date-fns, add datetime to helpers
* add order types to wallet package, make price undefined if order type is market
* use enums in deal ticket logic
* tidy up order state by moving submit and transaction hooks out of deal ticket
* add comment for dialog styles
* remove decimal from price input
* add types package, delete old generated types from trading project
* rename types package to graphql
* update generate command to point to correct locations
* fix use order submit test
* use intent shadow helper
* remove date-fns and format manually, update submit button error to use input-error
* remove stray console.log
2022-03-17 19:35:46 +00:00
|
|
|
</VegaWalletContext.Provider>
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
test('Deal ticket defaults', () => {
|
|
|
|
render(generateJsx());
|
|
|
|
|
|
|
|
// Assert defaults are used
|
|
|
|
expect(
|
|
|
|
screen.getByTestId(`order-type-${order.type}-selected`)
|
|
|
|
).toBeInTheDocument();
|
|
|
|
expect(
|
|
|
|
screen.queryByTestId('order-side-SIDE_BUY-selected')
|
|
|
|
).not.toBeInTheDocument();
|
|
|
|
expect(
|
|
|
|
screen.queryByTestId('order-side-SIDE_SELL-selected')
|
|
|
|
).not.toBeInTheDocument();
|
|
|
|
expect(screen.getByTestId('order-size')).toHaveDisplayValue(order.size);
|
|
|
|
expect(screen.getByTestId('order-tif')).toHaveValue(order.timeInForce);
|
|
|
|
|
|
|
|
// Assert last price is shown
|
|
|
|
expect(screen.getByTestId('last-price')).toHaveTextContent(
|
|
|
|
// eslint-disable-next-line
|
|
|
|
`~${addDecimal(market.depth.lastTrade!.price, market.decimalPlaces)} ${
|
|
|
|
market.tradableInstrument.instrument.product.quoteName
|
|
|
|
}`
|
|
|
|
);
|
|
|
|
});
|
|
|
|
|
|
|
|
test('Can edit deal ticket', () => {
|
|
|
|
render(generateJsx());
|
|
|
|
|
|
|
|
// Asssert changing values
|
|
|
|
fireEvent.click(screen.getByTestId('order-side-SIDE_BUY'));
|
|
|
|
expect(
|
|
|
|
screen.getByTestId('order-side-SIDE_BUY-selected')
|
|
|
|
).toBeInTheDocument();
|
|
|
|
|
|
|
|
fireEvent.change(screen.getByTestId('order-size'), {
|
|
|
|
target: { value: '200' },
|
|
|
|
});
|
|
|
|
expect(screen.getByTestId('order-size')).toHaveDisplayValue('200');
|
|
|
|
|
|
|
|
fireEvent.change(screen.getByTestId('order-tif'), {
|
|
|
|
target: { value: OrderTimeInForce.IOC },
|
|
|
|
});
|
|
|
|
expect(screen.getByTestId('order-tif')).toHaveValue(OrderTimeInForce.IOC);
|
|
|
|
|
|
|
|
// Switch to limit order
|
|
|
|
fireEvent.click(screen.getByTestId('order-type-TYPE_LIMIT'));
|
|
|
|
|
|
|
|
// Assert price input shown with default value
|
|
|
|
expect(screen.getByTestId('order-price')).toHaveDisplayValue('0');
|
|
|
|
|
|
|
|
// Check all TIF options shown
|
|
|
|
expect(screen.getByTestId('order-tif').children).toHaveLength(
|
|
|
|
Object.keys(OrderTimeInForce).length
|
|
|
|
);
|
|
|
|
});
|
|
|
|
|
|
|
|
test('Handles TIF select box dependent on order type', () => {
|
|
|
|
render(generateJsx());
|
|
|
|
|
|
|
|
// Check only IOC and
|
|
|
|
expect(
|
|
|
|
Array.from(screen.getByTestId('order-tif').children).map(
|
|
|
|
(o) => o.textContent
|
|
|
|
)
|
|
|
|
).toEqual(['IOC', 'FOK']);
|
|
|
|
|
|
|
|
// Switch to limit order and check all TIF options shown
|
|
|
|
fireEvent.click(screen.getByTestId('order-type-TYPE_LIMIT'));
|
|
|
|
expect(screen.getByTestId('order-tif').children).toHaveLength(
|
|
|
|
Object.keys(OrderTimeInForce).length
|
|
|
|
);
|
|
|
|
|
|
|
|
// Change to GTC
|
|
|
|
fireEvent.change(screen.getByTestId('order-tif'), {
|
|
|
|
target: { value: OrderTimeInForce.GTC },
|
|
|
|
});
|
|
|
|
expect(screen.getByTestId('order-tif')).toHaveValue(OrderTimeInForce.GTC);
|
|
|
|
|
|
|
|
// Switch back to market order and TIF should now be IOC
|
|
|
|
fireEvent.click(screen.getByTestId('order-type-TYPE_MARKET'));
|
|
|
|
expect(screen.getByTestId('order-tif')).toHaveValue(OrderTimeInForce.IOC);
|
|
|
|
|
|
|
|
// Switch tif to FOK
|
|
|
|
fireEvent.change(screen.getByTestId('order-tif'), {
|
|
|
|
target: { value: OrderTimeInForce.FOK },
|
|
|
|
});
|
|
|
|
expect(screen.getByTestId('order-tif')).toHaveValue(OrderTimeInForce.FOK);
|
|
|
|
|
|
|
|
// Change back to limit and check we are still on FOK
|
|
|
|
fireEvent.click(screen.getByTestId('order-type-TYPE_LIMIT'));
|
|
|
|
expect(screen.getByTestId('order-tif')).toHaveValue(OrderTimeInForce.FOK);
|
|
|
|
});
|