blob: 5cc4a85b887af015de6e2916aeb88ebc4c43e8cf [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.spring;
import java.lang.reflect.Field;
import java.util.List;
import jakarta.persistence.Query;
import org.springframework.dao.InvalidDataAccessApiUsageException;
import junit.framework.TestCase;
import test.org.eclipse.persistence.testing.models.jpa.spring.Address;
import test.org.eclipse.persistence.testing.models.jpa.spring.Route;
import test.org.eclipse.persistence.testing.models.jpa.spring.Truck;
/**
* Base Junit TestClass for Spring Framework tests.
* All test methods here will be exercised by the different Spring configurations that extend this class.
*/
public abstract class SpringJunitTestCase extends TestCase {
private EntityManagerWrapper em;
protected void setEntityManager(EntityManagerWrapper em) {
this.em = em;
}
public void testPersist(){
Truck truck = new Truck("persist");
try {
em.persist(truck);
assertTrue(((Truck)em.find(truck)).getDriverName().equals("persist"));
} finally {
em.remove(truck);
}
}
//With this entity model, removing the truck should not delete the route nor address
public void testCascadePersistwithRemove(){
Truck truck = new Truck("cascade");
Route route = new Route(155);
Address address = new Address(1, 1, "First St.");
route.addAddress(address);
truck.setRoute(route);
try {
em.persist(truck);
assertTrue(((Truck)em.find(truck)).getDriverName().equals("cascade"));
assertTrue(((Route)em.find(route)).getAverageTimeMins() == 155);
assertTrue(((Address)em.find(address)).getStreet().equals("First St."));
em.remove(truck);
assertTrue(em.find(truck) == null);
assertTrue(((Route)em.find(route)).getAverageTimeMins() == 155);
assertTrue(((Address)em.find(address)).getStreet().equals("First St."));
} finally {
route.removeAddress(address);
em.remove(address);
em.remove(route);
}
}
public void testRemove(){
Truck truck = new Truck("remove");
em.persist(truck);
assertTrue(((Truck) em.find(truck)).getDriverName().equals("remove"));
em.remove(truck);
assertTrue(em.find(truck) == null);
}
public void testContains(){
Truck truck = new Truck("contains");
try {
em.persist(truck);
assertTrue(em.contains(truck));
assertFalse(em.contains(new Truck("doesNotContain")));
} finally {
em.remove(truck);
}
}
public void testMerge(){
Truck truck = new Truck("merge");
try {
truck = (Truck)em.merge(truck);
assertTrue(((Truck) em.find(truck)).getDriverName().equals("merge"));
} finally {
em.remove(truck);
}
}
public void testRefresh(){
Truck truck = new Truck("refresh");
try {
em.persist(truck);
em.flush();
assertTrue(((Truck) em.find(truck)).getDriverName().equals("refresh"));
truck.setDriverName("changeRefresh");
em.refresh(truck);
assertTrue(truck.getDriverName().equals("refresh"));
} finally {
em.remove(truck);
}
}
public void testFlush(){
Truck truck = new Truck("flush");
try {
em.persist(truck);
assertTrue(((Truck) em.find(truck)).getDriverName().equals("flush"));
truck.setDriverName("reflush");
em.flush();
assertTrue(((Truck) em.find(truck)).getDriverName().equals("reflush"));
} finally {
em.remove(truck);
}
}
public void testCreateNativeQuery(){
Route route = new Route();
route.setAverageTimeMins(150);
em.persist(route);
Route r = (Route)em.createNativeQuery(
"SELECT id as ID, averageTimeMins as AVERAGETIMEMINS FROM SPRING_TLE_ROUTE WHERE (ID="+route.getId()+")", Route.class)
.getSingleResult();
assertTrue(r.getAverageTimeMins() == 150);
em.executeNativeQuery("DELETE FROM SPRING_TLE_ROUTE WHERE (ID="+route.getId()+")");
List<?> l = em.createNativeQuery(
"SELECT id as ID, averageTimeMins as AVERAGETIMEMINS FROM SPRING_TLE_ROUTE WHERE (ID="+route.getId()+")", Route.class)
.getResultList();
assertTrue(l.size() == 0);
}
public void testNamedQuery(){
Truck truck = new Truck("namedQuery");
Route route = new Route();
truck.setRoute(route);
try {
em.persist(truck);
Query q = em.createNamedQuery("findTruckByDriverName");
q.setParameter(1, "namedQuery");
assertTrue(((Truck)q.getSingleResult()).getRoute().getId() == route.getId());
} finally {
em.remove(truck);
em.remove(route);
}
}
public void testCreateQuery(){
Truck truck = new Truck("createQuery");
try {
em.persist(truck);
em.flush();
Query q = em.createQuery("SELECT t FROM Truck t WHERE t.driverName LIKE ?1");
q.setParameter(1, "createQuery");
assertTrue(((Truck)q.getSingleResult()).getId() == truck.getId());
} finally {
em.remove(truck);
}
}
//COMMENT OUT if weaving is disabled
public void testAddressVH() {
Field f = null;
try {
f = Address.class.getDeclaredField("_persistence_route_vh");
} catch (Exception e) {
assertFalse("Exception when Address value holder retrieved", true);
}
assertNotNull("Address class does not have '_persistence_route_vh' field", f);
}
public void testDataExceptionTranslation(){
try {
em.refresh(new Truck("detachedTruck"));
assertFalse("No exception thrown with bad refresh", true);
}catch (InvalidDataAccessApiUsageException idaaue) {
//expected, so do nothing
}catch (Exception e) {
assertFalse("Wrong exception thrown with bad refresh: " + e, true);
}
}
}