package Ġno . nav . hel se . flex Ċ Ċ import Ġno . nav . hel se . flex . dom ene .* Ċ import Ġno . nav . hel se . flex . kafka . UT B ET AL ING _ TOPIC Ċ import Ġno . nav . hel se . flex . kafka . VED TA K _ TOPIC Ċ import Ġno . nav . hel se . flex . service . B ru ker not ifik as jon Service Ċ import Ġorg . am sh ove . k lu ent .* Ċ import Ġorg . apache . kafka . clients . producer . Kafka Producer Ċ import Ġorg . apache . kafka . clients . producer . Producer Record Ċ import Ġorg . await ility . Await ility . await Ċ import Ġorg . junit . jupiter . api . Method Order er Ċ import Ġorg . junit . jupiter . api . Order Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġorg . junit . jupiter . api . TestMethod Order Ċ import Ġorg . springframework . beans . factory . annotation . Autowired Ċ import Ġorg . springframework . beans . factory . annotation . Value Ċ import Ġorg . springframework . web . client . Rest Template Ċ import Ġjava . time . LocalDate Ċ import Ġjava . util .* Ċ import Ġjava . util . concurrent . TimeUnit Ċ Ċ @ TestMethod Order ( Method Order er . Order Annotation :: class ) Ċ class ĠRe be handling IntegrationTest Ġ: ĠAbstract Container Base Test () Ġ{ ĊĊĠĠĠ Ġ@ Autowired ĊĠĠĠ Ġlateinit Ġvar Ġkafka Producer : ĠKafka Producer < String , ĠString > ĊĊĠĠĠ Ġ@ Autowired ĊĠĠĠ Ġlateinit Ġvar Ġrest Template : ĠRest Template ĊĊĠĠĠ Ġ@ Autowired ĊĠĠĠ Ġlateinit Ġvar Ġbru ker not ifik as jon Service : ĠB ru ker not ifik as jon Service ĊĊĠĠĠ Ġ@ Value ("\ ${ on - prem - kafka . username }") ĊĠĠĠ Ġlateinit Ġvar Ġsystem br uk er : ĠString ĊĊĠĠĠ Ġfinal Ġval Ġfn r Ġ= Ġ" 1 2 3 3 3 4 2 " ĊĠĠĠ Ġfinal Ġval Ġakt Ã¸ r Id Ġ= Ġ" 3 2 1 " ĊĠĠĠ Ġfinal Ġval Ġorg Ġ= Ġ" 9 8 7 " ĊĠĠĠ Ġfinal Ġval Ġnow Ġ= ĠLocalDate . now () ĊĠĠĠ Ġval Ġut bet aling Id Ġ= Ġ" 1 2 4 5 4 2 " ĊĠĠĠ Ġval Ġved tak Ġ= ĠV ed tak F att et For Ek st ern Dto ( ĊĠĠĠĠĠĠĠ Ġf Ã¸ d se ls nummer Ġ= Ġfn r , ĊĠĠĠĠĠĠĠ Ġakt Ã¸ r Id Ġ= Ġakt Ã¸ r Id , ĊĠĠĠĠĠĠĠ Ġorgan is as j ons nummer Ġ= Ġorg , ĊĠĠĠĠĠĠĠ Ġf om Ġ= Ġnow , ĊĠĠĠĠĠĠĠ Ġtom Ġ= Ġnow , ĊĠĠĠĠĠĠĠ Ġsk j Ã¦ ring st id sp unkt Ġ= Ġnow , ĊĠĠĠĠĠĠĠ Ġdokument er Ġ= Ġempty List (), ĊĠĠĠĠĠĠĠ Ġinn te kt Ġ= Ġ 0 . 0 , ĊĠĠĠĠĠĠĠ Ġsy ke pen ge gr un nl ag Ġ= Ġ 0 . 0 , ĊĠĠĠĠĠĠĠ Ġut bet aling Id Ġ= Ġut bet aling Id ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġval Ġut bet aling Ġ= ĠU tb et aling U tb et alt ( ĊĠĠĠĠĠĠĠ Ġf Ã¸ d se ls nummer Ġ= Ġfn r , ĊĠĠĠĠĠĠĠ Ġakt Ã¸ r Id Ġ= Ġakt Ã¸ r Id , ĊĠĠĠĠĠĠĠ Ġorgan is as j ons nummer Ġ= Ġorg , ĊĠĠĠĠĠĠĠ Ġf om Ġ= Ġnow , ĊĠĠĠĠĠĠĠ Ġtom Ġ= Ġnow , ĊĠĠĠĠĠĠĠ Ġut bet aling Id Ġ= Ġut bet aling Id , ĊĠĠĠĠĠĠĠ Ġevent Ġ= Ġ" event et ", ĊĠĠĠĠĠĠĠ Ġant all V ed tak Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġfor br uk te Sy ked ager Ġ= Ġ 4 2 , ĊĠĠĠĠĠĠĠ Ġg jen st Ã¥ ende Sy ked ager Ġ= Ġ 3 2 5 4 , ĊĠĠĠĠĠĠĠ Ġautomatis k Be handling Ġ= Ġtrue , ĊĠĠĠĠĠĠĠ Ġar be id sg iver Opp drag Ġ= ĠU tb et aling U tb et alt . Opp drag Dto ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmot t aker Ġ= Ġorg , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġf ag om r Ã¥ de Ġ= Ġ" SP ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġf ags ystem Id Ġ= Ġ" 1 2 3 4 ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnet to Bel Ã¸ p Ġ= Ġ 1 2 3 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġut bet al ings lin jer Ġ= Ġempty List () ĊĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ Ġtype Ġ= Ġ" UT B ET AL ING ", ĊĠĠĠĠĠĠĠ Ġut bet al ings d ager Ġ= Ġempty List () ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ Order ( 1 ) ĊĠĠĠ Ġfun Ġ` mot tar Ġved tak `() Ġ{ ĊĠĠĠĠĠĠĠ Ġkafka Producer . send ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠProducer Record ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠV ED TA K _ TOPIC , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfn r , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġved tak . serial is ert Til String () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ). get () ĊĊĠĠĠĠĠĠĠ Ġawait (). at Most ( 5 , ĠTimeUnit . SECONDS ). until Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġved tak Repository . find V ed tak Db Records By Fn r ( fn r ). isNotEmpty () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġh ent et V ed tak Ġ= Ġved tak Repository . find V ed tak Db Records By Fn r ( fn r ). first () ĊĠĠĠĠĠĠĠ Ġh ent et V ed tak . ved tak . til V ed tak F att et For Ek st ern Dto (). f Ã¸ d se ls nummer . shouldBe EqualTo ( fn r ) ĊĠĠĠĠĠĠĠ Ġh ent et V ed tak . ut bet aling Id . shouldBe EqualTo ( ved tak . ut bet aling Id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ Order ( 2 ) ĊĠĠĠ Ġfun Ġ` f inner Ġik ke Ġved t aket `() Ġ{ ĊĠĠĠĠĠĠĠ Ġh ent V ed tak ( fn r ). shouldBe Empty () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ Order ( 2 ) ĊĠĠĠ Ġfun Ġ` ingen Ġbru ker notif kas jon Ġg Ã¥r Ġut Ġf Ã¸ r Ġut bet aling a Ġer Ġder `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġant all Ġ= Ġbru ker not ifik as jon Service . pro sse ser V ed tak () ĊĠĠĠĠĠĠĠ Ġant all Ġ` should Ġbe Ġequal Ġto ` Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ Order ( 3 ) ĊĠĠĠ Ġfun Ġ` mot tar Ġut bet aling `() Ġ{ ĊĠĠĠĠĠĠĠ Ġkafka Producer . send ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠProducer Record ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠU TB ET AL ING _ TOPIC , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfn r , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġut bet aling . serial is ert Til String () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ). get () ĊĊĠĠĠĠĠĠĠ Ġawait (). at Most ( 5 , ĠTimeUnit . SECONDS ). until Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġut bet aling Repository . find U tb et aling Db Records By Fn r ( fn r ). isNotEmpty () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġdb U tb et aling Ġ= Ġut bet aling Repository . find U tb et aling Db Records By Fn r ( fn r ). first () ĊĠĠĠĠĠĠĠ Ġdb U tb et aling . ut bet aling . til U tb et aling U tb et alt (). f Ã¸ d se ls nummer . shouldBe EqualTo ( fn r ) ĊĠĠĠĠĠĠĠ Ġdb U tb et aling . ut bet aling Id . shouldBe EqualTo ( ut bet aling . ut bet aling Id ) ĊĠĠĠĠĠĠĠ Ġdb U tb et aling . ut bet aling Type . shouldBe EqualTo (" UT B ET AL ING ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ Order ( 4 ) ĊĠĠĠ Ġfun Ġ` f inner Ġved t aket Ġmed Ġquery en Ġfor Ġbru ker notif kas jon `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġved tak Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġved tak Repository . findBy L est IsNull And B ru ker not ifik as jon Send t IsNull And U tb et aling Id IsNotNull And B ru ker not ifik as jon U tel att IsNull () ĊĠĠĠĠĠĠĠ Ġved tak . should Have Size ( 1 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ Order ( 4 ) ĊĠĠĠ Ġfun Ġ` f inner Ġved t aket Ġ` () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġved tak Ġ= Ġh ent V ed tak ( fn r ) ĊĠĠĠĠĠĠĠ Ġved tak . should Have Size ( 1 ) ĊĠĠĠĠĠĠĠ Ġved tak . first (). ved tak . ut bet aling . ut bet aling Type Ġ` should Ġbe Ġequal Ġto ` Ġ" UT B ET AL ING " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ Order ( 5 ) ĊĠĠĠ Ġfun Ġ` mot tar Ġen Ġrev ur der ing ĠpÃ¥ Ġved t aket `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġut bet al ings id Ġ= ĠUUID . randomUUID (). toString () ĊĠĠĠĠĠĠĠ Ġkafka Producer . send ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠProducer Record ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠV ED TA K _ TOPIC , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfn r , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġved tak . copy ( ut bet aling Id Ġ= Ġut bet al ings id ). serial is ert Til String () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ). get () ĊĊĠĠĠĠĠĠĠ Ġkafka Producer . send ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠProducer Record ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠU TB ET AL ING _ TOPIC , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfn r , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġut bet aling ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. copy ( ut bet aling Id Ġ= Ġut bet al ings id , Ġtype Ġ= Ġ" REV UR DER ING ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. serial is ert Til String () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ). get () ĊĊĠĠĠĠĠĠĠ Ġawait (). at Most ( 5 , ĠTimeUnit . SECONDS ). until Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġved tak Repository . find V ed tak Db Records By Fn r ( fn r ). size Ġ== Ġ 2 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġawait (). at Most ( 5 , ĠTimeUnit . SECONDS ). until Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġut bet aling Repository . find U tb et aling Db Records By Fn r ( fn r ). size Ġ== Ġ 2 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġdb U tb et aling Ġ= Ġut bet aling Repository . find U tb et aling Db Records By Fn r ( fn r ). sorted By Ġ{ Ġit . op prett et Ġ}. last () ĊĠĠĠĠĠĠĠ Ġdb U tb et aling . ut bet aling Type . shouldBe EqualTo (" REV UR DER ING ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ Order ( 6 ) ĊĠĠĠ Ġfun Ġ` f inner Ġved tak ene , Ġen Ġer Ġrev ur der ing , Ġdet Ġand re Ġer Ġrev ur der t Ġ` () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġved tak Ġ= Ġh ent V ed tak ( fn r ). sorted By Ġ{ Ġit . op prett et Timestamp Ġ} ĊĠĠĠĠĠĠĠ Ġved tak . should Have Size ( 2 ) ĊĠĠĠĠĠĠĠ Ġved tak [ 0 ]. ved tak . ut bet aling . ut bet aling Type Ġ` should Ġbe Ġequal Ġto ` Ġ" UT B ET AL ING " ĊĠĠĠĠĠĠĠ Ġved tak [ 0 ]. rev ur der t .` should Ġbe Ġtrue `() ĊĠĠĠĠĠĠĠ Ġved tak [ 1 ]. ved tak . ut bet aling . ut bet aling Type Ġ` should Ġbe Ġequal Ġto ` Ġ" REV UR DER ING " ĊĠĠĠĠĠĠĠ Ġved tak [ 1 ]. rev ur der t .` should Ġbe Ġfalse `() ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ Order ( 7 ) ĊĠĠĠ Ġfun Ġ` 2 Ġbru ker notif kas jon er Ġg Ã¥r Ġut Ġn Ã¥r Ġcron job ben Ġk j Ã¸ res `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġant all Ġ= Ġbru ker not ifik as jon Service . pro sse ser V ed tak () ĊĠĠĠĠĠĠĠ Ġant all Ġ` should Ġbe Ġequal Ġto ` Ġ 2 ĊĊĠĠĠĠĠĠĠ Ġopp g ave Kafka Consumer . vent P Ã¥ Records ( ant all Ġ= Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġdone Kafka Consumer . vent P Ã¥ Records ( ant all Ġ= Ġ 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ Order ( 8 ) ĊĠĠĠ Ġfun Ġ` f inner Ġik ke Ġl eng re Ġved t aket Ġmed Ġquery en Ġfor Ġbru ker notif kas jon `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġved tak Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġved tak Repository . findBy L est IsNull And B ru ker not ifik as jon Send t IsNull And U tb et aling Id IsNotNull And B ru ker not ifik as jon U tel att IsNull () ĊĠĠĠĠĠĠĠ Ġved tak . shouldBe Empty () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ Order ( 9 ) ĊĠĠĠ Ġfun Ġ` mot tar Ġen Ġrev ur der ing ĠpÃ¥ Ġrev ur der ing a `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġut bet al ings id Ġ= ĠUUID . randomUUID (). toString () ĊĠĠĠĠĠĠĠ Ġkafka Producer . send ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠProducer Record ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠV ED TA K _ TOPIC , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfn r , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġved tak . copy ( ut bet aling Id Ġ= Ġut bet al ings id ). serial is ert Til String () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ). get () ĊĊĠĠĠĠĠĠĠ Ġkafka Producer . send ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠProducer Record ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠU TB ET AL ING _ TOPIC , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfn r , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġut bet aling ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. copy ( ut bet aling Id Ġ= Ġut bet al ings id , Ġtype Ġ= Ġ" REV UR DER ING ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. serial is ert Til String () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ). get () ĊĊĠĠĠĠĠĠĠ Ġawait (). at Most ( 5 , ĠTimeUnit . SECONDS ). until Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġved tak Repository . find V ed tak Db Records By Fn r ( fn r ). size Ġ== Ġ 3 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġawait (). at Most ( 5 , ĠTimeUnit . SECONDS ). until Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġut bet aling Repository . find U tb et aling Db Records By Fn r ( fn r ). size Ġ== Ġ 3 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġdb U tb et aling Ġ= Ġut bet aling Repository . find U tb et aling Db Records By Fn r ( fn r ). sorted By Ġ{ Ġit . op prett et Ġ}. last () ĊĠĠĠĠĠĠĠ Ġdb U tb et aling . ut bet aling Type . shouldBe EqualTo (" REV UR DER ING ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ Order ( 1 0 ) ĊĠĠĠ Ġfun Ġ` f inner Ġved tak ene , Ġto Ġer Ġrev ur der ing , Ġden Ġen e Ġrev ur der ing a Ġer Ġse lv Ġb li rr rev ur der t Ġ` () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġved tak Ġ= Ġh ent V ed tak ( fn r ). sorted By Ġ{ Ġit . op prett et Timestamp Ġ} ĊĠĠĠĠĠĠĠ Ġved tak . should Have Size ( 3 ) ĊĠĠĠĠĠĠĠ Ġved tak [ 0 ]. ved tak . ut bet aling . ut bet aling Type Ġ` should Ġbe Ġequal Ġto ` Ġ" UT B ET AL ING " ĊĠĠĠĠĠĠĠ Ġved tak [ 0 ]. rev ur der t .` should Ġbe Ġtrue `() ĊĠĠĠĠĠĠĠ Ġved tak [ 1 ]. ved tak . ut bet aling . ut bet aling Type Ġ` should Ġbe Ġequal Ġto ` Ġ" REV UR DER ING " ĊĠĠĠĠĠĠĠ Ġved tak [ 1 ]. rev ur der t .` should Ġbe Ġtrue `() ĊĠĠĠĠĠĠĠ Ġved tak [ 2 ]. ved tak . ut bet aling . ut bet aling Type Ġ` should Ġbe Ġequal Ġto ` Ġ" REV UR DER ING " ĊĠĠĠĠĠĠĠ Ġved tak [ 2 ]. rev ur der t .` should Ġbe Ġfalse `() ĊĠĠĠ Ġ} Ċ } Ċ