package Ġcore . playground . domain Ċ Ċ import Ġcore . playground . data . Response Ċ import Ġkotlinx . coroutines . flow . flow Ċ import Ġkotlinx . coroutines . flow . flow On Ċ import Ġkotlinx . coroutines . flow . last Ċ import Ġkotlinx . coroutines . flow . take Ċ import Ġorg . hamcrest . Core Matchers .` is ` Ċ import Ġorg . hamcrest . Matcher Assert . assertThat Ċ import Ġorg . junit . jupiter . api . After Each Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġtesting . playground . core . Coroutine Test Ċ Ċ internal Ġclass ĠNetwork Bound Result Test Ġ: ĠCor outine Test () Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġcache : ĠAny ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġremote Ġ= ĠAny () ĊĊĠĠĠ Ġprivate Ġval Ġquery Ġ= Ġflow Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( cache Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġemit ( cache ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġresponse Ġ= Ġflow Ġ{ ĊĠĠĠĠĠĠĠ Ġemit ( Response . Success ( remote )) ĊĠĠĠ Ġ}. flow On ( test Dispatcher ) ĊĊĠĠĠ Ġ@ After Each ĊĠĠĠ Ġinternal Ġfun ĠtearDown () Ġ{ ĊĠĠĠĠĠĠĠ Ġcache Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` success Ġwith Ġcache `() Ġ= Ġrun Test Ġ{ ĊĊĠĠĠĠĠĠĠ Ġcache Ġ= ĠAny () ĊĊĠĠĠĠĠĠĠ Ġval Ġnetwork Bound Result Ġ= Ġresponse . as Network Bound Result ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquery Ġ= Ġquery , ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcache Ġ= Ġit ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠassertThat ( network Bound Result . take ( 2 ). last (). data , Ġ` is `( cache )) ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġnetwork Bound Result . last () ĊĠĠĠĠĠĠĠ ĠassertThat ( result . data , Ġ` is `( remote )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` fetch Ġwithout Ġcache `() Ġ= Ġrun Test Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġnetwork Bound Result Ġ= Ġresponse . as Network Bound Result ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquery Ġ= Ġquery , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshould Fetch Ġ= Ġ{ Ġtrue Ġ}, ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcache Ġ= Ġit ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġnetwork Bound Result . last () ĊĠĠĠĠĠĠĠ ĠassertThat ( result . data , Ġ` is `( remote )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġnot Ġfetch `() Ġ= Ġrun Test Ġ{ ĊĊĠĠĠĠĠĠĠ Ġcache Ġ= ĠAny () ĊĊĠĠĠĠĠĠĠ Ġval Ġnetwork Bound Result Ġ= Ġresponse . as Network Bound Result ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquery Ġ= Ġquery , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshould Fetch Ġ= Ġ{ Ġfalse Ġ}, ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcache Ġ= Ġit ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġnetwork Bound Result . last () ĊĠĠĠĠĠĠĠ ĠassertThat ( result . data , Ġ` is `( cache )) ĊĠĠĠ Ġ} Ċ } Ċ