package Ġio . ph at cat . number neighbors international . application . port Ċ Ċ import Ġio . ph at cat . number neighbors international . application . port . output . Get Countries Port Ċ import Ġio . ph at cat . number neighbors international . application . port . output . Store Countries Port Ċ import Ġio . ph at cat . number neighbors international . entity . Country Ċ import Ġkotlinx . coroutines . run Blocking Ċ import Ġorg . hamcrest . Core Matchers .` is ` Ċ import Ġorg . hamcrest . Matcher Assert . assertThat Ċ import Ġorg . junit . Rule Ċ import Ġorg . junit . Test Ċ import Ġorg . mockito . Inject Mocks Ċ import Ġorg . mockito . Mock Ċ import Ġorg . mockito . Mockito Ċ import Ġorg . mockito . Mockito .` when ` Ċ import Ġorg . mockito . junit . Mockito JUnit Ċ import Ġorg . mockito . junit . Mockito Test Rule Ċ Ċ class ĠCountry Service Test Ġ{ ĊĠ Ġ@ get : Rule Ġval Ġrule : ĠMockito Test Rule Ġ= ĠMockito JUnit . test Rule ( this ) ĊĊĠ Ġ@ Mock Ġlateinit Ġvar Ġget Countries Port : ĠGet Countries Port ĊĠ Ġ@ Mock Ġlateinit Ġvar Ġstore Countries Port : ĠStore Countries Port ĊĊĠ Ġ@ Inject Mocks Ġprivate Ġlateinit Ġvar Ġcountry Service : ĠCountry Service ĊĊĠ Ġ@ Test ( expected Ġ= ĠIllegalArgumentException :: class ) ĊĠ Ġfun Ġ` G IV EN Ġno Ġcountries Ġretrieved ĠWHEN Ġgetting Ġprefixes ĠTHEN Ġthrows `() Ġ= Ġrun Blocking Ġ{ ĊĠĠĠ Ġ// ĠGiven ĊĠĠĠ Ġgiven No Countries Retrie ved () ĊĊĠĠĠ Ġ// ĠWhen ĊĠĠĠ Ġcountry Service . get CountryCode Prefixes () ĊĊĠĠĠ Ġ// ĠThen ĊĠĠĠ Ġ// ĠException Ġwill Ġhave Ġbeen Ġthrown , Ġotherwise Ġthis Ġwill Ġautomatically Ġfail ĊĠĠĠ ĠUnit ĊĠ Ġ} ĊĊĠ Ġ@ Test ( expected Ġ= ĠIllegalArgumentException :: class ) ĊĠ Ġfun Ġ` G IV EN Ġcountries Ġsize Ġtoo Ġsmall ĠWHEN Ġgetting Ġcountries ĠTHEN Ġthrows `() Ġ= Ġrun Blocking Ġ{ ĊĠĠĠ Ġ// ĠGiven ĊĠĠĠ Ġgiven Countries Retrie ved ( 1 ) ĊĊĠĠĠ Ġ// ĠWhen ĊĠĠĠ Ġcountry Service . get CountryCode Prefixes () ĊĊĠĠĠ Ġ// ĠThen ĊĠĠĠ Ġ// ĠException Ġwill Ġhave Ġbeen Ġthrown , Ġotherwise Ġthis Ġwill Ġautomatically Ġfail ĊĠĠĠ ĠUnit ĊĠ Ġ} ĊĊĠ Ġ@ Test ( expected Ġ= ĠIllegalArgumentException :: class ) ĊĠ Ġfun Ġ` G IV EN Ġcountries Ġare Ġduplicated ĠWHEN Ġrandom izing Ġcountries ĠTHEN Ġthrows `() Ġ= Ġrun Blocking Ġ{ ĊĠĠĠ Ġ// ĠGiven ĊĠĠĠ Ġgiven Countries With Duplicates () ĊĊĠĠĠ Ġ// ĠWhen ĊĠĠĠ Ġcountry Service . get CountryCode Prefixes () ĊĊĠĠĠ Ġ// ĠThen ĊĠĠĠ Ġ// ĠException Ġwill Ġhave Ġbeen Ġthrown , Ġotherwise Ġthis Ġwill Ġautomatically Ġfail ĊĠĠĠ ĠUnit ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġ` G IV EN Ġstoring Ġfails ĠWHEN Ġstoring Ġcountries ĠTHEN Ġreturns Ġdata `() Ġ= Ġrun Blocking Ġ{ ĊĠĠĠ Ġ// ĠGiven ĊĠĠĠ Ġgiven Countries Retrie ved () ĊĠĠĠ Ġgiven St oring Countries Fails () ĊĊĠĠĠ Ġ// ĠWhen ĊĠĠĠ Ġval Ġcountries Ġ= Ġcountry Service . get CountryCode Prefixes () ĊĊĠĠĠ Ġ// ĠThen ĊĠĠĠ ĠassertThat ( countries . size , Ġ` is `( RANDOM _ COUN TR IES _ COUNT )) ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġ` G IV EN Ġstoring Ġsucceeds ĠWHEN Ġstoring Ġcountries ĠTHEN Ġreturns Ġdata `() Ġ= Ġrun Blocking Ġ{ ĊĠĠĠ Ġ// ĠGiven ĊĠĠĠ Ġgiven Countries Retrie ved () ĊĊĠĠĠ Ġ// ĠWhen ĊĠĠĠ Ġval Ġcountries Ġ= Ġcountry Service . get CountryCode Prefixes () ĊĊĠĠĠ Ġ// ĠThen ĊĠĠĠ ĠassertThat ( countries . size , Ġ` is `( RANDOM _ COUN TR IES _ COUNT )) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġgiven No Countries Retrie ved () Ġ= Ġrun Blocking Ġ{ ĊĠĠĠ Ġ` when `( getCount ries Port . getCount ries ()). then Ġ{ Ġempty List < Country >() Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġgiven Countries Retrie ved ( num Countries : ĠInt Ġ= Ġ 1 0 ) Ġ= Ġrun Blocking Ġ{ ĊĠĠĠ Ġ` when `( getCount ries Port . getCount ries ()). then Ġ{ ĊĠĠĠĠĠĠ 1 . range To ( num Countries ). map Ġ{ ĊĠĠĠĠĠĠĠ ĠCountry ( ĊĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ"$ it ", ĊĠĠĠĠĠĠĠĠĠ Ġcountry Code Ġ= Ġ"$ it ", ĊĠĠĠĠĠĠĠĠĠ Ġdial ing Code Ġ= Ġ"$ it " ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġgiven Countries With Duplicates ( num Countries : ĠInt Ġ= Ġ 1 0 ) Ġ= Ġrun Blocking Ġ{ ĊĠĠĠ Ġ` when `( getCount ries Port . getCount ries ()). then Ġ{ ĊĠĠĠĠĠĠ 1 . range To ( num Countries ). map Ġ{ ĊĠĠĠĠĠĠĠ ĠCountry ( ĊĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" USA ", ĊĠĠĠĠĠĠĠĠĠ Ġcountry Code Ġ= Ġ" US ", ĊĠĠĠĠĠĠĠĠĠ Ġdial ing Code Ġ= Ġ"+ 1 " ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġgiven St oring Countries Fails () Ġ= Ġrun Blocking Ġ{ ĊĠĠĠ Ġ` when `( store Countries Port . store Countries ( any ())). then Ġ{ Ġthrow ĠException (" St oring Ġfailed Ġon Ġpurpose ") Ġ} ĊĠ Ġ} ĊĊĠ Ġ@ Suppress (" Remove Explicit Type Arguments ") ĊĠ Ġprivate Ġfun Ġ< T > Ġany (): ĠT Ġ= ĠMockito . any < T >() Ċ } Ċ