blob: cdc561cf89eb215accc25118514d241e4dc32799 [file] [log] [blame]
/*
* Copyright (c) 1998, 2020 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:
// dclarke - Dynamic Persistence
// http://wiki.eclipse.org/EclipseLink/Development/Dynamic
// (https://bugs.eclipse.org/bugs/show_bug.cgi?id=200045)
// mnorman - tweaks to work from Ant command-line,
// get database properties from System, etc.
//
package org.eclipse.persistence.testing.tests.dynamic.dynamichelper;
//javase imports
import java.util.List;
//JUnit4 imports
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
//EclipseLink imports
import org.eclipse.persistence.dynamic.DynamicClassLoader;
import org.eclipse.persistence.dynamic.DynamicEntity;
import org.eclipse.persistence.dynamic.DynamicHelper;
import org.eclipse.persistence.dynamic.DynamicType;
import org.eclipse.persistence.dynamic.DynamicTypeBuilder;
import org.eclipse.persistence.expressions.ExpressionBuilder;
import org.eclipse.persistence.queries.ReadAllQuery;
import org.eclipse.persistence.queries.ReadObjectQuery;
import org.eclipse.persistence.queries.ReportQuery;
import org.eclipse.persistence.sessions.DatabaseSession;
import org.eclipse.persistence.sessions.UnitOfWork;
//domain-specific (testing) inmports
import static org.eclipse.persistence.testing.tests.dynamic.DynamicTestingHelper.createEmptySession;
import static org.eclipse.persistence.testing.tests.dynamic.DynamicTestingHelper.createSession;
/**
* Set of tests verifying that the DynamicHelper functions as expected.
*/
public class DynamicHelperTestSuite {
public static final String PACKAGE_PREFIX =
DynamicHelperTestSuite.class.getPackage().getName();
public static final String EMPLOYEE_CLASSNAME = PACKAGE_PREFIX + ".Employee";
//test fixtures
static DatabaseSession session = null;
static DynamicHelper dynamicHelper = null;
@BeforeClass
public static void setUp() {
session = createSession();
dynamicHelper = new DynamicHelper(session);
DynamicClassLoader dcl = dynamicHelper.getDynamicClassLoader();
Class<?> empClass = dcl.createDynamicClass(EMPLOYEE_CLASSNAME);
DynamicTypeBuilder typeBuilder = new DynamicTypeBuilder(empClass, null, "D_EMPLOYEE");
typeBuilder.setPrimaryKeyFields("EMP_ID");
typeBuilder.addDirectMapping("id", int.class, "EMP_ID");
typeBuilder.addDirectMapping("firstName", String.class, "F_NAME");
typeBuilder.addDirectMapping("lastName", String.class, "L_NAME");
dynamicHelper.addTypes(true, false, typeBuilder.getType());
DynamicType empType = new DynamicHelper(session).getType("Employee");
assertNotNull("No type found for Employee", empType);
//Populate table with a single Employee
DynamicEntity e1 = empType.newDynamicEntity();
e1.set("id", 1);
e1.set("firstName", "Mike");
e1.set("lastName", "Norman");
UnitOfWork uow = session.acquireUnitOfWork();
uow.registerNewObject(e1);
uow.commit();
session.getIdentityMapAccessor().initializeAllIdentityMaps();
}
@AfterClass
public static void tearDown() {
session.executeNonSelectingSQL("DROP TABLE D_EMPLOYEE");
session.logout();
session = null;
dynamicHelper = null;
}
@Test
public void createQuery_ValidReadObjectQuery() throws Exception {
ReadObjectQuery query = dynamicHelper.newReadObjectQuery("Employee");
assertNotNull(query);
query.setSelectionCriteria(query.getExpressionBuilder().get("id").equal(1L));
DynamicEntity emp = (DynamicEntity) session.executeQuery(query);
assertNotNull(emp);
}
@SuppressWarnings("unchecked")
@Test
public void createQuery_ValidReadAllQuery() throws Exception {
ReadAllQuery query = dynamicHelper.newReadAllQuery("Employee");
assertNotNull(query);
List<DynamicEntity> emps = (List<DynamicEntity>) session.executeQuery(query);
assertNotNull(emps);
}
@Test
public void createQuery_ValidReportQuery() throws Exception {
ReportQuery query = dynamicHelper.newReportQuery("Employee", new ExpressionBuilder());
assertNotNull(query);
query.addCount();
query.setShouldReturnSingleValue(true);
Number count = (Number) session.executeQuery(query);
assertNotNull(count);
assertEquals(1L, count.longValue());
}
@Test(expected=IllegalArgumentException.class)
public void nullArgs() {
new DynamicHelper(createEmptySession()).newReadAllQuery(null);
}
}