/* Ċ Ġ* ĠCopyright Ġ 2 0 2 0 ĠAr pan ĠS ark ar Ċ Ġ* Ċ Ġ* Ġ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 Ġdev . arp an . e commerce . ui . product . details Ċ Ċ import Ġandroidx . arch . core . executor . testing . Instant Task Executor Rule Ċ import Ġdev . arp an . e commerce . Main Coroutine Rule Ċ import Ġdev . arp an . e commerce . data . Default Products Repository Ċ import Ġdev . arp an . e commerce . data . Products Repository Ċ import Ġdev . arp an . e commerce . data . source . local . Default Products Local DataSource Ċ import Ġdev . arp an . e commerce . get Or Await Value Ċ import Ġdev . arp an . e commerce . mock . Fake Products Remote DataSource Ċ import Ġkotlinx . coroutines . test . run Blocking Test Ċ import Ġorg . junit . Assert . assertEquals Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Rule Ċ import Ġorg . junit . Test Ċ import Ġorg . mockito . Mock Ċ import Ġorg . mockito . Mockito Annotations Ċ Ċ class ĠProduct Details ViewModel Test Ġ{ ĊĠĠĠ Ġ@ get : Rule ĊĠĠĠ Ġval Ġinstant Executor Rule Ġ= ĠInstant Task Executor Rule () ĊĊĠĠĠ Ġ@ get : Rule ĊĠĠĠ Ġval Ġmain Coroutine Rule Ġ= ĠMain Coroutine Rule () ĊĊĠĠĠ Ġ@ Mock ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġproducts Repository : ĠProducts Repository ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġproduct Details ViewModel : ĠProduct Details ViewModel ĊĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun Ġsetup () Ġ= Ġmain Coroutine Rule . run Blocking Test Ġ{ ĊĠĠĠĠĠĠĠ ĠMockito Annotations . init Mocks ( this ) ĊĠĠĠĠĠĠĠ Ġproducts Repository Ġ= ĠDefault Products Repository ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDefault Products Local DataSource (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFake Products Remote DataSource (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmain Coroutine Rule . dispatcher ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġproduct Details ViewModel Ġ= ĠProduct Details ViewModel ( products Repository ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` product Ġdetails Ġloaded Ġcorrectly `() Ġ= Ġmain Coroutine Rule . run Blocking Test Ġ{ ĊĠĠĠĠĠĠĠ Ġproduct Details ViewModel . fetch Product Details ( 1 ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( product Details ViewModel . product Details . get Or Await Value (). productId , Ġ 1 ) ĊĠĠĠ Ġ} Ċ } Ċ