/* vim: set ts=2 et sw=2 cindent fo=qroca: */
package com.globant.katari.user.view;
import java.util.Map;
import org.junit.Test;
import org.junit.Before;
import static org.junit.Assert.assertThat;
import static org.hamcrest.CoreMatchers.*;
import org.springframework.mock.web.MockHttpServletRequest;
import org.springframework.mock.web.MockHttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import com.globant.katari.hibernate.coreuser.domain.Role;
import com.globant.katari.hibernate.coreuser.domain.RoleRepository;
import com.globant.katari.user.SpringTestUtils;
import com.globant.katari.user.SecurityTestUtils;
import com.globant.katari.user.application.SaveUserCommand;
import com.globant.katari.user.domain.User;
import com.globant.katari.user.domain.UserFilter;
import com.globant.katari.user.domain.UserRepository;
/* Tests for the UserController class.
*/
public class UserControllerTest {
/* The controller to test.
*
* This is initialized in setUp.
*/
private UserController editUserController;
/* The user Id.
*/
private String userId;
/* The user repository, obtained from spring.
*/
private UserRepository userRepository;
/** The role repository.
*/
private RoleRepository roleRepository;
/* This is a set up method of this TestCase. It creates a new user named
* UserTest. If a user with that name exists, it deletes it.
*/
@Before
public final void setUp() {
SpringTestUtils.beginTransaction();
editUserController = (UserController) SpringTestUtils
.getServletBean("/userEdit.do");
userRepository = (UserRepository) SpringTestUtils.getBean(
"user.userRepository");
roleRepository = (RoleRepository) SpringTestUtils.getBean(
"coreuser.roleRepository");
for (Role role : roleRepository.getRoles()) {
roleRepository.remove(role);
}
roleRepository.save(new Role("ADMINISTRATOR"));
for (User user : userRepository.getUsers(new UserFilter())) {
userRepository.remove(user);
}
// Add a user.
User user = new User("admin", "admin@none");
user.changePassword("admin");
user.addRole(roleRepository.findRoleByName("ADMINISTRATOR"));
userRepository.save(user);
// A user with full privileges.
user = userRepository.findUserByName("admin");
SecurityTestUtils.setContextUser(user);
// Add a user.
user = new User("UserTest", "mail@none");
user.changePassword("pass");
userRepository.save(user);
userId = String.valueOf(userRepository.findUserByName("UserTest").getId());
}
/* Simulates a GET request and tests the result.
*/
@Test
public final void testGet() throws Exception {
MockHttpServletRequest request = new MockHttpServletRequest();
request.setMethod("GET");
request.addParameter("userId", userId);
MockHttpServletResponse response = new MockHttpServletResponse();
ModelAndView modelAndView;
modelAndView = editUserController.handleRequest(request, response);
Map<?, ?> model = modelAndView.getModel();
SaveUserCommand command = (SaveUserCommand) model.get("command");
assertThat(command, notNullValue());
assertThat(command.getProfile().getName(), is("UserTest"));
assertThat(command.getProfile().getEmail(), is("mail@none"));
}
/* Simulates a POST request and tests the result.
*/
@Test
public final void testPost() throws Exception {
MockHttpServletRequest request = new MockHttpServletRequest();
request.setMethod("POST");
request.addParameter("userId", userId);
request.addParameter("profile.name", "UserTest");
request.addParameter("profile.email", "new@none");
MockHttpServletResponse response = new MockHttpServletResponse();
ModelAndView modelAndView;
modelAndView = editUserController.handleRequest(request, response);
Map<?, ?> model = modelAndView.getModel();
SaveUserCommand command = (SaveUserCommand) model.get("command");
assertThat(command, notNullValue());
assertThat(command.getProfile().getName(), is("UserTest"));
assertThat(command.getProfile().getEmail(), is("new@none"));
}
}