@@ -19,6 +19,59 @@ const createTestWSv2Instance = (params = {}) => {
19
19
}
20
20
21
21
describe ( 'WSv2 utilities' , ( ) => {
22
+ it ( 'sendEnabledFlags: sends the current flags value to the server' , async ( ) => {
23
+ const ws = new WSv2 ( )
24
+ const wss = new MockWSv2Server ( )
25
+
26
+ await ws . open ( )
27
+
28
+ ws . _enabledFlags = WSv2 . flags . CHECKSUM
29
+ ws . send = ( packet ) => {
30
+ assert . strictEqual ( packet . event , 'conf' )
31
+ assert . strictEqual ( packet . flags , WSv2 . flags . CHECKSUM )
32
+
33
+ wss . close ( )
34
+ }
35
+
36
+ ws . sendEnabledFlags ( )
37
+ } )
38
+
39
+ it ( 'enableFlag: saves enabled flag status' , ( ) => {
40
+ const ws = new WSv2 ( )
41
+
42
+ assert ( ! ws . isFlagEnabled ( WSv2 . flags . SEQ_ALL ) )
43
+ assert ( ! ws . isFlagEnabled ( WSv2 . flags . CHECKSUM ) )
44
+
45
+ ws . enableFlag ( WSv2 . flags . SEQ_ALL )
46
+
47
+ assert ( ws . isFlagEnabled ( WSv2 . flags . SEQ_ALL ) )
48
+ assert ( ! ws . isFlagEnabled ( WSv2 . flags . CHECKSUM ) )
49
+
50
+ ws . enableFlag ( WSv2 . flags . CHECKSUM )
51
+
52
+ assert ( ws . isFlagEnabled ( WSv2 . flags . SEQ_ALL ) )
53
+ assert ( ws . isFlagEnabled ( WSv2 . flags . CHECKSUM ) )
54
+ } )
55
+
56
+ it ( 'enableFlag: sends conf packet if open' , async ( ) => {
57
+ const ws = new WSv2 ( )
58
+ const wss = new MockWSv2Server ( )
59
+ let confSent = false
60
+
61
+ await ws . open ( )
62
+
63
+ ws . send = ( packet ) => {
64
+ assert ( _isObject ( packet ) )
65
+ assert . strictEqual ( packet . event , 'conf' )
66
+ confSent = true
67
+
68
+ wss . close ( )
69
+ }
70
+
71
+ ws . enableFlag ( WSv2 . flags . SEQ_ALL )
72
+ assert ( confSent )
73
+ } )
74
+
22
75
it ( '_registerListener: correctly adds listener to internal map with cbGID' , ( ) => {
23
76
const ws = new WSv2 ( )
24
77
ws . _registerListener ( 'trade' , { 2 : 'tBTCUSD' } , Map , 42 , ( ) => { } )
@@ -45,12 +98,23 @@ describe('WSv2 utilities', () => {
45
98
46
99
it ( 'enableSequencing: sends the correct conf flag' , ( done ) => {
47
100
const ws = new WSv2 ( )
48
- ws . send = ( packet ) => {
49
- assert . strictEqual ( packet . event , 'conf' )
50
- assert . strictEqual ( packet . flags , 65536 )
51
- done ( )
52
- }
53
- ws . enableSequencing ( )
101
+ const wss = new MockWSv2Server ( )
102
+
103
+ ws . once ( 'open' , ( ) => {
104
+ setTimeout ( ( ) => { // send is used by the open hander
105
+ ws . send = ( packet ) => {
106
+ assert . strictEqual ( packet . event , 'conf' )
107
+ assert . strictEqual ( packet . flags , 65536 )
108
+
109
+ wss . close ( )
110
+ done ( )
111
+ }
112
+
113
+ ws . enableSequencing ( )
114
+ } , 20 )
115
+ } )
116
+
117
+ ws . open ( )
54
118
} )
55
119
56
120
it ( 'getCandles: returns empty array if no candle set is available' , ( ) => {
@@ -121,27 +185,45 @@ describe('WSv2 lifetime', () => {
121
185
assert . strictEqual ( ws . isAuthenticated ( ) , false )
122
186
} )
123
187
124
- it ( 'open: fails to open twice' , ( done ) => {
188
+ it ( 'open: fails to open twice' , async ( ) => {
125
189
const wss = new MockWSv2Server ( )
126
190
const ws = createTestWSv2Instance ( )
127
- ws . on ( 'open' , ( ) => {
128
- ws . open ( ) . then ( ( ) => assert ( false ) ) . catch ( ( ) => {
129
- wss . close ( )
130
- done ( )
131
- } )
132
- } )
133
- ws . open ( )
191
+
192
+ await ws . open ( )
193
+
194
+ try {
195
+ await ws . open ( )
196
+ assert ( false )
197
+ } catch ( e ) {
198
+ wss . close ( )
199
+ }
134
200
} )
135
201
136
- it ( 'open: updates open flag' , ( done ) => {
202
+ it ( 'open: updates open flag' , async ( ) => {
137
203
const wss = new MockWSv2Server ( )
138
204
const ws = createTestWSv2Instance ( )
139
- ws . on ( 'open' , ( ) => {
140
- assert . strictEqual ( ws . isOpen ( ) , true )
205
+
206
+ await ws . open ( )
207
+
208
+ assert . strictEqual ( ws . isOpen ( ) , true )
209
+ wss . close ( )
210
+ } )
211
+
212
+ it ( 'open: sends flags value' , async ( ) => {
213
+ const wss = new MockWSv2Server ( )
214
+ const ws = createTestWSv2Instance ( )
215
+ let flagsSent = false
216
+
217
+ ws . enableSequencing ( )
218
+ ws . sendEnabledFlags = ( ) => {
219
+ assert . strictEqual ( ws . _enabledFlags , WSv2 . flags . SEQ_ALL )
220
+ flagsSent = true
141
221
wss . close ( )
142
- done ( )
143
- } )
144
- ws . open ( )
222
+ }
223
+
224
+ await ws . open ( )
225
+
226
+ assert ( flagsSent )
145
227
} )
146
228
147
229
it ( 'close: doesn\'t close if not open' , ( done ) => {
@@ -164,24 +246,20 @@ describe('WSv2 lifetime', () => {
164
246
} )
165
247
} )
166
248
167
- it ( 'close: clears connection state' , ( done ) => {
249
+ it ( 'close: clears connection state' , async ( ) => {
168
250
const wss = new MockWSv2Server ( )
169
251
const ws = createTestWSv2Instance ( )
170
252
ws . _onWSClose = ( ) => { } // disable fallback reset
171
253
172
- ws . open ( )
173
- ws . on ( 'open' , ( ) => {
174
- assert ( ws . _ws !== null )
175
- assert ( ws . _isOpen )
254
+ await ws . open ( )
255
+ assert ( ws . _ws !== null )
256
+ assert ( ws . _isOpen )
176
257
177
- ws . close ( ) . then ( ( ) => {
178
- assert ( ws . _ws == null )
179
- assert ( ! ws . _isOpen )
258
+ await ws . close ( )
259
+ assert ( ws . _ws == null )
260
+ assert ( ! ws . _isOpen )
180
261
181
- wss . close ( )
182
- done ( )
183
- } )
184
- } )
262
+ wss . close ( )
185
263
} )
186
264
187
265
it ( 'auth: fails to auth twice' , ( done ) => {
@@ -209,34 +287,38 @@ describe('WSv2 lifetime', () => {
209
287
} )
210
288
} )
211
289
212
- it ( 'auth: forwards calc param' , ( done ) => {
290
+ it ( 'auth: forwards calc param' , async ( ) => {
213
291
const wss = new MockWSv2Server ( )
214
292
const ws = createTestWSv2Instance ( )
215
- ws . open ( )
216
- ws . on ( 'open' , ( ) => {
217
- ws . send = ( data ) => {
218
- assert . strictEqual ( data . calc , 42 )
219
- wss . close ( )
220
- done ( )
221
- }
293
+ let sentCalc = false
222
294
223
- ws . auth ( 42 )
224
- } )
295
+ await ws . open ( )
296
+
297
+ ws . send = ( data ) => {
298
+ assert . strictEqual ( data . calc , 42 )
299
+ wss . close ( )
300
+ sentCalc = true
301
+ }
302
+
303
+ ws . auth ( 42 ) // note promise ignored
304
+ assert ( sentCalc )
225
305
} )
226
306
227
- it ( 'auth: forwards dms param' , ( done ) => {
307
+ it ( 'auth: forwards dms param' , async ( ) => {
228
308
const wss = new MockWSv2Server ( )
229
309
const ws = createTestWSv2Instance ( )
230
- ws . open ( )
231
- ws . on ( 'open' , ( ) => {
232
- ws . send = ( data ) => {
233
- assert . strictEqual ( data . dms , 42 )
234
- wss . close ( )
235
- done ( )
236
- }
310
+ let sentDMS = false
237
311
238
- ws . auth ( 0 , 42 )
239
- } )
312
+ await ws . open ( )
313
+
314
+ ws . send = ( data ) => {
315
+ assert . strictEqual ( data . dms , 42 )
316
+ wss . close ( )
317
+ sentDMS = true
318
+ }
319
+
320
+ ws . auth ( 0 , 42 ) // note promise ignored
321
+ assert ( sentDMS )
240
322
} )
241
323
242
324
it ( 'reconnect: connects if not already connected' , ( done ) => {
@@ -385,22 +467,12 @@ describe('WSv2 auto reconnect', () => {
385
467
} )
386
468
387
469
describe ( 'WSv2 seq audit' , ( ) => {
388
- it ( 'automatically enables sequencing if seqAudit is true in constructor' , ( done ) => {
389
- const wss = new MockWSv2Server ( )
470
+ it ( 'automatically enables sequencing if seqAudit is true in constructor' , ( ) => {
390
471
const ws = createTestWSv2Instance ( {
391
472
seqAudit : true
392
473
} )
393
474
394
- wss . _onClientMessage = ( ws , msgJSON ) => {
395
- const msg = JSON . parse ( msgJSON )
396
-
397
- if ( msg . event === 'conf' && msg . flags === 65536 ) {
398
- wss . close ( )
399
- done ( )
400
- }
401
- }
402
-
403
- ws . open ( )
475
+ assert ( ws . isFlagEnabled ( WSv2 . flags . SEQ_ALL ) )
404
476
} )
405
477
406
478
it ( 'emits error on invalid seq number' , ( done ) => {
0 commit comments