package Ġcom . github . nj uro . j ard . ban Ċ Ċ import Ġcom . github . nj uro . j ard .* Ċ import Ġcom . github . nj uro . j ard . ban . dto . Ban Dto Ċ import Ġcom . github . nj uro . j ard . ban . dto . Ban Form Ċ import Ġcom . github . nj uro . j ard . common . Input Constraints . MAX _ BAN _ REASON _ LENGTH Ċ import Ġcom . github . nj uro . j ard . common . Mappings Ċ import Ġcom . github . nj uro . j ard . user . User Authority Ċ import Ġcom . nin jas quad . spring mock k . Mock k Bean Ċ import Ġio . kot est . matchers . collections . should Have Size Ċ import Ġio . kot est . matchers . null s . should Not BeNull Ċ import Ġio . mock k . every Ċ import Ġorg . junit . jupiter . api . BeforeEach Ċ import Ġorg . junit . jupiter . api . DisplayName Ċ import Ġorg . junit . jupiter . api . Nested Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġorg . springframework . test . web . servlet . get Ċ import Ġorg . springframework . test . web . servlet . post Ċ import Ġorg . springframework . test . web . servlet . put Ċ import Ġorg . springframework . transaction . annotation . Transactional Ċ import Ġjava . time . Offset DateTime Ċ import Ġjava . util .* Ċ Ċ @ With Container Database Ċ @ Transactional Ċ internal Ġclass ĠB an Controller Test Ġ: ĠMock Mvc Test () Ġ{ ĊĊĠĠĠ Ġ@ Mock k Bean ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġban Facade : ĠB an Facade ĊĊĠĠĠ Ġ@ Nested ĊĠĠĠ Ġ@ DisplayName (" create Ġban ") ĊĠĠĠ Ġ@ With Mock J ard User ( User Authority . MANAGE _ BAN S , ĠUser Authority . VIEW _ IP ) ĊĠĠĠ Ġinner Ġclass ĠCreate Ban Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġcreate Ban ( ban Form : ĠB an Form ) Ġ= Ġmock Mvc . post ( Mappings . API _ ROOT _ BAN S ) Ġ{ Ġbody ( ban Form ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` create Ġvalid Ġban `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġban Ġ= Ġban () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġban Facade . create Ban ( ban . to Form ()) Ġ} Ġreturns Ġban . to Dto () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Ban ( ban . to Form ()). andExpect Ġ{ Ġstatus Ġ{ Ġis Created () Ġ} Ġ}. andReturn Converted < Ban Dto >(). should Not BeNull () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` don 't Ġcreate Ġban Ġwith Ġinvalid Ġip `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Ban ( ban ( ip Ġ= Ġ" 1 2 3 . 4 5 6 "). to Form ()). andExpect ValidationError (" ip ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` don 't Ġcreate Ġban Ġwith Ġinvalid Ġreason `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Ban ( ban ( reason Ġ= Ġrandom String ( MAX _ BAN _ REASON _ LENGTH Ġ+ Ġ 1 )). to Form ()). andExpect ValidationError (" reason ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` don 't Ġcreate Ġban Ġwith Ġexpiration Ġdate Ġin Ġthe Ġpast `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Ban ( ban ( valid To Ġ= ĠOffset DateTime . now (). minus Days ( 1 )). to Form ()). andExpect ValidationError (" valid To ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` get Ġown Ġban `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġban Ġ= Ġban ( ip Ġ= Ġ" 1 2 7 . 0 . 0 . 1 ") ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġban Facade . getActive Ban ( ban . ip ) Ġ} Ġreturns Ġban . to Dto () ĊĊĠĠĠĠĠĠĠ Ġmock Mvc . get ("${ Mappings . API _ ROOT _ BAN S }/ me ") Ġ{ ĠsetUp (); Ġwith Ġ{ Ġit . apply Ġ{ Ġremote Addr Ġ= Ġban . ip Ġ} Ġ} Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. andExpect Ġ{ Ġstatus Ġ{ Ġis Ok () Ġ} Ġ}. andReturn Converted < Ban Dto >(). should Not BeNull () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ With Mock J ard User ( User Authority . MANAGE _ BAN S , ĠUser Authority . VIEW _ IP ) ĊĠĠĠ Ġfun Ġ` get Ġall Ġb ans `() Ġ{ ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġban Facade . all B ans Ġ} Ġreturns ĠlistOf ( ban (). to Dto (), Ġban (). to Dto (), Ġban (). to Dto ()) ĊĊĠĠĠĠĠĠĠ Ġmock Mvc . get ( Mappings . API _ ROOT _ BAN S ) Ġ{ ĠsetUp () Ġ}. andExpect Ġ{ Ġstatus Ġ{ Ġis Ok () Ġ} Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. andReturn Converted < List < Ban Dto >>() Ġshould Have Size Ġ 3 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Nested ĊĠĠĠ Ġ@ DisplayName (" edit Ġban ") ĊĠĠĠ Ġ@ With Mock J ard User ( User Authority . MANAGE _ BAN S , ĠUser Authority . VIEW _ IP ) ĊĠĠĠ Ġinner Ġclass ĠEdit Ban Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġedit Ban ( edit Form : ĠB an Form ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmock Mvc . put ("${ Mappings . API _ ROOT _ BAN S }/${ UUID . randomUUID () }") Ġ{ Ġbody ( edit Form ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ BeforeEach ĊĠĠĠĠĠĠĠ Ġfun ĠsetUp () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġban Facade . resolve Ban ( of Type ( UUID :: class )) Ġ} Ġreturns Ġban (). to Dto () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` edit Ġvalid Ġban `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġban Ġ= Ġban () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġban Facade . edit Ban ( of Type ( Ban Dto :: class ), Ġof Type ( Ban Form :: class )) Ġ} Ġreturns Ġban . to Dto () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġedit Ban ( ban . to Form ()). andExpect Ġ{ Ġstatus Ġ{ Ġis Ok () Ġ} Ġ}. andReturn Converted < Ban Dto >(). should Not BeNull () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` don 't Ġedit Ġnon - existing Ġban `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġban Facade . resolve Ban ( of Type ( UUID :: class )) Ġ} Ġthrows ĠB an NotFoundException () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġedit Ban ( ban (). to Form ()). andExpect Ġ{ Ġstatus Ġ{ Ġis NotFound () Ġ} Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` don 't Ġedit Ġinvalid Ġban `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġedit Ban ( ban (). to Form (). apply Ġ{ Ġip Ġ= Ġnull Ġ}). andExpect Ġ{ Ġstatus Ġ{ Ġis BadRequest () Ġ} Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Nested ĊĠĠĠ Ġ@ DisplayName (" un ban ") ĊĠĠĠ Ġ@ With Mock J ard User ( User Authority . MANAGE _ BAN S , ĠUser Authority . VIEW _ IP ) ĊĠĠĠ Ġinner Ġclass ĠU nb an Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġun ban ( un ban Form : ĠU nb an Form ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmock Mvc . put ("${ Mappings . API _ ROOT _ BAN S }/${ UUID . randomUUID () }/ un ban ") Ġ{ Ġbody ( un ban Form ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ BeforeEach ĊĠĠĠĠĠĠĠ Ġfun ĠsetUp () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġban Facade . resolve Ban ( of Type ( UUID :: class )) Ġ} Ġreturns Ġban (). to Dto () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` valid Ġun ban `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġban Ġ= Ġban () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġban Facade . un ban ( of Type ( Ban Dto :: class ), Ġof Type ( Un ban Form :: class )) Ġ} Ġreturns Ġban . to Dto () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġun ban ( ban . to Un ban Form ()). andExpect Ġ{ Ġstatus Ġ{ Ġis Ok () Ġ} Ġ}. andReturn Converted < Ban Dto >(). should Not BeNull () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` non - existing Ġban `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġban Facade . resolve Ban ( of Type ( UUID :: class )) Ġ} Ġthrows ĠB an NotFoundException () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġun ban ( ban (). to Un ban Form ()). andExpect Ġ{ Ġstatus Ġ{ Ġis NotFound () Ġ} Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` un ban Ġwith Ġinvalid Ġip `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġun ban ( ban ( ip Ġ= Ġ" 1 2 3 . 4 5 6 "). to Un ban Form ()). andExpect ValidationError (" ip ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` un ban Ġwith Ġinvalid Ġreason `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġun ban ( ban (). to Un ban Form ( un ban Reason Ġ= Ġrandom String ( MAX _ BAN _ REASON _ LENGTH Ġ+ Ġ 1 ))). andExpect ValidationError (" reason ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ