@@ -32,37 +32,40 @@ describe("loggerMiddleware", () => {
3232 } ;
3333
3434 const mockResponse = {
35- output : {
36- $metadata : {
37- statusCode : 200 ,
38- requestId : "requestId" ,
35+ response : {
36+ statusCode : 200 ,
37+ headers : {
38+ "x-amzn-requestid" : "requestId" ,
39+ "x-amz-id-2" : "extendedRequestId" ,
40+ "x-amz-cf-id" : "cfId" ,
3941 } ,
42+ } ,
43+ output : {
4044 outputKey : "outputValue" ,
4145 } ,
4246 } ;
4347
44- beforeEach ( ( ) => {
45- mockNext . mockResolvedValueOnce ( mockResponse ) ;
46- } ) ;
47-
4848 afterEach ( ( ) => {
4949 jest . clearAllMocks ( ) ;
5050 } ) ;
5151
5252 it ( "returns without logging if context.logger is not defined" , async ( ) => {
53+ mockNext . mockResolvedValueOnce ( mockResponse ) ;
5354 const response = await loggerMiddleware ( ) ( mockNext , { } ) ( mockArgs ) ;
5455 expect ( mockNext ) . toHaveBeenCalledTimes ( 1 ) ;
5556 expect ( response ) . toStrictEqual ( mockResponse ) ;
5657 } ) ;
5758
5859 it ( "returns without logging if context.logger doesn't have info function" , async ( ) => {
60+ mockNext . mockResolvedValueOnce ( mockResponse ) ;
5961 const logger = { } as Logger ;
6062 const response = await loggerMiddleware ( ) ( mockNext , { logger } ) ( mockArgs ) ;
6163 expect ( mockNext ) . toHaveBeenCalledTimes ( 1 ) ;
6264 expect ( response ) . toStrictEqual ( mockResponse ) ;
6365 } ) ;
6466
65- it ( "logs $metadata if context.logger has info function" , async ( ) => {
67+ it ( "logs metadata if context.logger has info function" , async ( ) => {
68+ mockNext . mockResolvedValueOnce ( mockResponse ) ;
6669 const logger = ( { info : jest . fn ( ) } as unknown ) as Logger ;
6770
6871 const context = {
@@ -75,11 +78,47 @@ describe("loggerMiddleware", () => {
7578
7679 expect ( logger . info ) . toHaveBeenCalledTimes ( 1 ) ;
7780
78- const {
79- output : { $metadata } ,
80- } = mockResponse ;
8181 expect ( logger . info ) . toHaveBeenCalledWith ( {
82- $metadata,
82+ metadata : {
83+ statusCode : mockResponse . response . statusCode ,
84+ requestId : mockResponse . response . headers [ "x-amzn-requestid" ] ,
85+ extendedRequestId : mockResponse . response . headers [ "x-amz-id-2" ] ,
86+ cfId : mockResponse . response . headers [ "x-amz-cf-id" ] ,
87+ } ,
88+ } ) ;
89+ } ) ;
90+
91+ it ( "logs header x-amzn-request-id as requestId if x-amzn-requestid is not present" , async ( ) => {
92+ const requestIdBackup = "requestIdBackup" ;
93+ const customResponse = {
94+ ...mockResponse ,
95+ response : {
96+ ...mockResponse . response ,
97+ headers : {
98+ "x-amzn-request-id" : requestIdBackup ,
99+ } ,
100+ } ,
101+ } ;
102+ mockNext . mockResolvedValueOnce ( customResponse ) ;
103+ const logger = ( { info : jest . fn ( ) } as unknown ) as Logger ;
104+
105+ const context = {
106+ logger,
107+ } ;
108+
109+ const response = await loggerMiddleware ( ) ( mockNext , context ) ( mockArgs ) ;
110+ expect ( mockNext ) . toHaveBeenCalledTimes ( 1 ) ;
111+ expect ( response ) . toStrictEqual ( customResponse ) ;
112+
113+ expect ( logger . info ) . toHaveBeenCalledTimes ( 1 ) ;
114+
115+ expect ( logger . info ) . toHaveBeenCalledWith ( {
116+ metadata : {
117+ statusCode : customResponse . response . statusCode ,
118+ requestId : requestIdBackup ,
119+ extendedRequestId : undefined ,
120+ cfId : undefined ,
121+ } ,
83122 } ) ;
84123 } ) ;
85124} ) ;
0 commit comments