package egovframework.rte.psl.data.jpa;
import static org.junit.Assert.assertEquals;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.transaction.annotation.Transactional;
import egovframework.rte.psl.data.jpa.domain.User;
import egovframework.rte.psl.data.jpa.repository.UserDetailRepository;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath*:META-INF/spring/context-*.xml")
@Transactional
public class QueryMethodTest {
@Autowired
UserDetailRepository repository;
private static final String[] NAME = {"Gildong Alice", "Gildong Bob", "Gilseo Charles", "Gilseo Dennis", "Gilbook Emily", "Gilbook Frank ", "Gilnam George", "Gilnam Henry"};
User[] users = null;
@Before
public void setUp() {
User[] users = getTestList();
for (int i = 0; i < users.length; i++) {
users[i] = repository.save(users[i]);
}
}
@Test
public void testQueryMethod() {
List<User> list = null;
list = repository.findByLastnameAndFirstname("Alice", "Gildong");
assertEquals(1, list.size());
list = repository.findByLastnameOrFirstname("Alice", "Gildong");
assertEquals(2, list.size());
list = repository.findByStartDateBetween(getDate("2013-01-01"), getDate("2013-01-31"));
assertEquals(4, list.size());
list = repository.findByAgeLessThan(10);
assertEquals(0, list.size());
list = repository.findByAgeGreaterThan(50);
assertEquals(3, list.size());
list = repository.findByStartDateAfter(getDate("2013-02-01"));
assertEquals(4, list.size());
list = repository.findByStartDateBefore(getDate("2013-01-31"));
assertEquals(3, list.size());
list = repository.findByAgeIsNull();
assertEquals(0, list.size());
list = repository.findByAgeIsNotNull();
assertEquals(8, list.size());
list = repository.findByFirstnameLike("%dong");
assertEquals(2, list.size());
list = repository.findByFirstnameNotLike("%dong");
assertEquals(6, list.size());
list = repository.findByFirstnameStartingWith("Gil");
assertEquals(8, list.size());
list = repository.findByFirstnameEndingWith("nam");
assertEquals(2, list.size());
list = repository.findByFirstnameContaining("book");
assertEquals(2, list.size());
list = repository.findByAgeOrderByLastnameDesc(10);
assertEquals(1, list.size());
list = repository.findByLastnameNot("Alice");
assertEquals(7, list.size());
List<Integer> ages = new ArrayList<Integer>();
ages.add(15);
ages.add(20);
ages.add(30);
list = repository.findByAgeIn(ages);
assertEquals(2, list.size());
list = repository.findByAgeNotIn(ages);
assertEquals(6, list.size());
list = repository.findByActiveTrue();
assertEquals(4, list.size());
list = repository.findByActiveFalse();
assertEquals(4, list.size());
}
private Date getDate(String dateString, int add) {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
try {
Date current = format.parse(dateString);
Calendar cal = Calendar.getInstance();
cal.setTime(current);
cal.add(Calendar.DATE, add);
return cal.getTime();
} catch (ParseException pe) {
throw new RuntimeException(pe);
}
}
private Date getDate(String dateString) {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
try {
return format.parse(dateString);
} catch (ParseException pe) {
throw new RuntimeException(pe);
}
}
private User[] getTestList() {
List<User> users = new ArrayList<User>();
User user = null;
for (int i = 0; i < NAME.length; i++) {
user = new User();
String[] names = NAME[i].split(" ");
user.setFirstname(names[0]);
user.setLastname(names[1]);
user.setStartDate(getDate("2013-01-01", i * 10));
user.setAge(i * 10 + 10);
if (i % 2 ==0) {
user.setActive(true);
} else {
user.setActive(false);
}
users.add(user);
}
return users.toArray(new User[0]);
}
}