package Ġcom . mar mute ch . ram d ant ime table . ram ad ant ime table . repository Ċ Ċ import Ġcom . mar mute ch . ram d ant ime table . ram ad ant ime table . api . ApiService Ċ import Ġcom . mar mute ch . ram d ant ime table . ram ad ant ime table . db . Country Dao Ċ import Ġcom . mar mute ch . ram d ant ime table . ram ad ant ime table . db . State Dao Ċ import Ġcom . mar mute ch . ram d ant ime table . ram ad ant ime table . util . User Pref Util Ċ import Ġcom . n ha ar man . mockito _ kotlin . mock Ċ import Ġcom . n ha ar man . mockito _ kotlin . wh enever Ċ import Ġkotlinx . coroutines . Experimental Cor outines Api Ċ import Ġkotlinx . coroutines . flow . first Ċ import Ġkotlinx . coroutines . flow . flow Of Ċ import Ġkotlinx . coroutines . test . run Blocking Test Ċ import Ġorg . junit . After Ċ import Ġorg . junit . Assert . assertEquals Ċ import Ġorg . junit . Assert . assertNot Equals Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Test Ċ import Ġorg . junit . runner . RunWith Ċ import Ġorg . junit . runners . JUnit 4 Ċ import Ġorg . mockito . kotlin . any Ċ import Ġorg . mockito . kotlin . only Ċ import Ġorg . mockito . kotlin . times Ċ import Ġorg . mockito . kotlin . verify Ċ import Ġretrofit 2 . Response Ċ Ċ @ RunWith ( JUnit 4 :: class ) Ċ class ĠTime Table Repository Test Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġrepo : ĠTime Table Repo ĊĊĠĠĠ Ġprivate Ġval Ġcountry Dao : ĠCountry Dao Ġ= Ġmock Ġ{ Ġ} ĊĠĠĠ Ġprivate Ġval Ġapi Service : ĠApi Service Ġ= Ġmock Ġ{ Ġ} ĊĠĠĠ Ġprivate Ġval Ġuser Pref Util : ĠUser Pref Util Ġ= Ġmock Ġ{ Ġ} ĊĠĠĠ Ġprivate Ġval Ġstate Dao : ĠState Dao Ġ= Ġmock Ġ{ Ġ} ĊĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun ĠsetUp () Ġ{ ĊĠĠĠĠĠĠĠ Ġrepo Ġ= ĠTime Table Repository Impl ( country Dao , Ġapi Service , Ġuser Pref Util , Ġstate Dao ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ After ĊĠĠĠ Ġfun ĠtearDown () Ġ{ ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Experimental Cor outines Api ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġload From Db Countries () Ġ= Ġrun Blocking Test Ġ{ ĊĠĠĠĠĠĠĠ Ġwhenever ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcountry Dao . get Country List ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġany (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġany () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ). thenReturn ( flow Of ( Fake Data . get Country List ())) ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġrepo . load Country List (). first () ĊĊĠĠĠĠĠĠĠ Ġverify ( country Dao , Ġonly ()). get Country List ( any (), Ġany ()) ĊĠĠĠĠĠĠĠ Ġassert Not Equals ( result . size , Ġ 0 ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( result . size , Ġ 1 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Experimental Cor outines Api ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġload Country From Api And Insert Into Db () Ġ= Ġrun Blocking Test Ġ{ ĊĠĠĠĠĠĠĠ Ġ// make Ġdb Ġempty ĊĠĠĠĠĠĠĠ Ġwhenever ( country Dao . get Country List ( any (), Ġany ())). thenReturn ( flow Of ( emptyList ())) ĊĠĠĠĠĠĠĠ Ġwhenever ( api Service . get Country List ( any ())). thenReturn ( Response . success ( Fake Data . get Country Response ())) ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġrepo . load Country List (). first () ĊĠĠĠĠĠĠĠ ĠassertEquals ( result . size , Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġverify ( country Dao , Ġtimes ( 1 )). bulk Insert ( any ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// todo Ġadd Ġcache Ġtest Ġafter Ġcache Ġseparation Ċ Ċ } Ċ