package Ġcom . wo jd or . feature _ rates Ċ Ċ import Ġcom . wo jd or . domain . Rate Ċ import Ġcom . wo jd or . domain . Rates Ċ import Ġcom . wo jd or . domain . enums . Currency Ċ import Ġcom . wo jd or . use case _ rates . Base Rates Use case Ċ import Ġio . mock k . every Ċ import Ġio . mock k . spy k Ċ import Ġio . mock k . verify Ċ import Ġio . reactivex . Observable Ċ import Ġio . reactivex . android . plugins . Rx Android Plugins Ċ import Ġio . reactivex . schedul ers . Schedulers Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Test Ċ import Ġjava . math . BigDecimal Ċ Ċ class ĠR ates Presenter Test Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġmock Rates Use case Ġby Ġlazy Ġ{ Ġspy k < Base Rates Use case >() Ġ} ĊĠĠĠ Ġprivate Ġval Ġmock Rates View Ġby Ġlazy Ġ{ Ġspy k < Rates Contract . View >() Ġ} ĊĠĠĠ Ġprivate Ġval Ġrates Presenter Ġby Ġlazy Ġ{ ĠR ates Presenter ( mock Rates Use case ) Ġ} ĊĠĠĠ Ġprivate Ġval Ġmock Rates Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠR ates ( mutable ListOf < Rate >(). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( Rate ( Currency . EUR , ĠBigDecimal . ONE )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( Rate ( Currency . USD , ĠBigDecimal . ONE )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( Rate ( Currency . GBP , ĠBigDecimal . ONE )) ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun Ġsetup Tests () Ġ{ ĊĠĠĠĠĠĠĠ ĠRx Android Plugins . set Init MainThread Scheduler Handler Ġ{ ĠS chedulers . tr amp oline () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` When Ġpresenter Ġhas Ġview Ġattached Ġthen Ġshould Ġfetch Ġand Ġshow Ġrates `() Ġ{ ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġmock Rates Use case . get Rates With Interval ( any ()) Ġ} Ġreturns ĠObservable . from Array ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmock Rates ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġrates Presenter . on Attach View ( mock Rates View ) ĊĠĠĠĠĠĠĠ Ġverify Ġ{ Ġmock Rates View . show Rates ( any ()) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` When Ġpresenter Ġhas Ġview Ġattached Ġand Ġfetch Ġrates Ġthrow Ġerror Ġthen Ġshould Ġshow Ġerror Ġmessage `() Ġ{ ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġmock Rates Use case . get Rates With Interval ( any ()) Ġ} Ġreturns ĠObservable . error ( Throwable ()) ĊĠĠĠĠĠĠĠ Ġrates Presenter . on Attach View ( mock Rates View ) ĊĠĠĠĠĠĠĠ Ġverify Ġ{ Ġmock Rates View . show Fetch Rates Error ( any ()) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` When Ġpresenter Ġhas Ġcurrency Ġset Ġas Ġchosen Ġthen Ġshould Ġshow Ġrates Ġin Ġnew Ġorder Ġand Ġnewly Ġfetched Ġrates `() Ġ{ ĊĠĠĠĠĠĠĠ Ġrates Presenter . view Ġ= Ġmock Rates View ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġmock Rates Use case . get Rates With Interval ( any ()) Ġ} Ġreturns ĠObservable . from Array ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmock Rates ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġrates Presenter . set Currency As Ch osen ( Currency . USD ) ĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 2 ) Ġ{ Ġmock Rates View . show Rates ( any ()) Ġ} ĊĠĠĠ Ġ} Ċ }