package org.hibernate.envers.test.integration.superclass.auditoverride; import javax.persistence.EntityManager; import org.junit.Assert; import org.junit.Test; import org.hibernate.ejb.Ejb3Configuration; import org.hibernate.envers.test.BaseEnversJPAFunctionalTestCase; import org.hibernate.envers.test.Priority; import org.hibernate.mapping.Column; import org.hibernate.mapping.Table; import org.hibernate.testing.TestForIssue; /** * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) */ @TestForIssue(jiraKey = "HHH-4439") public class AuditPropertyOverrideTest extends BaseEnversJPAFunctionalTestCase { private Integer propertyEntityId = null; private Integer transitiveEntityId = null; private Integer auditedEntityId = null; private Table propertyTable = null; private Table transitiveTable = null; private Table auditedTable = null; @Override public void configure(Ejb3Configuration cfg) { cfg.addAnnotatedClass(PropertyOverrideEntity.class); cfg.addAnnotatedClass(TransitiveOverrideEntity.class); cfg.addAnnotatedClass(AuditedSpecialEntity.class); } @Test @Priority(10) public void initData() { EntityManager em = getEntityManager(); // Revision 1 em.getTransaction().begin(); PropertyOverrideEntity propertyEntity = new PropertyOverrideEntity("data 1", 1, "data 2"); em.persist(propertyEntity); em.getTransaction().commit(); propertyEntityId = propertyEntity.getId(); // Revision 2 em.getTransaction().begin(); TransitiveOverrideEntity transitiveEntity = new TransitiveOverrideEntity("data 1", 1, "data 2", 2, "data 3"); em.persist(transitiveEntity); em.getTransaction().commit(); transitiveEntityId = transitiveEntity.getId(); // Revision 3 em.getTransaction().begin(); AuditedSpecialEntity auditedEntity = new AuditedSpecialEntity("data 1", 1, "data 2"); em.persist(auditedEntity); em.getTransaction().commit(); auditedEntityId = auditedEntity.getId(); propertyTable = getCfg().getClassMapping("org.hibernate.envers.test.integration.superclass.auditoverride.PropertyOverrideEntity_AUD").getTable(); transitiveTable = getCfg().getClassMapping("org.hibernate.envers.test.integration.superclass.auditoverride.TransitiveOverrideEntity_AUD").getTable(); auditedTable = getCfg().getClassMapping("org.hibernate.envers.test.integration.superclass.auditoverride.AuditedSpecialEntity_AUD").getTable(); } @Test public void testNotAuditedProperty() { Assert.assertNull(propertyTable.getColumn(new Column("str1"))); } @Test public void testAuditedProperty() { Assert.assertNotNull(propertyTable.getColumn(new Column("number1"))); Assert.assertNotNull(transitiveTable.getColumn(new Column("number2"))); Assert.assertNotNull(auditedTable.getColumn(new Column("str1"))); } @Test public void testTransitiveAuditedProperty() { Assert.assertNotNull(transitiveTable.getColumn(new Column("number1"))); Assert.assertNotNull(transitiveTable.getColumn(new Column("str1"))); } @Test public void testHistoryOfPropertyOverrideEntity() { PropertyOverrideEntity ver1 = new PropertyOverrideEntity(null, 1, propertyEntityId, "data 2"); Assert.assertEquals(ver1, getAuditReader().find(PropertyOverrideEntity.class, propertyEntityId, 1)); } @Test public void testHistoryOfTransitiveOverrideEntity() { TransitiveOverrideEntity ver1 = new TransitiveOverrideEntity("data 1", 1, transitiveEntityId, "data 2", 2, "data 3"); Assert.assertEquals(ver1, getAuditReader().find(TransitiveOverrideEntity.class, transitiveEntityId, 2)); } @Test public void testHistoryOfAuditedSpecialEntity() { AuditedSpecialEntity ver1 = new AuditedSpecialEntity("data 1", null, auditedEntityId, "data 2"); Assert.assertEquals(ver1, getAuditReader().find(AuditedSpecialEntity.class, auditedEntityId, 3)); } }