package Ġcom . dd ona . bank ing . presentation . utils Ċ Ċ import Ġandroidx . arch . core . executor . testing . Instant Task Executor Rule Ċ import Ġcom . dd ona . bank ing . domain . repository . Bank ing Repository Ċ import Ġcom . dd ona . bank ing . domain . use case . Filter Transactions Task Ċ import Ġcom . dd ona . bank ing . domain . use case . GetUser Transactions Task Ċ import Ġcom . dd ona . bank ing . domain . use case . Transaction Status Updater Task Ċ import Ġcom . dd ona . bank ing . presentation . mapper . Transaction Entity Mapper Ċ import Ġcom . dd ona . bank ing . presentation . model . Status Ċ import Ġcom . dd ona . bank ing . presentation . view models . Transactions ViewModel Ċ import Ġio . reactivex . Comp letable Ċ import Ġio . reactivex . Observable Ċ import Ġio . reactivex . schedul ers . Schedulers Ċ import Ġorg . junit . Assert . assertTrue Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Rule Ċ import Ġorg . junit . Test Ċ import Ġorg . junit . runner . RunWith Ċ import Ġorg . junit . runners . JUnit 4 Ċ import Ġorg . mockito . Argument Matchers .* Ċ import Ġorg . mockito . Mock Ċ import Ġorg . mockito . Mockito Ċ import Ġorg . mockito . Mockito . times Ċ import Ġorg . mockito . Mockito Annotations Ċ Ċ @ RunWith ( JUnit 4 :: class ) Ċ class ĠTransactions ViewModel Test Ġ{ ĊĊĠĠĠ Ġ@ get : Rule ĊĠĠĠ Ġval Ġrule Ġ= ĠInstant Task Executor Rule () ĊĊĠĠĠ Ġ@ Mock ĊĠĠĠ Ġlateinit Ġvar Ġrepository : ĠBank ing Repository ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġtransactions VM : ĠTransactions ViewModel ĊĠĠĠ Ġprivate Ġval Ġtransaction Mapper Ġ= ĠTransaction Entity Mapper () ĊĊĠĠĠ Ġprivate Ġval Ġtransactions Ġ= ĠTest Data Generator . generate Transactions () ĊĠĠĠ Ġprivate Ġval Ġtransaction Entities Ġ= ĊĠĠĠĠĠĠĠ Ġtransactions . map Ġ{ Ġtransaction Mapper . from ( it ) Ġ} ĊĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun Ġsetup () Ġ{ ĊĠĠĠĠĠĠĠ ĠMockito Annotations . init Mocks ( this ) ĊĊĠĠĠĠĠĠĠ ĠMockito .` when `( repository . getUser Transactions ( any String (), Ġany Int ())) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. thenReturn ( Observable . just ( transaction Entities )) ĊĊĠĠĠĠĠĠĠ Ġval ĠgetUser Transactions Task Ġ= Ġget Transactions () ĊĠĠĠĠĠĠĠ Ġval Ġfiltered Transactions Task Ġ= Ġget Filtered Transactions () ĊĠĠĠĠĠĠĠ Ġval Ġstatus Updater Task Ġ= ĠgetStatus Updater Task () ĊĊĠĠĠĠĠĠĠ Ġtransactions VM Ġ= ĠTransactions ViewModel ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" 1 2 3 ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Mapper , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠgetUser Transactions Task , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfiltered Transactions Task , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstatus Updater Task ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest _ getUser Transactions _ success () Ġ{ ĊĠĠĠĠĠĠĠ ĠMockito .` when `( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepository . get Filtered Transactions ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġany String (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġany Boolean (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġany Boolean (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġany Boolean () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ). thenReturn ( Observable . just ( transaction Entities )) ĊĊĠĠĠĠĠĠĠ Ġval Ġtransaction List Source Ġ= Ġtransactions VM . transaction List Source ĊĊĠĠĠĠĠĠĠ Ġtransaction List Source . observe Fore ver Ġ{ Ġ/* Do ĠNothing */ Ġ} ĊĊĠĠĠĠĠĠĠ ĠassertTrue ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction List Source . value ?. status Ġ== ĠStatus . SUCCESS ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġtransaction List Source . value ?. data Ġ== Ġtransactions ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest _ getUser Transactions _ error () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġerror Msg Ġ= Ġ" fetch Ġtransaction Ġerror " ĊĊĠĠĠĠĠĠĠ ĠMockito .` when `( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepository . get Filtered Transactions ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġany String (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġany Boolean (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġany Boolean (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġany Boolean () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ). thenReturn ( Observable . error ( Throwable ( error Msg ))) ĊĊĠĠĠĠĠĠĠ Ġval Ġtransaction List Source Ġ= Ġtransactions VM . transaction List Source ĊĊĠĠĠĠĠĠĠ Ġtransaction List Source . observe Fore ver Ġ{ Ġ/* Do ĠNothing */ Ġ} ĊĊĠĠĠĠĠĠĠ ĠassertTrue ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction List Source . value ?. status Ġ== ĠStatus . ERROR ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġtransaction List Source . value ?. message Ġ== Ġerror Msg ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest _ filter Transactions _ success () Ġ{ ĊĊĠĠĠĠĠĠĠ ĠMockito .` when `( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepository . get Filtered Transactions ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġany String (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġany Boolean (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġany Boolean (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġany Boolean () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ). thenReturn ( Observable . just ( transaction Entities )) ĊĊĠĠĠĠĠĠĠ Ġval Ġtransaction List Source Ġ= Ġtransactions VM . transaction List Source ĊĊĠĠĠĠĠĠĠ Ġtransaction List Source . observe Fore ver Ġ{ Ġ/* Do ĠNothing */ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtransactions VM . filter Transactions ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcredit Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġde bit Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġflag ged Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ ĠassertTrue ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction List Source . value ?. status Ġ== ĠStatus . SUCCESS ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġtransaction List Source . value ?. data Ġ== Ġtransactions ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest _ filter Transactions _ error () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġerror Msg Ġ= Ġ" fetch Ġtransaction Ġerror " ĊĊĠĠĠĠĠĠĠ ĠMockito .` when `( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepository . get Filtered Transactions ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġany String (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġany Boolean (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġany Boolean (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġany Boolean () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ). thenReturn ( Observable . error ( Throwable ( error Msg ))) ĊĊĠĠĠĠĠĠĠ Ġval Ġtransaction List Source Ġ= Ġtransactions VM . transaction List Source ĊĊĠĠĠĠĠĠĠ Ġtransaction List Source . observe Fore ver Ġ{ Ġ/* Do ĠNothing */ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtransactions VM . filter Transactions ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcredit Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġde bit Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġflag ged Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ ĠassertTrue ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction List Source . value ?. status Ġ== ĠStatus . ERROR ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġtransaction List Source . value ?. message Ġ== Ġerror Msg ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest _ transaction Status Updater _ success () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġtransaction Ġ= Ġtransactions [ 0 ]. copy ( flag ged Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠ Ġval Ġtransaction Entity Ġ= Ġtransaction Mapper . from ( transaction ). copy ( flag ged Ġ= Ġtrue ) ĊĊĠĠĠĠĠĠĠ ĠMockito .` when `( repository . update Transaction ( transaction Entity )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. thenReturn ( Comp letable . complete ()) ĊĊĠĠĠĠĠĠĠ Ġtransactions VM . toggle Flag ged Status ( transaction ) ĊĊĠĠĠĠĠĠĠ ĠMockito . verify ( repository , Ġtimes ( 1 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. update Transaction ( transaction Entity ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest _ transaction Status Updater _ error () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġerror Msg Ġ= Ġ" Error Ġin Ġupdating Ġtransaction " ĊĊĠĠĠĠĠĠĠ Ġval Ġtransaction Ġ= Ġtransactions [ 0 ]. copy ( flag ged Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠ Ġval Ġtransaction Entity Ġ= Ġtransaction Mapper . from ( transaction ). copy ( flag ged Ġ= Ġtrue ) ĊĊĠĠĠĠĠĠĠ ĠMockito .` when `( repository . update Transaction ( transaction Entity )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. thenReturn ( Comp letable . error ( Throwable ( error Msg ))) ĊĊĠĠĠĠĠĠĠ Ġtransactions VM . toggle Flag ged Status ( transaction ) ĊĊĠĠĠĠĠĠĠ ĠMockito . verify ( repository , Ġtimes ( 1 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. update Transaction ( transaction Entity ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ================================ ===== // ĊĠĠĠ Ġ// ĠHelper Ġmethods Ġfor Ġuse Ġcase Ġcreation // ĊĠĠĠ Ġ// ================================ ===== // ĊĠĠĠ Ġprivate Ġfun Ġget Transactions (): ĠGetUser Transactions Task Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠGetUser Transactions Task ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepository , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠS chedulers . tr amp oline (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠS chedulers . tr amp oline () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠgetStatus Updater Task (): ĠTransaction Status Updater Task Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠTransaction Status Updater Task ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepository , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠS chedulers . tr amp oline (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠS chedulers . tr amp oline () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Filtered Transactions (): ĠFilter Transactions Task Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠFilter Transactions Task ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepository , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠS chedulers . tr amp oline (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠS chedulers . tr amp oline () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ Ċ }