@@ -20,6 +20,11 @@ describe('redis-dataloader', () => {
2020 redis . set ( k , v , ( err , resp ) => ( err ? reject ( err ) : resolve ( resp ) ) )
2121 ) ;
2222
23+ this . rGet = k =>
24+ new Promise ( ( resolve , reject ) => {
25+ redis . get ( k , ( err , resp ) => ( err ? rejecte ( err ) : resolve ( resp ) ) ) ;
26+ } ) ;
27+
2328 this . keySpace = 'key-space' ;
2429 this . data = {
2530 json : { foo : 'bar' } ,
@@ -34,13 +39,22 @@ describe('redis-dataloader', () => {
3439 this . loadFn . withArgs ( k ) . returns ( Promise . resolve ( v ) ) ;
3540 } ) ;
3641
42+ this . loadFn
43+ . withArgs ( sinon . match ( { a : 1 , b : 2 } ) )
44+ . returns ( Promise . resolve ( { bar : 'baz' } ) ) ;
45+
46+ this . loadFn
47+ . withArgs ( sinon . match ( [ 1 , 2 ] ) )
48+ . returns ( Promise . resolve ( { ball : 'bat' } ) ) ;
49+
3750 this . userLoader = ( ) =>
3851 new DataLoader ( keys => Promise . map ( keys , this . loadFn ) , {
3952 cache : false ,
4053 } ) ;
4154
42- return Promise . map ( _ . keys ( this . data ) , k =>
43- rDel ( `${ this . keySpace } :${ k } ` )
55+ return Promise . map (
56+ _ . keys ( this . data ) . concat ( [ '{"a":1,"b":2}' , '[1,2]' ] ) ,
57+ k => rDel ( `${ this . keySpace } :${ k } ` )
4458 ) . then ( ( ) => {
4559 this . loader = new RedisDataLoader ( this . keySpace , this . userLoader ( ) ) ;
4660 this . noCacheLoader = new RedisDataLoader (
@@ -61,6 +75,39 @@ describe('redis-dataloader', () => {
6175 expect ( data ) . to . deep . equal ( this . data . json ) ;
6276 } ) ) ;
6377
78+ it ( 'should allow for object key' , ( ) =>
79+ this . loader
80+ . load ( { a : 1 , b : 2 } )
81+ . then ( data => {
82+ expect ( data ) . to . deep . equal ( { bar : 'baz' } ) ;
83+ return this . rGet ( `${ this . keySpace } :{"a":1,"b":2}` ) ;
84+ } )
85+ . then ( data => {
86+ expect ( JSON . parse ( data ) ) . to . deep . equal ( { bar : 'baz' } ) ;
87+ } ) ) ;
88+
89+ it ( 'should ignore key order on object key' , ( ) =>
90+ this . loader
91+ . load ( { b : 2 , a : 1 } )
92+ . then ( data => {
93+ expect ( data ) . to . deep . equal ( { bar : 'baz' } ) ;
94+ return this . rGet ( `${ this . keySpace } :{"a":1,"b":2}` ) ;
95+ } )
96+ . then ( data => {
97+ expect ( JSON . parse ( data ) ) . to . deep . equal ( { bar : 'baz' } ) ;
98+ } ) ) ;
99+
100+ it ( 'should handle key that is array' , ( ) =>
101+ this . loader
102+ . load ( [ 1 , 2 ] )
103+ . then ( data => {
104+ expect ( data ) . to . deep . equal ( { ball : 'bat' } ) ;
105+ return this . rGet ( `${ this . keySpace } :[1,2]` ) ;
106+ } )
107+ . then ( data => {
108+ expect ( JSON . parse ( data ) ) . to . deep . equal ( { ball : 'bat' } ) ;
109+ } ) ) ;
110+
64111 it ( 'should require key' , ( ) =>
65112 expect ( this . loader . load ( ) ) . to . be . rejectedWith ( TypeError ) ) ;
66113
@@ -166,6 +213,11 @@ describe('redis-dataloader', () => {
166213 expect ( results ) . to . deep . equal ( [ this . data . json , this . data . null ] ) ;
167214 } ) ) ;
168215
216+ it ( 'should handle object key' , ( ) =>
217+ this . loader . loadMany ( [ { a : 1 , b : 2 } ] ) . then ( results => {
218+ expect ( results ) . to . deep . equal ( [ { bar : 'baz' } ] ) ;
219+ } ) ) ;
220+
169221 it ( 'should handle empty array' , ( ) =>
170222 this . loader . loadMany ( [ ] ) . then ( results => {
171223 expect ( results ) . to . deep . equal ( [ ] ) ;
@@ -184,6 +236,14 @@ describe('redis-dataloader', () => {
184236 expect ( data ) . to . deep . equal ( { new : 'value' } ) ;
185237 } ) ) ;
186238
239+ it ( 'should handle object key' , ( ) =>
240+ this . loader
241+ . prime ( { a : 1 , b : 2 } , { new : 'val' } )
242+ . then ( ( ) => this . loader . load ( { a : 1 , b : 2 } ) )
243+ . then ( data => {
244+ expect ( data ) . to . deep . equal ( { new : 'val' } ) ;
245+ } ) ) ;
246+
187247 it ( 'should handle primeing without local cache' , ( ) =>
188248 this . noCacheLoader
189249 . prime ( 'json' , { new : 'value' } )
@@ -220,6 +280,16 @@ describe('redis-dataloader', () => {
220280 expect ( this . loadFn . callCount ) . to . equal ( 2 ) ;
221281 } ) ) ;
222282
283+ it ( 'should handle object key' , ( ) =>
284+ this . loader
285+ . load ( { a : 1 , b : 2 } )
286+ . then ( ( ) => this . loader . clear ( { a : 1 , b : 2 } ) )
287+ . then ( ( ) => this . loader . load ( { a : 1 , b : 2 } ) )
288+ . then ( data => {
289+ expect ( data ) . to . deep . equal ( { bar : 'baz' } ) ;
290+ expect ( this . loadFn . callCount ) . to . equal ( 2 ) ;
291+ } ) ) ;
292+
223293 it ( 'should require a key' , ( ) =>
224294 expect ( this . loader . clear ( ) ) . to . be . rejectedWith ( TypeError ) ) ;
225295 } ) ;
0 commit comments