/* Ċ Ġ* ĠCopyright Ġ 2 0 2 1 ĠLe ah ĠN ich ita Ċ Ġ* Ċ Ġ* Ġ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 Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttps :// 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 Ġcom . fer elin . repo Tests Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroidx . test . core . app . Application Provider Ċ import Ġcom . fer elin . di . D agger Test App Component Ċ import Ġcom . fer elin . domain . entities . Past Price Ċ import Ġcom . fer elin . domain . repositories . Past Price Repo Ċ import Ġcom . fer elin . fake Data . Fake Data Ċ import Ġkotlinx . coroutines . cancel Ċ import Ġkotlinx . coroutines . test . Test Coroutine Dispatcher Ċ import Ġkotlinx . coroutines . test . run Blocking Test Ċ import Ġorg . junit . After Ċ import Ġorg . junit . Assert Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Test Ċ import Ġorg . junit . runner . RunWith Ċ import Ġorg . ro bo lectric . Ro bo lectric TestRunner Ċ import Ġorg . ro bo lectric . annotation . Config Ċ import Ġjavax . inject . Inject Ċ Ċ @ Config ( manifest Ġ= ĠConfig . NONE ) Ċ @ RunWith ( Ro bo lectric TestRunner :: class ) Ċ class ĠP ast Price Repo Test Ġ{ ĊĊĠĠĠ Ġlateinit Ġvar Ġtest Coroutine Dispatcher : ĠTest Coroutine Dispatcher ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar Ġpast Price Repo : ĠP ast Price Repo ĊĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun Ġbefore () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= ĠApplication Provider . getApplicationContext < Context >() ĊĠĠĠĠĠĠĠ Ġval Ġcomponent Ġ= ĠD agger Test App Component . factory (). create ( context ) ĊĠĠĠĠĠĠĠ Ġcomponent . inject ( this ) ĊĊĠĠĠĠĠĠĠ Ġtest Coroutine Dispatcher Ġ= ĠTest Coroutine Dispatcher () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ After ĊĠĠĠ Ġfun Ġafter () Ġ{ ĊĠĠĠĠĠĠĠ Ġtest Coroutine Dispatcher . cancel () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġinsert All () Ġ= Ġtest Coroutine Dispatcher . run Blocking Test Ġ{ ĊĠĠĠĠĠĠĠ Ġpast Price Repo . insert All ( Fake Data . past Prices ) ĊĠĠĠĠĠĠĠ Ġval Ġactual Ġ= Ġmutable Set Of < Past Price >() ĊĊĠĠĠĠĠĠĠ ĠFake Data . past Prices . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrelations Ġ= Ġpast Price Repo . getAll By ( it . relation Company Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrelations . forEach Ġ{ Ġactual . add ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( Fake Data . past Prices . size , Ġactual . size ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġinsert () Ġ= Ġtest Coroutine Dispatcher . run Blocking Test Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpast Price Ġ= ĠP ast Price ( 1 , Ġ 0 , Ġ 0 . 0 , Ġ 0 . 0 , Ġ 0 . 0 , Ġ 0 . 0 , Ġ 0 L ) ĊĠĠĠĠĠĠĠ Ġpast Price Repo . insert ( past Price ) ĊĊĠĠĠĠĠĠĠ Ġval Ġactual Ġ= Ġpast Price Repo . getAll By ( 0 ) ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( 1 , Ġactual . size ) ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( past Price , Ġactual . first ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun ĠgetAll By () Ġ= Ġtest Coroutine Dispatcher . run Blocking Test Ġ{ ĊĠĠĠĠĠĠĠ Ġpast Price Repo . insert All ( Fake Data . past Prices ) ĊĠĠĠĠĠĠĠ Ġval Ġactual Ġ= Ġpast Price Repo . getAll By ( Fake Data . relation Id ) ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( Fake Data . default Size By Relation Id , Ġactual . size ) ĊĊĠĠĠĠĠĠĠ Ġactual . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals ( Fake Data . relation Id , Ġit . relation Company Id ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġerase By () Ġ= Ġtest Coroutine Dispatcher . run Blocking Test Ġ{ ĊĠĠĠĠĠĠĠ Ġpast Price Repo . insert All ( Fake Data . past Prices ) ĊĠĠĠĠĠĠĠ Ġpast Price Repo . erase By ( Fake Data . relation Id ) ĊĊĠĠĠĠĠĠĠ Ġval Ġactual Ġ= Ġpast Price Repo . getAll By ( Fake Data . relation Id ) ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( 0 , Ġactual . size ) ĊĠĠĠ Ġ} Ċ }