package Ġio . github . g ust av ob arb os ab . movies . favorites . domain . use case Ċ Ċ import Ġio . github . g ust av ob arb os ab . movies . favorites . domain . Favorite Movie M ocker Ċ import Ġio . github . g ust av ob arb os ab . movies . favorites . domain . model . Movie State Ċ import Ġio . github . g ust av ob arb os ab . movies . favorites . domain . repository . Favorite Movie Repository Ċ import Ġio . github . g ust av ob arb os ab . test utilities . coroutines . Coroutine Dispatcher Rule Ċ import Ġio . g ust av ob arb os ab . suspend result . Suspend Result Ċ import Ġio . g ust av ob arb os ab . suspend result . Suspend Result . Success Ċ import Ġio . mock k . co Every Ċ import Ġio . mock k . mock k Ċ import Ġkotlinx . coroutines . test . run Blocking Test Ċ import Ġorg . hamcrest . Core Matchers . instance Of Ċ import Ġorg . junit . Assert . assertEquals Ċ import Ġorg . junit . Assert . assertThat Ċ import Ġorg . junit . Rule Ċ import Ġorg . junit . Test Ċ Ċ class ĠF avorite Movie UseCase Impl Test Ġ{ ĊĊĠĠĠ Ġ@ get : Rule ĊĠĠĠ Ġval Ġdispatcher Rule Ġ= ĠCor outine Dispatcher Rule () ĊĊĠĠĠ Ġprivate Ġval Ġrepository Ġ= Ġmock k < Favorite Movie Repository >( relax ed Ġ= Ġtrue ) ĊĠĠĠ Ġprivate Ġval Ġuse Case : ĠF avorite Movie UseCase Ġ= ĠF avorite Movie UseCase Impl ( repository ) ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` when ĠI Ġcan Ġchange Ġmovie Ġstate Ġto Ġun like `() Ġ= Ġdispatcher Rule . run Blocking Test Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠG IV EN ĊĠĠĠĠĠĠĠ Ġval Ġmovie Ġ= ĠF avorite Movie M ocker . create Movie () ĊĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġrepository . is Movie Favorite ( any ()) Ġ} Ġreturns ĠSuccess ( true ) ĊĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġrepository . un like Movie ( movie . id ) Ġ} Ġreturns ĠSuccess ( Unit ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠWHEN ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġuse Case . update Favorite Movie ( movie ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠTHEN ĊĠĠĠĠĠĠĠ ĠassertThat ( result , Ġinstance Of ( Success :: class . java )) ĊĠĠĠĠĠĠĠ ĠassertEquals ( Movie State . Movie Un lik ed , Ġ( result Ġas ĠSuccess ). data ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` when ĠI Ġcan Ġchange Ġmovie Ġstate Ġto Ġlike `() Ġ= Ġdispatcher Rule . run Blocking Test Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠG IV EN ĊĠĠĠĠĠĠĠ Ġval Ġmovie Ġ= ĠF avorite Movie M ocker . create Movie () ĊĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġrepository . is Movie Favorite ( any ()) Ġ} Ġreturns ĠSuccess ( false ) ĊĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġrepository . like Movie ( movie ) Ġ} Ġreturns ĠSuccess ( Unit ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠWHEN ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġuse Case . update Favorite Movie ( movie ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠTHEN ĊĠĠĠĠĠĠĠ ĠassertThat ( result , Ġinstance Of ( Success :: class . java )) ĊĠĠĠĠĠĠĠ ĠassertEquals ( Movie State . Movie Lik ed , Ġ( result Ġas ĠSuccess ). data ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` when ĠI Ġcan Ġchange Ġmovie Ġstate Ġand Ġoccur Ġan Ġexception `() Ġ= Ġdispatcher Rule . run Blocking Test Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠG IV EN ĊĠĠĠĠĠĠĠ Ġval Ġmovie Ġ= ĠF avorite Movie M ocker . create Movie () ĊĠĠĠĠĠĠĠ Ġco Every Ġ{ Ġrepository . is Movie Favorite ( any ()) Ġ} Ġreturns ĠS uspend Result . Unknown Error () ĊĊĠĠĠĠĠĠĠ Ġ// ĠWHEN ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġuse Case . update Favorite Movie ( movie ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠTHEN ĊĠĠĠĠĠĠĠ ĠassertThat ( result , Ġinstance Of ( Suspend Result . Unknown Error :: class . java )) ĊĠĠĠ Ġ} Ċ }