/* Ċ Ġ* ĠCopyright Ġ 2 0 2 1 - 2 0 2 1 ĠExact pro Ġ( Exact pro ĠSystems ĠLimited ) Ċ Ġ* Ċ Ġ* Ġ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 Ġcom . exact pro . th 2 . common . schema . message . impl . rabbitmq . custom Ċ Ċ import Ġcom . exact pro . th 2 . common . grpc . Direction Ċ import Ġcom . exact pro . th 2 . common . grpc . Direction . SECOND Ċ import Ġcom . exact pro . th 2 . common . message . addField Ċ import Ġcom . exact pro . th 2 . common . message . direction Ċ import Ġcom . exact pro . th 2 . common . message . fromJson Ċ import Ġcom . exact pro . th 2 . common . message . get Ċ import Ġcom . exact pro . th 2 . common . message . getList Ċ import Ġcom . exact pro . th 2 . common . message . getMessage Ċ import Ġcom . exact pro . th 2 . common . message . getString Ċ import Ġcom . exact pro . th 2 . common . message . message Ċ import Ġcom . exact pro . th 2 . common . message . message Type Ċ import Ġcom . exact pro . th 2 . common . message . sequence Ċ import Ġcom . exact pro . th 2 . common . message . session Alias Ċ import Ġcom . exact pro . th 2 . common . message . set Ċ import Ġcom . exact pro . th 2 . common . message . toJson Ċ import Ġcom . exact pro . th 2 . common . message . update List Ċ import Ġcom . exact pro . th 2 . common . message . update Message Ċ import Ġcom . exact pro . th 2 . common . message . update Or Add String Ċ import Ġcom . exact pro . th 2 . common . message . update String Ċ import Ġcom . exact pro . th 2 . common . value . update String Ċ import Ġorg . junit . jupiter . api . Assertions . assertEquals Ċ import Ġorg . junit . jupiter . api . Assertions . assertFalse Ċ import Ġorg . junit . jupiter . api . Assertions . assertNotNull Ċ import Ġorg . junit . jupiter . api . Assertions . assertTrue Ċ import Ġorg . junit . jupiter . api . Test Ċ Ċ private Ġconst Ġval ĠMESSAGE _ TYPE _ VALUE Ġ= Ġ" test Ġmessage Ġtype " Ċ private Ġconst Ġval ĠSESSION _ ALIAS _ VALUE Ġ= Ġ" test Ġsession Ġalias " Ċ private Ġconst Ġval ĠFIELD _ NAME Ġ= Ġ" test Ġfield " Ċ private Ġconst Ġval ĠFIELD _ NAME _ 2 Ġ= Ġ" test Ġfield Ġ 2 " Ċ private Ġconst Ġval ĠFIELD _ VALUE Ġ= Ġ" test Ġvalue " Ċ private Ġconst Ġval ĠFIELD _ VALUE _ 2 Ġ= Ġ" test Ġvalue Ġ 2 " Ċ private Ġval ĠDI RECTION _ VALUE Ġ= ĠSE COND Ċ Ċ class ĠTest Message Util Ġ{ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` fill Ġmessage Ġtype `() Ġ{ ĊĠĠĠĠĠĠĠ Ġmessage (). build (). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertFalse ( it . has Metadata ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġmessage ( MESSAGE _ TYPE _ VALUE ). build (). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( it . has Metadata ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( MESSAGE _ TYPE _ VALUE , Ġit . metadata . message Type ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġmessage ( MESSAGE _ TYPE _ VALUE , ĠDI RECTION _ VALUE , ĠSESSION _ ALIAS _ VALUE ). build (). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( MESSAGE _ TYPE _ VALUE , Ġit . message Type ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( DIRECTION _ VALUE , Ġit . direction ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( SESSION _ ALIAS _ VALUE , Ġit . session Alias ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` set Ġand Ġget Ġoperators `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= Ġmessage () ĊĠĠĠĠĠĠĠ Ġbuilder [ FIELD _ NAME ] Ġ= ĠFIELD _ VALUE ĊĊĠĠĠĠĠĠĠ Ġbuilder [ FIELD _ NAME ]. also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertNotNull ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( FIELD _ VALUE , Ġit ?. simple Value ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbuilder . build ()[ FIELD _ NAME ]. also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertNotNull ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( FIELD _ VALUE , Ġit ?. simple Value ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` update Ġmessage Ġtype `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= Ġmessage ( MESSAGE _ TYPE _ VALUE , ĠDI RECTION _ VALUE , ĠSESSION _ ALIAS _ VALUE ) ĊĠĠĠĠĠĠĠ Ġval Ġnew MessageType Ġ= Ġbuilder . message Type Ġ+ Ġ" Hello " ĊĊĠĠĠĠĠĠĠ Ġbuilder . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Type Ġ= Ġnew MessageType ĊĠĠĠĠĠĠĠ Ġ}. also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( new MessageType , Ġit . message Type ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( DIRECTION _ VALUE , Ġit . direction ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( SESSION _ ALIAS _ VALUE , Ġit . session Alias ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` update Ġdirection `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= Ġmessage ( MESSAGE _ TYPE _ VALUE , ĠDI RECTION _ VALUE , ĠSESSION _ ALIAS _ VALUE ) ĊĠĠĠĠĠĠĠ Ġval Ġnew Direction Ġ= ĠDirection . values (). as Sequence () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter { Ġitem Ġ-> Ġitem Ġ!= ĠDirection . UN RE CO GN IZED Ġ&& Ġitem Ġ!= Ġbuilder . direction Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. first () ĊĊĠĠĠĠĠĠĠ Ġbuilder . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdirection Ġ= Ġnew Direction ĊĠĠĠĠĠĠĠ Ġ}. also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( MESSAGE _ TYPE _ VALUE , Ġit . message Type ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( new Direction , Ġit . direction ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( SESSION _ ALIAS _ VALUE , Ġit . session Alias ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` update Ġsession Ġalias `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= Ġmessage ( MESSAGE _ TYPE _ VALUE , ĠDI RECTION _ VALUE , ĠSESSION _ ALIAS _ VALUE ) ĊĠĠĠĠĠĠĠ Ġval Ġnew Session Alias Ġ= Ġbuilder . session Alias Ġ+ Ġ" Hello " ĊĊĠĠĠĠĠĠĠ Ġbuilder . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsession Alias Ġ= Ġnew Session Alias ĊĠĠĠĠĠĠĠ Ġ}. also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( MESSAGE _ TYPE _ VALUE , Ġit . message Type ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( DIRECTION _ VALUE , Ġit . direction ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( new Session Alias , Ġit . session Alias ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` update Ġsequence `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= Ġmessage ( MESSAGE _ TYPE _ VALUE , ĠDI RECTION _ VALUE , ĠSESSION _ ALIAS _ VALUE ) ĊĠĠĠĠĠĠĠ Ġval Ġnew Sequence Ġ= Ġbuilder . sequence ++ ĊĊĠĠĠĠĠĠĠ Ġbuilder . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsequence Ġ= Ġnew Sequence ĊĠĠĠĠĠĠĠ Ġ}. also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( MESSAGE _ TYPE _ VALUE , Ġit . message Type ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( DIRECTION _ VALUE , Ġit . direction ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( SESSION _ ALIAS _ VALUE , Ġit . session Alias ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( new Sequence , Ġit . sequence ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` from Ġjson Ġmessage Ġtest `() Ġ{ ĊĠĠĠĠĠĠĠ Ġmessage (). fromJson (""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" metadata ": Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" id ": Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" connection Id ": Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" session Alias ": Ġ"$ SESSION _ ALIAS _ VALUE " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" message Type ": Ġ"$ MESSAGE _ TYPE _ VALUE " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" fields ": Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"$ FIELD _ NAME ": Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" simple Value ": Ġ"$ FIELD _ VALUE " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ""" . trim Indent ()). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( it . message Type , ĠMESSAGE _ TYPE _ VALUE ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( it . session Alias , ĠSESSION _ ALIAS _ VALUE ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( it . getString ( FIELD _ NAME ), ĠFIELD _ VALUE ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` to Ġjson Ġfrom Ġjson Ġmessage Ġtest `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġjson Ġ= Ġmessage ( MESSAGE _ TYPE _ VALUE , ĠDI RECTION _ VALUE , ĠSESSION _ ALIAS _ VALUE ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Field ( FIELD _ NAME , ĠFIELD _ VALUE ) ĊĠĠĠĠĠĠĠ Ġ}. toJson () ĊĊĠĠĠĠĠĠĠ Ġmessage (). fromJson ( json ). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( it . message Type , ĠMESSAGE _ TYPE _ VALUE ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( it . direction , ĠDI RECTION _ VALUE ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( it . session Alias , ĠSESSION _ ALIAS _ VALUE ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( it . getString ( FIELD _ NAME ), ĠFIELD _ VALUE ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` update Ġfield `() Ġ{ ĊĠĠĠĠĠĠĠ Ġmessage ( MESSAGE _ TYPE _ VALUE , ĠDI RECTION _ VALUE , ĠSESSION _ ALIAS _ VALUE ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Field ( FIELD _ NAME , ĠFIELD _ VALUE ) ĊĠĠĠĠĠĠĠ Ġ}. update String ( FIELD _ NAME ) Ġ{ ĠFIELD _ VALUE _ 2 Ġ}. also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( it . getString ( FIELD _ NAME ), ĠFIELD _ VALUE _ 2 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` update Ġcomplex Ġfield `() Ġ{ ĊĠĠĠĠĠĠĠ Ġmessage ( MESSAGE _ TYPE _ VALUE , ĠDI RECTION _ VALUE , ĠSESSION _ ALIAS _ VALUE ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Field ( FIELD _ NAME , Ġmessage () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. addField ( FIELD _ NAME , ĠFIELD _ VALUE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. addField ( FIELD _ NAME _ 2 , ĠlistOf ( FIELD _ VALUE , ĠFIELD _ VALUE _ 2 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ}. update Message ( FIELD _ NAME ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate List ( FIELD _ NAME _ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate String ( 0 ) Ġ{ ĠFIELD _ VALUE _ 2 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( it . getMessage ( FIELD _ NAME )?. getList ( FIELD _ NAME _ 2 )?. map Ġ{ Ġit . simple Value Ġ}, ĠlistOf ( FIELD _ VALUE _ 2 , ĠFIELD _ VALUE _ 2 )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` update Ġor Ġadd Ġfield Ġtest Ġadd `() Ġ{ ĊĠĠĠĠĠĠĠ Ġmessage ( MESSAGE _ TYPE _ VALUE , ĠDI RECTION _ VALUE , ĠSESSION _ ALIAS _ VALUE ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Or Add String ( FIELD _ NAME ) Ġ{ Ġit Ġ?: ĠFIELD _ VALUE Ġ} ĊĠĠĠĠĠĠĠ Ġ}. also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( it . getString ( FIELD _ NAME ), ĠFIELD _ VALUE ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` update Ġor Ġadd Ġfield Ġtest Ġupdate `() Ġ{ ĊĠĠĠĠĠĠĠ Ġmessage ( MESSAGE _ TYPE _ VALUE , ĠDI RECTION _ VALUE , ĠSESSION _ ALIAS _ VALUE ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Field ( FIELD _ NAME , ĠFIELD _ VALUE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Or Add String ( FIELD _ NAME ) Ġ{ Ġit Ġ?: ĠFIELD _ VALUE _ 2 Ġ} ĊĠĠĠĠĠĠĠ Ġ}. also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( it . getString ( FIELD _ NAME ), ĠFIELD _ VALUE ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ