package Ġau . com . di us . p act . provider . spring . junit 5 Ċ Ċ import Ġau . com . di us . p act . core . model . ContentType Ċ import Ġau . com . di us . p act . core . model . I Request Ċ import Ġau . com . di us . p act . core . model . Interaction Ċ import Ġau . com . di us . p act . core . model . P act Source Ċ import Ġau . com . di us . p act . core . model . S ynchronous Request Response Ċ import Ġau . com . di us . p act . core . model . generators . Generator Test Mode Ċ import Ġau . com . di us . p act . provider . I Provider Verifier Ċ import Ġau . com . di us . p act . provider . Provider Info Ċ import Ġau . com . di us . p act . provider . Provider Response Ċ import Ġau . com . di us . p act . provider . junit 5 . Test Target Ċ import Ġorg . apache . commons . lang 3 . StringUtils Ċ import Ġorg . springframework . http . HttpHeaders Ċ import Ġorg . springframework . http . HttpMethod Ċ import Ġorg . springframework . http . MediaType Ċ import Ġorg . springframework . http . client . Multipart Body Builder Ċ import Ġorg . springframework . test . web . reactive . server . Web Test Client Ċ import Ġorg . springframework . web . reactive . function . Body Inser ters Ċ import Ġorg . springframework . web . reactive . function . server . Router Function Ċ import Ġorg . springframework . web . util . Uri Components Builder Ċ import Ġjavax . mail . internet . Content Disposition Ċ import Ġjavax . mail . internet . Mime Multipart Ċ import Ġjavax . mail . util . ByteArray DataSource Ċ Ċ class ĠWeb Flux Target ( private Ġval Ġrouter Function : ĠRouter Function <* >) Ġ: ĠTest Target Ġ{ ĊĠ Ġoverride Ġfun Ġget Provider Info ( serviceName : ĠString , Ġp act Source : ĠP act Source ?) Ġ= ĠProvider Info ( serviceName ) ĊĊĠ Ġoverride Ġfun Ġprepare Request ( interaction : ĠInteraction , Ġcontext : ĠMutable Map < String , ĠAny >): ĠPair < Web Test Client . Request Headers Spec <* >, ĠWeb Test Client > Ġ{ ĊĠĠĠ Ġif Ġ( interaction Ġis ĠS ynchronous Request Response ) Ġ{ ĊĠĠĠĠĠ Ġval Ġrequest Ġ= Ġinteraction . request . generated Request ( context , ĠGenerator Test Mode . Provider ) ĊĠĠĠĠĠ Ġval Ġweb Client Ġ= ĠWeb Test Client . bind To Router Function ( router Function ). build () ĊĠĠĠĠĠ Ġreturn Ġto Web Flux RequestBuilder ( web Client , Ġrequest ) Ġto Ġweb Client ĊĠĠĠ Ġ} ĊĠĠĠ Ġthrow ĠUnsupportedOperationException (" Only Ġrequest / response Ġinteractions Ġcan Ġbe Ġused Ġwith Ġan ĠMock Mvc Ġtest Ġtarget ") ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġto Web Flux RequestBuilder ( web Client : ĠWeb Test Client , Ġrequest : ĠI Request ): ĠWeb Test Client . Request Headers Spec < *> Ġ{ ĊĠĠĠ Ġreturn Ġif Ġ( request . body . isPresent ()) Ġ{ ĊĠĠĠĠĠ Ġif Ġ( request . is Multipart FileUpload ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmultipart Ġ= ĠMime Multipart ( ByteArray DataSource ( request . body . unwrap (), Ġrequest . contentType Header ())) ĊĊĠĠĠĠĠĠĠ Ġval Ġbody Builder Ġ= ĠMultip art Body Builder () ĊĠĠĠĠĠĠĠ Ġvar Ġi Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġwhile Ġ( i Ġ< Ġmultipart . count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġval Ġbody Part Ġ= Ġmultipart . getBody Part ( i ) ĊĠĠĠĠĠĠĠĠĠ Ġval Ġcontent Disposition Ġ= ĠContent Disposition ( body Part . getHeader (" Content - Disposition "). first ()) ĊĠĠĠĠĠĠĠĠĠ Ġval Ġname Ġ= ĠStringUtils . default String ( content Disposition . getParameter (" name "), Ġ" file ") ĊĠĠĠĠĠĠĠĠĠ Ġval Ġfilename Ġ= Ġcontent Disposition . getParameter (" filename "). or Empty () ĊĊĠĠĠĠĠĠĠĠĠ Ġbody Builder ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. part ( name , Ġbody Part . content ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filename ( filename ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. contentType ( MediaType . valueOf ( body Part . contentType )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. header (" Content - Disposition ", Ġ" form - data ; Ġname =$ name ; Ġfilename =$ filename ") ĊĊĠĠĠĠĠĠĠĠĠ Ġi ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġweb Client ĊĠĠĠĠĠĠĠĠĠ Ġ. method ( HttpMethod . POST ) ĊĠĠĠĠĠĠĠĠĠ Ġ. uri ( request Uri String ( request )) ĊĠĠĠĠĠĠĠĠĠ Ġ. body ( Body Inser ters . from Multipart Data ( body Builder . build ())) ĊĠĠĠĠĠĠĠĠĠ Ġ. headers Ġ{ Ġrequest . headers . forEach Ġ{ Ġ( k , Ġv ) Ġ-> Ġit . addAll ( k , Ġv ) Ġ} Ġ} ĊĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġweb Client ĊĠĠĠĠĠĠĠĠĠ Ġ. method ( HttpMethod . valueOf ( request . method )) ĊĠĠĠĠĠĠĠĠĠ Ġ. uri ( request Uri String ( request )) ĊĠĠĠĠĠĠĠĠĠ Ġ. body Value ( request . body . value !! ) ĊĠĠĠĠĠĠĠĠĠ Ġ. headers Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest . headers . forEach Ġ{ Ġ( k , Ġv ) Ġ-> Ġit . addAll ( k , Ġv ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! request . headers . containsKey ( HttpHeaders . CONTENT _ TYPE )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . set ( HttpHeaders . CONTENT _ TYPE , ĠMediaType . APPLICATION _ JSON _ VALUE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠ Ġweb Client ĊĠĠĠĠĠĠĠ Ġ. method ( HttpMethod . valueOf ( request . method )) ĊĠĠĠĠĠĠĠ Ġ. uri ( request Uri String ( request )) ĊĠĠĠĠĠĠĠ Ġ. headers Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġrequest . headers . forEach Ġ{ Ġ( k , Ġv ) Ġ-> Ġit . addAll ( k , Ġv ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġrequest Uri String ( request : ĠI Request ): ĠString Ġ{ ĊĠĠĠ Ġval Ġuri Builder Ġ= ĠUri Components Builder . from Path ( request . path ) ĊĊĠĠĠ Ġrequest . query . forEach Ġ{ Ġ( key , Ġvalue ) Ġ-> ĊĠĠĠĠĠ Ġuri Builder . query Param ( key , Ġvalue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġuri Builder . to Uri String () ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġis Http Target () Ġ= Ġtrue ĊĊĠ Ġoverride Ġfun Ġexecute Interaction ( client : ĠAny ?, Ġrequest : ĠAny ?): ĠProvider Response Ġ{ ĊĠĠĠ Ġval Ġrequest Builder Ġ= Ġrequest Ġas ĠWeb Test Client . Request Headers Spec < *> ĊĠĠĠ Ġval Ġexchange Result Ġ= Ġrequest Builder . exchange (). expect Body (). return Result () ĊĊĠĠĠ Ġval Ġheaders Ġ= Ġmutable Map Of < String , ĠList < String >>() ĊĠĠĠ Ġexchange Result . response Headers . forEach Ġ{ Ġheader Ġ-> ĊĠĠĠĠĠ Ġheaders [ header . key ] Ġ= Ġheader . value ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval ĠcontentType Header Ġ= Ġexchange Result . response Headers . contentType ĊĠĠĠ Ġval ĠcontentType Ġ= Ġif Ġ( contentType Header Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠ ĠContentType . JSON ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠ ĠContentType . fromString ( contentType Header . toString ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn ĠProvider Response ( ĊĠĠĠĠĠ Ġexchange Result . status . value (), ĊĠĠĠĠĠ Ġheaders , ĊĠĠĠĠĠ ĠcontentType , ĊĠĠĠĠĠ Ġexchange Result . response Body ?. let Ġ{ ĠString ( it ) Ġ} ĊĠĠĠ Ġ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġprepare Verifier ( verifier : ĠI Provider Verifier , Ġtest Instance : ĠAny ) Ġ{ ĊĠĠĠ Ġ/* ĠNO - OP Ġ*/ ĊĠ Ġ} Ċ } Ċ