package Ġcom . lee h end ry p . stone android challenge . feed . data . local Ċ Ċ import Ġandroidx . arch . core . executor . testing . Instant Task Executor Rule Ċ import Ġcom . lee h end ry p . stone android challenge . core . DTO s Ċ import Ġcom . lee h end ry p . stone android challenge . core . Rx UnitTest Ċ import Ġcom . lee h end ry p . stone android challenge . feed . data . local . database . Room Jo ke Dao Ċ import Ġcom . lee h end ry p . stone android challenge . feed . data . to Jo ke Ċ import Ġio . mock k . every Ċ import Ġio . mock k . spy k Ċ import Ġio . reactivex . Comp letable Ċ import Ġio . reactivex . Flow able Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Rule Ċ import Ġorg . junit . Test Ċ Ċ class ĠLocal DataSource Impl Test Ġ: ĠRx UnitTest () Ġ{ ĊĠĠĠ Ġ@ get : Rule ĊĠĠĠ Ġval Ġtask Executor Rule Ġ= ĠInstant Task Executor Rule () ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġdao : ĠRoom Jo ke Dao ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġlocal Source : ĠLocal DataSource ĊĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun Ġ` set Ġup `() Ġ{ ĊĠĠĠĠĠĠĠ Ġdao Ġ= Ġspy k () ĊĠĠĠĠĠĠĠ Ġlocal Source Ġ= ĠLocal DataSource Impl ( dao ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġemit Ġcomplete Ġupon Ġsuccessful Ġattempt Ġto Ġsave Ġjo ke Ġin Ġdatabase `() Ġ{ ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġdao . insert ( any ()) Ġ} Ġreturns ĠComp letable . complete () ĊĊĠĠĠĠĠĠĠ Ġlocal Source . save ( DTO s . jo ke One Response . to Jo ke ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. test () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. assert Complete () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. assert No Errors () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġemit Ġerror Ġupon Ġfailed Ġattempt Ġto Ġsave Ġjo ke Ġin Ġdatabase `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġerror Ġ= ĠThrowable () ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġdao . insert ( any ()) Ġ} Ġreturns ĠComp letable . error ( error ) ĊĊĠĠĠĠĠĠĠ Ġlocal Source . save ( DTO s . jo ke One Response . to Jo ke ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. test () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. assertNot Complete () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. assert Error ( error ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġemit Ġj okes Ġupon Ġsuccessful Ġsearch Ġin Ġdatabase `() Ġ{ ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġdao . search ( any ()) Ġ} Ġreturns ĠD TO s . room Jo ke Flow able ĊĊĠĠĠĠĠĠĠ Ġlocal Source . search ("") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. test () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. assert Complete () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. assert No Errors () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. values () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. contains All ( DTO s . j okes ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġemit Ġno Ġjo ke Ġupon Ġsuccessful Ġno - result Ġsearch Ġin Ġdatabase `() Ġ{ ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġdao . search ( any ()) Ġ} Ġreturns ĠFlow able . empty () ĊĊĠĠĠĠĠĠĠ Ġlocal Source . search ("") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. test () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. assert Complete () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. assert No Errors () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġemit Ġerror Ġupon Ġfailed Ġsearch Ġattempt Ġin Ġdatabase `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġerror Ġ= ĠThrowable () ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġdao . search ( any ()) Ġ} Ġreturns ĠFlow able . error ( error ) ĊĊĠĠĠĠĠĠĠ Ġlocal Source . search ("") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. test () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. assertNot Complete () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. assert Error ( error ) ĊĠĠĠ Ġ} Ċ } Ċ