blob: 60731f2278835b86fc0a5e56a30943cbf26bb842 [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.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
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.PatentId;
import org.eclipse.persistence.testing.tests.wdf.jpa1.JPA1Base;
import org.junit.Test;
public class TestEmployeePatent extends JPA1Base {
private static final Integer EDISON = 26;
private static final Integer TESLA = 32;
@Override
public void setup() {
final JPAEnvironment env = getEnvironment();
final EntityManager em = env.getEntityManager();
try {
env.beginTransaction(em);
Department dep = new Department(25, "R&D");
em.persist(dep);
em.persist(new Employee(EDISON, "Thomas Alva", "Edison", dep));
em.persist(new Employee(TESLA, "Nikola", "Tesla", dep));
for (int i = 0; i < TEST_DATA.length; i++) {
em.persist(TEST_DATA[i]);
}
em.flush();
env.commitTransactionAndClear(em);
} finally {
closeEntityManager(em);
}
}
private static final Patent[] TEST_DATA = new Patent[] {
new Patent("light bulb", 1879, "artificial light source", java.sql.Date.valueOf("1879-11-05")),
new Patent("phonograph", 1877, "simple voice recorder", java.sql.Date.valueOf("1877-01-13")),
new Patent("alternating current", 1888, "alternating current", Date.valueOf("1888-03-17")),
new Patent("helicopter", 1922, "flying machine", Date.valueOf("1922-11-11")), };
@Test
public void testPatentsAsList() {
final JPAEnvironment env = getEnvironment();
final EntityManager em = env.getEntityManager();
final List<Patent> testPatents = Arrays.asList(TEST_DATA);
try {
env.beginTransaction(em);
final Employee employee = em.find(Employee.class, EDISON);
employee.setPatents(testPatents);
em.flush();
env.commitTransactionAndClear(em);
env.beginTransaction(em);
final Employee storedEmployee = em.find(Employee.class, EDISON);
if (null == storedEmployee) {
flop("test employee vanished.");
}
final Collection<Patent> patents = storedEmployee.getPatents();
verify(patents != null, "patents not stored");
verify(patents.size() == testPatents.size(), "Wrong number of patents retrieved. Expected: " + testPatents.size()
+ ", but got: " + patents.size() + ".");
env.commitTransactionAndClear(em);
checkPatents(patents, testPatents);
} finally {
closeEntityManager(em);
}
}
@Test
public void testPatentsAsSet() {
final JPAEnvironment env = getEnvironment();
final EntityManager em = env.getEntityManager();
final Set<Patent> testPatents = new HashSet<Patent>();
testPatents.addAll(Arrays.asList(TEST_DATA));
try {
env.beginTransaction(em);
final Employee employee = em.find(Employee.class, EDISON);
employee.setPatents(testPatents);
em.flush();
env.commitTransactionAndClear(em);
env.beginTransaction(em);
final Employee storedEmployee = em.find(Employee.class, EDISON);
if (null == storedEmployee) {
flop("test employee vanished.");
}
final Collection<Patent> patents = storedEmployee.getPatents();
verify(patents != null, "patents not stored");
verify(patents.size() == testPatents.size(), "Wrong number of patents retrieved. Expected: " + testPatents.size()
+ ", but got: " + patents.size() + ".");
env.commitTransactionAndClear(em);
checkPatents(patents, testPatents);
} finally {
closeEntityManager(em);
}
}
@Test
public void testSharedPatents() {
final JPAEnvironment env = getEnvironment();
final EntityManager em = env.getEntityManager();
final Set<Patent> edisonPatents = new HashSet<Patent>();
edisonPatents.add(TEST_DATA[0]);
edisonPatents.add(TEST_DATA[1]);
edisonPatents.add(TEST_DATA[3]);
final List<Patent> teslaPatents = new ArrayList<Patent>();
teslaPatents.add(TEST_DATA[3]);
teslaPatents.add(TEST_DATA[2]);
try {
env.beginTransaction(em);
final Employee edison = em.find(Employee.class, EDISON);
edison.setPatents(edisonPatents);
final Employee tesla = em.find(Employee.class, TESLA);
tesla.setPatents(teslaPatents);
em.flush();
env.commitTransactionAndClear(em);
env.beginTransaction(em);
final Employee persistedEdison = em.find(Employee.class, EDISON);
if (null == persistedEdison) {
flop("Edison vanished.");
}
final Employee persistedTesla = em.find(Employee.class, TESLA);
if (null == persistedTesla) {
flop("Tesla vanished.");
}
final Collection<Patent> persistedTeslaPatents = persistedTesla.getPatents();
verify(persistedTeslaPatents != null, "Teslas patents not stored");
verify(persistedTeslaPatents.size() == teslaPatents.size(), "Wrong number of patents retrieved. Expected: "
+ teslaPatents.size() + ", but got: " + persistedTeslaPatents.size() + ".");
final Collection<Patent> persistedEdisonPatents = persistedEdison.getPatents();
verify(persistedEdisonPatents != null, "Edisons patents not stored");
verify(persistedEdisonPatents.size() == edisonPatents.size(), "Wrong number of patents retrieved. Expected: "
+ edisonPatents.size() + ", but got: " + persistedEdisonPatents.size() + ".");
env.commitTransactionAndClear(em);
checkPatents(persistedTeslaPatents, teslaPatents);
checkPatents(persistedEdisonPatents, edisonPatents);
} finally {
closeEntityManager(em);
}
}
@SuppressWarnings("unchecked")
private void checkPatents(final Collection<Patent> patents, final Collection<Patent> testPatents) {
final Map<PatentId, Patent> checkMap = new HashMap<PatentId, Patent>();
for (final Patent testPatent : testPatents) {
checkMap.put(testPatent.getId(), testPatent);
}
for (final Iterator<Patent> iter = patents.iterator(); iter.hasNext();) {
final Patent patent = iter.next();
final Patent check = checkMap.get(patent.getId());
verify(check != null, "retrieved unknown patent with name >>" + patent.getId().getName() + "<<.");
verify(check.getDescription().equals(patent.getDescription()), "patent with name >>" + patent.getId().getName()
+ "<< has wrong description >>" + patent.getDescription() + "<<, expected was >>" + check.getDescription()
+ "<<.");
verify(check.getAssignation().equals(patent.getAssignation()), "patent with name >>" + patent.getId().getName()
+ "<< has wrong assignation >>" + patent.getAssignation() + "<<, expected was >>" + check.getAssignation()
+ "<<.");
}
}
}