package Ġcom . am ino graphy . world cities . city list Ċ Ċ import Ġcom . am ino graphy . android test . Instant Executor Extension Ċ import Ġcom . am ino graphy . android test . get Or Await Value Ċ import Ġcom . am ino graphy . domain . city . Clear C ities Cache UseCase Ċ import Ġcom . am ino graphy . domain . city . Load C ities UseCase Ċ import Ġcom . am ino graphy . domain . city . Search C ities UseCase Ċ import Ġcom . am ino graphy . domain . city . Select City UseCase Ċ import Ġcom . am ino graphy . test . Coroutine Test Ċ import Ġcom . am ino graphy . world cities . city list . vm . City List ViewModel Ċ import Ġio . mock k . co Every Ċ import Ġio . mock k . co Verify Sequence Ċ import Ġio . mock k . mock k Ċ import Ġkotlinx . coroutines . Coroutine Dispatcher Ċ import Ġkotlinx . coroutines . Experimental Cor outines Api Ċ import Ġorg . junit . jupiter . api . Assertions . assertEquals Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġorg . junit . jupiter . api . Test Instance Ċ import Ġorg . junit . jupiter . api . extension . Extend With Ċ Ċ /** Ċ Ġ* Ġ@ author Ġa mino graphy Ċ Ġ*/ Ċ @ Experimental Cor outines Api Ċ @ Test Instance ( Test Instance . Lifecycle . PER _ CLASS ) Ċ @ Extend With ( Instant Executor Extension :: class ) Ċ class ĠCity List ViewModel Test Ġ: ĠCor outine Test () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġdefault Dispatcher : ĠCor outine Dispatcher Ġ= Ġtest Dispatcher ĊĠĠĠ Ġprivate Ġval Ġload C ities UseCase : ĠLoad C ities UseCase Ġ= Ġmock k () ĊĠĠĠ Ġprivate Ġval Ġsearch C ities UseCase : ĠSearch C ities UseCase Ġ= Ġmock k () ĊĠĠĠ Ġprivate Ġval Ġselect City UseCase : ĠSelect City UseCase Ġ= Ġmock k () ĊĠĠĠ Ġprivate Ġval Ġclear C ities Cache UseCase : ĠClear C ities Cache UseCase Ġ= Ġmock k () ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` load Ġcities Ġshould Ġcause Ġshowing Ġloading `() Ġ= Ġrun Blocking Test Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġload C ities UseCase ( any ()) Ġ} Ġreturns ĠResult . success ( Unit ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġval Ġcity List ViewModel Ġ= Ġcreate ViewModel () ĊĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertEquals ( city List ViewModel . loading . get Or Await Value (), Ġtrue ) ĊĊĠĠĠĠĠĠĠ Ġco Verify Sequence Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġload C ities UseCase ( any ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` load Ġcities Ġsuccessfully Ġshould Ġshow Ġempty Ġquery `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġload C ities UseCase ( any ()) Ġ} Ġreturns ĠResult . success ( Unit ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġval Ġcity List ViewModel Ġ= Ġcreate ViewModel () ĊĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertEquals ( city List ViewModel . query LiveData . get Or Await Value (), Ġ"") ĊĊĠĠĠĠĠĠĠ Ġco Verify Sequence Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġload C ities UseCase ( any ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` load Ġcities Ġwith Ġerror Ġshould Ġhide Ġloading Ġand Ġshow Ġerror Ġmessage `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= Ġ" test " ĊĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġload C ities UseCase ( any ()) Ġ} Ġreturns ĠResult . failure ( Exception ( expected )) ĊĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġval Ġcity List ViewModel Ġ= Ġcreate ViewModel () ĊĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertEquals ( city List ViewModel . loading . get Or Await Value (), Ġfalse ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( city List ViewModel . errorMessage . get Or Await Value (), Ġexpected ) ĊĊĠĠĠĠĠĠĠ Ġco Verify Sequence Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġload C ities UseCase ( any ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` calling Ġset Query Ġshould Ġpost Ġquery Ġvalue Ġon Ġquery LiveData `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= Ġ" test " ĊĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġload C ities UseCase ( any ()) Ġ} Ġreturns ĠResult . success ( Unit ) ĊĊĠĠĠĠĠĠĠ Ġval Ġcity List ViewModel Ġ= Ġcreate ViewModel () ĊĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġcity List ViewModel . set Query ( expected ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertEquals ( city List ViewModel . query LiveData . get Or Await Value (), Ġexpected ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate ViewModel () Ġ= ĠCity List ViewModel ( ĊĠĠĠĠĠĠĠ Ġdefault Dispatcher , ĊĠĠĠĠĠĠĠ Ġload C ities UseCase , ĊĠĠĠĠĠĠĠ Ġsearch C ities UseCase , ĊĠĠĠĠĠĠĠ Ġselect City UseCase , ĊĠĠĠĠĠĠĠ Ġclear C ities Cache UseCase ĊĠĠĠ Ġ) Ċ } Ċ