@@ -64,13 +64,14 @@ describe('Ember Request Queue', () => {
64
64
65
65
beforeEach ( ( ) => {
66
66
requestQueue = new EmberRequestQueue ( 60 ) ;
67
- // don't let defer (dispatching tick mgmt) interfere with "manual" flow of tests unless wanted
68
- deferSpy = jest . spyOn ( requestQueue , 'defer' ) . mockImplementation ( jest . fn ( ) ) ;
67
+ //@ts -expect-error private
68
+ deferSpy = jest . spyOn ( requestQueue , 'defer' ) ;
69
69
} ) ;
70
70
71
71
afterEach ( ( ) => {
72
72
fakeWaitTime = 1000 ;
73
73
varyingReturn = EmberStatus . SUCCESS ;
74
+ requestQueue . stopDispatching ( ) ;
74
75
} ) ;
75
76
76
77
it ( 'Queues request and resolves it' , async ( ) => {
@@ -102,9 +103,9 @@ describe('Ember Request Queue', () => {
102
103
//@ts -expect-error private
103
104
expect ( requestQueue . queue ) . toHaveLength ( 1 ) ;
104
105
105
- requestQueue . dispatch ( ) ; // don't await so we can advance timer
106
+ requestQueue . startDispatching ( ) ;
106
107
107
- jest . advanceTimersByTime ( fakeWaitTime + 100 ) ;
108
+ await jest . advanceTimersByTimeAsync ( fakeWaitTime + 20 ) ;
108
109
109
110
await expect ( p ) . resolves . toBe ( 123 ) ; // gives result of resolve
110
111
@@ -113,6 +114,7 @@ describe('Ember Request Queue', () => {
113
114
//@ts -expect-error private
114
115
expect ( requestQueue . queue ) . toHaveLength ( 0 ) ; // no longer in queue
115
116
} ) ;
117
+
116
118
it ( 'Queues request, rejects it on error, and removes it from queue' , async ( ) => {
117
119
const enqueueSpy = jest . spyOn ( requestQueue , 'enqueue' ) ;
118
120
@@ -142,9 +144,9 @@ describe('Ember Request Queue', () => {
142
144
//@ts -expect-error private
143
145
expect ( requestQueue . queue ) . toHaveLength ( 1 ) ;
144
146
145
- requestQueue . dispatch ( ) ; // don't await so we can advance timer
147
+ requestQueue . startDispatching ( ) ;
146
148
147
- jest . advanceTimersByTime ( fakeWaitTime + 100 ) ;
149
+ jest . advanceTimersByTime ( fakeWaitTime + 20 ) ;
148
150
149
151
await expect ( p ) . rejects . toStrictEqual ( new Error ( EmberStatus [ varyingReturn ] ) ) ;
150
152
@@ -153,6 +155,7 @@ describe('Ember Request Queue', () => {
153
155
//@ts -expect-error private
154
156
expect ( requestQueue . queue ) . toHaveLength ( 0 ) ; // no longer in queue
155
157
} ) ;
158
+
156
159
it ( 'Queues request, rejects it on throw, and removes it from queue' , async ( ) => {
157
160
const enqueueSpy = jest . spyOn ( requestQueue , 'enqueue' ) ;
158
161
@@ -181,17 +184,17 @@ describe('Ember Request Queue', () => {
181
184
//@ts -expect-error private
182
185
expect ( requestQueue . queue ) . toHaveLength ( 1 ) ;
183
186
184
- requestQueue . dispatch ( ) ; // don't await so we can advance timer
185
-
186
- jest . advanceTimersByTime ( fakeWaitTime + 100 ) ;
187
+ requestQueue . startDispatching ( ) ;
187
188
189
+ jest . advanceTimersByTime ( fakeWaitTime + 20 ) ;
188
190
await expect ( p ) . rejects . toStrictEqual ( new Error ( EzspStatus [ EzspStatus . ASH_ACK_TIMEOUT ] ) ) ;
189
191
190
192
expect ( funcSpy ) . toHaveBeenCalledTimes ( 1 ) ;
191
193
expect ( funcRejectSpy ) . toHaveBeenCalledTimes ( 1 ) ;
192
194
//@ts -expect-error private
193
195
expect ( requestQueue . queue ) . toHaveLength ( 0 ) ; // no longer in queue
194
196
} ) ;
197
+
195
198
it ( 'Queues request, defers on NETWORK_BUSY and defers again on NETWORK_DOWN' , async ( ) => {
196
199
const enqueueSpy = jest . spyOn ( requestQueue , 'enqueue' ) ;
197
200
@@ -220,30 +223,29 @@ describe('Ember Request Queue', () => {
220
223
expect ( requestQueue . queue ) . toHaveLength ( 1 ) ; // enqueued
221
224
222
225
223
- requestQueue . dispatch ( ) ; // don't await so we can advance timer
226
+ requestQueue . startDispatching ( ) ;
224
227
225
- await jest . advanceTimersByTimeAsync ( fakeWaitTime + 100 + ( NETWORK_BUSY_DEFER_MSEC * 0.25 ) ) ;
228
+ await jest . advanceTimersByTimeAsync ( fakeWaitTime + 20 + ( NETWORK_BUSY_DEFER_MSEC * 0.25 ) ) ;
226
229
227
230
expect ( deferSpy ) . toHaveBeenCalledTimes ( 1 ) ;
228
231
expect ( funcSpy ) . toHaveBeenCalledTimes ( 1 ) ;
229
232
//@ts -expect-error private
230
233
expect ( requestQueue . queue ) . toHaveLength ( 1 ) ; // still in queue
231
234
232
- await jest . advanceTimersByTimeAsync ( NETWORK_BUSY_DEFER_MSEC + 100 ) ;
235
+ await jest . advanceTimersByTimeAsync ( NETWORK_BUSY_DEFER_MSEC + 20 ) ;
233
236
234
237
varyingReturn = EmberStatus . NETWORK_DOWN ;
235
238
236
- requestQueue . dispatch ( ) ; // don't await so we can advance timer
237
-
238
- await jest . advanceTimersByTimeAsync ( fakeWaitTime + 100 + ( NETWORK_DOWN_DEFER_MSEC * 0.25 ) ) ;
239
+ await jest . advanceTimersByTimeAsync ( fakeWaitTime + 20 + ( NETWORK_DOWN_DEFER_MSEC * 0.25 ) ) ;
239
240
240
241
expect ( deferSpy ) . toHaveBeenCalledTimes ( 2 ) ;
241
242
expect ( funcSpy ) . toHaveBeenCalledTimes ( 2 ) ; // dispatch x2, func called x2
242
243
//@ts -expect-error private
243
244
expect ( requestQueue . queue ) . toHaveLength ( 1 ) ; // still in queue
244
245
245
- await jest . advanceTimersByTimeAsync ( NETWORK_DOWN_DEFER_MSEC + 100 ) ;
246
+ await jest . advanceTimersByTimeAsync ( NETWORK_DOWN_DEFER_MSEC + 20 ) ;
246
247
} ) ;
248
+
247
249
it ( 'Queues request, defers on NETWORK_BUSY and then resolves it' , async ( ) => {
248
250
const enqueueSpy = jest . spyOn ( requestQueue , 'enqueue' ) ;
249
251
@@ -271,29 +273,28 @@ describe('Ember Request Queue', () => {
271
273
//@ts -expect-error private
272
274
expect ( requestQueue . queue ) . toHaveLength ( 1 ) ; // enqueued
273
275
274
- requestQueue . dispatch ( ) ; // don't await so we can advance timer
276
+ requestQueue . startDispatching ( ) ;
275
277
276
- await jest . advanceTimersByTimeAsync ( fakeWaitTime + 100 + ( NETWORK_BUSY_DEFER_MSEC * 0.25 ) ) ;
278
+ await jest . advanceTimersByTimeAsync ( fakeWaitTime + 20 + ( NETWORK_BUSY_DEFER_MSEC * 0.25 ) ) ;
277
279
278
280
expect ( deferSpy ) . toHaveBeenCalledTimes ( 1 ) ;
279
281
expect ( funcSpy ) . toHaveBeenCalledTimes ( 1 ) ;
280
282
//@ts -expect-error private
281
283
expect ( requestQueue . queue ) . toHaveLength ( 1 ) ; // still in queue
282
284
283
- await jest . advanceTimersByTimeAsync ( NETWORK_BUSY_DEFER_MSEC + 100 ) ;
285
+ await jest . advanceTimersByTimeAsync ( NETWORK_BUSY_DEFER_MSEC + 20 ) ;
284
286
285
287
varyingReturn = EmberStatus . SUCCESS ;
286
288
287
- requestQueue . dispatch ( ) ; // don't await so we can advance timer
288
-
289
- await jest . advanceTimersByTimeAsync ( fakeWaitTime + 100 ) ;
289
+ await jest . advanceTimersByTimeAsync ( fakeWaitTime + 20 ) ;
290
290
291
291
await expect ( p ) . resolves . toBe ( 123 ) ; // gives result of resolve
292
292
293
293
expect ( funcSpy ) . toHaveBeenCalledTimes ( 2 ) ; // enqueued func was called
294
294
//@ts -expect-error private
295
295
expect ( requestQueue . queue ) . toHaveLength ( 0 ) ; // no longer in queue
296
296
} ) ;
297
+
297
298
it ( 'Queues request, defers on NETWORK_BUSY and only retries once after internal change' , async ( ) => {
298
299
const enqueueSpy = jest . spyOn ( requestQueue , 'enqueue' ) ;
299
300
@@ -323,27 +324,26 @@ describe('Ember Request Queue', () => {
323
324
//@ts -expect-error private
324
325
expect ( requestQueue . queue ) . toHaveLength ( 1 ) ; // enqueued
325
326
326
- requestQueue . dispatch ( ) ; // don't await so we can advance timer
327
+ requestQueue . startDispatching ( ) ;
327
328
328
- await jest . advanceTimersByTimeAsync ( fakeWaitTime + 100 + ( NETWORK_BUSY_DEFER_MSEC * 0.25 ) ) ;
329
+ await jest . advanceTimersByTimeAsync ( fakeWaitTime + 20 + ( NETWORK_BUSY_DEFER_MSEC * 0.25 ) ) ;
329
330
330
331
expect ( deferSpy ) . toHaveBeenCalledTimes ( 1 ) ;
331
332
expect ( funcSpy ) . toHaveBeenCalledTimes ( 1 ) ;
332
333
//@ts -expect-error private
333
334
expect ( requestQueue . queue ) . toHaveLength ( 1 ) ; // still in queue
334
335
335
- await jest . advanceTimersByTimeAsync ( NETWORK_BUSY_DEFER_MSEC + 100 ) ;
336
-
337
- requestQueue . dispatch ( ) ; // don't await so we can advance timer
336
+ await jest . advanceTimersByTimeAsync ( NETWORK_BUSY_DEFER_MSEC + 20 ) ;
338
337
339
- await jest . advanceTimersByTimeAsync ( fakeWaitTime + 100 ) ;
338
+ await jest . advanceTimersByTimeAsync ( fakeWaitTime + 20 ) ;
340
339
341
340
await expect ( p ) . resolves . toBe ( 123 ) ; // gives result of resolve
342
341
343
342
expect ( funcSpy ) . toHaveBeenCalledTimes ( 2 ) ; // enqueued func was called
344
343
//@ts -expect-error private
345
344
expect ( requestQueue . queue ) . toHaveLength ( 0 ) ; // no longer in queue
346
345
} ) ;
346
+
347
347
it ( 'Queues request, defers on thrown NETWORK_BUSY' , async ( ) => {
348
348
const enqueueSpy = jest . spyOn ( requestQueue , 'enqueue' ) ;
349
349
@@ -370,17 +370,18 @@ describe('Ember Request Queue', () => {
370
370
//@ts -expect-error private
371
371
expect ( requestQueue . queue ) . toHaveLength ( 1 ) ; // enqueued
372
372
373
- requestQueue . dispatch ( ) ; // don't await so we can advance timer
373
+ requestQueue . startDispatching ( ) ;
374
374
375
- await jest . advanceTimersByTimeAsync ( fakeWaitTime + 100 + ( NETWORK_BUSY_DEFER_MSEC * 0.25 ) ) ;
375
+ await jest . advanceTimersByTimeAsync ( fakeWaitTime + 20 + ( NETWORK_BUSY_DEFER_MSEC * 0.25 ) ) ;
376
376
377
377
expect ( deferSpy ) . toHaveBeenCalledTimes ( 1 ) ;
378
378
expect ( funcSpy ) . toHaveBeenCalledTimes ( 1 ) ;
379
379
//@ts -expect-error private
380
380
expect ( requestQueue . queue ) . toHaveLength ( 1 ) ; // still in queue
381
381
382
- await jest . advanceTimersByTimeAsync ( NETWORK_BUSY_DEFER_MSEC + 100 ) ;
382
+ await jest . advanceTimersByTimeAsync ( NETWORK_BUSY_DEFER_MSEC + 20 ) ;
383
383
} ) ;
384
+
384
385
it ( 'Queues request and resolves by priority' , async ( ) => {
385
386
const enqueueSpy = jest . spyOn ( requestQueue , 'enqueue' ) ;
386
387
@@ -429,9 +430,9 @@ describe('Ember Request Queue', () => {
429
430
//@ts -expect-error private
430
431
expect ( requestQueue . priorityQueue ) . toHaveLength ( 1 ) ;
431
432
432
- requestQueue . dispatch ( ) ; // don't await so we can advance timer
433
+ requestQueue . startDispatching ( ) ;
433
434
434
- jest . advanceTimersByTime ( fakeWaitTime + 100 ) ;
435
+ await jest . advanceTimersByTimeAsync ( fakeWaitTime + 1 ) ; // before 2nd setTimeout triggers
435
436
436
437
await expect ( pPrio ) . resolves . toBe ( 456 ) ; // gives result of resolve
437
438
@@ -442,161 +443,14 @@ describe('Ember Request Queue', () => {
442
443
//@ts -expect-error private
443
444
expect ( requestQueue . queue ) . toHaveLength ( 1 ) ; // still in queue
444
445
445
- requestQueue . dispatch ( ) ; // don't await so we can advance timer
446
-
447
- jest . advanceTimersByTime ( fakeWaitTime + 100 ) ;
446
+ await jest . advanceTimersByTimeAsync ( fakeWaitTime * 2 + 20 ) ;
448
447
449
448
await expect ( p ) . resolves . toBe ( 123 ) ; // gives result of resolve
450
449
451
450
expect ( funcSpy ) . toHaveBeenCalledTimes ( 1 ) ; // enqueued func was called
452
451
//@ts -expect-error private
453
452
expect ( requestQueue . queue ) . toHaveLength ( 0 ) ; // no longer in queue
454
453
} ) ;
455
- it ( 'Queues request send & forget style' , async ( ) => {
456
- const enqueueSpy = jest . spyOn ( requestQueue , 'enqueue' ) ;
457
-
458
- varyingReturn = EmberStatus . SUCCESS ;
459
-
460
- requestQueue . enqueue ( async ( ) : Promise < EmberStatus > => {
461
- const status : EmberStatus = await getVaryingReturn ( ) ;
462
-
463
- if ( status !== EmberStatus . SUCCESS ) {
464
- return status ;
465
- }
466
-
467
- return status ;
468
- } , ( ) => { } ) ;
469
-
470
- //@ts -expect-error private
471
- const funcSpy = jest . spyOn ( requestQueue . queue [ 0 ] , 'func' ) ;
472
- //@ts -expect-error private
473
- const funcRejectSpy = jest . spyOn ( requestQueue . queue [ 0 ] , 'reject' ) ;
474
-
475
- expect ( enqueueSpy ) . toHaveBeenCalledTimes ( 1 ) ;
476
- expect ( funcSpy ) . toHaveBeenCalledTimes ( 0 ) ;
477
- //@ts -expect-error private
478
- expect ( requestQueue . queue ) . toHaveLength ( 1 ) ;
479
-
480
- requestQueue . dispatch ( ) ; // don't await so we can advance timer
481
-
482
- await jest . advanceTimersByTimeAsync ( fakeWaitTime + 100 ) ;
483
-
484
- expect ( funcSpy ) . toHaveBeenCalledTimes ( 1 ) ; // enqueued func was called
485
- expect ( funcRejectSpy ) . toHaveBeenCalledTimes ( 0 ) ;
486
- //@ts -expect-error private
487
- expect ( requestQueue . queue ) . toHaveLength ( 0 ) ; // no longer in queue
488
- } ) ;
489
- it ( 'Queues request send & forget style that errors out silently' , async ( ) => {
490
- const enqueueSpy = jest . spyOn ( requestQueue , 'enqueue' ) ;
491
-
492
- varyingReturn = EmberStatus . ERR_FATAL ;
493
-
494
- requestQueue . enqueue ( async ( ) : Promise < EmberStatus > => {
495
- const status : EmberStatus = await getVaryingReturn ( ) ;
496
-
497
- if ( status !== EmberStatus . SUCCESS ) {
498
- return status ;
499
- }
500
-
501
- return status ;
502
- } , ( ) => { } ) ;
503
-
504
- //@ts -expect-error private
505
- const funcSpy = jest . spyOn ( requestQueue . queue [ 0 ] , 'func' ) ;
506
- //@ts -expect-error private
507
- const funcRejectSpy = jest . spyOn ( requestQueue . queue [ 0 ] , 'reject' ) ;
508
-
509
- expect ( enqueueSpy ) . toHaveBeenCalledTimes ( 1 ) ;
510
- expect ( funcSpy ) . toHaveBeenCalledTimes ( 0 ) ;
511
- //@ts -expect-error private
512
- expect ( requestQueue . queue ) . toHaveLength ( 1 ) ;
513
-
514
- requestQueue . dispatch ( ) ; // don't await so we can advance timer
515
-
516
- await jest . advanceTimersByTimeAsync ( fakeWaitTime + 100 ) ;
517
-
518
- expect ( funcSpy ) . toHaveBeenCalledTimes ( 1 ) ; // enqueued func was called
519
- expect ( funcRejectSpy ) . toHaveBeenCalledTimes ( 1 ) ;
520
- //@ts -expect-error private
521
- expect ( requestQueue . queue ) . toHaveLength ( 0 ) ; // no longer in queue
522
- } ) ;
523
- it ( 'Queues request send & forget style that throws silently' , async ( ) => {
524
- const enqueueSpy = jest . spyOn ( requestQueue , 'enqueue' ) ;
525
-
526
- requestQueue . enqueue ( async ( ) : Promise < EmberStatus > => {
527
- const status : EmberStatus = await getThrownError ( ) ;
528
-
529
- if ( status !== EmberStatus . SUCCESS ) {
530
- return status ;
531
- }
532
-
533
- return status ;
534
- } , ( ) => { } ) ;
535
-
536
- //@ts -expect-error private
537
- const funcSpy = jest . spyOn ( requestQueue . queue [ 0 ] , 'func' ) ;
538
- //@ts -expect-error private
539
- const funcRejectSpy = jest . spyOn ( requestQueue . queue [ 0 ] , 'reject' ) ;
540
-
541
- expect ( enqueueSpy ) . toHaveBeenCalledTimes ( 1 ) ;
542
- expect ( funcSpy ) . toHaveBeenCalledTimes ( 0 ) ;
543
- //@ts -expect-error private
544
- expect ( requestQueue . queue ) . toHaveLength ( 1 ) ;
545
-
546
- requestQueue . dispatch ( ) ; // don't await so we can advance timer
547
-
548
- await jest . advanceTimersByTimeAsync ( fakeWaitTime + 100 ) ;
549
-
550
- expect ( funcSpy ) . toHaveBeenCalledTimes ( 1 ) ; // enqueued func was called
551
- expect ( funcRejectSpy ) . toHaveBeenCalledTimes ( 1 ) ;
552
- //@ts -expect-error private
553
- expect ( requestQueue . queue ) . toHaveLength ( 0 ) ; // no longer in queue
554
- } ) ;
555
- it ( 'Queues request send & forget style that throws NETWORK_DOWN silently and retries' , async ( ) => {
556
- const enqueueSpy = jest . spyOn ( requestQueue , 'enqueue' ) ;
557
-
558
- requestQueue . enqueue ( async ( ) : Promise < EmberStatus > => {
559
- const status : EmberStatus = await getThrowNetworkDown ( ) ;
560
-
561
- if ( status !== EmberStatus . SUCCESS ) {
562
- return status ;
563
- }
564
-
565
- return status ;
566
- } , ( ) => { } ) ;
567
-
568
- //@ts -expect-error private
569
- const funcSpy = jest . spyOn ( requestQueue . queue [ 0 ] , 'func' ) ;
570
- //@ts -expect-error private
571
- const funcRejectSpy = jest . spyOn ( requestQueue . queue [ 0 ] , 'reject' ) ;
572
-
573
- expect ( enqueueSpy ) . toHaveBeenCalledTimes ( 1 ) ;
574
- expect ( funcSpy ) . toHaveBeenCalledTimes ( 0 ) ;
575
- //@ts -expect-error private
576
- expect ( requestQueue . queue ) . toHaveLength ( 1 ) ;
577
-
578
- requestQueue . dispatch ( ) ; // don't await so we can advance timer
579
-
580
- await jest . advanceTimersByTimeAsync ( fakeWaitTime + 100 ) ;
581
-
582
- expect ( funcSpy ) . toHaveBeenCalledTimes ( 1 ) ; // enqueued func was called
583
- expect ( funcRejectSpy ) . toHaveBeenCalledTimes ( 0 ) ;
584
- //@ts -expect-error private
585
- expect ( requestQueue . queue ) . toHaveLength ( 1 ) ; // still in queue
586
-
587
- await jest . advanceTimersByTimeAsync ( NETWORK_DOWN_DEFER_MSEC * 2 ) ;
588
-
589
- requestQueue . dispatch ( ) ; // don't await so we can advance timer
590
-
591
- await jest . advanceTimersByTimeAsync ( fakeWaitTime + 100 ) ;
592
-
593
- expect ( funcSpy ) . toHaveBeenCalledTimes ( 2 ) ; // enqueued func was called
594
- expect ( funcRejectSpy ) . toHaveBeenCalledTimes ( 0 ) ;
595
- //@ts -expect-error private
596
- expect ( requestQueue . queue ) . toHaveLength ( 1 ) ; // still in queue
597
-
598
- await jest . advanceTimersByTimeAsync ( NETWORK_DOWN_DEFER_MSEC * 2 ) ;
599
- } ) ;
600
454
601
455
it ( 'In-class queues also work, just for kicks...' , async ( ) => {
602
456
const t = new TestThis ( ) ;
@@ -605,8 +459,8 @@ describe('Ember Request Queue', () => {
605
459
606
460
const tBS = t . getNewBS ( ) ;
607
461
608
- t . q . dispatch ( ) ; // don't await so we can advance timer
609
- jest . advanceTimersByTime ( fakeWaitTime + 100 ) ;
462
+ t . q . startDispatching ( ) ;
463
+ jest . advanceTimersByTime ( fakeWaitTime + 20 ) ;
610
464
611
465
await expect ( tBS ) . resolves . toBeTruthy ( ) ;
612
466
} )
0 commit comments