/* vim: set ts=2 et sw=2 cindent fo=qroca: */
package com.globant.katari.user.application;
import java.util.List;
import org.junit.Test;
import org.junit.Before;
import static org.junit.Assert.assertThat;
import static org.hamcrest.CoreMatchers.*;
import static com.globant.katari.user.OrderedUsers.*;
import static com.globant.katari.user.NamesContain.*;
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;
import com.globant.katari.user.domain.filter.ContainsFilter;
import com.globant.katari.user.domain.filter.Paging;
import com.globant.katari.user.domain.filter.Sorting;
/* 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 UserFilterCommandTest {
/* The command to be tested.
*/
private UserFilterCommand userFilterCommnad;
/* The user repository.
*/
private UserRepository userRepository;
/* This is a set up method of this TestCase.
*/
@Before
public final void setUp() {
userRepository = (UserRepository) SpringTestUtils.getBean(
"user.userRepository");
addUsers();
userFilterCommnad = new UserFilterCommand(userRepository);
}
/* Adds a pair of users to be used in the tests.
*/
private void addUsers() {
SpringTestUtils.beginTransaction();
// Removes the unneeded users.
while (userRepository.getUsers(new UserFilter()).size() != 0) {
for (User user : userRepository.getUsers(new UserFilter())) {
userRepository.remove(user);
}
}
// Add users.
User user = new User("admin", "admin@none");
user.changePassword("admin");
userRepository.save(user);
user = new User("nico", "nico@none");
user.changePassword("pass");
userRepository.save(user);
user = new User("nicanor", "nicanor@none");
user.changePassword("pass");
userRepository.save(user);
user = new User("juan", "juan@none");
user.changePassword("pass");
userRepository.save(user);
user = new User("ramon", "ramon@none");
user.changePassword("pass");
userRepository.save(user);
SpringTestUtils.endTransaction();
}
/* Test Execute.
*/
@Test
public final void testExecute() {
List<User> users = userFilterCommnad.execute();
assertThat(users, notNullValue());
assertThat(users.size(), is(5));
}
/* Test Execute Sorting.
*/
@Test
public final void testExecute_Sorting() {
// Verify the ascending order.
Sorting sorting = new Sorting();
sorting.setAscendingOrder(true);
sorting.setColumnName("name");
userFilterCommnad.setSorting(sorting);
List<User> users = userFilterCommnad.execute();
assertThat(users, notNullValue());
assertThat(users.size(), is(5));
assertThat(users, inAscendingOrder());
// Verify the descending order.
sorting.setAscendingOrder(false);
userFilterCommnad.setSorting(sorting);
users = userFilterCommnad.execute();
assertThat(users, notNullValue());
assertThat(users.size(), is(5));
assertThat(users, inDescendingOrder());
}
/* Test Execute Contains.
*/
@Test
public final void testExecute_Contains() {
ContainsFilter containsFilter = new ContainsFilter();
containsFilter.setColumnName("name");
String value = "nic";
containsFilter.setValue(value);
userFilterCommnad.setContainsFilter(containsFilter);
List<User> users = userFilterCommnad.execute();
assertThat(users, notNullValue());
assertThat(users.size(), is(2));
assertThat(users, namesContain(value));
assertThat(users, notNullValue());
assertThat(users.size(), is(2));
assertThat(users, inDescendingOrder());
}
/* Test Execute Paging.
*/
@Test
public final void testExecute_Paging() {
// First Page.
Paging paging = new Paging();
paging.setPageNumber(0);
paging.setPageSize(4);
userFilterCommnad.setPaging(paging);
List<User> users = userFilterCommnad.execute();
assertThat(users, notNullValue());
assertThat(users.size(), is(4));
// Second Page.
paging.setPageNumber(1);
paging.setPageSize(4);
userFilterCommnad.setPaging(paging);
users = userFilterCommnad.execute();
assertThat(users, notNullValue());
assertThat(users.size(), is(1));
// Sets the default pagination.
userFilterCommnad.setPaging(new Paging());
}
}