/*
* Copyright 2015 Red Hat, Inc. and/or its affiliates.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
*
* 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 org.jbpm.query.jpa.data;
import static org.junit.Assert.assertEquals;
import java.util.Date;
import org.jbpm.query.jpa.data.QueryWhere.QueryCriteriaType;
import org.junit.Before;
import org.junit.Test;
import org.kie.api.task.model.Status;
import org.kie.internal.query.QueryParameterIdentifiers;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public abstract class AbstractQuerySerializationTest {
protected static final Logger logger = LoggerFactory.getLogger(AbstractQuerySerializationTest.class );
abstract <T> T testRoundTrip(T in) throws Exception;
abstract void addSerializableClass(Class objClass);
@Before
public void before() {
addSerializableClass(Status.class);
}
@Test
public void queryCriteriaTest() throws Exception {
QueryCriteria criteria = new QueryCriteria("one", false, QueryCriteriaType.RANGE, 0);
criteria.addParameter(Status.Ready);
QueryCriteria copyCrit = testRoundTrip(criteria);
assertEquals( "union", criteria.isUnion(), copyCrit.isUnion());
assertEquals( "parameter type", criteria.getType(), copyCrit.getType() );
assertEquals( "value list size", criteria.getParameters().size(), copyCrit.getParameters().size() );
for( int i = 0; i < criteria.getParameters().size(); ++i ) {
assertEquals( "value " + i, criteria.getParameters().get(i), copyCrit.getParameters().get(i) );
}
criteria.getParameters().clear();
criteria.getParameters().add(new Integer(23));
criteria.getParameters().add(new Integer(42));
criteria.getParameters().add(new Long(55555));
criteria.getParameters().add("ceci ce ne pas un string!");
copyCrit = testRoundTrip(criteria);
for( int i = 0; i < criteria.getParameters().size(); ++i ) {
assertEquals( "value " + i, criteria.getParameters().get(i), copyCrit.getParameters().get(i) );
}
QueryWhere queryWhere = new QueryWhere();
queryWhere.addParameter("test", "asdf");
QueryWhere copyWhere = testRoundTrip(queryWhere);
assertEquals( "union", queryWhere.isUnion(), copyWhere.isUnion());
for( int i = 0; i < queryWhere.getCriteria().size(); ++i ) {
QueryCriteria origCrit = queryWhere.getCriteria().get(i);
copyCrit = queryWhere.getCriteria().get(i);
for( int j = 0; j < origCrit.getParameters().size(); ++j ) {
assertEquals( "value " + i, origCrit.getParameters().get(i), copyCrit.getParameters().get(i) );
}
};
}
@Test
public void nestedQueryParameterTest() throws Exception {
QueryCriteria criteria = new QueryCriteria("one", false, QueryCriteriaType.RANGE, 1);
criteria.addParameter(new Date());
QueryCriteria subCrit = new QueryCriteria("sub one", true, QueryCriteriaType.NORMAL, 0);
subCrit.addParameter(Status.Ready);
criteria.addParameter(subCrit);
subCrit = new QueryCriteria("sub two", true, QueryCriteriaType.REGEXP, 0);
subCrit.addParameter(Status.Completed);
criteria.addParameter(subCrit);
QueryCriteria copyCrit = testRoundTrip(criteria);
}
@Test
public void queryCriteriaGroupingTest() throws Exception {
QueryWhere queryWhere = new QueryWhere();
queryWhere.addParameter(QueryParameterIdentifiers.ACTUAL_OWNER_ID_LIST, "asdf");
// simple group
queryWhere.newGroup();
queryWhere.addParameter(QueryParameterIdentifiers.BUSINESS_ADMIN_ID_LIST, "afds");
queryWhere.endGroup();
queryWhere.addParameter(QueryParameterIdentifiers.DEPLOYMENT_ID_LIST, "ofogaa");
queryWhere.newGroup();
queryWhere.newGroup();
queryWhere.addParameter(QueryParameterIdentifiers.DEPLOYMENT_ID_LIST, "fusdf");
queryWhere.endGroup();
queryWhere.addParameter(QueryParameterIdentifiers.BUSINESS_ADMIN_ID_LIST, "afds");
queryWhere.endGroup();
QueryWhere copyWhere = testRoundTrip(queryWhere);
}
}