package Ġapp . web . dr jack y cv . presentation . products . view model Ċ Ċ import Ġandroidx . arch . core . executor . testing . Instant Task Executor Rule Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . lifecycle . Saved State Handle Ċ import Ġandroidx . lifecycle . as LiveData Ċ import Ġandroidx . paging . Paging Data Ċ import Ġapp . web . dr jack y cv . domain . products . entity . Be er Ċ import Ġapp . web . dr jack y cv . domain . products . factory . Product Factory Ċ import Ġapp . web . dr jack y cv . domain . products . use case . Get Be ers ListBy Coroutine Params Ċ import Ġapp . web . dr jack y cv . domain . products . use case . Get Be ers ListBy Coroutine UseCase Ċ import Ġapp . web . dr jack y cv . domain . products . use case . Get Be ers List Params Ċ import Ġapp . web . dr jack y cv . domain . products . use case . Get Be ers List UseCase Ċ import Ġapp . web . dr jack y cv . presentation . base . adapter . Recycler Item Ċ import Ġapp . web . dr jack y cv . presentation . products . choose . Choose Path Type Ċ import Ġapp . web . dr jack y cv . presentation . products . product list . CH OOSE _ PATH _ TYPE Ċ import Ġapp . web . dr jack y cv . presentation . products . product list . Products List ViewModel Ċ import Ġio . mock k .* Ċ import Ġio . mock k . impl . annotations . Mock K Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . Experimental Cor outines Api Ċ import Ġkotlinx . coroutines . delay Ċ import Ġkotlinx . coroutines . flow . flow Ċ import Ġkotlinx . coroutines . test . Standard Test Dispatcher Ċ import Ġkotlinx . coroutines . test . advance Time By Ċ import Ġkotlinx . coroutines . test . run 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 . junit . runner . RunWith Ċ import Ġorg . junit . runners . JUnit 4 Ċ import Ġorg . mockito . Argument Matchers . any String ĊĊ Ċ @ RunWith ( JUnit 4 :: class ) Ċ class ĠProducts List ViewModel Test Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar ĠviewModel : ĠProducts List ViewModel ĊĊĠĠĠ Ġ@ get : Rule ĊĠĠĠ Ġvar Ġinstant Executor Rule Ġ= ĠInstant Task Executor Rule () ĊĊĠĠĠ Ġ@ Mock K ĊĠĠĠ Ġlateinit Ġvar Ġget Be ers List UseCase : ĠGet Be ers List UseCase ĊĊĠĠĠ Ġ@ Mock K ĊĠĠĠ Ġlateinit Ġvar Ġget Be ers ListBy Coroutine UseCase : ĠGet Be ers ListBy Coroutine UseCase ĊĊĠĠĠ Ġ@ Mock K ĊĠĠĠ Ġlateinit Ġvar Ġsaved State Handle : ĠSaved State Handle ĊĊĠĠĠ Ġ@ Experimental Cor outines Api ĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun ĠsetUp () Ġ{ ĊĠĠĠĠĠĠĠ ĠDispatch ers . set Main ( Standard Test Dispatcher ()) ĊĠĠĠĠĠĠĠ ĠMock K Annotations . init ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ After ĊĠĠĠ Ġfun ĠtearDown () Ġ{ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Experimental Cor outines Api ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` test Ġwhen ĠProducts List ViewModel Ġis Ġinitialized , Ġproducts Ġare Ġfetched `() Ġ= ĊĠĠĠĠĠĠĠ Ġrun Test Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgiven Products Ġ= ĠProduct Factory . create Products ( 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġflow Ġ= Ġflow < Paging Data < Be er >> Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemit ( Load State . Loading ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( 1 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemit ( Paging Data . from ( given Products )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproducts List Observer Ġ= Ġmock k < Observer < Paging Data < Recycler Item >> >( relax ed Ġ= Ġtrue ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠĠĠĠĠ Ġco Every Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Be ers List UseCase . invoke ( Get Be ers List Params ( any String ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Be ers ListBy Coroutine UseCase . invoke ( Get Be ers ListBy Coroutine Params ( any String ())) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. returns ( flow ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠInvoke ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsaved State Handle . get < Choose Path Type >( CH OOSE _ PATH _ TYPE ) Ġ?: ĠChoose Path Type . COR OUT INE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġreturns ĠChoose Path Type . COR OUT INE ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel Ġ= ĠProducts List ViewModel ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Be ers UseCase Ġ= Ġget Be ers List UseCase , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Be ers ListBy Coroutine UseCase Ġ= Ġget Be ers ListBy Coroutine UseCase , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsaved State Handle Ġ= Ġsaved State Handle ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . products ListBy Coroutine . as LiveData (). observe Fore ver ( products List Observer ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadvance Time By ( 1 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġco Verify ( exact ly Ġ= Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Be ers ListBy Coroutine UseCase . invoke ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGet Be ers ListBy Coroutine Params ( any String ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify Ġ{ Ġproducts List Observer . on Changed ( match Nullable Ġ{ Ġit Ġ!= Ġnull Ġ}) Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ċ Ċ }