/* Ċ Ġ* ĠCopyright ĠÂ© Ġ 2 0 1 9 . ĠS ir ĠWell ing ton . Ċ Ġ* Ġ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 Ġtech . sir well ing ton . alchemy . http Ċ Ċ import Ġcom . n ha ar man . mockito _ kotlin . any Ċ import Ġcom . n ha ar man . mockito _ kotlin . argument Captor Ċ import Ġcom . n ha ar man . mockito _ kotlin . verify Ċ import Ġcom . n ha ar man . mockito _ kotlin . wh enever Ċ import Ġorg . hamcrest . Matchers . equalTo Ċ import Ġorg . hamcrest . Matchers . notNull Value Ċ import Ġorg . junit . Assert . assertEquals Ċ import Ġorg . junit . Assert . assertThat Ċ import Ġorg . junit . Assert . assertTrue Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Test Ċ import Ġorg . junit . runner . RunWith Ċ import Ġorg . mockito . Mock Ċ import Ġtech . sir well ing ton . alchemy . generator . Collection Generators Ċ import Ġtech . sir well ing ton . alchemy . generator . String Generators . Companion . alphabet ic Strings Ċ import Ġtech . sir well ing ton . alchemy . test . junit . Throwable Assertion . assert Throws Ċ import Ġtech . sir well ing ton . alchemy . test . junit . runners . Alchemy TestRunner Ċ import Ġtech . sir well ing ton . alchemy . test . junit . runners . Generate String Ċ import Ġtech . sir well ing ton . alchemy . test . junit . runners . Repeat Ċ import Ġjava . util . concurrent . Executor Ċ import Ġjava . util . concurrent . TimeUnit Ċ Ċ /** Ċ Ġ* Ċ Ġ* Ġ@ author ĠS ir Well ing ton Ċ Ġ*/ Ċ @ RunWith ( Alchemy TestRunner :: class ) Ċ class ĠAl chemy Http Test Ċ { ĊĊĠĠĠ Ġ@ Mock ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġstate Machine : ĠAl chemy Http StateMachine ĊĊĠĠĠ Ġ@ Mock ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġstep 1 : ĠAl chemy Request Steps . Step 1 ĊĊĠĠĠ Ġ@ Mock ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġexecutor : ĠExecutor ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġdefault Headers : ĠMap < String , ĠString > ĊĊĠĠĠ Ġ@ Generate String ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġheader Key : ĠString ĊĊĠĠĠ Ġ@ Generate String ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġheader Value : ĠString ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġinstance : ĠAl chemy Http Impl ĊĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun ĠsetUp () ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġdefault Headers Ġ= ĠCollection Generators . map Of ( alphabet ic Strings (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġalphabet ic Strings (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 0 ) ĊĊĠĠĠĠĠĠĠ Ġinstance Ġ= ĠAl chemy Http Impl ( default Headers , Ġstate Machine ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Repeat ( 1 0 0 ) ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Using Default Header () ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġinstance . using Default Header ( header Key , Ġheader Value ) ĊĠĠĠĠĠĠĠ ĠassertThat ( result , Ġnot NullValue ()) ĊĠĠĠĠĠĠĠ ĠassertTrue ( result . default Headers . containsKey ( header Key )) ĊĠĠĠĠĠĠĠ ĠassertEquals ( result . default Headers [ header Key ], Ġheader Value ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ Throws ( Exception :: class ) ĊĠĠĠ Ġfun Ġtest Using Default Header With Empty Key () ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ ĠassertThrows Ġ{ Ġinstance . using Default Header ("", Ġheader Value ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. isInstanceOf ( IllegalArgumentException :: class . java ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun ĠtestGet Default Headers () ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġinstance . default Headers ĊĠĠĠĠĠĠĠ ĠassertThat ( result , ĠequalTo ( default Headers )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Go () ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġwhenever ( state Machine . begin ( any ())). thenReturn ( step 1 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġstep Ġ= Ġinstance . go () ĊĊĠĠĠĠĠĠĠ ĠassertThat ( step , ĠequalTo ( step 1 )) ĊĊĠĠĠĠĠĠĠ Ġval Ġcapt or Ġ= Ġargument Captor < HttpRequest >() ĊĊĠĠĠĠĠĠĠ Ġverify ( state Machine ). begin ( capt or . capture ()) ĊĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= Ġcapt or . first Value ĊĠĠĠĠĠĠĠ ĠassertThat ( request , Ġnot NullValue ()) ĊĠĠĠĠĠĠĠ ĠassertThat ( request . method , Ġnot NullValue ()) ĊĠĠĠĠĠĠĠ ĠassertThat ( request . request Headers , Ġnot NullValue ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest New Default Instance () ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠAl chemy Http . new Default Instance () ĊĠĠĠĠĠĠĠ ĠassertThat ( result , Ġnot NullValue ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest New Instance () ĊĠĠĠ Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠAl chemy Http . newInstance ( executor , Ġdefault Headers ) ĊĠĠĠĠĠĠĠ ĠassertThat ( result , Ġnot NullValue ()) ĊĊĠĠĠĠĠĠĠ Ġ// Edge Ġcases ĊĠĠĠĠĠĠĠ ĠassertThrows Ġ{ ĠAl chemy Http . newInstance ( executor , Ġdefault Headers , Ġ- 1 , ĠTimeUnit . SECONDS ) Ġ}. isInstanceOf ( IllegalArgumentException :: class . java ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest New Builder () ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠAl chemy Http . newBuilder () ĊĠĠĠĠĠĠĠ ĠassertThat ( result , Ġnot NullValue ()) ĊĊĠĠĠĠĠĠĠ Ġval Ġclient Ġ= Ġresult ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. using Executor ( executor ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. using Default Headers ( default Headers ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠ ĠassertThat ( client , Ġnot NullValue ()) ĊĊĠĠĠĠĠĠĠ Ġdefault Headers . forEach Ġ{ Ġkey , Ġvalue Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( client . default Headers [ key ] Ġ== Ġvalue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ } Ċ