package Ġapp . k lim atic . ui . weather . presentation Ċ Ċ import Ġandroidx . arch . core . executor . testing . Instant Task Executor Rule Ċ import Ġapp . k lim atic . data . remote . weather . Weather Response Ċ import Ġapp . k lim atic . data . response . Response Ċ import Ġapp . k lim atic . ui . utils . ViewState Ċ import Ġapp . k lim atic . utils . Test Coroutine Rule Ċ import Ġapp . k lim atic . utils . factory . Test Factory Ċ import Ġapp . k lim atic . utils . robots . Weather ViewModel Mock K Test Robot Ċ import Ġcom . google . common . truth . Truth . assertThat Ċ import Ġio . mock k . slot Ċ import Ġio . mock k . verify Ċ import Ġkotlinx . coroutines . Experimental Cor outines Api Ċ import Ġorg . junit . After Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Rule Ċ import Ġorg . junit . Test Ċ Ċ @ Experimental Cor outines Api Ċ class ĠWeather ViewModel Mock K Test Ġ{ ĊĊĠĠĠ Ġ@ Experimental Cor outines Api ĊĠĠĠ Ġ@ get : Rule ĊĠĠĠ Ġval Ġtest Coroutine Rule Ġ= ĠTest Coroutine Rule () ĊĊĠĠĠ Ġ@ get : Rule ĊĠĠĠ Ġval Ġinstant Task Executor Ġ= ĠInstant Task Executor Rule () ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġrobot : ĠWeather ViewModel Mock K Test Robot ĊĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun ĠsetUp () Ġ{ ĊĠĠĠĠĠĠĠ Ġrobot Ġ= ĠWeather ViewModel Mock K Test Robot (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠsetUp () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ After ĊĠĠĠ Ġfun ĠtearDown () Ġ{ ĊĠĠĠĠĠĠĠ Ġrobot . te ar Down () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` G IV EN Ġquery ĠWHEN Ġfetch Ġcurrent Ġweather Ġapi ĠRET URNS Ġcurrent Ġweather Ġresponse ĠWH ILE Ġfetching Ġcurrent Ġweather ĠTHEN Ġpost Ġsuccess `() = Ġrobot . run Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġweather Slot Ġ= Ġslot < ViewState . Success < Weather Response >>() ĊĠĠĠĠĠĠĠ Ġval Ġquery Ġ= Ġ" xx " ĊĠĠĠĠĠĠĠ Ġval Ġexpect Value Ġ= ĠTest Factory . current Weather Response ĊĠĠĠĠĠĠĠ Ġco Every Fetch Weather Api Returns ( value Ġ= ĠResponse . Success ( data Ġ= Ġexpect Value )) ĊĠĠĠĠĠĠĠ Ġtest Coroutine Rule . run Blocking Test Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . fetch Weather Remote ( query Ġ= Ġquery ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify Weather Observer ( value Ġ= Ġcapture ( weather Slot )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġactual Value Ġ= Ġweather Slot . captured ĊĠĠĠĠĠĠĠ ĠassertThat ( actual Value . data . current ). isEqualTo ( expect Value . current ) ĊĠĠĠĠĠĠĠ ĠassertThat ( actual Value . data . location ). isEqualTo ( expect Value . location ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` WHEN Ġfetch Ġcurrent Ġweather Ġapi ĠRET URNS Ġcurrent Ġweather Ġresponse ĠWH ILE Ġfetching Ġcurrent Ġweather ĠTHEN Ġpost Ġsuccess `() Ġ= Ġrobot . run Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġweather Slot Ġ= Ġslot < ViewState . Success < Weather Response >>() ĊĠĠĠĠĠĠĠ Ġval Ġquery Ġ= Ġ" xx " ĊĠĠĠĠĠĠĠ Ġval Ġexpect Value Ġ= ĠTest Factory . current Weather Response ĊĠĠĠĠĠĠĠ Ġco Every Fetch Weather Api Returns ( value Ġ= ĠResponse . Success ( data Ġ= Ġexpect Value )) ĊĠĠĠĠĠĠĠ Ġtest Coroutine Rule . run Blocking Test Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . fetch Weather Remote ( query Ġ= Ġquery ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify Weather Observer ( value Ġ= Ġcapture ( weather Slot )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġactual Value Ġ= Ġweather Slot . captured ĊĠĠĠĠĠĠĠ ĠassertThat ( actual Value . data . current ). isEqualTo ( expect Value . current ) ĊĠĠĠĠĠĠĠ ĠassertThat ( actual Value . data . location ). isEqualTo ( expect Value . location ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` G IV EN Ġquery ĠWHEN Ġfetch Ġcurrent Ġweather Ġapi ĠRET URNS Ġerror ĠWH ILE Ġfetching Ġcurrent Ġweather ĠTHEN Ġshow Ġerror `() Ġ= Ġrobot . run Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġquery Ġ= Ġ" xx " ĊĠĠĠĠĠĠĠ Ġco Every Fetch Weather Api Returns ( value Ġ= ĠResponse . Error ( Test Factory . ERROR _ CODE _ GENERIC )) ĊĠĠĠĠĠĠĠ Ġtest Coroutine Rule . run Blocking Test Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . fetch Weather Remote ( query Ġ= Ġquery ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify Weather Observer ( value Ġ= ĠView State . Error ( Test Factory . ERROR _ CODE _ GENERIC )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` WHEN Ġfetch Ġcurrent Ġweather Ġapi ĠRET URNS Ġerror ĠWH ILE Ġfetching Ġcurrent Ġweather ĠTHEN Ġshow Ġerror `() Ġ= Ġrobot . run Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġquery Ġ= Ġ" xx " ĊĠĠĠĠĠĠĠ Ġco Every Fetch Weather Api Returns ( value Ġ= ĠResponse . Error ( Test Factory . ERROR _ CODE _ GENERIC )) ĊĠĠĠĠĠĠĠ Ġtest Coroutine Rule . run Blocking Test Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . fetch Weather Remote ( query Ġ= Ġquery ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify Weather Observer ( value Ġ= ĠView State . Error ( Test Factory . ERROR _ CODE _ GENERIC )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ } Ċ