32
32
import java .util .concurrent .atomic .AtomicBoolean ;
33
33
import java .util .stream .Collectors ;
34
34
35
+ import static java .util .Arrays .asList ;
35
36
import static org .awaitility .Awaitility .await ;
36
37
import static org .hamcrest .Matchers .*;
37
38
import static org .junit .Assert .assertArrayEquals ;
@@ -85,14 +86,14 @@ public void should_Support_loading_multiple_keys_in_one_call() {
85
86
.map (Future ::succeededFuture )
86
87
.collect (Collectors .toCollection (ArrayList ::new ))));
87
88
88
- CompositeFuture futureAll = identityLoader .loadMany (Arrays . asList (1 , 2 ));
89
+ CompositeFuture futureAll = identityLoader .loadMany (asList (1 , 2 ));
89
90
futureAll .setHandler (rh -> {
90
91
assertThat (rh .result ().size (), is (2 ));
91
92
success .set (rh .succeeded ());
92
93
});
93
94
identityLoader .dispatch ();
94
95
await ().untilAtomic (success , is (true ));
95
- assertThat (futureAll .list (), equalTo (Arrays . asList (1 , 2 )));
96
+ assertThat (futureAll .list (), equalTo (asList (1 , 2 )));
96
97
}
97
98
98
99
@ Test
@@ -120,7 +121,7 @@ public void should_Batch_multiple_requests() {
120
121
await ().until (() -> future1 .isComplete () && future2 .isComplete ());
121
122
assertThat (future1 .result (), equalTo (1 ));
122
123
assertThat (future2 .result (), equalTo (2 ));
123
- assertThat (loadCalls , equalTo (Collections .singletonList (Arrays . asList (1 , 2 ))));
124
+ assertThat (loadCalls , equalTo (Collections .singletonList (asList (1 , 2 ))));
124
125
}
125
126
126
127
@ Test
@@ -151,7 +152,7 @@ public void should_Cache_repeated_requests() {
151
152
await ().until (() -> future1 .isComplete () && future2 .isComplete ());
152
153
assertThat (future1 .result (), equalTo ("A" ));
153
154
assertThat (future2 .result (), equalTo ("B" ));
154
- assertThat (loadCalls , equalTo (Collections .singletonList (Arrays . asList ("A" , "B" ))));
155
+ assertThat (loadCalls , equalTo (Collections .singletonList (asList ("A" , "B" ))));
155
156
156
157
Future <String > future1a = identityLoader .load ("A" );
157
158
Future <String > future3 = identityLoader .load ("C" );
@@ -160,7 +161,7 @@ public void should_Cache_repeated_requests() {
160
161
await ().until (() -> future1a .isComplete () && future3 .isComplete ());
161
162
assertThat (future1a .result (), equalTo ("A" ));
162
163
assertThat (future3 .result (), equalTo ("C" ));
163
- assertThat (loadCalls , equalTo (Arrays . asList (Arrays . asList ("A" , "B" ), Collections .singletonList ("C" ))));
164
+ assertThat (loadCalls , equalTo (asList (asList ("A" , "B" ), Collections .singletonList ("C" ))));
164
165
165
166
Future <String > future1b = identityLoader .load ("A" );
166
167
Future <String > future2a = identityLoader .load ("B" );
@@ -171,7 +172,41 @@ public void should_Cache_repeated_requests() {
171
172
assertThat (future1b .result (), equalTo ("A" ));
172
173
assertThat (future2a .result (), equalTo ("B" ));
173
174
assertThat (future3a .result (), equalTo ("C" ));
174
- assertThat (loadCalls , equalTo (Arrays .asList (Arrays .asList ("A" , "B" ), Collections .singletonList ("C" ))));
175
+ assertThat (loadCalls , equalTo (asList (asList ("A" , "B" ), Collections .singletonList ("C" ))));
176
+ }
177
+
178
+ @ Test
179
+ public void should_Not_redispatch_previous_load () {
180
+ ArrayList <Collection > loadCalls = new ArrayList <>();
181
+ DataLoader <String , String > identityLoader = idLoader (new DataLoaderOptions (), loadCalls );
182
+
183
+ Future <String > future1 = identityLoader .load ("A" );
184
+ identityLoader .dispatch ();
185
+
186
+ Future <String > future2 = identityLoader .load ("B" );
187
+ identityLoader .dispatch ();
188
+
189
+ await ().until (() -> future1 .isComplete () && future2 .isComplete ());
190
+ assertThat (future1 .result (), equalTo ("A" ));
191
+ assertThat (future2 .result (), equalTo ("B" ));
192
+ assertThat (loadCalls , equalTo (asList (asList ("A" ), asList ("B" ))));
193
+ }
194
+
195
+ @ Test
196
+ public void should_Cache_on_redispatch () {
197
+ ArrayList <Collection > loadCalls = new ArrayList <>();
198
+ DataLoader <String , String > identityLoader = idLoader (new DataLoaderOptions (), loadCalls );
199
+
200
+ Future <String > future1 = identityLoader .load ("A" );
201
+ identityLoader .dispatch ();
202
+
203
+ CompositeFuture future2 = identityLoader .loadMany (asList ("A" , "B" ));
204
+ identityLoader .dispatch ();
205
+
206
+ await ().until (() -> future1 .isComplete () && future2 .isComplete ());
207
+ assertThat (future1 .result (), equalTo ("A" ));
208
+ assertThat (future2 .list (), equalTo (asList ("A" , "B" )));
209
+ assertThat (loadCalls , equalTo (asList (asList ("A" ), asList ("B" ))));
175
210
}
176
211
177
212
@ Test
@@ -186,7 +221,7 @@ public void should_Clear_single_value_in_loader() {
186
221
await ().until (() -> future1 .isComplete () && future2 .isComplete ());
187
222
assertThat (future1 .result (), equalTo ("A" ));
188
223
assertThat (future2 .result (), equalTo ("B" ));
189
- assertThat (loadCalls , equalTo (Collections .singletonList (Arrays . asList ("A" , "B" ))));
224
+ assertThat (loadCalls , equalTo (Collections .singletonList (asList ("A" , "B" ))));
190
225
191
226
identityLoader .clear ("A" );
192
227
@@ -197,7 +232,7 @@ public void should_Clear_single_value_in_loader() {
197
232
await ().until (() -> future1a .isComplete () && future2a .isComplete ());
198
233
assertThat (future1a .result (), equalTo ("A" ));
199
234
assertThat (future2a .result (), equalTo ("B" ));
200
- assertThat (loadCalls , equalTo (Arrays . asList (Arrays . asList ("A" , "B" ), Collections .singletonList ("A" ))));
235
+ assertThat (loadCalls , equalTo (asList (asList ("A" , "B" ), Collections .singletonList ("A" ))));
201
236
}
202
237
203
238
@ Test
@@ -212,7 +247,7 @@ public void should_Clear_all_values_in_loader() {
212
247
await ().until (() -> future1 .isComplete () && future2 .isComplete ());
213
248
assertThat (future1 .result (), equalTo ("A" ));
214
249
assertThat (future2 .result (), equalTo ("B" ));
215
- assertThat (loadCalls , equalTo (Collections .singletonList (Arrays . asList ("A" , "B" ))));
250
+ assertThat (loadCalls , equalTo (Collections .singletonList (asList ("A" , "B" ))));
216
251
217
252
identityLoader .clearAll ();
218
253
@@ -223,7 +258,7 @@ public void should_Clear_all_values_in_loader() {
223
258
await ().until (() -> future1a .isComplete () && future2a .isComplete ());
224
259
assertThat (future1a .result (), equalTo ("A" ));
225
260
assertThat (future2a .result (), equalTo ("B" ));
226
- assertThat (loadCalls , equalTo (Arrays . asList (Arrays . asList ("A" , "B" ), Arrays . asList ("A" , "B" ))));
261
+ assertThat (loadCalls , equalTo (asList (asList ("A" , "B" ), asList ("A" , "B" ))));
227
262
}
228
263
229
264
@ Test
@@ -316,7 +351,7 @@ public void should_Resolve_to_error_to_indicate_failure() {
316
351
317
352
await ().until (future2 ::isComplete );
318
353
assertThat (future2 .result (), equalTo (2 ));
319
- assertThat (loadCalls , equalTo (Arrays . asList (Collections .singletonList (1 ), Collections .singletonList (2 ))));
354
+ assertThat (loadCalls , equalTo (asList (Collections .singletonList (1 ), Collections .singletonList (2 ))));
320
355
}
321
356
322
357
@ Test
@@ -339,7 +374,7 @@ public void should_Represent_failures_and_successes_simultaneously() {
339
374
assertThat (future3 .failed (), is (true ));
340
375
assertThat (future4 .result (), equalTo (4 ));
341
376
342
- assertThat (loadCalls , equalTo (Collections .singletonList (Arrays . asList (1 , 2 , 3 , 4 ))));
377
+ assertThat (loadCalls , equalTo (Collections .singletonList (asList (1 , 2 , 3 , 4 ))));
343
378
}
344
379
345
380
@ Test
@@ -409,7 +444,7 @@ public void should_Clear_values_from_cache_after_errors() {
409
444
await ().until (future2 ::isComplete );
410
445
assertThat (future2 .failed (), is (true ));
411
446
assertThat (future2 .cause (), instanceOf (IllegalStateException .class ));
412
- assertThat (loadCalls , equalTo (Arrays . asList (Collections .singletonList (1 ), Collections .singletonList (1 ))));
447
+ assertThat (loadCalls , equalTo (asList (Collections .singletonList (1 ), Collections .singletonList (1 ))));
413
448
}
414
449
415
450
@ Test
@@ -430,7 +465,7 @@ public void should_Propagate_error_to_all_loads() {
430
465
await ().until (future2 ::isComplete );
431
466
cause = future2 .cause ();
432
467
assertThat (cause .getMessage (), equalTo (cause .getMessage ()));
433
- assertThat (loadCalls , equalTo (Collections .singletonList (Arrays . asList (1 , 2 ))));
468
+ assertThat (loadCalls , equalTo (Collections .singletonList (asList (1 , 2 ))));
434
469
}
435
470
436
471
// Accept any kind of key.
@@ -493,7 +528,7 @@ public void should_Disable_caching() {
493
528
await ().until (() -> future1 .isComplete () && future2 .isComplete ());
494
529
assertThat (future1 .result (), equalTo ("A" ));
495
530
assertThat (future2 .result (), equalTo ("B" ));
496
- assertThat (loadCalls , equalTo (Collections .singletonList (Arrays . asList ("A" , "B" ))));
531
+ assertThat (loadCalls , equalTo (Collections .singletonList (asList ("A" , "B" ))));
497
532
498
533
Future <String > future1a = identityLoader .load ("A" );
499
534
Future <String > future3 = identityLoader .load ("C" );
@@ -502,7 +537,7 @@ public void should_Disable_caching() {
502
537
await ().until (() -> future1a .isComplete () && future3 .isComplete ());
503
538
assertThat (future1a .result (), equalTo ("A" ));
504
539
assertThat (future3 .result (), equalTo ("C" ));
505
- assertThat (loadCalls , equalTo (Arrays . asList (Arrays . asList ("A" , "B" ), Arrays . asList ("A" , "C" ))));
540
+ assertThat (loadCalls , equalTo (asList (asList ("A" , "B" ), asList ("A" , "C" ))));
506
541
507
542
Future <String > future1b = identityLoader .load ("A" );
508
543
Future <String > future2a = identityLoader .load ("B" );
@@ -513,8 +548,8 @@ public void should_Disable_caching() {
513
548
assertThat (future1b .result (), equalTo ("A" ));
514
549
assertThat (future2a .result (), equalTo ("B" ));
515
550
assertThat (future3a .result (), equalTo ("C" ));
516
- assertThat (loadCalls , equalTo (Arrays . asList (Arrays . asList ("A" , "B" ),
517
- Arrays . asList ("A" , "C" ), Arrays . asList ("A" , "B" , "C" ))));
551
+ assertThat (loadCalls , equalTo (asList (asList ("A" , "B" ),
552
+ asList ("A" , "C" ), asList ("A" , "B" , "C" ))));
518
553
}
519
554
520
555
// Accepts object key in custom cacheKey function
@@ -557,7 +592,7 @@ public void should_Clear_objects_with_complex_key() {
557
592
identityLoader .dispatch ();
558
593
559
594
await ().until (future2 ::isComplete );
560
- assertThat (loadCalls , equalTo (Arrays . asList (Collections .singletonList (key1 ), Collections .singletonList (key1 ))));
595
+ assertThat (loadCalls , equalTo (asList (Collections .singletonList (key1 ), Collections .singletonList (key1 ))));
561
596
assertThat (future1 .result (), equalTo (key1 ));
562
597
assertThat (future2 .result (), equalTo (key1 ));
563
598
}
@@ -622,8 +657,8 @@ public void should_Accept_a_custom_cache_map_implementation() {
622
657
assertThat (future1 .result (), equalTo ("a" ));
623
658
assertThat (future2 .result (), equalTo ("b" ));
624
659
625
- assertThat (loadCalls , equalTo (Collections .singletonList (Arrays . asList ("a" , "b" ))));
626
- assertArrayEquals (customMap .stash .keySet ().toArray (), Arrays . asList ("a" , "b" ).toArray ());
660
+ assertThat (loadCalls , equalTo (Collections .singletonList (asList ("a" , "b" ))));
661
+ assertArrayEquals (customMap .stash .keySet ().toArray (), asList ("a" , "b" ).toArray ());
627
662
628
663
Future future3 = identityLoader .load ("c" );
629
664
Future future2a = identityLoader .load ("b" );
@@ -633,22 +668,22 @@ public void should_Accept_a_custom_cache_map_implementation() {
633
668
assertThat (future3 .result (), equalTo ("c" ));
634
669
assertThat (future2a .result (), equalTo ("b" ));
635
670
636
- assertThat (loadCalls , equalTo (Arrays . asList (Arrays . asList ("a" , "b" ), Collections .singletonList ("c" ))));
637
- assertArrayEquals (customMap .stash .keySet ().toArray (), Arrays . asList ("a" , "b" , "c" ).toArray ());
671
+ assertThat (loadCalls , equalTo (asList (asList ("a" , "b" ), Collections .singletonList ("c" ))));
672
+ assertArrayEquals (customMap .stash .keySet ().toArray (), asList ("a" , "b" , "c" ).toArray ());
638
673
639
674
// Supports clear
640
675
641
676
identityLoader .clear ("b" );
642
- assertArrayEquals (customMap .stash .keySet ().toArray (), Arrays . asList ("a" , "c" ).toArray ());
677
+ assertArrayEquals (customMap .stash .keySet ().toArray (), asList ("a" , "c" ).toArray ());
643
678
644
679
Future future2b = identityLoader .load ("b" );
645
680
composite = identityLoader .dispatch ();
646
681
647
682
await ().until ((Callable <Boolean >) composite ::isComplete );
648
683
assertThat (future2b .result (), equalTo ("b" ));
649
- assertThat (loadCalls , equalTo (Arrays . asList (Arrays . asList ("a" , "b" ),
684
+ assertThat (loadCalls , equalTo (asList (asList ("a" , "b" ),
650
685
Collections .singletonList ("c" ), Collections .singletonList ("b" ))));
651
- assertArrayEquals (customMap .stash .keySet ().toArray (), Arrays . asList ("a" , "c" , "b" ).toArray ());
686
+ assertArrayEquals (customMap .stash .keySet ().toArray (), asList ("a" , "c" , "b" ).toArray ());
652
687
653
688
// Supports clear all
654
689
@@ -678,7 +713,7 @@ public void should_Batch_loads_occurring_within_futures() {
678
713
679
714
await ().until ((Callable <Boolean >) composite ::isComplete );
680
715
assertThat (loadCalls , equalTo (
681
- Collections .singletonList (Arrays . asList ("a" , "b" , "c" , "d" ))));
716
+ Collections .singletonList (asList ("a" , "b" , "c" , "d" ))));
682
717
}
683
718
684
719
@ Test
0 commit comments