package Ġno . nav . hel se . sp ock Ċ Ċ import Ġcom . opent able . db . postgres . embedded . Embedded Postgres Ċ import Ġk ot li query . query Of Ċ import Ġk ot li query . session Of Ċ import Ġk ot li query . using Ċ import Ġno . nav . hel se . rap ids _ river s . Json Message Ċ import Ġno . nav . hel se . rap ids _ river s . test support . Test R apid Ċ import Ġorg . await ility . Await ility . await Ċ import Ġorg . intellij . lang . annotations . Language Ċ import Ġorg . junit . jupiter . api . After All Ċ import Ġorg . junit . jupiter . api . Assertions .* Ċ import Ġorg . junit . jupiter . api . Before All Ċ import Ġorg . junit . jupiter . api . BeforeEach Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġorg . junit . jupiter . api . Test Instance Ċ import Ġjava . time . Duration Ċ import Ġjava . time . LocalDate Ċ import Ġjava . time . LocalDateTime Ċ import Ġjava . time . temporal . Ch rono Unit Ċ import Ġjava . util .* Ċ import Ġjava . util . concurrent . TimeUnit Ċ import Ġjavax . sql . DataSource Ċ Ċ @ Test Instance ( Test Instance . Lifecycle . PER _ CLASS ) Ċ internal Ġclass ĠSp le is P Ã¥ min nel ser Test Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġembedded Postgres : ĠEmbedded Postgres ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġrapid : ĠTest R apid ĊĠĠĠ Ġprivate Ġlateinit Ġvar ĠdataSource : ĠDataSource ĊĊĠĠĠ Ġ@ Before All ĊĠĠĠ Ġfun Ġ` start Ġpostgres `() Ġ{ ĊĠĠĠĠĠĠĠ Ġembedded Postgres Ġ= ĠEmbedded Postgres . builder (). start () ĊĠĠĠĠĠĠĠ Ġval Ġds builder Ġ= ĠDataSource Builder ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" DATABASE _ JDBC _ URL " Ġto Ġembedded Postgres . get Jdbc Url (" postgres ", Ġ" postgres ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġds builder . migrate () ĊĠĠĠĠĠĠĠ ĠdataSource Ġ= Ġds builder . getDataSource () ĊĊĠĠĠĠĠĠĠ Ġrapid Ġ= ĠTest R apid (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFork ast el ser ( this , ĠdataSource ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠT il stand send ring er ( this , ĠdataSource ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠI k ke P Ã¥ min nel ser ( this , ĠdataSource ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠP Ã¥ min nel ser ( this , ĠdataSource , ĠDuration . of Millis ( 1 )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ After All ĊĠĠĠ Ġfun Ġ` stop Ġpostgres `() Ġ{ ĊĠĠĠĠĠĠĠ Ġembedded Postgres . close () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ BeforeEach ĊĠĠĠ Ġfun Ġsetup () Ġ{ ĊĠĠĠĠĠĠĠ Ġrapid . reset () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` l ager ĠpÃ¥ min nel ser `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġved tak sp eri ode Id Ġ= ĠUUID . randomUUID () ĊĠĠĠĠĠĠĠ Ġval Ġtil stand Ġ= Ġ" AV VENT ER _ HIST OR IK K " ĊĠĠĠĠĠĠĠ Ġval Ġend ring st id sp unkt Ġ= ĠLocalDateTime ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. now () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. minus Seconds ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCh rono Unit . SECONDS . between ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLocalDateTime . now (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠT il stand send ring er . Til stand send ring Event Dto . nest eP Ã¥ min nel set id sp unkt ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtil stand , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLocalDateTime . now (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. plus Seconds ( 5 ) ĊĠĠĠĠĠĠĠ Ġrapid . send Test Message ( til stand send ring se vent ( ved tak sp eri ode Id , Ġtil stand , Ġend ring st id sp unkt )) ĊĠĠĠĠĠĠĠ Ġawait (" sk al Ġprod user e ĠpÃ¥ min n else ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. at Most ( 1 0 , ĠTimeUnit . SECONDS ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. until Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrapid . send Test Message ("{} ") Ġ// Ġcreate Ġnoise Ġon Ġthe Ġrapid ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġins pe kt Ã¸ r Ġ= Ġrapid . ins pe kt Ã¸ r ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ins pe kt Ã¸ r . size Ġ== Ġ 0 ) Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ( 0 Ġuntil Ġins pe kt Ã¸ r . size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. any Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġins pe kt Ã¸ r . field ( it , Ġ"@ event _ name "). as Text () Ġ== Ġ" p Ã¥ min n else " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġins pe kt Ã¸ r . field ( it , Ġ" ved tak sp eri ode Id "). as Text () Ġ== Ġved tak sp eri ode Id . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġins pe kt Ã¸ r . field ( it , Ġ" til stand "). as Text () Ġ== Ġtil stand ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` s letter ĠpÃ¥ min nel ser Ġn Ã¥r Ġen Ġved tak sp eri ode Ġb lir Ġs lett et `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġved tak sp eri ode Id Ġ= ĠUUID . randomUUID () ĊĠĠĠĠĠĠĠ Ġrapid . send Test Message ( til stand send ring se vent ( ved tak sp eri ode Id , Ġ" AV VENT ER _ IN N TE K TS ME LD ING _ FER DIG _ GAP ", ĠLocalDate . EPOCH . at Start OfDay ())) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġh ent Ant all P Ã¥ min nel ser ( ved tak sp eri ode Id )) ĊĊĠĠĠĠĠĠĠ Ġrapid . send Test Message ( ved tak sp eri ode Fork ast et ( ved tak sp eri ode Id )) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 0 , Ġh ent Ant all P Ã¥ min nel ser ( ved tak sp eri ode Id )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` ret ter Ġtil stand Ġn Ã¥r ĠpÃ¥ min n else Ġvar Ġu akt ue ll `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġved tak sp eri ode Id Ġ= ĠUUID . randomUUID () ĊĠĠĠĠĠĠĠ Ġval Ġtil stand Ġ= Ġ" AV VENT ER _ S Ã ĺ KN AD _ U FER DIG _ GAP " ĊĠĠĠĠĠĠĠ Ġval Ġend ring st id sp unkt Ġ= ĠLocalDateTime ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. now () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. minus Hours ( 2 4 ) ĊĠĠĠĠĠĠĠ Ġval Ġny tt Tid sp unkt Ġ= ĠLocalDateTime . now () ĊĠĠĠĠĠĠĠ Ġrapid . send Test Message ( til stand send ring se vent ( ved tak sp eri ode Id , Ġtil stand , Ġend ring st id sp unkt )) ĊĠĠĠĠĠĠĠ Ġrapid . send Test Message ( ik ke P Ã¥ min n else Event ( ved tak sp eri ode Id , Ġ" T IL _ UT B ET AL ING ", Ġny tt Tid sp unkt )) ĊĊĠĠĠĠĠĠĠ Ġval ĠpÃ¥ min n else Ġ= Ġh ent P Ã¥ min n else F ra D atab as en ( dataSource , Ġved tak sp eri ode Id ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( ny tt Tid sp unkt , ĠpÃ¥ min n else . end ring st id sp unkt ) ĊĠĠĠĠĠĠĠ ĠassertEquals (" T IL _ UT B ET AL ING ", ĠpÃ¥ min n else . til stand ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` End rer Ġik ke ĠpÃ¥ min n else Ġd ers om Ġevent Ġom Ġu akt ue ll ĠpÃ¥ min n else Ġer Ġel d re Ġen n Ġn Ã¥ v Ã¦ ren de `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġved tak sp eri ode Id Ġ= ĠUUID . randomUUID () ĊĠĠĠĠĠĠĠ Ġval Ġtil stand Ġ= Ġ" AV VENT ER _ S Ã ĺ KN AD _ U FER DIG _ GAP " ĊĠĠĠĠĠĠĠ Ġval Ġend ring st id sp unkt Ġ= ĠLocalDateTime . now () ĊĠĠĠĠĠĠĠ Ġval Ġny tt Tid sp unkt Ġ= ĠLocalDateTime . now (). minus Hours ( 2 4 ) ĊĠĠĠĠĠĠĠ Ġrapid . send Test Message ( til stand send ring se vent ( ved tak sp eri ode Id , Ġtil stand , Ġend ring st id sp unkt )) ĊĠĠĠĠĠĠĠ Ġrapid . send Test Message ( ik ke P Ã¥ min n else Event ( ved tak sp eri ode Id , Ġ" T IL _ UT B ET AL ING ", Ġny tt Tid sp unkt )) ĊĊĠĠĠĠĠĠĠ Ġval ĠpÃ¥ min n else Ġ= Ġh ent P Ã¥ min n else F ra D atab as en ( dataSource , Ġved tak sp eri ode Id ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( end ring st id sp unkt , ĠpÃ¥ min n else . end ring st id sp unkt ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( til stand , ĠpÃ¥ min n else . til stand ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġh ent Ant all P Ã¥ min nel ser ( ved tak sp eri ode Id : ĠUUID ) Ġ= Ġusing ( session Of ( dataSource )) Ġ{ Ġsession Ġ-> ĊĠĠĠĠĠĠĠ Ġsession . run ( query Of (" SELECT Ġcount (*) Ġas Ġved tak sp eri ode _ count ĠFROM Ġp amin n else ĠWHERE Ġved tak sp eri ode _ id = ?; ", Ġved tak sp eri ode Id . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . long (" ved tak sp eri ode _ count ") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. as Single ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Language (" JSON ") ĊĠĠĠ Ġprivate Ġfun Ġved tak sp eri ode Fork ast et ( ved tak sp eri ode Id : ĠUUID ) Ġ= Ġ""" { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"@ event _ name ": Ġ" ved tak sp eri ode _ fork ast et ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" hen del se Id ": Ġ" 0 3 0 0 0 1 BD - 8 F BA - 4 3 2 4 - 9 7 2 5 - D 6 1 8 CE 5 B 8 3 E 9 ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ved tak sp eri ode Id ": Ġ"$ ved tak sp eri ode Id " ĊĠĠĠĠĠĠĠ Ġ} """ ĊĊĠĠĠ Ġprivate Ġfun Ġtil stand send ring se vent ( ĊĠĠĠĠĠĠĠ Ġved tak sp eri ode Id : ĠUUID , ĊĠĠĠĠĠĠĠ Ġtil stand : ĠString , ĊĠĠĠĠĠĠĠ Ġend ring st id sp unkt : ĠLocalDateTime ĊĠĠĠ Ġ) Ġ= ĠJson Message . new Message ( ĊĠĠĠĠĠĠĠ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"@ event _ name " Ġto Ġ" ved tak sp eri ode _ end ret ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" akt Ã¸ r Id " Ġto Ġ" 1 2 3 4 5 6 7 8 9 0 1 2 3 ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" f Ã¸ d se ls nummer " Ġto Ġ" 0 1 0 1 9 0 0 0 0 0 0 ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" organ is as j ons nummer " Ġto Ġ" 1 2 3 4 5 6 7 8 9 ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ved tak sp eri ode Id " Ġto Ġved tak sp eri ode Id . toString (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" gj el den de Til stand " Ġto Ġtil stand , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" for ri ge Til stand " Ġto Ġ" START ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"@ op prett et " Ġto Ġ"$ end ring st id sp unkt " ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ). toJson () ĊĊĠĠĠ Ġprivate Ġfun Ġik ke P Ã¥ min n else Event ( ĊĠĠĠĠĠĠĠ Ġved tak sp eri ode Id : ĠUUID , ĊĠĠĠĠĠĠĠ Ġtil stand : ĠString , ĊĠĠĠĠĠĠĠ Ġend ring st id sp unkt : ĠLocalDateTime ĊĠĠĠ Ġ) Ġ= ĠJson Message . new Message ( ĊĠĠĠĠĠĠĠ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"@ event _ name " Ġto Ġ" ved tak sp eri ode _ ik ke _ p Ã¥ min net ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" akt Ã¸ r Id " Ġto Ġ" 1 2 3 4 5 6 7 8 9 0 1 2 3 ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" f Ã¸ d se ls nummer " Ġto Ġ" 0 1 0 1 9 0 0 0 0 0 0 ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" organ is as j ons nummer " Ġto Ġ" 1 2 3 4 5 6 7 8 9 ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ved tak sp eri ode Id " Ġto Ġved tak sp eri ode Id . toString (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" til stand " Ġto Ġtil stand , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"@ op prett et " Ġto Ġ"$ end ring st id sp unkt " ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ). toJson () ĊĊĠĠĠ Ġprivate Ġfun Ġh ent P Ã¥ min n else F ra D atab as en ( dataSource : ĠDataSource , Ġved tak sp eri ode Id : ĠUUID ): ĠP Ã¥ min n else Dto Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġrequire NotNull ( using ( session Of ( dataSource )) Ġ{ Ġsession Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsession . transaction Ġ{ Ġtx Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtx . run ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquery Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" SELECT Ġid , Ġakt or _ id , Ġfn r , Ġorgan is as j ons nummer , Ġved tak sp eri ode _ id , Ġtil stand , Ġend ring st id sp unkt , Ġend ring st id sp unkt _ nan os , Ġant all _ g anger _ p amin net , Ġn este _ p amin nel set id sp unkt Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" FROM Ġp amin n else ĠWHERE Ġved tak sp eri ode _ id Ġ= Ġ?", Ġved tak sp eri ode Id . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠP Ã¥ min n else Dto ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġit . string (" id "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġakt Ã¸ r Id Ġ= Ġit . string (" ak tor _ id "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġf Ã¸ d se ls nummer Ġ= Ġit . string (" fn r "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġorgan is as j ons nummer Ġ= Ġit . string (" organ is as j ons nummer "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġved tak sp eri ode Id Ġ= Ġit . string (" ved tak sp eri ode _ id "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtil stand Ġ= Ġit . string (" til stand "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend ring st id sp unkt Ġ= Ġit . local DateTime (" end ring st id sp unkt "). with Nano ( it . int (" end ring st id sp unkt _ nan os ")), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġant all G anger P Ã¥ min net Ġ= Ġit . int (" ant all _ g anger _ p amin net ") Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. as Single ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) Ġ{" F ant Ġik ke ĠpÃ¥ min n else Ġfor Ġved tak sp eri ode Id =$ ved tak sp eri ode Id " Ġ} ĊĠĠĠ Ġ} Ċ } Ċ