Spring Security in JUnit Test
21-02-2016
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:/applicationContext.xml",
"classpath:/mvc-dispatcher-servlet.xml",
"classpath:/spring-security.xml"})
@WebAppConfiguration
public class UserControllerTest {
@Autowired
private UserService userService;
@Autowired
WebApplicationContext wac;
private MockMvc mockMvc;
@Before
public void setup() {
MockitoAnnotations.initMocks(this);
this.mockMvc = MockMvcBuilders.webAppContextSetup(wac).apply(springSecurity()).build();
}
@Test
@WithMockUser(username = "myuce")
public void saveBelge() throws Exception {
Belge belge = new GumrukServiceUtilTest().createBelge();
mockMvc.perform(post("/kullanici/belge/kaydet")
.flashAttr("belge", belge))
.andExpect(status().isOk());
}
@Test
public void register() throws Exception {
User user = createUser();
saveUser(user);
assertEquals(user.getUsername(), getUserFromDB(user.getUsername()).getUsername());
}
private User createUser() {
User user = new User();
user.setUsername(RandomStringUtils.random(4, true, false));
user.setTitle(RandomStringUtils.random(20, true, false));
user.setName(RandomStringUtils.random(5, true, false));
user.setSurname(RandomStringUtils.random(5, true, false));
user.setPassword(RandomStringUtils.random(8, false, true));
user.setTelephone(RandomStringUtils.random(10, false, true));
user.setEmail(RandomStringUtils.random(4, true, false) + "@telifhaklari.gov.tr");
user.setAddress(RandomStringUtils.random(50, true, true));
return user;
}
private void saveUser(User user) throws Exception {
mockMvc.perform(post("/kayit")
.param("captcha", "10")
.with(csrf())
.sessionAttrs(getCaptcha())
.flashAttr("user", user))
.andExpect(status().isOk());
}
private Map<String, Object> getCaptcha() {
Map<String, Object> sessionAttrs = new HashMap<String, Object>();
sessionAttrs.put("rand1", "5");
sessionAttrs.put("rand2", "5");
return sessionAttrs;
}
private User getUserFromDB(String username) {
return userService.getUser(username);
}
@Test
public void saveAdmin() throws Exception {
User user = createUser();
UserRole userRole=new UserRole();
userRole.setUserRoleId(1);
user.setUserRoleList(Arrays.asList(userRole));
saveAdmin(user);
assertEquals(user.getUsername(), getUserFromDB(user.getUsername()).getUsername());
}
private void saveAdmin(User user) throws Exception {
mockMvc.perform(post("/yonetim/home/yonetici/ekle/kaydet")
.with(csrf())
.session((MockHttpSession) getHttpSession("SaFv", "14093171"))
.flashAttr("user", user))
.andExpect(status().isOk());
}
@Test
public void passwordRemind() throws Exception {
User user = createUser();
saveUser(user);
mockMvc.perform(post("/sifre-hatirlatma")
.param("username", user.getUsername())
.param("email", user.getEmail())
.param("captcha", "10")
.with(csrf())
.sessionAttrs(getCaptcha()))
.andExpect(status().isOk());
}
@Test
public void updateUserInfo() throws Exception {
User user = createUser();
saveUser(user);
String username = user.getUsername();
String password = user.getPassword();
User replacedUserInfo = createUser();
user.setName(replacedUserInfo.getName());
user.setPassword(replacedUserInfo.getPassword());
user.setTelephone(replacedUserInfo.getTelephone());
user.setEmail(replacedUserInfo.getEmail());
mockMvc.perform(post("/kullanici/bilgilerim/kaydet")
.flashAttr("user", user)
.session((MockHttpSession) getHttpSession(username, password))
.with(csrf()))
.andExpect(status().isOk());
}
@Test
public void bilgilerim() throws Exception {
User user = createUser();
saveUser(user);
mockMvc.perform(get("/kullanici/bilgilerim")
.session((MockHttpSession) getHttpSession(user.getUsername(),
user.getPassword())))
.andExpect(status().isOk());
}
private HttpSession getHttpSession(String username, String password) throws Exception {
return mockMvc.perform(post("/login")
.param("username", username)
.param("password", password)
.param("captcha", "10")
.with(csrf())
.sessionAttrs(getCaptcha()))
.andDo(print())
.andExpect(status().is(HttpStatus.FOUND.value()))
.andReturn()
.getRequest()
.getSession();
}
@Test
public void changePassword() throws Exception {
User user = createUser();
saveUser(user);
String newPassword = createUser().getPassword();
mockMvc.perform(post("/kullanici/sifre-degistirme")
.param("oldPassword", user.getPassword())
.param("newPassword", newPassword)
.param("retypedNewPassword", newPassword)
.session((MockHttpSession) getHttpSession(user.getUsername(), user.getPassword()))
.with(csrf()))
.andDo(print())
.andExpect(status().isOk());
}
}