package Ġcom . lo bo . rep og it . presentation Ċ Ċ import Ġandroidx . arch . core . executor . testing . Instant Task Executor Rule Ċ import Ġcom . lo bo . rep og it . core . Repo Git Constants Ċ import Ġcom . lo bo . rep og it . core . extension . get Or Await Value Ċ import Ġcom . lo bo . rep og it . core . platform . Response Ċ import Ġcom . lo bo . rep og it . domain . inter actor . Get Top Repos UseCase Ċ import Ġcom . lo bo . rep og it . domain . model . Item Domain Ċ import Ġcom . lo bo . rep og it . domain . model . Owner Domain Ċ import Ġcom . lo bo . rep og it . domain . model . Repo Information Domain Ċ import Ġcom . lo bo . rep og it . presentation . home . Home ViewModel Ċ import Ġcom . lo bo . rep og it . presentation . model . Item Presentation Ċ import Ġcom . lo bo . rep og it . presentation . model . Owner Presentation Ċ import Ġcom . lo bo . rep og it . presentation . model . Repo Information Presentation Ċ import Ġio . mock k . Mock K Annotations Ċ import Ġio . mock k . every Ċ import Ġio . mock k . impl . annotations . Mock K Ċ import Ġio . mock k . verify Ċ import Ġjunit . framework . Assert . assertEquals Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . Experimental Cor outines Api Ċ import Ġkotlinx . coroutines . flow . flow Ċ import Ġkotlinx . coroutines . new Single Thread Context Ċ import Ġkotlinx . coroutines . test . reset Main Ċ import Ġkotlinx . coroutines . test . run Blocking Test Ċ import Ġkotlinx . coroutines . test . set Main Ċ import Ġorg . junit . After Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Rule Ċ import Ġorg . junit . Test Ċ import Ġorg . mockito . Argument Matchers . any Ċ Ċ class ĠHome ViewModel Test Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠPAGE Ġ= Ġ 1 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ get : Rule ĊĠĠĠ Ġval Ġrule Ġ= ĠInstant Task Executor Rule () ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar ĠviewModel : ĠHome ViewModel ĊĊĠĠĠ Ġprivate Ġval Ġresponse Ġ= Ġget Response Mock () ĊĊĠĠĠ Ġprivate Ġval Ġdomain Ġ= Ġget Domain Mock () ĊĊĠĠĠ Ġ@ Mock K ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġget Top Repos UseCase : ĠGet Top Repos UseCase ĊĊĠĠĠ Ġprivate Ġval Ġmain Thread Sur rogate Ġ= Ġnew Single Thread Context (" UI Ġthread ") ĊĊĠĠĠ Ġ@ Experimental Cor outines Api ĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun ĠsetUp () Ġ{ ĊĠĠĠĠĠĠĠ ĠDispatch ers . set Main ( main Thread Sur rogate ) ĊĠĠĠĠĠĠĠ ĠMock K Annotations . init ( this ) ĊĠĠĠĠĠĠĠ ĠviewModel Ġ= ĠHome ViewModel ( get Top Repos UseCase ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Experimental Cor outines Api ĊĠĠĠ Ġ@ After ĊĠĠĠ Ġfun ĠtearDown () Ġ{ ĊĠĠĠĠĠĠĠ ĠDispatch ers . reset Main () Ġ// Ġreset Ġmain Ġdispatcher Ġto Ġthe Ġoriginal ĠMain Ġdispatcher ĊĠĠĠĠĠĠĠ Ġmain Thread Sur rogate . close () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Response Mock () Ġ= ĊĠĠĠĠĠĠĠ ĠRepo Information Presentation ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠItem Presentation ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRepo Git Constants . NO _ VALUE _ INT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRepo Git Constants . NO _ VALUE _ INT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRepo Git Constants . NO _ VALUE _ STRING , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOwner Presentation ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRepo Git Constants . NO _ VALUE _ STRING , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRepo Git Constants . NO _ VALUE _ STRING ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġfun Ġget Domain Mock () Ġ= ĊĠĠĠĠĠĠĠ ĠRepo Information Domain ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠItem Domain ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRepo Git Constants . NO _ VALUE _ INT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRepo Git Constants . NO _ VALUE _ INT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRepo Git Constants . NO _ VALUE _ STRING , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOwner Domain ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRepo Git Constants . NO _ VALUE _ STRING , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRepo Git Constants . NO _ VALUE _ STRING ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` get Ġtop Ġrepos Ġsuccess `() Ġ= Ġrun Blocking Test Ġ{ ĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Top Repos UseCase ( any ()) ĊĠĠĠĠĠĠĠ Ġ} Ġreturns Ġflow Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġemit ( domain ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠviewModel . get Top Repos ( 1 ) ĊĊĠĠĠĠĠĠĠ Ġverify Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Top Repos UseCase ( any ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . top Repo LiveData . get Or Await Value (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠResponse . Success ( response ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` get Ġtop Ġrepos Ġfail `() Ġ= Ġrun Blocking Test Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġexpected Exception Ġ= ĠThrowable () ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Top Repos UseCase ( any ()) ĊĠĠĠĠĠĠĠ Ġ} Ġreturns Ġflow Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġexpected Exception ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠviewModel . get Top Repos ( page Ġ= ĠPAGE ) ĊĊĠĠĠĠĠĠĠ Ġverify Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Top Repos UseCase ( any ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . top Repo LiveData . get Or Await Value (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠResponse . Failure ( expected Exception ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ Ċ }