/* * Hibernate, Relational Persistence for Idiomatic Java * * License: GNU Lesser General Public License (LGPL), version 2.1 or later. * See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>. */ package org.hibernate.envers.test.integration.onetomany.hierarchy; import java.util.Arrays; import javax.persistence.EntityManager; import org.hibernate.envers.test.BaseEnversJPAFunctionalTestCase; import org.hibernate.envers.test.Priority; import org.hibernate.envers.test.tools.TestTools; import org.hibernate.testing.TestForIssue; import org.junit.Assert; import org.junit.Test; /** * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) */ @TestForIssue(jiraKey = "HHH-6661") public class HierarchyTest extends BaseEnversJPAFunctionalTestCase { private Long parentId = null; private Long child1Id = null; private Long child2Id = null; @Override protected Class<?>[] getAnnotatedClasses() { return new Class[] {Node.class}; } @Test @Priority(10) public void initData() { EntityManager em = getEntityManager(); // Revision 1 em.getTransaction().begin(); Node parent = new Node( "parent", (Node) null ); Node child1 = new Node( "child1", parent ); Node child2 = new Node( "child2", parent ); parent.getChildren().add( child1 ); parent.getChildren().add( child2 ); em.persist( parent ); em.persist( child1 ); em.persist( child2 ); em.getTransaction().commit(); parentId = parent.getId(); child1Id = child1.getId(); child2Id = child2.getId(); // Revision 2 em.getTransaction().begin(); parent = em.find( Node.class, parent.getId() ); parent.getChildren().get( 0 ).setData( "child1 modified" ); em.getTransaction().commit(); // Revision 3 em.getTransaction().begin(); child2 = em.find( Node.class, child2.getId() ); em.remove( child2 ); em.getTransaction().commit(); } @Test public void testRevisionsCounts() { Assert.assertEquals( Arrays.asList( 1, 3 ), getAuditReader().getRevisions( Node.class, parentId ) ); Assert.assertEquals( Arrays.asList( 1, 2 ), getAuditReader().getRevisions( Node.class, child1Id ) ); Assert.assertEquals( Arrays.asList( 1, 3 ), getAuditReader().getRevisions( Node.class, child2Id ) ); } @Test public void testHistoryOfParentNode() { Node parent = new Node( "parent", parentId ); Node child1 = new Node( "child1", child1Id ); Node child2 = new Node( "child2", child2Id ); Node ver1 = getAuditReader().find( Node.class, parentId, 1 ); Assert.assertEquals( parent, ver1 ); Assert.assertTrue( TestTools.checkCollection( ver1.getChildren(), child1, child2 ) ); child1.setData( "child1 modified" ); Node ver2 = getAuditReader().find( Node.class, parentId, 2 ); Assert.assertEquals( parent, ver2 ); Assert.assertTrue( TestTools.checkCollection( ver2.getChildren(), child1, child2 ) ); Node ver3 = getAuditReader().find( Node.class, parentId, 3 ); Assert.assertEquals( parent, ver3 ); Assert.assertTrue( TestTools.checkCollection( ver3.getChildren(), child1 ) ); } @Test public void testHistoryOfChild1Node() { Node parent = new Node( "parent", parentId ); Node child1 = new Node( "child1", child1Id ); Node ver1 = getAuditReader().find( Node.class, child1Id, 1 ); Assert.assertEquals( child1, ver1 ); Assert.assertEquals( parent.getId(), ver1.getParent().getId() ); Assert.assertEquals( parent.getData(), ver1.getParent().getData() ); child1.setData( "child1 modified" ); Node ver2 = getAuditReader().find( Node.class, child1Id, 2 ); Assert.assertEquals( child1, ver2 ); Assert.assertEquals( parent.getId(), ver2.getParent().getId() ); Assert.assertEquals( parent.getData(), ver2.getParent().getData() ); } }