From bf469ca0e410f4c5bd470fdcc9e67d52accbd787 Mon Sep 17 00:00:00 2001 From: zuchos Date: Mon, 30 Sep 2013 12:47:01 +0200 Subject: [PATCH] HHH-8505: More advanced tests --- ...tedDynamicComponentsAdvancedCasesTest.java | 171 +++++++++++++++--- .../components/dynamic/InternalComponent.java | 45 +++++ .../components/dynamic/ManyToManyEntity.java | 62 +++++++ .../dynamicComponents/mapAdvanced.hbm.xml | 30 ++- 4 files changed, 282 insertions(+), 26 deletions(-) create mode 100644 hibernate-envers/src/test/java/org/hibernate/envers/test/integration/components/dynamic/InternalComponent.java create mode 100644 hibernate-envers/src/test/java/org/hibernate/envers/test/integration/components/dynamic/ManyToManyEntity.java diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/components/dynamic/AuditedDynamicComponentsAdvancedCasesTest.java b/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/components/dynamic/AuditedDynamicComponentsAdvancedCasesTest.java index 8443027818..7947650658 100644 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/components/dynamic/AuditedDynamicComponentsAdvancedCasesTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/components/dynamic/AuditedDynamicComponentsAdvancedCasesTest.java @@ -1,11 +1,16 @@ package org.hibernate.envers.test.integration.components.dynamic; +import com.google.common.collect.Lists; import junit.framework.Assert; import org.hibernate.Session; import org.hibernate.envers.test.BaseEnversFunctionalTestCase; import org.hibernate.envers.test.Priority; import org.junit.Test; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + public class AuditedDynamicComponentsAdvancedCasesTest extends BaseEnversFunctionalTestCase { public static final String PROP_BOOLEAN = "propBoolean"; @@ -13,12 +18,50 @@ public class AuditedDynamicComponentsAdvancedCasesTest extends BaseEnversFunctio public static final String PROP_FLOAT = "propFloat"; public static final String PROP_MANY_TO_ONE = "propManyToOne"; public static final String PROP_ONE_TO_ONE = "propOneToOne"; + public static final String INTERNAL_COMPONENT = "internalComponent"; + public static final String INTERNAL_LIST = "internalList"; + public static final String INTERNAL_MAP = "internalMap"; + public static final String INTERNAL_MAP_WITH_MANY_TO_MANY = "internalMapWithEntities"; @Override protected String[] getMappings() { return new String[]{"mappings/dynamicComponents/mapAdvanced.hbm.xml"}; } + private OneToOneEntity getOneToOneEntity() { + return new OneToOneEntity(1L, "OneToOne"); + } + + private ManyToManyEntity getManyToManyEntity() { + return new ManyToManyEntity(1L, "ManyToMany"); + } + + private ManyToOneEntity getManyToOneEntity() { + return new ManyToOneEntity(1L, "ManyToOne"); + } + + + private AdvancedEntity getAdvancedEntity(ManyToOneEntity manyToOne, OneToOneEntity oneToOne, ManyToManyEntity manyToManyEntity) { + AdvancedEntity advancedEntity = new AdvancedEntity(); + advancedEntity.setId(1L); + advancedEntity.setNote("Test note"); + advancedEntity.getDynamicConfiguration().put(PROP_BOOLEAN, true); + advancedEntity.getDynamicConfiguration().put(PROP_INT, 19); + advancedEntity.getDynamicConfiguration().put(PROP_FLOAT, 15.9f); + advancedEntity.getDynamicConfiguration().put(PROP_MANY_TO_ONE, manyToOne); + advancedEntity.getDynamicConfiguration().put(PROP_ONE_TO_ONE, oneToOne); + advancedEntity.getDynamicConfiguration().put(INTERNAL_COMPONENT, new InternalComponent("Internal value")); + advancedEntity.getDynamicConfiguration().put(INTERNAL_LIST, Lists.newArrayList("One", "Two", "Three")); + Map map = new HashMap(); + map.put("one", "1"); + map.put("two", "2"); + advancedEntity.getDynamicConfiguration().put(INTERNAL_MAP, map); + Map mapWithManyToMany = new HashMap(); + mapWithManyToMany.put("entity1", manyToManyEntity); + advancedEntity.getDynamicConfiguration().put(INTERNAL_MAP_WITH_MANY_TO_MANY, mapWithManyToMany); + return advancedEntity; + } + @Test @Priority(10) //smoke test to make sure that hibernate & envers are working with the entity&mappings @@ -26,13 +69,52 @@ public class AuditedDynamicComponentsAdvancedCasesTest extends BaseEnversFunctio //given ManyToOneEntity manyToOne = getManyToOneEntity(); OneToOneEntity oneToOne = getOneToOneEntity(); - AdvancedEntity advancedEntity = getAdvancedEntity(manyToOne, oneToOne); - + ManyToManyEntity manyToManyEntity = getManyToManyEntity(); + AdvancedEntity advancedEntity = getAdvancedEntity(manyToOne, oneToOne, manyToManyEntity); + //rev 1 Session session = openSession(); session.getTransaction().begin(); session.save(manyToOne); session.save(oneToOne); + session.save(manyToManyEntity); + session.save(advancedEntity); + session.getTransaction().commit(); + + //rev 2 + session.getTransaction().begin(); + InternalComponent internalComponent = (InternalComponent) advancedEntity.getDynamicConfiguration().get(INTERNAL_COMPONENT); + internalComponent.setProperty("new value"); + session.save(advancedEntity); + session.getTransaction().commit(); + + //rev 3 + session.getTransaction().begin(); + List internalList = (List) advancedEntity.getDynamicConfiguration().get(INTERNAL_LIST); + internalList.add("four"); + session.save(advancedEntity); + session.getTransaction().commit(); + + //rev 4 + session.getTransaction().begin(); + Map map = (Map) advancedEntity.getDynamicConfiguration().get(INTERNAL_MAP); + map.put("three", "3"); + session.save(advancedEntity); + session.getTransaction().commit(); + + //rev 5 + session.getTransaction().begin(); + Map mapWithManyToMany = (Map) advancedEntity.getDynamicConfiguration().get(INTERNAL_MAP_WITH_MANY_TO_MANY); + ManyToManyEntity manyToManyEntity2 = new ManyToManyEntity(2L, "new value"); + mapWithManyToMany.put("entity2", manyToManyEntity2); + session.save(manyToManyEntity2); + session.save(advancedEntity); + session.getTransaction().commit(); + + //rev 6 + session.getTransaction().begin(); + mapWithManyToMany = (Map) advancedEntity.getDynamicConfiguration().get(INTERNAL_MAP_WITH_MANY_TO_MANY); + mapWithManyToMany.clear(); session.save(advancedEntity); session.getTransaction().commit(); @@ -41,43 +123,84 @@ public class AuditedDynamicComponentsAdvancedCasesTest extends BaseEnversFunctio Assert.assertEquals(advancedEntity, advancedEntityActual); } - private AdvancedEntity getAdvancedEntity(ManyToOneEntity manyToOne, OneToOneEntity oneToOne) { - AdvancedEntity advancedEntity = new AdvancedEntity(); - advancedEntity.setId(1L); - advancedEntity.setNote("Test note"); - advancedEntity.getDynamicConfiguration().put(PROP_BOOLEAN, true); - advancedEntity.getDynamicConfiguration().put(PROP_INT, 19); - advancedEntity.getDynamicConfiguration().put(PROP_FLOAT, 15.9f); - advancedEntity.getDynamicConfiguration().put(PROP_MANY_TO_ONE, manyToOne); - advancedEntity.getDynamicConfiguration().put(PROP_ONE_TO_ONE, oneToOne); - return advancedEntity; - } @Test - public void shouldMakeFirstRevision() { + public void shouldMakeRevisions() { Session session = openSession(); + session.getTransaction().begin(); //given & when shouldSaveEntity ManyToOneEntity manyToOne = getManyToOneEntity(); OneToOneEntity oneToOne = getOneToOneEntity(); - AdvancedEntity advancedEntity = getAdvancedEntity(manyToOne, oneToOne); + ManyToManyEntity manyToManyEntity = getManyToManyEntity(); + AdvancedEntity advancedEntity = getAdvancedEntity(manyToOne, oneToOne, manyToManyEntity); - //then - session.getTransaction().begin(); + //then v1 AdvancedEntity ver1 = getAuditReader().find( AdvancedEntity.class, advancedEntity.getId(), 1 ); Assert.assertEquals(advancedEntity, ver1); + + //then v2 + InternalComponent internalComponent = (InternalComponent) advancedEntity.getDynamicConfiguration().get(INTERNAL_COMPONENT); + internalComponent.setProperty("new value"); + + AdvancedEntity ver2 = getAuditReader().find( + AdvancedEntity.class, + advancedEntity.getId(), + 2 + ); + Assert.assertEquals(advancedEntity, ver2); + + //then v3 + + List internalList = (List) advancedEntity.getDynamicConfiguration().get(INTERNAL_LIST); + internalList.add("four"); + + AdvancedEntity ver3 = getAuditReader().find( + AdvancedEntity.class, + advancedEntity.getId(), + 3 + ); + Assert.assertEquals(advancedEntity, ver3); + + //then v4 + Map map = (Map) advancedEntity.getDynamicConfiguration().get(INTERNAL_MAP); + map.put("three", "3"); + + AdvancedEntity ver4 = getAuditReader().find( + AdvancedEntity.class, + advancedEntity.getId(), + 4 + ); + Assert.assertEquals(advancedEntity, ver4); + + //then v5 + Map mapWithManyToMany = (Map) advancedEntity.getDynamicConfiguration().get(INTERNAL_MAP_WITH_MANY_TO_MANY); + ManyToManyEntity manyToManyEntity2 = new ManyToManyEntity(2L, "new value"); + mapWithManyToMany.put("entity2", manyToManyEntity2); + + AdvancedEntity ver5 = getAuditReader().find( + AdvancedEntity.class, + advancedEntity.getId(), + 5 + ); + Assert.assertEquals(advancedEntity, ver5); + + //then v6 + mapWithManyToMany = (Map) advancedEntity.getDynamicConfiguration().get(INTERNAL_MAP_WITH_MANY_TO_MANY); + mapWithManyToMany.clear(); + + AdvancedEntity ver6 = getAuditReader().find( + AdvancedEntity.class, + advancedEntity.getId(), + 6 + ); + Assert.assertEquals(advancedEntity, ver6); + session.getTransaction().commit(); } - private OneToOneEntity getOneToOneEntity() { - return new OneToOneEntity(1L, "OneToOne"); - } - - private ManyToOneEntity getManyToOneEntity() { - return new ManyToOneEntity(1L, "ManyToOne"); - } } diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/components/dynamic/InternalComponent.java b/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/components/dynamic/InternalComponent.java new file mode 100644 index 0000000000..05ce8dfd06 --- /dev/null +++ b/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/components/dynamic/InternalComponent.java @@ -0,0 +1,45 @@ +package org.hibernate.envers.test.integration.components.dynamic; + +public class InternalComponent { + + private String property; + + public InternalComponent() { + } + + public InternalComponent(String property) { + this.property = property; + } + + public String getProperty() { + return property; + } + + public void setProperty(String property) { + this.property = property; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof InternalComponent)) return false; + + InternalComponent that = (InternalComponent) o; + + if (property != null ? !property.equals(that.property) : that.property != null) return false; + + return true; + } + + @Override + public int hashCode() { + return property != null ? property.hashCode() : 0; + } + + @Override + public String toString() { + return "InternalComponent{" + + "property='" + property + '\'' + + '}'; + } +} diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/components/dynamic/ManyToManyEntity.java b/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/components/dynamic/ManyToManyEntity.java new file mode 100644 index 0000000000..c11f679a65 --- /dev/null +++ b/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/components/dynamic/ManyToManyEntity.java @@ -0,0 +1,62 @@ +package org.hibernate.envers.test.integration.components.dynamic; + +import org.hibernate.envers.Audited; + +@Audited +public class ManyToManyEntity { + + private Long id; + private String note; + + public ManyToManyEntity() { + } + + public ManyToManyEntity(Long id, String note) { + this.id = id; + this.note = note; + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getNote() { + return note; + } + + public void setNote(String note) { + this.note = note; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof ManyToManyEntity)) return false; + + ManyToManyEntity that = (ManyToManyEntity) o; + + if (id != null ? !id.equals(that.id) : that.id != null) return false; + if (note != null ? !note.equals(that.note) : that.note != null) return false; + + return true; + } + + @Override + public int hashCode() { + int result = id != null ? id.hashCode() : 0; + result = 31 * result + (note != null ? note.hashCode() : 0); + return result; + } + + @Override + public String toString() { + return "ManyToManyEntity{" + + "id=" + id + + ", note='" + note + '\'' + + '}'; + } +} diff --git a/hibernate-envers/src/test/resources/mappings/dynamicComponents/mapAdvanced.hbm.xml b/hibernate-envers/src/test/resources/mappings/dynamicComponents/mapAdvanced.hbm.xml index 33c5cecd04..1620d705f5 100644 --- a/hibernate-envers/src/test/resources/mappings/dynamicComponents/mapAdvanced.hbm.xml +++ b/hibernate-envers/src/test/resources/mappings/dynamicComponents/mapAdvanced.hbm.xml @@ -10,8 +10,30 @@ - - + + + + + + + + + + + + + + + + + + + + @@ -23,6 +45,10 @@ + + + +