package Ġno . nav . sy fo . dialog m ote . api . v 2 Ċ Ċ import Ġcom . fasterxml . jackson . databind . ObjectMapper Ċ import Ġcom . fasterxml . jackson . module . kotlin . readValue Ċ import Ġio . ktor . http .* Ċ import Ġio . ktor . http . HttpHeaders . Authorization Ċ import Ġio . ktor . server . testing .* Ċ import Ġio . mock k .* Ċ import Ġno . nav . sy fo . application . mq . MQ Sender Interface Ċ import Ġno . nav . sy fo . dialog m ote . api . domain . Dialog m ote DTO Ċ import Ġno . nav . sy fo . dialog m ote . database . createNew Dialog m ote With References Ċ import Ġno . nav . sy fo . test helper .* Ċ import Ġno . nav . sy fo . test helper . User Constants . AR BE ID ST AK ER _ AD RES SE B ES KY TT ET Ċ import Ġno . nav . sy fo . test helper . User Constants . AR BE ID ST AK ER _ FN R Ċ import Ġno . nav . sy fo . test helper . User Constants . EN H ET _ NR Ċ import Ġno . nav . sy fo . test helper . User Constants . EN H ET _ NR _ NO _ ACCESS Ċ import Ġno . nav . sy fo . test helper . User Constants . VE ILE DER _ IDENT Ċ import Ġno . nav . sy fo . test helper . generator . generate New Dialog m ote Ċ import Ġno . nav . sy fo . test helper . generator . generate New Dialog m ote DTO Ċ import Ġno . nav . sy fo . util . bearer Header Ċ import Ġno . nav . sy fo . bre v . ar be id st aker . br uk er not ifik as jon . B ru ker not ifik as jon Producer Ċ import Ġno . nav . sy fo . dialog m ote . domain . M ote delt aker Var sel Type Ċ import Ġorg . am sh ove . k lu ent . shouldBe EqualTo Ċ import Ġorg . spe k framework . spe k 2 . Spe k Ċ import Ġorg . spe k framework . spe k 2 . style . specification . describe Ċ Ċ class ĠGet Dialog m ote En het Api V 2 Spe k Ġ: ĠSpe k ({ ĊĠĠĠ Ġval ĠobjectMapper : ĠObjectMapper Ġ= Ġapi Consumer ObjectMapper () ĊĊĠĠĠ Ġdescribe ( Get Dialog m ote En het Api V 2 Spe k :: class . java . simple Name ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġwith ( Test Application Engine ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexternal Mock Environment Ġ= ĠExternal Mock Environment () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdatabase Ġ= Ġexternal Mock Environment . database ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbru ker not ifik as jon Producer Ġ= Ġmock k < B ru ker not ifik as jon Producer >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjust Run Ġ{ Ġbru ker not ifik as jon Producer . send Opp g ave ( any (), Ġany ()) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġm q Sender Mock Ġ= Ġmock k < MQ Sender Interface >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjust Run Ġ{ Ġm q Sender Mock . send MQ Message ( any (), Ġany ()) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġapplication . test Api Module ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexternal Mock Environment Ġ= Ġexternal Mock Environment , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbru ker not ifik as jon Producer Ġ= Ġbru ker not ifik as jon Producer , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm q Sender Mock Ġ= Ġm q Sender Mock , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠafterEach Test Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdatabase . drop Data () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbefore Group Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexternal Mock Environment . start External Mocks () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġafter Group Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexternal Mock Environment . stop External Mocks () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġdescribe (" Get ĠDialog mot er Ġfor ĠEn het Nr ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġurl En het Access Ġ= Ġ"$ dialog m ote Api V 2 Base path $ dialog m ote Api En het Url Path /${ EN H ET _ NR . value }" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġurl En het No Access Ġ= Ġ"$ dialog m ote Api V 2 Base path $ dialog m ote Api En het Url Path /${ EN H ET _ NR _ NO _ ACCESS . value }" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalid Token V 2 Ġ= Ġgenerate JWT ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexternal Mock Environment . environment . aad App Client , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexternal Mock Environment . well Known Ve ile der V 2 . issuer , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠV E ILE DER _ IDENT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescribe (" Happy Ġpath ") Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Dialog m ote DTO Ġ= Ġgenerate New Dialog m ote DTO ( AR BE ID ST AK ER _ FN R ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġurl M ote Ġ= Ġ"$ dialog m ote Api V 2 Base path /$ dialog m ote Api Person Ident Url Path " ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit (" should Ġreturn ĠDialog m ote List Ġif Ġrequest Ġis Ġsuccessful ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Request ( HttpMethod . Post , Ġurl M ote ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Header ( Authorization , Ġbe arer Header ( valid Token V 2 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Header ( HttpHeaders . ContentType , ĠContentType . Application . Json . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Body ( object Mapper . writeValue AsString ( new Dialog m ote DTO )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . status () ĠshouldBe EqualTo ĠHttpStatusCode . OK ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ Ġm q Sender Mock . send MQ Message ( M ote delt aker Var sel Type . IN NK ALT , Ġany ()) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclear Mocks ( mq Sender Mock ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Dialog m ote Ad resse bes ky tt et Ġ= Ġgenerate New Dialog m ote ( AR BE ID ST AK ER _ AD RES SE B ES KY TT ET ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdatabase . connection . use Ġ{ Ġconnection Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconnection . createNew Dialog m ote With References ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Dialog m ote Ġ= Ġnew Dialog m ote Ad resse bes ky tt et ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Request ( HttpMethod . Get , Ġurl En het Access ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Header ( Authorization , Ġbe arer Header ( valid Token V 2 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . status () ĠshouldBe EqualTo ĠHttpStatusCode . OK ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 0 ) Ġ{ Ġm q Sender Mock . send MQ Message ( any (), Ġany ()) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdialog m ote List Ġ= ĠobjectMapper . readValue < List < Dialog m ote DTO >>( response . content !! ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog m ote List . size ĠshouldBe EqualTo Ġ 1 ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdialog m ote DTO Ġ= Ġdialog m ote List . first () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog m ote DTO . tilde lt En het ĠshouldBe EqualTo Ġnew Dialog m ote DTO . tilde lt En het ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog m ote DTO . ar be id st aker . person Ident ĠshouldBe EqualTo Ġnew Dialog m ote DTO . ar be id st aker . person Ident ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog m ote DTO . ar be id sg iver . vir ks om hets nummer ĠshouldBe EqualTo Ġnew Dialog m ote DTO . ar be id sg iver . vir ks om hets nummer ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog m ote DTO . st ed ĠshouldBe EqualTo Ġnew Dialog m ote DTO . tid St ed . st ed ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescribe (" Un happy Ġpaths ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit (" should Ġreturn Ġstatus ĠUnauthorized Ġif Ġno Ġtoken Ġis Ġsupplied ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Request ( HttpMethod . Get , Ġurl En het Access ) Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . status () ĠshouldBe EqualTo ĠHttpStatusCode . Unauthorized ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 0 ) Ġ{ Ġm q Sender Mock . send MQ Message ( any (), Ġany ()) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit (" should Ġreturn Ġstatus ĠFor bidden Ġif Ġdenied Ġaccess Ġto ĠEn het ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Request ( HttpMethod . Get , Ġurl En het No Access ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Header ( Authorization , Ġbe arer Header ( valid Token V 2 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . status () ĠshouldBe EqualTo ĠHttpStatusCode . Forbidden ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 0 ) Ġ{ Ġm q Sender Mock . send MQ Message ( any (), Ġany ()) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }) Ċ