@@ -165,6 +165,64 @@ describe('Primary API', () => {
165
165
expect ( loadCalls ) . to . deep . equal ( [ [ 'A' , 'B' ] , [ 'A' , 'B' ] ] ) ;
166
166
} ) ;
167
167
168
+ it ( 'allows priming the cache' , async ( ) => {
169
+ var [ identityLoader , loadCalls ] = idLoader ( ) ;
170
+
171
+ identityLoader . prime ( 'A' , 'A' ) ;
172
+
173
+ var [ a , b ] = await Promise . all ( [
174
+ identityLoader . load ( 'A' ) ,
175
+ identityLoader . load ( 'B' )
176
+ ] ) ;
177
+
178
+ expect ( a ) . to . equal ( 'A' ) ;
179
+ expect ( b ) . to . equal ( 'B' ) ;
180
+
181
+ expect ( loadCalls ) . to . deep . equal ( [ [ 'B' ] ] ) ;
182
+ } ) ;
183
+
184
+ it ( 'does not prime keys that already exist' , async ( ) => {
185
+ var [ identityLoader , loadCalls ] = idLoader ( ) ;
186
+
187
+ identityLoader . prime ( 'A' , 'X' ) ;
188
+
189
+ var a1 = await identityLoader . load ( 'A' ) ;
190
+ var b1 = await identityLoader . load ( 'B' ) ;
191
+ expect ( a1 ) . to . equal ( 'X' ) ;
192
+ expect ( b1 ) . to . equal ( 'B' ) ;
193
+
194
+ identityLoader . prime ( 'A' , 'Y' ) ;
195
+ identityLoader . prime ( 'B' , 'Y' ) ;
196
+
197
+ var a2 = await identityLoader . load ( 'A' ) ;
198
+ var b2 = await identityLoader . load ( 'B' ) ;
199
+ expect ( a2 ) . to . equal ( 'X' ) ;
200
+ expect ( b2 ) . to . equal ( 'B' ) ;
201
+
202
+ expect ( loadCalls ) . to . deep . equal ( [ [ 'B' ] ] ) ;
203
+ } ) ;
204
+
205
+ it ( 'allows forcefully priming the cache' , async ( ) => {
206
+ var [ identityLoader , loadCalls ] = idLoader ( ) ;
207
+
208
+ identityLoader . prime ( 'A' , 'X' ) ;
209
+
210
+ var a1 = await identityLoader . load ( 'A' ) ;
211
+ var b1 = await identityLoader . load ( 'B' ) ;
212
+ expect ( a1 ) . to . equal ( 'X' ) ;
213
+ expect ( b1 ) . to . equal ( 'B' ) ;
214
+
215
+ identityLoader . clear ( 'A' ) . prime ( 'A' , 'Y' ) ;
216
+ identityLoader . clear ( 'B' ) . prime ( 'B' , 'Y' ) ;
217
+
218
+ var a2 = await identityLoader . load ( 'A' ) ;
219
+ var b2 = await identityLoader . load ( 'B' ) ;
220
+ expect ( a2 ) . to . equal ( 'Y' ) ;
221
+ expect ( b2 ) . to . equal ( 'Y' ) ;
222
+
223
+ expect ( loadCalls ) . to . deep . equal ( [ [ 'B' ] ] ) ;
224
+ } ) ;
225
+
168
226
} ) ;
169
227
170
228
describe ( 'Represents Errors' , ( ) => {
@@ -249,6 +307,23 @@ describe('Represents Errors', () => {
249
307
expect ( loadCalls ) . to . deep . equal ( [ [ 1 ] ] ) ;
250
308
} ) ;
251
309
310
+ it ( 'Handles priming the cache with an error' , async ( ) => {
311
+ var [ identityLoader , loadCalls ] = idLoader ( ) ;
312
+
313
+ identityLoader . prime ( 1 , new Error ( 'Error: 1' ) ) ;
314
+
315
+ var caughtErrorA ;
316
+ try {
317
+ await identityLoader . load ( 1 ) ;
318
+ } catch ( error ) {
319
+ caughtErrorA = error ;
320
+ }
321
+ expect ( caughtErrorA ) . to . be . instanceof ( Error ) ;
322
+ expect ( ( caughtErrorA : any ) . message ) . to . equal ( 'Error: 1' ) ;
323
+
324
+ expect ( loadCalls ) . to . deep . equal ( [ ] ) ;
325
+ } ) ;
326
+
252
327
it ( 'Can clear values from cache after errors' , async ( ) => {
253
328
var loadCalls = [ ] ;
254
329
var errorLoader = new DataLoader ( keys => {
@@ -485,6 +560,22 @@ describe('Accepts options', () => {
485
560
expect ( identityLoadCalls [ 0 ] [ 0 ] ) . to . equal ( keyA ) ;
486
561
} ) ;
487
562
563
+ it ( 'Allows priming the cache with an object key' , async ( ) => {
564
+ var [ identityLoader , loadCalls ] = idLoader ( { cacheKeyFn : cacheKey } ) ;
565
+
566
+ var key1 = { id : 123 } ;
567
+ var key2 = { id : 123 } ;
568
+
569
+ identityLoader . prime ( key1 , key1 ) ;
570
+
571
+ var value1 = await identityLoader . load ( key1 ) ;
572
+ var value2 = await identityLoader . load ( key2 ) ;
573
+
574
+ expect ( loadCalls ) . to . deep . equal ( [ ] ) ;
575
+ expect ( value1 ) . to . equal ( key1 ) ;
576
+ expect ( value2 ) . to . equal ( key1 ) ;
577
+ } ) ;
578
+
488
579
} ) ;
489
580
490
581
describe ( 'Accepts custom cacheMap instance' , ( ) => {
0 commit comments