diff --git a/README.md b/README.md index 6dd246f..cba319f 100644 --- a/README.md +++ b/README.md @@ -58,7 +58,7 @@ stream.latestTradeDetail$.subscribe((v) => {}) - [ ] Export fund flow - [ ] User fee rate * Trade Interface - - [ ] Trade order test + - [x] Trade order test - [x] Trade order - [ ] Bulk order - [x] One-Click Close All Positions diff --git a/src/bingx-client/services/trade.service.spec.ts b/src/bingx-client/services/trade.service.spec.ts new file mode 100644 index 0000000..0bf37f8 --- /dev/null +++ b/src/bingx-client/services/trade.service.spec.ts @@ -0,0 +1,49 @@ +import { ApiAccount } from 'bingx-api/bingx/account/api-account'; +import { OrderPositionSideEnum } from 'bingx-api/bingx/enums/order-position-side.enum'; +import { OrderSideEnum } from 'bingx-api/bingx/enums/order-side.enum'; +import { OrderTypeEnum } from 'bingx-api/bingx/enums/order-type.enum'; +import { BingxCreateTradeOrderInterface } from 'bingx-api/bingx/interfaces/trade-order.interface'; +import { BingxTradeOrderEndpoint } from 'bingx-api/bingx/endpoints/bingx-trade-order-endpoint'; +import { BingxTradeOrderTestEndpoint } from 'bingx-api/bingx/endpoints/bingx-trade-order-test-endpoint'; +import { TradeService } from 'bingx-api/bingx-client/services/trade.service'; + +describe('TradeService', () => { + const account = new ApiAccount('api-key', 'secret-key'); + const order: BingxCreateTradeOrderInterface = { + clientOrderID: 'client-order-id', + side: OrderSideEnum.BUY, + positionSide: OrderPositionSideEnum.LONG, + price: '30000', + quantity: '0.001', + symbol: 'BTC-USDT', + type: OrderTypeEnum.MARKET, + }; + + it('executes trade order endpoint for live orders', async () => { + const requestExecutorMock = { + execute: jest.fn().mockResolvedValue({}), + }; + const service = new TradeService(requestExecutorMock); + + await expect(service.tradeOrder(order, account)).resolves.toEqual({}); + + expect(requestExecutorMock.execute).toHaveBeenCalledWith( + expect.any(BingxTradeOrderEndpoint), + ); + }); + + it('executes trade order test endpoint for test orders', async () => { + const requestExecutorMock = { + execute: jest.fn().mockResolvedValue({}), + }; + const service = new TradeService(requestExecutorMock); + + await expect(service.createTradeOrderTest(order, account)).resolves.toEqual( + {}, + ); + + expect(requestExecutorMock.execute).toHaveBeenCalledWith( + expect.any(BingxTradeOrderTestEndpoint), + ); + }); +}); diff --git a/src/bingx-client/services/trade.service.ts b/src/bingx-client/services/trade.service.ts index 65fa5bd..d5d2111 100644 --- a/src/bingx-client/services/trade.service.ts +++ b/src/bingx-client/services/trade.service.ts @@ -2,6 +2,7 @@ import { RequestExecutorInterface } from 'bingx-api/bingx/request-executor/reque import { BingxCreateTradeOrderInterface } from 'bingx-api/bingx/interfaces/trade-order.interface'; import { AccountInterface } from 'bingx-api/bingx/account/account.interface'; import { BingxTradeOrderEndpoint } from 'bingx-api/bingx/endpoints/bingx-trade-order-endpoint'; +import { BingxTradeOrderTestEndpoint } from 'bingx-api/bingx/endpoints/bingx-trade-order-test-endpoint'; import { BingxCloseAllPositionsEndpoint } from 'bingx-api/bingx/endpoints/bingx-close-all-positions-endpoint'; import { BingxCancelAllOrdersEndpoint } from 'bingx-api/bingx/endpoints/bingx-cancel-all-orders-endpoint'; import { @@ -30,7 +31,7 @@ export class TradeService { account: AccountInterface, ) { return this.requestExecutor.execute( - new BingxTradeOrderEndpoint(order, account), + new BingxTradeOrderTestEndpoint(order, account), ); } diff --git a/src/bingx/endpoints/index.ts b/src/bingx/endpoints/index.ts index 6866f8b..82762f7 100644 --- a/src/bingx/endpoints/index.ts +++ b/src/bingx/endpoints/index.ts @@ -8,6 +8,7 @@ export * from './bingx-perpetual-swap-positions-endpoint'; export * from './bingx-request.interface'; export * from './bingx-response.interface'; export * from './bingx-trade-order-endpoint'; +export { BingxTradeOrderTestEndpoint } from './bingx-trade-order-test-endpoint'; export * from './endpoint.interface'; export * from './endpoint'; export * from './bingx-user-history-orders-endpoint'; diff --git a/src/bingx/interfaces/websocket-event.ts b/src/bingx/interfaces/websocket-event.ts index a414299..3be37b3 100644 --- a/src/bingx/interfaces/websocket-event.ts +++ b/src/bingx/interfaces/websocket-event.ts @@ -1,4 +1,3 @@ -import { OrderTypeEnum } from 'bingx-api/bingx/enums/order-type.enum'; import { OrderSideEnum } from 'bingx-api/bingx/enums/order-side.enum'; import { OrderStatusEnum } from 'bingx-api/bingx/enums/order-status.enum'; import { OrderPositionSideEnum } from 'bingx-api/bingx/enums/order-position-side.enum';