package Ġcom . par ad igma . rick and mort y . ui . favorites Ċ Ċ import Ġandroidx . arch . core . executor . testing . Instant Task Executor Rule Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġcom . par ad igma . rick and mort y . ui . Screen State Ċ import Ġcom . par ad igma . rick and mort y . domain . Character Ċ import Ġcom . par ad igma . rick and mort y . ui . get Or Await Value Ċ import Ġcom . par ad igma . rick and mort y . Main Coroutine Rule Ċ import Ġcom . par ad igma . rick and mort y . data . repository . local . favorites . F avorites Repository Ċ import Ġcom . par ad igma . rick and mort y . data . repository . local . favorites . Result F avorites Ċ import Ġkotlinx . coroutines . Experimental Cor outines Api Ċ import Ġkotlinx . coroutines . test . run Blocking Test Ċ import Ġorg . junit . Assert . assertTrue Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Rule Ċ import Ġorg . junit . Test Ċ import Ġorg . junit . runner . RunWith Ċ import Ġorg . mockito . Mock Ċ import Ġorg . mockito . junit . Mockito JUnit Runner Ċ import Ġorg . mockito . kotlin . wh enever ĊĊ Ċ @ Experimental Cor outines Api Ċ @ RunWith ( Mockito JUnit Runner :: class ) Ċ class ĠF avorites ViewModel Test Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġfavor ites ViewModel : ĠF avorites ViewModel ĊĊĠĠĠ Ġ@ Mock ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġfavorite Repository : ĠF avorites Repository ĊĊĠĠĠ Ġ@ get : Rule ĊĠĠĠ Ġvar Ġinstant Executor Rule Ġ= ĠInstant Task Executor Rule () ĊĊĠĠĠ Ġ@ Experimental Cor outines Api ĊĠĠĠ Ġ@ get : Rule ĊĠĠĠ Ġvar Ġmain Coroutine Rule Ġ= ĠMain Coroutine Rule () ĊĊĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun ĠsetUp () Ġ{ ĊĠĠĠĠĠĠĠ Ġfavor ites ViewModel Ġ= ĠF avorites ViewModel ( favorite Repository ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġget F avorites _ isNotEmpty () Ġ= Ġmain Coroutine Rule . run Blocking Test Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġobserver Ġ= ĠObserver < Screen State < List < Character ? >>> Ġ{} ĊĊĠĠĠĠĠĠĠ Ġval Ġcharacters List Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCharacter ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" R ick ĠSan che z ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" https :// rick and mort y api . com / api / character / avatar / 1 . jpeg ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Male ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Alive ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" 3 " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCharacter ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" M ort y ĠSmith ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" https :// rick and mort y api . com / api / character / avatar / 2 . jpeg ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Male ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Alive ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" 3 ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCharacter ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 3 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Sum mer ĠSmith ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" https :// rick and mort y api . com / api / character / avatar / 3 . jpeg ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Female ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Alive ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" 2 0 " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġfavor ites ViewModel . status Screen . observe Fore ver ( observer ) ĊĊĠĠĠĠĠĠĠ Ġwhenever ( favorite Repository . getAll Favorite Characters ()). thenReturn ( Result F avorites . Success ( characters List )) ĊĊĠĠĠĠĠĠĠ Ġfavor ites ViewModel . getF avorites () ĊĊĠĠĠĠĠĠĠ Ġval Ġvalue : ĠScreen State < List < Character ? >> Ġ= Ġfavor ites ViewModel . status Screen . get Or Await Value () ĊĊĠĠĠĠĠĠĠ ĠassertTrue ( value Ġis ĠScreen State . Results ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġget F avorites _ No Data () Ġ= Ġmain Coroutine Rule . run Blocking Test Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġobserver Ġ= ĠObserver < Screen State < List < Character ? >>> Ġ{} ĊĊĠĠĠĠĠĠĠ Ġfavor ites ViewModel . status Screen . observe Fore ver ( observer ) ĊĊĠĠĠĠĠĠĠ Ġwhenever ( favorite Repository . getAll Favorite Characters ()). thenReturn ( Result F avorites . No Data ) ĊĊĠĠĠĠĠĠĠ Ġfavor ites ViewModel . getF avorites () ĊĊĠĠĠĠĠĠĠ Ġval Ġvalue : ĠScreen State < List < Character ? >> Ġ= Ġfavor ites ViewModel . status Screen . get Or Await Value () ĊĊĠĠĠĠĠĠĠ ĠassertTrue ( value Ġis ĠScreen State . No Data ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġget F avorites _ Error () Ġ= Ġmain Coroutine Rule . run Blocking Test Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġobserver Ġ= ĠObserver < Screen State < List < Character ? >>> Ġ{} ĊĊĠĠĠĠĠĠĠ Ġfavor ites ViewModel . status Screen . observe Fore ver ( observer ) ĊĊĠĠĠĠĠĠĠ Ġwhenever ( favorite Repository . getAll Favorite Characters ()). thenReturn ( Result F avorites . Error ( Exception (" Error Ġgetting Ġfavor ites "))) ĊĊĠĠĠĠĠĠĠ Ġfavor ites ViewModel . getF avorites () ĊĊĠĠĠĠĠĠĠ Ġval Ġvalue : ĠScreen State < List < Character ? >> Ġ= Ġfavor ites ViewModel . status Screen . get Or Await Value () ĊĊĠĠĠĠĠĠĠ ĠassertTrue ( value Ġis ĠScreen State . Error ) ĊĠĠĠ Ġ} Ċ Ċ }