package Ġcom . ou day . pokemon . details Ċ Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . mock Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . times Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . verify Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . wh enever Ċ import Ġcom . ou day . pokemon . details . data . model . response . Pokemon Details Response Ċ import Ġcom . ou day . pokemon . details . data . repo . Pokemon Details Repository Ċ import Ġcom . ou day . pokemon . details . use case . Pokemon Details UseCase Impl Ċ import Ġcom . ou day . pokemon . utils . Base UnitTest Ċ import Ġjunit . framework . TestCase Ċ import Ġkotlinx . coroutines . flow . first Ċ import Ġkotlinx . coroutines . flow . flow Ċ import Ġkotlinx . coroutines . test . run Blocking Test Ċ import Ġorg . junit . Test Ċ Ċ private Ġconst Ġval ĠPO KE MON _ ID Ġ= Ġ 5 ĊĊ Ċ class ĠPokemon Details UseCase Should : ĠBase UnitTest () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġrepo : ĠPokemon Details Repository Ġ= Ġmock () ĊĠĠĠ Ġprivate Ġval Ġbackend ErrorException Ġ= ĠRuntimeException (" Backend Ġerror ") ĊĠĠĠ Ġprivate Ġval Ġpokemon Name Ġ= Ġmock < Pokemon Details Response >() ĊĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġfetch Pokemon Details From UseCase () Ġ= Ġrun Blocking Test Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġuse Case Ġ= Ġmock Successful Case () ĊĠĠĠĠĠĠĠ Ġuse Case . fetch Pokemon Details ( PO KE MON _ ID ) ĊĠĠĠĠĠĠĠ Ġverify ( repo , Ġtimes ( 1 )). fetch Pokemon Details ( PO KE MON _ ID ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġemit P ok em ons Details From UseCase () Ġ= Ġrun Blocking Test Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġuse Case Ġ= Ġmock Successful Case () ĊĠĠĠĠĠĠĠ ĠTestCase . assertEquals ( pokemon Name , Ġuse Case . fetch Pokemon Details ( PO KE MON _ ID ). first (). get OrNull ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġpropagate Errors () Ġ= Ġrun Blocking Test Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġuse Case Ġ= Ġmock Error Case () ĊĠĠĠĠĠĠĠ ĠTestCase . assertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbackend ErrorException , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuse Case . fetch Pokemon Details ( PO KE MON _ ID ). first (). exception OrNull () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġmock Error Case (): ĠPokemon Details UseCase Impl Ġ{ ĊĠĠĠĠĠĠĠ Ġwhenever ( repo . fetch Pokemon Details ( PO KE MON _ ID )). thenReturn ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġflow Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemit ( Result . failure < Pokemon Details Response >( backend ErrorException )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġreturn ĠPokemon Details UseCase Impl ( repo ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġmock Successful Case (): ĠPokemon Details UseCase Impl Ġ{ ĊĠĠĠĠĠĠĠ Ġwhenever ( repo . fetch Pokemon Details ( PO KE MON _ ID )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. thenReturn ( flow Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemit ( Result . success ( pokemon Name )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġreturn ĠPokemon Details UseCase Impl ( repo ) ĊĠĠĠ Ġ} Ċ Ċ }