/* * #%L * BroadleafCommerce Common Libraries * %% * Copyright (C) 2009 - 2013 Broadleaf Commerce * %% * 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. * #L% */ package org.broadleafcommerce.common.util.dao; import junit.framework.TestCase; public class TypedQueryBuilderTest extends TestCase { public void testNoParameters() { TypedQueryBuilder<String> q = new TypedQueryBuilder<String>(String.class, "test"); StringBuilder expected = new StringBuilder("SELECT test FROM " + String.class.getName() + " test"); assertEquals(q.toQueryString(), expected.toString()); } public void testSingleParameter() { TypedQueryBuilder<String> q = new TypedQueryBuilder<String>(String.class, "test"); q.addRestriction("test.attr", "=", "sample"); StringBuilder expected = new StringBuilder("SELECT test FROM " + String.class.getName() + " test") .append(" WHERE (test.attr = :p0)"); assertEquals(q.toQueryString(), expected.toString()); assertEquals(q.getParamMap().get("p0"), "sample"); assertEquals(q.getParamMap().size(), 1); } public void testTwoParameters() { TypedQueryBuilder<String> q = new TypedQueryBuilder<String>(String.class, "test"); q.addRestriction("test.attr", "=", "sample"); q.addRestriction("test.attr2", "=", "sample2"); StringBuilder expected = new StringBuilder("SELECT test FROM " + String.class.getName() + " test") .append(" WHERE (test.attr = :p0) AND (test.attr2 = :p1)"); assertEquals(q.toQueryString(), expected.toString()); assertEquals(q.getParamMap().get("p0"), "sample"); assertEquals(q.getParamMap().get("p1"), "sample2"); assertEquals(q.getParamMap().size(), 2); } public void testThreeParameters() { TypedQueryBuilder<String> q = new TypedQueryBuilder<String>(String.class, "test"); q.addRestriction("test.attr", "=", "sample"); q.addRestriction("test.attr2", "=", "sample2"); q.addRestriction("test.attr3", "=", "sample3"); StringBuilder expected = new StringBuilder("SELECT test FROM " + String.class.getName() + " test") .append(" WHERE (test.attr = :p0) AND (test.attr2 = :p1) AND (test.attr3 = :p2)"); assertEquals(q.toQueryString(), expected.toString()); assertEquals(q.getParamMap().get("p0"), "sample"); assertEquals(q.getParamMap().get("p1"), "sample2"); assertEquals(q.getParamMap().get("p2"), "sample3"); assertEquals(q.getParamMap().size(), 3); } public void testOneNested() { TypedQueryBuilder<String> q = new TypedQueryBuilder<String>(String.class, "test"); TQRestriction r = new TQRestriction(TQRestriction.Mode.AND) .addChildRestriction(new TQRestriction("test.startDate", "<", "123")) .addChildRestriction(new TQRestriction(TQRestriction.Mode.OR) .addChildRestriction(new TQRestriction("test.endDate", "is null")) .addChildRestriction(new TQRestriction("test.endDate", ">", "456"))); q.addRestriction("test.attr", "=", "sample"); q.addRestriction(r); StringBuilder expected = new StringBuilder("SELECT test FROM " + String.class.getName() + " test") .append(" WHERE (test.attr = :p0)") .append(" AND ((test.startDate < :p1_0) AND ((test.endDate is null) OR (test.endDate > :p1_1_1)))"); assertEquals(q.toQueryString(), expected.toString()); assertEquals(q.getParamMap().get("p0"), "sample"); assertEquals(q.getParamMap().get("p1_0"), "123"); assertEquals(q.getParamMap().get("p1_1"), null); assertEquals(q.getParamMap().get("p1_1_0"), null); assertEquals(q.getParamMap().get("p1_1_1"), "456"); assertEquals(q.getParamMap().size(), 5); } public void testTwoNested() { TypedQueryBuilder<String> q = new TypedQueryBuilder<String>(String.class, "test"); TQRestriction r = new TQRestriction(TQRestriction.Mode.AND) .addChildRestriction(new TQRestriction("test.startDate", "<", "123")) .addChildRestriction(new TQRestriction(TQRestriction.Mode.OR) .addChildRestriction(new TQRestriction("test.endDate", "is null")) .addChildRestriction(new TQRestriction("test.endDate", ">", "456"))); TQRestriction r2 = new TQRestriction(TQRestriction.Mode.OR) .addChildRestriction(new TQRestriction("test.res1", "=", "333")) .addChildRestriction(new TQRestriction(TQRestriction.Mode.AND) .addChildRestriction(new TQRestriction("test.res2", "is null")) .addChildRestriction(new TQRestriction("test.res3", ">", "456"))); q.addRestriction("test.attr", "=", "sample"); q.addRestriction(r); q.addRestriction(r2); System.out.println(q.toQueryString()); StringBuilder expected = new StringBuilder("SELECT test FROM " + String.class.getName() + " test") .append(" WHERE (test.attr = :p0)") .append(" AND ((test.startDate < :p1_0) AND ((test.endDate is null) OR (test.endDate > :p1_1_1)))") .append(" AND ((test.res1 = :p2_0) OR ((test.res2 is null) AND (test.res3 > :p2_1_1)))"); assertEquals(q.toQueryString(), expected.toString()); assertEquals(q.getParamMap().get("p0"), "sample"); assertEquals(q.getParamMap().get("p1_0"), "123"); assertEquals(q.getParamMap().get("p1_1"), null); assertEquals(q.getParamMap().get("p1_1_0"), null); assertEquals(q.getParamMap().get("p1_1_1"), "456"); assertEquals(q.getParamMap().get("p2_0"), "333"); assertEquals(q.getParamMap().get("p2_1"), null); assertEquals(q.getParamMap().get("p2_1_0"), null); assertEquals(q.getParamMap().get("p2_1_1"), "456"); assertEquals(q.getParamMap().size(), 9); } public void testCountQuery() { TypedQueryBuilder<String> q = new TypedQueryBuilder<String>(String.class, "test"); StringBuilder expected = new StringBuilder("SELECT COUNT(*) FROM " + String.class.getName() + " test"); assertEquals(q.toQueryString(true), expected.toString()); } }