package Ġcom . k amer . or ny . interaction Ċ Ċ import Ġandroid . text . format . Date Utils Ċ import Ġcom . k amer . or ny . data . domain . Expense Repo Ċ import Ġcom . k amer . or ny . data . domain . Page Repo Ċ import Ġcom . k amer . or ny . data . domain . model . Author Ċ import Ġcom . k amer . or ny . data . domain . model . Expense Ċ import Ġcom . k amer . or ny . data . domain . model . Page Settings Ċ import Ġcom . k amer . or ny . interaction . model . De bt Ċ import Ġcom . k amer . or ny . interaction . model . Statistics Ċ import Ġcom . k amer . or ny . interaction . model . User Statistics Ċ import Ġcom . k amer . or ny . interaction . statistics . Statistics Interactor Ċ import Ġcom . k amer . or ny . interaction . statistics . Statistics Interactor Impl Ċ import Ġcom . n ha ar man . mockito _ kotlin . verify Ċ import Ġio . reactivex . Observable Ċ import Ġio . reactivex . android . plugins . Rx Android Plugins Ċ import Ġio . reactivex . ob servers . Test Observer Ċ import Ġio . reactivex . plugins . Rx Java Plugins Ċ import Ġio . reactivex . schedul ers . Schedulers Ċ import Ġorg . assertj . core . api . Assertions . assertThat Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Test Ċ import Ġorg . junit . runner . RunWith Ċ import Ġorg . mockito . Mock Ċ import Ġorg . mockito . Mockito .` when ` Ċ import Ġorg . mockito . junit . Mockito JUnit Runner Ċ import Ġjava . util .* ĊĊ Ċ @ RunWith ( Mockito JUnit Runner :: class ) Ċ class ĠStatistics Interactor Test Ġ{ ĊĊĠĠĠ Ġ@ Mock Ġlateinit Ġvar Ġpage Repo : ĠPage Repo ĊĠĠĠ Ġ@ Mock Ġlateinit Ġvar Ġexpense Repo : ĠExp ense Repo ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġinter actor : ĠStatistics Interactor ĊĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun ĠsetUp () Ġ{ ĊĠĠĠĠĠĠĠ ĠRx Android Plugins . set Init MainThread Scheduler Handler Ġ{ ĠS chedulers . tr amp oline () Ġ} ĊĠĠĠĠĠĠĠ ĠRx Java Plugins . set Io Scheduler Handler Ġ{ ĠS chedulers . tr amp oline () Ġ} ĊĠĠĠĠĠĠĠ Ġinit Settings () ĊĠĠĠĠĠĠĠ Ġinit Authors () ĊĠĠĠĠĠĠĠ Ġinit Exp enses () ĊĠĠĠĠĠĠĠ Ġinter actor Ġ= ĠStatistics Interactor Impl ( page Repo , Ġexpense Repo ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġcall Both Repositories () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġobserver Ġ= ĠTest Observer < Statistics >() ĊĊĠĠĠĠĠĠĠ Ġinter actor . get Statistics (). subscribe ( observer ) ĊĊĠĠĠĠĠĠĠ Ġverify ( page Repo ). getPage Settings () ĊĠĠĠĠĠĠĠ Ġverify ( expense Repo ). getAll Exp enses () ĊĊĠĠĠĠĠĠĠ Ġobserver . assert No Errors () ĊĠĠĠĠĠĠĠ Ġobserver . assert Value Count ( 1 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġcalculate Total Days () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdays Ġ= Ġ 2 5 ĊĠĠĠĠĠĠĠ Ġinit Settings ( period Ġ= Ġdays ) ĊĊĠĠĠĠĠĠĠ ĠassertThat ( get Statistics (). days Total ). isEqualTo ( days ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġcalculate Current Day () Ġ{ ĊĠĠĠĠĠĠĠ Ġtest Current Day ( period Ġ= Ġ 1 0 , Ġday Difference Ġ= Ġ 5 , Ġresult Days Ġ= Ġ 6 ) ĊĠĠĠĠĠĠĠ Ġtest Current Day ( period Ġ= Ġ 1 0 , Ġday Difference Ġ= Ġ 0 , Ġresult Days Ġ= Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġtest Current Day ( period Ġ= Ġ 1 0 , Ġday Difference Ġ= Ġ 1 1 , Ġresult Days Ġ= Ġ 1 0 ) ĊĠĠĠĠĠĠĠ Ġtest Current Day ( period Ġ= Ġ 1 0 , Ġday Difference Ġ= Ġ- 1 , Ġresult Days Ġ= Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġtest Current Day ( period Ġ= Ġ 1 0 , Ġday Difference Ġ= Ġ- 2 , Ġresult Days Ġ= Ġ 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġtest Current Day ( period : ĠInt , Ġday Difference : ĠInt , Ġresult Days : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinit Settings ( startDate Ġ= ĠDate ( Date (). time Ġ- ĠDate Utils . DAY _ IN _ M ILL IS Ġ* Ġday Difference ), Ġperiod Ġ= Ġperiod ) ĊĊĠĠĠĠĠĠĠ ĠassertThat ( get Statistics (). current Day ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. isEqualTo ( result Days ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġcalculate Budget Limit () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlimit Ġ= Ġ 1 0 0 . 0 ĊĠĠĠĠĠĠĠ Ġinit Settings ( budget Ġ= Ġlimit ) ĊĊĠĠĠĠĠĠĠ ĠassertThat ( get Statistics (). budget Limit ). isEqualTo ( limit ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġcalculate S pend Total () Ġ{ ĊĠĠĠĠĠĠĠ Ġinit Exp enses ( listOf ( expense ( values Ġ= Ġ 0 Ġto Ġ 1 0 0 . 0 ), Ġexpense ( values Ġ= Ġ 1 Ġto Ġ 2 0 0 . 0 ))) ĊĊĠĠĠĠĠĠĠ ĠassertThat ( get Statistics (). sp end Total ). isEqualTo ( 3 0 0 . 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġcalculate S pend Total Two Values In Single Expense () Ġ{ ĊĠĠĠĠĠĠĠ Ġinit Exp enses ( listOf ( expense ( values Ġ= Ġ* array Of ( 0 Ġto Ġ 1 0 0 . 0 , Ġ 1 Ġto Ġ 1 0 0 . 0 )))) ĊĊĠĠĠĠĠĠĠ ĠassertThat ( get Statistics (). sp end Total ). isEqualTo ( 2 0 0 . 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġcalculate S pend Total With Off Budget () Ġ{ ĊĠĠĠĠĠĠĠ Ġinit Exp enses ( listOf ( expense ( values Ġ= Ġ 0 Ġto Ġ 2 0 0 . 0 ), Ġexpense ( is Off Budget Ġ= Ġtrue , Ġvalues Ġ= Ġ 1 Ġto Ġ 2 0 0 . 0 ))) ĊĊĠĠĠĠĠĠĠ ĠassertThat ( get Statistics (). sp end Total ). isEqualTo ( 4 0 0 . 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġcalculate Budget S pend Total () Ġ{ ĊĠĠĠĠĠĠĠ Ġinit Exp enses ( listOf ( expense ( values Ġ= Ġ 0 Ġto Ġ 1 0 0 . 0 ), Ġexpense ( values Ġ= Ġ 1 Ġto Ġ 2 0 0 . 0 ))) ĊĊĠĠĠĠĠĠĠ ĠassertThat ( get Statistics (). budget S pend Total ). isEqualTo ( 3 0 0 . 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġcalculate Budget S pend Total Two Values In Single Expense () Ġ{ ĊĠĠĠĠĠĠĠ Ġinit Exp enses ( listOf ( expense ( values Ġ= Ġ* array Of ( 0 Ġto Ġ 1 0 0 . 0 , Ġ 1 Ġto Ġ 1 0 0 . 0 )))) ĊĊĠĠĠĠĠĠĠ ĠassertThat ( get Statistics (). budget S pend Total ). isEqualTo ( 2 0 0 . 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġcalculate Budget S pend Total With Off Budget () Ġ{ ĊĠĠĠĠĠĠĠ Ġinit Exp enses ( listOf ( expense ( values Ġ= Ġ 0 Ġto Ġ 2 0 0 . 0 ), Ġexpense ( is Off Budget Ġ= Ġtrue , Ġvalues Ġ= Ġ 1 Ġto Ġ 2 0 0 . 0 ))) ĊĊĠĠĠĠĠĠĠ ĠassertThat ( get Statistics (). budget S pend Total ). isEqualTo ( 2 0 0 . 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġcalculate Off Budget S pend Total () Ġ{ ĊĠĠĠĠĠĠĠ Ġinit Exp enses ( listOf ( expense ( values Ġ= Ġ 0 Ġto Ġ 2 0 0 . 0 ), Ġexpense ( is Off Budget Ġ= Ġtrue , Ġvalues Ġ= Ġ 1 Ġto Ġ 1 0 0 . 0 ))) ĊĊĠĠĠĠĠĠĠ ĠassertThat ( get Statistics (). off Budget S pend Total ). isEqualTo ( 1 0 0 . 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġbudget Left Should Ignore Off Budget () Ġ{ ĊĠĠĠĠĠĠĠ Ġinit Settings ( budget Ġ= Ġ 1 0 0 0 . 0 ) ĊĠĠĠĠĠĠĠ Ġinit Exp enses ( listOf ( expense ( is Off Budget Ġ= Ġtrue , Ġvalues Ġ= Ġ 0 Ġto Ġ 2 0 0 . 0 ))) ĊĊĠĠĠĠĠĠĠ ĠassertThat ( get Statistics (). budget Left ). isEqualTo ( 1 0 0 0 . 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġcalculate Budget Left () Ġ{ ĊĠĠĠĠĠĠĠ Ġinit Settings ( budget Ġ= Ġ 1 0 0 0 . 0 ) ĊĠĠĠĠĠĠĠ Ġinit Exp enses ( listOf ( expense ( values Ġ= Ġ 0 Ġto Ġ 2 0 0 . 0 ))) ĊĊĠĠĠĠĠĠĠ ĠassertThat ( get Statistics (). budget Left ). isEqualTo ( 8 0 0 . 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġcalculate Budget Left When More Sp ent () Ġ{ ĊĠĠĠĠĠĠĠ Ġinit Settings ( budget Ġ= Ġ 0 . 0 ) ĊĠĠĠĠĠĠĠ Ġinit Exp enses ( listOf ( expense ( values Ġ= Ġ 0 Ġto Ġ 2 0 0 . 0 ))) ĊĊĠĠĠĠĠĠĠ ĠassertThat ( get Statistics (). budget Left ). isEqualTo ( 0 . 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġcalculate Budget Difference () Ġ{ ĊĠĠĠĠĠĠĠ Ġinit Settings ( budget Ġ= Ġ 1 0 0 0 . 0 , Ġperiod Ġ= Ġ 4 ) ĊĊĠĠĠĠĠĠĠ ĠassertThat ( get Statistics (). budget Difference ). isEqualTo ( 2 5 0 . 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġcalculate Budget Difference With S pend () Ġ{ ĊĠĠĠĠĠĠĠ Ġinit Settings ( budget Ġ= Ġ 1 0 0 0 . 0 , Ġperiod Ġ= Ġ 4 ) ĊĠĠĠĠĠĠĠ Ġinit Exp enses ( listOf ( expense ( values Ġ= Ġ 0 Ġto Ġ 1 5 0 . 0 ))) ĊĊĠĠĠĠĠĠĠ ĠassertThat ( get Statistics (). budget Difference ). isEqualTo ( 1 0 0 . 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġcalculate Budget Difference With H uge S pend () Ġ{ ĊĠĠĠĠĠĠĠ Ġinit Settings ( budget Ġ= Ġ 1 0 0 0 . 0 , Ġperiod Ġ= Ġ 4 ) ĊĠĠĠĠĠĠĠ Ġinit Exp enses ( listOf ( expense ( values Ġ= Ġ 0 Ġto Ġ 7 5 0 . 0 ))) ĊĊĠĠĠĠĠĠĠ ĠassertThat ( get Statistics (). budget Difference ). isEqualTo (- 5 0 0 . 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġbudget Difference Should Ignore Off Budget () Ġ{ ĊĠĠĠĠĠĠĠ Ġinit Settings ( budget Ġ= Ġ 1 0 0 0 . 0 , Ġperiod Ġ= Ġ 4 ) ĊĠĠĠĠĠĠĠ Ġinit Exp enses ( listOf ( expense ( is Off Budget Ġ= Ġtrue , Ġvalues Ġ= Ġ 0 Ġto Ġ 7 5 0 . 0 ))) ĊĊĠĠĠĠĠĠĠ ĠassertThat ( get Statistics (). budget Difference ). isEqualTo ( 2 5 0 . 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġcalculate Budget Difference Second Day () Ġ{ ĊĠĠĠĠĠĠĠ Ġinit Settings ( budget Ġ= Ġ 1 0 0 0 . 0 , Ġperiod Ġ= Ġ 4 , ĠstartDate Ġ= Ġyesterday ()) ĊĊĠĠĠĠĠĠĠ ĠassertThat ( get Statistics (). budget Difference ). isEqualTo ( 5 0 0 . 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġcalculate S pend Today No Sp ent () Ġ{ ĊĠĠĠĠĠĠĠ Ġinit Settings ( budget Ġ= Ġ 3 3 3 . 0 , Ġperiod Ġ= Ġ 3 ) ĊĊĠĠĠĠĠĠĠ ĠassertThat ( get Statistics (). to S pend Today ). isEqualTo ( 1 1 1 . 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġcalculate S pend Today No Today Sp ent () Ġ{ ĊĠĠĠĠĠĠĠ Ġinit Settings ( budget Ġ= Ġ 4 3 3 . 0 , Ġperiod Ġ= Ġ 3 ) ĊĠĠĠĠĠĠĠ Ġinit Exp enses ( listOf ( expense ( date Ġ= Ġyesterday (), Ġvalues Ġ= Ġ 0 Ġto Ġ 1 0 0 . 0 ))) ĊĊĠĠĠĠĠĠĠ ĠassertThat ( get Statistics (). to S pend Today ). isEqualTo ( 1 1 1 . 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġcalculate S pend Today With Today Sp ent () Ġ{ ĊĠĠĠĠĠĠĠ Ġinit Settings ( budget Ġ= Ġ 3 3 3 . 0 , Ġperiod Ġ= Ġ 3 ) ĊĠĠĠĠĠĠĠ Ġinit Exp enses ( listOf ( expense ( values Ġ= Ġ 0 Ġto Ġ 1 1 . 0 ))) ĊĊĠĠĠĠĠĠĠ ĠassertThat ( get Statistics (). to S pend Today ). isEqualTo ( 1 0 0 . 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġspend Today Can Not Be Negative () Ġ{ ĊĠĠĠĠĠĠĠ Ġinit Settings ( budget Ġ= Ġ 3 3 3 . 0 , Ġperiod Ġ= Ġ 3 ) ĊĠĠĠĠĠĠĠ Ġinit Exp enses ( listOf ( expense ( values Ġ= Ġ 0 Ġto Ġ 3 0 0 . 0 ))) ĊĊĠĠĠĠĠĠĠ ĠassertThat ( get Statistics (). to S pend Today ). isEqualTo ( 0 . 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġcalculate Average S pend Per Day () Ġ{ ĊĠĠĠĠĠĠĠ Ġinit Settings ( budget Ġ= Ġ 3 3 3 . 0 , Ġperiod Ġ= Ġ 3 ) ĊĠĠĠĠĠĠĠ Ġinit Exp enses ( listOf ( expense ( values Ġ= Ġ 0 Ġto Ġ 2 0 0 . 0 ))) ĊĊĠĠĠĠĠĠĠ ĠassertThat ( get Statistics (). average S pend Per Day ). isEqualTo ( 1 1 1 . 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġcalculate Average S pend Per Day Acc ording Budget Left () Ġ{ ĊĠĠĠĠĠĠĠ Ġinit Settings ( budget Ġ= Ġ 5 3 3 . 0 , Ġperiod Ġ= Ġ 3 ) ĊĠĠĠĠĠĠĠ Ġinit Exp enses ( listOf ( expense ( date Ġ= Ġyesterday (), Ġvalues Ġ= Ġ 1 Ġto Ġ 2 0 0 . 0 ))) ĊĊĠĠĠĠĠĠĠ ĠassertThat ( get Statistics (). average S pend Per Day Acc ording Budget Left ). isEqualTo ( 1 1 1 . 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġaverage S pend Per Day Acc ording Budget Left Should Ignore Off Budget () Ġ{ ĊĠĠĠĠĠĠĠ Ġinit Settings ( budget Ġ= Ġ 3 3 3 . 0 , Ġperiod Ġ= Ġ 3 ) ĊĠĠĠĠĠĠĠ Ġinit Exp enses ( listOf ( expense ( is Off Budget Ġ= Ġtrue , Ġdate Ġ= Ġyesterday (), Ġvalues Ġ= Ġ 1 Ġto Ġ 2 0 0 . 0 ))) ĊĊĠĠĠĠĠĠĠ ĠassertThat ( get Statistics (). average S pend Per Day Acc ording Budget Left ). isEqualTo ( 1 1 1 . 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġaverage S pend Per Day Acc ording Budget Left Should Not Ignore Today () Ġ{ ĊĠĠĠĠĠĠĠ Ġinit Settings ( budget Ġ= Ġ 5 3 3 . 0 , Ġperiod Ġ= Ġ 3 ) ĊĠĠĠĠĠĠĠ Ġinit Exp enses ( listOf ( expense ( date Ġ= Ġyesterday (), Ġvalues Ġ= Ġ 1 Ġto Ġ 1 0 0 . 0 ), Ġexpense ( values Ġ= Ġ 0 Ġto Ġ 1 0 0 . 0 ))) ĊĊĠĠĠĠĠĠĠ ĠassertThat ( get Statistics (). average S pend Per Day Acc ording Budget Left ). isEqualTo ( 1 1 1 . 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġaverage S pend Per Day Acc ording Budget Left ShouldBe Positive () Ġ{ ĊĠĠĠĠĠĠĠ Ġinit Settings ( budget Ġ= Ġ 3 3 3 . 0 , Ġperiod Ġ= Ġ 3 ) ĊĠĠĠĠĠĠĠ Ġinit Exp enses ( listOf ( expense ( date Ġ= Ġyesterday (), Ġvalues Ġ= Ġ 1 Ġto Ġ 5 0 0 . 0 ))) ĊĊĠĠĠĠĠĠĠ ĠassertThat ( get Statistics (). average S pend Per Day Acc ording Budget Left ). isEqualTo ( 0 . 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġaverage S pend Per Day Acc ording Budget Left Should Expand () Ġ{ ĊĠĠĠĠĠĠĠ Ġinit Settings ( budget Ġ= Ġ 2 0 0 . 0 , Ġperiod Ġ= Ġ 3 , ĠstartDate Ġ= Ġyesterday ()) ĊĊĠĠĠĠĠĠĠ ĠassertThat ( get Statistics (). average S pend Per Day Acc ording Budget Left ). isEqualTo ( 1 0 0 . 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġcalculate Users Statistics () Ġ{ ĊĠĠĠĠĠĠĠ Ġinit Exp enses ( listOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpense ( values Ġ= Ġ 0 Ġto Ġ 2 0 0 . 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpense ( is Off Budget Ġ= Ġtrue , Ġvalues Ġ= Ġ 1 Ġto Ġ 1 0 0 . 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpense ( is Off Budget Ġ= Ġtrue , Ġvalues Ġ= Ġ 0 Ġto Ġ 1 5 0 . 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpense ( values Ġ= Ġ 1 Ġto Ġ 5 0 . 0 ) ĊĠĠĠĠĠĠĠ Ġ)) ĊĊĠĠĠĠĠĠĠ Ġval Ġuser Statistics Ġ= Ġget Statistics (). users Statistics ĊĊĠĠĠĠĠĠĠ ĠassertThat ( user Statistics ). contains Only ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUser Statistics (" 0 ", Ġ 3 5 0 . 0 , Ġ 2 0 0 . 0 , Ġ 1 5 0 . 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUser Statistics (" 1 ", Ġ 1 5 0 . 0 , Ġ 5 0 . 0 , Ġ 1 0 0 . 0 ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġcalculate Users Statistics No Second User S pend () Ġ{ ĊĠĠĠĠĠĠĠ Ġinit Exp enses ( listOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpense ( values Ġ= Ġ 0 Ġto Ġ 2 0 0 . 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpense ( is Off Budget Ġ= Ġtrue , Ġvalues Ġ= Ġ 0 Ġto Ġ 1 5 0 . 0 ) ĊĠĠĠĠĠĠĠ Ġ)) ĊĊĠĠĠĠĠĠĠ Ġval Ġuser Statistics Ġ= Ġget Statistics (). users Statistics ĊĊĠĠĠĠĠĠĠ ĠassertThat ( user Statistics ). contains Only ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUser Statistics (" 0 ", Ġ 3 5 0 . 0 , Ġ 2 0 0 . 0 , Ġ 1 5 0 . 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUser Statistics (" 1 ", Ġ 0 . 0 , Ġ 0 . 0 , Ġ 0 . 0 ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġcalculate Users Statistics Single User () Ġ{ ĊĠĠĠĠĠĠĠ Ġinit Authors ( 1 ) ĊĠĠĠĠĠĠĠ Ġinit Exp enses ( listOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpense ( values Ġ= Ġ 0 Ġto Ġ 1 0 0 . 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpense ( is Off Budget Ġ= Ġtrue , Ġvalues Ġ= Ġ 0 Ġto Ġ 1 0 0 . 0 ) ĊĠĠĠĠĠĠĠ Ġ)) ĊĊĠĠĠĠĠĠĠ Ġval Ġuser Statistics Ġ= Ġget Statistics (). users Statistics ĊĊĠĠĠĠĠĠĠ ĠassertThat ( user Statistics ). contains Only ( User Statistics (" 0 ", Ġ 2 0 0 . 0 , Ġ 1 0 0 . 0 , Ġ 1 0 0 . 0 )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġcalculate Deb ts () Ġ{ ĊĠĠĠĠĠĠĠ Ġinit Exp enses ( listOf ( expense ( values Ġ= Ġ 0 Ġto Ġ 2 0 0 . 0 ), Ġexpense ( is Off Budget Ġ= Ġtrue , Ġvalues Ġ= Ġ 1 Ġto Ġ 1 0 0 . 0 ))) ĊĊĠĠĠĠĠĠĠ Ġval Ġdeb ts Ġ= Ġget Statistics (). deb ts ĊĊĠĠĠĠĠĠĠ ĠassertThat ( deb ts ). contains Only ( De bt (" 1 ", Ġ" 0 ", Ġ 5 0 . 0 )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġcalculate Deb ts Single User S pend () Ġ{ ĊĠĠĠĠĠĠĠ Ġinit Exp enses ( listOf ( expense ( values Ġ= Ġ 0 Ġto Ġ 2 0 0 . 0 ))) ĊĊĠĠĠĠĠĠĠ Ġval Ġdeb ts Ġ= Ġget Statistics (). deb ts ĊĊĠĠĠĠĠĠĠ ĠassertThat ( deb ts ). contains Only ( De bt (" 1 ", Ġ" 0 ", Ġ 1 0 0 . 0 )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Settings ( budget : ĠDouble Ġ= Ġ 0 . 0 , ĠstartDate : ĠDate Ġ= ĠDate (), Ġperiod : ĠInt Ġ= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ` when `( page Repo . getPage Settings ()). thenReturn ( Observable . just ( Page Settings ( budget , ĠstartDate , Ġperiod ))) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Exp enses ( list : ĠList < Expense > Ġ= Ġempty List ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġ` when `( expense Repo . getAll Exp enses ()). thenReturn ( Observable . just ( list )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Authors ( users Cont : ĠInt Ġ= Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlist Ġ= Ġ( 0 .. users Cont Ġ- Ġ 1 ). map Ġ{ Ġauthor ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ` when `( page Repo . getPage Authors ()). thenReturn ( Observable . just ( list )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Statistics (): ĠStatistics Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġobserver Ġ= ĠTest Observer < Statistics >() ĊĊĠĠĠĠĠĠĠ Ġinter actor . get Statistics (). subscribe ( observer ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġobserver . values (). first () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġexpense ( date : ĠDate Ġ= ĠDate (), Ġis Off Budget : ĠBoolean Ġ= Ġfalse , Ġvar arg Ġvalues : ĠPair < Int , ĠDouble >): ĠExp ense Ġ= ĠExp ense ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdate Ġ= Ġdate , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Off Budget Ġ= Ġis Off Budget , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalues Ġ= Ġvalues . map Ġ{ Ġ( first , Ġsecond ) Ġ-> ĠPair ( author ( first ), Ġsecond ) Ġ}. toMap () ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġfun Ġauthor ( id : ĠInt ) Ġ= ĠAuthor ("$ id ", Ġid , Ġ"$ id ", Ġ"") ĊĊĠĠĠ Ġprivate Ġfun Ġyesterday (): ĠDate Ġ= ĠDate (). apply Ġ{ Ġtime Ġ-= ĠDate Utils . DAY _ IN _ M ILL IS Ġ} Ċ }