package Ġcom . s rg . code test rick mort y . data . features . locations Ċ Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . do Answer Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . do Return Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . stub Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . verify Ċ import Ġcom . s rg . code test rick mort y . data . features . locations . map pers . to Domain Ċ import Ġcom . s rg . code test rick mort y . data . features . locations . sources . Locations DataSource Ċ import Ġcom . s rg . code test rick mort y . utils . Last K now Location ApiModel Factory Ċ import Ġkotlinx . coroutines . Experimental Cor outines Api Ċ import Ġkotlinx . coroutines . run Blocking Ċ import Ġorg . junit . Assert Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Test Ċ import Ġorg . junit . runner . RunWith Ċ import Ġorg . mockito . Mock Ċ import Ġorg . mockito . junit . Mockito JUnit Runner Ċ Ċ @ Experimental Cor outines Api Ċ @ RunWith ( Mockito JUnit Runner :: class ) Ċ class ĠLoc ations Repository Impl Test Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġrepository : ĠLoc ations Repository Impl ĊĊĠĠĠ Ġ@ Mock ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġdatasource : ĠLoc ations DataSource ĊĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun ĠsetUp () Ġ{ ĊĠĠĠĠĠĠĠ Ġrepository Ġ= ĠLoc ations Repository Impl ( datasource ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` it Ġshould Ġcall Ġservice Ġlast Ġknow Ġlocation Ġand Ġsuccess Ġinteractions `() Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠ Ġ// given : ĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= ĠLast K now Location ApiModel Factory . create One () ĊĠĠĠĠĠĠĠ Ġval Ġlocation Id Ġ= Ġ 2 0 L ĊĊĠĠĠĠĠĠĠ Ġdatasource . stub Ġ{ Ġon Blocking Ġ{ ĠgetLast K now Location ( location Id Ġ= Ġlocation Id ) Ġ} Ġdo Return Ġresponse Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// when : ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġrepository . getLast K now Location ( location Id ) ĊĊĠĠĠĠĠĠĠ Ġ// then : ĊĠĠĠĠĠĠĠ Ġverify ( datasource ). getLast K now Location ( location Id ) ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( response . to Domain (), Ġresult ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` it Ġshould Ġcall Ġservice Ġlast Ġknow Ġlocation Ġand Ġerror Ġinteractions `() Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠ Ġ// given : ĊĠĠĠĠĠĠĠ Ġval Ġerror Ġ= ĠThrowable () ĊĠĠĠĠĠĠĠ Ġval Ġlocation Id Ġ= Ġ 2 0 L ĊĊĠĠĠĠĠĠĠ Ġdatasource . stub Ġ{ Ġon Blocking Ġ{ ĠgetLast K now Location ( location Id ) Ġ} Ġdo Answer Ġ{ Ġthrow Ġerror Ġ} Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// when : ĊĠĠĠĠĠĠĠ Ġvar Ġresult : ĠThrowable ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepository . getLast K now Location ( location Id ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( t : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġt ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// then : ĊĠĠĠĠĠĠĠ Ġverify ( datasource ). getLast K now Location ( location Id ) ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( error , Ġresult ) ĊĠĠĠ Ġ} Ċ Ċ }