package Ġcom . byte po ets . sample . android testing . ui Ċ Ċ import Ġandroidx . arch . core . executor . testing . Instant Task Executor Rule Ċ import Ġcom . byte po ets . sample . android testing . Dummy Data Ċ import Ġcom . byte po ets . sample . android testing . bl . Transaction Calculator Impl Ċ import Ġcom . byte po ets . sample . android testing . di . Api Configuration Ċ import Ġcom . byte po ets . sample . android testing . di . Application Module Ċ import Ġcom . byte po ets . sample . android testing . helper . capture Values Ċ import Ġcom . byte po ets . sample . android testing . network . model . Transaction Ċ import Ġcom . byte po ets . sample . android testing . network . model . Transactions Response Ċ import Ġcom . byte po ets . sample . android testing . ui . entry wit ht int able value . Entry With Tint able Value Ċ import Ġcom . byte po ets . sample . android testing . ui . transaction sums . Transaction Sum s ViewModel Impl Ċ import Ġcom . byte po ets . sample . android testing . util . Resource Ċ import Ġcom . squareup . mos hi . M oshi Ċ import Ġkotlinx . coroutines . run Blocking Ċ import Ġokhttp 3 . mock webserver . Mock Response Ċ import Ġokhttp 3 . mock webserver . Mock WebServer Ċ import Ġorg . junit . After Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Rule Ċ import Ġorg . junit . Test Ċ Ċ class ĠTransaction Sum s ViewModel Test Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval Ġtimeout Ġ= Ġ 2 _ 0 0 0 L ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ get : Rule ĊĠĠĠ Ġval Ġrule Ġ= ĠInstant Task Executor Rule () ĊĊĠĠĠ Ġprivate Ġval Ġm oshi : ĠM oshi Ġ= ĠApplication Module . provide Json Serializer () ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġmock WebServer : ĠMock WebServer ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġsut : ĠTransaction Sum s ViewModel Impl ĊĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun ĠsetUp () Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠapiClient Ġ= ĠApplication Module . provide ApiClient ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠApplication Module . provide Ok HttpClient (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠApplication Module . provide Json Serializer (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠApi Configuration (" http :// localhost : 8 0 8 0 ") ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġmock WebServer Ġ= ĠMock WebServer () ĊĠĠĠĠĠĠĠ Ġmock WebServer . start ( port Ġ= Ġ 8 0 8 0 ) ĊĊĠĠĠĠĠĠĠ Ġsut Ġ= ĠTransaction Sum s ViewModel Impl ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠapiClient Ġ= ĠapiClient , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcalculator Ġ= ĠTransaction Calculator Impl () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ After ĊĠĠĠ Ġfun ĠtearDown () Ġ{ ĊĠĠĠĠĠĠĠ Ġmock WebServer . shutdown () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` observe Ġlist Ġwith Ġunknown Ġserver Ġshould Ġload Ġlist Ġand Ġshow Ġerror `() Ġ{ ĊĠĠĠĠĠĠĠ Ġmock WebServer . shutdown () ĊĊĠĠĠĠĠĠĠ Ġsut . transaction Sum s List . capture Values Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert S ends Values ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtimeout , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResource . loading (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResource . error (" An Ġerror Ġoccurred ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` observe Ġlist Ġwith Ġrequest Ġerror Ġshould Ġload Ġlist Ġand Ġshow Ġerror `() Ġ{ ĊĠĠĠĠĠĠĠ Ġmock WebServer . enqueue ( Mock Response (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Response Code ( 4 0 0 ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġsut . transaction Sum s List . capture Values Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert S ends Values ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtimeout , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResource . loading (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResource . error (" An Ġerror Ġoccurred ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` observe Ġlist Ġwith Ġno Ġdata Ġshould Ġload Ġlist Ġand Ġshow Ġempty Ġview `() Ġ{ ĊĠĠĠĠĠĠĠ Ġgiven Transactions On Server () ĊĊĠĠĠĠĠĠĠ Ġsut . transaction Sum s List . capture Values Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert S ends Values ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtimeout , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResource . loading (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResource . error (" No Ġentries Ġavailable ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` observe Ġlist Ġwith Ġvalid Ġdata Ġshould Ġload Ġlist Ġand Ġshow Ġentries `() Ġ{ ĊĠĠĠĠĠĠĠ Ġgiven Transactions On Server ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDummy Data . TRANSACTION _ WITH _ NEGATIVE _ AMOUNT , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDummy Data . TRANSACTION _ WITH _ POSITIVE _ AMOUNT , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDummy Data . TRANSACTION _ WITH _ ZERO _ AMOUNT ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġsut . transaction Sum s List . capture Values Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert S ends Values ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtimeout , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResource . loading (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResource . success ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEntry With Tint able Value (" EUR ", Ġ" EUR ", ĠDummy Data . SUM _ OF _ POSITIVE _ AND _ NEGATIVE _ EUR _ AMOUNT , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` observe Ġlist Ġwith Ġvalid Ġdata Ġand Ġtwo Ġc urrencies Ġshould Ġload Ġlist Ġand Ġshow Ġentries Ġof Ġboth Ġc urrencies `() Ġ{ ĊĠĠĠĠĠĠĠ Ġgiven Transactions On Server ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDummy Data . TRANSACTION _ WITH _ NEGATIVE _ AMOUNT , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDummy Data . TRANSACTION _ WITH _ POSITIVE _ AMOUNT _ IN _ USD , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDummy Data . TRANSACTION _ WITH _ POSITIVE _ AMOUNT , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDummy Data . TRANSACTION _ WITH _ ZERO _ AMOUNT ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġsut . transaction Sum s List . capture Values Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert S ends Values ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtimeout , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResource . loading (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResource . success ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEntry With Tint able Value (" EUR ", Ġ" EUR ", ĠDummy Data . SUM _ OF _ POSITIVE _ AND _ NEGATIVE _ EUR _ AMOUNT , Ġnull ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEntry With Tint able Value (" USD ", Ġ" USD ", ĠDummy Data . SUM _ OF _ POSITIVE _ AND _ NEGATIVE _ USD _ AMOUNT , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġgiven Transactions On Server ( var arg Ġtransactions : ĠTransaction ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmock WebServer . enqueue ( Mock Response (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Response Code ( 2 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Body ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm oshi . adapter ( Transactions Response :: class . java ). toJson ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTransactions Response ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata Ġ= Ġtransactions . toList () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} Ċ }