package Ġcom . anime . top anime s repos . net Ċ Ċ import Ġcom . anime . core . IN etwork Check Ċ import Ġcom . anime . top anime s repos . entity . Top An imes Repos State Ċ import Ġcom . n ha ar man . mockito _ kotlin . wh enever Ċ import Ġcom . squareup . mos hi . M oshi Ċ import Ġcom . squareup . mos hi . kotlin . reflect . Kotlin Json Adapter Factory Ċ import Ġokhttp 3 . Ok HttpClient Ċ import Ġokhttp 3 . mock webserver . Mock Response Ċ import Ġokhttp 3 . mock webserver . Mock WebServer Ċ import Ġorg . hamcrest . Matcher Assert Ċ import Ġorg . hamcrest . core . Is InstanceOf . instance Of Ċ import Ġorg . junit .* Ċ import Ġorg . junit . Assert . assertNotNull Ċ import Ġorg . junit . Assert . assertTrue Ċ import Ġorg . junit . runner . RunWith Ċ import Ġorg . mockito . Mock Ċ import Ġorg . mockito . junit . Mockito JUnit Runner Ċ import Ġretrofit 2 . Ret rofit Ċ import Ġretrofit 2 . converter . mos hi . M oshi Converter Factory Ċ import Ġjava . util . concurrent . Count DownLatch Ċ Ċ @ RunWith ( Mockito JUnit Runner :: class ) Ċ class ĠRepository Response Test Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġresponses Ġ= ĠAn imes Response () ĊĊĠĠĠ Ġprivate Ġval Ġconverter Factory Ġ= ĠM oshi Converter Factory . create ( ĊĠĠĠĠĠĠĠ ĠM oshi . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add ( Kotlin Json Adapter Factory ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġretrofit : ĠRet rofit ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġservice : ĠTop An imes Repos Api ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġmapper : ĠTop An imes Repos Mapper ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġprovider : ĠTop An imes Repos Provider ĊĊĠĠĠ Ġ@ Mock ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġconnectivity Checker : ĠIN etwork Check ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġmock Server Ġ= ĠMock WebServer () ĊĊĠĠĠĠĠĠĠ Ġ@ BeforeClass ĊĠĠĠĠĠĠĠ Ġfun Ġstart Server () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmock Server . start () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ After Class ĊĠĠĠĠĠĠĠ Ġfun Ġclear Resources () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmock Server . shutdown () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun Ġsetup () Ġ{ ĊĠĠĠĠĠĠĠ Ġretrofit Ġ= ĠRet rofit . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. client ( Ok HttpClient . Builder (). build ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. baseUrl ( mock Server . url ("")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Converter Factory ( converter Factory ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġservice Ġ= Ġretrofit . create ( Top An imes Repos Api :: class . java ) ĊĠĠĠĠĠĠĠ Ġmapper Ġ= ĠTop An imes Repos Mapper () ĊĠĠĠĠĠĠĠ Ġprovider Ġ= ĠTop An imes Repos Provider ( service , Ġconnectivity Checker , Ġmapper ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` On Ġmaking Ġrequest Ġwe Ġget Ġa Ġsuccessful Ġtransaction `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġconsumer Ġ= ĠCurrent Consumer ( 2 ) ĊĠĠĠĠĠĠĠ Ġwhenever ( connectivity Checker . isConnected ). thenReturn ( true ) ĊĠĠĠĠĠĠĠ ĠMock Response () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Response Code ( 2 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Body ( responses . repositories . string ()). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmock Server . enqueue ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġprovider . request Data ( consumer :: consume Current ) ĊĠĠĠĠĠĠĠ Ġconsumer . await () ĊĠĠĠĠĠĠĠ ĠassertNotNull ( consumer . current ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` On Ġmaking Ġrequest Ġwe Ġget Ġa Ġsuccessful Ġtransaction Ġcheck ĠItem ĠDetails `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġconsumer Ġ= ĠCurrent Consumer ( 2 ) ĊĠĠĠĠĠĠĠ Ġwhenever ( connectivity Checker . isConnected ). thenReturn ( true ) ĊĠĠĠĠĠĠĠ ĠMock Response () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Response Code ( 2 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Body ( responses . repositories . string ()). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmock Server . enqueue ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġprovider . request Data ( consumer :: consume Current ) ĊĠĠĠĠĠĠĠ Ġconsumer . await () ĊĠĠĠĠĠĠĠ Ġval Ġgithub Repos State : ĠTop An imes Repos State Ġ= Ġconsumer . current !! ĊĠĠĠĠĠĠĠ ĠMatcher Assert . assertThat ( github Repos State , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinstance Of ( Top An imes Repos State . Success :: class . java )) ĊĠĠĠĠĠĠĠ Ġval Ġrepository Ġ= Ġ( github Repos State Ġas ĠTop An imes Repos State . Success ). anime s [ 0 ] ĊĠĠĠĠĠĠĠ Ġ// Ġneed Ġto Ġuse Ġthe Ġcontains Ġsince Ġthe Ġexpiry Ġwill Ġchange Ġon Ġevery Ġcall ĊĠĠĠĠĠĠĠ ĠassertTrue ( repository . toString (). contains (" An ime ( rank = 1 , Ġtitle = Sh ing ek i Ġno ĠK yo jin : ĠThe ĠFinal ĠSe ason , Ġweb Url = https :// my anime list . net / anime / 4 0 0 2 8 / Sh ing ek i _ no _ K yo jin __ The _ Final _ Season , Ġimage _ url = https :// cdn . my anime list . net / images / anime / 1 5 3 6 / 1 0 9 4 6 2 . jpg ? s = 8 e 5 dd 1 5 8 dd 3 3 ff 8 de 7 b 3 4 e 2 3 0 f 4 a 2 c 1 0 , Ġmembers = 2 1 9 2 3 7 , Ġexpiry =" )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` In Ġcase Ġof Ġno ĠNetwork ĠOn Ġmaking Ġrequest Ġwe Ġget Ġa Ġnetwork ĠError `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġconsumer Ġ= ĠCurrent Consumer ( 1 ) ĊĠĠĠĠĠĠĠ Ġwhenever ( connectivity Checker . isConnected ). thenReturn ( false ) ĊĠĠĠĠĠĠĠ Ġprovider . request Data ( consumer :: consume Current ) ĊĠĠĠĠĠĠĠ Ġconsumer . await () ĊĠĠĠĠĠĠĠ Ġval Ġgithub Repos State : ĠTop An imes Repos State Ġ= Ġconsumer . current !! ĊĠĠĠĠĠĠĠ ĠMatcher Assert . assertThat ( github Repos State , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinstance Of ( Top An imes Repos State . Error :: class . java )) ĊĠĠĠ Ġ} Ċ } ĊĊĠĠĠ Ġprivate Ġopen Ġclass ĠCurrent Consumer ( val Ġwait Actions : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġl atch Ġ= ĠCount DownLatch ( wait Actions ) ĊĠĠĠĠĠĠĠ Ġvar Ġcurrent : ĠTop An imes Repos State ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġfun Ġconsume Current ( current : ĠTop An imes Repos State ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . current Ġ= Ġcurrent ĊĠĠĠĠĠĠĠĠĠĠĠ Ġl atch . count Down () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġawait () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġl atch . await () ĊĠĠĠĠĠĠĠ Ġ} Ċ }