/* Ċ Ġ* ĠĠĠĠ ĠCopyright Ġ 2 0 1 8 Ġ@ Ġhttps :// github . com / a ol iv afa ura Ċ Ġ* Ċ Ġ* Ġ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 Ġes . mn m app . a olv . m ene ame . ui . view . news list Ċ Ċ import Ġandroid . arch . core . executor . testing . Instant Task Executor Rule Ċ 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 . mock Ċ import Ġcom . n ha ar man . mockito _ kotlin . times Ċ import Ġcom . n ha ar man . mockito _ kotlin . verify Ċ import Ġcom . n ha ar man . mockito _ kotlin . wh enever Ċ import Ġes . mn m app . a olv . domain . entity . New Ċ import Ġes . mn m app . a olv . domain . use case . Get News Ċ import Ġes . mn m app . a olv . m ene ame . connectivity . Connectivity Ċ import Ġes . mn m app . a olv . m ene ame . entity . from New To New Cell Ui Ċ import Ġio . reactivex . Flow able Ċ import Ġorg . junit . Assert . assertEquals Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Rule Ċ import Ġorg . junit . Test Ċ import Ġorg . junit . rules . Test Rule Ċ Ċ /** Ċ Ġ* ĠNews Ġlist Ġview Ġmodel Ġtests Ċ Ġ* Ċ Ġ* Ġ@ see ĠNews List ViewModel Ċ Ġ*/ Ċ class ĠNews List ViewModel Test Ġ{ ĊĊĠĠĠ Ġ// ĠB yp ass Ġmain Ġthread Ġon ĠMutable LiveData Ġobjects ĊĠĠĠ Ġ@ Rule ĊĠĠĠ Ġ@ Jvm Field ĊĠĠĠ Ġvar Ġrule : ĠTest Rule Ġ= ĠInstant Task Executor Rule () ĊĊĠĠĠ Ġprivate Ġvar Ġget Pop ular News Ġ= Ġmock < Get News >() ĊĠĠĠ Ġprivate Ġvar Ġconnectivity Ġ= Ġmock < Connectivity >() ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġnews List ViewModel : ĠNews List ViewModel ĊĊĠĠĠ Ġprivate Ġval Ġnews List Ġ= Ġgenerate News ( 1 ) ĊĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun Ġbefore () Ġ{ ĊĠĠĠĠĠĠĠ Ġwhenever ( connectivity . observe Connectivity ()). thenReturn ( Flow able . empty ()) ĊĠĠĠĠĠĠĠ Ġnews List ViewModel Ġ= ĠNews List ViewModel ( get Pop ular News , Ġconnectivity ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Given Ġuser Ġon Ġnews Ġlist Ġscreen , Ġwhen Ġnews Ġare Ġfetched , Ġthen Ġpopular Ġnews Ġuse Ġcase Ġis Ġcalled `() Ġ{ ĊĠĠĠĠĠĠĠ Ġnews List ViewModel . fetch News () ĊĠĠĠĠĠĠĠ Ġverify ( get Pop ular News , Ġtimes ( 1 )). execute ( any (), Ġany (), Ġany ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Given Ġnews Ġbeing Ġfetched , Ġwhen Ġresponse Ġis Ġbeing Ġwait ed , Ġthen Ġview Ġstate Ġis Ġrefresh ing `() Ġ{ ĊĠĠĠĠĠĠĠ Ġnews List ViewModel . fetch News () ĊĠĠĠĠĠĠĠ ĠassertEquals ( News List ViewModel . ViewState . Refresh ing , Ġnews List ViewModel . state . value ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Given Ġnews Ġbeing Ġfetched , Ġwhen Ġsuccessful Ġresponse , Ġthen Ġview Ġstate Ġis Ġidle `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsuccess Captor Ġ= Ġargument Captor <( List < New >) Ġ-> ĠUnit >() ĊĊĠĠĠĠĠĠĠ Ġnews List ViewModel . fetch News () ĊĠĠĠĠĠĠĠ Ġverify ( get Pop ular News , Ġtimes ( 1 )). execute ( any (), Ġsuccess Captor . capture (), Ġany ()) ĊĠĠĠĠĠĠĠ Ġsuccess Captor . first Value . invoke ( emptyList ()) ĊĠĠĠĠĠĠĠ ĠassertEquals ( News List ViewModel . ViewState . Idle , Ġnews List ViewModel . state . value ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Given Ġnews Ġbeing Ġfetched , Ġwhen Ġsuccessful Ġresponse , Ġthen Ġnews Ġlist Ġis Ġmapped `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsuccess Captor Ġ= Ġargument Captor <( List < New >) Ġ-> ĠUnit >() ĊĊĠĠĠĠĠĠĠ Ġnews List ViewModel . fetch News () ĊĠĠĠĠĠĠĠ Ġverify ( get Pop ular News , Ġtimes ( 1 )). execute ( any (), Ġsuccess Captor . capture (), Ġany ()) ĊĠĠĠĠĠĠĠ Ġsuccess Captor . first Value . invoke ( news List ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( news List . map Ġ{ Ġfrom New To New Cell Ui ( it ) Ġ}, Ġnews List ViewModel . news . value ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Given Ġnews Ġbeing Ġfetched , Ġwhen Ġerror Ġresponse , Ġthen Ġview Ġstate Ġis Ġidle `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġerror Captor Ġ= Ġargument Captor <( Throwable ) Ġ-> ĠUnit >() ĊĊĠĠĠĠĠĠĠ Ġnews List ViewModel . fetch News () ĊĠĠĠĠĠĠĠ Ġverify ( get Pop ular News , Ġtimes ( 1 )). execute ( any (), Ġany (), Ġerror Captor . capture ()) ĊĠĠĠĠĠĠĠ Ġerror Captor . first Value . invoke ( Throwable ()) ĊĠĠĠĠĠĠĠ ĠassertEquals ( News List ViewModel . ViewState . Idle , Ġnews List ViewModel . state . value ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġgenerate News ( count : ĠInt ): ĠList < New > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlist Ġ= Ġmutable ListOf < New >() ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNew ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi . to Long (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" url $ i ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" title $ i ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" category $ i ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" thumb $ i ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" from $ i ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi . to Long (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi . to Long (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" tags $ i ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" logo Url $ i " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġlist . to Mutable List () ĊĠĠĠ Ġ} Ċ } Ċ