@@ -360,6 +360,19 @@ describe('Loader Main', () => {
360360 } )
361361 } )
362362
363+ describe ( 'constructor' , ( ) => {
364+ it ( 'throws an error if both datasource and datasource fns are provided' , ( ) => {
365+ expect ( ( ) => {
366+ new Loader ( {
367+ dataSources : [ ] ,
368+ dataSourceGetOneFn : ( ) => {
369+ return Promise . resolve ( 'x' )
370+ } ,
371+ } )
372+ } ) . toThrow ( / C a n n o t s e t b o t h / )
373+ } )
374+ } )
375+
363376 describe ( 'get' , ( ) => {
364377 it ( 'returns undefined when fails to resolve value' , async ( ) => {
365378 const operation = new Loader ( { } )
@@ -461,6 +474,36 @@ describe('Loader Main', () => {
461474 expect ( result ) . toBe ( 'value' )
462475 } )
463476
477+ it ( 'returns value when resolved via generated loader' , async ( ) => {
478+ const operation = new Loader < string > ( {
479+ inMemoryCache : IN_MEMORY_CACHE_CONFIG ,
480+ dataSourceGetOneFn : ( key ) => {
481+ if ( key === 'key' ) {
482+ return Promise . resolve ( 'value' )
483+ }
484+ throw new Error ( 'Not found' )
485+ } ,
486+ } )
487+
488+ const result = await operation . get ( 'key' )
489+
490+ expect ( result ) . toBe ( 'value' )
491+ } )
492+
493+ it ( 'throws an error if requested generated loader is not set' , async ( ) => {
494+ const operation = new Loader < string > ( {
495+ inMemoryCache : IN_MEMORY_CACHE_CONFIG ,
496+ dataSourceGetManyFn : ( keys ) => {
497+ if ( keys [ 0 ] === 'key' ) {
498+ return Promise . resolve ( [ 'value' ] )
499+ }
500+ throw new Error ( 'Not found' )
501+ } ,
502+ } )
503+
504+ await expect ( operation . get ( 'key' ) ) . rejects . toThrow ( / R e t r i e v a l o f a s i n g l e e n t i t y i s n o t / )
505+ } )
506+
464507 it ( 'returns value when resolved via multiple loaders' , async ( ) => {
465508 const asyncCache = new DummyCache ( undefined )
466509
@@ -664,6 +707,37 @@ describe('Loader Main', () => {
664707 expect ( result ) . toEqual ( [ 'value' ] )
665708 } )
666709
710+ it ( 'returns value when resolved via generated loader' , async ( ) => {
711+ const operation = new Loader < string > ( {
712+ inMemoryCache : IN_MEMORY_CACHE_CONFIG ,
713+ dataSourceGetManyFn : ( keys : string [ ] ) => {
714+ if ( keys . includes ( 'key' ) ) {
715+ return Promise . resolve ( [ 'value' ] )
716+ }
717+
718+ throw new Error ( 'Not found' )
719+ } ,
720+ } )
721+
722+ const result = await operation . getMany ( [ 'key' ] , idResolver )
723+
724+ expect ( result ) . toEqual ( [ 'value' ] )
725+ } )
726+
727+ it ( 'throws an error if requested generated loader is not set' , async ( ) => {
728+ const operation = new Loader < string > ( {
729+ inMemoryCache : IN_MEMORY_CACHE_CONFIG ,
730+ dataSourceGetOneFn : ( key ) => {
731+ if ( key === 'key' ) {
732+ return Promise . resolve ( 'value' )
733+ }
734+ throw new Error ( 'Not found' )
735+ } ,
736+ } )
737+
738+ await expect ( operation . getMany ( [ 'key' ] , idResolver ) ) . rejects . toThrow ( / R e t r i e v a l o f m u l t i p l e e n t i t i e s / )
739+ } )
740+
667741 it ( 'returns value when resolved via multiple caches' , async ( ) => {
668742 const asyncCache = new DummyCache ( undefined )
669743
0 commit comments