package Ġcom . d anie le fav aro . q ap ital . model . source Ċ Ċ import Ġandroidx . arch . core . executor . testing . Instant Task Executor Rule Ċ import Ġandroidx . paging . Experimental Paging Api Ċ import Ġandroidx . paging . Load Type Ċ import Ġandroidx . paging . Paging Config Ċ import Ġandroidx . paging . Paging State Ċ import Ġandroidx . paging . Remote Mediator Ċ import Ġcom . d anie le fav aro . q ap ital . util . Test Coroutine Rule Ċ import Ġcom . d anie le fav aro . q ap ital _ database . App Database Ċ import Ġcom . d anie le fav aro . q ap ital _ database . model . entity . Activity Feed Model Ċ import Ġcom . d anie le fav aro . q ap ital _ network . model . entity . Activity ListModel Ċ import Ġcom . d anie le fav aro . q ap ital _ network . model . service . Q ap ital Api Ċ import Ġdagger . h ilt . android . testing . H ilt Android Rule Ċ import Ġdagger . h ilt . android . testing . H ilt Android Test Ċ import Ġdagger . h ilt . android . testing . H ilt Test Application Ċ import Ġio . mock k . every Ċ import Ġio . mock k . mock k Ċ import Ġio . mock k . spy k Ċ import Ġio . reactivex . rx java 3 . core . Single Ċ import Ġkotlinx . coroutines . Experimental Cor outines Api Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Rule Ċ import Ġorg . junit . Test Ċ import Ġorg . junit . runner . RunWith Ċ import Ġorg . ro bo lectric . Ro bo lectric TestRunner Ċ import Ġorg . ro bo lectric . annotation . Config Ċ import Ġjava . util . Date Ċ import Ġjavax . inject . Inject Ċ Ċ @ H ilt Android Test Ċ @ RunWith ( Ro bo lectric TestRunner :: class ) Ċ @ Config ( application Ġ= ĠH ilt Test Application :: class ) Ċ @ Opt In ( Experimental Paging Api :: class ) Ċ @ Experimental Cor outines Api Ċ class ĠActivity Feed s Source Mediator Test Ġ{ ĊĊĠĠĠ Ġ@ get : Rule ĊĠĠĠ Ġval Ġh ilt Rule Ġ= ĠH ilt Android Rule ( this ) ĊĊĠĠĠ Ġ@ get : Rule ĊĠĠĠ Ġval Ġinstant Executor Rule Ġ= ĠInstant Task Executor Rule () ĊĊĠĠĠ Ġ@ get : Rule ĊĠĠĠ Ġvar Ġcoroutine Rule Ġ= ĠTest Coroutine Rule () ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar Ġapp Database : ĠApp Database ĊĊĠĠĠ Ġprivate Ġvar Ġq ap ital Api : ĠQ ap ital Api Ġ= Ġmock k () ĊĊĠĠĠ Ġlateinit Ġvar Ġremote Mediator : ĠActivity Feed s Source Mediator ĊĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun ĠsetUp () Ġ{ ĊĠĠĠĠĠĠĠ Ġh ilt Rule . inject () ĊĠĠĠĠĠĠĠ Ġremote Mediator Ġ= ĠActivity Feed s Source Mediator ( q ap ital Api , Ġapp Database ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠNeed Ġto Ġmock Ġrun In Transaction Ġmethod Ġcause Ġit Ġreturns ĠUn deliver able Exception Ġ-> Ġneed Ġinvestigation Ġabout Ġit ĊĠĠĠĠĠĠĠ Ġremote Mediator Ġ= Ġspy k ( remote Mediator ) ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġremote Mediator . insert To Db ( any (), Ġany (), Ġany (), Ġany ()) Ġ} Ġreturns Ġmock k () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġrefresh Load Returns Success Result When More Data Is Present () Ġ{ ĊĠĠĠĠĠĠĠ Ġmock Api () ĊĠĠĠĠĠĠĠ Ġval Ġpaging State Ġ= ĠP aging State < Int , ĠActivity Feed Model >( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠP aging Config ( 1 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 0 ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġremote Mediator . load Single ( Load Type . REFRESH , Ġpaging State ). blocking Get () ĊĠĠĠĠĠĠĠ Ġassert ( result Ġis ĠRemote Mediator . Mediator Result . Success ) ĊĠĠĠĠĠĠĠ Ġassert (( result Ġas ĠRemote Mediator . Mediator Result . Success ). end Of Pagination Reached . not ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġrefresh Load Success And EndOf Pagination When No More Data () Ġ{ ĊĠĠĠĠĠĠĠ Ġun mock Api () ĊĠĠĠĠĠĠĠ Ġval Ġpaging State Ġ= ĠP aging State < Int , ĠActivity Feed Model >( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠP aging Config ( 1 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 0 ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġremote Mediator . load Single ( Load Type . REFRESH , Ġpaging State ). blocking Get () ĊĠĠĠĠĠĠĠ Ġassert ( result Ġis ĠRemote Mediator . Mediator Result . Success ) ĊĠĠĠĠĠĠĠ Ġassert (( result Ġas ĠRemote Mediator . Mediator Result . Success ). end Of Pagination Reached ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġun mock Api () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmock Date : ĠDate Ġ= Ġmock k () ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġmock Date . time Ġ} Ġreturns Ġ 0 L ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġq ap ital Api . getActivity Feed s ( any (), Ġany ()) Ġ} Ġreturns ĠSingle . just ( Activity ListModel ( mock Date , Ġempty List ())) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġmock Api () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmock Date : ĠDate Ġ= Ġmock k () ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġmock Date . time Ġ} Ġreturns Ġ 0 L ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġq ap ital Api . getActivity Feed s ( any (), Ġany ()) Ġ} Ġreturns ĠSingle . just ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠActivity ListModel ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmock Date , ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcom . d anie le fav aro . q ap ital _ network . model . entity . Activity Feed Model ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= Ġ" Message Ġ 6 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtimestamp Ġ= Ġmock k (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġamount Ġ= Ġ 0 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠuserId Ġ= Ġ 0 L ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcom . d anie le fav aro . q ap ital _ network . model . entity . Activity Feed Model ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= Ġ" Message Ġ 5 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtimestamp Ġ= Ġmock k (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġamount Ġ= Ġ 0 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠuserId Ġ= Ġ 0 L ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcom . d anie le fav aro . q ap ital _ network . model . entity . Activity Feed Model ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= Ġ" Message Ġ 4 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtimestamp Ġ= Ġmock k (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġamount Ġ= Ġ 0 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠuserId Ġ= Ġ 0 L ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcom . d anie le fav aro . q ap ital _ network . model . entity . Activity Feed Model ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= Ġ" Message Ġ 3 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtimestamp Ġ= Ġmock k (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġamount Ġ= Ġ 0 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠuserId Ġ= Ġ 0 L ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcom . d anie le fav aro . q ap ital _ network . model . entity . Activity Feed Model ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= Ġ" Message Ġ 2 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtimestamp Ġ= Ġmock k (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġamount Ġ= Ġ 0 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠuserId Ġ= Ġ 0 L ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcom . d anie le fav aro . q ap ital _ network . model . entity . Activity Feed Model ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= Ġ" Message Ġ 1 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtimestamp Ġ= Ġmock k (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġamount Ġ= Ġ 0 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠuserId Ġ= Ġ 0 L ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcom . d anie le fav aro . q ap ital _ network . model . entity . Activity Feed Model ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= Ġ" Message Ġ 0 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtimestamp Ġ= Ġmock k (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġamount Ġ= Ġ 0 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠuserId Ġ= Ġ 0 L ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ }