@@ -194,16 +194,33 @@ test("executes in expected order", async () => {
194194 return request ;
195195 } ,
196196 onResponse ( { response } ) {
197- response . headers . set ( "step" , "C" ) ;
198- return response ;
197+ const headers = new Headers ( response . headers ) ;
198+ headers . set ( "step" , "C" ) ;
199+ if ( response . headers . get ( "step" ) === "D" ) {
200+ return new Response ( response . body , { ...response , headers } ) ;
201+ }
199202 } ,
200203 } ,
201204 ) ;
202205
203- const { response } = await client . GET ( "/posts/{id}" , { params : { path : { id : 123 } } } ) ;
206+ const { response } = await client . GET ( "/posts/{id}" , {
207+ params : { path : { id : 123 } } ,
208+ middleware : [
209+ {
210+ onRequest ( { request } ) {
211+ request . headers . set ( "step" , "D" ) ;
212+ return request ;
213+ } ,
214+ onResponse ( { response } ) {
215+ response . headers . set ( "step" , "D" ) ;
216+ return response ;
217+ } ,
218+ } ,
219+ ] ,
220+ } ) ;
204221
205222 // assert requests ended up on step C (array order)
206- expect ( actualRequest . headers . get ( "step" ) ) . toBe ( "C " ) ;
223+ expect ( actualRequest . headers . get ( "step" ) ) . toBe ( "D " ) ;
207224
208225 // assert responses ended up on step A (reverse order)
209226 expect ( response . headers . get ( "step" ) ) . toBe ( "A" ) ;
@@ -506,117 +523,22 @@ test("skips onResponse handlers when response is returned from onRequest", async
506523 expect ( onResponseCalled ) . toBe ( false ) ;
507524} ) ;
508525
509- test ( 'it should enable a middleware to be added via the "middleware" request option' , async ( ) => {
510- let actualRequest = new Request ( "https://nottherealurl.fake" ) ;
511- const client = createObservedClient < paths > ( { } , async ( req ) => {
512- actualRequest = new Request ( req ) ;
513- return Response . json ( { } ) ;
514- } ) ;
515-
516- await client . GET ( "/posts/{id}" , {
517- params : { path : { id : 123 } } ,
518- middleware : [
519- {
520- async onRequest ( { request } ) {
521- return new Request ( "https://foo.bar/api/v1" , {
522- ...request ,
523- method : "OPTIONS" ,
524- headers : { foo : "bar" } ,
525- } ) ;
526- } ,
527- } ,
528- ] ,
529- } ) ;
530-
531- expect ( actualRequest . url ) . toBe ( "https://foo.bar/api/v1" ) ;
532- expect ( actualRequest . method ) . toBe ( "OPTIONS" ) ;
533- expect ( actualRequest . headers . get ( "foo" ) ) . toBe ( "bar" ) ;
534- } ) ;
535-
536526test ( "add middleware at the request level" , async ( ) => {
537- let actualRequest = new Request ( "https://nottherealurl.fake" ) ;
538- const client = createObservedClient < paths > ( { } , async ( req ) => {
539- actualRequest = new Request ( req ) ;
540- return Response . json ( { } ) ;
541- } ) ;
542-
543- await client . GET ( "/posts/{id}" , {
544- params : { path : { id : 123 } } ,
545- middleware : [
546- {
547- async onRequest ( { request } ) {
548- return new Request ( "https://foo.bar/api/v1" , {
549- ...request ,
550- method : "OPTIONS" ,
551- headers : { foo : "bar" } ,
552- } ) ;
553- } ,
554- } ,
555- ] ,
556- } ) ;
557-
558- expect ( actualRequest . url ) . toBe ( "https://foo.bar/api/v1" ) ;
559- expect ( actualRequest . method ) . toBe ( "OPTIONS" ) ;
560- expect ( actualRequest . headers . get ( "foo" ) ) . toBe ( "bar" ) ;
561- } ) ;
562-
563- test ( "executes a middleware at the client and request request level in the correct orders" , async ( ) => {
564- let actualRequest = new Request ( "https://nottherealurl.fake" ) ;
565- const client = createObservedClient < paths > ( { } , async ( req ) => {
566- actualRequest = new Request ( req ) ;
567- return Response . json ( { } ) ;
527+ const customResponse = Response . json ( { } ) ;
528+ const client = createObservedClient < paths > ( { } , async ( ) => {
529+ throw new Error ( "unexpected call to fetch" ) ;
568530 } ) ;
569- // this middleware passes along the “step” header
570- // for both requests and responses, but first checks if
571- // it received the end result of the previous middleware step
572- client . use (
573- {
574- async onRequest ( { request } ) {
575- request . headers . set ( "step" , "A" ) ;
576- return request ;
577- } ,
578- async onResponse ( { response } ) {
579- if ( response . headers . get ( "step" ) === "B" ) {
580- const headers = new Headers ( response . headers ) ;
581- headers . set ( "step" , "A" ) ;
582- return new Response ( response . body , { ...response , headers } ) ;
583- }
584- } ,
585- } ,
586- {
587- async onRequest ( { request } ) {
588- request . headers . set ( "step" , "B" ) ;
589- return request ;
590- } ,
591- async onResponse ( { response } ) {
592- const headers = new Headers ( response . headers ) ;
593- headers . set ( "step" , "B" ) ;
594- if ( response . headers . get ( "step" ) === "C" ) {
595- return new Response ( response . body , { ...response , headers } ) ;
596- }
597- } ,
598- } ,
599- ) ;
600531
601532 const { response } = await client . GET ( "/posts/{id}" , {
602533 params : { path : { id : 123 } } ,
603534 middleware : [
604535 {
605- onRequest ( { request } ) {
606- request . headers . set ( "step" , "C" ) ;
607- return request ;
608- } ,
609- onResponse ( { response } ) {
610- response . headers . set ( "step" , "C" ) ;
611- return response ;
536+ async onRequest ( ) {
537+ return customResponse ;
612538 } ,
613539 } ,
614540 ] ,
615541 } ) ;
616542
617- // assert requests ended up on step C (array order)
618- expect ( actualRequest . headers . get ( "step" ) ) . toBe ( "C" ) ;
619-
620- // assert responses ended up on step A (reverse order)
621- expect ( response . headers . get ( "step" ) ) . toBe ( "A" ) ;
543+ expect ( response ) . toBe ( customResponse ) ;
622544} ) ;
0 commit comments