package org.hibernate.envers.test.integration.manytomany.unidirectional; import org.hibernate.ejb.Ejb3Configuration; import org.hibernate.envers.test.AbstractEntityTest; import org.hibernate.envers.test.Priority; import org.hibernate.envers.test.entities.UnversionedStrTestEntity; import org.hibernate.envers.test.entities.manytomany.unidirectional.M2MIndexedListTargetNotAuditedEntity; import org.junit.Test; import javax.persistence.EntityManager; import java.util.Arrays; import java.util.List; import static org.hibernate.envers.test.tools.TestTools.*; import static org.junit.Assert.*; /** * A test for auditing a many-to-many indexed list where the target entity is not audited. * * @author Vladimir Klyushnikov * @author Adam Warski */ public class M2MIndexedListNotAuditedTarget extends AbstractEntityTest { private Integer itnae1_id; private Integer itnae2_id; private UnversionedStrTestEntity uste1; private UnversionedStrTestEntity uste2; public void configure(Ejb3Configuration cfg) { cfg.addAnnotatedClass(UnversionedStrTestEntity.class); cfg.addAnnotatedClass(M2MIndexedListTargetNotAuditedEntity.class); } @Test @Priority(10) public void initData() { EntityManager em = getEntityManager(); uste1 = new UnversionedStrTestEntity("str1"); uste2 = new UnversionedStrTestEntity("str2"); // No revision em.getTransaction().begin(); em.persist(uste1); em.persist(uste2); em.getTransaction().commit(); // Revision 1 em.getTransaction().begin(); uste1 = em.find(UnversionedStrTestEntity.class, uste1.getId()); uste2 = em.find(UnversionedStrTestEntity.class, uste2.getId()); M2MIndexedListTargetNotAuditedEntity itnae1 = new M2MIndexedListTargetNotAuditedEntity(1, "tnae1"); itnae1.getReferences().add(uste1); itnae1.getReferences().add(uste2); em.persist(itnae1); em.getTransaction().commit(); // Revision 2 em.getTransaction().begin(); M2MIndexedListTargetNotAuditedEntity itnae2 = new M2MIndexedListTargetNotAuditedEntity(2, "tnae2"); itnae2.getReferences().add(uste2); em.persist(itnae2); em.getTransaction().commit(); // Revision 3 em.getTransaction().begin(); itnae1.getReferences().set(0, uste2); itnae1.getReferences().set(1, uste1); em.getTransaction().commit(); itnae1_id = itnae1.getId(); itnae2_id = itnae2.getId(); } @Test public void testRevisionsCounts() { List<Number> revisions = getAuditReader().getRevisions(M2MIndexedListTargetNotAuditedEntity.class, itnae1_id); assertEquals(revisions, Arrays.asList(1, 3)); revisions = getAuditReader().getRevisions(M2MIndexedListTargetNotAuditedEntity.class, itnae2_id); assertEquals(revisions, Arrays.asList(2)); } @Test public void testHistory1() throws Exception { M2MIndexedListTargetNotAuditedEntity rev1 = getAuditReader().find(M2MIndexedListTargetNotAuditedEntity.class, itnae1_id, 1); M2MIndexedListTargetNotAuditedEntity rev2 = getAuditReader().find(M2MIndexedListTargetNotAuditedEntity.class, itnae1_id, 2); M2MIndexedListTargetNotAuditedEntity rev3 = getAuditReader().find(M2MIndexedListTargetNotAuditedEntity.class, itnae1_id, 3); assertTrue(checkList(rev1.getReferences(), uste1, uste2)); assertTrue(checkList(rev2.getReferences(), uste1, uste2)); assertTrue(checkList(rev3.getReferences(), uste2, uste1)); } @Test public void testHistory2() throws Exception { M2MIndexedListTargetNotAuditedEntity rev1 = getAuditReader().find(M2MIndexedListTargetNotAuditedEntity.class, itnae2_id, 1); M2MIndexedListTargetNotAuditedEntity rev2 = getAuditReader().find(M2MIndexedListTargetNotAuditedEntity.class, itnae2_id, 2); M2MIndexedListTargetNotAuditedEntity rev3 = getAuditReader().find(M2MIndexedListTargetNotAuditedEntity.class, itnae2_id, 3); assertNull(rev1); assertTrue(checkList(rev2.getReferences(), uste2)); assertTrue(checkList(rev3.getReferences(), uste2)); } }