blob: f97697f8e4e636324daf1eb19989d7643b68f7e3 [file] [log] [blame]
/*
* Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0,
* or the Eclipse Distribution License v. 1.0 which is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
*/
// Contributors:
// Oracle - initial API and implementation from Oracle TopLink
package org.eclipse.persistence.testing.tests.jpa.fieldaccess.advanced;
import java.util.List;
import junit.framework.Test;
import junit.framework.TestSuite;
import org.eclipse.persistence.exceptions.QueryException;
import org.eclipse.persistence.testing.framework.junit.JUnitTestCase;
import org.eclipse.persistence.queries.ReportQuery;
import org.eclipse.persistence.testing.models.jpa.fieldaccess.advanced.Address;
import org.eclipse.persistence.testing.models.jpa.fieldaccess.advanced.Employee;
import org.eclipse.persistence.expressions.ExpressionBuilder;
import org.eclipse.persistence.testing.models.jpa.fieldaccess.advanced.LargeProject;
import org.eclipse.persistence.testing.models.jpa.fieldaccess.advanced.Project;
public class ReportQueryMultipleReturnTestSuite extends JUnitTestCase {
protected boolean m_reset = false; // reset gets called twice on error
public ReportQueryMultipleReturnTestSuite() {
}
public ReportQueryMultipleReturnTestSuite(String name) {
super(name);
}
@Override
public void setUp () {
m_reset = true;
super.setUp();
clearCache("fieldaccess");
}
@Override
public void tearDown () {
if (m_reset) {
m_reset = false;
}
super.tearDown();
}
public void testSimpleReturnDirectToField(){
ReportQuery reportQuery = new ReportQuery();
reportQuery.returnWithoutReportQueryResult();
reportQuery.setReferenceClass(Employee.class);
ExpressionBuilder empbuilder = new ExpressionBuilder();
reportQuery.addAttribute("salary",empbuilder.get("salary"));
reportQuery.setSelectionCriteria(empbuilder.get("salary").greaterThan(1));
List result = (List)getServerSession("fieldaccess").executeQuery(reportQuery);
Object resultItem = result.get(0);
assertTrue("Failed to return Employees correctly, Not A Number", Number.class.isAssignableFrom(resultItem.getClass()));
assertTrue("Failed to return Employees correctly, Not Correct Result", ((Number)resultItem).intValue() > 1);
}
public void testSimpleReturnObject(){
ReportQuery reportQuery = new ReportQuery();
reportQuery.returnWithoutReportQueryResult();
reportQuery.setReferenceClass(Employee.class);
ExpressionBuilder empbuilder = new ExpressionBuilder();
reportQuery.addAttribute("manager",empbuilder.get("manager"));
reportQuery.setSelectionCriteria(empbuilder.get("salary").greaterThan(1));
List result = (List)getServerSession("fieldaccess").executeQuery(reportQuery);
Object resultItem = result.get(0);
assertTrue("Failed to return Employees correctly, Not An Employee", Employee.class.isAssignableFrom(resultItem.getClass()));
}
public void testReturnObjectAndDirectToField(){
ReportQuery reportQuery = new ReportQuery();
reportQuery.returnWithoutReportQueryResult();
reportQuery.setReferenceClass(Employee.class);
ExpressionBuilder empbuilder = new ExpressionBuilder();
reportQuery.addAttribute("salary",empbuilder.get("salary"));
reportQuery.addAttribute("manager",empbuilder.get("manager"));
reportQuery.setSelectionCriteria(empbuilder.get("salary").greaterThan(1));
List result = (List)getServerSession("fieldaccess").executeQuery(reportQuery);
Object innerResult = result.get(0);
assertTrue("Failed to return Employees correctly, Not an Object Array", Object[].class.isAssignableFrom(innerResult.getClass()));
Object resultItem = ((Object[])innerResult)[0];
assertTrue("Failed to return Employees correctly, Not A Number", Number.class.isAssignableFrom(resultItem.getClass()));
assertTrue("Failed to return Employees correctly, Not Correct Result", ((Number)resultItem).intValue() > 1);
resultItem = ((Object[])innerResult)[1];
assertTrue("Failed to return Employees correctly, Not An Employee", Employee.class.isAssignableFrom(resultItem.getClass()));
}
public void testReturnUnrelatedObjectAndDirectToField(){
ReportQuery reportQuery = new ReportQuery();
reportQuery.returnWithoutReportQueryResult();
reportQuery.setReferenceClass(Employee.class);
ExpressionBuilder empbuilder = new ExpressionBuilder();
ExpressionBuilder addBuilder = new ExpressionBuilder(Address.class);
reportQuery.addAttribute("salary",empbuilder.get("salary"));
reportQuery.addAttribute("manager",empbuilder.get("manager"));
reportQuery.addAttribute("adress.city",addBuilder.get("city"));
reportQuery.setSelectionCriteria(empbuilder.get("salary").greaterThan(1));
List result = (List)getServerSession("fieldaccess").executeQuery(reportQuery);
Object innerResult = result.get(0);
assertTrue("Failed to return Employees correctly, Not an Object Array", Object[].class.isAssignableFrom(innerResult.getClass()));
Object resultItem = ((Object[])innerResult)[0];
assertTrue("Failed to return Employees correctly, Not A Number", Number.class.isAssignableFrom(resultItem.getClass()));
assertTrue("Failed to return Employees correctly, Not Correct Result", ((Number)resultItem).intValue() > 1);
resultItem = ((Object[])innerResult)[1];
assertTrue("Failed to return Employees correctly, Not An Employee", Employee.class.isAssignableFrom(resultItem.getClass()));
resultItem = ((Object[])innerResult)[2];
assertTrue("Failed to return Employees correctly, Not a City", String.class.isAssignableFrom(resultItem.getClass()));
}
public void testInheritanceMultiTableException(){
try {
ReportQuery reportQuery = new ReportQuery();
reportQuery.returnWithoutReportQueryResult();
reportQuery.setReferenceClass(Project.class);
ExpressionBuilder empbuilder = new ExpressionBuilder();
reportQuery.addAttribute("project",empbuilder);
List result = (List)getServerSession("fieldaccess").executeQuery(reportQuery);
result.size();
} catch (QueryException ex){
return;
}
fail("Failed to throw exception, ReportItems must not have multi-table inheritance.");
}
public void testReturnRootObject(){
ReportQuery reportQuery = new ReportQuery();
reportQuery.returnWithoutReportQueryResult();
reportQuery.setReferenceClass(LargeProject.class);
ExpressionBuilder empbuilder = new ExpressionBuilder();
reportQuery.addAttribute("project",empbuilder);
List result = (List)getServerSession("fieldaccess").executeQuery(reportQuery);
Object resultItem = result.get(0);
assertTrue("Failed to return Project as expression root correctly, Not A Project", LargeProject.class.isAssignableFrom(resultItem.getClass()));
}
public static Test suite() {
return new TestSuite(ReportQueryMultipleReturnTestSuite.class);
}
}