/* Ċ Ġ* ĠCopyright Ġ 2 0 1 9 ĠDavid ĠBl anc Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġfr . s peek ha . http mock er . interceptor Ċ Ċ import Ġfr . s peek ha . http mock er . Mock Response Interceptor Ċ import Ġfr . s peek ha . http mock er . Mock Response Interceptor . Mode . ENABLED Ċ import Ġfr . s peek ha . http mock er . Mock Response Interceptor . Mode . RECORD Ċ import Ġfr . s peek ha . http mock er . NO _ REC ORDER _ ERROR Ċ import Ġfr . s peek ha . http mock er . NO _ ROOT _ FOLDER _ ERROR Ċ import Ġfr . s peek ha . http mock er . build Request Ċ import Ġfr . s peek ha . http mock er . model . Response Descriptor Ċ import Ġfr . s peek ha . http mock er . scenario . Request Callback Ċ import Ġokhttp 3 . Ok HttpClient Ċ import Ġokhttp 3 . Request Ċ import Ġorg . junit . jupiter . api . Assertions . assertEquals Ċ import Ġorg . junit . jupiter . api . Assertions . assertFalse Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġorg . junit . jupiter . api . assert Throws Ċ Ċ class ĠDynamic Mock Tests Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġinterceptor : ĠMock Response Interceptor ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġclient : ĠOk HttpClient ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġreply Ġwith Ġa Ġdynamically Ġgenerated Ġresponse `() Ġ{ ĊĠĠĠĠĠĠĠ Ġsetup Provider Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠResponse Descriptor ( code Ġ= Ġ 2 0 2 , Ġbody Ġ= Ġ" some Ġrandom Ġbody ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġclient . new Call ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Request ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġurl , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmethod Ġ= Ġ" GET " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ). execute () ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( 2 0 2 , Ġresponse . code ()) ĊĠĠĠĠĠĠĠ ĠassertEquals (" some Ġrandom Ġbody ", Ġresponse . body ()?. string ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġreply Ġwith Ġa Ġstate ful Ġcallback `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbody Ġ= Ġ" Time : Ġ${ System . currentTimeMillis () }" ĊĠĠĠĠĠĠĠ Ġval Ġcallback Ġ= Ġobject Ġ: ĠRequest Callback Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġload Response ( request : ĠRequest ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResponse Descriptor ( code Ġ= Ġ 2 0 2 , Ġbody Ġ= Ġbody ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsetup Provider ( callback ) ĊĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġclient . new Call ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Request ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġurl , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmethod Ġ= Ġ" GET " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ). execute () ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( 2 0 2 , Ġresponse . code ()) ĊĠĠĠĠĠĠĠ ĠassertEquals ( body , Ġresponse . body ()?. string ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġsupport Ġmultiple Ġcallbacks `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult 1 Ġ= Ġ" First Ġmock " ĊĠĠĠĠĠĠĠ Ġval Ġresult 2 Ġ= Ġ" Second Ġmock " ĊĊĠĠĠĠĠĠĠ Ġinterceptor Ġ= ĠMock Response Interceptor . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. use Dynamic Mocks Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . url (). toString (). contains (" 1 ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResponse Descriptor ( body Ġ= Ġresult 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. use Dynamic Mocks Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResponse Descriptor ( body Ġ= Ġresult 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Interceptor Status ( ENABLED ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠ Ġclient Ġ= ĠOk HttpClient . Builder (). add Interceptor ( interceptor ). build () ĊĊĠĠĠĠĠĠĠ Ġval Ġresponse 1 Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclient . new Call ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Request ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" http :// www . test . fr / request 1 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmethod Ġ= Ġ" GET " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). execute () ĊĠĠĠĠĠĠĠ Ġval Ġresponse 2 Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclient . new Call ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Request ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" http :// www . test . fr / request 2 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmethod Ġ= Ġ" GET " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). execute () ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( result 1 , Ġresponse 1 . body ()?. string ()) ĊĠĠĠĠĠĠĠ ĠassertEquals ( result 2 , Ġresponse 2 . body ()?. string ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġnot Ġallow Ġinit Ġan Ġinterceptor Ġin Ġrecord Ġmode Ġwith Ġno Ġrecorder `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġexception Ġ= ĠassertThrows < IllegalStateException > Ġ{ Ġsetup Provider ( RECORD ) Ġ{ Ġnull Ġ} Ġ} ĊĠĠĠĠĠĠĠ ĠassertEquals ( NO _ ROOT _ FOLDER _ ERROR , Ġexception . message ) ĊĠĠĠĠĠĠĠ ĠassertFalse (:: interceptor . isInitialized ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġnot Ġallow Ġto Ġrecord Ġrequests Ġif Ġrecorder Ġis Ġnot Ġset `() Ġ{ ĊĠĠĠĠĠĠĠ Ġsetup Provider Ġ{ Ġnull Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġexception Ġ= ĠassertThrows < IllegalStateException > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinterceptor . mode Ġ= ĠREC ORD ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠassertEquals ( NO _ REC ORDER _ ERROR , Ġexception . message ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Provider ( callback : ĠRequest Callback ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinterceptor Ġ= ĠMock Response Interceptor . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. use Dynamic Mocks ( callback ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Interceptor Status ( ENABLED ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠ Ġclient Ġ= ĠOk HttpClient . Builder (). add Interceptor ( interceptor ). build () ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Provider ( ĊĠĠĠĠĠĠĠ Ġstatus : ĠMock Response Interceptor . Mode Ġ= ĠENABLE D , ĊĠĠĠĠĠĠĠ Ġcallback : Ġ( Request ) Ġ-> ĠResponse Descriptor ? ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinterceptor Ġ= ĠMock Response Interceptor . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. use Dynamic Mocks ( callback ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Interceptor Status ( status ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠ Ġclient Ġ= ĠOk HttpClient . Builder (). add Interceptor ( interceptor ). build () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval Ġurl Ġ= Ġ" http :// www . test . fr / path 1 ? param = 1 " ĊĠĠĠ Ġ} Ċ }