package Ġcom . netflix . spin n aker . ke el . services Ċ Ċ import Ġcom . netflix . spin n aker . ke el . api . application Ċ import Ġcom . netflix . spin n aker . ke el . api . id Ċ import Ġcom . netflix . spin n aker . ke el . events . Application Act uation Paused Ċ import Ġcom . netflix . spin n aker . ke el . events . Application Act uation Res umed Ċ import Ġcom . netflix . spin n aker . ke el . events . Application Event Ċ import Ġcom . netflix . spin n aker . ke el . events . Persistent Event Ċ import Ġcom . netflix . spin n aker . ke el . events . Resource Act uation Paused Ċ import Ġcom . netflix . spin n aker . ke el . events . Resource Created Ċ import Ġcom . netflix . spin n aker . ke el . events . Resource Event Ċ import Ġcom . netflix . spin n aker . ke el . events . Resource Valid Ċ import Ġcom . netflix . spin n aker . ke el . pause . Act uation Pa user Ċ import Ġcom . netflix . spin n aker . ke el . persistence . Resource Status . CREATED Ċ import Ġcom . netflix . spin n aker . ke el . test . combined InMemory Repository Ċ import Ġcom . netflix . spin n aker . ke el . test . delivery Config Ċ import Ġcom . netflix . spin n aker . ke el . test . resource Ċ import Ġcom . netflix . spin n aker . time . Mutable Clock Ċ import Ġdev . min ut est . junit . JUnit 5 Min ut ests Ċ import Ġdev . min ut est . root Context Ċ import Ġio . mock k . every Ċ import Ġio . mock k . slot Ċ import Ġjava . time . Duration Ċ import Ġstri kt . api . expect Ċ import Ġstri kt . api . expect That Ċ import Ġstri kt . assertions . contains Exactly Ċ import Ġstri kt . assertions . is A Ċ import Ġstri kt . assertions . isEqualTo Ċ import Ġstri kt . assertions . map Ċ Ċ class ĠResource History Service Tests Ġ: ĠJ Unit 5 Min ut ests Ġ{ ĊĠ Ġcompanion Ġobject ĠFix ture Ġ{ ĊĠĠĠ Ġval Ġclock Ġ= ĠMutable Clock () ĊĠĠĠ Ġval Ġrepository Ġ= Ġcombined InMemory Repository ( clock ) ĊĠĠĠ Ġval Ġact uation Pa user Ġ= ĠAct uation Pa user ( repository . resource Repository , Ġrepository . paused Repository , Ġrepository . publisher , Ġclock ) ĊĠĠĠ Ġval Ġresource History Service Ġ= ĠResource History Service ( repository , Ġact uation Pa user ) ĊĠĠĠ Ġval Ġresource Ġ= Ġresource () ĊĠĠĠ Ġval Ġdelivery Config Ġ= Ġdelivery Config ( resource ) ĊĠĠĠ Ġval Ġuser Ġ= Ġ" ke el @ ke el . io " ĊĠĠĠ Ġval ĠT EN _ MIN UTES : ĠDuration Ġ= ĠDuration . of Minutes ( 1 0 ) ĊĠ Ġ} ĊĊĠ Ġfun Ġtests () Ġ= Ġroot Context < Fixture > Ġ{ ĊĠĠĠ Ġfixture Ġ{ ĊĠĠĠĠĠ ĠFix ture ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġbefore Ġ{ ĊĠĠĠĠĠ Ġval Ġevent Ġ= Ġslot < Persistent Event >() ĊĠĠĠĠĠ Ġevery Ġ{ ĊĠĠĠĠĠĠĠ Ġrepository . publisher . publish Event ( capture ( event )) ĊĠĠĠĠĠ Ġ} Ġanswers Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( event . captured Ġis ĠApplication Event ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġrepository . append Application History ( event . captured Ġas ĠApplication Event ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġrepository . append Resource History ( event . captured Ġas ĠResource Event ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġafter Ġ{ ĊĠĠĠĠĠ Ġrepository . drop All () ĊĠĠĠĠĠ Ġclock . reset () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcontext (" a Ġdelivery Ġconfig Ġwith Ġa Ġresource Ġexists ") Ġ{ ĊĠĠĠĠĠ Ġbefore Ġ{ ĊĠĠĠĠĠĠĠ Ġrepository . upsert Delivery Config ( delivery Config ) ĊĠĠĠĠĠĠĠ Ġrepository . append Resource History ( Resource Created ( resource , Ġclock )) ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġtest (" can Ġget Ġresource Ġsummary Ġby Ġdelivery Ġconfig ") Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsummar ies Ġ= Ġresource History Service . getResource Sum maries For ( delivery Config ) ĊĊĠĠĠĠĠĠĠ Ġexpect Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġthat ( sum maries . size ). isEqualTo ( 1 ) ĊĠĠĠĠĠĠĠĠĠ Ġthat ( sum maries . map Ġ{ Ġit . status Ġ}. filter Ġ{ Ġit Ġ== ĠCRE ATED Ġ}. size ). isEqualTo ( 1 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcontext (" en ric hed Ġresource Ġevent Ġhistory ") Ġ{ ĊĠĠĠĠĠ Ġcontext (" with Ġapplication Ġpaused Ġat Ġvarious Ġtimes Ġafter Ġresource Ġcreation ") Ġ{ ĊĠĠĠĠĠĠĠ Ġbefore Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġrepository . store Resource ( resource ) ĊĠĠĠĠĠĠĠĠĠ Ġrepository . append Resource History ( Resource Created ( resource , Ġclock )) ĊĠĠĠĠĠĠĠĠĠ Ġclock . increment By ( TEN _ MIN UTES ) ĊĠĠĠĠĠĠĠĠĠ Ġrepository . append Resource History ( Resource Valid ( resource , Ġclock )) ĊĠĠĠĠĠĠĠĠĠ Ġclock . increment By ( TEN _ MIN UTES ) ĊĠĠĠĠĠĠĠĠĠ Ġact uation Pa user . pause Application ( resource . application , Ġuser ) ĊĠĠĠĠĠĠĠĠĠ Ġclock . increment By ( TEN _ MIN UTES ) ĊĠĠĠĠĠĠĠĠĠ Ġact uation Pa user . resume Application ( resource . application , Ġuser ) ĊĠĠĠĠĠĠĠĠĠ Ġclock . increment By ( TEN _ MIN UTES ) ĊĠĠĠĠĠĠĠĠĠ Ġact uation Pa user . pause Application ( resource . application , Ġuser ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtest (" has Ġapplication Ġpaused Ġand Ġres umed Ġevents Ġinjected Ġin Ġthe Ġright Ġpositions ") Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġval Ġevents Ġ= Ġresource History Service . get En ric hed Event History ( resource . id ) ĊĠĠĠĠĠĠĠĠĠ Ġexpect That ( events ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . java Class Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. contains Exactly ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠApplication Act uation Paused :: class . java , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠApplication Act uation Res umed :: class . java , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠApplication Act uation Paused :: class . java , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResource Valid :: class . java , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResource Created :: class . java ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġcontext (" with Ġa Ġnew Ġresource Ġcreated Ġafter Ġthe Ġapplication Ġis Ġpaused ") Ġ{ ĊĠĠĠĠĠĠĠ Ġbefore Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġact uation Pa user . pause Application ( resource . application , Ġuser ) ĊĠĠĠĠĠĠĠĠĠ Ġclock . increment By ( TEN _ MIN UTES ) ĊĠĠĠĠĠĠĠĠĠ Ġrepository . store Resource ( resource ) ĊĠĠĠĠĠĠĠĠĠ Ġrepository . append Resource History ( Resource Created ( resource , Ġclock )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtest (" has Ġapplication Ġpaused Ġevent Ġinjected Ġbefore Ġresource Ġcreation ") Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġval Ġevents Ġ= Ġresource History Service . get En ric hed Event History ( resource . id ) ĊĠĠĠĠĠĠĠĠĠ Ġexpect That ( events ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . java Class Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. contains Exactly ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResource Created :: class . java , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠApplication Act uation Paused :: class . java ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtest (" paused Ġevent Ġspecifies Ġwho Ġpaused Ġthe Ġapplication ") Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġval Ġevents Ġ= Ġresource History Service . get En ric hed Event History ( resource . id ) ĊĠĠĠĠĠĠĠĠĠ Ġexpect That ( events . last ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. is A < Application Act uation Paused >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. get Ġ{ Ġtriggered By Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. isEqualTo ( user ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġcontext (" with Ġprevious Ġevent Ġhistory Ġw ip ed Ġand Ġa Ġnew Ġresource Ġcreated Ġafter Ġthe Ġapplication Ġis Ġpaused ") Ġ{ ĊĠĠĠĠĠĠĠ Ġbefore Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġrepository . store Resource ( resource ) ĊĠĠĠĠĠĠĠĠĠ Ġrepository . append Resource History ( Resource Created ( resource , Ġclock )) ĊĠĠĠĠĠĠĠĠĠ Ġrepository . delete Resource ( resource . id ) ĊĠĠĠĠĠĠĠĠĠ Ġact uation Pa user . pause Application ( resource . application , Ġuser ) ĊĠĠĠĠĠĠĠĠĠ Ġclock . increment By ( TEN _ MIN UTES ) ĊĠĠĠĠĠĠĠĠĠ Ġrepository . resource Repository . clear Resource Events ( resource . id ) ĊĠĠĠĠĠĠĠĠĠ Ġrepository . resource Repository . clear Application Events ( resource . application ) ĊĠĠĠĠĠĠĠĠĠ Ġrepository . store Resource ( resource ) ĊĠĠĠĠĠĠĠĠĠ Ġrepository . append Resource History ( Resource Created ( resource , Ġclock )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtest (" still Ġhas Ġapplication Ġpaused Ġevent Ġinjected Ġbefore Ġresource Ġcreation ") Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġval Ġevents Ġ= Ġresource History Service . get En ric hed Event History ( resource . id ) ĊĠĠĠĠĠĠĠĠĠ Ġexpect That ( events ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . java Class Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. contains Exactly ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResource Created :: class . java , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠApplication Act uation Paused :: class . java ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġcontext (" with Ġa Ġresource Ġre created Ġafter Ġbeing Ġpaused Ġand Ġdeleted ") Ġ{ ĊĠĠĠĠĠĠĠ Ġbefore Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġrepository . store Resource ( resource ) ĊĠĠĠĠĠĠĠĠĠ Ġrepository . append Resource History ( Resource Created ( resource , Ġclock )) ĊĠĠĠĠĠĠĠĠĠ Ġclock . increment By ( TEN _ MIN UTES ) ĊĠĠĠĠĠĠĠĠĠ Ġact uation Pa user . pause Resource ( resource . id , Ġuser ) ĊĠĠĠĠĠĠĠĠĠ Ġclock . increment By ( TEN _ MIN UTES ) ĊĠĠĠĠĠĠĠĠĠ Ġrepository . delete Resource ( resource . id ) ĊĠĠĠĠĠĠĠĠĠ Ġclock . increment By ( TEN _ MIN UTES ) ĊĠĠĠĠĠĠĠĠĠ Ġrepository . store Resource ( resource ) ĊĠĠĠĠĠĠĠĠĠ Ġrepository . append Resource History ( Resource Created ( resource , Ġclock )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtest (" has Ġresource Ġpaused Ġevent Ġinjected Ġbefore Ġresource Ġcreation ") Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġval Ġevents Ġ= Ġresource History Service . get En ric hed Event History ( resource . id ) ĊĠĠĠĠĠĠĠĠĠ Ġexpect That ( events ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . java Class Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. contains Exactly ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResource Created :: class . java , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResource Act uation Paused :: class . java ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtest (" paused Ġevent Ġspecifies Ġwho Ġpaused Ġthe Ġresource ") Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġval Ġevents Ġ= Ġresource History Service . get En ric hed Event History ( resource . id ) ĊĠĠĠĠĠĠĠĠĠ Ġexpect That ( events . last ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. is A < Resource Act uation Paused >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. get Ġ{ Ġtriggered By Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. isEqualTo ( user ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ