/* vim: set ts=2 et sw=2 cindent fo=qroca: */
package com.globant.katari.user.application;
import org.junit.Test;
import org.junit.Before;
import static org.junit.Assert.*;
import static org.hamcrest.CoreMatchers.*;
import com.globant.katari.user.SecurityTestUtils;
import com.globant.katari.user.SpringTestUtils;
import com.globant.katari.user.domain.User;
import com.globant.katari.user.domain.UserFilter;
import com.globant.katari.user.domain.UserRepository;
/* This class represents a TestCase of the user filter command. In this class
* we will test all the features of the user filter command.
*/
public class DeleteUserCommandTest {
private DeleteUserCommand deleteUserCommand;
private UserRepository userRepository;
private String userName = "UserTest";
/* Deletes all users except admin and fakes the login user as admin.
*/
@Before
public final void setUp() {
SpringTestUtils.beginTransaction();
userRepository = (UserRepository) SpringTestUtils.getBean(
"user.userRepository");
deleteUserCommand = (DeleteUserCommand) SpringTestUtils.getServletBean(
"deleteUserCommand");
cleanUserRepository();
SecurityTestUtils.setContextUser(userRepository.findUserByName("admin"));
}
/* Removes the unneded users.
*/
private void cleanUserRepository() {
while (userRepository.getUsers(new UserFilter()).size() != 0) {
for (User user : userRepository.getUsers(new UserFilter())) {
userRepository.remove(user);
}
}
// Add a user.
User user = new User("admin", "admin@none");
user.changePassword("admin");
userRepository.save(user);
user = new User(userName, "mail@none");
user.changePassword("pass");
userRepository.save(user);
}
@Test
public final void testExecute_pass() {
User user = userRepository.findUserByName(userName);
deleteUserCommand.setUserId(user.getId());
assertThat(userRepository.findUserByName(userName), notNullValue());
deleteUserCommand.execute();
assertThat(userRepository.findUserByName(userName), nullValue());
}
@Test(expected = RuntimeException.class)
public final void testExecute_failDeleteMyself() {
SecurityTestUtils.setContextUser(userRepository.findUserByName(userName));
User user = userRepository.findUserByName(userName);
deleteUserCommand.setUserId(user.getId());
assertNotNull(userRepository.findUserByName(userName));
deleteUserCommand.execute();
fail();
}
}