/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 9 ĠDavid ĠAg ui ar ĠG on z ale z Ċ Ġ* Ċ Ġ* Ġ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 Ġgc . david . df m . elevation . domain Ċ Ċ import Ġcom . google . android . gms . maps . model . LatLng Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . any Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . eq Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . wh enever Ċ import Ġgc . david . df m . elevation . data . Elevation Repository Ċ import Ġgc . david . df m . elevation . data . mapper . Elevation Entity Data Mapper Ċ import Ġgc . david . df m . elevation . data . model . Elevation Entity Ċ import Ġgc . david . df m . elevation . data . model . Elevation Status Ċ import Ġgc . david . df m . elevation . data . model . Result Ċ import Ġgc . david . df m . elevation . domain . model . Elevation Ċ import Ġgc . david . df m . executor . Executor Ċ import Ġgc . david . df m . executor . Interactor Ċ import Ġgc . david . df m . executor . MainThread Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Test Ċ import Ġorg . mockito . Argument Matchers . any Int Ċ import Ġorg . mockito . Argument Matchers . any String Ċ import Ġorg . mockito . Mock Ċ import Ġorg . mockito . Mockito . do Answer Ċ import Ġorg . mockito . Mockito . verify Ċ import Ġorg . mockito . Mockito Annotations Ċ Ċ /** Ċ Ġ* ĠCreated Ġby Ġd avid Ġon Ġ 1 1 . 0 1 . 1 7 . Ċ Ġ*/ Ċ class ĠE levation Interactor Test Ġ{ ĊĊĠĠĠ Ġ@ Mock ĊĠĠĠ Ġlateinit Ġvar Ġexecutor : ĠExecutor ĊĠĠĠ Ġ@ Mock ĊĠĠĠ Ġlateinit Ġvar Ġmain Thread : ĠMain Thread ĊĠĠĠ Ġ@ Mock ĊĠĠĠ Ġlateinit Ġvar Ġelevation Entity Data Mapper : ĠE levation Entity Data Mapper ĊĠĠĠ Ġ@ Mock ĊĠĠĠ Ġlateinit Ġvar Ġrepository : ĠE levation Repository ĊĠĠĠ Ġ@ Mock ĊĠĠĠ Ġlateinit Ġvar Ġcallback : ĠE levation UseCase . Callback ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġelevation Interactor : ĠE levation Interactor ĊĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun ĠsetUp () Ġ{ ĊĠĠĠĠĠĠĠ ĠMockito Annotations . init Mocks ( this ) ĊĊĠĠĠĠĠĠĠ Ġelevation Interactor Ġ= ĠE levation Interactor ( executor , Ġmain Thread , Ġelevation Entity Data Mapper , Ġrepository ) ĊĊĠĠĠĠĠĠĠ Ġdo Answer Ġ{ Ġ( it . arguments [ 0 ] Ġas ĠInter actor ). run () Ġ}. wh enever ( executor ). run ( any ()) ĊĠĠĠĠĠĠĠ Ġdo Answer Ġ{ Ġ( it . arguments [ 0 ] Ġas ĠRunnable ). run () Ġ}. wh enever ( main Thread ). post ( any ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` shows Ġerror Ġwhen Ġcoordinate Ġlist Ġis Ġempty `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcoordinate List Ġ= Ġempty List < LatLng >() ĊĊĠĠĠĠĠĠĠ Ġelevation Interactor . execute ( coordinate List , Ġany Int (), Ġcallback ) ĊĊĠĠĠĠĠĠĠ Ġverify ( callback ). onError (" Empty Ġcoordinates Ġlist ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` returns Ġcallback Ġwhen Ġelevation Ġmodel Ġis Ġcorrect `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcoordinate List Ġ= Ġmutable ListOf ( LatLng ( 0 . 0 , Ġ 0 . 0 )) ĊĠĠĠĠĠĠĠ Ġval Ġresults Ġ= ĠArrayList < Result >() ĊĠĠĠĠĠĠĠ Ġval Ġelevation Ġ= Ġ 1 . 0 ĊĠĠĠĠĠĠĠ Ġresults . add ( Result ( elevation )) ĊĠĠĠĠĠĠĠ Ġval Ġelevation Entity Ġ= ĠE levation Entity ( results , ĠE levation Status . OK ) ĊĠĠĠĠĠĠĠ Ġdo Answer Ġ{ Ġ( it . arguments [ 2 ] Ġas ĠE levation Repository . Callback ). on Success ( elevation Entity ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. wh enever ( repository ). get Elevation ( any String (), Ġany Int (), Ġany ()) ĊĊĠĠĠĠĠĠĠ Ġval Ġelevation Results Ġ= Ġmutable ListOf ( elevation ) ĊĠĠĠĠĠĠĠ Ġval Ġelevation 1 Ġ= ĠE levation ( elevation Results ) ĊĠĠĠĠĠĠĠ Ġwhenever ( elevation Entity Data Mapper . transform ( elevation Entity )). thenReturn ( elevation 1 ) ĊĊĠĠĠĠĠĠĠ Ġelevation Interactor . execute ( coordinate List , Ġany Int (), Ġcallback ) ĊĊĠĠĠĠĠĠĠ Ġverify ( callback ). on Elevation Loaded ( any ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` shows Ġerror Ġwhen Ġelevation Ġmodel Ġis Ġnot Ġcorrect `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcoordinate List Ġ= Ġmutable ListOf ( LatLng ( 0 . 0 , Ġ 0 . 0 )) ĊĠĠĠĠĠĠĠ Ġval ĠerrorMessage Ġ= Ġ" fake Ġerror Ġmessage " ĊĠĠĠĠĠĠĠ Ġdo Answer Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( it . arguments [ 2 ] Ġas ĠE levation Repository . Callback ). onError ( errorMessage ) ĊĠĠĠĠĠĠĠ Ġ}. wh enever ( repository ). get Elevation ( any String (), Ġany Int (), Ġany ()) ĊĊĠĠĠĠĠĠĠ Ġelevation Interactor . execute ( coordinate List , Ġany Int (), Ġcallback ) ĊĊĠĠĠĠĠĠĠ Ġverify ( callback ). onError ( errorMessage ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` builds Ġcoordinates Ġpath Ġfor Ġlist Ġwith Ġone Ġcoordinate `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcoordinate List Ġ= Ġmutable ListOf ( LatLng ( 0 . 0 , Ġ 0 . 0 )) ĊĠĠĠĠĠĠĠ Ġval Ġcoordinates Path Ġ= Ġ" 0 . 0 , 0 . 0 " ĊĠĠĠĠĠĠĠ Ġval Ġmax Samples Ġ= Ġ 1 ĊĊĠĠĠĠĠĠĠ Ġelevation Interactor . execute ( coordinate List , Ġmax Samples , Ġcallback ) ĊĊĠĠĠĠĠĠĠ Ġverify ( repository ). get Elevation ( eq ( coordinates Path ), Ġeq ( max Samples ), Ġany ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` builds Ġcoordinates Ġpath Ġfor Ġlist Ġwith Ġmore Ġthan Ġone Ġcoordinate `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcoordinate List Ġ= Ġmutable ListOf ( LatLng ( 0 . 0 , Ġ 0 . 0 ), ĠLat Lng ( 1 . 0 , Ġ 1 . 0 )) ĊĠĠĠĠĠĠĠ Ġval Ġcoordinates Path Ġ= Ġ" 0 . 0 , 0 . 0 | 1 . 0 , 1 . 0 " ĊĠĠĠĠĠĠĠ Ġval Ġmax Samples Ġ= Ġ 1 ĊĊĠĠĠĠĠĠĠ Ġelevation Interactor . execute ( coordinate List , Ġmax Samples , Ġcallback ) ĊĊĠĠĠĠĠĠĠ Ġverify ( repository ). get Elevation ( eq ( coordinates Path ), Ġeq ( max Samples ), Ġany ()) ĊĠĠĠ Ġ} Ċ }