/** * */ package org.dayatang.persistence.jpa; import org.dayatang.domain.Criteria; import org.dayatang.domain.CriteriaQuery; import org.dayatang.persistence.test.domain.Dictionary; import org.dayatang.persistence.test.domain.DictionaryCategory; import org.junit.Before; import org.junit.Test; import java.util.*; import static org.junit.Assert.*; /** * * @author yang */ public class QueryTest extends AbstractIntegrationTest { private CriteriaQuery instance; private DictionaryCategory gender; private DictionaryCategory education; private Dictionary male; private Dictionary female; private Dictionary undergraduate; @Before public void setUp() { super.setUp(); instance = repository.createCriteriaQuery(Dictionary.class); gender = createCategory("gender", 1); education = createCategory("education", 2); male = createDictionary("01", "男", gender, 100, "01"); female = createDictionary("02", "女", gender, 150, "01"); undergraduate = createDictionary("01", "本科", education, 200, "05"); } @Test public void testEq() { List<Dictionary> results = instance.eq("category", gender).list(); assertTrue(results.contains(male)); assertTrue(results.contains(female)); assertFalse(results.contains(undergraduate)); } @Test public void testNotEq() { List<Dictionary> results = instance.notEq("category", gender).list(); Dictionary dictionary = results.get(0); assertEquals(education, dictionary.getCategory()); } @Test public void testGe() { List<Dictionary> results = instance.ge("sortOrder", 150).list(); assertFalse(results.contains(male)); assertTrue(results.contains(female)); assertTrue(results.contains(undergraduate)); } @Test public void testGt() { List<Dictionary> results = instance.gt("sortOrder", 150).list(); assertFalse(results.contains(male)); assertFalse(results.contains(female)); assertTrue(results.contains(undergraduate)); } @Test public void testLe() { List<Dictionary> results = instance.le("sortOrder", 150).list(); assertTrue(results.contains(male)); assertTrue(results.contains(female)); assertFalse(results.contains(undergraduate)); } @Test public void testLt() { List<Dictionary> results = instance.lt("sortOrder", 150).list(); assertTrue(results.contains(male)); assertFalse(results.contains(female)); assertFalse(results.contains(undergraduate)); } @Test public void testEqProp() { List<Dictionary> results = instance.eqProp("code", "parentCode").list(); assertTrue(results.contains(male)); assertFalse(results.contains(female)); assertFalse(results.contains(undergraduate)); } @Test public void testNotEqProp() { List<Dictionary> results = instance.notEqProp("code", "parentCode").list(); assertFalse(results.contains(male)); assertTrue(results.contains(female)); assertTrue(results.contains(undergraduate)); } @Test public void testGtProp() { List<Dictionary> results = instance.gtProp("code", "parentCode").list(); assertFalse(results.contains(male)); assertTrue(results.contains(female)); assertFalse(results.contains(undergraduate)); } @Test public void testGeProp() { List<Dictionary> results = instance.geProp("code", "parentCode").list(); assertTrue(results.contains(male)); assertTrue(results.contains(female)); assertFalse(results.contains(undergraduate)); } @Test public void testLtProp() { List<Dictionary> results = instance.ltProp("code", "parentCode").list(); assertFalse(results.contains(male)); assertFalse(results.contains(female)); assertTrue(results.contains(undergraduate)); } @Test public void testLeProp() { List<Dictionary> results = instance.leProp("code", "parentCode").list(); assertTrue(results.contains(male)); assertFalse(results.contains(female)); assertTrue(results.contains(undergraduate)); } @Test public void testSizeEq() { instance = repository.createCriteriaQuery(DictionaryCategory.class).sizeEq("dictionaries", 2); List<DictionaryCategory> results = instance.list(); assertTrue(results.contains(gender)); assertFalse(results.contains(education)); } @Test public void testSizeNotEq() { instance = repository.createCriteriaQuery(DictionaryCategory.class).sizeNotEq("dictionaries", 2); List<DictionaryCategory> results = instance.list(); assertFalse(results.contains(gender)); assertTrue(results.contains(education)); } @Test public void testSizeGt() { instance = repository.createCriteriaQuery(DictionaryCategory.class).sizeGt("dictionaries", 1); List<DictionaryCategory> results = instance.list(); assertTrue(results.contains(gender)); assertFalse(results.contains(education)); } @Test public void testSizeGe() { instance = repository.createCriteriaQuery(DictionaryCategory.class).sizeGe("dictionaries", 2); List<DictionaryCategory> results = instance.list(); assertTrue(results.contains(gender)); assertFalse(results.contains(education)); } @Test public void testSizeLt() { instance = repository.createCriteriaQuery(DictionaryCategory.class).sizeLt("dictionaries", 2); List<DictionaryCategory> results = instance.list(); assertFalse(results.contains(gender)); assertTrue(results.contains(education)); } @Test public void testSizeLe() { instance = repository.createCriteriaQuery(DictionaryCategory.class).sizeLe("dictionaries", 2); List<DictionaryCategory> results = instance.list(); assertTrue(results.contains(gender)); assertTrue(results.contains(education)); } @Test public void testIsEmpty() { DictionaryCategory empty = createCategory("a", 3); instance = repository.createCriteriaQuery(DictionaryCategory.class); List<DictionaryCategory> results = instance.isEmpty("dictionaries").list(); assertTrue(results.contains(empty)); assertFalse(results.contains(gender)); assertFalse(results.contains(education)); } @Test public void testNotEmpty() { DictionaryCategory empty = createCategory("a", 3); instance = repository.createCriteriaQuery(DictionaryCategory.class); List<DictionaryCategory> results = instance.notEmpty("dictionaries").list(); assertFalse(results.contains(empty)); assertTrue(results.contains(gender)); assertTrue(results.contains(education)); } @Test public void testContainsText() { List<Dictionary> results = instance.containsText("text", "科").list(); assertTrue(results.contains(undergraduate)); assertFalse(results.contains(male)); assertFalse(results.contains(female)); } @Test public void testStartsWithText() { List<Dictionary> results = instance.startsWithText("text", "本").list(); assertTrue(results.contains(undergraduate)); instance = repository.createCriteriaQuery(Dictionary.class).startsWithText("text", "科"); results = instance.list(); assertFalse(results.contains(undergraduate)); } @Test public void testInEntity() { Set<DictionaryCategory> params = new HashSet<DictionaryCategory>(); params.add(education); params.add(gender); List<Dictionary> results = instance.in("category", params).list(); assertTrue(results.contains(male)); assertTrue(results.contains(female)); assertTrue(results.contains(undergraduate)); } @Test public void testInString() { Set<String> params = new HashSet<String>(); params.add("男"); params.add("女"); List<Dictionary> results = instance.in("text", params).list(); assertTrue(results.contains(male)); assertTrue(results.contains(female)); assertFalse(results.contains(undergraduate)); } @Test public void testInNull() { Collection<Object> value = null; List<Dictionary> results = instance.in("id", value).list(); assertTrue(results.isEmpty()); } @SuppressWarnings("unchecked") @Test public void testInEmpty() { List<Dictionary> results = instance.in("id", Collections.EMPTY_LIST).list(); assertTrue(results.isEmpty()); } @Test public void testNotInEntity() { Set<Long> params = new HashSet<Long>(); params.add(male.getId()); params.add(female.getId()); List<Dictionary> results = instance.notIn("id", params).list(); assertFalse(results.contains(male)); assertFalse(results.contains(female)); assertTrue(results.contains(undergraduate)); } @Test public void testNotInString() { Set<String> params = new HashSet<String>(); params.add("男"); params.add("女"); List<Dictionary> results = instance.notIn("text", params).list(); assertFalse(results.contains(male)); assertFalse(results.contains(female)); assertTrue(results.contains(undergraduate)); } @Test public void testNotInNull() { Collection<Object> value = null; List<Dictionary> results = instance.notIn("id", value).list(); assertFalse(results.isEmpty()); } @SuppressWarnings("unchecked") @Test public void testNotInEmpty() { List<Dictionary> results = instance.notIn("id", Collections.EMPTY_LIST).list(); assertFalse(results.isEmpty()); } @Test public void testIsNull() { List<Dictionary> results = instance.isNull("description").list(); assertTrue(results.contains(male)); assertTrue(results.contains(female)); assertTrue(results.contains(undergraduate)); } @Test public void testNotNull() { List<Dictionary> results = instance.notNull("text").list(); assertTrue(results.contains(male)); assertTrue(results.contains(female)); assertTrue(results.contains(undergraduate)); } @Test public void testBetween() { List<Dictionary> results = instance.between("parentCode", "01", "02").list(); assertTrue(results.contains(male)); assertTrue(results.contains(female)); assertFalse(results.contains(undergraduate)); } @Test public void testAnd() { List<Dictionary> results = instance.and(Criteria.eq("code", "01")).and(Criteria.eq("category", gender)).list(); assertTrue(results.contains(male)); assertFalse(results.contains(female)); assertFalse(results.contains(undergraduate)); } @Test public void testOr() { List<Dictionary> results = instance.or(Criteria.eq("text", "男")).or(Criteria.eq("sortOrder", 150)).list(); assertTrue(results.contains(male)); assertTrue(results.contains(female)); assertFalse(results.contains(undergraduate)); } @Test public void testNot() { List<Dictionary> results = instance.not(Criteria.eq("code", "01")).list(); assertFalse(results.contains(male)); assertTrue(results.contains(female)); assertFalse(results.contains(undergraduate)); } @Test public void testFindPaging() { createDictionary("08", "xyz", education, 150, "01"); createDictionary("09", "xyy", education, 160, "02"); List<Dictionary> results = instance.setFirstResult(1).setMaxResults(2).list(); assertEquals(2, results.size()); } @Test public void testFindOrder() { instance.asc("sortOrder"); List<Dictionary> results = instance.asc("sortOrder").list(); assertTrue(results.indexOf(male) < results.indexOf(female)); assertTrue(results.indexOf(female) < results.indexOf(undergraduate)); instance = repository.createCriteriaQuery(Dictionary.class).desc("sortOrder"); results = instance.list(); assertTrue(results.indexOf(male) > results.indexOf(female)); assertTrue(results.indexOf(female) > results.indexOf(undergraduate)); } //@Test public void testAlias() { List<Dictionary> results = repository.find(instance.eq("category.name", education)); Dictionary graduate = Dictionary.get(4L); assertTrue(results.contains(graduate)); Dictionary doctor = Dictionary.get(46L); assertFalse(results.contains(doctor)); } private DictionaryCategory createCategory(String name, int sortOrder) { DictionaryCategory category = new DictionaryCategory(); category.setName(name); category.setSortOrder(sortOrder); entityManager.persist(category); return category; } private Dictionary createDictionary(String code, String text, DictionaryCategory category, int sortOrder, String parentCode) { Dictionary dictionary = new Dictionary(code, text, category); dictionary.setSortOrder(sortOrder); dictionary.setParentCode(parentCode); entityManager.persist(dictionary); return dictionary; } }