package org.hibernate.envers.test.integration.ids.idclass; import junit.framework.Assert; import org.hibernate.envers.test.BaseEnversJPAFunctionalTestCase; import org.hibernate.envers.test.Priority; import org.hibernate.testing.TestForIssue; import org.junit.Test; import javax.persistence.EntityManager; import java.util.Arrays; /** * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) */ @TestForIssue(jiraKey = "HHH-4751") public class IdClassWithRelationTest extends BaseEnversJPAFunctionalTestCase { private RelationalClassId entityId = null; private String typeId = null; @Override protected Class<?>[] getAnnotatedClasses() { return new Class<?>[]{SampleClass.class, RelationalClassId.class, ClassType.class}; } @Test @Priority(10) public void initData() { EntityManager em = getEntityManager(); // Revision 1 em.getTransaction().begin(); ClassType type = new ClassType("type", "initial description"); SampleClass entity = new SampleClass(); entity.setType(type); entity.setSampleValue("initial data"); em.persist(type); em.persist(entity); em.getTransaction().commit(); typeId = type.getType(); entityId = new RelationalClassId(entity.getId(), new ClassType("type", "initial description")); // Revision 2 em.getTransaction().begin(); type = em.find(ClassType.class, type.getType()); type.setDescription("modified description"); em.merge(type); em.getTransaction().commit(); // Revision 3 em.getTransaction().begin(); entity = em.find(SampleClass.class, entityId); entity.setSampleValue("modified data"); em.merge(entity); em.getTransaction().commit(); em.close(); } @Test public void testRevisionsCounts() { Assert.assertEquals(Arrays.asList(1, 2), getAuditReader().getRevisions(ClassType.class, typeId)); Assert.assertEquals(Arrays.asList(1, 3), getAuditReader().getRevisions(SampleClass.class, entityId)); } @Test public void testHistoryOfEntity() { // given SampleClass entity = new SampleClass(entityId.getId(), entityId.getType(), "initial data"); // when SampleClass ver1 = getAuditReader().find(SampleClass.class, entityId, 1); // then Assert.assertEquals(entity.getId(), ver1.getId()); Assert.assertEquals(entity.getSampleValue(), ver1.getSampleValue()); Assert.assertEquals(entity.getType().getType(), ver1.getType().getType()); Assert.assertEquals(entity.getType().getDescription(), ver1.getType().getDescription()); // given entity.setSampleValue("modified data"); entity.getType().setDescription("modified description"); // when SampleClass ver2 = getAuditReader().find(SampleClass.class, entityId, 3); // then Assert.assertEquals(entity.getId(), ver2.getId()); Assert.assertEquals(entity.getSampleValue(), ver2.getSampleValue()); Assert.assertEquals(entity.getType().getType(), ver2.getType().getType()); Assert.assertEquals(entity.getType().getDescription(), ver2.getType().getDescription()); } @Test public void testHistoryOfType() { // given ClassType type = new ClassType(typeId, "initial description"); // when ClassType ver1 = getAuditReader().find(ClassType.class, typeId, 1); // then Assert.assertEquals(type, ver1); Assert.assertEquals(type.getDescription(), ver1.getDescription()); // given type.setDescription("modified description"); // when ClassType ver2 = getAuditReader().find(ClassType.class, typeId, 2); // then Assert.assertEquals(type, ver2); Assert.assertEquals(type.getDescription(), ver2.getDescription()); } }