/* vim: set ts=2 et sw=2 cindent fo=qroca: */
package com.globant.katari.user.domain;
import java.util.List;
import org.junit.Before;
import org.junit.Test;
import org.junit.After;
import static org.junit.Assert.assertThat;
import static org.junit.matchers.JUnitMatchers.*;
import static org.hamcrest.CoreMatchers.*;
import static com.globant.katari.user.OrderedUsers.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
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.domain.filter.ContainsFilter;
import com.globant.katari.user.domain.filter.Paging;
import com.globant.katari.user.domain.filter.Sorting;
public class UserRepositoryTest {
/** The class logger.
*/
private static Logger log = LoggerFactory.getLogger(UserRepositoryTest.class);
/** This is the implementation of the repository of the user.
*/
private UserRepository userRepository;
/** This is the implementation of the repository of the role.
*/
private RoleRepository roleRepository;
/** This is a set up method of this TestCase.
*/
@Before
public final void setUp() {
userRepository = (UserRepository) SpringTestUtils.getBean(
"user.userRepository");
roleRepository = (RoleRepository) SpringTestUtils.getBean(
"coreuser.roleRepository");
SpringTestUtils.beginTransaction();
addUsersAndRoles();
SpringTestUtils.endTransaction();
SpringTestUtils.beginTransaction();
}
@After
public final void tearDown() {
SpringTestUtils.endTransaction();
}
/** Adds a pair of users to be used in the tests.
*/
private void addUsersAndRoles() {
log.trace("Entering addUsersAndRoles");
// Removes the unneeded users.
for (User user : userRepository.getUsers(new UserFilter())) {
log.debug("Found user " + user.getName());
userRepository.remove(user);
}
// Removes the unneeded roles.
for (Role role : roleRepository.getRoles()) {
log.debug("Found role " + role.getName());
roleRepository.remove(role);
}
Role sampleRole = new Role("test-1");
roleRepository.save(sampleRole);
sampleRole = new Role("ADMINISTRATOR");
roleRepository.save(sampleRole);
// Add users.
User user = new User("admin", "admin@none");
user.changePassword("admin");
user.addRole(sampleRole);
user.addRole(roleRepository.findRoleByName("ADMINISTRATOR"));
userRepository.save(user);
user = new User("nico", "mail@none");
user.changePassword("pass");
user.addRole(sampleRole);
user.addRole(roleRepository.findRoleByName("ADMINISTRATOR"));
userRepository.save(user);
user = new User("nicanor", "nicanor@none");
user.changePassword("pass");
user.addRole(sampleRole);
user.addRole(roleRepository.findRoleByName("ADMINISTRATOR"));
userRepository.save(user);
log.trace("Leaving addUsersAndRoles");
}
/* Searches a user by an existing email and also search by a non-existing
* email.
*/
public final void testFindByEmail() {
assertThat(userRepository.findUserByEmail("admin-2@none"), notNullValue());
assertThat(userRepository.findUserByEmail("XXX"), nullValue());
}
/* Searches a user by an existing name and also search by a non-existing
* name.
*/
public final void testFindByName() {
assertThat(userRepository.findUserByName("admin-2"), notNullValue());
assertThat(userRepository.findUserByName("XXX"), nullValue());
}
/* Gets a user, modifies its name, saves it and gets it back.
*/
public final void testModify() {
User user = userRepository.findUserByName("admin-2");
user.modify(user.getName(), "modified email");
userRepository.save(user);
user = userRepository.findUserByEmail("modified email");
assertThat(user, notNullValue());
}
/* Gets a user, removes it and verifies that it no longer exists.
*/
public final void testRemove() {
User user = userRepository.findUserByName("admin-2");
userRepository.remove(user);
assertThat(userRepository.getUsers(new UserFilter()).size(), is(1));
}
/* Finds a user and checks the name and email
*/
public final void testFindUser() {
User user1 = (User) userRepository.findUserByName("admin-2");
User user2 = (User) userRepository.findUser(user1.getId());
assertThat(user2.getName(), is("admin-2"));
assertThat(user2.getEmail(), is("admin-2@none"));
}
/** Test getUsers using sorting filter.
*/
@Test
public final void testGetUsers_Ordering() {
UserFilter userFilter = new UserFilter();
Sorting sorting = new Sorting();
sorting.setAscendingOrder(true);
sorting.setColumnName("name");
userFilter.setSorting(sorting);
List<User> userList = userRepository.getUsers(userFilter);
// Verify ascending order.
assertThat(userList, notNullValue());
assertThat(userList.size(), is(3));
assertThat(userList, inAscendingOrder());
// Set the descending order.
sorting.setAscendingOrder(false);
userFilter.setSorting(sorting);
userList = userRepository.getUsers(userFilter);
// Verify descending order.
assertThat(userList, notNullValue());
assertThat(userList.size(), is(3));
assertThat(userList, inDescendingOrder());
}
/** Test getUsers using paging filter.
*/
@Test
public final void testGetUsers_Paging() {
UserFilter userFilter = new UserFilter();
Paging paging = new Paging();
paging.setPageNumber(1);
paging.setPageSize(2);
userFilter.setPaging(paging);
List<User> userList = userRepository.getUsers(userFilter);
// Verify the results.
assertThat(userList, notNullValue());
assertThat(userList.size(), is(1));
// Setting another page number.
paging.setPageNumber(0);
userFilter.setPaging(paging);
userList = userRepository.getUsers(userFilter);
// Verify the results
assertThat(userList, notNullValue());
assertThat(userList.size(), is(2));
}
/** Test the contains value filter.
*/
@Test
public final void testGetUsers_ContainsValue() {
UserFilter userFilter = new UserFilter();
ContainsFilter containsFilter = new ContainsFilter();
containsFilter.setColumnName("name");
containsFilter.setValue("nic");
userFilter.setContainsFilter(containsFilter);
List<User> userList = userRepository.getUsers(userFilter);
//Verify the results.
for (Object object : userList) {
User user = (User) object;
assertThat(user.getName(), containsString("nic"));
}
}
/** Test the contains value filter, when the search does not match any
* result.
*/
@Test
public final void testGetUsers_ContainsValueNoRecords() {
UserFilter userFilter = new UserFilter();
ContainsFilter containsFilter = new ContainsFilter();
containsFilter.setColumnName("name");
containsFilter.setValue("nicXXXXXXXXXX");
userFilter.setContainsFilter(containsFilter);
List<User> userList = userRepository.getUsers(userFilter);
assertThat(userList.size(), is(0));
}
/* Saves a Role
*/
public final void testSaveRole() {
Role role = new Role("MyRole");
assertThat(role.getId(), is(0L));
roleRepository.save(role);
assertThat(role.getId(), is(not(0L)));
}
/* Removes a Role
*/
@Test
public final void testRemoveRole() {
Role role = new Role("MyRole");
roleRepository.remove(role);
}
/* Test the findRole method.
*/
@Test
public final void testfindRole() {
Role role = roleRepository.findRoleByName("ADMINISTRATOR");
assertThat(role.getName(), is("ADMINISTRATOR"));
role = roleRepository.findRole(role.getId());
assertThat(role.getName(), is("ADMINISTRATOR"));
}
}