/* Ċ Ġ* ĠĠĠ ĠCopyright Ġ 2 0 1 7 ĠDev yn ĠGo ets ch Ċ Ġ* Ċ Ġ* ĠĠĠ ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* ĠĠĠ Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠĠĠ ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠĠĠ ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* ĠĠĠ Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠĠĠ ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠĠĠ ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* ĠĠĠ Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġdev . yn . event . repository Ċ Ċ import Ġdev . yn . event . mother . aggregate .* Ċ import Ġio . kot lint est . Spec Ċ import Ġio . kot lint est . specs . String Spec Ċ import Ġdev . yn . cassandra . C assandra Connector Ċ import Ġdev . yn . util . date .* Ċ import Ġio . kot lint est . matchers . shouldBe Ċ Ċ class ĠAggregate Event Repository Spec : ĠString Spec () Ġ{ ĊĠĠĠ Ġoverride Ġprotected Ġfun Ġintercept Spec ( context : ĠSpec , Ġspec : Ġ() Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġconnector Ġ= ĠCassandra Connector . singleton ĊĠĠĠĠĠĠĠ Ġval Ġaggregate Repo Ġ= ĠAggregate Event Repository ( connector ) ĊĠĠĠĠĠĠĠ Ġaggregate Repo . initialize () ĊĊĠĠĠĠĠĠĠ Ġaggregate Events 1 . forEach Ġ{ Ġaggregate Repo . create IfNot Exists ( it ) ĠshouldBe Ġtrue Ġ} ĊĠĠĠĠĠĠĠ Ġaggregate Events 2 . forEach Ġ{ Ġaggregate Repo . create IfNot Exists ( it ) ĠshouldBe Ġtrue Ġ} ĊĊĠĠĠĠĠĠĠ Ġspec () ĊĊĠĠĠĠĠĠĠ ĠCassandra Connector . singleton . session (). execute ( Aggregate Event C QL . drop Table Statement ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġaggregate Repo Ġ= ĠAggregate Event Repository ( C assandra Connector . singleton ) ĊĊĊĠĠĠĠĠĠĠ Ġ" should Ġfetch Ġthe Ġmost Ġrecent Ġincorpor ate " Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaggregate Repo . get Latest ( resourceId 1 ) ĠshouldBe Ġaggregate Events 1 . last () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaggregate Repo . get Latest ( resourceId 2 ) ĠshouldBe Ġaggregate Events 2 . last () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ" should Ġget Ġthe Ġevents Ġsince Ġa Ġcertain Ġdate " Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaggregate Repo . get Since ( resourceId 1 , Ġday Format . parse (" 2 0 1 7 - 0 5 - 0 3 ")) ĠshouldBe Ġaggregate Events 1 . slice ( 2 .. 7 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaggregate Repo . get Since ( resourceId 2 , Ġday Format . parse (" 2 0 1 7 - 0 5 - 0 2 ")) ĠshouldBe Ġaggregate Events 2 . slice ( 1 .. 7 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ" should Ġget Ġthe Ġevents Ġin Ġa Ġdate Ġrange " Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaggregate Repo . get ( resourceId 1 , Ġday Format . parse (" 2 0 1 7 - 0 5 - 0 3 "), Ġday Format . parse (" 2 0 1 7 - 0 5 - 0 5 ")) ĠshouldBe Ġaggregate Events 1 . slice ( 2 .. 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaggregate Repo . get ( resourceId 2 , Ġday Format . parse (" 2 0 1 7 - 0 5 - 0 3 "), Ġday Format . parse (" 2 0 1 7 - 0 5 - 0 7 ")) ĠshouldBe Ġaggregate Events 2 . slice ( 1 .. 5 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ" should Ġget Ġthe Ġevents Ġfor Ġa Ġuser Ġin Ġa Ġdate Ġrange " Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaggregate Repo . get ForUser ( resourceId 1 , Ġuser 1 , Ġday Format . parse (" 2 0 1 7 - 0 5 - 0 3 "), Ġday Format . parse (" 2 0 1 7 - 0 5 - 0 5 ")) ĠshouldBe ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaggregate Events 1 . slice ( 2 .. 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . user Ids . contains ( user 1 )} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaggregate Repo . get ForUser ( resourceId 2 , Ġuser 3 , Ġday Format . parse (" 2 0 1 7 - 0 5 - 0 3 "), Ġday Format . parse (" 2 0 1 7 - 0 5 - 0 7 ")) ĠshouldBe ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaggregate Events 2 . slice ( 1 .. 5 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . user Ids . contains ( user 3 )} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ} Ċ }