package Ġau . com . di us . p act . provider . spring . target Ċ Ċ 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 . Request Response Interaction Ċ import Ġau . com . di us . p act . provider . Consumer Info Ċ import Ġau . com . di us . p act . provider . I Provider Verifier Ċ import Ġau . com . di us . p act . provider . P act Verification Ċ import Ġau . com . di us . p act . provider . Provider Info Ċ import Ġau . com . di us . p act . provider . junit . Provider Ċ import Ġau . com . di us . p act . provider . junit . Target Request Filter Ċ import Ġau . com . di us . p act . provider . junit . target . Base Target Ċ import Ġau . com . di us . p act . provider . junit . target . Target Ċ import Ġau . com . di us . p act . provider . spring . Mvc Provider Verifier Ċ import Ġorg . apache . http . HttpRequest Ċ import Ġorg . springframework . http . converter . Http Message Converter Ċ import Ġorg . springframework . test . web . servlet . MockMvc Ċ import Ġorg . springframework . test . web . servlet . request . MockMvc Request Builders Ċ import Ġorg . springframework . test . web . servlet . setup . MockMvc Builders . standalone Setup Ċ import Ġorg . springframework . test . web . servlet . setup . Standalone MockMvc Builder Ċ import Ġjava . net . URL ClassLoader Ċ import Ġjava . util . function . Consumer Ċ import Ġjava . util . function . Supplier Ċ Ċ /** Ċ Ġ* ĠOut - of - the - box Ġimplementation Ġof Ġ[ Target ], Ċ Ġ* Ġthat Ġrun Ġ[ Request Response Interaction ] Ġagainst ĠSpring ĠMock MVC Ġcontrollers Ġand Ġverify Ġresponse Ċ Ġ* Ċ Ġ* ĠTo Ġsets Ġthe Ġservlet Ġpath Ġon Ġthe Ġdefault Ġrequest , Ġif Ġone Ġis Ġrequired , Ġset Ġthe Ġservlet Path Ġto Ġthe Ġservlet Ġpath Ġprefix Ċ Ġ*/ Ċ class ĠMock Mvc Target Ġ@ Jvm Over loads Ġconstructor ( ĊĠ Ġvar Ġcontrollers : ĠList < Any > Ġ= Ġmutable ListOf (), ĊĠ Ġvar Ġcontroller Ad vice : ĠList < Any > Ġ= Ġmutable ListOf (), ĊĠ Ġvar Ġmessage Converters : ĠList < Http Message Converter <* >> Ġ= Ġmutable ListOf (), ĊĠ Ġvar Ġprint Request Response : ĠBoolean Ġ= Ġfalse , ĊĠ Ġvar Ġrun Times : ĠInt Ġ= Ġ 1 , ĊĠ Ġvar Ġmock Mvc : ĠMock Mvc ? Ġ= Ġnull , ĊĠ Ġvar Ġservlet Path : ĠString ? Ġ= Ġnull Ċ ) Ġ: ĠBase Target () Ġ{ ĊĊĠ Ġfun Ġset Controllers ( var arg Ġcontrollers : ĠAny ) Ġ{ ĊĠĠĠ Ġthis . controllers Ġ= Ġcontrollers . asList () ĊĠ Ġ} ĊĊĠ Ġfun Ġset Controller Ad vice ( var arg Ġcontroller Ad vice : ĠAny ) Ġ{ ĊĠĠĠ Ġthis . controller Ad vice Ġ= Ġcontroller Ad vice . asList () ĊĠ Ġ} ĊĊĠ Ġfun Ġset Message Convert ors ( var arg Ġmessage Converters : ĠHttp Message Converter <* >) Ġ{ ĊĠĠĠ Ġthis . message Converters Ġ= Ġmessage Converters . asList () ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* Ġ{@ inheritDoc } ĊĠĠ Ġ*/ ĊĠ Ġoverride Ġfun Ġtest Interaction ( ĊĠĠĠ Ġconsumer Name : ĠString , ĊĠĠĠ Ġinteraction : ĠInteraction , ĊĠĠĠ Ġsource : ĠP act Source , ĊĠĠĠ Ġcontext : ĠMap < String , ĠAny > ĊĠ Ġ) Ġ{ ĊĠĠĠ Ġval Ġprovider Ġ= Ġget Provider Info ( source ) ĊĠĠĠ Ġval Ġconsumer Ġ= ĠConsumer Info ( consumer Name ) ĊĠĠĠ Ġprovider . verification Type Ġ= ĠP act Verification . AN NOT ATED _ METHOD ĊĊĠĠĠ Ġval Ġmock Mvc Ġ= Ġbuild MockMvc () ĊĊĠĠĠ Ġval Ġverifier Ġ= Ġsetup Verifier ( interaction , Ġprovider , Ġconsumer ) Ġas ĠM vc Provider Verifier ĊĊĠĠĠ Ġval Ġfailures Ġ= ĠHashMap < String , ĠAny >() ĊĊĠĠĠĠ 1 . range To ( run Times ). forEach Ġ{ ĊĠĠĠĠĠ Ġverifier . verify Response From Provider ( provider , Ġinteraction Ġas ĠRequest Response Interaction , Ġinteraction . description , ĊĠĠĠĠĠĠĠ Ġfailures , Ġmock Mvc ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreport TestResult ( failures . isEmpty (), Ġverifier ) ĊĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠ Ġif Ġ( failures . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġverifier . display Failures ( failures ) ĊĠĠĠĠĠĠĠ Ġthrow Ġget AssertionError ( failures ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠ Ġverifier . final ise Reports () ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġfun Ġbuild MockMvc (): ĠMock Mvc Ġ{ ĊĠĠĠ Ġif Ġ( mock Mvc Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġreturn Ġmock Mvc !! ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġrequest Builder Ġ= ĠMock Mvc Request Builders . get ("/") ĊĠĠĠ Ġif Ġ(! servlet Path . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠ Ġrequest Builder . servlet Path ( servlet Path ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġstandalone Setup (* controllers . to Typed Array ()) ĊĠĠĠĠĠ Ġ. set Controller Ad vice (* controller Ad vice . to Typed Array ()) ĊĠĠĠĠĠ Ġ. setMessage Converters (* message Converters . to Typed Array ()) ĊĠĠĠĠĠ Ġ. default Request < Standalone MockMvc Builder >( request Builder ) ĊĠĠĠĠĠ Ġ. build () ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġsetup Verifier ( interaction : ĠInteraction , Ġprovider : ĠProvider Info , Ġconsumer : ĠConsumer Info ): ĊĠĠĠ ĠI Provider Verifier Ġ{ ĊĠĠĠ Ġval Ġverifier Ġ= ĠM vc Provider Verifier ( print Request Response ) ĊĊĠĠĠ Ġsetup Report ers ( verifier , Ġprovider . name , Ġinteraction . description ) ĊĊĠĠĠ Ġverifier . project Classpath Ġ= ĠSupplier Ġ{ Ġ( ClassLoader . getSystem ClassLoader () Ġas ĠURL ClassLoader ). ur Ls . toList () Ġ} ĊĊĠĠĠ Ġverifier . initial ise Report ers ( provider ) ĊĠĠĠ Ġverifier . report Verification For Consumer ( consumer , Ġprovider , Ġnull ) ĊĊĠĠĠ Ġif Ġ(! interaction . provider States . isEmpty ()) Ġ{ ĊĠĠĠĠĠ Ġfor Ġ(( name ) Ġin Ġinteraction . provider States ) Ġ{ ĊĠĠĠĠĠĠĠ Ġverifier . report State For Interaction ( name , Ġprovider , Ġconsumer , Ġtrue ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġverifier . report Interaction Description ( interaction ) ĊĊĠĠĠ Ġreturn Ġverifier ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġget Provider Info ( source : ĠP act Source ): ĠProvider Info Ġ{ ĊĠĠĠ Ġval Ġprovider Ġ= Ġtest Class . getAnnotation ( Provider :: class . java ) ĊĠĠĠ Ġval Ġprovider Info Ġ= ĠProvider Info ( provider . value ) ĊĊĠĠĠ Ġval Ġmethods Ġ= Ġtest Class . get Annotated Methods ( Target Request Filter :: class . java ) ĊĠĠĠ Ġif Ġ( methods . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠ Ġprovider Info . setRequest Filter ( Consumer < HttpRequest > Ġ{ ĠhttpRequest Ġ-> ĊĠĠĠĠĠĠĠ Ġmethods . forEach Ġ{ Ġmethod Ġ-> ĊĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmethod . invoke Explo s ively ( test Target , ĠhttpRequest ) ĊĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( t : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠAssertionError (" Request Ġfilter Ġmethod Ġ${ method . name } Ġfailed Ġwith Ġan Ġexception ", Ġt ) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġprovider Info ĊĠ Ġ} Ċ } Ċ