@@ -371,7 +371,7 @@ describe("Tap", () => {
371371 } ;
372372 const tap = tapManager . inject ( response ) ;
373373
374- expect ( tap . response . response ) . toBe ( "Hello World" ) ;
374+ expect ( tap . response ) . toEqual ( response ) ;
375375 } ) ;
376376
377377 it ( "should support object response" , ( ) => {
@@ -380,7 +380,7 @@ describe("Tap", () => {
380380 } ;
381381 const tap = tapManager . inject ( response ) ;
382382
383- expect ( tap . response . response ) . toEqual ( { message : "Hello" , code : 200 } ) ;
383+ expect ( tap . response ) . toEqual ( response ) ;
384384 } ) ;
385385
386386 it ( "should support custom status code" , ( ) => {
@@ -390,7 +390,7 @@ describe("Tap", () => {
390390 } ;
391391 const tap = tapManager . inject ( response ) ;
392392
393- expect ( tap . response . statusCode ) . toBe ( 404 ) ;
393+ expect ( tap . response ) . toEqual ( response ) ;
394394 } ) ;
395395
396396 it ( "should support custom headers" , ( ) => {
@@ -403,10 +403,93 @@ describe("Tap", () => {
403403 } ;
404404 const tap = tapManager . inject ( response ) ;
405405
406- expect ( tap . response . headers ) . toEqual ( {
407- "Content-Type" : "application/json" ,
408- "X-Custom-Header" : "value" ,
409- } ) ;
406+ expect ( tap . response ) . toEqual ( response ) ;
407+ } ) ;
408+
409+ it ( "should support function response" , ( ) => {
410+ const responseFunction = ( request : FastifyRequest ) : InjectionResponse => {
411+ return {
412+ response : `Hello from ${ request . url } ` ,
413+ statusCode : 200 ,
414+ } ;
415+ } ;
416+
417+ const tap = tapManager . inject ( responseFunction ) ;
418+
419+ expect ( tap . response ) . toBe ( responseFunction ) ;
420+ expect ( typeof tap . response ) . toBe ( "function" ) ;
421+ } ) ;
422+
423+ it ( "should call function response with request object" , ( ) => {
424+ const responseFunction = ( request : FastifyRequest ) : InjectionResponse => {
425+ return {
426+ response : `Method: ${ request . method } , URL: ${ request . url } ` ,
427+ statusCode : 200 ,
428+ } ;
429+ } ;
430+
431+ const tap = tapManager . inject ( responseFunction , { url : "/api/test" } ) ;
432+ const mockRequest = createMockRequest ( "/api/test" , "GET" ) ;
433+
434+ // Verify the tap was created with the function
435+ expect ( typeof tap . response ) . toBe ( "function" ) ;
436+
437+ // Call the function to verify it works correctly
438+ if ( typeof tap . response === "function" ) {
439+ const result = tap . response ( mockRequest ) ;
440+ expect ( result . response ) . toBe ( "Method: GET, URL: /api/test" ) ;
441+ expect ( result . statusCode ) . toBe ( 200 ) ;
442+ }
443+ } ) ;
444+
445+ it ( "should support function response with dynamic status codes" , ( ) => {
446+ const responseFunction = ( request : FastifyRequest ) : InjectionResponse => {
447+ const statusCode = request . url . includes ( "error" ) ? 500 : 200 ;
448+ return {
449+ response : { status : statusCode === 500 ? "error" : "success" } ,
450+ statusCode,
451+ } ;
452+ } ;
453+
454+ const tap = tapManager . inject ( responseFunction ) ;
455+
456+ // Test success case
457+ if ( typeof tap . response === "function" ) {
458+ const successRequest = createMockRequest ( "/api/success" , "GET" ) ;
459+ const successResult = tap . response ( successRequest ) ;
460+ expect ( successResult . statusCode ) . toBe ( 200 ) ;
461+ expect ( successResult . response ) . toEqual ( { status : "success" } ) ;
462+
463+ // Test error case
464+ const errorRequest = createMockRequest ( "/api/error" , "GET" ) ;
465+ const errorResult = tap . response ( errorRequest ) ;
466+ expect ( errorResult . statusCode ) . toBe ( 500 ) ;
467+ expect ( errorResult . response ) . toEqual ( { status : "error" } ) ;
468+ }
469+ } ) ;
470+
471+ it ( "should support function response with dynamic headers" , ( ) => {
472+ const responseFunction = ( request : FastifyRequest ) : InjectionResponse => {
473+ return {
474+ response : "OK" ,
475+ statusCode : 200 ,
476+ headers : {
477+ "X-Request-Method" : request . method ,
478+ "X-Request-URL" : request . url ,
479+ } ,
480+ } ;
481+ } ;
482+
483+ const tap = tapManager . inject ( responseFunction ) ;
484+ const mockRequest = createMockRequest ( "/api/test" , "POST" ) ;
485+
486+ if ( typeof tap . response === "function" ) {
487+ const result = tap . response ( mockRequest ) ;
488+ expect ( result . headers ) . toEqual ( {
489+ "X-Request-Method" : "POST" ,
490+ "X-Request-URL" : "/api/test" ,
491+ } ) ;
492+ }
410493 } ) ;
411494 } ) ;
412495} ) ;
0 commit comments