File tree Expand file tree Collapse file tree 3 files changed +35
-2
lines changed Expand file tree Collapse file tree 3 files changed +35
-2
lines changed Original file line number Diff line number Diff line change 99 Headers ,
1010 CompletedRequest ,
1111 CompletedBody ,
12- Explainable
12+ Explainable ,
13+ RawHeaders
1314} from "../../types" ;
1415
1516import { MaybePromise , Replace } from '../../util/type-utils' ;
@@ -432,11 +433,15 @@ export class FileHandlerDefinition extends Serializable implements RequestHandle
432433 }
433434}
434435
436+ // This is different from CompletedResponse because CompletedResponse is a client request to Mockttp
437+ // whereas this is a real response from an upstream server that we modify before forwarding.
438+ // We aim for a similar shape, but they're not exactly the same.
435439export interface PassThroughResponse {
436440 id : string ;
437441 statusCode : number ;
438442 statusMessage ?: string ;
439443 headers : Headers ;
444+ rawHeaders : RawHeaders ;
440445 body : CompletedBody ;
441446}
442447
Original file line number Diff line number Diff line change @@ -521,7 +521,8 @@ export class PassThroughHandler extends PassThroughHandlerDefinition {
521521 const completedRequest = await waitForCompletedRequest ( clientReq ) ;
522522 const modifiedReq = await this . beforeRequest ( {
523523 ...completedRequest ,
524- headers : _ . clone ( completedRequest . headers )
524+ headers : _ . cloneDeep ( completedRequest . headers ) ,
525+ rawHeaders : _ . cloneDeep ( completedRequest . rawHeaders )
525526 } ) ;
526527
527528 if ( modifiedReq ?. response ) {
@@ -768,6 +769,7 @@ export class PassThroughHandler extends PassThroughHandlerDefinition {
768769 statusCode : serverStatusCode ,
769770 statusMessage : serverRes . statusMessage ,
770771 headers : serverHeaders ,
772+ rawHeaders : _ . cloneDeep ( serverRawHeaders ) ,
771773 body : buildBodyReader ( body , serverHeaders )
772774 } ) ;
773775
Original file line number Diff line number Diff line change @@ -683,6 +683,32 @@ nodeOnly(() => {
683683 expect ( response . statusCode ) . to . equal ( 200 ) ;
684684 } ) ;
685685
686+ it ( "should be able to examine a response's raw headers in beforeResponse" , async ( ) => {
687+ await remoteServer . forGet ( '/' ) . thenCallback ( ( ) => ( {
688+ status : 500 ,
689+ headers : {
690+ 'UPPERCASE-HEADER' : 'VALUE'
691+ }
692+ } ) ) ;
693+
694+ await server . forGet ( remoteServer . urlFor ( "/" ) ) . thenPassThrough ( {
695+ beforeResponse : ( res ) => {
696+ expect ( res . headers ) . to . deep . equal ( {
697+ 'uppercase-header' : 'VALUE'
698+ } ) ;
699+
700+ expect ( res . rawHeaders ) . to . deep . equal ( [
701+ [ 'UPPERCASE-HEADER' , 'VALUE' ]
702+ ] ) ;
703+
704+ return { status : 200 , body : 'all good' } ;
705+ }
706+ } ) ;
707+
708+ let response = await request . get ( remoteServer . urlFor ( "/" ) ) ;
709+ expect ( response ) . to . equal ( 'all good' ) ;
710+ } ) ;
711+
686712 it ( "should be able to rewrite a response's status" , async ( ) => {
687713 await remoteServer . forGet ( '/' ) . thenReply ( 404 ) ;
688714 await server . forGet ( remoteServer . urlFor ( "/" ) ) . thenPassThrough ( {
You can’t perform that action at this time.
0 commit comments