package org.opennms.core.criteria; import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import java.util.ArrayList; import java.util.Date; import java.util.List; import org.junit.Before; import org.junit.Test; import org.opennms.core.criteria.Alias.JoinType; import org.opennms.core.criteria.Fetch.FetchType; import org.opennms.core.criteria.restrictions.Restriction; import org.opennms.core.criteria.restrictions.Restrictions; import org.opennms.core.utils.LogUtils; import org.opennms.netmgt.model.OnmsAlarm; import org.opennms.netmgt.model.OnmsSeverity; public class CriteriaTest { private static final Order[] EMPTY_ORDER_ARRAY = new Order[0]; @Before public void setUp() { LogUtils.logToConsole(); LogUtils.enableDebugging(); } @Test public void testBuilder() { final CriteriaBuilder cb = new CriteriaBuilder(OnmsAlarm.class); assertNotNull(cb); assertNotNull(cb.toCriteria()); } @Test public void testOrder() { final List<Order> orders = new ArrayList<Order>(); final CriteriaBuilder cb = new CriteriaBuilder(OnmsAlarm.class); // ascending cb.orderBy("firstEventTime"); orders.add(Order.asc("firstEventTime")); assertArrayEquals(orders.toArray(EMPTY_ORDER_ARRAY), cb.toCriteria().getOrders().toArray(EMPTY_ORDER_ARRAY)); // descending cb.clearOrder(); orders.clear(); cb.orderBy("firstEventTime").desc(); orders.add(Order.desc("firstEventTime")); assertArrayEquals(orders.toArray(), cb.toCriteria().getOrders().toArray()); // multiple unrelated attributes, using .desc() cb.clearOrder(); orders.clear(); cb.orderBy("firstEventTime").desc(); cb.orderBy("id").desc(); orders.add(Order.desc("firstEventTime")); orders.add(Order.desc("id")); assertArrayEquals(orders.toArray(), cb.toCriteria().getOrders().toArray()); assertEquals(Order.asc("firstEventTime"), Order.desc("firstEventTime")); cb.clearOrder(); orders.clear(); cb.orderBy("firstEventTime").desc(); cb.orderBy("id").desc(); orders.add(Order.desc("firstEventTime")); orders.add(Order.desc("id")); // this should be ignored, we already have an orderBy=firstEventTime cb.orderBy("firstEventTime").asc(); assertArrayEquals(orders.toArray(), cb.toCriteria().getOrders().toArray()); // should be ignored still cb.orderBy("id").asc(); assertArrayEquals(orders.toArray(), cb.toCriteria().getOrders().toArray()); cb.clearOrder().orderBy("id").asc(); orders.clear(); orders.add(Order.asc("id")); assertArrayEquals(orders.toArray(), cb.toCriteria().getOrders().toArray()); } @Test public void testFetch() { final CriteriaBuilder cb = new CriteriaBuilder(OnmsAlarm.class); cb.fetch("firstEvent").fetch("lastEvent").fetch("distPoller", FetchType.LAZY); assertEquals(FetchType.DEFAULT, cb.toCriteria().getFetchTypes().get(0).getFetchType()); assertEquals(FetchType.LAZY, cb.toCriteria().getFetchTypes().get(2).getFetchType()); } @Test public void testAlias() { CriteriaBuilder cb = new CriteriaBuilder(OnmsAlarm.class); cb.alias("node", "node").join("node.snmpInterfaces", "snmpInterface").join("node.ipInterfaces", "ipInterface"); assertEquals(JoinType.LEFT_JOIN, cb.toCriteria().getAliases().get(0).getType()); assertEquals(3, cb.toCriteria().getAliases().size()); cb = new CriteriaBuilder(OnmsAlarm.class).join("monkey", "ook", JoinType.FULL_JOIN); assertEquals("monkey", cb.toCriteria().getAliases().get(0).getAssociationPath()); assertEquals("ook", cb.toCriteria().getAliases().get(0).getAlias()); assertEquals(JoinType.FULL_JOIN, cb.toCriteria().getAliases().get(0).getType()); } @Test public void testDistinct() { final CriteriaBuilder cb = new CriteriaBuilder(OnmsAlarm.class); cb.alias("node", "node"); assertFalse(cb.toCriteria().isDistinct()); cb.distinct(); assertTrue(cb.toCriteria().isDistinct()); cb.distinct(false); assertFalse(cb.toCriteria().isDistinct()); } @Test public void testLimits() { CriteriaBuilder cb = new CriteriaBuilder(OnmsAlarm.class); cb.limit(10).offset(20); assertEquals(Integer.valueOf(10), cb.toCriteria().getLimit()); assertEquals(Integer.valueOf(20), cb.toCriteria().getOffset()); } @Test public void testRestrictions() { CriteriaBuilder cb = new CriteriaBuilder(OnmsAlarm.class); final List<Restriction> expected = new ArrayList<Restriction>(); expected.add(Restrictions.isNull("tticketId")); expected.add(Restrictions.isNotNull("severity")); cb.isNull("tticketId").isNotNull("severity"); assertEquals(expected, cb.toCriteria().getRestrictions()); final Date d = new Date(); cb = new CriteriaBuilder(OnmsAlarm.class); cb.id(1).and(Restrictions.gt("firstEventTime", d), Restrictions.lt("severity", OnmsSeverity.CRITICAL)); expected.clear(); expected.add(Restrictions.eq("id", 1)); expected.add(Restrictions.and(Restrictions.gt("firstEventTime", d), Restrictions.lt("severity", OnmsSeverity.CRITICAL))); assertEquals(expected, cb.toCriteria().getRestrictions()); cb.like("description", "*foo*").ilike("uei", "*bar*"); expected.add(Restrictions.like("description", "*foo*")); expected.add(Restrictions.ilike("uei", "*bar*")); assertEquals(expected, cb.toCriteria().getRestrictions()); final List<String> inValues = new ArrayList<String>(); inValues.add("a"); inValues.add("b"); cb.in("nodeLabel", inValues); expected.add(Restrictions.in("nodeLabel", inValues)); final List<String> notInValues = new ArrayList<String>(); notInValues.add("c"); notInValues.add("d"); cb.not().in("nodeLabel", notInValues); expected.add(Restrictions.not(Restrictions.in("nodeLabel", notInValues))); assertEquals(expected, cb.toCriteria().getRestrictions()); cb = new CriteriaBuilder(OnmsAlarm.class); expected.clear(); cb.between("id", 1, 10); expected.add(Restrictions.between("id", 1, 10)); cb.ne("id", 8); expected.add(Restrictions.not(Restrictions.eq("id", 8))); assertEquals(expected, cb.toCriteria().getRestrictions()); } }