package Ġcom . example . instagram _ clone _ clean _ architecture . feature . profile . domain . use case Ċ Ċ import Ġcom . example . instagram _ clone _ clean _ architecture . app . domain . model . User Domain Model Ċ import Ġcom . example . instagram _ clone _ clean _ architecture . feature . profile . domain . repository . Profile Repository Ċ import Ġcom . example . library _ base . domain . exception . Failure Ċ import Ġcom . example . library _ base . domain . utility . Either Ċ import Ġcom . example . library _ test _ utils . run Blocking Test Ċ import Ġio . mock k . Mock K Annotations Ċ import Ġio . mock k . every Ċ import Ġio . mock k . impl . annotations . Mock K Ċ import Ġio . mock k . mock k Ċ import Ġkotlinx . coroutines . run Blocking Ċ import Ġorg . am sh ove . k lu ent . shouldBe EqualTo Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Rule Ċ import Ġorg . junit . Test Ċ import Ġorg . junit . runner . RunWith Ċ import Ġorg . junit . runners . JUnit 4 Ċ Ċ @ RunWith ( JUnit 4 :: class ) Ċ class ĠGet Lik ed Users UseCase Test Ġ{ ĊĊĠĠĠ Ġ@ get : Rule ĊĠĠĠ Ġval Ġmain Coroutine Rule Ġ= Ġcom . example . library _ test _ utils . Coroutine Test Rule () ĊĊĠĠĠ Ġ@ Mock K ( relax ed Ġ= Ġtrue ) ĊĠĠĠ Ġinternal Ġlateinit Ġvar Ġprofile Repository : ĠProfile Repository ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġtest UseCase : ĠGet Lik ed Users UseCase ĊĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun Ġsetup () Ġ{ ĊĠĠĠĠĠĠĠ ĠMock K Annotations . init ( this ) ĊĊĠĠĠĠĠĠĠ Ġtest UseCase Ġ= ĠGet Lik ed Users UseCase ( profile Repository , Ġmain Coroutine Rule . test Dispatcher ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġreturn Ġcorrect Ġtype Ġwhen Ġprofile Ġrepository Ġreturn Ġsuccessfully `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmock Result Ġ= Ġmock k < List < User Domain Model >>() ĊĠĠĠĠĠĠĠ Ġval Ġmock Param Ġ= Ġmock k < Get Lik ed Users UseCase . Param >( relax ed Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġvar Ġresult : ĠEither < List < User Domain Model >, ĠFailure >? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġ// Ġgiven ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġrun Blocking Ġ{ Ġprofile Repository . get Lik ed Users By Post Id ( any ()) Ġ} Ġ} Ġreturns ĠEither . Success ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmock Result ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġwhen ĊĠĠĠĠĠĠĠ Ġmain Coroutine Rule . run Blocking Test Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtest UseCase ( mock Param ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġexpect ĊĠĠĠĠĠĠĠ Ġresult ĠshouldBe EqualTo ĠEither . Success ( mock Result ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġreturn Ġcorrect Ġtype Ġwhen Ġprofile Ġrepository Ġreturn Ġwith Ġfailure `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmock Param Ġ= Ġmock k < Get Lik ed Users UseCase . Param >( relax ed Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġvar Ġresult : ĠEither < List < User Domain Model >, ĠFailure >? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġ// Ġgiven ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġrun Blocking Ġ{ Ġprofile Repository . get Lik ed Users By Post Id ( any ()) Ġ} Ġ} Ġreturns ĠEither . Failure ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFailure . Network Connection ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġwhen ĊĠĠĠĠĠĠĠ Ġmain Coroutine Rule . run Blocking Test Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtest UseCase ( mock Param ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġexpect ĊĠĠĠĠĠĠĠ Ġresult ĠshouldBe EqualTo ĠEither . Failure ( Failure . Network Connection ) ĊĠĠĠ Ġ} Ċ }