/*******************************************************************************
* Copyright (c) 1998, 2015 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 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:
* Oracle - initial API and implementation from Oracle TopLink
******************************************************************************/
package org.eclipse.persistence.testing.tests.jpa.relationships;
import javax.persistence.EntityManager;
import junit.framework.*;
import org.eclipse.persistence.testing.framework.junit.JUnitTestCase;
import org.eclipse.persistence.testing.models.jpa.virtualattribute.*;
public class VirtualAttributeTestSuite extends JUnitTestCase {
protected static int id;
public VirtualAttributeTestSuite() {
super();
}
public VirtualAttributeTestSuite(String name) {
super(name);
}
public static Test suite() {
TestSuite suite = new TestSuite();
suite.setName("VirtualAttributeTestSuite");
suite.addTest(new VirtualAttributeTestSuite("testSetup"));
suite.addTest(new VirtualAttributeTestSuite("testInsertVirtualAttribute"));
suite.addTest(new VirtualAttributeTestSuite("testReadVirtualAttribute"));
suite.addTest(new VirtualAttributeTestSuite("testUpdateVirtualAttribute"));
suite.addTest(new VirtualAttributeTestSuite("testDeleteVirtualAttribute"));
return suite;
}
/**
* The setup is done as a test, both to record its failure, and to allow execution in the server.
*/
public void testSetup() {
new VirtualAttributeTableCreator().replaceTables(JUnitTestCase.getServerSession());
clearCache();
}
public void testInsertVirtualAttribute(){
EntityManager em = createEntityManager();
beginTransaction(em);
try{
OneToOneVirtualAttributeHolder holder = new OneToOneVirtualAttributeHolder();
VirtualAttribute attribute = new VirtualAttribute();
attribute.setDescription("virtualAttribute");
holder.setVirtualAttribute(attribute);
em.persist(holder);
em.flush();
id = holder.getId();
commitTransaction(em);
}catch (RuntimeException ex){
if (isTransactionActive(em)){
rollbackTransaction(em);
}
closeEntityManager(em);
throw ex;
}
}
public void testReadVirtualAttribute(){
OneToOneVirtualAttributeHolder holder = createEntityManager().find(OneToOneVirtualAttributeHolder.class, id);
assertNotNull("Object with virtual attributes could not be read.", holder);
assertNotNull("Object held as a virtual attribute was not read with it's owner", holder.getVirtualAttribute());
}
public void testUpdateVirtualAttribute(){
OneToOneVirtualAttributeHolder holder = null;
EntityManager em = createEntityManager();
beginTransaction(em);
try{
holder = em.find(OneToOneVirtualAttributeHolder.class, id);
VirtualAttribute attribute = new VirtualAttribute();
attribute.setDescription("virtualAttribute2");
holder.setVirtualAttribute(attribute);
commitTransaction(em);
}catch (RuntimeException ex){
if (isTransactionActive(em)){
rollbackTransaction(em);
}
closeEntityManager(em);
throw ex;
}
clearCache();
holder = em.find(OneToOneVirtualAttributeHolder.class, id);
closeEntityManager(em);
assertNotNull("Updated object with virtual attributes could not be read.", holder);
assertNotNull("Updated object held as a virtual attribute was not read with it's owner", holder.getVirtualAttribute());
assertTrue("Virtual Attribute Object was not updated.", holder.getVirtualAttribute().getDescription().equals("virtualAttribute2"));
}
public void testDeleteVirtualAttribute(){
OneToOneVirtualAttributeHolder holder = null;
VirtualAttribute attribute = null;
int attributeId = 0;
EntityManager em = createEntityManager();
beginTransaction(em);
try{
holder = em.find(OneToOneVirtualAttributeHolder.class, id);
attribute = holder.getVirtualAttribute();
attributeId = attribute.getId();
holder.setVirtualAttribute(null);
em.remove(attribute);
em.remove(holder);
commitTransaction(em);
}catch (RuntimeException ex){
if (isTransactionActive(em)){
rollbackTransaction(em);
}
closeEntityManager(em);
throw ex;
}
holder = em.find(OneToOneVirtualAttributeHolder.class, id);
assertNull("Object holding virtual attribute was not properly deleted", holder);
attribute =em.find(VirtualAttribute.class, attributeId);
assertNull("Virtual Attribute Object was not properly removed.", attribute);
}
}