package Ġpl . kom or ow sk idev . kotlin rest . db . services Ċ Ċ import Ġorg . mockito . Mockito .* Ċ import Ġpl . kom or ow sk idev . kotlin rest . db . entities . Transaction Entity Ċ import Ġpl . kom or ow sk idev . kotlin rest . db . repository . Transaction Repository Ċ import Ġpl . kom or ow sk idev . kotlin rest . rest . dto . Transaction Dto Ċ import Ġpl . kom or ow sk idev . kotlin rest . util . Ids Extractor Ċ import Ġpl . kom or ow sk idev . kotlin rest . util . converters . Transaction Converter Ċ import Ġjava . time . Instant Ċ import Ġkotlin . test . Before Test Ċ import Ġkotlin . test . Test Ċ import Ġkotlin . test . assertEquals Ċ import Ġkotlin . test . assertTrue Ċ Ċ class ĠTransaction Service Test Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġservice : ĠTransaction Service ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġrepository Mock : ĠTransaction Repository ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġids Extractor Mock : ĠI ds Extractor ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġtransaction Converter Mock : ĠTransaction Converter ĊĊĠĠĠ Ġ@ Before Test ĊĠĠĠ Ġfun Ġinit (){ ĊĠĠĠĠĠĠĠ Ġrepository Mock Ġ= Ġmock ( Transaction Repository :: class . java ) ĊĠĠĠĠĠĠĠ Ġids Extractor Mock Ġ= Ġmock ( Ids Extractor :: class . java ) ĊĠĠĠĠĠĠĠ Ġtransaction Converter Mock Ġ= Ġmock ( Transaction Converter :: class . java ) ĊĠĠĠĠĠĠĠ Ġservice Ġ= ĠTransaction Service ( repository Mock , Ġids Extractor Mock , Ġtransaction Converter Mock ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġshould Send Entity To Repository (){ ĊĠĠĠĠĠĠĠ Ġ// given : ĊĠĠĠĠĠĠĠ Ġval Ġtransaction Entity Ġ= ĠTransaction Entity ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 L , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 0 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 L , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" type ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 3 L , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" first ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" last ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 0 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInstant . now ()) ĊĊĠĠĠĠĠĠĠ Ġ// when : ĊĠĠĠĠĠĠĠ Ġservice . save ( transaction Entity ) ĊĊĠĠĠĠĠĠĠ Ġ// then : ĊĠĠĠĠĠĠĠ Ġverify ( repository Mock ). save ( transaction Entity ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġshould Call Repository All Transactions () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// given : ĊĠĠĠĠĠĠĠ Ġval Ġaccount TypeId Ġ= Ġ" ALL " ĊĠĠĠĠĠĠĠ Ġval Ġcustomer Id Ġ= Ġ" ALL " ĊĊĠĠĠĠĠĠĠ Ġ// when : ĊĠĠĠĠĠĠĠ Ġservice . get Transactions Dto ( account TypeId , Ġcustomer Id ) ĊĊĠĠĠĠĠĠĠ Ġ// then : ĊĠĠĠĠĠĠĠ Ġverify ( repository Mock ). findAll By OrderBy Amount In C ents Asc () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġshould Call Repository Transaction Of All Account Type () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// given : ĊĠĠĠĠĠĠĠ Ġval Ġaccount TypeId Ġ= Ġ" ALL " ĊĠĠĠĠĠĠĠ Ġval Ġcustomer Id Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġval Ġcustomer Id Set Ġ= Ġset Of ( 3 L , Ġ 4 L ) ĊĠĠĠĠĠĠĠ Ġ` when `( ids Extractor Mock . getId Set ( customer Id )). thenReturn ( customer Id Set ) ĊĊĠĠĠĠĠĠĠ Ġ// when : ĊĠĠĠĠĠĠĠ Ġservice . get Transactions Dto ( account TypeId , Ġcustomer Id ) ĊĊĠĠĠĠĠĠĠ Ġ// then : ĊĠĠĠĠĠĠĠ Ġverify ( repository Mock ). findBy CustomerId In OrderBy Amount In C ents Asc ( customer Id Set ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġshould Call Repository Transaction Of All Customers () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// given : ĊĠĠĠĠĠĠĠ Ġval Ġaccount TypeId Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġval Ġcustomer Id Ġ= Ġ" ALL " ĊĠĠĠĠĠĠĠ Ġval Ġaccount TypeId Set Ġ= Ġset Of ( 3 L , Ġ 4 L ) ĊĠĠĠĠĠĠĠ Ġ` when `( ids Extractor Mock . getId Set ( account TypeId )). thenReturn ( account TypeId Set ) ĊĊĠĠĠĠĠĠĠ Ġ// when : ĊĠĠĠĠĠĠĠ Ġservice . get Transactions Dto ( account TypeId , Ġcustomer Id ) ĊĊĠĠĠĠĠĠĠ Ġ// then : ĊĠĠĠĠĠĠĠ Ġverify ( repository Mock ). findBy Account TypeId In OrderBy Amount In C ents Asc ( account TypeId Set ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġshould Call Repository Transaction () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// given : ĊĠĠĠĠĠĠĠ Ġval Ġaccount TypeId Ġ= Ġ" a " ĊĠĠĠĠĠĠĠ Ġval Ġcustomer Id Ġ= Ġ" c " ĊĠĠĠĠĠĠĠ Ġval Ġcustomer Id Set Ġ= Ġset Of ( 1 L , Ġ 2 L ) ĊĠĠĠĠĠĠĠ Ġ` when `( ids Extractor Mock . getId Set ( customer Id )). thenReturn ( customer Id Set ) ĊĠĠĠĠĠĠĠ Ġval Ġaccount TypeId Set Ġ= Ġset Of ( 3 L , Ġ 4 L ) ĊĠĠĠĠĠĠĠ Ġ` when `( ids Extractor Mock . getId Set ( account TypeId )). thenReturn ( account TypeId Set ) ĊĊĠĠĠĠĠĠĠ Ġ// when : ĊĠĠĠĠĠĠĠ Ġservice . get Transactions Dto ( account TypeId , Ġcustomer Id ) ĊĊĠĠĠĠĠĠĠ Ġ// then : ĊĠĠĠĠĠĠĠ Ġverify ( repository Mock ). findBy CustomerId In And Account TypeId In OrderBy Amount In C ents Asc ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcustomer Id Set , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaccount TypeId Set ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġshould Return ListOf Transaction Dto (){ ĊĠĠĠĠĠĠĠ Ġ// given : ĊĠĠĠĠĠĠĠ Ġval Ġaccount TypeId Ġ= Ġ" ALL " ĊĠĠĠĠĠĠĠ Ġval Ġcustomer Id Ġ= Ġ" All " ĊĠĠĠĠĠĠĠ Ġval Ġtransaction Entity 1 Ġ= ĠTransaction Entity ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 L , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 0 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 3 L , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" type ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 4 L , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" first ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" last ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInstant . now ()) ĊĠĠĠĠĠĠĠ Ġval Ġtransaction Entity 2 Ġ= ĠTransaction Entity ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 L , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 0 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 4 L , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" tt type ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 5 L , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" first 2 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" last 2 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInstant . now ()) ĊĠĠĠĠĠĠĠ Ġval Ġtransaction Entity List Ġ= ĠlistOf ( transaction Entity 1 , Ġtransaction Entity 2 ) ĊĠĠĠĠĠĠĠ Ġ` when `( repository Mock . findAll By OrderBy Amount In C ents Asc ()). thenReturn ( transaction Entity List ) ĊĠĠĠĠĠĠĠ Ġval Ġtransaction Dto 1 Ġ= ĠTransaction Dto ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 1 L , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"") ĊĠĠĠĠĠĠĠ Ġval Ġtransaction Dto 2 Ġ= ĠTransaction Dto ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 2 L , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"") ĊĠĠĠĠĠĠĠ Ġ` when `( transaction Converter Mock . entity To Dto ( transaction Entity 1 )). thenReturn ( transaction Dto 1 ) ĊĠĠĠĠĠĠĠ Ġ` when `( transaction Converter Mock . entity To Dto ( transaction Entity 2 )). thenReturn ( transaction Dto 2 ) ĊĊĠĠĠĠĠĠĠ Ġ// when : ĊĠĠĠĠĠĠĠ Ġval Ġactual Ġ= Ġservice . get Transactions Dto ( account TypeId , Ġcustomer Id ) ĊĊĠĠĠĠĠĠĠ Ġ// then : ĊĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġactual . size ) ĊĠĠĠĠĠĠĠ ĠassertTrue ( actual . contains ( transaction Dto 1 )) ĊĠĠĠĠĠĠĠ ĠassertTrue ( actual . contains ( transaction Dto 2 )) ĊĠĠĠ Ġ} Ċ Ċ } Ċ