blob: e46f87821d6d33f385c6ac6bc728732a9dd6526a [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 1998, 2009 Oracle. All rights reserved.
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0
* which accompanies this distribution.
* The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
* and the Eclipse Distribution License is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* Contributors:
* dclarke - Bug 288307: Fetch Plan Extension Incubator
******************************************************************************/
package test.fetchplan;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.PersistenceContext;
import model.Employee;
import model.PhoneNumber;
import org.eclipse.persistence.extension.fetchplan.FetchItem;
import org.eclipse.persistence.extension.fetchplan.FetchPlan;
import org.eclipse.persistence.extension.fetchplan.JpaFetchPlanHelper;
import org.eclipse.persistence.jpa.JpaHelper;
import org.eclipse.persistence.queries.FetchGroup;
import org.junit.Test;
import testing.EclipseLinkJPATest;
/**
* Basic set of test verifying that the FetchPlan public API performs as
* expected. No persistence related validation or usage is performed.
*
* @author dclarke
* @since EclipseLink 1.2
*/
@PersistenceContext(unitName = "employee")
public class FetchPlanAPITests extends EclipseLinkJPATest {
@Test
public void verifyConstructor_nullEntityClass() {
FetchPlan plan = new FetchPlan(null);
assertNull(plan.getEntityClass());
try {
plan.initialize(null);
} catch (IllegalStateException ise) {
return;
}
fail("IllegalStateException expected on initialize with null entityClass");
}
@Test
public void verifyConstructor_withEntityClass() {
FetchPlan plan = new FetchPlan(Employee.class);
assertEquals(Employee.class, plan.getEntityClass());
assertTrue(plan.getFetchItems().isEmpty());
// With a valid entity class and null session initialize should throw an
// NPE
try {
plan.initialize(null);
} catch (NullPointerException npe) {
return;
}
fail("NullPointerException expected on initialize with null session");
}
@Test
public void verifyGetFetchItems_add() {
FetchPlan plan = new FetchPlan(Employee.class);
assertTrue(plan.getFetchItems().isEmpty());
// With a valid entity class and null session initialize should throw an
// NPE
try {
plan.getFetchItems().add(null);
} catch (UnsupportedOperationException npe) {
return;
}
fail("UnsupportedOperationException expected on Fetchplan.getFetchItems().add()");
}
@Test
public void verifyAddAttribute_nullString() {
FetchPlan plan = new FetchPlan(Employee.class);
assertTrue(plan.getFetchItems().isEmpty());
// With a valid entity class and null session initialize should throw an
// NPE
try {
plan.addAttribute((String) null);
} catch (IllegalArgumentException e) {
return;
}
fail("IllegalArgumentException expected");
}
@Test
public void verifyAddAttribute_nullStringArray() {
FetchPlan plan = new FetchPlan(Employee.class);
assertTrue(plan.getFetchItems().isEmpty());
// With a valid entity class and null session initialize should throw an
// NPE
try {
plan.addAttribute((String[]) null);
} catch (IllegalArgumentException e) {
return;
}
fail("IllegalArgumentException expected");
}
@Test
public void verifyAddAttribute_emptyString() {
FetchPlan plan = new FetchPlan(Employee.class);
assertTrue(plan.getFetchItems().isEmpty());
// With a valid entity class and null session initialize should throw an
// NPE
try {
plan.addAttribute("");
} catch (IllegalArgumentException e) {
return;
}
fail("IllegalArgumentException expected");
}
@Test
public void verifyAddAttribute_period() {
FetchPlan plan = new FetchPlan(Employee.class);
assertTrue(plan.getFetchItems().isEmpty());
// With a valid entity class and null session initialize should throw an
// NPE
try {
plan.addAttribute(".");
} catch (IllegalArgumentException e) {
return;
}
fail("IllegalArgumentException expected");
}
@Test
public void verifyAddAttribute_EndWithPeriod() {
FetchPlan plan = new FetchPlan(Employee.class);
assertTrue(plan.getFetchItems().isEmpty());
// With a valid entity class and null session initialize should throw an
// NPE
try {
plan.addAttribute("test.");
} catch (IllegalArgumentException e) {
return;
}
fail("IllegalArgumentException expected");
}
@Test
public void verifyAddAttribute_StartWithPeriod() {
FetchPlan plan = new FetchPlan(Employee.class);
assertTrue(plan.getFetchItems().isEmpty());
// With a valid entity class and null session initialize should throw an
// NPE
try {
plan.addAttribute(".test");
} catch (IllegalArgumentException e) {
return;
}
fail("IllegalArgumentException expected");
}
@Test
public void verifyAddAttribute_StartAndEndWithPeriod() {
FetchPlan plan = new FetchPlan(Employee.class);
assertTrue(plan.getFetchItems().isEmpty());
// With a valid entity class and null session initialize should throw an
// NPE
try {
plan.addAttribute(".test.");
} catch (IllegalArgumentException e) {
return;
}
fail("IllegalArgumentException expected");
}
@Test
public void verifyAddAttribute_space() {
FetchPlan plan = new FetchPlan(Employee.class);
assertTrue(plan.getFetchItems().isEmpty());
// With a valid entity class and null session initialize should throw an
// NPE
try {
plan.addAttribute(" ");
} catch (IllegalArgumentException e) {
return;
}
fail("IllegalArgumentException expected");
}
@Test
public void verifyAddAttribute_basic() {
FetchPlan plan = new FetchPlan(Employee.class);
assertTrue(plan.getFetchItems().isEmpty());
plan.addAttribute("attribute");
assertFalse(plan.getFetchItems().isEmpty());
assertEquals(1, plan.getFetchItems().size());
FetchItem item = (FetchItem) plan.getFetchItems().toArray()[0];
assertEquals("attribute", item.getName());
assertNull(item.getFetchPlan());
assertSame(plan, item.getParent());
}
@Test
public void verifyAddAttribute_nested() {
FetchPlan plan = new FetchPlan(Employee.class);
assertTrue(plan.getFetchItems().isEmpty());
plan.addAttribute("attribute");
assertFalse(plan.getFetchItems().isEmpty());
assertEquals(1, plan.getFetchItems().size());
FetchItem item = (FetchItem) plan.getFetchItems().toArray()[0];
assertEquals("attribute", item.getName());
assertNull(item.getFetchPlan());
assertSame(plan, item.getParent());
plan.addAttribute("attribute.attribute2");
assertEquals(1, plan.getFetchItems().size());
assertNotNull(item.getFetchPlan());
FetchItem item2 = (FetchItem) item.getFetchPlan().getFetchItems().toArray()[0];
assertEquals("attribute2", item2.getName());
assertNull(item2.getFetchPlan());
assertSame(item.getFetchPlan(), item2.getParent());
}
@Test
public void verifyContains_nullString() {
FetchPlan fp = new FetchPlan(Employee.class);
try {
fp.containsAttribute((String) null);
} catch (IllegalArgumentException e) {
return;
}
fail("IllegalArgumentException expected.");
}
@Test
public void verifyContains_nullStringArray() {
FetchPlan fp = new FetchPlan(Employee.class);
try {
fp.containsAttribute((String[]) null);
} catch (IllegalArgumentException e) {
return;
}
fail("IllegalArgumentException expected.");
}
@Test
public void verifyContains_emptyString() {
FetchPlan fp = new FetchPlan(Employee.class);
try {
fp.containsAttribute("");
} catch (IllegalArgumentException e) {
return;
}
fail("IllegalArgumentException expected.");
}
@Test
public void verifyContains_emptyStringArray() {
FetchPlan fp = new FetchPlan(Employee.class);
try {
fp.containsAttribute(new String[0]);
} catch (IllegalArgumentException e) {
return;
}
fail("IllegalArgumentException expected.");
}
@Test
public void verifyContains_dot() {
FetchPlan fp = new FetchPlan(Employee.class);
try {
fp.containsAttribute(".");
} catch (IllegalArgumentException e) {
return;
}
fail("IllegalArgumentException expected.");
}
@Test
public void verifyContains_nonExistent() {
FetchPlan fp = new FetchPlan(Employee.class);
assertTrue(fp.getFetchItems().isEmpty());
assertFalse(fp.containsAttribute("test"));
assertFalse(fp.containsAttribute("test.test"));
assertTrue(fp.getFetchItems().isEmpty());
}
@Test
public void verifyCreateFetchGroup_empty() {
FetchPlan fp = new FetchPlan("empty", Employee.class);
FetchGroup fg = fp.createFetchGroup();
assertNotNull(fg);
assertTrue(fg.getAttributes().isEmpty());
assertEquals("FetchPlan(empty)_fetch-group", fg.getName());
}
@Test
public void verifyCopy_null_null() {
FetchPlan fp = new FetchPlan(Employee.class);
try {
fp.copy(null, null);
} catch (NullPointerException e) {
return;
}
fail("NullPointerException expected");
}
@Test
public void verifyFetch_null_null() {
FetchPlan fp = new FetchPlan(Employee.class);
try {
fp.fetch(null, null);
} catch (NullPointerException e) {
return;
}
fail("NullPointerException expected");
}
@Test
public void verifyFetch_null_0_null() {
FetchPlan fp = new FetchPlan(Employee.class);
try {
fp.fetch(null, 0, null);
} catch (NullPointerException e) {
return;
}
fail("NullPointerException expected");
}
@Test
public void jpaFetchGroupHelper_addDefaultFetchGroup_nullEM_null() {
try {
JpaFetchPlanHelper.addDefaultFetchAttributes((EntityManager) null, null);
} catch (NullPointerException e) {
return;
}
fail("NullPointerException expected");
}
@Test
public void jpaFetchGroupHelper_addDefaultFetchGroup_nullEMF_null() {
try {
JpaFetchPlanHelper.addDefaultFetchAttributes((EntityManagerFactory) null, null);
} catch (NullPointerException e) {
return;
}
fail("NullPointerException expected");
}
@Test
public void jpaFetchGroupHelper_addDefaultFetchGroup_EM_null() {
try {
JpaFetchPlanHelper.addDefaultFetchAttributes(getEntityManager(), null);
} catch (NullPointerException e) {
return;
}
fail("NullPointerException expected");
}
@Test
public void jpaFetchGroupHelper_addDefaultFetchGroup_NoEntityClass() {
FetchPlan fp = new FetchPlan(null);
try {
JpaFetchPlanHelper.addDefaultFetchAttributes(getEntityManager(), fp);
} catch (IllegalArgumentException e) {
return;
}
fail("IllegalArgumentException expected");
}
@Test
public void jpaFetchGroupHelper_addDefaultFetchGroup_UnknownEntityClass() {
FetchPlan fp = new FetchPlan(Object.class);
try {
JpaFetchPlanHelper.addDefaultFetchAttributes(getEntityManager(), fp);
} catch (IllegalArgumentException e) {
return;
}
fail("IllegalArgumentException expected");
}
@Test
public void jpaFetchGroupHelper_addNamedFetchGroup_nullEM_null() {
try {
JpaFetchPlanHelper.addNamedFetchGroupAttributes((EntityManager) null, null, null);
} catch (NullPointerException e) {
return;
}
fail("NullPointerException expected");
}
@Test
public void jpaFetchGroupHelper_addNamedFetchGroup_nullEMF_null() {
try {
JpaFetchPlanHelper.addNamedFetchGroupAttributes((EntityManagerFactory) null, null, null);
} catch (NullPointerException e) {
return;
}
fail("NullPointerException expected");
}
@Test
public void jpaFetchGroupHelper_addNamedFetchGroup_EM_null_null() {
try {
JpaFetchPlanHelper.addNamedFetchGroupAttributes(getEntityManager(), null, null);
} catch (NullPointerException e) {
return;
}
fail("NullPointerException expected");
}
@Test
public void jpaFetchGroupHelper_addNamedFetchGroup_NoEntityClass() {
FetchPlan fp = new FetchPlan(null);
try {
JpaFetchPlanHelper.addNamedFetchGroupAttributes(getEntityManager(), "unknown", fp);
} catch (IllegalArgumentException e) {
return;
}
fail("IllegalArgumentException expected");
}
@Test
public void jpaFetchGroupHelper_addNamedFetchGroup_UnknownEntityClass() {
FetchPlan fp = new FetchPlan(Object.class);
try {
JpaFetchPlanHelper.addNamedFetchGroupAttributes(getEntityManager(), "unknown", fp);
} catch (IllegalArgumentException e) {
return;
}
fail("IllegalArgumentException expected");
}
@Test
public void jpaFetchGroupHelper_addNamedFetchGroup_UnknownName() {
FetchPlan fp = new FetchPlan(Employee.class);
try {
JpaFetchPlanHelper.addNamedFetchGroupAttributes(getEntityManager(), "unknown", fp);
} catch (IllegalArgumentException e) {
return;
}
fail("IllegalArgumentException expected");
}
@Test
public void requiredAttributesPhoneNumber() {
FetchPlan fp = new FetchPlan(PhoneNumber.class);
fp.initialize(JpaHelper.getServerSession(getEMF()));
assertEquals(2, fp.getFetchItems().size());
}
}