@@ -3,10 +3,11 @@ import { Observable } from 'rxjs';
33import { TestScheduler } from 'rxjs/testing' ;
44import { XudClient } from '../proto/xudrpc_grpc_pb' ;
55import { PlaceOrderResponse } from '../proto/xudrpc_pb' ;
6- import { getLoggers , testConfig } from '../test-utils' ;
6+ import { getArbyStore , ArbyStore } from '../store' ;
7+ import { getLoggers , testConfig , TestError } from '../test-utils' ;
78import { TradeInfo } from '../trade/info' ;
89import { createOpenDEXorders$ , OpenDEXorders } from './create-orders' ;
9- import { TestError } from '../test-utils ' ;
10+ import BigNumber from 'bignumber.js ' ;
1011
1112let testScheduler : TestScheduler ;
1213const testSchedulerSetup = ( ) => {
@@ -21,32 +22,40 @@ type CreateOpenDEXordersInputEvents = {
2122 replaceXudOrder$ : string ;
2223} ;
2324
24- const assertCreateOpenDEXorders = (
25- inputEvents : CreateOpenDEXordersInputEvents ,
26- expected : string ,
25+ const assertCreateOpenDEXorders = ( {
26+ expected,
27+ inputEvents,
28+ inputErrors,
29+ store,
30+ shouldCreateOpenDEXorders,
31+ } : {
32+ inputEvents : CreateOpenDEXordersInputEvents ;
33+ expected : string ;
2734 inputErrors ?: {
2835 xudOrder$ ?: TestError ;
2936 replaceXudOrder$ ?: TestError ;
30- }
31- ) => {
37+ } ;
38+ store ?: ArbyStore ;
39+ shouldCreateOpenDEXorders ?: ( ) => boolean ;
40+ } ) => {
3241 testScheduler . run ( helpers => {
3342 const { cold, expectObservable } = helpers ;
3443 const getTradeInfo = ( ) : TradeInfo => {
3544 return ( 'mock trade info' as unknown ) as TradeInfo ;
3645 } ;
3746 const createXudOrder$ = ( createOrderParams : any ) => {
3847 if ( createOrderParams . replaceOrderId ) {
39- return cold (
48+ return ( cold (
4049 inputEvents . replaceXudOrder$ ,
41- { } ,
50+ { a : 'order-response' } ,
4251 inputErrors ?. replaceXudOrder$
43- ) as Observable < PlaceOrderResponse > ;
52+ ) as unknown ) as Observable < PlaceOrderResponse > ;
4453 } else {
45- return cold (
54+ return ( cold (
4655 inputEvents . xudOrder$ ,
47- { } ,
56+ { a : 'order-response' } ,
4857 inputErrors ?. xudOrder$
49- ) as Observable < PlaceOrderResponse > ;
58+ ) as unknown ) as Observable < PlaceOrderResponse > ;
5059 }
5160 } ;
5261 const getXudClient$ = ( ) => {
@@ -62,6 +71,10 @@ const assertCreateOpenDEXorders = (
6271 tradeInfoToOpenDEXorders,
6372 logger : getLoggers ( ) . global ,
6473 config : testConfig ( ) ,
74+ store : store ? store : getArbyStore ( ) ,
75+ shouldCreateOpenDEXorders : shouldCreateOpenDEXorders
76+ ? shouldCreateOpenDEXorders
77+ : ( ) => true ,
6578 } ) ;
6679 expectObservable ( createOrders$ ) . toBe ( expected , {
6780 a : true ,
@@ -79,17 +92,86 @@ describe('createOpenDEXorders$', () => {
7992 xudOrder$ : '' ,
8093 } ;
8194 const expected = '2s (a|)' ;
82- assertCreateOpenDEXorders ( inputEvents , expected ) ;
95+ const store = {
96+ ...getArbyStore ( ) ,
97+ ...{ updateLastSellOrderUpdatePrice : jest . fn ( ) } ,
98+ ...{ updateLastBuyOrderUpdatePrice : jest . fn ( ) } ,
99+ } ;
100+ assertCreateOpenDEXorders ( { inputEvents, expected, store } ) ;
101+ expect ( store . updateLastSellOrderUpdatePrice ) . toHaveBeenCalledTimes ( 1 ) ;
102+ expect ( store . updateLastBuyOrderUpdatePrice ) . toHaveBeenCalledTimes ( 1 ) ;
103+ } ) ;
104+
105+ it ( 'filters by shouldCreateOpenDEXorders' , ( ) => {
106+ const inputEvents = {
107+ xudClient$ : '1s a' ,
108+ replaceXudOrder$ : '1s (a|)' ,
109+ xudOrder$ : '' ,
110+ } ;
111+ // it returns true immediately without attempting to create orders
112+ const expected = '1s (a|)' ;
113+ const arbyStore = getArbyStore ( ) ;
114+ const lastBuyOrderUpdatePrice = new BigNumber ( '123' ) ;
115+ const lastSellOrderUpdatePrice = new BigNumber ( '321' ) ;
116+ arbyStore . updateLastBuyOrderUpdatePrice ( lastBuyOrderUpdatePrice ) ;
117+ arbyStore . updateLastSellOrderUpdatePrice ( lastSellOrderUpdatePrice ) ;
118+ const store = {
119+ ...arbyStore ,
120+ ...{ updateLastSellOrderUpdatePrice : jest . fn ( ) } ,
121+ ...{ updateLastBuyOrderUpdatePrice : jest . fn ( ) } ,
122+ } ;
123+ const stateChangesSpy = jest . spyOn ( store , 'stateChanges' ) ;
124+ const shouldCreateOpenDEXorders = jest . fn ( ( ) => false ) ;
125+ assertCreateOpenDEXorders ( {
126+ inputEvents,
127+ expected,
128+ store,
129+ shouldCreateOpenDEXorders,
130+ } ) ;
131+ expect ( store . updateLastSellOrderUpdatePrice ) . toHaveBeenCalledTimes ( 0 ) ;
132+ expect ( store . updateLastBuyOrderUpdatePrice ) . toHaveBeenCalledTimes ( 0 ) ;
133+ expect ( stateChangesSpy ) . toHaveBeenCalledTimes ( 1 ) ;
134+ expect ( shouldCreateOpenDEXorders ) . toHaveBeenCalledTimes ( 2 ) ;
135+ expect ( shouldCreateOpenDEXorders ) . toHaveBeenCalledWith (
136+ undefined ,
137+ new BigNumber ( lastBuyOrderUpdatePrice )
138+ ) ;
139+ expect ( shouldCreateOpenDEXorders ) . toHaveBeenCalledWith (
140+ undefined ,
141+ new BigNumber ( lastSellOrderUpdatePrice )
142+ ) ;
83143 } ) ;
84144
85- it ( 'throws if unknown error for repace order' , ( ) => {
145+ it ( 'will not update lastOrderUpdatePrice when orders not created' , ( ) => {
146+ const inputEvents = {
147+ xudClient$ : '1s a' ,
148+ replaceXudOrder$ : '1s (b|)' ,
149+ xudOrder$ : '' ,
150+ } ;
151+ const expected = '2s (a|)' ;
152+ const store = {
153+ ...getArbyStore ( ) ,
154+ ...{ updateLastSellOrderUpdatePrice : jest . fn ( ) } ,
155+ ...{ updateLastBuyOrderUpdatePrice : jest . fn ( ) } ,
156+ } ;
157+ assertCreateOpenDEXorders ( { inputEvents, expected, store } ) ;
158+ expect ( store . updateLastSellOrderUpdatePrice ) . toHaveBeenCalledTimes ( 0 ) ;
159+ expect ( store . updateLastBuyOrderUpdatePrice ) . toHaveBeenCalledTimes ( 0 ) ;
160+ } ) ;
161+
162+ it ( 'throws if unknown error for replace order' , ( ) => {
86163 const inputEvents = {
87164 xudClient$ : '1s a' ,
88165 replaceXudOrder$ : '1s #' ,
89166 xudOrder$ : '' ,
90167 } ;
91168 const expected = '2s #' ;
92- assertCreateOpenDEXorders ( inputEvents , expected ) ;
169+ const store = {
170+ ...getArbyStore ( ) ,
171+ ...{ updateLastOrderUpdatePrice : jest . fn ( ) } ,
172+ } ;
173+ assertCreateOpenDEXorders ( { inputEvents, expected, store } ) ;
174+ expect ( store . updateLastOrderUpdatePrice ) . toHaveBeenCalledTimes ( 0 ) ;
93175 } ) ;
94176
95177 it ( 'retries without replaceOrderId if grpc.NOT_FOUND error' , ( ) => {
@@ -105,6 +187,13 @@ describe('createOpenDEXorders$', () => {
105187 } ,
106188 } ;
107189 const expected = '3s (a|)' ;
108- assertCreateOpenDEXorders ( inputEvents , expected , inputErrors ) ;
190+ const store = {
191+ ...getArbyStore ( ) ,
192+ ...{ updateLastSellOrderUpdatePrice : jest . fn ( ) } ,
193+ ...{ updateLastBuyOrderUpdatePrice : jest . fn ( ) } ,
194+ } ;
195+ assertCreateOpenDEXorders ( { inputEvents, expected, inputErrors, store } ) ;
196+ expect ( store . updateLastSellOrderUpdatePrice ) . toHaveBeenCalledTimes ( 1 ) ;
197+ expect ( store . updateLastBuyOrderUpdatePrice ) . toHaveBeenCalledTimes ( 1 ) ;
109198 } ) ;
110199} ) ;
0 commit comments