1 package org.oxerr.spring.security.otp.samples.helloworld; 2 3 import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestBuilders.formLogin; 4 import static org.springframework.security.test.web.servlet.response.SecurityMockMvcResultMatchers.authenticated; 5 import static org.springframework.security.test.web.servlet.response.SecurityMockMvcResultMatchers.unauthenticated; 6 import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; 7 import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.redirectedUrlPattern; 8 import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; 9 10 import org.junit.jupiter.api.Test; 11 import org.springframework.beans.factory.annotation.Autowired; 12 import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; 13 import org.springframework.boot.test.context.SpringBootTest; 14 import org.springframework.security.test.context.support.WithMockUser; 15 import org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestBuilders.FormLoginRequestBuilder; 16 import org.springframework.test.web.servlet.MockMvc; 17 18 @SpringBootTest 19 @AutoConfigureMockMvc 20 class ApplicationTests { 21 22 @Autowired 23 private MockMvc mockMvc; 24 25 @Test 26 void loginWithValidUserThenAuthenticated() throws Exception { 27 FormLoginRequestBuilder login = formLogin() 28 .user("user") 29 .password("password"); 30 31 mockMvc.perform(login) 32 .andExpect(authenticated().withUsername("user")); 33 } 34 35 @Test 36 void loginWithInvalidUserThenUnauthenticated() throws Exception { 37 FormLoginRequestBuilder login = formLogin() 38 .user("invalid") 39 .password("invalidpassword"); 40 41 mockMvc.perform(login) 42 .andExpect(unauthenticated()); 43 } 44 45 @Test 46 void accessUnsecuredResourceThenOk() throws Exception { 47 mockMvc.perform(get("/")) 48 .andExpect(status().isOk()); 49 } 50 51 @Test 52 void accessSecuredResourceUnauthenticatedThenRedirectsToLogin() throws Exception { 53 mockMvc.perform(get("/hello")) 54 .andExpect(status().is3xxRedirection()) 55 .andExpect(redirectedUrlPattern("**/login")); 56 } 57 58 @Test 59 @WithMockUser 60 void accessSecuredResourceAuthenticatedThenOk() throws Exception { 61 mockMvc.perform(get("/hello")) 62 .andExpect(status().isOk()); 63 } 64 65 }