/** Ċ Ġ* ĠDesign ed Ġand Ġdeveloped Ġby ĠA id an ĠFol le st ad Ġ(@ af ol le st ad ) Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ package Ġcom . af ol le st ad . n ock n ock . ui . main Ċ Ċ import Ġandroidx . arch . core . executor . testing . Instant Task Executor Rule Ċ import Ġcom . af ol le st ad . n ock n ock . ALL _ MOCK _ MODE LS Ċ import Ġcom . af ol le st ad . n ock n ock . MOCK _ MODEL _ 1 Ċ import Ġcom . af ol le st ad . n ock n ock . MOCK _ MODEL _ 2 Ċ import Ġcom . af ol le st ad . n ock n ock . MOCK _ MODEL _ 3 Ċ import Ġcom . af ol le st ad . n ock n ock . engine . validation . Validation Executor Ċ import Ġcom . af ol le st ad . n ock n ock . mock Database Ċ import Ġcom . af ol le st ad . n ock n ock . notifications . N ock Notification Manager Ċ import Ġcom . af ol le st ad . n ock n ock . utilities . li ved ata . test Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . mock Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . verify Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . Experimental Cor outines Api Ċ import Ġkotlinx . coroutines . run Blocking Ċ import Ġorg . junit . After Ċ import Ġorg . junit . Rule Ċ import Ġorg . junit . Test Ċ Ċ /** Ġ@ author ĠA id an ĠFol le st ad Ġ(@ af ol le st ad ) Ġ*/ Ċ @ Experimental Cor outines Api Ċ class ĠMain ViewModel Test Ġ{ ĊĊĠ Ġprivate Ġval Ġdatabase Ġ= Ġmock Database () ĊĠ Ġprivate Ġval Ġnotification Manager Ġ= Ġmock < N ock Notification Manager >() ĊĠ Ġprivate Ġval Ġvalidation Manager Ġ= Ġmock < Validation Executor >() ĊĊĠ Ġ@ Rule Ġ@ Jvm Field Ġval Ġrule Ġ= ĠInstant Task Executor Rule () ĊĊĠ Ġprivate Ġval ĠviewModel Ġ= ĠMain ViewModel ( ĊĠĠĠĠĠ Ġdatabase , ĊĠĠĠĠĠ Ġnotification Manager , ĊĠĠĠĠĠ Ġvalidation Manager , ĊĠĠĠĠĠ ĠDispatch ers . Un conf ined , ĊĠĠĠĠĠ ĠDispatch ers . Un conf ined ĊĠ Ġ) ĊĊĠ Ġ@ After Ġfun ĠtearDown () Ġ= ĠviewModel . destroy () ĊĊĠ Ġ@ Test Ġfun Ġon Resume () Ġ= Ġrun Blocking Ġ{ ĊĠĠĠ Ġval ĠisLoading Ġ= ĠviewModel . on Is Loading () ĊĠĠĠĠĠĠĠ Ġ. test () ĊĠĠĠ Ġval Ġempty Text Visibility Ġ= ĠviewModel . on Empty Text Visibility () ĊĠĠĠĠĠĠĠ Ġ. test () ĊĠĠĠ Ġval Ġsites Ġ= ĠviewModel . on Sites () ĊĠĠĠĠĠĠĠ Ġ. test () ĊĠĠĠ Ġval Ġtags Ġ= ĠviewModel . on Tags () ĊĠĠĠĠĠĠĠ Ġ. test () ĊĠĠĠ Ġval Ġtags Visibility Ġ= ĠviewModel . on Tags List Visibility () ĊĠĠĠĠĠĠĠ Ġ. test () ĊĊĠĠĠ ĠviewModel . on Resume () ĊĊĠĠĠ Ġverify ( notification Manager ). cancel Status Notifications () ĊĠĠĠ Ġverify ( validation Manager ). ensure Scheduled Valid ations () ĊĊĠĠĠ Ġsites . assert Values ( ALL _ MOCK _ MODE LS ) ĊĠĠĠ ĠisLoading . assert Values ( true , Ġfalse ) ĊĠĠĠ Ġempty Text Visibility . assert Values ( false , Ġfalse ) ĊĠĠĠ Ġtags . assert Values ( listOf (" one ", Ġ" two ", Ġ" three ", Ġ" four ", Ġ" five ", Ġ" six "). sorted ()) ĊĠĠĠ Ġtags Visibility . assert Values ( true ) ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġon Tag Selection () Ġ= Ġrun Blocking Ġ{ ĊĠĠĠ Ġval ĠisLoading Ġ= ĠviewModel . on Is Loading () ĊĠĠĠĠĠĠĠ Ġ. test () ĊĠĠĠ Ġval Ġempty Text Visibility Ġ= ĠviewModel . on Empty Text Visibility () ĊĠĠĠĠĠĠĠ Ġ. test () ĊĠĠĠ Ġval Ġsites Ġ= ĠviewModel . on Sites () ĊĠĠĠĠĠĠĠ Ġ. test () ĊĠĠĠ Ġval Ġtags Ġ= ĠviewModel . on Tags () ĊĠĠĠĠĠĠĠ Ġ. test () ĊĠĠĠ Ġval Ġtags Visibility Ġ= ĠviewModel . on Tags List Visibility () ĊĠĠĠĠĠĠĠ Ġ. test () ĊĊĠĠĠ ĠviewModel . on Tag Selection ( listOf (" four ", Ġ" six ")) ĊĊĠĠĠ Ġverify ( notification Manager ). cancel Status Notifications () ĊĠĠĠ Ġverify ( validation Manager ). ensure Scheduled Valid ations () ĊĊĠĠĠ Ġsites . assert Values ( listOf ( MOCK _ MODEL _ 2 , ĠMOCK _ MODEL _ 3 )) ĊĠĠĠ ĠisLoading . assert Values ( true , Ġfalse ) ĊĠĠĠ Ġempty Text Visibility . assert Values ( false , Ġfalse ) ĊĠĠĠ Ġtags . assert Values ( listOf (" one ", Ġ" two ", Ġ" three ", Ġ" four ", Ġ" five ", Ġ" six "). sorted ()) ĊĠĠĠ Ġtags Visibility . assert Values ( true ) ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġpost Site Update _ not Found () Ġ{ ĊĠĠĠ Ġval Ġsites Ġ= ĠviewModel . on Sites () ĊĠĠĠĠĠĠĠ Ġ. test () ĊĠĠĠ ĠviewModel . post Site Update ( MOCK _ MODEL _ 1 ) ĊĠĠĠ Ġsites . assert No Values () ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġpost Site Update () Ġ{ ĊĠĠĠ Ġval Ġsites Ġ= ĠviewModel . on Sites () ĊĠĠĠĠĠĠĠ Ġ. test () ĊĊĠĠĠ ĠviewModel . on Resume () ĊĠĠĠ Ġsites . assert Values ( ALL _ MOCK _ MODE LS ) ĊĊĠĠĠ Ġval Ġupdated Model 2 Ġ= ĠMOCK _ MODEL _ 2 . copy ( ĊĠĠĠĠĠĠĠ Ġname Ġ= Ġ" W ak anda ĠFore ver !! !" ĊĠĠĠ Ġ) ĊĠĠĠ Ġval Ġupdated Sites Ġ= ĠALL _ MOCK _ MODE LS . to Mutable List () ĊĠĠĠĠĠĠĠ Ġ. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġthis [ 1 ] Ġ= Ġupdated Model 2 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ ĠviewModel . post Site Update ( updated Model 2 ) ĊĊĠĠĠ Ġsites . assert Values ( updated Sites ) ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġrefresh Site () Ġ{ ĊĠĠĠ ĠviewModel . refresh Site ( MOCK _ MODEL _ 3 ) ĊĊĠĠĠ Ġverify ( validation Manager ). schedule Validation ( ĊĠĠĠĠĠĠĠ Ġsite Ġ= ĠMOCK _ MODEL _ 3 , ĊĠĠĠĠĠĠĠ Ġright Now Ġ= Ġtrue , ĊĠĠĠĠĠĠĠ Ġcancel Previous Ġ= Ġtrue ĊĠĠĠ Ġ) ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġremove Site _ not Found () Ġ{ ĊĠĠĠ Ġval Ġsites Ġ= ĠviewModel . on Sites () ĊĠĠĠĠĠĠĠ Ġ. test () ĊĠĠĠ Ġval ĠisLoading Ġ= ĠviewModel . on Is Loading () ĊĠĠĠĠĠĠĠ Ġ. test () ĊĊĠĠĠ ĠviewModel . on Resume () ĊĠĠĠ Ġsites . assert Values ( ALL _ MOCK _ MODE LS ) ĊĠĠĠ ĠisLoading . assert Values ( true , Ġfalse ) ĊĊĠĠĠ Ġval Ġmodified Model Ġ= ĠMOCK _ MODEL _ 1 . copy ( id Ġ= Ġ 1 1 1 1 1 ) ĊĠĠĠ ĠviewModel . remove Site ( modified Model ) ĊĊĠĠĠ Ġsites . assert No Values () ĊĠĠĠ ĠisLoading . assert Values ( true , Ġfalse ) ĊĊĠĠĠ Ġverify ( validation Manager ). cancel Scheduled Validation ( modified Model ) ĊĠĠĠ Ġverify ( notification Manager ). cancel Status Notification ( modified Model ) ĊĠĠĠ Ġverify ( database . site Dao ()). delete ( modified Model ) ĊĠĠĠ Ġverify ( database . site Settings Dao ()). delete ( modified Model . settings !! ) ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġremove Site () Ġ{ ĊĠĠĠ Ġval Ġsites Ġ= ĠviewModel . on Sites () ĊĠĠĠĠĠĠĠ Ġ. test () ĊĠĠĠ Ġval Ġempty Text Visibility Ġ= ĠviewModel . on Empty Text Visibility () ĊĠĠĠĠĠĠĠ Ġ. test () ĊĠĠĠ Ġval ĠisLoading Ġ= ĠviewModel . on Is Loading () ĊĠĠĠĠĠĠĠ Ġ. test () ĊĊĠĠĠ ĠviewModel . on Resume () ĊĠĠĠ Ġsites . assert Values ( ALL _ MOCK _ MODE LS ) ĊĠĠĠ ĠisLoading . assert Values ( true , Ġfalse ) ĊĊĠĠĠ Ġval Ġmodels Without 1 Ġ= ĠALL _ MOCK _ MODE LS . to Mutable List () ĊĠĠĠĠĠĠĠ Ġ. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġremove At ( 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ ĠviewModel . remove Site ( MOCK _ MODEL _ 1 ) ĊĊĠĠĠ Ġsites . assert Values ( models Without 1 ) ĊĠĠĠ ĠisLoading . assert Values ( true , Ġfalse ) ĊĠĠĠ Ġempty Text Visibility . assert Values ( false , Ġfalse , Ġfalse ) ĊĊĠĠĠ Ġverify ( validation Manager ). cancel Scheduled Validation ( MOCK _ MODEL _ 1 ) ĊĠĠĠ Ġverify ( notification Manager ). cancel Status Notification ( MOCK _ MODEL _ 1 ) ĊĠĠĠ Ġverify ( database . site Dao ()). delete ( MOCK _ MODEL _ 1 ) ĊĠĠĠ Ġverify ( database . site Settings Dao ()). delete ( MOCK _ MODEL _ 1 . settings !! ) ĊĠ Ġ} Ċ } Ċ