@@ -415,4 +415,121 @@ describe('Inject Lambda Context', () => {
415
415
} )
416
416
) ;
417
417
} ) ;
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
+ } ) ;
418
535
} ) ;
0 commit comments