package Ġno . sk at te et aten . aur ora . mean . gen ie Ċ Ċ import Ġassert k . Assert Ċ import Ġassert k . assertThat Ċ import Ġassert k . assertions . isEmpty Ċ import Ġassert k . assertions . support . expected Ċ import Ġcom . fasterxml . jackson . databind . ObjectMapper Ċ import Ġcom . fasterxml . jackson . data format . yaml . YAML Factory Ċ import Ġjava . util . concurrent . TimeUnit Ċ import Ġno . sk at te et aten . aur ora . mean . gen ie . service . create Get Schema Result Json Ċ import Ġokhttp 3 . Response Ċ import Ġokhttp 3 . WebSocket Ċ import Ġokhttp 3 . WebSocket Listener Ċ import Ġokhttp 3 . mock webserver . Mock Response Ċ import Ġokhttp 3 . mock webserver . Mock WebServer Ċ import Ġokhttp 3 . mock webserver . Re corded Request Ċ import Ġorg . await ility . kotlin . await Ċ import Ġorg . await ility . kotlin . until NotNull Ċ import Ġorg . junit . jupiter . api . After Each Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġorg . springframework . boot . test . context . SpringBootTest Ċ import Ġorg . springframework . core . io . Class Path Resource Ċ import Ġorg . springframework . http . HttpHeaders Ċ import Ġorg . springframework . http . HttpMethod Ċ import Ġorg . springframework . http . HttpMethod . DELETE Ċ import Ġorg . springframework . http . HttpMethod . GET Ċ import Ġorg . springframework . http . MediaType Ċ import Ġorg . springframework . test . context . Active Profiles Ċ Ċ @ Active Profiles (" test ") Ċ @ SpringBootTest Ċ class ĠMean Gen ie IntegrationTest Ġ{ ĊĠĠĠ Ġprivate Ġval Ġopen shift Ġ= ĠMock WebServer () ĊĠĠĠ Ġprivate Ġval Ġopen shift Listener Ġ= Ġobject Ġ: ĠWebSocket Listener () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġweb Socket : ĠWebSocket ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Open ( ws : ĠWebSocket , Ġresponse : ĠResponse ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġweb Socket Ġ= Ġws ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġdb h Ġ= ĠMock WebServer () ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġopen shift . enqueue ( Mock Response (). with WebSocket Upgrade ( openshift Listener )) ĊĠĠĠĠĠĠĠ Ġopen shift . start (" openshift ". port ()) ĊĊĠĠĠĠĠĠĠ Ġdb h . enqueue Json ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMock Response (). set Body ( create Get Schema Result Json (" 1 2 3 ")), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMock Response (). set Body (""" {} "" "), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMock Response (). set Body ( create Get Schema Result Json (" 2 3 4 ")), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMock Response (). set Body (""" {} """) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġdb h . start (" db h ". port ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ After Each ĊĠĠĠ Ġfun ĠtearDown () Ġ{ ĊĠĠĠĠĠĠĠ Ġopen shift . shutdown () ĊĠĠĠĠĠĠĠ Ġdb h . shutdown () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Receive Ġdeleted Ġevent Ġand Ġcall Ġdb h `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġweb Socket Ġ= Ġawait Ġuntil NotNull Ġ{ Ġopen shift Listener . web Socket Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġjson Ġ= Ġ""" { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" type " Ġ: Ġ" DELETED ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" object ": Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" metadata " Ġ: Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" name " Ġ: Ġ" test - app ", ĠĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" namespace " Ġ: Ġ" test - ut v ", ĠĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" labels " Ġ: Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" aff iliation " Ġ: Ġ" test " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" spec ": Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" databases ": Ġ[" 1 2 3 "," 2 3 4 "] ĠĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĠĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} """ ĊĠĠĠĠĠĠĠ Ġweb Socket . send ( json ) ĊĊĠĠĠĠĠĠĠ Ġdb h . assertThat () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. contains Request ( GET , Ġ"/ api / v 1 / schema / 1 2 3 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. contains Request ( GET , Ġ"/ api / v 1 / schema / 2 3 4 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. contains Request ( DELETE , Ġ"/ api / v 1 / schema / 1 2 3 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. contains Request ( DELETE , Ġ"/ api / v 1 / schema / 2 3 4 ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Receive Ġdeleted Ġevent Ġwithout Ġdatabases `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġweb Socket Ġ= Ġawait Ġuntil NotNull Ġ{ Ġopen shift Listener . web Socket Ġ} ĊĠĠĠĠĠĠĠ Ġweb Socket . send (""" Ġ{ Ġ" type ":" DELETED ", Ġ" object ": Ġ{ Ġ" spec ": Ġ{ Ġ" databases ": Ġ[] Ġ} Ġ} Ġ} Ġ"" ") ĊĊĠĠĠĠĠĠĠ Ġdb h . assertThat (). isEmpty () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠString . port (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġyaml Ġ= ĠClass Path Resource (" application . yaml "). file . read Text () ĊĠĠĠĠĠĠĠ Ġval Ġvalues Ġ= ĠObjectMapper ( YAML Factory ()). read Tree ( yaml ) ĊĠĠĠĠĠĠĠ Ġreturn Ġvalues . at ("/ integrations /$ this / port "). as Int () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠMock WebServer . enqueue Json ( var arg Ġresponses : ĠMock Response ) Ġ{ ĊĠĠĠĠĠĠĠ Ġresponses . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . setHeader ( HttpHeaders . CONTENT _ TYPE , ĠMediaType . APPLICATION _ JSON _ VALUE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . enqueue ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠMock WebServer . assertThat (): ĠAssert < List < Re corded Request >> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrequests Ġ= Ġmutable ListOf < Re corded Request >() ĊĠĠĠĠĠĠĠ Ġdo Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= Ġthis . take Request ( 5 0 0 , ĠTimeUnit . MILLISECONDS )?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequests . add ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġwhile Ġ( request Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠ Ġreturn ĠassertThat ( requests ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠAssert < List < Re corded Request >> . contains Request ( method : ĠHttpMethod , Ġpath : ĠString ): ĠAssert < List < Re corded Request >> Ġ= ĊĠĠĠĠĠĠĠ Ġtransform Ġ{ Ġrequests Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( requests . any Ġ{ Ġit . method Ġ== Ġmethod . name Ġ&& Ġit . path Ġ== Ġpath Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequests ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpected ("${ method . name } Ġrequest Ġwith Ġ$ path Ġbut Ġwas Ġ$ requests ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ċ } Ċ