/projects/hibernate-4.2.0/project/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/reventity/trackmodifiedentities/DefaultTrackingEntitiesTest.java

https://gitlab.com/essere.lab.public/qualitas.class-corpus · Java · 190 lines · 148 code · 34 blank · 8 comment · 5 complexity · 9f805e621fb0a2a6af5e41ead3dbf85e MD5 · raw file

  1. package org.hibernate.envers.test.integration.reventity.trackmodifiedentities;
  2. import java.util.Iterator;
  3. import java.util.List;
  4. import java.util.Map;
  5. import java.util.Properties;
  6. import javax.persistence.EntityManager;
  7. import org.junit.Test;
  8. import org.hibernate.ejb.Ejb3Configuration;
  9. import org.hibernate.envers.CrossTypeRevisionChangesReader;
  10. import org.hibernate.envers.RevisionType;
  11. import org.hibernate.envers.test.BaseEnversJPAFunctionalTestCase;
  12. import org.hibernate.envers.test.Priority;
  13. import org.hibernate.envers.test.entities.StrIntTestEntity;
  14. import org.hibernate.envers.test.entities.StrTestEntity;
  15. import org.hibernate.envers.test.tools.TestTools;
  16. import org.hibernate.envers.tools.Pair;
  17. import org.hibernate.mapping.Column;
  18. import org.hibernate.mapping.Table;
  19. /**
  20. * Tests proper behavior of tracking modified entity names when {@code org.hibernate.envers.track_entities_changed_in_revision}
  21. * parameter is set to {@code true}.
  22. * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com)
  23. */
  24. @SuppressWarnings({"unchecked"})
  25. public class DefaultTrackingEntitiesTest extends BaseEnversJPAFunctionalTestCase {
  26. private Integer steId = null;
  27. private Integer siteId = null;
  28. @Override
  29. public void configure(Ejb3Configuration cfg) {
  30. cfg.addAnnotatedClass(StrTestEntity.class);
  31. cfg.addAnnotatedClass(StrIntTestEntity.class);
  32. }
  33. @Override
  34. public void addConfigOptions(Map configuration) {
  35. super.addConfigOptions( configuration );
  36. configuration.put("org.hibernate.envers.track_entities_changed_in_revision", "true");
  37. }
  38. @Test
  39. @Priority(10)
  40. public void initData() {
  41. EntityManager em = getEntityManager();
  42. // Revision 1 - Adding two entities
  43. em.getTransaction().begin();
  44. StrTestEntity ste = new StrTestEntity("x");
  45. StrIntTestEntity site = new StrIntTestEntity("y", 1);
  46. em.persist(ste);
  47. em.persist(site);
  48. steId = ste.getId();
  49. siteId = site.getId();
  50. em.getTransaction().commit();
  51. // Revision 2 - Modifying one entity
  52. em.getTransaction().begin();
  53. site = em.find(StrIntTestEntity.class, siteId);
  54. site.setNumber(2);
  55. em.getTransaction().commit();
  56. // Revision 3 - Deleting both entities
  57. em.getTransaction().begin();
  58. ste = em.find(StrTestEntity.class, steId);
  59. site = em.find(StrIntTestEntity.class, siteId);
  60. em.remove(ste);
  61. em.remove(site);
  62. em.getTransaction().commit();
  63. }
  64. @Test
  65. public void testRevEntityTableCreation() {
  66. Iterator<Table> tableIterator = getCfg().getTableMappings();
  67. while (tableIterator.hasNext()) {
  68. Table table = tableIterator.next();
  69. if ("REVCHANGES".equals(table.getName())) {
  70. assert table.getColumnSpan() == 2;
  71. assert table.getColumn(new Column("REV")) != null;
  72. assert table.getColumn(new Column("ENTITYNAME")) != null;
  73. return;
  74. }
  75. }
  76. assert false;
  77. }
  78. @Test
  79. public void testTrackAddedEntities() {
  80. StrTestEntity ste = new StrTestEntity("x", steId);
  81. StrIntTestEntity site = new StrIntTestEntity("y", 1, siteId);
  82. assert TestTools.checkList(getCrossTypeRevisionChangesReader().findEntities(1), ste, site);
  83. }
  84. @Test
  85. public void testTrackModifiedEntities() {
  86. StrIntTestEntity site = new StrIntTestEntity("y", 2, siteId);
  87. assert TestTools.checkList(getCrossTypeRevisionChangesReader().findEntities(2), site);
  88. }
  89. @Test
  90. public void testTrackDeletedEntities() {
  91. StrTestEntity ste = new StrTestEntity(null, steId);
  92. StrIntTestEntity site = new StrIntTestEntity(null, null, siteId);
  93. assert TestTools.checkList(getCrossTypeRevisionChangesReader().findEntities(3), site, ste);
  94. }
  95. @Test
  96. public void testFindChangesInInvalidRevision() {
  97. assert getCrossTypeRevisionChangesReader().findEntities(4).isEmpty();
  98. }
  99. @Test
  100. public void testTrackAddedEntitiesGroupByRevisionType() {
  101. StrTestEntity ste = new StrTestEntity("x", steId);
  102. StrIntTestEntity site = new StrIntTestEntity("y", 1, siteId);
  103. Map<RevisionType, List<Object>> result = getCrossTypeRevisionChangesReader().findEntitiesGroupByRevisionType(1);
  104. assert TestTools.checkList(result.get(RevisionType.ADD), site, ste);
  105. assert TestTools.checkList(result.get(RevisionType.MOD));
  106. assert TestTools.checkList(result.get(RevisionType.DEL));
  107. }
  108. @Test
  109. public void testTrackModifiedEntitiesGroupByRevisionType() {
  110. StrIntTestEntity site = new StrIntTestEntity("y", 2, siteId);
  111. Map<RevisionType, List<Object>> result = getCrossTypeRevisionChangesReader().findEntitiesGroupByRevisionType(2);
  112. assert TestTools.checkList(result.get(RevisionType.ADD));
  113. assert TestTools.checkList(result.get(RevisionType.MOD), site);
  114. assert TestTools.checkList(result.get(RevisionType.DEL));
  115. }
  116. @Test
  117. public void testTrackDeletedEntitiesGroupByRevisionType() {
  118. StrTestEntity ste = new StrTestEntity(null, steId);
  119. StrIntTestEntity site = new StrIntTestEntity(null, null, siteId);
  120. Map<RevisionType, List<Object>> result = getCrossTypeRevisionChangesReader().findEntitiesGroupByRevisionType(3);
  121. assert TestTools.checkList(result.get(RevisionType.ADD));
  122. assert TestTools.checkList(result.get(RevisionType.MOD));
  123. assert TestTools.checkList(result.get(RevisionType.DEL), site, ste);
  124. }
  125. @Test
  126. public void testFindChangedEntitiesByRevisionTypeADD() {
  127. StrTestEntity ste = new StrTestEntity("x", steId);
  128. StrIntTestEntity site = new StrIntTestEntity("y", 1, siteId);
  129. assert TestTools.checkList(getCrossTypeRevisionChangesReader().findEntities(1, RevisionType.ADD), ste, site);
  130. }
  131. @Test
  132. public void testFindChangedEntitiesByRevisionTypeMOD() {
  133. StrIntTestEntity site = new StrIntTestEntity("y", 2, siteId);
  134. assert TestTools.checkList(getCrossTypeRevisionChangesReader().findEntities(2, RevisionType.MOD), site);
  135. }
  136. @Test
  137. public void testFindChangedEntitiesByRevisionTypeDEL() {
  138. StrTestEntity ste = new StrTestEntity(null, steId);
  139. StrIntTestEntity site = new StrIntTestEntity(null, null, siteId);
  140. assert TestTools.checkList(getCrossTypeRevisionChangesReader().findEntities(3, RevisionType.DEL), ste, site);
  141. }
  142. @Test
  143. public void testFindEntityTypesChangedInRevision() {
  144. assert TestTools.makeSet(Pair.make(StrTestEntity.class.getName(), StrTestEntity.class),
  145. Pair.make(StrIntTestEntity.class.getName(), StrIntTestEntity.class))
  146. .equals(getCrossTypeRevisionChangesReader().findEntityTypes(1));
  147. assert TestTools.makeSet(Pair.make(StrIntTestEntity.class.getName(), StrIntTestEntity.class))
  148. .equals(getCrossTypeRevisionChangesReader().findEntityTypes(2));
  149. assert TestTools.makeSet(Pair.make(StrTestEntity.class.getName(), StrTestEntity.class),
  150. Pair.make(StrIntTestEntity.class.getName(), StrIntTestEntity.class))
  151. .equals(getCrossTypeRevisionChangesReader().findEntityTypes(3));
  152. }
  153. private CrossTypeRevisionChangesReader getCrossTypeRevisionChangesReader() {
  154. return getAuditReader().getCrossTypeRevisionChangesReader();
  155. }
  156. }