package Ġser g . ch up rin . fin ances . feature . dashboard . domain . builder . categories Ċ Ċ import Ġkotlinx . coroutines . run Blocking Ċ import Ġorg . spe k framework . spe k 2 . Spe k Ċ import Ġorg . spe k framework . spe k 2 . style . g her kin . Feature Ċ import Ġser g . ch up rin . fin ances . core . api . domain . model . Category To Transactions List Ċ import Ġser g . ch up rin . fin ances . core . api . domain . model . Id Ċ import Ġser g . ch up rin . fin ances . core . api . domain . model . category . Category Ċ import Ġser g . ch up rin . fin ances . core . api . domain . model . category . Category Type Ċ import Ġser g . ch up rin . fin ances . core . api . domain . model . transaction . Plain Transaction Type Ċ import Ġser g . ch up rin . fin ances . core . api . domain . model . transaction . Transaction Ċ import Ġser g . ch up rin . fin ances . core . api . domain . model . transaction . Transaction Type Ċ import Ġser g . ch up rin . fin ances . core . test . domain . Transaction Amount Calculator Test Impl Ċ import Ġser g . ch up rin . fin ances . feature . dashboard . domain . model . Dashboard Categories Widget Page Ċ import Ġstri kt . api . expect That Ċ import Ġstri kt . assertions . contains Exactly In Any Order Ċ import Ġstri kt . assertions . isEqualTo Ċ import Ġjava . time . LocalDateTime Ċ Ċ /** Ċ Ġ* ĠCreated Ġby ĠSer ge y ĠCh up rin Ġon Ġ 0 1 . 0 5 . 2 0 2 0 . Ċ Ġ* ĠFor Ġother Ġcategories Ġamount Ġis Ġcalculated Ġtoo . Ċ Ġ*/ Ċ object ĠDashboard Categories Page Builder Test Ġ: ĠSpe k ({ ĊĊĠĠĠ ĠFeature (" Dashboard Ġcategories Ġpage Ġbuilder ") Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠDashboard Categories Page Builder ( Transaction Amount Calculator Test Impl ()) ĊĊĠĠĠĠĠĠĠ ĠScenario (" Build Ġpages ") Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtop Categories Count Ġ= Ġ 2 ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTransaction Ġids Ġare Ġnot Ġimportant Ġhere . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġincome Category 1 Ġ= Ġcreate Category ( Id (" income Category 1 ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġincome Category 2 Ġ= Ġcreate Category ( Id (" income Category 2 ")) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġincome Category To Transactions List Ġ= ĠCategory To Transactions List ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġincome Category 1 Ġto ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Transaction (" 5 0 0 "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Transaction (" 1 0 0 0 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġincome Category 2 Ġto ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Transaction (" 9 0 "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Transaction (" 9 0 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Category ( Id (" income Category 3 ")) Ġto ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Transaction (" 1 0 0 "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Transaction (" 5 0 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Category ( Id (" income Category 4 ")) Ġto ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Transaction (" 2 0 "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Transaction (" 1 0 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexpense Category 1 Ġ= Ġcreate Category ( Id (" expense Category 1 ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexpense Category 2 Ġ= Ġcreate Category ( Id (" expense Category 2 ")) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexpense Category To Transactions List Ġ= ĠCategory To Transactions List ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpense Category 1 Ġto ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Transaction ("- 4 0 "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Transaction ("- 6 0 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpense Category 2 Ġto ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Transaction ("- 2 0 "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Transaction ("- 1 0 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Category ( Id (" expense Category 3 ")) Ġto ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Transaction ("- 1 0 "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Transaction ("- 5 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġincome Categories Page : ĠDashboard Categories Widget Page ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġexpense Categories Page : ĠDashboard Categories Widget Page ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠWhen (" Method Ġis Ġcalled Ġfor Ġincome Ġcategories ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġincome Categories Page Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . build ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPlain Transaction Type . IN CO ME , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġincome Category To Transactions List , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Categories Count ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠThen (" Page Ġhas Ġvalid Ġtotal Ġamount ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpect That ( income Categories Page . total Amount ). isEqualTo (" 1 8 6 0 ". to BigDecimal ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠAnd (" Page Ġhas Ġvalid Ġ' other ' Ġamount ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpect That ( income Categories Page . other Categories Share ). isEqualTo (" 1 8 0 ". to BigDecimal ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠAnd (" Page Ġhas Ġvalid Ġcategory Ġamounts ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpect That ( income Categories Page . category Shares ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. contains Exactly In Any Order ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġincome Category 2 Ġto Ġ" 1 8 0 ". to BigDecimal (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġincome Category 1 Ġto Ġ" 1 5 0 0 ". to BigDecimal () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠWhen (" Method Ġis Ġcalled Ġfor Ġexpense Ġcategories ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpense Categories Page Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . build ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPlain Transaction Type . EXP ENSE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpense Category To Transactions List , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtop Categories Count ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAnd (" Page Ġhas Ġvalid Ġtotal Ġamount ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpect That ( expense Categories Page . total Amount ). isEqualTo (" 1 4 5 ". to BigDecimal ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠAnd (" Page Ġhas Ġvalid Ġ' other ' Ġamount ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpect That ( expense Categories Page . other Categories Share ). isEqualTo (" 1 5 ". to BigDecimal ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠAnd (" Page Ġhas Ġvalid Ġcategory Ġamounts ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpect That ( expense Categories Page . category Shares ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. contains Exactly In Any Order ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpense Category 1 Ġto Ġ" 1 0 0 ". to BigDecimal (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpense Category 2 Ġto Ġ" 3 0 ". to BigDecimal () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} Ċ Ċ }) Ċ Ċ private Ġfun Ġcreate Transaction ( amount : ĠString ): ĠTransaction Ġ{ ĊĠĠĠ Ġreturn ĠTransaction ( ĊĠĠĠĠĠĠĠ Ġid Ġ= ĠId . UNKNOWN , ĊĠĠĠĠĠĠĠ Ġowner Id Ġ= ĠId . UNKNOWN , ĊĠĠĠĠĠĠĠ Ġmoney AccountId Ġ= ĠId . UNKNOWN , ĊĠĠĠĠĠĠĠ Ġtype Ġ= ĠTransaction Type . PLAIN , ĊĠĠĠĠĠĠĠ Ġcurrency Code Ġ= Ġ" USD ", ĊĠĠĠĠĠĠĠ Ġcategory Id Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġ_ dateTime Ġ= ĠLocalDateTime . now (), ĊĠĠĠĠĠĠĠ Ġ_ amount Ġ= Ġamount ĊĠĠĠ Ġ) Ċ } Ċ Ċ private Ġfun Ġcreate Category ( id : ĠId ): ĠCategory Ġ{ ĊĠĠĠ Ġreturn ĠCategory ( ĊĠĠĠĠĠĠĠ Ġid Ġ= Ġid , ĊĠĠĠĠĠĠĠ Ġname Ġ= Ġ"", ĊĠĠĠĠĠĠĠ Ġcolor Hex Ġ= Ġ"", ĊĠĠĠĠĠĠĠ Ġowner Id Ġ= ĠId . UNKNOWN , ĊĠĠĠĠĠĠĠ Ġparent CategoryId Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġtype Ġ= ĠCategory Type . IN CO ME ĊĠĠĠ Ġ) Ċ }