// ĠCreated Ġby ĠKon st ant in ĠK h van Ġon Ġ 7 / 9 / 1 8 Ġ 7 : 1 8 ĠPM Ċ Ċ package Ġcom . pw ar ss . api Ċ Ċ import Ġcom . fasterxml . jackson . databind . ObjectMapper Ċ import Ġcom . pw ar ss . model . User Ċ import Ġcom . pw ar ss . testutil . Default Test Properties Source Ċ import Ġcom . pw ar ss . t trs . UserService T tr ss Ċ import Ġcom . pw ar ss . t trs . User With Has hed Password Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Test Ċ import Ġorg . junit . runner . RunWith Ċ import Ġorg . mockito . Argument Matchers . any String Ċ import Ġorg . mockito . Mockito Ċ import Ġorg . mockito . Mockito . never Ċ import Ġorg . mockito . Mockito . times Ċ import Ġorg . springframework . beans . factory . annotation . Autowired Ċ import Ġorg . springframework . boot . test . autoconfigure . web . servlet . Auto Configure MockMvc Ċ import Ġorg . springframework . boot . test . context . SpringBootTest Ċ import Ġorg . springframework . boot . test . mock . mockito . Mock Bean Ċ import Ġorg . springframework . http . MediaType Ċ import Ġorg . springframework . security . test . web . servlet . request . Security MockMvc Request Post Processors Ċ import Ġorg . springframework . security . test . web . servlet . setup . Security MockMvc Configur ers . spring Security Ċ import Ġorg . springframework . test . context . junit 4 . Spring Runner Ċ import Ġorg . springframework . test . web . servlet . MockMvc Ċ import Ġorg . springframework . test . web . servlet . request . MockMvc Request Builders . get Ċ import Ġorg . springframework . test . web . servlet . request . MockMvc Request Builders . post Ċ import Ġorg . springframework . test . web . servlet . result . MockMvc Result Matchers Ċ import Ġorg . springframework . test . web . servlet . setup . Default MockMvc Builder Ċ import Ġorg . springframework . test . web . servlet . setup . MockMvc Builders Ċ import Ġorg . springframework . web . context . Web ApplicationContext ĊĊ Ċ @ RunWith ( Spring Runner :: class ) Ċ @ Default Test Properties Source Ċ @ SpringBootTest ( web Environment Ġ= ĠSpring Boot Test . Web Environment . RANDOM _ PORT ) Ċ @ Auto Configure MockMvc Ċ class ĠAuthentication Controller Test Ġ: ĠMock Mvc Auth Support Ġ{ ĊĠĠĠ Ġ@ Autowired ĊĠĠĠ Ġoverride Ġlateinit Ġvar ĠobjectMapper : ĠObjectMapper ĊĊĠĠĠ Ġ@ Mock Bean ĊĠĠĠ Ġoverride Ġlateinit Ġvar ĠuserService : ĠUserService T tr ss ĊĊĠĠĠ Ġ@ Autowired ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġcontext : ĠWeb ApplicationContext ĊĊĠĠĠ Ġoverride Ġlateinit Ġvar Ġmock Mvc : ĠMock Mvc ĊĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun Ġsetup () Ġ{ ĊĠĠĠĠĠĠĠ Ġmock Mvc Ġ= ĠMock Mvc Builders ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. web AppContext Setup ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply < Default MockMvc Builder >( spring Security ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġlogin Failure Empty () Ġ{ ĊĠĠĠĠĠĠĠ ĠMockito . do Return ( null ). ` when `( userService ). check Password ( Mockito . any String (), ĠMockito . any String ()) ĊĊĠĠĠĠĠĠĠ Ġmock Mvc . perform ( post ("/ api / login ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with ( Security MockMvc Request Post Processors . csrf ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. contentType ( MediaType . APPLICATION _ JSON )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. andExpect ( MockMvc Result Matchers . status (). is Unauthorized ) ĊĊĠĠĠĠĠĠĠ Ġmock Mvc . perform ( post ("/ api / login ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with ( Security MockMvc Request Post Processors . csrf ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. json Content ( map Of (" login " Ġto Ġ"", Ġ" password " Ġto Ġ" "))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. andExpect ( MockMvc Result Matchers . status (). is Unauthorized ) ĊĊĠĠĠĠĠĠĠ ĠMockito . verify ( userService , Ġtimes ( 1 )). check Password ( any String (), Ġany String ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġlogin Success () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġuser Ġ= ĠUser ( 1 , Ġ" login ") ĊĠĠĠĠĠĠĠ Ġval Ġu ah Ġ= ĠUser With Has hed Password ( user , Ġ" hash ") ĊĊĠĠĠĠĠĠĠ Ġval Ġpassword Ġ= Ġ" password " ĊĠĠĠĠĠĠĠ ĠMockito . do Return ( u ah ). ` when `( userService ). check Password ( user . login , Ġpassword ) ĊĊĠĠĠĠĠĠĠ Ġmock Mvc . perform ( post ("/ api / login ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with ( Security MockMvc Request Post Processors . csrf ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. json Content ( map Of (" login " Ġto Ġuser . login , Ġ" password " Ġto Ġpassword ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. andExpect ( MockMvc Result Matchers . status (). is Ok ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. andExpect ( json Matcher ( user )) ĊĊĠĠĠĠĠĠĠ ĠMockito . verify ( userService , Ġtimes ( 1 )). check Password ( any String (), Ġany String ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġlogout () Ġ{ ĊĠĠĠĠĠĠĠ Ġmock Mvc . perform ( post ("/ api / logout ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with ( Security MockMvc Request Post Processors . csrf ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. andExpect ( MockMvc Result Matchers . status (). is Ok ) ĊĊĊĠĠĠĠĠĠĠ ĠMockito . verify ( userService , Ġnever ()). check Password ( any String (), Ġany String ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġuser () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġ( session , Ġuser ) Ġ= Ġdo Login () ĊĊĠĠĠĠĠĠĠ Ġmock Mvc . perform ( get ("/ api / user ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with ( Security MockMvc Request Post Processors . csrf ()). session ( session )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. andExpect ( MockMvc Result Matchers . status (). is Ok ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. andExpect ( json Matcher ( user )) ĊĠĠĠ Ġ} Ċ } Ċ