/* * Copyright 2015, The Querydsl Team (http://www.querydsl.com/team) * * 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 com.querydsl.core; import static org.junit.Assert.*; import java.util.Arrays; import org.junit.Test; import com.google.common.collect.ImmutableSet; import com.querydsl.core.QueryFlag.Position; import com.querydsl.core.types.ConstantImpl; import com.querydsl.core.types.dsl.Expressions; import com.querydsl.core.types.dsl.Param; import com.querydsl.core.types.dsl.StringPath; public class DefaultQueryMetadataTest { private final QueryMetadata metadata = new DefaultQueryMetadata(); public DefaultQueryMetadataTest() { metadata.setValidate(true); } private final StringPath str = Expressions.stringPath("str"); private final StringPath str2 = Expressions.stringPath("str2"); @Test public void addWhere_with_null() { metadata.addWhere(null); } @Test public void addWhere_with_booleanBuilder() { metadata.addWhere(new BooleanBuilder()); } @Test public void addHaving_with_null() { metadata.addHaving(null); } @Test public void addHaving_with_booleanBuilder() { metadata.addHaving(new BooleanBuilder()); } @Test(expected = IllegalArgumentException.class) public void validation() { metadata.addWhere(str.isNull()); } @Test public void validation_no_error_for_groupBy() { metadata.addGroupBy(str); } @Test public void validation_no_error_for_having() { metadata.addHaving(str.isNull()); } @Test public void getGroupBy() { metadata.addJoin(JoinType.DEFAULT, str); metadata.addGroupBy(str); assertEquals(Arrays.asList(str), metadata.getGroupBy()); } @Test public void getHaving() { metadata.addJoin(JoinType.DEFAULT, str); metadata.addHaving(str.isNotNull()); assertEquals(str.isNotNull(), metadata.getHaving()); } @Test public void getJoins() { metadata.addJoin(JoinType.DEFAULT, str); assertEquals(Arrays.asList(new JoinExpression(JoinType.DEFAULT, str)), metadata.getJoins()); } @Test public void getJoins2() { metadata.addJoin(JoinType.DEFAULT, str); assertEquals(Arrays.asList(new JoinExpression(JoinType.DEFAULT, str)), metadata.getJoins()); } @Test public void getJoins3() { metadata.addJoin(JoinType.DEFAULT, str); assertEquals(Arrays.asList(new JoinExpression(JoinType.DEFAULT, str)), metadata.getJoins()); metadata.addJoinCondition(str.isNull()); assertEquals(Arrays.asList(new JoinExpression(JoinType.DEFAULT, str, str.isNull(), ImmutableSet.<JoinFlag>of())), metadata.getJoins()); metadata.addJoin(JoinType.DEFAULT, str2); assertEquals(Arrays.asList( new JoinExpression(JoinType.DEFAULT, str, str.isNull(), ImmutableSet.<JoinFlag>of()), new JoinExpression(JoinType.DEFAULT, str2)), metadata.getJoins()); } @Test public void getModifiers() { QueryModifiers modifiers = new QueryModifiers(1L,2L); metadata.setModifiers(modifiers); assertEquals(modifiers, metadata.getModifiers()); } @Test public void setLimit() { QueryModifiers modifiers = new QueryModifiers(1L,2L); metadata.setModifiers(modifiers); metadata.setLimit(3L); assertEquals(Long.valueOf(3L), metadata.getModifiers().getLimit()); assertEquals(Long.valueOf(2L), metadata.getModifiers().getOffset()); } @Test public void setOffset() { QueryModifiers modifiers = new QueryModifiers(1L,1L); metadata.setModifiers(modifiers); metadata.setOffset(2L); assertEquals(Long.valueOf(1L), metadata.getModifiers().getLimit()); assertEquals(Long.valueOf(2L), metadata.getModifiers().getOffset()); } @SuppressWarnings("unchecked") @Test public void getOrderBy() { metadata.addJoin(JoinType.DEFAULT, str); metadata.addOrderBy(str.asc()); metadata.addOrderBy(str.desc()); assertEquals(Arrays.asList(str.asc(),str.desc()), metadata.getOrderBy()); } @Test public void getProjection() { metadata.addJoin(JoinType.DEFAULT, str); metadata.setProjection(str.append("abc")); assertEquals(str.append("abc"), metadata.getProjection()); } @Test public void getWhere() { metadata.addJoin(JoinType.DEFAULT, str); metadata.addWhere(str.eq("b")); metadata.addWhere(str.isNotEmpty()); assertEquals(str.eq("b").and(str.isNotEmpty()), metadata.getWhere()); } @Test public void isDistinct() { assertFalse(metadata.isDistinct()); metadata.setDistinct(true); assertTrue(metadata.isDistinct()); } @Test public void isUnique() { assertFalse(metadata.isUnique()); metadata.setUnique(true); assertTrue(metadata.isUnique()); } @Test public void joinShouldBeCommitted() { DefaultQueryMetadata md = new DefaultQueryMetadata(); md.addJoin(JoinType.DEFAULT, str); DefaultQueryMetadata emptyMetadata = new DefaultQueryMetadata(); assertFalse(md.equals(emptyMetadata)); } @Test public void clone_() { metadata.addJoin(JoinType.DEFAULT, str); metadata.addGroupBy(str); metadata.addHaving(str.isNotNull()); metadata.addJoin(JoinType.DEFAULT, str2); QueryModifiers modifiers = new QueryModifiers(1L,2L); metadata.setModifiers(modifiers); metadata.addOrderBy(str.asc()); metadata.setProjection(str.append("abc")); metadata.addWhere(str.eq("b")); metadata.addWhere(str.isNotEmpty()); QueryMetadata clone = metadata.clone(); assertEquals(metadata.getGroupBy(), clone.getGroupBy()); assertEquals(metadata.getHaving(), clone.getHaving()); assertEquals(metadata.getJoins(), clone.getJoins()); assertEquals(metadata.getModifiers(), clone.getModifiers()); assertEquals(metadata.getOrderBy(), clone.getOrderBy()); assertEquals(metadata.getProjection(), clone.getProjection()); assertEquals(metadata.getWhere(), clone.getWhere()); } @SuppressWarnings("unchecked") @Test public void setParam() { metadata.setParam(new Param(String.class, "str"), ConstantImpl.create("X")); assertEquals(1, metadata.getParams().size()); assertTrue(metadata.getParams().get(new Param(String.class, "str")).equals(ConstantImpl.create("X"))); } @Test public void addFlag() { QueryFlag flag = new QueryFlag(Position.START, "X"); metadata.addFlag(flag); assertTrue(metadata.hasFlag(flag)); } @Test public void equals() { metadata.addJoin(JoinType.DEFAULT, str); metadata.addGroupBy(str); metadata.addHaving(str.isNotNull()); metadata.addJoin(JoinType.DEFAULT, str2); QueryModifiers modifiers = new QueryModifiers(1L,2L); metadata.setModifiers(modifiers); metadata.addOrderBy(str.asc()); metadata.setProjection(str.append("abc")); metadata.addWhere(str.eq("b")); metadata.addWhere(str.isNotEmpty()); QueryMetadata metadata2 = new DefaultQueryMetadata(); assertFalse(metadata.equals(metadata2)); metadata2.addJoin(JoinType.DEFAULT, str); assertFalse(metadata.equals(metadata2)); metadata2.addGroupBy(str); assertFalse(metadata.equals(metadata2)); metadata2.addHaving(str.isNotNull()); assertFalse(metadata.equals(metadata2)); metadata2.addJoin(JoinType.DEFAULT, str2); assertFalse(metadata.equals(metadata2)); metadata2.setModifiers(modifiers); assertFalse(metadata.equals(metadata2)); metadata2.addOrderBy(str.asc()); assertFalse(metadata.equals(metadata2)); metadata2.setProjection(str.append("abc")); assertFalse(metadata.equals(metadata2)); metadata2.addWhere(str.eq("b")); metadata2.addWhere(str.isNotEmpty()); assertTrue(metadata.equals(metadata2)); } @Test public void hashCode_() { metadata.addJoin(JoinType.DEFAULT, str); metadata.addGroupBy(str); metadata.addHaving(str.isNotNull()); metadata.addJoin(JoinType.DEFAULT, str2); QueryModifiers modifiers = new QueryModifiers(1L,2L); metadata.setModifiers(modifiers); metadata.addOrderBy(str.asc()); metadata.setProjection(str.append("abc")); metadata.addWhere(str.eq("b")); metadata.addWhere(str.isNotEmpty()); metadata.hashCode(); } @Test public void hashCode_empty_metadata() { metadata.hashCode(); } }