/*
* Copyright 2013 uaiHebert Solucoes em Informatica
*
* 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.uaihebert.test.uaicriteria.subquery;
import com.uaihebert.model.test.RegularEntityOne;
import com.uaihebert.model.test.RegularEntityTwo;
import com.uaihebert.test.AbstractTest;
import com.uaihebert.uaicriteria.UaiCriteria;
import org.junit.Test;
import java.util.Arrays;
import java.util.List;
import static org.junit.Assert.assertTrue;
public class StringSubQueryTest extends AbstractTest {
private static final String VALUE_STRING_01 = "Just a String 01";
private static final String VALUE_STRING_02 = "Just a String 02";
@Test
public void isLikeWorking() {
if (isBatoo()) {
// batoo is not finding any results
// the test will only check if there is no exception
final UaiCriteria<RegularEntityTwo> uaiCriteria = createCriteria(RegularEntityTwo.class);
final UaiCriteria<RegularEntityOne> subQuery = uaiCriteria.subQuery("id", RegularEntityOne.class);
subQuery.andStringLike("stringAttribute", "%02%");
return;
}
final String subQueryJPQL = "select r.id from RegularEntityOne r where r.stringAttribute like '%String 02%'";
final String query = "select r from RegularEntityTwo r " +
" where r.id in (" + subQueryJPQL + ")";
final List<RegularEntityTwo> resultFromJPQL = jpqlHelper.getListFromJPQL(query, RegularEntityTwo.class);
assertTrue(resultFromJPQL.size() > 0);
final UaiCriteria<RegularEntityTwo> uaiCriteria = createCriteria(RegularEntityTwo.class);
final UaiCriteria<RegularEntityOne> subQuery = uaiCriteria.subQuery("id", RegularEntityOne.class);
subQuery.andStringLike("stringAttribute", "%02%");
uaiCriteria.andAttributeIn("id", subQuery);
validateTestLists(resultFromJPQL, uaiCriteria.getResultList());
}
@Test
public void isLowerCaseLikeWorking() {
if (isBatoo()) {
// batoo is not finding any results
// the test will only check if there is no exception
final UaiCriteria<RegularEntityTwo> uaiCriteria = createCriteria(RegularEntityTwo.class);
final UaiCriteria<RegularEntityOne> subQuery = uaiCriteria.subQuery("id", RegularEntityOne.class);
subQuery.andStringLike("stringAttribute", "%02%");
return;
}
final String subQueryJPQL = "select r.id from RegularEntityOne r where lower(r.stringAttribute) like '%string 02%'";
final String query = "select r from RegularEntityTwo r " +
" where r.id in (" + subQueryJPQL + ")";
final List<RegularEntityTwo> resultFromJPQL = jpqlHelper.getListFromJPQL(query, RegularEntityTwo.class);
assertTrue(resultFromJPQL.size() > 0);
final UaiCriteria<RegularEntityTwo> uaiCriteria = createCriteria(RegularEntityTwo.class);
final UaiCriteria<RegularEntityOne> subQuery = uaiCriteria.subQuery("id", RegularEntityOne.class);
subQuery.andStringLike(true, "stringAttribute", "%02%");
uaiCriteria.andAttributeIn("id", subQuery);
validateTestLists(resultFromJPQL, uaiCriteria.getResultList());
}
@Test
public void isNotLikeWorking() {
if (isBatoo()) {
// batoo is not finding any results
// the test will only check if there is no exception
final UaiCriteria<RegularEntityTwo> uaiCriteria = createCriteria(RegularEntityTwo.class);
final UaiCriteria<RegularEntityOne> subQuery = uaiCriteria.subQuery("id", RegularEntityOne.class);
subQuery.andStringNotLike("stringAttribute", "%02%");
return;
}
final String subQueryJPQL = "select r.id from RegularEntityOne r where r.stringAttribute not like '%String 02%'";
final String query = "select r from RegularEntityTwo r " +
" where r.id in (" + subQueryJPQL + ")";
final List<RegularEntityTwo> resultFromJPQL = jpqlHelper.getListFromJPQL(query, RegularEntityTwo.class);
assertTrue(resultFromJPQL.size() > 0);
final UaiCriteria<RegularEntityTwo> uaiCriteria = createCriteria(RegularEntityTwo.class);
final UaiCriteria<RegularEntityOne> subQuery = uaiCriteria.subQuery("id", RegularEntityOne.class);
subQuery.andStringNotLike("stringAttribute", "%02%");
uaiCriteria.andAttributeIn("id", subQuery);
validateTestLists(resultFromJPQL, uaiCriteria.getResultList());
}
@Test
public void isNotLowerLikeWorking() {
if (isBatoo()) {
// batoo is not finding any results
// the test will only check if there is no exception
final UaiCriteria<RegularEntityTwo> uaiCriteria = createCriteria(RegularEntityTwo.class);
final UaiCriteria<RegularEntityOne> subQuery = uaiCriteria.subQuery("id", RegularEntityOne.class);
subQuery.andStringNotLike("stringAttribute", "%02%");
return;
}
final String subQueryJPQL = "select r.id from RegularEntityOne r where lower(r.stringAttribute) not like '%string 02%'";
final String query = "select r from RegularEntityTwo r " +
" where r.id in (" + subQueryJPQL + ")";
final List<RegularEntityTwo> resultFromJPQL = jpqlHelper.getListFromJPQL(query, RegularEntityTwo.class);
assertTrue(resultFromJPQL.size() > 0);
final UaiCriteria<RegularEntityTwo> uaiCriteria = createCriteria(RegularEntityTwo.class);
final UaiCriteria<RegularEntityOne> subQuery = uaiCriteria.subQuery("id", RegularEntityOne.class);
subQuery.andStringNotLike(true, "stringAttribute", "%02%");
uaiCriteria.andAttributeIn("id", subQuery);
validateTestLists(resultFromJPQL, uaiCriteria.getResultList());
}
@Test
public void isStringInWorking() {
if (isBatoo()) {
return;
}
final String subQueryJPQL = "select r.id from RegularEntityOne r where r.stringAttribute in ('Just a String 01', 'Just a String 02')";
final String query = "select r from RegularEntityTwo r " +
" where r.id in (" + subQueryJPQL + ")";
final List<RegularEntityTwo> resultFromJPQL = jpqlHelper.getListFromJPQL(query, RegularEntityTwo.class);
assertTrue(resultFromJPQL.size() > 0);
final UaiCriteria<RegularEntityTwo> uaiCriteria = createCriteria(RegularEntityTwo.class);
final UaiCriteria<RegularEntityOne> subQuery = uaiCriteria.subQuery("id", RegularEntityOne.class);
subQuery.andStringIn("stringAttribute", Arrays.asList(VALUE_STRING_01, VALUE_STRING_02));
uaiCriteria.andAttributeIn("id", subQuery);
validateTestLists(resultFromJPQL, uaiCriteria.getResultList());
}
@Test
public void isStringInLowerCaseWorking() {
if (isBatoo()) {
return;
}
final String subQueryJPQL = "select r.id from RegularEntityOne r where lower(r.stringAttribute) in ('just a string 01', 'just a string 02')";
final String query = "select r from RegularEntityTwo r " +
" where r.id in (" + subQueryJPQL + ")";
final List<RegularEntityTwo> resultFromJPQL = jpqlHelper.getListFromJPQL(query, RegularEntityTwo.class);
assertTrue(resultFromJPQL.size() > 0);
final UaiCriteria<RegularEntityTwo> uaiCriteria = createCriteria(RegularEntityTwo.class);
final UaiCriteria<RegularEntityOne> subQuery = uaiCriteria.subQuery("id", RegularEntityOne.class);
subQuery.andStringIn(true, "stringAttribute", Arrays.asList(VALUE_STRING_01, VALUE_STRING_02));
uaiCriteria.andAttributeIn("id", subQuery);
validateTestLists(resultFromJPQL, uaiCriteria.getResultList());
}
@Test
public void isStringNotInWorking() {
if (isBatoo()) {
return;
}
final String subQueryJPQL = "select r.id from RegularEntityOne r where r.stringAttribute not in ('Just a String 01', 'Just a String 02')";
final String query = "select r from RegularEntityTwo r " +
" where r.id in (" + subQueryJPQL + ")";
final List<RegularEntityTwo> resultFromJPQL = jpqlHelper.getListFromJPQL(query, RegularEntityTwo.class);
assertTrue(resultFromJPQL.size() > 0);
final UaiCriteria<RegularEntityTwo> uaiCriteria = createCriteria(RegularEntityTwo.class);
final UaiCriteria<RegularEntityOne> subQuery = uaiCriteria.subQuery("id", RegularEntityOne.class);
subQuery.andStringNotIn("stringAttribute", Arrays.asList(VALUE_STRING_01, VALUE_STRING_02));
uaiCriteria.andAttributeIn("id", subQuery);
validateTestLists(resultFromJPQL, uaiCriteria.getResultList());
}
@Test
public void isStringNotInLowerCaseWorking() {
if (isBatoo()) {
return;
}
final String subQueryJPQL = "select r.id from RegularEntityOne r where lower(r.stringAttribute) not in ('just a string 01', 'just a string 02')";
final String query = "select r from RegularEntityTwo r " +
" where r.id in (" + subQueryJPQL + ")";
final List<RegularEntityTwo> resultFromJPQL = jpqlHelper.getListFromJPQL(query, RegularEntityTwo.class);
assertTrue(resultFromJPQL.size() > 0);
final UaiCriteria<RegularEntityTwo> uaiCriteria = createCriteria(RegularEntityTwo.class);
final UaiCriteria<RegularEntityOne> subQuery = uaiCriteria.subQuery("id", RegularEntityOne.class);
subQuery.andStringNotIn(true, "stringAttribute", Arrays.asList(VALUE_STRING_01, VALUE_STRING_02));
uaiCriteria.andAttributeIn("id", subQuery);
validateTestLists(resultFromJPQL, uaiCriteria.getResultList());
}
}