| /* |
| * 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.dao; |
| |
| import java.lang.reflect.Field; |
| import java.util.List; |
| |
| import static org.junit.Assert.*; |
| |
| import org.junit.Ignore; |
| import org.junit.Test; |
| import org.springframework.beans.factory.annotation.Autowired; |
| import org.springframework.dao.InvalidDataAccessApiUsageException; |
| |
| import org.springframework.transaction.annotation.Transactional; |
| 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 TestClass for Spring Framework tests that use Spring's AbstractJpaTests. |
| * All test methods will be exercised by the different Spring configurations that extend this class; |
| * they will all require and implementation of a dao. |
| * @see org.eclipse.persistence.testing.tests.jpa.spring.dao.SpringDao |
| */ |
| |
| @Transactional |
| public abstract class SpringAbstractJpaTestsCase { |
| |
| @Autowired |
| private SpringDao dao; |
| |
| @Test |
| public void testPersist(){ |
| Truck truck = new Truck("persist"); |
| try { |
| dao.persist(truck); |
| assertTrue(((Truck)dao.find(truck)).getDriverName().equals("persist")); |
| }catch (Exception e) { |
| assertFalse("Error during persist: " + e, true); |
| }finally { |
| dao.remove(truck); |
| } |
| } |
| |
| //With this entity model, removing the truck should not delete the route nor address |
| @Test |
| 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 { |
| dao.persist(truck); |
| assertTrue(((Truck)dao.find(truck)).getDriverName().equals("cascade")); |
| assertTrue(((Route)dao.find(route)).getAverageTimeMins() == 155); |
| assertTrue(((Address)dao.find(address)).getStreet().equals("First St.")); |
| |
| dao.remove(truck); |
| assertTrue(dao.find(truck) == null); |
| assertTrue(((Route)dao.find(route)).getAverageTimeMins() == 155); |
| assertTrue(((Address)dao.find(address)).getStreet().equals("First St.")); |
| }catch (Exception e) { |
| assertFalse("Error during cascade persist with remove: " + e, true); |
| }finally { |
| route.removeAddress(address); |
| dao.remove(address); |
| dao.remove(route); |
| } |
| } |
| |
| @Test |
| public void testRemove(){ |
| Truck truck = new Truck("remove"); |
| try { |
| dao.persist(truck); |
| assertTrue(((Truck) dao.find(truck)).getDriverName().equals("remove")); |
| dao.remove(truck); |
| assertTrue(dao.find(truck) == null); |
| }catch (Exception e) { |
| assertFalse("Error during remove: " + e, true); |
| } |
| } |
| |
| @Test |
| public void testContains(){ |
| Truck truck = new Truck("contains"); |
| try { |
| dao.persist(truck); |
| assertTrue(dao.contains(truck)); |
| assertFalse(dao.contains(new Truck("doesNotContain"))); |
| }catch (Exception e) { |
| assertFalse("Error during contains: " + e, true); |
| }finally { |
| dao.remove(truck); |
| } |
| } |
| |
| @Test |
| public void testMerge(){ |
| Truck truck = new Truck("merge"); |
| try { |
| truck = (Truck)dao.merge(truck); |
| assertTrue(((Truck) dao.find(truck)).getDriverName().equals("merge")); |
| }catch (Exception e) { |
| assertFalse("Error during merge: " + e, true); |
| }finally { |
| dao.remove(truck); |
| } |
| } |
| |
| @Test |
| public void testRefresh(){ |
| Truck truck = new Truck("refresh"); |
| try { |
| dao.persist(truck); |
| dao.flush(); |
| assertTrue(((Truck) dao.find(truck)).getDriverName().equals("refresh")); |
| truck.setDriverName("changeRefresh"); |
| dao.refresh(truck); |
| assertTrue(truck.getDriverName().equals("refresh")); |
| }catch (Exception e) { |
| assertFalse("Error during refresh: " + e, true); |
| }finally { |
| dao.remove(truck); |
| } |
| } |
| |
| @Test |
| public void testFlush(){ |
| Truck truck = new Truck("flush"); |
| try { |
| dao.persist(truck); |
| assertTrue(((Truck) dao.find(truck)).getDriverName().equals("flush")); |
| truck.setDriverName("reflush"); |
| dao.flush(); |
| assertTrue(((Truck) dao.find(truck)).getDriverName().equals("reflush")); |
| }catch (Exception e) { |
| assertFalse("Error during flush: " + e, true); |
| }finally { |
| dao.remove(truck); |
| } |
| } |
| |
| @Test |
| public void testNamedQuery(){ |
| Truck truck = new Truck("namedQuery"); |
| try { |
| dao.persist(truck); |
| List<?> l = dao.findByNamedQuery("findTruckByDriverName", "namedQuery"); |
| assertTrue(l.contains(truck)); |
| }catch (Exception e){ |
| assertFalse("Error during named query: " + e, true); |
| }finally { |
| dao.remove(truck); |
| } |
| } |
| |
| //COMMENT OUT test if weaving is disabled |
| @Test |
| 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); |
| } |
| |
| @Ignore |
| @Test |
| public void testDataExceptionTranslation(){ |
| try { |
| dao.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); |
| } |
| } |
| } |