package Ġfr . ek ito . my weather app Ċ Ċ import Ġandroid . support . test . runner . Android JUnit 4 Ċ import Ġfr . ek ito . my weather app . data . datasource . room . Weather DAO Ċ import Ġfr . ek ito . my weather app . data . datasource . room . Weather Database Ċ import Ġfr . ek ito . my weather app . data . datasource . room . Weather Entity Ċ import Ġfr . ek ito . my weather app . data . datasource . web service . Weather Web Datasource Ċ import Ġfr . ek ito . my weather app . data . datasource . web service . json . geo code . getLocation Ċ import Ġfr . ek ito . my weather app . data . datasource . web service . json . weather . get Daily Forecast s Ċ import Ġjunit . framework . Assert Ċ import Ġkotlinx . coroutines . experimental . run Blocking Ċ import Ġorg . junit . After Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Test Ċ import Ġorg . junit . runner . RunWith Ċ import Ġorg . k oin . standalone . Stand Al one Context . close K oin Ċ import Ġorg . k oin . standalone . Stand Al one Context . load K oin Modules Ċ import Ġorg . k oin . standalone . inject Ċ import Ġorg . k oin . test . K oin Test Ċ import Ġjava . util .* Ċ Ċ /** Ċ Ġ* ĠWeather DAO Test Ġis Ġa ĠK oin Test Ġwith ĠAndroid JUnit 4 Ġrunner Ċ Ġ* Ċ Ġ* ĠK oin Test Ġhelp Ġinject ĠK oin Ġcomponents Ġfrom Ġactual Ġruntime Ċ Ġ*/ Ċ @ RunWith ( Android JUnit 4 :: class ) Ċ class ĠWeather DAO Test Ġ: ĠK oin Test Ġ{ ĊĊĠĠĠ Ġ/* ĊĠĠĠĠ Ġ* ĠInject Ġneeded Ġcomponents Ġfrom ĠK oin ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġweather Database : ĠWeather Database Ġby Ġinject () ĊĠĠĠ Ġval Ġweather Web Datasource : ĠWeather Web Datasource Ġby Ġinject () ĊĠĠĠ Ġval Ġweather DAO : ĠWeather DAO Ġby Ġinject () ĊĊĊĠĠĠ Ġ@ Before () ĊĠĠĠ Ġfun Ġbefore () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠReplace Ġdefault ĠWeather Database Ġdefinition Ġwith Ġin - memory Ġdefinition ĊĠĠĠĠĠĠĠ Ġload K oin Modules ( room Test Module ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ After ĊĠĠĠ Ġfun Ġafter () Ġ{ ĊĠĠĠĠĠĠĠ Ġweather Database . close () ĊĠĠĠĠĠĠĠ Ġclose K oin () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Save () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlocation Ġ= Ġ" Par is " ĊĊĠĠĠĠĠĠĠ Ġval Ġnow Ġ= ĠDate () ĊĠĠĠĠĠĠĠ Ġval Ġentities Ġ= Ġget Weather As Entities ( location , Ġnow ) ĊĊĠĠĠĠĠĠĠ Ġweather DAO . save All ( entities ) ĊĠĠĠĠĠĠĠ Ġval Ġids Ġ= Ġentities . map Ġ{ Ġit . id Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġrequested Entities Ġ= Ġids . map Ġ{ Ġweather DAO . find Weather ById ( it ) Ġ} ĊĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( entities , Ġrequested Entities ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Find All By () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlocation Par is Ġ= Ġ" Par is " ĊĠĠĠĠĠĠĠ Ġval Ġdate Par is Ġ= ĠDate () ĊĠĠĠĠĠĠĠ Ġval Ġweather Par is Ġ= Ġget Weather As Entities ( location Par is , Ġdate Par is ) ĊĠĠĠĠĠĠĠ Ġweather DAO . save All ( weather Par is ) ĊĊĠĠĠĠĠĠĠ Ġval Ġlocation Tl se Ġ= Ġ" Tou lo use " ĊĠĠĠĠĠĠĠ Ġval Ġdate Tou lo use Ġ= ĠDate () ĊĠĠĠĠĠĠĠ Ġval Ġweather Tou lo use Ġ= Ġget Weather As Entities ( location Tl se , Ġdate Tou lo use ) ĊĠĠĠĠĠĠĠ Ġweather DAO . save All ( weather Tou lo use ) ĊĊĠĠĠĠĠĠĠ Ġval Ġresult List Ġ= Ġweather DAO . findAll By ( location Tl se , Ġdate Tou lo use ) ĊĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( weather Tou lo use , Ġresult List ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Find Latest () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlocation Par is Ġ= Ġ" Par is " ĊĠĠĠĠĠĠĠ Ġval Ġdate Par is Ġ= ĠDate () ĊĠĠĠĠĠĠĠ Ġval Ġweather Par is Ġ= Ġget Weather As Entities ( location Par is , Ġdate Par is ) ĊĠĠĠĠĠĠĠ Ġweather DAO . save All ( weather Par is ) ĊĊĠĠĠĠĠĠĠ Ġval Ġlocation Ber lin Ġ= Ġ" Ber lin " ĊĠĠĠĠĠĠĠ Ġval Ġdate Ber lin Ġ= ĠDate () ĊĠĠĠĠĠĠĠ Ġval Ġweather Ber lin Ġ= Ġget Weather As Entities ( location Ber lin , Ġdate Ber lin ) ĊĠĠĠĠĠĠĠ Ġweather DAO . save All ( weather Ber lin ) ĊĊĠĠĠĠĠĠĠ Ġval Ġlocation Tl se Ġ= Ġ" Tou lo use " ĊĠĠĠĠĠĠĠ Ġval Ġdate Tou lo use Ġ= ĠDate () ĊĠĠĠĠĠĠĠ Ġval Ġweather Tou lo use Ġ= Ġget Weather As Entities ( location Tl se , Ġdate Tou lo use ) ĊĠĠĠĠĠĠĠ Ġweather DAO . save All ( weather Tou lo use ) ĊĊĠĠĠĠĠĠĠ Ġval Ġresult : ĠWeather Entity Ġ= Ġweather DAO . find Latest Weather (). first () ĊĠĠĠĠĠĠĠ Ġval Ġresult List Ġ= Ġweather DAO . findAll By ( result . location , Ġresult . date ) ĊĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( weather Tou lo use , Ġresult List ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Weather As Entities ( ĊĠĠĠĠĠĠĠ Ġlocation Par is : ĠString , ĊĠĠĠĠĠĠĠ Ġdate Par is : ĠDate ĊĠĠĠ Ġ): ĠList < Weather Entity > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġl Ġ= Ġweather Web Datasource . geo code ( location Par is ). await (). getLocation () Ġ?: Ġerror ("") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġweather Web Datasource . weather ( l . lat , Ġl . lng , Ġ" EN "). await () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. get Daily Forecast s ( location Par is ). map Ġ{ ĠWeather Entity . from ( it , Ġdate Par is ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }