@@ -11,13 +11,25 @@ describe('RedisAccessor', () => {
1111
1212 test ( 'has expected instance properties' , async ( ) => {
1313 const instance = new RedisAccessor ( )
14- expect ( Object . keys ( instance ) . sort ( ) ) . toEqual ( [ '_allowSetFailures' , '_client' , '_prefix' ] )
14+ expect ( Object . keys ( instance ) . sort ( ) ) . toEqual ( [ '_allowGetFailures' , ' _allowSetFailures', '_client' , '_prefix' ] )
1515 } )
1616
1717 test ( 'has expected static methods' , async ( ) => {
1818 expect ( typeof RedisAccessor . translateSetArguments ) . toBe ( 'function' )
1919 } )
2020
21+ describe ( '#_allowGetFailures property' , ( ) => {
22+ test ( 'defaults to false' , async ( ) => {
23+ const instance = new RedisAccessor ( )
24+ expect ( instance . _allowGetFailures ) . toBe ( false )
25+ } )
26+
27+ test ( 'is expected value' , async ( ) => {
28+ const instance = new RedisAccessor ( { allowGetFailures : true } )
29+ expect ( instance . _allowGetFailures ) . toBe ( true )
30+ } )
31+ } )
32+
2133 describe ( '#_allowSetFailures property' , ( ) => {
2234 test ( 'defaults to false' , async ( ) => {
2335 const instance = new RedisAccessor ( )
@@ -299,5 +311,45 @@ Error: Redis ReplyError`
299311
300312 expect ( callbackSpy ) . toHaveBeenCalledWith ( null , 'myValue' )
301313 } )
314+
315+ test ( 'resolves to null if Redis replies with an error and `allowGetFailures` option is set to true' , async ( ) => {
316+ // Temporarily override `console.error`
317+ const consoleErrorSpy = jest . spyOn ( console , 'error' ) . mockImplementation ( )
318+
319+ const instance = new RedisAccessor ( { prefix : 'myPrefix' , allowGetFailures : true } )
320+ instance . _client . get = jest . fn ( ( ...args ) => args . pop ( ) ( new Error ( 'Redis ReplyError' ) ) )
321+
322+ const result = await instance . get ( 'myKey' , 'myValue' )
323+
324+ expect ( result ) . toBe ( null )
325+ expect ( consoleErrorSpy ) . toBeCalledWith (
326+ `Failed to get value from Redis.
327+ Key: myPrefix:myKey
328+ Error: Redis ReplyError`
329+ )
330+
331+ // Restore `console.error`
332+ consoleErrorSpy . mockRestore ( )
333+ } )
334+
335+ test ( 'rejects if Redis replies with an error and `allowGetFailures` option is not set to true' , async ( ) => {
336+ // Temporarily override `console.error`
337+ const consoleErrorSpy = jest . spyOn ( console , 'error' ) . mockImplementation ( )
338+
339+ const instance = new RedisAccessor ( { prefix : 'myPrefix' } )
340+ instance . _client . get = jest . fn ( ( ...args ) => args . pop ( ) ( new Error ( 'Redis ReplyError' ) ) )
341+
342+ await expect ( instance . get ( 'myKey' ) ) . rejects . toThrowError (
343+ new Error ( `Failed to get value from Redis.
344+ Key: myPrefix:myKey
345+ Error: Redis ReplyError`
346+ )
347+ )
348+
349+ expect ( consoleErrorSpy ) . not . toBeCalled ( )
350+
351+ // Restore `console.error`
352+ consoleErrorSpy . mockRestore ( )
353+ } )
302354 } )
303355} )
0 commit comments