/* Ċ Ġ* Ġ* Ċ Ġ* Ġ Ġ* ĠCreated Ġby ĠAh med ĠEl sha er Ġon Ġ 1 0 / 2 8 / 1 9 Ġ 4 : 3 2 ĠAM Ċ Ġ* Ġ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 9 Ġ. ĠAll Ġrights Ġreserved . Ċ Ġ* Ġ Ġ* ĠLast Ġmodified Ġ 1 0 / 2 8 / 1 9 Ġ 4 : 3 2 ĠAM Ċ Ġ* Ċ Ġ*/ Ċ Ċ package Ġcom . ah med 3 el sha er . ge os qu ar . home Ċ Ċ import Ġandroid . location . Location Ċ import Ġandroidx . arch . core . executor . testing . Instant Task Executor Rule Ċ import Ġcom . ah med 3 el sha er . ge os qu ar . common . models . Venue Ċ import Ġcom . ah med 3 el sha er . ge os qu ar . common . models . Ven ues Request Ċ import Ġcom . ah med 3 el sha er . ge os qu ar . common . models . Ven ues Response Ċ import Ġcom . ah med 3 el sha er . ge os qu ar . common . schedul ers . Scheduler Provider Test Ċ import Ġcom . ah med 3 el sha er . ge os qu ar . home . use cases . Explore Ven ues Cache UseCase Ċ import Ġcom . ah med 3 el sha er . ge os qu ar . home . use cases . Explore Ven ues Realtime UseCase Ċ import Ġcom . ah med 3 el sha er . ge os qu ar . home . use cases . Explore Ven ues Single UseCase Ċ import Ġcom . ah med 3 el sha er . ge os qu ar . utils . LiveData TestUtil Ċ import Ġio . reactivex . Observable Ċ import Ġjunit . framework . Assert . assertEquals Ċ import Ġjunit . framework . Assert . assertFalse Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Rule Ċ import Ġorg . junit . Test Ċ import Ġorg . mockito . Mock Ċ import Ġorg . mockito . Mockito .` when ` Ċ import Ġorg . mockito . Mockito Annotations Ċ Ċ class ĠHome ViewModel Test Ġ{ ĊĠĠĠ Ġ@ get : Rule ĊĠĠĠ Ġvar Ġinstant Executor Rule Ġ= ĠInstant Task Executor Rule () ĊĠĠĠ Ġ@ Mock ĊĠĠĠ Ġprivate Ġlateinit Ġvar ĠviewModel : ĠHome ViewModel ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġven ues List : ĠList < Venue > ĊĠĠĠ Ġ@ Mock ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġexplore Ven ues Realtime UseCase : ĠExplo re Ven ues Realtime UseCase ĊĠĠĠ Ġ@ Mock ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġexplore Ven ues Single UseCase : ĠExplo re Ven ues Single UseCase ĊĠĠĠ Ġ@ Mock ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġexplore Ven ues Cache UseCase : ĠExplo re Ven ues Cache UseCase ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġven ues Request : ĠV en ues Request ĊĠĠĠ Ġ@ Mock ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġlocation : ĠLocation ĊĠĠĠ Ġprivate Ġval Ġthrowable Ġ= ĠThrowable (" test Ġerror ") ĊĊĠĠĠ Ġprivate Ġval Ġlat Ġ= Ġ 3 0 . 0 4 5 6 8 6 2 ĊĊĠĠĠ Ġprivate Ġval Ġlng Ġ= Ġ 3 1 . 2 1 9 5 4 0 5 ĊĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun Ġsetup Home ViewModel () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠMockito Ġhas Ġa Ġvery Ġconvenient Ġway Ġto Ġinject Ġmocks Ġby Ġusing Ġthe Ġ@ Mock Ġannotation . ĠTo ĊĠĠĠĠĠĠĠ Ġ// Ġinject Ġthe Ġmocks Ġin Ġthe Ġtest Ġthe Ġinit Mocks Ġmethod Ġneeds Ġto Ġbe Ġcalled . ĊĠĠĠĠĠĠĠ ĠMockito Annotations . init Mocks ( this ) ĊĠĠĠĠĠĠĠ ĠviewModel Ġ= ĠHome ViewModel ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠScheduler Provider Test (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexplore Ven ues Realtime UseCase , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexplore Ven ues Single UseCase , Ġexplore Ven ues Cache UseCase ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġven ues Request Ġ= ĠV en ues Request (" 3 0 . 0 4 5 6 8 6 2 , 3 1 . 2 1 9 5 4 0 5 ") ĊĠĠĠĠĠĠĠ Ġval Ġlocation Ġ= ĠV en ues Response . Location ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġformatted Address Ġ= ĠlistOf (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlabeled LatLng s Ġ= ĠlistOf () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġven ues List Ġ= Ġmutable ListOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠV en ue ( location Ġ= Ġlocation ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠV en ue ( location Ġ= Ġlocation ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠV en ue ( location Ġ= Ġlocation ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġreal time Ven ues () Ġ{ ĊĠĠĠĠĠĠĠ Ġsetup Location () ĊĠĠĠĠĠĠĠ Ġ` when `( explore Ven ues Realtime UseCase . invoke ( ven ues Request )). thenReturn ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠObservable . just ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġven ues List , Ġven ues List . to Mutable List (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd All ( ven ues List ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. toList () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠviewModel . explore Ven ues ( location , Ġtrue ) ĊĠĠĠĠĠĠĠ ĠassertFalse ( LiveData TestUtil . getValue ( viewModel . view State ). peek Content (). isLoading ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( LiveData TestUtil . getValue ( viewModel . view State ). peek Content (). error , Ġnull ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( LiveData TestUtil . getValue ( viewModel . view State ). peek Content (). ven ues ?. size , Ġ 6 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġreal time Ven ues Error () Ġ{ ĊĠĠĠĠĠĠĠ Ġsetup Location () ĊĠĠĠĠĠĠĠ Ġ` when `( explore Ven ues Realtime UseCase . invoke ( ven ues Request )). thenReturn ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠObservable . error ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrowable ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠviewModel . explore Ven ues ( location , Ġtrue ) ĊĠĠĠĠĠĠĠ ĠassertFalse ( LiveData TestUtil . getValue ( viewModel . view State ). peek Content (). isLoading ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( LiveData TestUtil . getValue ( viewModel . view State ). peek Content (). error , Ġthrowable ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( LiveData TestUtil . getValue ( viewModel . view State ). peek Content (). ven ues , Ġnull ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġsingle Ven ues () Ġ{ ĊĠĠĠĠĠĠĠ Ġsetup Location () ĊĠĠĠĠĠĠĠ Ġ` when `( explore Ven ues Single UseCase . invoke ( ven ues Request )). thenReturn ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠObservable . just ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġven ues List ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠviewModel . explore Ven ues ( location , Ġfalse ) ĊĠĠĠĠĠĠĠ ĠassertFalse ( LiveData TestUtil . getValue ( viewModel . view State ). peek Content (). isLoading ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( LiveData TestUtil . getValue ( viewModel . view State ). peek Content (). error , Ġnull ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( LiveData TestUtil . getValue ( viewModel . view State ). peek Content (). ven ues ?. size , Ġ 3 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġsingle Ven ues Error () Ġ{ ĊĠĠĠĠĠĠĠ Ġsetup Location () ĊĠĠĠĠĠĠĠ Ġ` when `( explore Ven ues Single UseCase . invoke ( ven ues Request )). thenReturn ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠObservable . error ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrowable ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠviewModel . explore Ven ues ( location , Ġfalse ) ĊĠĠĠĠĠĠĠ ĠassertFalse ( LiveData TestUtil . getValue ( viewModel . view State ). peek Content (). isLoading ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( LiveData TestUtil . getValue ( viewModel . view State ). peek Content (). error , Ġthrowable ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( LiveData TestUtil . getValue ( viewModel . view State ). peek Content (). ven ues , Ġnull ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġcached Ven ues () Ġ{ ĊĠĠĠĠĠĠĠ Ġ` when `( explore Ven ues Cache UseCase . invoke ()). thenReturn ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠObservable . just ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġven ues List ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠviewModel . check For Cached Ven ues () ĊĠĠĠĠĠĠĠ ĠassertFalse ( LiveData TestUtil . getValue ( viewModel . view State ). peek Content (). isLoading ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( LiveData TestUtil . getValue ( viewModel . view State ). peek Content (). error , Ġnull ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( LiveData TestUtil . getValue ( viewModel . view State ). peek Content (). ven ues ?. size , Ġ 3 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġcached Ven ues Error () Ġ{ ĊĠĠĠĠĠĠĠ Ġ` when `( explore Ven ues Cache UseCase . invoke ()). thenReturn ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠObservable . error ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrowable ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠviewModel . check For Cached Ven ues () ĊĠĠĠĠĠĠĠ ĠassertFalse ( LiveData TestUtil . getValue ( viewModel . view State ). peek Content (). isLoading ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( LiveData TestUtil . getValue ( viewModel . view State ). peek Content (). error , Ġthrowable ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( LiveData TestUtil . getValue ( viewModel . view State ). peek Content (). ven ues , Ġnull ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Location () Ġ{ ĊĠĠĠĠĠĠĠ Ġ` when `( location . latitude ). thenReturn ( lat ) ĊĠĠĠĠĠĠĠ Ġ` when `( location . longitude ). thenReturn ( lng ) ĊĠĠĠ Ġ} Ċ } Ċ