package Ġcom . jes us l cor om inas . my books . data . repository Ċ Ċ import Ġcom . jes us l cor om inas . my books . data . source . Local Datasource Ċ import Ġcom . jes us l cor om inas . my books . data . source . Remote Datasource Ċ import Ġcom . jes us l cor om inas . my books . test shared . mocked Book Ċ 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 Ġkotlinx . coroutines . run Blocking Ċ import Ġorg . junit . Assert Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Test Ċ import Ġorg . junit . runner . RunWith Ċ import Ġorg . mockito . Mock Ċ import Ġorg . mockito . junit . Mockito JUnit Runner Ċ Ċ @ RunWith ( Mockito JUnit Runner :: class ) Ċ class ĠBooks Repository Test Ġ{ ĊĊĠĠĠ Ġ@ Mock ĊĠĠĠ Ġlateinit Ġvar Ġlocal DataSource : ĠLocal Datasource ĊĊĠĠĠ Ġ@ Mock ĊĠĠĠ Ġlateinit Ġvar Ġremote DataSource : ĠRemote Datasource ĊĊĠĠĠ Ġ@ Mock ĊĠĠĠ Ġlateinit Ġvar Ġregion Repository : ĠRegion Repository ĊĊĠĠĠ Ġlateinit Ġvar Ġbooks Repository : ĠBooks Repository ĊĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun ĠsetUp () Ġ{ ĊĠĠĠĠĠĠĠ Ġbooks Repository Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBooks Repository ( local DataSource , Ġremote DataSource ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` getAll Ġgets Ġall Ġbooks Ġfrom Ġlocal Ġdata Ġsource `() Ġ{ ĊĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlocal Books Ġ= ĠlistOf ( mocked Book . copy ( 1 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhenever ( local DataSource . getAll ()). thenReturn ( local Books ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġbooks Repository . getAll () ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals ( local Books , Ġresult ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` find Books Ġfinds Ġbooks Ġfrom Ġremote Ġdata Ġsource `() Ġ{ ĊĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġremote Books Ġ= ĠlistOf ( mocked Book . copy ( 1 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhenever ( remote DataSource . find Books (" El Ġnombre Ġdel Ġv iento ", Ġ" ES ")). thenReturn ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremote Books ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ok Ġ= Ġbooks Repository . find Books (" El Ġnombre Ġdel Ġv iento ", Ġ" ES ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ko Ġ= Ġbooks Repository . find Books (" El Ġtem or Ġdel Ġh ombre Ġs ab io ", Ġ" ES ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals ( remote Books , Ġresult Ok ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertNot Equals ( remote Books , Ġresult Ko ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` persist Book Ġpers ists Ġlocal Ġdata Ġsource `() Ġ{ ĊĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbook Ġ= Ġmocked Book . copy ( id Ġ= Ġ 1 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbooks Repository . persist Book ( book ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( local DataSource ). persist Book ( book ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` findBy Google Id Ġfinds Ġbook Ġdetail Ġfrom Ġremote Ġdatasource `() Ġ{ ĊĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbook Ġ= Ġmocked Book . copy ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhenever ( remote DataSource . get Book Detail (" u O Zh Yg E AC AA J ")). thenReturn ( book ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ok Ġ= Ġbooks Repository . findBy Google Id (" u O Zh Yg E AC AA J ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ko Ġ= Ġbooks Repository . findBy Google Id (" u O Zh Yg E AC AA K ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals ( book , Ġresult Ok ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertNot Equals ( book , Ġresult Ko ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }