/* * Copyright (C) 2003-2011 eXo Platform SAS. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package org.exoplatform.social.core.storage.query; import junit.framework.TestCase; /** * @author <a href="mailto:alain.defrance@exoplatform.com">Alain Defrance</a> * @version $Revision$ */ public class WhereExpressionValuesTestCase extends TestCase { public void testStringEqual() throws Exception { WhereExpression expression = new WhereExpression(); expression.equals(FakeEntity.strProperty, "foo"); assertEquals("strProperty = 'foo' ", expression.toString()); } public void testIntegerEqual() throws Exception { WhereExpression expression = new WhereExpression(); expression.equals(FakeEntity.intProperty, 42); assertEquals("intProperty = '42' ", expression.toString()); } public void testStringLike() throws Exception { WhereExpression expression = new WhereExpression(); expression.like(FakeEntity.strProperty, "foo"); assertEquals("strProperty LIKE 'foo' ", expression.toString()); } public void testIntegerLike() throws Exception { WhereExpression expression = new WhereExpression(); expression.like(FakeEntity.intProperty, 42); assertEquals("intProperty LIKE '42' ", expression.toString()); } public void testStringContains() throws Exception { WhereExpression expression = new WhereExpression(); expression.contains(FakeEntity.strProperty, "foo"); assertEquals("CONTAINS (strProperty, 'foo') ", expression.toString()); } public void testIntegerContains() throws Exception { WhereExpression expression = new WhereExpression(); expression.contains(FakeEntity.intProperty, 42); assertEquals("CONTAINS (intProperty, '42') ", expression.toString()); } public void testStringOrderBy() throws Exception { WhereExpression expression = new WhereExpression(); expression.orderBy(FakeEntity.strProperty, Order.ASC); assertEquals("ORDER BY strProperty ASC", expression.toString()); } public void testIntegerOrderBy() throws Exception { WhereExpression expression = new WhereExpression(); expression.orderBy(FakeEntity.intProperty, Order.DESC); assertEquals("ORDER BY intProperty DESC", expression.toString()); } public void testOr() throws Exception { WhereExpression expression = new WhereExpression(); expression .equals(FakeEntity.intProperty, 42) .or() .like(FakeEntity.strProperty, "foo"); assertEquals("intProperty = '42' OR strProperty LIKE 'foo' ", expression.toString()); } public void testAnd() throws Exception { WhereExpression expression = new WhereExpression(); expression .equals(FakeEntity.intProperty, 42) .and() .like(FakeEntity.strProperty, "foo"); assertEquals("intProperty = '42' AND strProperty LIKE 'foo' ", expression.toString()); } public void testNotEquals() throws Exception { WhereExpression expression = new WhereExpression(); expression .not() .equals(FakeEntity.strProperty, "foo"); assertEquals("NOT strProperty = 'foo' ", expression.toString()); } public void testNotLIKE() throws Exception { WhereExpression expression = new WhereExpression(); expression .not() .like(FakeEntity.strProperty, "foo"); assertEquals("NOT strProperty LIKE 'foo' ", expression.toString()); } public void testNotContains() throws Exception { WhereExpression expression = new WhereExpression(); expression .not() .contains(FakeEntity.strProperty, "foo"); assertEquals("NOT CONTAINS (strProperty, 'foo') ", expression.toString()); } public void testGroup() throws Exception { WhereExpression expression = new WhereExpression(); expression .equals(FakeEntity.strProperty, "foo") .and() .startGroup() .contains(FakeEntity.strProperty, "bar") .or() .like(FakeEntity.intProperty, 42) .endGroup(); assertEquals( "strProperty = 'foo' AND (CONTAINS (strProperty, 'bar') OR intProperty LIKE '42' ) ", expression.toString() ); } public void testEndAllGroup() throws Exception { WhereExpression expression = new WhereExpression(); expression .startGroup() .equals(FakeEntity.strProperty, "foo") .and() .startGroup() .contains(FakeEntity.strProperty, "bar") .or() .startGroup() .like(FakeEntity.intProperty, 42) .endGroup() .and() .equals(FakeEntity.intProperty, 43) .endAllGroup(); assertEquals( "(strProperty = 'foo' AND (CONTAINS (strProperty, 'bar') OR (intProperty LIKE '42' ) AND intProperty = '43' ) ) ", expression.toString() ); } public void testLowerFunction() throws Exception { WhereExpression expression = new WhereExpression(); CallExpression<String> callExpression = expression.callFunction(QueryFunction.LOWER, FakeEntity.strProperty); expression.like(callExpression, "foo"); assertEquals("LOWER(strProperty) LIKE 'foo' ", expression.toString()); } public void testUpperFunction() throws Exception { WhereExpression expression = new WhereExpression(); CallExpression<String> callExpression = expression.callFunction(QueryFunction.UPPER, FakeEntity.strProperty); expression.like(callExpression, "foo"); assertEquals("UPPER(strProperty) LIKE 'foo' ", expression.toString()); } } class FakeEntity { public static final PropertyLiteralExpression<String> strProperty = new PropertyLiteralExpression<String>(String.class, "strProperty"); public static final PropertyLiteralExpression<Integer> intProperty = new PropertyLiteralExpression<Integer>(Integer.class, "intProperty"); }