package Ġe 2 e Ċ Ċ import Ġcom . nim bus ds . j ose . J WS Algorithm Ċ import Ġcom . nim bus ds . j ose . J WS Header Ċ import Ġcom . nim bus ds . j ose . crypto . RS ASS AS ign er Ċ import Ġcom . nim bus ds . j ose . j wk . gen . RSA Key Generator Ċ import Ġcom . nim bus ds . jwt . JWT Claims Set Ċ import Ġcom . nim bus ds . jwt . Signed JWT Ċ import Ġe 2 e . Mocks . Dispatcher . respond Ċ import Ġe 2 e . Mocks . Matcher . get Ċ import Ġe 2 e . Mocks . Matcher . post Ċ import Ġe 2 e . Mocks . Test data . mask in port Response Ċ import Ġe 2 e . fhir . Fhir Resource Ċ import Ġno . nav . hel se . h ops . convert . Content Types . fhir Json R 4 Ċ import Ġno . nav . hel se . h ops . mask in port en . GRANT _ TYPE Ċ import Ġno . nav . hel se . h ops . test . Embedded Kafka Ċ import Ġno . nav . hel se . h ops . test . Mock Server Ċ import Ġokhttp 3 . Headers Ċ import Ġokhttp 3 . Headers . Companion . headers Of Ċ import Ġokhttp 3 . mock webserver . Mock Response Ċ import Ġokhttp 3 . mock webserver . Re corded Request Ċ import Ġorg . intellij . lang . annotations . Language Ċ import Ġjava . util . Date Ċ Ċ const Ġval ĠL IV EN ESS _ PATH Ġ= Ġ"/ act uator / live " Ċ Ċ object ĠMock s Ġ{ ĊĠĠĠ Ġval Ġmask in port en Ġ= ĠMock Server (). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġmatch Request ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpost ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath Ġ= Ġ"/ token ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheader Ġ= Ġ" Content - Type " Ġto Ġ" application / x - www - form - urlencoded ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontains Body Ġ= Ġ" grant _ type =$ GRANT _ TYPE & assertion =" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrespond ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbody Ġ= Ġmask in port Response , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheaders Ġ= Ġheaders Of (" Content - Type ", Ġ" application / json ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġapi Ġ= ĠMock Server (). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġmatch Request ( get ( LI VEN ESS _ PATH ), Ġrespond (" live ")) ĊĠĠĠĠĠĠĠ Ġmatch Request ( get ("/ fhir / 4 . 0 / Bundle ", Ġ" accept " Ġto Ġfhir Json R 4 . toString ()), Ġrespond ("{} ")) ĊĠĠĠĠĠĠĠ Ġmatch Request ( post ("/ fhir / 4 . 0 /\ $ process - message ")) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠMost Ġrecent Ġcontent Ġis Ġmost Ġlikely Ġcorrect Ġ( we Ġdon 't Ġknow Ġthe Ġresource Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontent Ġ= ĠF hir Resource . get Ġ{ Ġtrue Ġ}. max By OrNull Ġ{ Ġit . timestamp Ġ} !! ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSim ulate Ġh ops - event - replay - kafka Ġand Ġput Ġthe Ġmessage Ġon Ġkafka . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkafka . produce ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtopic Ġ= Ġ" hel se op pl ys ning er . river ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey Ġ= Ġcontent . id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= Ġcontent . json . toByteArray () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThen Ġrespond Ġwith ĠAccept ed ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMock Response (). set Response Code ( 2 0 2 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġevent replay Ġ= ĠMock Server (). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġmatch Request ( get ( LI VEN ESS _ PATH ), Ġrespond (" live ")) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġevents ink Ġ= ĠMock Server (). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġmatch Request ( get ( LI VEN ESS _ PATH ), Ġrespond (" live ")) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġevent store Ġ= ĠMock Server (). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġmatch Request ( get ( LI VEN ESS _ PATH ), Ġrespond (" live ")) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġlateinit Ġvar Ġkafka : ĠEmbedded Kafka ĊĊĠĠĠ Ġobject ĠMatcher Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġget ( path : ĠString ) Ġ= Ġ{ Ġreq : ĠRe corded Request Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreq . method Ġ== Ġ" GET " Ġ&& Ġreq . has Path ( path ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġget ( path : ĠString , Ġheader : ĠPair < String , ĠString >) Ġ= Ġ{ Ġreq : ĠRe corded Request Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreq . method Ġ== Ġ" GET " Ġ&& Ġreq . has Path ( path ) Ġ&& Ġreq . has Header ( header ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġpost ( path : ĠString ) Ġ= Ġ{ Ġreq : ĠRe corded Request Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreq . method Ġ== Ġ" POST " Ġ&& Ġreq . has Path ( path ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġpost ( path : ĠString , Ġheader : ĠPair < String , ĠString >, Ġcontains Body : ĠString ) Ġ= Ġ{ Ġreq : ĠRe corded Request Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreq . method Ġ== Ġ" POST " Ġ&& Ġreq . has Path ( path ) Ġ&& Ġreq . has Header ( header ) Ġ&& Ġreq . contains Body ( contains Body ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun ĠRe corded Request . has Path ( path String : ĠString ) Ġ= Ġpath !!. startsWith ( path String ) ĊĠĠĠĠĠĠĠ Ġprivate Ġfun ĠRe corded Request . contains Body ( content : ĠString ) Ġ= Ġbody . read Utf 8 (). startsWith ( content ) ĊĠĠĠĠĠĠĠ Ġprivate Ġfun ĠRe corded Request . has Header ( header : ĠPair < String , ĠString >) Ġ= Ġget Header ( header . first ) Ġ== Ġheader . second ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġobject ĠDispatcher Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġrespond ( code : ĠInt Ġ= Ġ 2 0 0 ) Ġ= Ġ{ Ġ_: ĠRe corded Request Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMock Response (). set Response Code ( code ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġrespond ( body : ĠString Ġ= Ġ"", Ġcode : ĠInt Ġ= Ġ 2 0 0 ) Ġ= Ġ{ Ġ_: ĠRe corded Request Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMock Response (). set Body ( body ). set Response Code ( code ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġrespond ( body : ĠString Ġ= Ġ"", Ġheaders : ĠHeaders , Ġcode : ĠInt Ġ= Ġ 2 0 0 ) Ġ= Ġ{ Ġ_: ĠRe corded Request Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMock Response (). set Headers ( headers ). set Body ( body ). set Response Code ( code ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġobject ĠTest data Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Language (" json ") ĊĠĠĠĠĠĠĠ Ġval Ġmask in port Response Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" access _ token " Ġ: Ġ"$ mask in port en Token ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" expires _ in " Ġ: Ġ 1 2 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" scope " Ġ: Ġ" nav : hel se : hel se op pl ys ning er . read Ġnav : hel se : hel se op pl ys ning er . write ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" token _ type ": Ġ" jwt " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġmask in port en Token : ĠString ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= ĠRSA Key Generator ( 2 0 4 8 ). key ID (" 1 2 3 "). generate (). let Ġ{ ĠprivateKey Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġheader Ġ= ĠJ WS Header . Builder ( J WS Algorithm . RS 2 5 6 ). key ID ( privateKey . key ID ). build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexp Ġ= ĠDate ( Date (). time Ġ+ Ġ( 6 0 Ġ* Ġ 1 0 0 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclaims Ġ= ĠJWT Claims Set . Builder (). subject (" test "). issuer (" e 2 e "). expiration Time ( exp ). build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSigned JWT ( header , Ġclaims ). apply Ġ{ Ġsign ( RS ASS AS ign er ( privateKey )) Ġ}. serialize () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ