package Ġru . ot us . ot us kotlin . blog . rabbit Ċ Ċ import Ġblog . stubs . Post Stub Ċ import Ġcom . fasterxml . jackson . databind . ObjectMapper Ċ import Ġcom . rabbitmq . client . Cancel Callback Ċ import Ġcom . rabbitmq . client . ConnectionFactory Ċ import Ġcom . rabbitmq . client . Deliver Callback Ċ import Ġkotlinx . coroutines . delay Ċ import Ġkotlinx . coroutines . run Blocking Ċ import Ġkotlinx . coroutines . with Timeout OrNull Ċ import Ġorg . junit . Test Ċ import Ġorg . test containers . containers . Rabbit MQ Container Ċ import Ġru . ot us . ot us kotlin . blog . backend . services . Post Service Ċ import Ġru . ot us . ot us kotlin . blog . log ics . Post Crud Ċ import Ġru . ot us . ot us kotlin . blog . openapi . models . Base Debug Request Ċ import Ġru . ot us . ot us kotlin . blog . openapi . models . Cre atable Post Ċ import Ġru . ot us . ot us kotlin . blog . openapi . models . Create Post Request Ċ import Ġru . ot us . ot us kotlin . blog . openapi . models . Create Post Response Ċ import Ġkotlin . test . Before Test Ċ import Ġkotlin . test . assertEquals Ċ Ċ class ĠRabbit Mq It Test Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval Ġkey In Ġ= Ġ" key - in " ĊĠĠĠĠĠĠĠ Ġconst Ġval Ġkey Out Ġ= Ġ" key - out " ĊĠĠĠĠĠĠĠ Ġconst Ġval Ġexchange Ġ= Ġ" post - exchange " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval Ġqueue Ġ= Ġ" post - queue " ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġcontainer Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRabbit MQ Container (" rabbitmq : latest "). apply Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith User (" guest ", Ġ" guest ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġrabbit Mq Test Port : ĠInt Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontainer . get Mapped Port ( 5 6 7 2 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġconfig Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRabbit Config ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġport Ġ= Ġrabbit Mq Test Port ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġcr ud Ġ= ĠPost Crud () ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġservice Ġ= ĠPost Service ( crud ) ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġprocessor Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRabbit Direct Processor ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfig Ġ= Ġconfig , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey In Ġ= Ġkey In , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey Out Ġ= Ġkey Out , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexchange Ġ= Ġexchange , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġqueue Ġ= Ġqueue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġservice Ġ= Ġservice , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconsumer Tag Ġ= Ġ" post - tag " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġcontroller Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRabbit Controller ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprocessors Ġ= Ġset Of ( processor ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġmapper Ġ= ĠObjectMapper () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Before Test ĊĠĠĠ Ġfun Ġtear Up () Ġ{ ĊĠĠĠĠĠĠĠ Ġcontroller . start () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġpost Create Test () Ġ{ ĊĠĠĠĠĠĠĠ ĠConnection Factory (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhost Ġ= Ġconfig . host ĊĠĠĠĠĠĠĠĠĠĠĠ Ġport Ġ= Ġconfig . port ĊĠĠĠĠĠĠĠĠĠĠĠ Ġusername Ġ= Ġ" guest " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpassword Ġ= Ġ" guest " ĊĠĠĠĠĠĠĠ Ġ}. new Connection (). use Ġ{ Ġconnection Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconnection . create Channel (). use Ġ{ Ġchannel Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġresponse Json Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchannel . exchange Declare ( exchange , Ġ" direct ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġqueue Out Ġ= Ġchannel . queue Declare (). queue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchannel . queue Bind ( queue Out , Ġexchange , Ġkey Out ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdeliver Callback Ġ= ĠDel iver Callback Ġ{ Ġconsumer Tag , Ġdelivery Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse Json Ġ= ĠString ( delivery . getBody (), ĠChar sets . UTF _ 8 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Ġ[ x ] ĠReceived Ġby Ġ$ consumer Tag : Ġ'$ response Json '") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchannel . basic Consume ( queue Out , Ġtrue , Ġdeliver Callback , ĠCancel Callback Ġ{ Ġ}) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchannel . basic Publish ( exchange , Ġkey In , Ġnull , Ġmapper . writeValue As Bytes ( post Create )) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith Timeout OrNull ( 2 5 0 L ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( response Json . isBlank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( 1 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" RESPONSE : Ġ$ response Json ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġmapper . readValue ( response Json , ĠCreate Post Response :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= ĠPost Stub . getModel () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( expected . title , Ġresponse . created Post ?. title ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( expected . content , Ġresponse . created Post ?. content ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġpost Create Ġ= Ġwith ( Post Stub . getModel ()) Ġ{ ĊĠĠĠĠĠĠĠ ĠCreate Post Request ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcre atable Post Ġ= ĠCre atable Post ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġtitle , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Ġ= Ġcontent ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdebug Ġ= ĠBase Debug Request ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmode Ġ= ĠBase Debug Request . Mode . ST UB , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstub Case Ġ= ĠBase Debug Request . Stub Case . SUCCESS , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ