package Ġcom . h arris . crypt ow orld . datasource Ċ Ċ import Ġandroidx . arch . core . executor . testing . Instant Task Executor Rule Ċ import Ġcom . h arris . crypt ow orld . Coroutine Test Rule Ċ import Ġcom . h arris . crypt ow orld . data . datasource . Crypto DataSource Ċ import Ġcom . h arris . crypt ow orld . data . service . Crypto ApiService Ċ import Ġio . mock k . Mock K Annotations Ċ import Ġjunit . framework . Assert . assertEquals Ċ import Ġkotlinx . coroutines . Experimental Cor outines Api Ċ import Ġkotlinx . coroutines . run Blocking Ċ import Ġokhttp 3 . mock webserver . Mock Response Ċ import Ġokhttp 3 . mock webserver . Mock WebServer Ċ import Ġok io . buffer Ċ import Ġok io . source Ċ import Ġorg . junit . After Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Rule Ċ import Ġorg . junit . Test Ċ import Ġorg . junit . runner . RunWith Ċ import Ġorg . junit . runners . JUnit 4 Ċ import Ġretrofit 2 . Ret rofit Ċ import Ġretrofit 2 . converter . gson . Gson Converter Factory ĊĊ Ċ @ Experimental Cor outines Api Ċ @ RunWith ( JUnit 4 :: class ) Ċ class ĠCrypto DataSource Test Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġmock WebServer Ġ= ĠMock WebServer () ĊĊĠĠĠ Ġ@ get : Rule ĊĠĠĠ Ġval Ġcoroutine Test Rule Ġ= ĠCor outine Test Rule () ĊĊĠĠĠ Ġ@ get : Rule ĊĠĠĠ Ġvar Ġrule Ġ= ĠInstant Task Executor Rule () ĊĊĠĠĠ Ġlateinit Ġvar ĠdataSource : ĠCrypto DataSource ĊĊĊĠĠĠ Ġlateinit Ġvar Ġservice : ĠCrypto ApiService ĊĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun ĠsetUp () Ġ{ ĊĠĠĠĠĠĠĠ ĠMock K Annotations . init ( this , Ġrelax Unit Fun Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġservice Ġ= ĠRet rofit . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. baseUrl ( mock WebServer . url ("")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Converter Factory ( Gson Converter Factory . create ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. create ( Crypto ApiService :: class . java ) ĊĊĠĠĠĠĠĠĠ ĠdataSource Ġ= ĠCrypto DataSource ( service ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ After ĊĠĠĠ Ġfun Ġstop Service () Ġ{ ĊĠĠĠĠĠĠĠ Ġmock WebServer . shutdown () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` get Ġall Ġcrypto Ġsuccess `() Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠ Ġenqueue Response (" get - all - crypto - success . json ") ĊĠĠĠĠĠĠĠ Ġval Ġall Crypto Ġ= ĠdataSource . getAll Crypto () ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( all Crypto . success , Ġtrue ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( all Crypto . error , Ġnull ) ĊĠĠĠĠĠĠĠ Ġassert ( all Crypto . crypto !!. isNotEmpty ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` get Ġall Ġcrypto Ġfailed `() Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠ Ġenqueue Response (" error - response . json ") ĊĠĠĠĠĠĠĠ Ġval Ġall Crypto Ġ= ĠdataSource . getAll Crypto () ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( all Crypto . success , Ġfalse ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( all Crypto . crypto , Ġnull ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( all Crypto . error ?. code , Ġ 4 0 0 ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( all Crypto . error ?. info , Ġ" api Ġerror ") ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` get Ġconvert Ġcrypto Ġsuccess `() Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠ Ġenqueue Response (" convert - crypto - success . json ") ĊĠĠĠĠĠĠĠ Ġval Ġall Crypto Ġ= ĠdataSource . convert Crypto (" A ", Ġ" B ", Ġ 1 . 0 ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( all Crypto . success , Ġtrue ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( all Crypto . error , Ġnull ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( all Crypto . result , Ġ 1 . 0 ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( all Crypto . info ?. rate , Ġ 1 . 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` get Ġconvert Ġcrypto Ġfailed `() Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠ Ġenqueue Response (" error - response . json ") ĊĠĠĠĠĠĠĠ Ġval Ġall Crypto Ġ= ĠdataSource . convert Crypto (" A ", Ġ" B ", Ġ 1 . 0 ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( all Crypto . success , Ġfalse ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( all Crypto . result , Ġ 0 . 0 ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( all Crypto . error ?. code , Ġ 4 0 0 ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( all Crypto . error ?. info , Ġ" api Ġerror ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġenqueue Response ( fileName : ĠString , Ġhttp StatusCode : ĠInt Ġ= Ġ 2 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠinputStream Ġ= Ġjava Class . class Loader ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . getResource AsStream ( fileName ) ĊĠĠĠĠĠĠĠ ĠinputStream ?. source ()?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsource Ġ= Ġit . buffer () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmock Response Ġ= ĠMock Response () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmock Response . set Response Code ( http StatusCode ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmock WebServer . enqueue ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmock Response . set Body ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsource . readString ( Charsets . UTF _ 8 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} Ċ }