/*
* Copyright 2014 Dayatang Open Source..
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.dayatang.domain.repository;
import org.dayatang.domain.*;
import org.dayatang.domain.entity.MyEntity;
import org.junit.Before;
import org.junit.Test;
import java.util.Arrays;
import java.util.List;
import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
/**
*
* @author yyang
*/
public class CriteriaQueryTest {
private CriteriaQuery instance;
private EntityRepository repository;
private Class<MyEntity> entityClass = MyEntity.class;
@Before
public void setUp() {
repository = mock(EntityRepository.class);
instance = new CriteriaQuery(repository, entityClass);
}
/**
* Test of getEntityClass method, of class CriteriaQuery.
*/
@Test
public void testGetEntityClass() {
assertEquals(entityClass, instance.getEntityClass());
}
/**
* Test of getFirstResult method, of class JpqlQuery.
*/
@Test
public void testFirstResult() {
assertEquals(3, instance.setFirstResult(3).getFirstResult());
}
/**
* Test of getMaxResults method, of class JpqlQuery.
*/
@Test
public void testMaxResults() {
assertEquals(10, instance.setMaxResults(10).getMaxResults());
}
/**
* Test of getOrderSettings method, of class CriteriaQuery.
*/
@Test
public void testOrderSettings() {
OrderSettings orderSettings = new OrderSettings();
orderSettings.asc("id");
orderSettings.desc("name");
instance.asc("id").desc("name");
assertEquals(orderSettings, instance.getOrderSettings());
}
/**
* Test of eq method, of class CriteriaQuery.
*/
@Test
public void testEq() {
assertEquals(Criteria.eq("name", "abc"), instance.eq("name", "abc").getQueryCriterion());
}
/**
* Test of notEq method, of class CriteriaQuery.
*/
@Test
public void testNotEq() {
assertEquals(Criteria.notEq("name", "abc"), instance.notEq("name", "abc").getQueryCriterion());
}
/**
* Test of gt method, of class CriteriaQuery.
*/
@Test
public void testGt() {
assertEquals(Criteria.gt("id", 5), instance.gt("id", 5).getQueryCriterion());
}
/**
* Test of ge method, of class CriteriaQuery.
*/
@Test
public void testGe() {
assertEquals(Criteria.ge("id", 5), instance.ge("id", 5).getQueryCriterion());
}
/**
* Test of lt method, of class CriteriaQuery.
*/
@Test
public void testLt() {
assertEquals(Criteria.lt("id", 5), instance.lt("id", 5).getQueryCriterion());
}
/**
* Test of le method, of class CriteriaQuery.
*/
@Test
public void testLe() {
assertEquals(Criteria.le("id", 5), instance.le("id", 5).getQueryCriterion());
}
/**
* Test of eqProp method, of class CriteriaQuery.
*/
@Test
public void testEqProp() {
assertEquals(Criteria.eqProp("id", "name"), instance.eqProp("id", "name").getQueryCriterion());
}
/**
* Test of notEqProp method, of class CriteriaQuery.
*/
@Test
public void testNotEqProp() {
assertEquals(Criteria.notEqProp("id", "name"), instance.notEqProp("id", "name").getQueryCriterion());
}
/**
* Test of gtProp method, of class CriteriaQuery.
*/
@Test
public void testGtProp() {
assertEquals(Criteria.gtProp("id", "name"), instance.gtProp("id", "name").getQueryCriterion());
}
/**
* Test of geProp method, of class CriteriaQuery.
*/
@Test
public void testGeProp() {
assertEquals(Criteria.geProp("id", "name"), instance.geProp("id", "name").getQueryCriterion());
}
/**
* Test of ltProp method, of class CriteriaQuery.
*/
@Test
public void testLtProp() {
assertEquals(Criteria.ltProp("id", "name"), instance.ltProp("id", "name").getQueryCriterion());
}
/**
* Test of leProp method, of class CriteriaQuery.
*/
@Test
public void testLeProp() {
assertEquals(Criteria.leProp("id", "name"), instance.leProp("id", "name").getQueryCriterion());
}
/**
* Test of sizeEq method, of class CriteriaQuery.
*/
@Test
public void testSizeEq() {
assertEquals(Criteria.sizeEq("id", 3), instance.sizeEq("id", 3).getQueryCriterion());
}
/**
* Test of sizeNotEq method, of class CriteriaQuery.
*/
@Test
public void testSizeNotEq() {
assertEquals(Criteria.sizeNotEq("id", 3), instance.sizeNotEq("id", 3).getQueryCriterion());
}
/**
* Test of sizeGt method, of class CriteriaQuery.
*/
@Test
public void testSizeGt() {
assertEquals(Criteria.sizeGt("id", 3), instance.sizeGt("id", 3).getQueryCriterion());
}
/**
* Test of sizeGe method, of class CriteriaQuery.
*/
@Test
public void testSizeGe() {
assertEquals(Criteria.sizeGe("id", 3), instance.sizeGe("id", 3).getQueryCriterion());
}
/**
* Test of sizeLt method, of class CriteriaQuery.
*/
@Test
public void testSizeLt() {
assertEquals(Criteria.sizeLt("id", 3), instance.sizeLt("id", 3).getQueryCriterion());
}
/**
* Test of sizeLe method, of class CriteriaQuery.
*/
@Test
public void testSizeLe() {
assertEquals(Criteria.sizeLe("id", 3), instance.sizeLe("id", 3).getQueryCriterion());
}
/**
* Test of containsText method, of class CriteriaQuery.
*/
@Test
public void testContainsText() {
assertEquals(Criteria.containsText("name", "a"), instance.containsText("name", "a").getQueryCriterion());
}
/**
* Test of startsWithText method, of class CriteriaQuery.
*/
@Test
public void testStartsWithText() {
assertEquals(Criteria.startsWithText("name", "a"), instance.startsWithText("name", "a").getQueryCriterion());
}
/**
* Test of in method, of class CriteriaQuery.
*/
@Test
public void testInCollection() {
List<?> criteria = Arrays.asList("a", "b");
assertEquals(Criteria.in("name", criteria), instance.in("name", criteria).getQueryCriterion());
}
/**
* Test of in method, of class CriteriaQuery.
*/
@Test
public void testInArray() {
Object[] criteria = new Object[] {"a", "b"};
assertEquals(Criteria.in("name", criteria), instance.in("name", criteria).getQueryCriterion());
}
/**
* Test of notIn method, of class CriteriaQuery.
*/
@Test
public void testNotInCollection() {
List<?> criteria = Arrays.asList("a", "b");
assertEquals(Criteria.notIn("name", criteria), instance.notIn("name", criteria).getQueryCriterion());
}
/**
* Test of notIn method, of class CriteriaQuery.
*/
@Test
public void testNotInArray() {
Object[] criteria = new Object[] {"a", "b"};
assertEquals(Criteria.notIn("name", criteria), instance.notIn("name", criteria).getQueryCriterion());
}
/**
* Test of between method, of class CriteriaQuery.
*/
@Test
public void testBetween() {
assertEquals(Criteria.between("name", "a", "b"), instance.between("name", "a", "b").getQueryCriterion());
}
/**
* Test of isNull method, of class CriteriaQuery.
*/
@Test
public void testIsNull() {
assertEquals(Criteria.isNull("name"), instance.isNull("name").getQueryCriterion());
}
/**
* Test of notNull method, of class CriteriaQuery.
*/
@Test
public void testNotNull() {
assertEquals(Criteria.notNull("name"), instance.notNull("name").getQueryCriterion());
}
/**
* Test of isEmpty method, of class CriteriaQuery.
*/
@Test
public void testIsEmpty() {
assertEquals(Criteria.isEmpty("name"), instance.isEmpty("name").getQueryCriterion());
}
/**
* Test of notEmpty method, of class CriteriaQuery.
*/
@Test
public void testNotEmpty() {
assertEquals(Criteria.notEmpty("name"), instance.notEmpty("name").getQueryCriterion());
}
/**
* Test of isTrue method, of class CriteriaQuery.
*/
@Test
public void testIsTrue() {
assertEquals(Criteria.eq("name", true), instance.isTrue("name").getQueryCriterion());
}
/**
* Test of isFalse method, of class CriteriaQuery.
*/
@Test
public void testIsFalse() {
assertEquals(Criteria.eq("name", false), instance.isFalse("name").getQueryCriterion());
}
/**
* Test of isBlank method, of class CriteriaQuery.
*/
@Test
public void testIsBlank() {
QueryCriterion criterion1 = Criteria.isNull("name");
QueryCriterion criterion2 = Criteria.eq("name", "");
QueryCriterion criterion3 = Criteria.or(criterion1, criterion2);
assertEquals(criterion3, instance.isBlank("name").getQueryCriterion());
}
/**
* Test of notBlank method, of class CriteriaQuery.
*/
@Test
public void testNotBlank() {
QueryCriterion criterion1 = Criteria.notNull("name");
QueryCriterion criterion2 = Criteria.notEq("name", "");
QueryCriterion criterion3 = Criteria.and(criterion1, criterion2);
assertEquals(criterion3, instance.notBlank("name").getQueryCriterion());
}
/**
* Test of not method, of class CriteriaQuery.
*/
@Test
public void testNot() {
QueryCriterion criterion1 = Criteria.eq("name", "abc");
QueryCriterion criterion2 = Criteria.not(criterion1);
assertEquals(criterion2, instance.not(criterion1).getQueryCriterion());
}
/**
* Test of and method, of class CriteriaQuery.
*/
@Test
public void testAnd() {
QueryCriterion criterion1 = Criteria.eq("name", "abc");
QueryCriterion criterion2 = Criteria.gt("id", 5);
QueryCriterion criterion3 = Criteria.and(criterion1, criterion2);
assertEquals(criterion3, instance.and(criterion1).and(criterion2).getQueryCriterion());
}
/**
* Test of or method, of class CriteriaQuery.
*/
@Test
public void testOr() {
QueryCriterion criterion1 = Criteria.eq("name", "abc");
QueryCriterion criterion2 = Criteria.gt("id", 5);
QueryCriterion criterion3 = Criteria.or(criterion1, criterion2);
assertEquals(criterion3, instance.or(criterion1).or(criterion2).getQueryCriterion());
}
/**
* Test of list method, of class CriteriaQuery.
*/
@Test
public void testList() {
List<Object> results = Arrays.asList(new Object[] {"a", "b"});
when(repository.find(instance)).thenReturn(results);
assertEquals(results, instance.list());
}
/**
* Test of singleResult method, of class CriteriaQuery.
*/
@Test
public void testSingleResult() {
when(repository.getSingleResult(instance)).thenReturn("abc");
assertEquals("abc", instance.singleResult());
}
@Test
public void testGetQueryString() {
QueryCriterion criterion1 = Criteria.eq("name", "abc");
QueryCriterion criterion2 = Criteria.in("age", Arrays.asList(1, 2));
instance.eq("name", "abc")
.isEmpty("post")
.notNull("birthday")
.in("age", Arrays.asList(1, 2))
.getQueryString();
assertEquals("select distinct(rootEntity) from org.dayatang.domain.entity.MyEntity as rootEntity "
+ "where rootEntity.name = :rootEntity_name" + criterion1.hashCode() + " "
+ "and rootEntity.post is empty "
+ "and rootEntity.birthday is not null "
+ "and rootEntity.age in :rootEntity_age" + criterion2.hashCode(),
instance.getQueryString());
assertEquals(NamedParameters.create()
.add("rootEntity_name" + criterion1.hashCode(), "abc")
.add("rootEntity_age" + criterion2.hashCode(), Arrays.asList(1, 2)),
instance.getParameters());
}
@Test
public void testGetQueryString2() {
QueryCriterion criterion1 = Criteria.eq("name", "abc");
QueryCriterion criterion2 = Criteria.in("age", Arrays.asList(1, 2));
assertEquals("select distinct(rootEntity) from org.dayatang.domain.entity.MyEntity as rootEntity "
+ "where rootEntity.name = :rootEntity_name" + criterion1.hashCode() + " "
+ "and rootEntity.post is empty "
+ "and rootEntity.birthday is not null "
+ "and rootEntity.age in :rootEntity_age" + criterion2.hashCode() + " "
+ "order by rootEntity.name asc",
instance.eq("name", "abc")
.isEmpty("post")
.notNull("birthday")
.in("age", Arrays.asList(1, 2))
.asc("name")
.getQueryString());
}
}