@@ -415,4 +415,121 @@ describe('Inject Lambda Context', () => {
415415 } )
416416 ) ;
417417 } ) ;
418+
419+ it . each ( [
420+ {
421+ case : 'middleware' ,
422+ getHandler : ( logger : Logger ) =>
423+ middy ( async ( event : { id : number } ) => {
424+ logger . info ( 'Processing event' ) ;
425+ logger . appendKeys ( { id : event . id } ) ;
426+ throw new Error ( 'Test error' ) ;
427+ } ) . use (
428+ injectLambdaContext ( logger , {
429+ resetKeys : true ,
430+ } )
431+ ) ,
432+ } ,
433+ {
434+ case : 'decorator' ,
435+ getHandler : ( logger : Logger ) => {
436+ class Lambda {
437+ @logger . injectLambdaContext ( {
438+ resetKeys : true ,
439+ } )
440+ public async handler (
441+ event : { id : number } ,
442+ _context : Context
443+ ) : Promise < void > {
444+ logger . info ( 'Processing event' ) ;
445+ logger . appendKeys ( { id : event . id } ) ;
446+ throw new Error ( 'Test error' ) ;
447+ }
448+ }
449+ const lambda = new Lambda ( ) ;
450+ return lambda . handler . bind ( lambda ) ;
451+ } ,
452+ } ,
453+ ] ) (
454+ 'resets keys when the handler throws an error $case' ,
455+ async ( { getHandler } ) => {
456+ // Prepare
457+ const logger = new Logger ( ) ;
458+ const handler = getHandler ( logger ) ;
459+
460+ // Act & Assess
461+ await expect ( handler ( { id : 1 } , context ) ) . rejects . toThrow ( 'Test error' ) ;
462+ await expect ( handler ( { id : 2 } , context ) ) . rejects . toThrow ( 'Test error' ) ;
463+ expect ( console . info ) . toHaveBeenCalledTimes ( 2 ) ;
464+ expect ( console . info ) . toHaveLoggedNth (
465+ 1 ,
466+ expect . objectContaining ( {
467+ message : 'Processing event' ,
468+ } )
469+ ) ;
470+ expect ( console . info ) . toHaveLoggedNth (
471+ 2 ,
472+ expect . not . objectContaining ( {
473+ message : 'Processing event' ,
474+ id : 1 ,
475+ } )
476+ ) ;
477+ }
478+ ) ;
479+
480+ it . each ( [
481+ {
482+ case : 'middleware' ,
483+ getHandler : ( logger : Logger ) =>
484+ middy ( async ( event : { id : number } ) => {
485+ logger . info ( 'Processing event' ) ;
486+ logger . appendKeys ( { id : event . id } ) ;
487+ return true ;
488+ } ) . use (
489+ injectLambdaContext ( logger , {
490+ resetKeys : true ,
491+ } )
492+ ) ,
493+ } ,
494+ {
495+ case : 'decorator' ,
496+ getHandler : ( logger : Logger ) => {
497+ class Lambda {
498+ @logger . injectLambdaContext ( {
499+ resetKeys : true ,
500+ } )
501+ public async handler ( event : { id : number } , _context : Context ) {
502+ logger . info ( 'Processing event' ) ;
503+ logger . appendKeys ( { id : event . id } ) ;
504+ return true ;
505+ }
506+ }
507+ const lambda = new Lambda ( ) ;
508+ return lambda . handler . bind ( lambda ) ;
509+ } ,
510+ } ,
511+ ] ) ( 'resets keys when the handler returns $case' , async ( { getHandler } ) => {
512+ // Prepare
513+ const logger = new Logger ( ) ;
514+ const handler = getHandler ( logger ) ;
515+ // Act
516+ await handler ( { id : 1 } , context ) ;
517+ await handler ( { id : 2 } , context ) ;
518+
519+ // Assess
520+ expect ( console . info ) . toHaveBeenCalledTimes ( 2 ) ;
521+ expect ( console . info ) . toHaveLoggedNth (
522+ 1 ,
523+ expect . objectContaining ( {
524+ message : 'Processing event' ,
525+ } )
526+ ) ;
527+ expect ( console . info ) . toHaveLoggedNth (
528+ 2 ,
529+ expect . not . objectContaining ( {
530+ message : 'Processing event' ,
531+ id : 1 ,
532+ } )
533+ ) ;
534+ } ) ;
418535} ) ;
0 commit comments