blob: 00c04922f76e695f54463cb88b3a2a8a3c65f267 [file] [log] [blame]
/*
* Copyright (c) 2005, 2021 Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2005, 2015 SAP. 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:
// SAP - initial API and implementation
package org.eclipse.persistence.testing.tests.wdf.jpa1.relation;
import java.sql.Date;
import java.sql.SQLException;
import java.util.Collection;
import java.util.HashSet;
import java.util.Set;
import jakarta.persistence.EntityManager;
import org.eclipse.persistence.testing.framework.wdf.JPAEnvironment;
import org.eclipse.persistence.testing.models.wdf.jpa1.employee.Department;
import org.eclipse.persistence.testing.models.wdf.jpa1.employee.Employee;
import org.eclipse.persistence.testing.models.wdf.jpa1.employee.Patent;
import org.eclipse.persistence.testing.models.wdf.jpa1.employee.Project;
import org.eclipse.persistence.testing.models.wdf.jpa1.employee.Review;
import org.eclipse.persistence.testing.tests.wdf.jpa1.JPA1Base;
import org.junit.Test;
@SuppressWarnings("unchecked")
public class TestMultipleRelationships extends JPA1Base {
private static final int HANS_ID_VALUE = 1;
private static final int FRED_ID_VALUE = 2;
private static final Integer HANS_ID = HANS_ID_VALUE;
private static final Project PUHLEN = new Project("G\u00fcrteltiere puhlen");
private static final Project PINSELN = new Project("B\u00e4uche pinseln");
private static final Project FALTEN = new Project("Zitronen falten");
private static final Project ZAEHLEN = new Project("Erbsen z\u00e4hlen");
private static final Project LINKEN = new Project("Eclipse linken");
private static final Review PERFORMANCE = new Review(1, Date.valueOf("2005-10-07"), "performance");
private static final Review PASSION = new Review(2, Date.valueOf("2005-10-08"), "passion");
private static final Review PROFICIENCY = new Review(3, Date.valueOf("2005-10-09"), "proficiency");
private static final Patent LIGHT_BULB = new Patent("light bulb", 1879, "artificial light source", java.sql.Date
.valueOf("1879-11-05"));
private static final Patent PHONOGRAPGH = new Patent("phonograph", 1877, "simple voice recorder", java.sql.Date
.valueOf("1877-01-13"));
private static final Patent ALTERNATING_CURRENT = new Patent("alternating current", 1888, "alternating current", Date
.valueOf("1888-03-17"));
private static final Patent HELICOPTER = new Patent("helicopter", 1922, "flying machine", Date.valueOf("1922-11-11")); // Etienne
// Oehmichen
private void seedDataModel() throws SQLException {
/*
* 5 Projects:
*/
clearAllTables(); // clear all tables;
JPAEnvironment env = getEnvironment();
EntityManager em = env.getEntityManager();
try {
env.beginTransaction(em);
Department dep = new Department(17, "diverses");
em.persist(dep);
em.persist(PUHLEN);
em.persist(PINSELN);
em.persist(FALTEN);
em.persist(ZAEHLEN);
em.persist(LINKEN);
em.persist(LIGHT_BULB);
em.persist(PHONOGRAPGH);
em.persist(ALTERNATING_CURRENT);
em.persist(HELICOPTER);
em.persist(PERFORMANCE);
em.persist(PASSION);
em.persist(PROFICIENCY);
Employee hans = new Employee(HANS_ID_VALUE, "Hans", "Wurst", dep);
Set<Project> hansProjects = new HashSet<Project>();
hansProjects.add(PUHLEN);
hansProjects.add(PINSELN);
hansProjects.add(FALTEN);
hans.setProjects(hansProjects);
hans.addReview(PERFORMANCE);
hans.addReview(PASSION);
Employee fred = new Employee(FRED_ID_VALUE, "Fred", "vom Jupiter", dep);
Set<Project> fredProjects = new HashSet<Project>();
fredProjects.add(FALTEN);
fredProjects.add(ZAEHLEN);
fred.setProjects(fredProjects);
fred.addReview(PROFICIENCY);
Set<Patent> fredsPatents = new HashSet<Patent>();
fredsPatents.add(LIGHT_BULB);
fredsPatents.add(PHONOGRAPGH);
fred.setPatents(fredsPatents);
Set<Patent> hansPatents = new HashSet<Patent>();
hansPatents.add(PHONOGRAPGH);
hansPatents.add(ALTERNATING_CURRENT);
hans.setPatents(hansPatents);
em.persist(hans);
em.persist(fred);
env.commitTransactionAndClear(em);
} finally {
closeEntityManager(em);
}
}
@Test
public void testCheckHans() throws SQLException {
seedDataModel(); // clear all tables;
JPAEnvironment env = getEnvironment();
EntityManager em = env.getEntityManager();
try {
env.beginTransaction(em);
Employee hans = em.find(Employee.class, HANS_ID);
Set<Review> reviews = hans.getReviews();
verify(reviews != null, "Hans has no reviews");
verify(reviews.size() == 2, "Hans has wrong number of reviews");
verify(reviews.contains(PASSION), "Hans has no passion!");
verify(reviews.contains(PERFORMANCE), "Hans has no performance!");
Set<Project> projects = hans.getProjects();
verify(projects != null, "Hans has no projects");
verify(projects.size() == 3, "Hans has wrong number of projects");
verify(projects.contains(PUHLEN), "Hans misses project " + PUHLEN.getName());
verify(projects.contains(PINSELN), "Hans misses project " + PINSELN.getName());
verify(projects.contains(FALTEN), "Hans misses project " + FALTEN.getName());
Collection<Patent> patents = hans.getPatents();
verify(patents != null, "Hans has no patens");
verify(patents.size() == 2, "Hans has wrong number of patents");
verify(patents.contains(PHONOGRAPGH), "Hans misses patent " + PHONOGRAPGH.getId().getName());
verify(patents.contains(ALTERNATING_CURRENT), "Hans misses patent " + ALTERNATING_CURRENT.getId().getName());
env.rollbackTransactionAndClear(em);
} finally {
closeEntityManager(em);
}
}
@Test
public void testDeletePatent() throws SQLException {
seedDataModel(); // clear all tables;
JPAEnvironment env = getEnvironment();
EntityManager em = env.getEntityManager();
try {
env.beginTransaction(em);
Employee hans = em.find(Employee.class, HANS_ID);
Collection<Patent> patents = hans.getPatents();
patents.remove(PHONOGRAPGH);
env.commitTransactionAndClear(em);
env.beginTransaction(em);
hans = em.find(Employee.class, HANS_ID);
Set<Review> reviews = hans.getReviews();
verify(reviews != null, "Hans has no reviews");
verify(reviews.size() == 2, "Hans has wrong number of reviews");
verify(reviews.contains(PASSION), "Hans has no passion!");
verify(reviews.contains(PERFORMANCE), "Hans has no performance!");
Set<Project> projects = hans.getProjects();
verify(projects != null, "Hans has no projects");
verify(projects.size() == 3, "Hans has wrong number of projects");
verify(projects.contains(PUHLEN), "Hans misses project " + PUHLEN.getName());
verify(projects.contains(PINSELN), "Hans misses project " + PINSELN.getName());
verify(projects.contains(FALTEN), "Hans misses project " + FALTEN.getName());
patents = hans.getPatents();
verify(patents != null, "Hans has no patens");
verify(patents.size() == 1, "Hans has wrong number of projects");
verify(patents.contains(ALTERNATING_CURRENT), "Hans misses patent " + LIGHT_BULB.getId().getName());
env.rollbackTransactionAndClear(em);
} finally {
closeEntityManager(em);
}
}
@Test
public void testAddReview() throws SQLException {
seedDataModel(); // clear all tables;
JPAEnvironment env = getEnvironment();
EntityManager em = env.getEntityManager();
try {
env.beginTransaction(em);
Employee hans = em.find(Employee.class, HANS_ID);
hans.getReviews().add(PROFICIENCY);
env.commitTransactionAndClear(em);
env.beginTransaction(em);
hans = em.find(Employee.class, HANS_ID);
Set<Review> reviews = hans.getReviews();
verify(reviews != null, "Hans has no reviews");
verify(reviews.size() == 3, "Hans has wrong number of reviews");
verify(reviews.contains(PASSION), "Hans has no passion!");
verify(reviews.contains(PERFORMANCE), "Hans has no performance!");
verify(reviews.contains(PROFICIENCY), "Hans has no performance!");
Set<Project> projects = hans.getProjects();
verify(projects != null, "Hans has no projects");
verify(projects.size() == 3, "Hans has wrong number of projects");
verify(projects.contains(PUHLEN), "Hans misses project " + PUHLEN.getName());
verify(projects.contains(PINSELN), "Hans misses project " + PINSELN.getName());
verify(projects.contains(FALTEN), "Hans misses project " + FALTEN.getName());
Collection<Patent> patents = hans.getPatents();
verify(patents != null, "Hans has no patens");
verify(patents.size() == 2, "Hans has wrong number of patents");
verify(patents.contains(PHONOGRAPGH), "Hans misses patent " + PHONOGRAPGH.getId().getName());
verify(patents.contains(ALTERNATING_CURRENT), "Hans misses patent " + ALTERNATING_CURRENT.getId().getName());
env.rollbackTransactionAndClear(em);
} finally {
closeEntityManager(em);
}
}
}