package Ġme . these ems . cro dl . util Ċ Ċ import Ġme . these ems . cro dl . entity . Article Ċ import Ġme . these ems . cro dl . entity . Privilege Ċ import Ġme . these ems . cro dl . entity . Role Ċ import Ġme . these ems . cro dl . entity . User Ċ import Ġme . these ems . cro dl . entity . extensions . Users Ċ import Ġme . these ems . cro dl . service . Article Service Ċ import Ġme . these ems . cro dl . service . Privilege Service Ċ import Ġme . these ems . cro dl . service . Role Service Ċ import Ġme . these ems . cro dl . service . UserService Ċ import Ġme . these ems . cro dl . util . C ro dl Api Test Initializer . Companion . random String Ċ import Ġorg . springframework . beans . factory . annotation . Autowired Ċ import Ġorg . springframework . http . HttpMethod Ċ import Ġorg . springframework . http . MediaType Ċ import Ġorg . springframework . security . crypto . password . Password Encoder Ċ import Ġorg . springframework . stereotype . Component Ċ import Ġorg . springframework . test . web . servlet . MockMvc Ċ import Ġorg . springframework . test . web . servlet . Result Actions Ċ import Ġorg . springframework . test . web . servlet . request . MockMvc Request Builders Ċ import Ġorg . springframework . test . web . servlet . result . MockMvc Result Matchers Ċ import Ġorg . springframework . util . Multi Value Map Ċ import Ġorg . test containers . sh aded . com . fasterxml . jackson . databind . ObjectMapper Ċ import Ġjava . util .* Ċ Ċ @ Component Ċ class ĠC ro dl Api Helper ( ĊĠĠĠ Ġ@ Autowired ĊĠĠĠ Ġval ĠuserService : ĠUserService , ĊĠĠĠ Ġ@ Autowired ĊĠĠĠ Ġval Ġarticle Service : ĠArticle Service , ĊĠĠĠ Ġ@ Autowired ĊĠĠĠ Ġval Ġrole Service : ĠRole Service , ĊĠĠĠ Ġ@ Autowired ĊĠĠĠ Ġval Ġprivilege Service : ĠPriv ilege Service , ĊĠĠĠ Ġ@ Autowired ĊĠĠĠ Ġval Ġpassword Encoder : ĠPassword Encoder , ĊĠĠĠ Ġ@ Autowired ĊĠĠĠ Ġprivate Ġval Ġmock Mvc : ĠMock Mvc , Ċ ) Ġ{ ĊĠĠĠ Ġfun Ġperform ( ĊĠĠĠĠĠĠĠ Ġurl : ĠString , ĊĠĠĠĠĠĠĠ Ġcontent : ĠString , ĊĠĠĠĠĠĠĠ Ġauth : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġmethod : ĠHttpMethod Ġ= ĠHttpMethod . POST , ĊĠĠĠĠĠĠĠ Ġparams : ĠMulti Value Map < String , ĠString > Ġ= Ġmulti Value Map Of (), ĊĠĠĠĠĠĠĠ ĠcontentType : ĠMediaType Ġ= ĠMediaType . APPLICATION _ JSON , ĊĠĠĠĠĠĠĠ Ġexpect Result Type : ĠMediaType Ġ= ĠMediaType . APPLICATION _ JSON ĊĠĠĠ Ġ): ĠResult Actions Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġrequest Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMock Mvc Request Builders ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. request ( method , Ġurl ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. content ( content ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. contentType ( contentType ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. params ( params ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( auth Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Ġ= Ġrequest . header (" Authorization ", Ġ" Bearer Ġ$ auth ") ĊĊĠĠĠĠĠĠĠ Ġreturn Ġmock Mvc ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. perform ( request ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. andExpect ( MockMvc Result Matchers . content (). contentType ( expect Result Type )) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġperform Json ( ĊĠĠĠĠĠĠĠ Ġurl : ĠString , ĊĠĠĠĠĠĠĠ Ġcontent : ĠAny , ĊĠĠĠĠĠĠĠ Ġauth : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġmethod : ĠHttpMethod Ġ= ĠHttpMethod . POST , ĊĠĠĠĠĠĠĠ Ġparams : ĠMulti Value Map < String , ĠString > Ġ= Ġmulti Value Map Of (), ĊĠĠĠĠĠĠĠ ĠobjectMapper : ĠObjectMapper Ġ= ĠObjectMapper () ĊĠĠĠ Ġ): ĠResult Actions Ġ= Ġperform ( ĊĠĠĠĠĠĠĠ Ġurl Ġ= Ġurl , ĊĠĠĠĠĠĠĠ Ġcontent Ġ= ĠobjectMapper . writeValue AsString ( content ), ĊĠĠĠĠĠĠĠ Ġauth Ġ= Ġauth , ĊĠĠĠĠĠĠĠ Ġmethod Ġ= Ġmethod , ĊĠĠĠĠĠĠĠ Ġparams Ġ= Ġparams , ĊĠĠĠĠĠĠĠ ĠcontentType Ġ= ĠMediaType . APPLICATION _ JSON , ĊĠĠĠĠĠĠĠ Ġexpect Result Type Ġ= ĠMediaType . APPLICATION _ JSON ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġfun Ġmodel User ( create Action : ĠUser . () Ġ-> ĠUnit Ġ= Ġ{} ): ĠUser Ġ= ĊĠĠĠĠĠĠĠ ĠUsers . default . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġusername Ġ= Ġ" Test # ${ random String ( 1 1 )}" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġemail Ġ= Ġ"${ random String ( 1 7 )} @ test . cro dl . org " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpassword Ġ= Ġrandom String ( 1 5 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Action () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġmodel Article ( create Action : ĠArticle . () Ġ-> ĠUnit Ġ= Ġ{} ): ĠArticle Ġ= ĊĠĠĠĠĠĠĠ ĠArticle ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġ" Article # ${ random String () }", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpre Text Ġ= Ġrandom String (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfull Text Ġ= Ġrandom String (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġauthor Ġ= ĠUsers . default ĊĠĠĠĠĠĠĠ Ġ). apply ( create Action ) ĊĊĠĠĠ Ġfun Ġmake User ( create Action : ĠUser . () Ġ-> ĠUnit Ġ= Ġ{} ): ĠUser Ġ= ĊĠĠĠĠĠĠĠ ĠuserService . save ( model User Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpassword Ġ= Ġpassword Encoder . encode ( password ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Action () ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠ Ġfun Ġmake Role ( create Action : ĠRole . () Ġ-> ĠUnit Ġ= Ġ{} ): ĠRole Ġ= ĊĠĠĠĠĠĠĠ Ġrole Service . save ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRole ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġ" Role # ${ UUID . randomUUID () }", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivileges Ġ= ĠlistOf () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). apply ( create Action ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠ Ġfun Ġget Or Make Role ( ĊĠĠĠĠĠĠĠ Ġname : ĠString Ġ= Ġ" Role # ${ UUID . randomUUID () }", ĊĠĠĠĠĠĠĠ Ġcreate Action : ĠRole . () Ġ-> ĠUnit Ġ= Ġ{} ĊĠĠĠ Ġ): ĠRole Ġ= ĊĠĠĠĠĠĠĠ Ġrole Service . save ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( role Service . find ByName ( name ) Ġ?: ĠRole ( name Ġ= Ġname , Ġprivileges Ġ= ĠlistOf ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply ( create Action ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠ Ġfun Ġmake Article ( create Action : ĠArticle . () Ġ-> ĠUnit Ġ= Ġ{} ): ĠArticle Ġ= ĊĠĠĠĠĠĠĠ Ġarticle Service . save ( model Article ( create Action )) ĊĊĠĠĠ Ġfun Ġmake Privilege ( role : ĠRole , Ġname : ĠString ): ĠPriv ilege Ġ= ĊĠĠĠĠĠĠĠ Ġprivilege Service . find ByName ( name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġprivilege Service . save ( Privilege ( name Ġ= Ġname )) ĊĊĠĠĠ Ġfun Ġmake Privileges ( ĊĠĠĠĠĠĠĠ Ġrole : ĠRole , ĊĠĠĠĠĠĠĠ Ġvar arg Ġnames : ĠString ĊĠĠĠ Ġ): ĠList < Privilege > Ġ= Ġnames . map Ġ{ Ġthis . make Privilege ( role , Ġit ) Ġ} Ċ }