package egovframework.rte.psl.data.jpa;
import static org.junit.Assert.assertEquals;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import egovframework.rte.psl.data.jpa.domain.Employee;
import egovframework.rte.psl.data.jpa.repository.EmployeeRepository;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
import org.springframework.data.domain.Sort.Order;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.transaction.annotation.Transactional;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath*:META-INF/spring/context-*.xml")
@Transactional
public class PagingAndSortingTest {
private static final Logger LOGGER = LoggerFactory.getLogger(PagingAndSortingTest.class);
@Autowired
EmployeeRepository repository;
private static final String[] NAME = {"Alice", "Bob", "Charles", "Dennis", "Emily", "Frank ", "George", "Henry"};
@Before
public void setUp() {
// no-op
}
@Test
public void testSelectList() {
Employee[] employees = getEmployeeList();
for (int i = 0; i < employees.length; i++) {
employees[i] = repository.save(employees[i]);
}
int size = 3;
Page<Employee> list = null;
Sort sort = new Sort(new Order(Sort.Direction.ASC, "employeeName"));
int totalIndex = 0;
for (int i = 0; i < (NAME.length + (size - 1)) / size ; i++) { // 올림 처리
list = repository.findAll(new PageRequest(i, size, sort));
LOGGER.debug("Number of current page's element : {}", list.getNumberOfElements());
for (Employee employee : list) {
LOGGER.debug("Selected employee name : {}", employee.getEmployeeName());
assertEquals(NAME[totalIndex++], employee.getEmployeeName());
}
assertEquals((i == NAME.length / size ? NAME.length % size : size), list.getNumberOfElements());
}
}
private Employee[] getEmployeeList() {
List<Employee> employees = new ArrayList<Employee>();
Employee employee = null;
for (int i = 0; i < NAME.length; i++) {
employee = new Employee();
employee.setEmployeeName(NAME[i]);
employee.setHireDate(new Date());
employees.add(employee);
}
return employees.toArray(new Employee[0]);
}
}