diff --git a/hibernate-envers/hibernate-envers.gradle b/hibernate-envers/hibernate-envers.gradle index 580e5417b566..93ff613a3c45 100644 --- a/hibernate-envers/hibernate-envers.gradle +++ b/hibernate-envers/hibernate-envers.gradle @@ -30,6 +30,8 @@ dependencies { testImplementation testLibs.junit4 testImplementation testLibs.junit4Engine + testImplementation project(':hibernate-testing') + testAnnotationProcessor project( ':hibernate-processor' ) } diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/customtype/ObjectUserTypeTest.java b/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/customtype/ObjectUserTypeTest.java deleted file mode 100644 index cd897301714a..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/customtype/ObjectUserTypeTest.java +++ /dev/null @@ -1,89 +0,0 @@ -/* - * SPDX-License-Identifier: Apache-2.0 - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.test.integration.customtype; - -import java.util.Arrays; -import java.util.Map; -import jakarta.persistence.EntityManager; - -import org.hibernate.envers.configuration.EnversSettings; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; - -import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Assert; -import org.junit.Test; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@JiraKey(value = "HHH-7870") -public class ObjectUserTypeTest extends BaseEnversJPAFunctionalTestCase { - private int id; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {ObjectUserTypeEntity.class}; - } - - @Override - protected void addConfigOptions(Map options) { - super.addConfigOptions( options ); - options.put( EnversSettings.STORE_DATA_AT_DELETE, "true" ); - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - // Revision 1 - add - em.getTransaction().begin(); - ObjectUserTypeEntity entity = new ObjectUserTypeEntity( "builtInType1", "stringUserType1" ); - em.persist( entity ); - em.getTransaction().commit(); - - id = entity.getId(); - - // Revision 2 - modify - em.getTransaction().begin(); - entity = em.find( ObjectUserTypeEntity.class, entity.getId() ); - entity.setUserType( 2 ); - entity = em.merge( entity ); - em.getTransaction().commit(); - - // Revision 3 - remove - em.getTransaction().begin(); - entity = em.find( ObjectUserTypeEntity.class, entity.getId() ); - em.remove( entity ); - em.getTransaction().commit(); - - em.close(); - } - - @Test - public void testRevisionCount() { - Assert.assertEquals( - Arrays.asList( 1, 2, 3 ), - getAuditReader().getRevisions( ObjectUserTypeEntity.class, id ) - ); - } - - @Test - public void testHistory() { - ObjectUserTypeEntity ver1 = new ObjectUserTypeEntity( id, "builtInType1", "stringUserType1" ); - ObjectUserTypeEntity ver2 = new ObjectUserTypeEntity( id, "builtInType1", 2 ); - - Assert.assertEquals( ver1, getAuditReader().find( ObjectUserTypeEntity.class, id, 1 ) ); - Assert.assertEquals( ver2, getAuditReader().find( ObjectUserTypeEntity.class, id, 2 ) ); - Assert.assertEquals( - ver2, - getAuditReader().createQuery() - .forRevisionsOfEntity( ObjectUserTypeEntity.class, true, true ) - .getResultList() - .get( 2 ) - ); // Checking delete state. - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/customtype/ParametrizedCustom.java b/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/customtype/ParametrizedCustom.java deleted file mode 100644 index b49ae9a005e0..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/customtype/ParametrizedCustom.java +++ /dev/null @@ -1,75 +0,0 @@ -/* - * SPDX-License-Identifier: Apache-2.0 - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.test.integration.customtype; - -import java.util.Arrays; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.customtype.ParametrizedCustomTypeEntity; - -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class ParametrizedCustom extends BaseEnversJPAFunctionalTestCase { - private Integer pcte_id; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {ParametrizedCustomTypeEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - ParametrizedCustomTypeEntity pcte = new ParametrizedCustomTypeEntity(); - - // Revision 1 (persisting 1 entity) - em.getTransaction().begin(); - - pcte.setStr( "U" ); - - em.persist( pcte ); - - em.getTransaction().commit(); - - // Revision 2 (changing the value) - em.getTransaction().begin(); - - pcte = em.find( ParametrizedCustomTypeEntity.class, pcte.getId() ); - - pcte.setStr( "V" ); - - em.getTransaction().commit(); - - // - - pcte_id = pcte.getId(); - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( - getAuditReader().getRevisions( - ParametrizedCustomTypeEntity.class, - pcte_id - ) - ); - } - - @Test - public void testHistoryOfCcte() { - ParametrizedCustomTypeEntity rev1 = getAuditReader().find( ParametrizedCustomTypeEntity.class, pcte_id, 1 ); - ParametrizedCustomTypeEntity rev2 = getAuditReader().find( ParametrizedCustomTypeEntity.class, pcte_id, 2 ); - - assert "xUy".equals( rev1.getStr() ); - assert "xVy".equals( rev2.getStr() ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/customtype/UnspecifiedEnumTypeTest.java b/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/customtype/UnspecifiedEnumTypeTest.java deleted file mode 100644 index 907929feac93..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/customtype/UnspecifiedEnumTypeTest.java +++ /dev/null @@ -1,121 +0,0 @@ -/* - * SPDX-License-Identifier: Apache-2.0 - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.test.integration.customtype; - -import java.util.Arrays; -import java.util.List; -import java.util.Map; - -import org.hibernate.Session; -import org.hibernate.cfg.AvailableSettings; -import org.hibernate.envers.strategy.internal.DefaultAuditStrategy; -import org.hibernate.orm.test.envers.BaseEnversFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.customtype.UnspecifiedEnumTypeEntity; -import org.hibernate.type.StandardBasicTypes; - -import org.junit.Assert; -import org.junit.Test; - -import org.hibernate.testing.orm.junit.JiraKey; -import org.hibernate.testing.envers.RequiresAuditStrategy; - -/** - * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) - */ -@JiraKey(value = "HHH-7780") -@RequiresAuditStrategy(DefaultAuditStrategy.class) -public class UnspecifiedEnumTypeTest extends BaseEnversFunctionalTestCase { - private Long id = null; - - @Override - protected String[] getMappings() { - return new String[]{ "mappings/customType/mappings.hbm.xml" }; - } - - @Override - protected void addSettings(Map settings) { - super.addSettings( settings ); - - settings.put( AvailableSettings.SHOW_SQL, "true" ); - settings.put( AvailableSettings.FORMAT_SQL, "true" ); - settings.put( AvailableSettings.PREFER_NATIVE_ENUM_TYPES, "false" ); - } - - @Test - @Priority(9) - public void initData() { - Session session = getSession(); - - // Revision 1 - session.getTransaction().begin(); - UnspecifiedEnumTypeEntity entity = new UnspecifiedEnumTypeEntity( - UnspecifiedEnumTypeEntity.E1.X, - UnspecifiedEnumTypeEntity.E2.A - ); - session.persist( entity ); - session.getTransaction().commit(); - - id = entity.getId(); - - // Revision 2 - session.getTransaction().begin(); - entity = session.get( UnspecifiedEnumTypeEntity.class, entity.getId() ); - entity.setEnum1( UnspecifiedEnumTypeEntity.E1.Y ); - entity.setEnum2( UnspecifiedEnumTypeEntity.E2.B ); - session.merge( entity ); - session.getTransaction().commit(); - - session.close(); - } - - @Test - @Priority(8) - public void testRevisionCount() { - Assert.assertEquals( - Arrays.asList( 1, 2 ), getAuditReader().getRevisions( - UnspecifiedEnumTypeEntity.class, - id - ) - ); - } - - @Test - @Priority(7) - public void testHistoryOfEnums() { - UnspecifiedEnumTypeEntity ver1 = new UnspecifiedEnumTypeEntity( - UnspecifiedEnumTypeEntity.E1.X, - UnspecifiedEnumTypeEntity.E2.A, - id - ); - UnspecifiedEnumTypeEntity ver2 = new UnspecifiedEnumTypeEntity( - UnspecifiedEnumTypeEntity.E1.Y, - UnspecifiedEnumTypeEntity.E2.B, - id - ); - - Assert.assertEquals( ver1, getAuditReader().find( UnspecifiedEnumTypeEntity.class, id, 1 ) ); - Assert.assertEquals( ver2, getAuditReader().find( UnspecifiedEnumTypeEntity.class, id, 2 ) ); - } - - @Test - @Priority(6) - public void testEnumRepresentation() { - Session session = getSession(); - - @SuppressWarnings("unchecked") - List values = session - .createNativeQuery( "SELECT enum1 e1, enum2 e2 FROM ENUM_ENTITY_AUD ORDER BY REV ASC" ) - .addScalar( "e1", StandardBasicTypes.INTEGER ) - .addScalar( "e2", StandardBasicTypes.INTEGER ) - .list(); - session.close(); - - Assert.assertNotNull( values ); - Assert.assertEquals( 2, values.size() ); - Assert.assertArrayEquals( new Object[]{ 0, 0 }, values.get( 0 ) ); - Assert.assertArrayEquals( new Object[]{ 1, 1 }, values.get( 1 ) ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/data/Lobs.java b/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/data/Lobs.java deleted file mode 100644 index d9452cc82fff..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/data/Lobs.java +++ /dev/null @@ -1,102 +0,0 @@ -/* - * SPDX-License-Identifier: Apache-2.0 - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.test.integration.data; - -import java.util.Arrays; -import java.util.Map; - -import jakarta.persistence.EntityManager; - -import org.hibernate.dialect.PostgreSQLDialect; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.testing.DialectChecks; -import org.hibernate.testing.RequiresDialectFeature; -import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; - -/** - * @author Adam Warski (adam at warski dot org) - * @author Chris Cranford - */ -@RequiresDialectFeature(DialectChecks.SupportsExpectedLobUsagePattern.class) -public class Lobs extends BaseEnversJPAFunctionalTestCase { - private Integer id1; - private Integer id2; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[]{ LobTestEntity.class }; - } - - @Override - protected void addConfigOptions(Map options) { - super.addConfigOptions( options ); - if ( getDialect() instanceof PostgreSQLDialect ) { - // In PostgreSQL LOBs cannot be used in auto-commit mode. - options.put( "hibernate.connection.autocommit", "false" ); - } - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - LobTestEntity lte = new LobTestEntity( "abc", new byte[]{ 0, 1, 2 }, new char[]{ 'x', 'y', 'z' } ); - em.persist( lte ); - id1 = lte.getId(); - em.getTransaction().commit(); - - em.getTransaction().begin(); - lte = em.find( LobTestEntity.class, id1 ); - lte.setStringLob( "def" ); - lte.setByteLob( new byte[]{ 3, 4, 5 } ); - lte.setCharLob( new char[]{ 'h', 'i', 'j' } ); - em.getTransaction().commit(); - - // this creates a revision history for a Lob-capable entity but the change is on a non-audited - // field and so it should only generate 1 revision, the initial persist. - em.getTransaction().begin(); - LobTestEntity lte2 = new LobTestEntity( "abc", new byte[]{ 0, 1, 2 }, new char[]{ 'x', 'y', 'z' } ); - lte2.setData( "Hi" ); - em.persist( lte2 ); - em.getTransaction().commit(); - id2 = lte2.getId(); - - em.getTransaction().begin(); - lte2 = em.find( LobTestEntity.class, id2 ); - lte2.setData( "Hello World" ); - em.getTransaction().commit(); - } - - @Test - public void testRevisionsCounts() { - assertEquals( Arrays.asList( 1, 2 ), getAuditReader().getRevisions( LobTestEntity.class, id1 ) ); - } - - @Test - public void testHistoryOfId1() { - LobTestEntity ver1 = new LobTestEntity( id1, "abc", new byte[]{ 0, 1, 2 }, new char[]{ 'x', 'y', 'z' } ); - LobTestEntity ver2 = new LobTestEntity( id1, "def", new byte[]{ 3, 4, 5 }, new char[]{ 'h', 'i', 'j' } ); - assertEquals( getAuditReader().find( LobTestEntity.class, id1, 1 ), ver1 ); - assertEquals( getAuditReader().find( LobTestEntity.class, id1, 2 ), ver2 ); - } - - @Test - @JiraKey(value = "HHH-10734") - public void testRevisionsCountsForAuditedArraysWithNoChanges() { - assertEquals( Arrays.asList( 3 ), getAuditReader().getRevisions( LobTestEntity.class, id2 ) ); - } - - @Test - @JiraKey(value = "HHH-10734") - public void testHistoryOfId2() { - LobTestEntity ver1 = new LobTestEntity( id2, "abc", new byte[]{ 0, 1, 2 }, new char[]{ 'x', 'y', 'z' } ); - assertEquals( getAuditReader().find( LobTestEntity.class, id2, 3 ), ver1 ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/data/RecordFieldEntityTest.java b/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/data/RecordFieldEntityTest.java deleted file mode 100644 index b96e731e6aed..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/data/RecordFieldEntityTest.java +++ /dev/null @@ -1,146 +0,0 @@ -/* - * SPDX-License-Identifier: Apache-2.0 - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.test.integration.data; - - -import jakarta.persistence.Embedded; -import jakarta.persistence.Entity; -import jakarta.persistence.EntityManager; -import jakarta.persistence.Id; -import org.hibernate.envers.AuditReader; -import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; - - -/** - * Tests that {@link jakarta.persistence.Embedded} works correctly when combined with Java record classes - * in the context of Envers auditing. - * - * @author Minjae Seon - */ -@JiraKey(value = "HHH-18691") -public class RecordFieldEntityTest extends BaseEnversJPAFunctionalTestCase { - record TestRecord(String foo, String bar) {} - - static class TestEmbeddedClass { - public TestEmbeddedClass() {} - public TestEmbeddedClass(String foo, String bar) { - this.foo = foo; - this.bar = bar; - } - - private String foo; - private String bar; - - public String getFoo() { - return foo; - } - - public String getBar() { - return bar; - } - - public void setFoo(String foo) { - this.foo = foo; - } - } - - @Entity - @Audited - static class WithRecord { - @Id - private Integer id; - - @Embedded - private TestRecord testRecord; - - public Integer getId() { - return id; - } - - static WithRecord of(int id, String foo, String bar) { - WithRecord withRecord = new WithRecord(); - - withRecord.id = id; - withRecord.testRecord = new TestRecord(foo, bar); - return withRecord; - } - } - - @Entity - @Audited - static class WithoutRecord { - @Id - private Integer id; - - @Embedded - private TestEmbeddedClass testEmbeddedClass; - - public Integer getId() { - return id; - } - - public TestEmbeddedClass getTestEmbeddedClass() { - return testEmbeddedClass; - } - - static WithoutRecord of(int id, String foo, String bar) { - WithoutRecord withoutRecord = new WithoutRecord(); - - withoutRecord.id = id; - withoutRecord.testEmbeddedClass = new TestEmbeddedClass(foo, bar); - - return withoutRecord; - } - } - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[]{ WithRecord.class, WithoutRecord.class }; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - em.getTransaction().begin(); - - // Create WithRecord Entity - WithRecord withRecord = WithRecord.of( 1, "foo", "bar" ); - em.persist( withRecord ); - - // Create WithoutRecord - WithoutRecord withoutRecord = WithoutRecord.of( 1, "foo", "bar" ); - em.persist( withoutRecord ); - - em.getTransaction().commit(); - - em.close(); - } - - @Test - public void testLoadRecordData() { - AuditReader auditReader = getAuditReader(); - WithRecord recordRev = auditReader.find( WithRecord.class, 1, 1 ); - - assertEquals("WithRecord.TestRecord.foo equals foo", "foo", recordRev.testRecord.foo()); - assertEquals("WithRecord.TestRecord.bar equals bar", "bar", recordRev.testRecord.bar()); - } - - @Test - public void testLoadWithoutRecordData() { - AuditReader auditReader = getAuditReader(); - WithoutRecord withoutRecordRev = auditReader.find( WithoutRecord.class, 1, 1 ); - - assertEquals("WithoutRecord.TestEmbeddedClass.foo equals foo", "foo", withoutRecordRev.getTestEmbeddedClass().getFoo()); - assertEquals("WithoutRecord.TestEmbeddedClass.bar equals bar", "bar", withoutRecordRev.getTestEmbeddedClass().getBar()); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/dynamic/AuditedDynamicComponentsAdvancedCasesTest.java b/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/dynamic/AuditedDynamicComponentsAdvancedCasesTest.java deleted file mode 100644 index d2dcdae529a0..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/dynamic/AuditedDynamicComponentsAdvancedCasesTest.java +++ /dev/null @@ -1,380 +0,0 @@ -/* - * SPDX-License-Identifier: Apache-2.0 - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.test.integration.dynamic; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import org.hibernate.Session; -import org.hibernate.cfg.AvailableSettings; -import org.hibernate.envers.query.AuditEntity; -import org.hibernate.orm.test.envers.BaseEnversFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.integration.components.dynamic.AdvancedEntity; -import org.hibernate.orm.test.envers.integration.components.dynamic.Age; -import org.hibernate.orm.test.envers.integration.components.dynamic.InternalComponent; -import org.hibernate.orm.test.envers.integration.components.dynamic.ManyToManyEntity; -import org.hibernate.orm.test.envers.integration.components.dynamic.ManyToOneEntity; -import org.hibernate.orm.test.envers.integration.components.dynamic.OneToOneEntity; - -import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; -import junit.framework.Assert; - -import static org.hibernate.testing.junit4.ExtraAssertions.assertTyping; - -/** - * @author Lukasz Zuchowski (author at zuchos dot com) - * More advanced tests for dynamic component. - */ -@JiraKey(value = "HHH-8049") -public class AuditedDynamicComponentsAdvancedCasesTest extends BaseEnversFunctionalTestCase { - - public static final String PROP_BOOLEAN = "propBoolean"; - public static final String PROP_INT = "propInt"; - 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"; - public static final String INTERNAL_SET = "internalSet"; - public static final String INTERNAL_SET_OF_COMPONENTS = "internalSetOfComponents"; - public static final String AGE_USER_TYPE = "ageUserType"; - public static final String INTERNAL_LIST_OF_USER_TYPES = "internalListOfUserTypes"; - - @Override - protected void addSettings(Map settings) { - super.addSettings( settings ); - settings.put( AvailableSettings.JPA_TRANSACTION_COMPLIANCE, "false" ); - } - - @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" ) ); - List list = new ArrayList(); - list.add( "One" ); - list.add( "Two" ); - list.add( "Three" ); - advancedEntity.getDynamicConfiguration().put( INTERNAL_LIST, list ); - 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 ); - Set set = new HashSet(); - set.add( "Une" ); - set.add( "Due" ); - advancedEntity.getDynamicConfiguration().put( INTERNAL_SET, set ); - Set componentSet = new HashSet(); - componentSet.add( new InternalComponent( "Ein" ) ); - componentSet.add( new InternalComponent( "Zwei" ) ); - advancedEntity.getDynamicConfiguration().put( INTERNAL_SET_OF_COMPONENTS, componentSet ); - advancedEntity.getDynamicConfiguration().put( AGE_USER_TYPE, new Age( 18 ) ); - List ages = new ArrayList(); - ages.add( new Age( 1 ) ); - ages.add( new Age( 2 ) ); - ages.add( new Age( 3 ) ); - - advancedEntity.getDynamicConfiguration().put( INTERNAL_LIST_OF_USER_TYPES, ages ); - return advancedEntity; - } - - @Test - @Priority(10) - //smoke test to make sure that hibernate & envers are working with the entity&mappings - public void shouldInitData() { - //given - ManyToOneEntity manyToOne = getManyToOneEntity(); - OneToOneEntity oneToOne = getOneToOneEntity(); - ManyToManyEntity manyToManyEntity = getManyToManyEntity(); - AdvancedEntity advancedEntity = getAdvancedEntity( manyToOne, oneToOne, manyToManyEntity ); - - //rev 1 - Session session = openSession(); - session.getTransaction().begin(); - session.persist( manyToOne ); - session.persist( oneToOne ); - session.persist( manyToManyEntity ); - session.persist( advancedEntity ); - session.getTransaction().commit(); - - //rev 2 - session.getTransaction().begin(); - InternalComponent internalComponent = (InternalComponent) advancedEntity.getDynamicConfiguration() - .get( INTERNAL_COMPONENT ); - internalComponent.setProperty( "new value" ); - session.persist( advancedEntity ); - session.getTransaction().commit(); - - //rev 3 - session.getTransaction().begin(); - List internalList = (List) advancedEntity.getDynamicConfiguration().get( INTERNAL_LIST ); - internalList.add( "four" ); - session.persist( advancedEntity ); - session.getTransaction().commit(); - - //rev 4 - session.getTransaction().begin(); - Map map = (Map) advancedEntity.getDynamicConfiguration().get( INTERNAL_MAP ); - map.put( "three", "3" ); - session.persist( 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.persist( manyToManyEntity2 ); - session.persist( advancedEntity ); - session.getTransaction().commit(); - - //rev 6 - session.getTransaction().begin(); - mapWithManyToMany = (Map) advancedEntity.getDynamicConfiguration().get( INTERNAL_MAP_WITH_MANY_TO_MANY ); - mapWithManyToMany.clear(); - session.persist( advancedEntity ); - session.getTransaction().commit(); - - //rev 7 - session.getTransaction().begin(); - Set internalComponentSet = (Set) advancedEntity.getDynamicConfiguration() - .get( INTERNAL_SET_OF_COMPONENTS ); - internalComponentSet.add( new InternalComponent( "drei" ) ); - session.persist( advancedEntity ); - session.getTransaction().commit(); - - //rev 8 - session.getTransaction().begin(); - advancedEntity.getDynamicConfiguration().put( AGE_USER_TYPE, new Age( 19 ) ); - session.persist( advancedEntity ); - session.getTransaction().commit(); - - //rev 9 - session.getTransaction().begin(); - List ages = (List) advancedEntity.getDynamicConfiguration().get( INTERNAL_LIST_OF_USER_TYPES ); - ages.add( new Age( 4 ) ); - session.persist( advancedEntity ); - session.getTransaction().commit(); - - //rev this, should not create revision - session.getTransaction().begin(); - session.getTransaction().commit(); - - //sanity check. Loaded entity should be equal to one that we created. - AdvancedEntity advancedEntityActual = (AdvancedEntity) session.getReference( AdvancedEntity.class, 1L ); - - Assert.assertEquals( advancedEntity, advancedEntityActual ); - } - - - @Test - public void shouldMakeRevisions() { - Session session = openSession(); - session.getTransaction().begin(); - //given & when shouldInitData - ManyToOneEntity manyToOne = getManyToOneEntity(); - OneToOneEntity oneToOne = getOneToOneEntity(); - ManyToManyEntity manyToManyEntity = getManyToManyEntity(); - AdvancedEntity advancedEntity = getAdvancedEntity( manyToOne, oneToOne, manyToManyEntity ); - - //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 ); - - //then v7 - Set internalComponentSet = (Set) advancedEntity.getDynamicConfiguration() - .get( INTERNAL_SET_OF_COMPONENTS ); - internalComponentSet.add( new InternalComponent( "drei" ) ); - - AdvancedEntity ver7 = getAuditReader().find( - AdvancedEntity.class, - advancedEntity.getId(), - 7 - ); - Assert.assertEquals( advancedEntity, ver7 ); - - //then v8 - advancedEntity.getDynamicConfiguration().put( AGE_USER_TYPE, new Age( 19 ) ); - - - AdvancedEntity ver8 = getAuditReader().find( - AdvancedEntity.class, - advancedEntity.getId(), - 8 - ); - Assert.assertEquals( advancedEntity, ver8 ); - - //then v9 - List ages = (List) advancedEntity.getDynamicConfiguration().get( INTERNAL_LIST_OF_USER_TYPES ); - ages.add( new Age( 4 ) ); - - AdvancedEntity ver9 = getAuditReader().find( - AdvancedEntity.class, - advancedEntity.getId(), - 9 - ); - Assert.assertEquals( advancedEntity, ver9 ); - - session.getTransaction().commit(); - } - - @Test - public void testOfQueryOnDynamicComponent() { - //given (and result of shouldInitData() - AdvancedEntity entity = getAdvancedEntity( getManyToOneEntity(), getOneToOneEntity(), getManyToManyEntity() ); - - //when - ManyToOneEntity manyToOneEntity = (ManyToOneEntity) entity.getDynamicConfiguration().get( PROP_MANY_TO_ONE ); - List resultList = getAuditReader().createQuery() - .forEntitiesAtRevision( AdvancedEntity.class, 1 ) - .add( - AuditEntity.relatedId( "dynamicConfiguration_" + PROP_MANY_TO_ONE ) - .eq( manyToOneEntity.getId() ) - ) - .getResultList(); - - //then - Assert.assertEquals( entity, resultList.get( 0 ) ); - - //when - InternalComponent internalComponent = (InternalComponent) entity.getDynamicConfiguration().get( INTERNAL_COMPONENT ); - resultList = getAuditReader().createQuery() - .forEntitiesAtRevision( AdvancedEntity.class, 1 ) - .add( - AuditEntity.property( "dynamicConfiguration_" + INTERNAL_COMPONENT+"_property") - .eq( internalComponent.getProperty() ) - ) - .getResultList(); - - //then - Assert.assertEquals( entity, resultList.get( 0 ) ); - - //when - try { - OneToOneEntity oneToOneEntity = (OneToOneEntity) entity.getDynamicConfiguration().get( PROP_ONE_TO_ONE ); - getAuditReader().createQuery() - .forEntitiesAtRevision( AdvancedEntity.class, 1 ) - .add( AuditEntity.property( "dynamicConfiguration_" + PROP_ONE_TO_ONE ).eq( oneToOneEntity ) ) - .getResultList(); - - //then - Assert.fail(); - } - catch ( Exception e ) { - if ( getSession().getTransaction().isActive() ) { - getSession().getTransaction().rollback(); - } - - assertTyping( IllegalArgumentException.class, e ); - } - } - - @Test - public void testRevisionsCounts() { - Assert.assertEquals( - Arrays.asList( 1, 2, 3, 4, 5, 6, 7, 8, 9 ), - getAuditReader().getRevisions( AdvancedEntity.class, 1L ) - ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/maytomany/BasicWhereJoinTable.java b/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/maytomany/BasicWhereJoinTable.java deleted file mode 100644 index 1223f5e01db0..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/maytomany/BasicWhereJoinTable.java +++ /dev/null @@ -1,169 +0,0 @@ -/* - * SPDX-License-Identifier: Apache-2.0 - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.test.integration.maytomany; - -import java.util.Arrays; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.IntNoAutoIdTestEntity; -import org.hibernate.orm.test.envers.entities.manytomany.WhereJoinTableEntity; -import org.hibernate.orm.test.envers.tools.TestTools; - -import org.junit.Test; - -import static org.junit.Assert.assertEquals; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class BasicWhereJoinTable extends BaseEnversJPAFunctionalTestCase { - private Integer ite1_1_id; - private Integer ite1_2_id; - private Integer ite2_1_id; - private Integer ite2_2_id; - - private Integer wjte1_id; - private Integer wjte2_id; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {WhereJoinTableEntity.class, IntNoAutoIdTestEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - IntNoAutoIdTestEntity ite1_1 = new IntNoAutoIdTestEntity( 1, 10 ); - IntNoAutoIdTestEntity ite1_2 = new IntNoAutoIdTestEntity( 1, 11 ); - IntNoAutoIdTestEntity ite2_1 = new IntNoAutoIdTestEntity( 2, 20 ); - IntNoAutoIdTestEntity ite2_2 = new IntNoAutoIdTestEntity( 2, 21 ); - - WhereJoinTableEntity wjte1 = new WhereJoinTableEntity(); - wjte1.setData( "wjte1" ); - - WhereJoinTableEntity wjte2 = new WhereJoinTableEntity(); - wjte1.setData( "wjte2" ); - - // Revision 1 - em.getTransaction().begin(); - - em.persist( ite1_1 ); - em.persist( ite1_2 ); - em.persist( ite2_1 ); - em.persist( ite2_2 ); - em.persist( wjte1 ); - em.persist( wjte2 ); - - em.getTransaction().commit(); - em.clear(); - - // Revision 2 (wjte1: 1_1, 2_1) - - em.getTransaction().begin(); - - wjte1 = em.find( WhereJoinTableEntity.class, wjte1.getId() ); - - wjte1.getReferences1().add( ite1_1 ); - wjte1.getReferences2().add( ite2_1 ); - - em.getTransaction().commit(); - em.clear(); - - // Revision 3 (wjte1: 1_1, 2_1; wjte2: 1_1, 1_2) - em.getTransaction().begin(); - - wjte2 = em.find( WhereJoinTableEntity.class, wjte2.getId() ); - - wjte2.getReferences1().add( ite1_1 ); - wjte2.getReferences1().add( ite1_2 ); - - em.getTransaction().commit(); - em.clear(); - - // Revision 4 (wjte1: 2_1; wjte2: 1_1, 1_2, 2_2) - em.getTransaction().begin(); - - wjte1 = em.find( WhereJoinTableEntity.class, wjte1.getId() ); - wjte2 = em.find( WhereJoinTableEntity.class, wjte2.getId() ); - - wjte1.getReferences1().remove( ite1_1 ); - wjte2.getReferences2().add( ite2_2 ); - - em.getTransaction().commit(); - em.clear(); - - // - - ite1_1_id = ite1_1.getId(); - ite1_2_id = ite1_2.getId(); - ite2_1_id = ite2_1.getId(); - ite2_2_id = ite2_2.getId(); - - wjte1_id = wjte1.getId(); - wjte2_id = wjte2.getId(); - } - - @Test - public void testRevisionsCounts() { - assertEquals( Arrays.asList( 1, 2, 4 ), getAuditReader().getRevisions( WhereJoinTableEntity.class, wjte1_id ) ); - assertEquals( Arrays.asList( 1, 3, 4 ), getAuditReader().getRevisions( WhereJoinTableEntity.class, wjte2_id ) ); - - assertEquals( Arrays.asList( 1 ), getAuditReader().getRevisions( IntNoAutoIdTestEntity.class, ite1_1_id ) ); - assertEquals( Arrays.asList( 1 ), getAuditReader().getRevisions( IntNoAutoIdTestEntity.class, ite1_2_id ) ); - assertEquals( Arrays.asList( 1 ), getAuditReader().getRevisions( IntNoAutoIdTestEntity.class, ite2_1_id ) ); - assertEquals( Arrays.asList( 1 ), getAuditReader().getRevisions( IntNoAutoIdTestEntity.class, ite2_2_id ) ); - } - - @Test - public void testHistoryOfWjte1() { - IntNoAutoIdTestEntity ite1_1 = getEntityManager().find( IntNoAutoIdTestEntity.class, ite1_1_id ); - IntNoAutoIdTestEntity ite2_1 = getEntityManager().find( IntNoAutoIdTestEntity.class, ite2_1_id ); - - WhereJoinTableEntity rev1 = getAuditReader().find( WhereJoinTableEntity.class, wjte1_id, 1 ); - WhereJoinTableEntity rev2 = getAuditReader().find( WhereJoinTableEntity.class, wjte1_id, 2 ); - WhereJoinTableEntity rev3 = getAuditReader().find( WhereJoinTableEntity.class, wjte1_id, 3 ); - WhereJoinTableEntity rev4 = getAuditReader().find( WhereJoinTableEntity.class, wjte1_id, 4 ); - - // Checking 1st list - assert TestTools.checkCollection( rev1.getReferences1() ); - assert TestTools.checkCollection( rev2.getReferences1(), ite1_1 ); - assert TestTools.checkCollection( rev3.getReferences1(), ite1_1 ); - assert TestTools.checkCollection( rev4.getReferences1() ); - - // Checking 2nd list - assert TestTools.checkCollection( rev1.getReferences2() ); - assert TestTools.checkCollection( rev2.getReferences2(), ite2_1 ); - assert TestTools.checkCollection( rev3.getReferences2(), ite2_1 ); - assert TestTools.checkCollection( rev4.getReferences2(), ite2_1 ); - } - - @Test - public void testHistoryOfWjte2() { - IntNoAutoIdTestEntity ite1_1 = getEntityManager().find( IntNoAutoIdTestEntity.class, ite1_1_id ); - IntNoAutoIdTestEntity ite1_2 = getEntityManager().find( IntNoAutoIdTestEntity.class, ite1_2_id ); - IntNoAutoIdTestEntity ite2_2 = getEntityManager().find( IntNoAutoIdTestEntity.class, ite2_2_id ); - - WhereJoinTableEntity rev1 = getAuditReader().find( WhereJoinTableEntity.class, wjte2_id, 1 ); - WhereJoinTableEntity rev2 = getAuditReader().find( WhereJoinTableEntity.class, wjte2_id, 2 ); - WhereJoinTableEntity rev3 = getAuditReader().find( WhereJoinTableEntity.class, wjte2_id, 3 ); - WhereJoinTableEntity rev4 = getAuditReader().find( WhereJoinTableEntity.class, wjte2_id, 4 ); - - // Checking 1st list - assert TestTools.checkCollection( rev1.getReferences1() ); - assert TestTools.checkCollection( rev2.getReferences1() ); - assert TestTools.checkCollection( rev3.getReferences1(), ite1_1, ite1_2 ); - assert TestTools.checkCollection( rev4.getReferences1(), ite1_1, ite1_2 ); - - // Checking 2nd list - assert TestTools.checkCollection( rev1.getReferences2() ); - assert TestTools.checkCollection( rev2.getReferences2() ); - assert TestTools.checkCollection( rev3.getReferences2() ); - assert TestTools.checkCollection( rev4.getReferences2(), ite2_2 ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/modifiedflags/HasChangedChildAuditing.java b/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/modifiedflags/HasChangedChildAuditing.java deleted file mode 100644 index 8d152f5d5c7a..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/modifiedflags/HasChangedChildAuditing.java +++ /dev/null @@ -1,80 +0,0 @@ -/* - * SPDX-License-Identifier: Apache-2.0 - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.test.integration.modifiedflags; - -import java.util.List; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.integration.inheritance.joined.ChildEntity; -import org.hibernate.orm.test.envers.integration.inheritance.joined.ParentEntity; -import org.hibernate.orm.test.envers.integration.modifiedflags.AbstractModifiedFlagsEntityTest; - -import org.junit.Test; - -import static junit.framework.Assert.assertEquals; -import static org.hibernate.orm.test.envers.tools.TestTools.extractRevisionNumbers; -import static org.hibernate.orm.test.envers.tools.TestTools.makeList; - -/** - * @author Adam Warski (adam at warski dot org) - * @author Michal Skowronek (mskowr at o2 dot pl) - */ -public class HasChangedChildAuditing extends AbstractModifiedFlagsEntityTest { - private Integer id1; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {ChildEntity.class, ParentEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - id1 = 1; - - // Rev 1 - em.getTransaction().begin(); - ChildEntity ce = new ChildEntity( id1, "x", 1l ); - em.persist( ce ); - em.getTransaction().commit(); - - // Rev 2 - em.getTransaction().begin(); - ce = em.find( ChildEntity.class, id1 ); - ce.setData( "y" ); - ce.setNumVal( 2l ); - em.getTransaction().commit(); - } - - @Test - public void testChildHasChanged() throws Exception { - List list = queryForPropertyHasChanged( ChildEntity.class, id1, "data" ); - assertEquals( 2, list.size() ); - assertEquals( makeList( 1, 2 ), extractRevisionNumbers( list ) ); - - list = queryForPropertyHasChanged( ChildEntity.class, id1, "numVal" ); - assertEquals( 2, list.size() ); - assertEquals( makeList( 1, 2 ), extractRevisionNumbers( list ) ); - - list = queryForPropertyHasNotChanged( ChildEntity.class, id1, "data" ); - assertEquals( 0, list.size() ); - - list = queryForPropertyHasNotChanged( ChildEntity.class, id1, "numVal" ); - assertEquals( 0, list.size() ); - } - - @Test - public void testParentHasChanged() throws Exception { - List list = queryForPropertyHasChanged( ParentEntity.class, id1, "data" ); - assertEquals( 2, list.size() ); - assertEquals( makeList( 1, 2 ), extractRevisionNumbers( list ) ); - - list = queryForPropertyHasNotChanged( ParentEntity.class, id1, "data" ); - assertEquals( 0, list.size() ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/modifiedflags/HasChangedChildReferencing.java b/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/modifiedflags/HasChangedChildReferencing.java deleted file mode 100644 index d294d438eb14..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/modifiedflags/HasChangedChildReferencing.java +++ /dev/null @@ -1,93 +0,0 @@ -/* - * SPDX-License-Identifier: Apache-2.0 - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.test.integration.modifiedflags; - -import java.util.List; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.integration.inheritance.joined.childrelation.ChildIngEntity; -import org.hibernate.orm.test.envers.integration.inheritance.joined.childrelation.ParentNotIngEntity; -import org.hibernate.orm.test.envers.integration.inheritance.joined.childrelation.ReferencedEntity; -import org.hibernate.orm.test.envers.integration.modifiedflags.AbstractModifiedFlagsEntityTest; - -import org.junit.Test; - -import static junit.framework.Assert.assertEquals; -import static org.hibernate.orm.test.envers.tools.TestTools.extractRevisionNumbers; -import static org.hibernate.orm.test.envers.tools.TestTools.makeList; - -/** - * @author Adam Warski (adam at warski dot org) - * @author Michal Skowronek (mskowr at o2 dot pl) - */ -public class HasChangedChildReferencing extends AbstractModifiedFlagsEntityTest { - private Integer re_id1; - private Integer re_id2; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {ChildIngEntity.class, ParentNotIngEntity.class, ReferencedEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - re_id1 = 1; - re_id2 = 10; - Integer c_id = 100; - - // Rev 1 - em.getTransaction().begin(); - - ReferencedEntity re1 = new ReferencedEntity( re_id1 ); - em.persist( re1 ); - - ReferencedEntity re2 = new ReferencedEntity( re_id2 ); - em.persist( re2 ); - - em.getTransaction().commit(); - - // Rev 2 - em.getTransaction().begin(); - - re1 = em.find( ReferencedEntity.class, re_id1 ); - - ChildIngEntity cie = new ChildIngEntity( c_id, "y", 1l ); - cie.setReferenced( re1 ); - em.persist( cie ); - c_id = cie.getId(); - - em.getTransaction().commit(); - - // Rev 3 - em.getTransaction().begin(); - - re2 = em.find( ReferencedEntity.class, re_id2 ); - cie = em.find( ChildIngEntity.class, c_id ); - - cie.setReferenced( re2 ); - - em.getTransaction().commit(); - } - - @Test - public void testReferencedEntityHasChanged() throws Exception { - List list = queryForPropertyHasChanged( ReferencedEntity.class, re_id1, "referencing" ); - assertEquals( 2, list.size() ); - assertEquals( makeList( 2, 3 ), extractRevisionNumbers( list ) ); - - list = queryForPropertyHasNotChanged( ReferencedEntity.class, re_id1, "referencing" ); - assertEquals( 1, list.size() ); // initially referencing collection is null - assertEquals( makeList( 1 ), extractRevisionNumbers( list ) ); - - list = queryForPropertyHasChanged( ReferencedEntity.class, re_id2, "referencing" ); - assertEquals( 1, list.size() ); - assertEquals( makeList( 3 ), extractRevisionNumbers( list ) ); - } - -} diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/modifiedflags/HasChangedNotOwnedBidirectional.java b/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/modifiedflags/HasChangedNotOwnedBidirectional.java deleted file mode 100644 index 8863b66aef2a..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/modifiedflags/HasChangedNotOwnedBidirectional.java +++ /dev/null @@ -1,88 +0,0 @@ -/* - * SPDX-License-Identifier: Apache-2.0 - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.test.integration.modifiedflags; - -import java.util.List; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.integration.inheritance.joined.notownedrelation.Address; -import org.hibernate.orm.test.envers.integration.inheritance.joined.notownedrelation.Contact; -import org.hibernate.orm.test.envers.integration.inheritance.joined.notownedrelation.PersonalContact; -import org.hibernate.orm.test.envers.integration.modifiedflags.AbstractModifiedFlagsEntityTest; - -import org.junit.Test; - -import static junit.framework.Assert.assertEquals; -import static org.hibernate.orm.test.envers.tools.TestTools.extractRevisionNumbers; -import static org.hibernate.orm.test.envers.tools.TestTools.makeList; - -/** - * @author Adam Warski (adam at warski dot org) - * @author Michal Skowronek (mskowr at o2 dot pl) - */ -public class HasChangedNotOwnedBidirectional extends AbstractModifiedFlagsEntityTest { - private Long pc_id; - private Long a1_id; - private Long a2_id; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {Address.class, Contact.class, PersonalContact.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - pc_id = 1l; - a1_id = 10l; - a2_id = 100l; - - // Rev 1 - em.getTransaction().begin(); - - PersonalContact pc = new PersonalContact( pc_id, "e", "f" ); - - Address a1 = new Address( a1_id, "a1" ); - a1.setContact( pc ); - - em.persist( pc ); - em.persist( a1 ); - - em.getTransaction().commit(); - - // Rev 2 - em.getTransaction().begin(); - - pc = em.find( PersonalContact.class, pc_id ); - - Address a2 = new Address( a2_id, "a2" ); - a2.setContact( pc ); - - em.persist( a2 ); - - em.getTransaction().commit(); - } - - @Test - public void testReferencedEntityHasChanged() throws Exception { - List list = queryForPropertyHasChanged( - PersonalContact.class, pc_id, - "addresses" - ); - assertEquals( 2, list.size() ); - assertEquals( makeList( 1, 2 ), extractRevisionNumbers( list ) ); - - list = queryForPropertyHasChanged( Address.class, a1_id, "contact" ); - assertEquals( 1, list.size() ); - assertEquals( makeList( 1 ), extractRevisionNumbers( list ) ); - - list = queryForPropertyHasChanged( Address.class, a2_id, "contact" ); - assertEquals( 1, list.size() ); - assertEquals( makeList( 2 ), extractRevisionNumbers( list ) ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/naming/VersionsJoinTableRangeComponentNamingTest.java b/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/naming/VersionsJoinTableRangeComponentNamingTest.java deleted file mode 100644 index 69def9564da2..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/naming/VersionsJoinTableRangeComponentNamingTest.java +++ /dev/null @@ -1,311 +0,0 @@ -/* - * SPDX-License-Identifier: Apache-2.0 - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.test.integration.naming; - -import java.util.Arrays; -import java.util.Iterator; -import java.util.List; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.components.Component1; -import org.hibernate.mapping.Column; -import org.hibernate.mapping.PersistentClass; -import org.hibernate.orm.test.envers.integration.naming.VersionsJoinTableRangeComponentTestEntity; -import org.hibernate.orm.test.envers.integration.naming.VersionsJoinTableRangeTestAlternateEntity; -import org.hibernate.orm.test.envers.integration.naming.VersionsJoinTableRangeTestEntity; -import org.hibernate.orm.test.envers.integration.naming.VersionsJoinTableRangeTestEntitySuperClass; - -import org.junit.Test; - -/** - * Test class for {@link VersionsJoinTableRangeComponentTestEntity}, to test - * various {@link org.hibernate.envers.AuditOverride} annotations. - * - * @author Erik-Berndt Scheper - */ -public class VersionsJoinTableRangeComponentNamingTest extends - BaseEnversJPAFunctionalTestCase { - private Integer vjrcte_id; - private Integer vjtrte_id; - private Integer vjtrtae_id1; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { - VersionsJoinTableRangeComponentTestEntity.class, - VersionsJoinTableRangeTestEntitySuperClass.class, - VersionsJoinTableRangeTestEntity.class, - VersionsJoinTableRangeTestAlternateEntity.class - }; - } - - @Test - @Priority(10) - public void initData() { - - // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - - // create an instance of the test entity - VersionsJoinTableRangeComponentTestEntity vjrcte = new VersionsJoinTableRangeComponentTestEntity(); - em.persist( vjrcte ); - em.getTransaction().commit(); - - // Revision 2 - em.getTransaction().begin(); - - vjrcte = em.find( - VersionsJoinTableRangeComponentTestEntity.class, - vjrcte.getId() - ); - - // create a component containing a list of - // VersionsJoinTableRangeTestEntity-instances - VersionsJoinTableRangeTestEntity vjtrte = new VersionsJoinTableRangeTestEntity(); - vjtrte.setGenericValue( "generic1" ); - vjtrte.setValue( "value1" ); - // and add it to the test entity - vjrcte.getComponent1().getRange().add( vjtrte ); - - // create a second component containing a list of - // VersionsJoinTableRangeTestAlternateEntity-instances - VersionsJoinTableRangeTestAlternateEntity vjtrtae1 = new VersionsJoinTableRangeTestAlternateEntity(); - vjtrtae1.setGenericValue( "generic2" ); - vjtrtae1.setAlternateValue( "alternateValue2" ); - // and add it to the test entity - vjrcte.getComponent2().getRange().add( vjtrtae1 ); - - // create a third component, and add it to the test entity - Component1 simpleComponent = new Component1( "string1", "string2" ); - vjrcte.setComponent3( simpleComponent ); - - em.persist( vjtrte ); - em.persist( vjtrtae1 ); - em.persist( vjrcte ); - - em.getTransaction().commit(); - - // Revision 2 - em.getTransaction().begin(); - - vjrcte = em.find( - VersionsJoinTableRangeComponentTestEntity.class, - vjrcte.getId() - ); - vjtrte = em - .find( VersionsJoinTableRangeTestEntity.class, vjtrte.getId() ); - vjtrtae1 = em.find( - VersionsJoinTableRangeTestAlternateEntity.class, - vjtrtae1.getId() - ); - - assert vjrcte != null; - assert vjtrte != null; - assert vjtrtae1 != null; - - List ent1List = vjrcte - .getComponent1().getRange(); - assert ent1List.size() == 1; - assert vjtrte.equals( ent1List.get( 0 ) ); - - List ent2List = vjrcte - .getComponent2().getRange(); - assert ent2List.size() == 1; - assert vjtrtae1.equals( ent2List.get( 0 ) ); - - em.getTransaction().commit(); - - vjrcte_id = vjrcte.getId(); - vjtrte_id = vjtrte.getId(); - vjtrtae_id1 = vjtrtae1.getId(); - } - - @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( - getAuditReader().getRevisions( - VersionsJoinTableRangeComponentTestEntity.class, - vjrcte_id - ) - ); - assert Arrays.asList( 2 ).equals( - getAuditReader().getRevisions( - VersionsJoinTableRangeTestEntity.class, vjtrte_id - ) - ); - assert Arrays.asList( 2 ).equals( - getAuditReader().getRevisions( - VersionsJoinTableRangeTestAlternateEntity.class, - vjtrtae_id1 - ) - ); - } - - @Test - public void testHistoryOfUniId1() { - VersionsJoinTableRangeTestEntity vjtrte = getEntityManager().find( - VersionsJoinTableRangeTestEntity.class, vjtrte_id - ); - VersionsJoinTableRangeTestAlternateEntity vjtrtae = getEntityManager() - .find( - VersionsJoinTableRangeTestAlternateEntity.class, - vjtrtae_id1 - ); - - VersionsJoinTableRangeComponentTestEntity rev1 = getAuditReader().find( - VersionsJoinTableRangeComponentTestEntity.class, vjrcte_id, 1 - ); - VersionsJoinTableRangeComponentTestEntity rev2 = getAuditReader().find( - VersionsJoinTableRangeComponentTestEntity.class, vjrcte_id, 2 - ); - - assert rev1.getComponent1().getRange().size() == 0; - assert rev1.getComponent2().getRange().size() == 0; - - assert rev2.getComponent1().getRange().size() == 1; - assert rev2.getComponent1().getRange().get( 0 ).equals( vjtrte ); - assert rev2.getComponent2().getRange().size() == 1; - assert rev2.getComponent2().getRange().get( 0 ).equals( vjtrtae ); - } - - /* The Audit join tables we expect */ - private final static String COMPONENT_1_AUDIT_JOIN_TABLE_NAME = "JOIN_TABLE_COMPONENT_1_AUD"; - private final static String COMPONENT_2_AUDIT_JOIN_TABLE_NAME = "JOIN_TABLE_COMPONENT_2_AUD"; - - /* The Audit join tables that should NOT be there */ - private final static String UNMODIFIED_COMPONENT_1_AUDIT_JOIN_TABLE_NAME = "VersionsJoinTableRangeComponentTestEntity_VersionsJoinTableRangeTestEntity_AUD"; - private final static String UNMODIFIED_COMPONENT_2_AUDIT_JOIN_TABLE_NAME = "VersionsJoinTableRangeComponentTestEntity_VersionsJoinTableRangeTestAlternateEntity_AUD"; - - @Test - public void testExpectedTableNameComponent1() { - PersistentClass auditClass = metadata().getEntityBinding( - COMPONENT_1_AUDIT_JOIN_TABLE_NAME - ); - assert auditClass != null; - assert COMPONENT_1_AUDIT_JOIN_TABLE_NAME.equals( - auditClass.getTable() - .getName() - ); - } - - @Test - public void testExpectedTableNameComponent2() { - PersistentClass auditClass = metadata().getEntityBinding( - COMPONENT_2_AUDIT_JOIN_TABLE_NAME - ); - assert auditClass != null; - assert COMPONENT_2_AUDIT_JOIN_TABLE_NAME.equals( - auditClass.getTable() - .getName() - ); - } - - @Test - public void testWrongTableNameComponent1() { - PersistentClass auditClass = metadata().getEntityBinding( - UNMODIFIED_COMPONENT_1_AUDIT_JOIN_TABLE_NAME - ); - assert auditClass == null; - } - - @Test - public void testWrongTableNameComponent2() { - PersistentClass auditClass = metadata().getEntityBinding( - UNMODIFIED_COMPONENT_2_AUDIT_JOIN_TABLE_NAME - ); - assert auditClass == null; - } - - @Test - public void testJoinColumnNamesComponent1() { - PersistentClass auditClass = metadata().getEntityBinding( - COMPONENT_1_AUDIT_JOIN_TABLE_NAME - ); - assert auditClass != null; - - @SuppressWarnings("unchecked") - Iterator columns = auditClass.getTable().getColumns().iterator(); - - boolean id1Found = false; - boolean id2Found = false; - - while ( columns.hasNext() ) { - Column column = columns.next(); - if ( "VJTRCTE1_ID".equals( column.getName() ) ) { - id1Found = true; - } - - if ( "VJTRTE_ID".equals( column.getName() ) ) { - id2Found = true; - } - } - - assert id1Found && id2Found; - } - - @Test - public void testJoinColumnNamesComponent2() { - PersistentClass auditClass = metadata().getEntityBinding( - COMPONENT_2_AUDIT_JOIN_TABLE_NAME - ); - assert auditClass != null; - - @SuppressWarnings("unchecked") - Iterator columns = auditClass.getTable().getColumns().iterator(); - - boolean id1Found = false; - boolean id2Found = false; - - while ( columns.hasNext() ) { - Column column = columns.next(); - if ( "VJTRCTE2_ID".equals( column.getName() ) ) { - id1Found = true; - } - - if ( "VJTRTAE_ID".equals( column.getName() ) ) { - id2Found = true; - } - } - - assert id1Found && id2Found; - } - - /** - * Verify that - * {@link VersionsJoinTableRangeComponentTestEntity#getComponent3()} is - * partially audited. - */ - @Test - public void testOverrideNotAudited() { - PersistentClass auditClass = metadata().getEntityBinding( - VersionsJoinTableRangeComponentTestEntity.class.getName() - + "_AUD" - ); - assert auditClass != null; - - @SuppressWarnings("unchecked") - Iterator columns = auditClass.getTable().getColumns().iterator(); - - boolean auditColumn1Found = false; - boolean auditColumn2Found = false; - - while ( columns.hasNext() ) { - Column column = columns.next(); - if ( "STR1".equals( column.getName() ) ) { - auditColumn1Found = true; - } - - if ( "STR2".equals( column.getName() ) ) { - auditColumn2Found = true; - } - } - - assert auditColumn1Found && !auditColumn2Found; - } - -} diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/onetoone/bidirectional/BidirectionalOneToOneOptionalTest.java b/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/onetoone/bidirectional/BidirectionalOneToOneOptionalTest.java deleted file mode 100644 index 1764177dec23..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/onetoone/bidirectional/BidirectionalOneToOneOptionalTest.java +++ /dev/null @@ -1,88 +0,0 @@ -/* - * SPDX-License-Identifier: Apache-2.0 - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.test.integration.onetoone.bidirectional; - -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.integration.onetoone.bidirectional.BiRefedOptionalEntity; -import org.hibernate.orm.test.envers.integration.onetoone.bidirectional.BiRefingOptionalEntity; - -import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; - -/** - * @author Chris Cranford - */ -@JiraKey(value = "HHH-8305") -public class BidirectionalOneToOneOptionalTest extends BaseEnversJPAFunctionalTestCase { - private Integer refingWithNoRefedId; - private Integer refingId; - private Integer refedId; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { - BiRefingOptionalEntity.class, - BiRefedOptionalEntity.class - }; - } - - @Test - @Priority(10) - public void initData() { - EntityManager entityManager = getEntityManager(); - try { - // Revision 1 - entityManager.getTransaction().begin(); - - // store refing with null refed entity - BiRefingOptionalEntity refingWithNoRefed = new BiRefingOptionalEntity(); - refingWithNoRefed.setReference( null ); - entityManager.persist( refingWithNoRefed ); - - // store refing with non-null refed entity - BiRefingOptionalEntity refing = new BiRefingOptionalEntity(); - BiRefedOptionalEntity refed = new BiRefedOptionalEntity(); - refed.setReferencing( refing ); - refing.setReference( refed ); - entityManager.persist( refing ); - entityManager.persist( refed ); - - entityManager.getTransaction().commit(); - - this.refingId = refing.getId(); - this.refedId = refed.getId(); - this.refingWithNoRefedId = refingWithNoRefed.getId(); - } - finally { - entityManager.close(); - } - } - - @Test - public void testRevisionCounts() { - assertEquals( 1, getAuditReader().getRevisions( BiRefingOptionalEntity.class, refingId ).size() ); - assertEquals( 1, getAuditReader().getRevisions( BiRefingOptionalEntity.class, refingWithNoRefedId ).size() ); - assertEquals( 1, getAuditReader().getRevisions( BiRefedOptionalEntity.class, refedId ).size() ); - } - - @Test - public void testRevisionHistoryNullReference() { - BiRefingOptionalEntity rev1 = getAuditReader().find( BiRefingOptionalEntity.class, refingWithNoRefedId, 1 ); - assertNull( rev1.getReference() ); - } - - @Test - public void testRevisionHistoryWithNonNullReference() { - assertNotNull( getAuditReader().find( BiRefingOptionalEntity.class, refingId, 1).getReference() ); - assertNotNull( getAuditReader().find( BiRefedOptionalEntity.class, refedId, 1 ).getReferencing() ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/query/AssociationToOneInnerJoinQueryTest.java b/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/query/AssociationToOneInnerJoinQueryTest.java deleted file mode 100644 index a1173738c128..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/query/AssociationToOneInnerJoinQueryTest.java +++ /dev/null @@ -1,193 +0,0 @@ -/* - * SPDX-License-Identifier: Apache-2.0 - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.test.integration.query; - -import java.util.List; -import jakarta.persistence.EntityManager; -import jakarta.persistence.criteria.JoinType; - -import org.hibernate.envers.AuditReader; -import org.hibernate.envers.query.AuditEntity; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.integration.query.entities.Address; -import org.hibernate.orm.test.envers.integration.query.entities.Car; -import org.hibernate.orm.test.envers.integration.query.entities.Person; - -import org.junit.Test; - -import static org.junit.Assert.assertEquals; - -/** - * @author Felix Feisst (feisst dot felix at gmail dot com) - */ -@SuppressWarnings("unchecked") -public class AssociationToOneInnerJoinQueryTest extends BaseEnversJPAFunctionalTestCase { - - private Car vw; - private Car ford; - private Car toyota; - private Address address1; - private Address address2; - private Person vwOwner; - private Person fordOwner; - private Person toyotaOwner; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { Car.class, Person.class, Address.class }; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - // revision 1 - em.getTransaction().begin(); - address1 = new Address( "Freiburgerstrasse", 5 ); - em.persist( address1 ); - address2 = new Address( "Hindenburgstrasse", 30 ); - em.persist( address2 ); - vwOwner = new Person( "VW owner", 20, address1 ); - em.persist( vwOwner ); - fordOwner = new Person( "Ford owner", 30, address1 ); - em.persist( fordOwner ); - toyotaOwner = new Person( "Toyota owner", 30, address2 ); - em.persist( toyotaOwner ); - final Person nonOwner = new Person( "NonOwner", 30, address1 ); - em.persist( nonOwner ); - vw = new Car( "VW" ); - vw.setOwner( vwOwner ); - em.persist( vw ); - ford = new Car( "Ford" ); - ford.setOwner( fordOwner ); - em.persist( ford ); - toyota = new Car( "Toyota" ); - toyota.setOwner( toyotaOwner ); - em.persist( toyota ); - em.getTransaction().commit(); - - // revision 2 - em.getTransaction().begin(); - toyotaOwner.setAge( 40 ); - em.getTransaction().commit(); - } - - @Test - public void testAssociationQuery() { - - final AuditReader auditReader = getAuditReader(); - final Car result1 = (Car) auditReader.createQuery().forEntitiesAtRevision( Car.class, 1 ).traverseRelation( "owner", JoinType.INNER ) - .add( AuditEntity.property( "name" ).like( "Ford%" ) ).getSingleResult(); - assertEquals( "Unexpected single car at revision 1", ford.getId(), result1.getId() ); - - Car result2 = (Car) auditReader.createQuery().forEntitiesAtRevision( Car.class, 1 ).traverseRelation( "owner", JoinType.INNER ).traverseRelation( "address", JoinType.INNER ) - .add( AuditEntity.property( "number" ).eq( 30 ) ).getSingleResult(); - assertEquals( "Unexpected single car at revision 1", toyota.getId(), result2.getId() ); - - List resultList1 = auditReader.createQuery().forEntitiesAtRevision( Car.class, 1 ).traverseRelation( "owner", JoinType.INNER ) - .add( AuditEntity.property( "age" ).ge( 30 ) ).add( AuditEntity.property( "age" ).lt( 40 ) ).up() - .addOrder( AuditEntity.property( "make" ).asc() ).getResultList(); - assertEquals( "Unexpected number of cars for query in revision 1", 2, resultList1.size() ); - assertEquals( "Unexpected car at index 0 in revision 1", ford.getId(), resultList1.get( 0 ).getId() ); - assertEquals( "Unexpected car at index 1 in revision 2", toyota.getId(), resultList1.get( 1 ).getId() ); - - Car result3 = (Car) auditReader.createQuery().forEntitiesAtRevision( Car.class, 2 ).traverseRelation( "owner", JoinType.INNER ) - .add( AuditEntity.property( "age" ).ge( 30 ) ).add( AuditEntity.property( "age" ).lt( 40 ) ).up() - .addOrder( AuditEntity.property( "make" ).asc() ).getSingleResult(); - assertEquals( "Unexpected car at revision 2", ford.getId(), result3.getId() ); - } - - @Test - public void testAssociationQueryWithOrdering() { - - AuditReader auditReader = getAuditReader(); - - List cars1 = auditReader.createQuery().forEntitiesAtRevision( Car.class, 1 ).traverseRelation( "owner", JoinType.INNER ).traverseRelation( "address", JoinType.INNER ) - .addOrder( AuditEntity.property( "number" ).asc() ).up().addOrder( AuditEntity.property( "age" ).desc() ).getResultList(); - assertEquals( "Unexpected number of results", 3, cars1.size() ); - assertEquals( "Unexpected car at index 0", ford.getId(), cars1.get( 0 ).getId() ); - assertEquals( "Unexpected car at index 1", vw.getId(), cars1.get( 1 ).getId() ); - assertEquals( "Unexpected car at index 2", toyota.getId(), cars1.get( 2 ).getId() ); - - List cars2 = auditReader.createQuery().forEntitiesAtRevision( Car.class, 1 ).traverseRelation( "owner", JoinType.INNER ).traverseRelation( "address", JoinType.INNER ) - .addOrder( AuditEntity.property( "number" ).asc() ).up().addOrder( AuditEntity.property( "age" ).asc() ).getResultList(); - assertEquals( "Unexpected number of results", 3, cars2.size() ); - assertEquals( "Unexpected car at index 0", vw.getId(), cars2.get( 0 ).getId() ); - assertEquals( "Unexpected car at index 1", ford.getId(), cars2.get( 1 ).getId() ); - assertEquals( "Unexpected car at index 2", toyota.getId(), cars2.get( 2 ).getId() ); - - } - - @Test - public void testAssociationQueryWithProjection() { - - AuditReader auditReader = getAuditReader(); - - List list1 = auditReader.createQuery().forEntitiesAtRevision( Car.class, 2 ).traverseRelation( "owner", JoinType.INNER ) - .addProjection( AuditEntity.property( "age" ) ).addOrder( AuditEntity.property( "age" ).asc() ).getResultList(); - assertEquals( "Unexpected number of results", 3, list1.size() ); - assertEquals( "Unexpected age at index 0", Integer.valueOf( 20 ), list1.get( 0 ) ); - assertEquals( "Unexpected age at index 0", Integer.valueOf( 30 ), list1.get( 1 ) ); - assertEquals( "Unexpected age at index 0", Integer.valueOf( 40 ), list1.get( 2 ) ); - - List
list2 = auditReader.createQuery().forEntitiesAtRevision( Car.class, 2 ).traverseRelation( "owner", JoinType.INNER ) - .addOrder( AuditEntity.property( "age" ).asc() ).traverseRelation( "address", JoinType.INNER ).addProjection( AuditEntity.selectEntity( false ) ).getResultList(); - assertEquals( "Unexpected number of results", 2, list2.size() ); - assertEquals( "Unexpected address at index 0", address1.getId(), list2.get( 0 ).getId() ); - assertEquals( "Unexpected address at index 1", address2.getId(), list2.get( 1 ).getId() ); - - List
list3 = auditReader.createQuery().forEntitiesAtRevision( Car.class, 2 ).traverseRelation( "owner", JoinType.INNER ).traverseRelation( "address", JoinType.INNER ) - .addProjection( AuditEntity.selectEntity( true ) ).addOrder( AuditEntity.property( "number" ).asc() ).getResultList(); - assertEquals( "Unexpected number of results", 2, list3.size() ); - assertEquals( "Unexpected address at index 0", address1.getId(), list3.get( 0 ).getId() ); - assertEquals( "Unexpected address at index 1", address2.getId(), list3.get( 1 ).getId() ); - - List list4 = auditReader.createQuery().forEntitiesAtRevision( Car.class, 2 ).traverseRelation( "owner", JoinType.INNER ) - .addOrder( AuditEntity.property( "age" ).asc() ).addProjection( AuditEntity.selectEntity( false ) ).traverseRelation( "address", JoinType.INNER ) - .addProjection( AuditEntity.property( "number" ) ).getResultList(); - assertEquals( "Unexpected number of results", 3, list4.size() ); - final Object[] index0 = list4.get( 0 ); - assertEquals( "Unexpected owner at index 0", vwOwner.getId(), ( (Person) index0[0] ).getId() ); - assertEquals( "Unexpected number at index 0", Integer.valueOf( 5 ), index0[1] ); - final Object[] index1 = list4.get( 1 ); - assertEquals( "Unexpected owner at index 1", fordOwner.getId(), ( (Person) index1[0] ).getId() ); - assertEquals( "Unexpected number at index 1", Integer.valueOf( 5 ), index1[1] ); - final Object[] index2 = list4.get( 2 ); - assertEquals( "Unexpected owner at index 2", toyotaOwner.getId(), ( (Person) index2[0] ).getId() ); - assertEquals( "Unexpected number at index 2", Integer.valueOf( 30 ), index2[1] ); - } - - @Test - public void testDisjunctionOfPropertiesFromDifferentEntities() { - AuditReader auditReader = getAuditReader(); - // all cars where the owner has an age of 20 or lives in an address with number 30. - List resultList = auditReader.createQuery() - .forEntitiesAtRevision( Car.class, 1 ) - .traverseRelation( "owner", JoinType.INNER, "p" ) - .traverseRelation( "address", JoinType.INNER, "a" ) - .up().up().add( AuditEntity.disjunction().add(AuditEntity.property( "p", "age" ) - .eq( 20 ) ).add( AuditEntity.property( "a", "number" ).eq( 30 ) ) ) - .addOrder( AuditEntity.property( "make" ).asc() ).getResultList(); - assertEquals( "Expected two cars to be returned, Toyota and VW", 2, resultList.size() ); - assertEquals( "Unexpected car at index 0", toyota.getId(), resultList.get(0).getId() ); - assertEquals( "Unexpected car at index 1", vw.getId(), resultList.get(1).getId() ); - } - - @Test - public void testComparisonOfTwoPropertiesFromDifferentEntities() { - AuditReader auditReader = getAuditReader(); - // the car where the owner age is equal to the owner address number. - Car result = (Car) auditReader.createQuery() - .forEntitiesAtRevision( Car.class, 1 ) - .traverseRelation( "owner", JoinType.INNER, "p" ) - .traverseRelation( "address", JoinType.INNER, "a" ) - .up().up().add(AuditEntity.property( "p", "age" ) - .eqProperty( "a", "number" ) ).getSingleResult(); - assertEquals( "Unexpected car returned", toyota.getId(), result.getId() ); - } - -} diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/query/AuditFunctionQueryTest.java b/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/query/AuditFunctionQueryTest.java deleted file mode 100644 index 023cefd63ef9..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/query/AuditFunctionQueryTest.java +++ /dev/null @@ -1,162 +0,0 @@ -/* - * SPDX-License-Identifier: Apache-2.0 - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.test.integration.query; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; - -import jakarta.persistence.Entity; -import jakarta.persistence.EntityManager; -import jakarta.persistence.Id; - -import org.hibernate.envers.Audited; -import org.hibernate.envers.query.AuditEntity; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.junit.Test; - -/** - * @author Felix Feisst (feisst dot felix at gmail dot com) - */ -public class AuditFunctionQueryTest extends BaseEnversJPAFunctionalTestCase { - - @Entity(name = "TestEntity") - @Audited - public static class TestEntity { - - @Id - private Long id; - private String string1; - private String string2; - private Integer integer1; - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getString1() { - return string1; - } - - public void setString1(String string1) { - this.string1 = string1; - } - - public String getString2() { - return string2; - } - - public Integer getInteger1() { - return integer1; - } - - public void setInteger1(Integer integer1) { - this.integer1 = integer1; - } - - public void setString2(String string2) { - this.string2 = string2; - } - - } - - private TestEntity testEntity1; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[]{ TestEntity.class }; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - testEntity1 = new TestEntity(); - testEntity1.setId( 1L ); - testEntity1.setString1( "abcdef" ); - testEntity1.setString2( "42 - the truth" ); - testEntity1.setInteger1(42 ); - em.persist( testEntity1 ); - em.getTransaction().commit(); - } - - @Test - public void testProjectionWithPropertyArgument() { - Object actual = getAuditReader().createQuery().forEntitiesAtRevision( TestEntity.class, 1 ) - .addProjection( AuditEntity.function( "upper", AuditEntity.property( "string1" ) ) ).getSingleResult(); - String expected = testEntity1.getString1().toUpperCase(); - assertEquals( "Expected the property string1 to be upper case", expected, actual ); - } - - @Test - public void testProjectionWithPropertyAndSimpleArguments() { - Object actual = getAuditReader().createQuery().forEntitiesAtRevision( TestEntity.class, 1 ) - .addProjection( AuditEntity.function( "substring", AuditEntity.property( "string1" ), 3, 2 ) ).getSingleResult(); - // the sql substring indices are 1 based while java substring indices are 0 based - // the sql substring second parameter denotes the length of the substring - // while in java the scond argument denotes the end index - String expected = testEntity1.getString1().substring( 2, 4 ); - assertEquals( "Expected the substring of the property string1", expected, actual ); - } - - @Test - public void testProjectionWithNestedFunction() { - Object actual = getAuditReader().createQuery().forEntitiesAtRevision( TestEntity.class, 1 ) - .addProjection( AuditEntity.function( "concat", - AuditEntity.function( "upper", AuditEntity.property( "string1" ) ), - AuditEntity.function( "substring", AuditEntity.property( "string2" ), 1, 2 ) ) ) - .getSingleResult(); - final String expected = testEntity1.getString1().toUpperCase().concat( testEntity1.getString2().substring( 0, 2 ) ); - assertEquals( "Expected the upper cased string1 to be concat with the first two characters of string2", expected, actual ); - } - - @Test - public void testComparisonFunctionWithValue() { - TestEntity entity = (TestEntity) getAuditReader().createQuery().forEntitiesAtRevision( TestEntity.class, 1 ) - .add( AuditEntity.function( "substring", AuditEntity.property( "string1" ), 3, 2 ).eq( "cd" ) ).getSingleResult(); - assertNotNull( "Expected the entity to be returned", entity ); - assertEquals( "Expected the entity to be returned", testEntity1.getId(), entity.getId() ); - } - - @Test - public void testComparionFunctionWithProperty() { - TestEntity entity = (TestEntity) getAuditReader().createQuery().forEntitiesAtRevision( TestEntity.class, 1 ) - .add( AuditEntity.function( "length", AuditEntity.property( "string2" ) ).ltProperty( "integer1" ) ).getSingleResult(); - assertNotNull( "Expected the entity to be returned", entity ); - assertEquals( "Expected the entity to be returned", testEntity1.getId(), entity.getId() ); - } - - @Test - public void testComparisonFunctionWithFunction() { - TestEntity entity = (TestEntity) getAuditReader().createQuery().forEntitiesAtRevision( TestEntity.class, 1 ) - .add( AuditEntity.function( "substring", AuditEntity.property( "string2" ), 1, 2 ) - .eqFunction( AuditEntity.function( "str", AuditEntity.property( "integer1" ) ) ) ) - .getSingleResult(); - assertNotNull( "Expected the entity to be returned", entity ); - assertEquals( "Expected the entity to be returned", testEntity1.getId(), entity.getId() ); - } - - @Test - public void testComparisonPropertyWithFunction() { - TestEntity entity = (TestEntity) getAuditReader().createQuery().forEntitiesAtRevision( TestEntity.class, 1 ) - .add( AuditEntity.property( "integer1" ).gtFunction( AuditEntity.function( "length", AuditEntity.property( "string2" ) ) ) ).getSingleResult(); - assertNotNull( "Expected the entity to be returned", entity ); - assertEquals( "Expected the entity to be returned", testEntity1.getId(), entity.getId() ); - } - - @Test - public void testFunctionOnIdProperty() { - TestEntity entity = (TestEntity) getAuditReader().createQuery().forEntitiesAtRevision( TestEntity.class, 1 ) - .add( AuditEntity.function( "str", AuditEntity.id() ).like( "%1%" ) ).getSingleResult(); - assertNotNull( "Expected the entity to be returned", entity ); - assertEquals( "Expected the entity to be returned", testEntity1.getId(), entity.getId() ); - } - -} diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/query/InheritanceAssociationToOneInnerJoinTest.java b/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/query/InheritanceAssociationToOneInnerJoinTest.java deleted file mode 100644 index 6523f760a896..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/query/InheritanceAssociationToOneInnerJoinTest.java +++ /dev/null @@ -1,222 +0,0 @@ -/* - * SPDX-License-Identifier: Apache-2.0 - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.test.integration.query; - -import java.util.List; - -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.Inheritance; -import jakarta.persistence.InheritanceType; -import jakarta.persistence.ManyToOne; -import jakarta.persistence.criteria.JoinType; - -import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.junit.Test; - -import org.hibernate.testing.orm.junit.JiraKey; -import org.hibernate.testing.transaction.TransactionUtil; - -import static org.hibernate.envers.query.AuditEntity.disjunction; -import static org.hibernate.envers.query.AuditEntity.property; -import static org.junit.Assert.assertEquals; - -/** - * @author Chris Cranford - */ -@JiraKey(value = "HHH-11383") -public class InheritanceAssociationToOneInnerJoinTest extends BaseEnversJPAFunctionalTestCase { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { EntityA.class, EntityB.class, EntityC.class, EntityD.class }; - } - - @Test - @Priority(10) - public void initData() { - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - final EntityC c = new EntityC(); - c.setId( 1 ); - c.setFoo( "bar" ); - entityManager.persist( c ); - - final EntityD d = new EntityD(); - d.setId( 1 ); - d.setFoo( "bar" ); - entityManager.persist( d ); - - final EntityB b1 = new EntityB(); - b1.setId( 1 ); - b1.setName( "b1" ); - b1.setRelationToC( c ); - b1.setRelationToD( d ); - entityManager.persist( b1 ); - - final EntityB b2 = new EntityB(); - b2.setId( 2 ); - b2.setName( "b2" ); - b2.setRelationToC( c ); - b2.setRelationToD( d ); - entityManager.persist( b2 ); - } ); - } - - @Test - public void testAuditQueryWithJoinedInheritanceUsingWithSemanticsManyToOne() { - List results = getAuditReader().createQuery().forEntitiesAtRevision( EntityB.class, 1 ) - .add( - disjunction() - .add( property( "name" ).like( "b1" ) ) - .add( property( "name" ).like( "b2" ) ) ) - .traverseRelation( "relationToC", JoinType.INNER ) - .add( property( "foo" ).like( "bar" ) ) - .getResultList(); - assertEquals( 2, results.size() ); - } - - @Test - public void testAuditQueryWithJoinedInheritanceUsingWithSemanticsOneToOne() { - List results = getAuditReader().createQuery().forEntitiesAtRevision( EntityB.class, 1 ) - .add( - disjunction() - .add( property( "name" ).like( "b1" ) ) - .add( property( "name" ).like( "b2" ) ) ) - .traverseRelation( "relationToD", JoinType.INNER ) - .add( property( "foo" ).like( "bar" ) ) - .getResultList(); - assertEquals( 2, results.size() ); - } - - @Test - public void testAuditQueryWithJoinedInheritanceUsingWithSemanticsToOne() { - List results = getAuditReader().createQuery().forEntitiesAtRevision( EntityB.class, 1 ) - .add( - disjunction() - .add( property( "name" ).like( "b1" ) ) - .add( property( "name" ).like( "b2" ) ) ) - .traverseRelation( "relationToC", JoinType.INNER ) - .add( property( "foo" ).like( "bar" ) ) - .up() - .traverseRelation( "relationToD", JoinType.INNER ) - .add( property( "foo" ).like( "bar" ) ) - .getResultList(); - assertEquals( 2, results.size() ); - } - - @Test - public void testAuditQueryWithJoinedInheritanceSubclassPropertyProjectionWithRelationTraversal() { - // HHH-11383 - // This test was requested by the reporter so that we have a test that shows Hibernate is - // automatically adding "INNER JOIN EntityA_AUD" despite the fact whether the query uses - // the traverseRelation API or not. This test makes sure that if the SQL generation is - // changed in the future, Envers would properly fail if so. - List results = getAuditReader().createQuery().forEntitiesAtRevision( EntityB.class, 1 ) - .addProjection( property( "name" ) ) - .traverseRelation( "relationToC", JoinType.INNER ) - .add( property( "foo" ).like( "bar" ) ) - .getResultList(); - assertEquals( 2, results.size() ); - } - - @Entity(name = "EntityA") - @Audited - @Inheritance(strategy = InheritanceType.JOINED) - public static class EntityA { - @Id - private Integer id; - @ManyToOne - private EntityD relationToD; - @ManyToOne - private EntityC relationToC; - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public EntityC getRelationToC() { - return relationToC; - } - - public void setRelationToC(EntityC relationToC) { - this.relationToC = relationToC; - } - - public EntityD getRelationToD() { - return relationToD; - } - - public void setRelationToD(EntityD relationToD) { - this.relationToD = relationToD; - } - } - - @Entity(name = "EntityB") - @Audited - public static class EntityB extends EntityA { - private String name; - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - } - - @Entity(name = "EntityC") - @Audited - public static class EntityC { - @Id - private Integer id; - private String foo; - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getFoo() { - return foo; - } - - public void setFoo(String foo) { - this.foo = foo; - } - } - - @Entity(name = "EntityD") - @Audited - public static class EntityD { - @Id - private Integer id; - private String foo; - - public Integer getId() { - return id; - } - - public void setId(Integer id) { - this.id = id; - } - - public String getFoo() { - return foo; - } - - public void setFoo(String foo) { - this.foo = foo; - } - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/query/OrderByLimitQuery.java b/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/query/OrderByLimitQuery.java deleted file mode 100644 index 64c9289f0924..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/query/OrderByLimitQuery.java +++ /dev/null @@ -1,128 +0,0 @@ -/* - * SPDX-License-Identifier: Apache-2.0 - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.test.integration.query; - -import java.util.Arrays; -import java.util.List; -import jakarta.persistence.EntityManager; - -import org.hibernate.envers.query.AuditEntity; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.IntTestEntity; - -import org.junit.Test; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public class OrderByLimitQuery extends BaseEnversJPAFunctionalTestCase { - private Integer id1; - private Integer id2; - private Integer id3; - private Integer id4; - private Integer id5; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {IntTestEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - - IntTestEntity ite1 = new IntTestEntity( 12 ); - IntTestEntity ite2 = new IntTestEntity( 5 ); - IntTestEntity ite3 = new IntTestEntity( 8 ); - IntTestEntity ite4 = new IntTestEntity( 1 ); - - em.persist( ite1 ); - em.persist( ite2 ); - em.persist( ite3 ); - em.persist( ite4 ); - - id1 = ite1.getId(); - id2 = ite2.getId(); - id3 = ite3.getId(); - id4 = ite4.getId(); - - em.getTransaction().commit(); - - // Revision 2 - em.getTransaction().begin(); - - IntTestEntity ite5 = new IntTestEntity( 3 ); - em.persist( ite5 ); - id5 = ite5.getId(); - - ite1 = em.find( IntTestEntity.class, id1 ); - ite1.setNumber( 0 ); - - ite4 = em.find( IntTestEntity.class, id4 ); - ite4.setNumber( 15 ); - - em.getTransaction().commit(); - } - - @Test - public void testEntitiesOrderLimitByQueryRev1() { - List res_0_to_1 = getAuditReader().createQuery() - .forEntitiesAtRevision( IntTestEntity.class, 1 ) - .addOrder( AuditEntity.property( "number" ).desc() ) - .setFirstResult( 0 ) - .setMaxResults( 2 ) - .getResultList(); - - List res_2_to_3 = getAuditReader().createQuery() - .forEntitiesAtRevision( IntTestEntity.class, 1 ) - .addOrder( AuditEntity.property( "number" ).desc() ) - .setFirstResult( 2 ) - .setMaxResults( 2 ) - .getResultList(); - - List res_empty = getAuditReader().createQuery() - .forEntitiesAtRevision( IntTestEntity.class, 1 ) - .addOrder( AuditEntity.property( "number" ).desc() ) - .setFirstResult( 4 ) - .setMaxResults( 2 ) - .getResultList(); - - assert Arrays.asList( new IntTestEntity( 12, id1 ), new IntTestEntity( 8, id3 ) ).equals( res_0_to_1 ); - assert Arrays.asList( new IntTestEntity( 5, id2 ), new IntTestEntity( 1, id4 ) ).equals( res_2_to_3 ); - assert Arrays.asList().equals( res_empty ); - } - - @Test - public void testEntitiesOrderLimitByQueryRev2() { - List res_0_to_1 = getAuditReader().createQuery() - .forEntitiesAtRevision( IntTestEntity.class, 2 ) - .addOrder( AuditEntity.property( "number" ).desc() ) - .setFirstResult( 0 ) - .setMaxResults( 2 ) - .getResultList(); - - List res_2_to_3 = getAuditReader().createQuery() - .forEntitiesAtRevision( IntTestEntity.class, 2 ) - .addOrder( AuditEntity.property( "number" ).desc() ) - .setFirstResult( 2 ) - .setMaxResults( 2 ) - .getResultList(); - - List res_4 = getAuditReader().createQuery() - .forEntitiesAtRevision( IntTestEntity.class, 2 ) - .addOrder( AuditEntity.property( "number" ).desc() ) - .setFirstResult( 4 ) - .setMaxResults( 2 ) - .getResultList(); - - assert Arrays.asList( new IntTestEntity( 15, id4 ), new IntTestEntity( 8, id3 ) ).equals( res_0_to_1 ); - assert Arrays.asList( new IntTestEntity( 5, id2 ), new IntTestEntity( 3, id5 ) ).equals( res_2_to_3 ); - assert Arrays.asList( new IntTestEntity( 0, id1 ) ).equals( res_4 ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/query/StrictJpaComplianceTest.java b/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/query/StrictJpaComplianceTest.java deleted file mode 100644 index ec30a414e51d..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/query/StrictJpaComplianceTest.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - * SPDX-License-Identifier: Apache-2.0 - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.test.integration.query; - -import java.util.Map; - -import org.hibernate.cfg.AvailableSettings; -import org.hibernate.envers.AuditReaderFactory; -import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; - -import org.hibernate.testing.transaction.TransactionUtil; -import org.junit.Test; - -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; -import jakarta.persistence.Table; - -@SuppressWarnings("unchecked") -public class StrictJpaComplianceTest extends BaseEnversJPAFunctionalTestCase { - @Override - protected void addConfigOptions(Map options) { - super.addConfigOptions( options ); - options.put( AvailableSettings.JPA_QUERY_COMPLIANCE, "true" ); - } - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { - Organization.class - }; - } - - @Test - public void testIt() { - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - AuditReaderFactory.get( entityManager ).getRevisions( Organization.class, 1 ); - } ); - - } - - /** - * @author Madhumita Sadhukhan - */ - @Entity - @Table(name = "ORG") - public static class Organization { - - @Id - @GeneratedValue - @Audited - private int id; - - @Audited - @Column(name = "ORG_NAME") - private String name; - - public Organization() { - } - - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/readwriteexpression/ReadWriteExpressionChange.java b/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/readwriteexpression/ReadWriteExpressionChange.java deleted file mode 100644 index 0198dd952f74..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/readwriteexpression/ReadWriteExpressionChange.java +++ /dev/null @@ -1,59 +0,0 @@ -/* - * SPDX-License-Identifier: Apache-2.0 - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.test.integration.readwriteexpression; - -import java.util.List; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; - -import org.junit.Assert; -import org.junit.Test; - -public class ReadWriteExpressionChange extends BaseEnversJPAFunctionalTestCase { - - private static final Double HEIGHT_INCHES = 73.0d; - private static final Double HEIGHT_CENTIMETERS = HEIGHT_INCHES * 2.54d; - - private Integer id; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {Staff.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - Staff staff = new Staff( HEIGHT_INCHES, 1 ); - em.persist( staff ); - em.getTransaction().commit(); - id = staff.getId(); - } - - @Test - public void shouldRespectWriteExpression() { - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - List resultList = em.createNativeQuery( "select size_in_cm from t_staff_AUD where id =" + id ).getResultList(); - Assert.assertEquals( 1, resultList.size() ); - Double sizeInCm = (Double) resultList.get( 0 ); - em.getTransaction().commit(); - Assert.assertEquals( HEIGHT_CENTIMETERS, sizeInCm.doubleValue(), 0.00000001 ); - } - - @Test - public void shouldRespectReadExpression() { - List revisions = getAuditReader().getRevisions( Staff.class, id ); - Assert.assertEquals( 1, revisions.size() ); - Number number = revisions.get( 0 ); - Staff staffRev = getAuditReader().find( Staff.class, id, number ); - Assert.assertEquals( HEIGHT_INCHES, staffRev.getSizeInInches(), 0.00000001 ); - } - -} diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/reventity/LongRevEntityInheritanceChildAuditing.java b/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/reventity/LongRevEntityInheritanceChildAuditing.java deleted file mode 100644 index e7ac4dca4e20..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/reventity/LongRevEntityInheritanceChildAuditing.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * SPDX-License-Identifier: Apache-2.0 - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.test.integration.reventity; - -import java.util.List; - -import org.hibernate.mapping.Selectable; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.integration.inheritance.joined.ChildEntity; -import org.hibernate.orm.test.envers.integration.inheritance.joined.ParentEntity; -import org.hibernate.mapping.Column; -import org.hibernate.orm.test.envers.integration.reventity.LongRevNumberRevEntity; - -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; - -/** - * A join-inheritance test using a custom revision entity where the revision number is a long, mapped in the database - * as an int. - * - * @author Adam Warski (adam at warski dot org) - */ -public class LongRevEntityInheritanceChildAuditing extends BaseEnversJPAFunctionalTestCase { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {ChildEntity.class, ParentEntity.class, LongRevNumberRevEntity.class}; - } - - @Test - public void testChildRevColumnType() { - // Hibernate now sorts columns that are part of the key and therefore this test needs to test - // for the existence of the specific key column rather than the expectation that is exists at - // a specific order. - List childEntityKeyColumns = metadata() - .getEntityBinding( ChildEntity.class.getName() + "_AUD" ) - .getKey() - .getSelectables(); - - final String revisionColumnName = getConfiguration().getRevisionFieldName(); - Column column = getColumnFromIteratorByName( childEntityKeyColumns, revisionColumnName ); - assertNotNull( column ); - assertEquals( column.getSqlType(), "int" ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/tm/SessionFactoryInterceptorTransactionTest.java b/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/tm/SessionFactoryInterceptorTransactionTest.java deleted file mode 100644 index 0529a67c6454..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/tm/SessionFactoryInterceptorTransactionTest.java +++ /dev/null @@ -1,75 +0,0 @@ -/* - * SPDX-License-Identifier: Apache-2.0 - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.test.integration.tm; - -import static org.junit.Assert.assertEquals; - -import java.util.Map; - -import jakarta.persistence.EntityManager; -import jakarta.transaction.TransactionManager; - -import org.hibernate.FlushMode; -import org.hibernate.Session; -import org.hibernate.cfg.AvailableSettings; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.StrTestEntity; - -import org.junit.Test; - -import org.hibernate.testing.jta.TestingJtaBootstrap; -import org.hibernate.testing.jta.TestingJtaPlatformImpl; - -/** - * @author Chris Cranford - */ -public class SessionFactoryInterceptorTransactionTest extends BaseEnversJPAFunctionalTestCase { - - private TestInterceptor interceptor; - private TransactionManager tm; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { StrTestEntity.class }; - } - - @Override - protected void addConfigOptions(Map options) { - super.addConfigOptions( options ); - - TestInterceptor.reset(); - - this.interceptor = new TestInterceptor(); - options.put( AvailableSettings.INTERCEPTOR, interceptor ); - options.put( AvailableSettings.ALLOW_JTA_TRANSACTION_ACCESS, true ); - - TestingJtaBootstrap.prepare( options ); - tm = TestingJtaPlatformImpl.INSTANCE.getTransactionManager(); - } - - @Test - @Priority(10) - public void initData() throws Exception { - // Revision 1 - EntityManager em = getEntityManager(); - // Explicitly use manual flush to trigger separate temporary session write via Envers - em.unwrap( Session.class ).setHibernateFlushMode( FlushMode.MANUAL ); - tm.begin(); - StrTestEntity entity = new StrTestEntity( "Test" ); - em.persist( entity ); - em.flush(); - tm.commit(); - } - - @Test - public void testInterceptorInvocations() throws Exception { - // The interceptor should only be created once and should only be invoked twice - // Once for the original session, and follow-up for the Envers temporary session - final Map invocationMap = TestInterceptor.getBeforeCompletionCallbacks(); - assertEquals( 1, invocationMap.size() ); - invocationMap.values().forEach( c -> assertEquals( 2, c.intValue() ) ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/tm/SessionInterceptorTransactionTest.java b/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/tm/SessionInterceptorTransactionTest.java deleted file mode 100644 index 15f274bd640b..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/tm/SessionInterceptorTransactionTest.java +++ /dev/null @@ -1,72 +0,0 @@ -/* - * SPDX-License-Identifier: Apache-2.0 - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.envers.test.integration.tm; - -import static org.junit.Assert.assertEquals; - -import java.util.Map; - -import jakarta.persistence.EntityManager; -import jakarta.transaction.TransactionManager; - -import org.hibernate.FlushMode; -import org.hibernate.Session; -import org.hibernate.cfg.AvailableSettings; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.StrTestEntity; - -import org.junit.Test; - -import org.hibernate.testing.jta.TestingJtaBootstrap; -import org.hibernate.testing.jta.TestingJtaPlatformImpl; - -/** - * @author Chris Cranford - */ -public class SessionInterceptorTransactionTest extends BaseEnversJPAFunctionalTestCase { - - private TransactionManager tm; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { StrTestEntity.class }; - } - - @Override - protected void addConfigOptions(Map options) { - super.addConfigOptions( options ); - - TestInterceptor.reset(); - - options.put( AvailableSettings.SESSION_SCOPED_INTERCEPTOR, TestInterceptor.class.getName() ); - options.put( AvailableSettings.ALLOW_JTA_TRANSACTION_ACCESS, "true" ); - - TestingJtaBootstrap.prepare( options ); - tm = TestingJtaPlatformImpl.INSTANCE.getTransactionManager(); - } - - @Test - @Priority(10) - public void initData() throws Exception { - // Revision 1 - EntityManager em = getEntityManager(); - // Explicitly use manual flush to trigger separate temporary session write via Envers - em.unwrap( Session.class ).setHibernateFlushMode( FlushMode.MANUAL ); - tm.begin(); - StrTestEntity entity = new StrTestEntity( "Test" ); - em.persist( entity ); - em.flush(); - tm.commit(); - } - - @Test - public void testInterceptorInvocations() { - // The interceptor should be created one and should only be invoked once - final Map invocationMap = TestInterceptor.getBeforeCompletionCallbacks(); - assertEquals( 1, invocationMap.size() ); - invocationMap.values().forEach( c -> assertEquals( 1, c.intValue() ) ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/Priority.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/Priority.java index fd371f966522..31cbc807e0e7 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/Priority.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/Priority.java @@ -10,7 +10,7 @@ import java.lang.annotation.Target; /** - * An annotation for specifyfing test method priority. Methods with higher priorities execute earlier. + * An annotation for specifying test method priority. Methods with higher priorities execute earlier. * If the annotation is not present priority 0 is assumed. * * @author Adam Warski (adam at warski dot org) diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/IntTestPrivSeqEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/IntTestPrivSeqEntity.java index 7ff81ba77a9b..3931f2d1a526 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/IntTestPrivSeqEntity.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/IntTestPrivSeqEntity.java @@ -68,10 +68,10 @@ public boolean equals(Object o) { IntTestPrivSeqEntity that = (IntTestPrivSeqEntity) o; - if ( id != null ? !id.equals( that.id ) : that.id != null ) { + if ( id != null ? !id.equals( that.getId() ) : that.getId() != null ) { return false; } - if ( number != null ? !number.equals( that.number ) : that.number != null ) { + if ( number != null ? !number.equals( that.getNumber() ) : that.getNumber() != null ) { return false; } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/StrIntTestEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/StrIntTestEntity.java index 726c9575f357..75d4b5078884 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/StrIntTestEntity.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/StrIntTestEntity.java @@ -75,13 +75,13 @@ public boolean equals(Object o) { StrIntTestEntity that = (StrIntTestEntity) o; - if ( id != null ? !id.equals( that.id ) : that.id != null ) { + if ( id != null ? !id.equals( that.getId() ) : that.getId() != null ) { return false; } - if ( number != null ? !number.equals( that.number ) : that.number != null ) { + if ( number != null ? !number.equals( that.getNumber() ) : that.getNumber() != null ) { return false; } - if ( str1 != null ? !str1.equals( that.str1 ) : that.str1 != null ) { + if ( str1 != null ? !str1.equals( that.getStr1() ) : that.getStr1() != null ) { return false; } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/StrTestEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/StrTestEntity.java index 50b08b187af4..18cc0e83e62f 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/StrTestEntity.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/StrTestEntity.java @@ -62,10 +62,10 @@ public boolean equals(Object o) { StrTestEntity that = (StrTestEntity) o; - if ( id != null ? !id.equals( that.id ) : that.id != null ) { + if ( id != null ? !id.equals( that.getId() ) : that.getId() != null ) { return false; } - if ( str != null ? !str.equals( that.str ) : that.str != null ) { + if ( str != null ? !str.equals( that.getStr() ) : that.getStr() != null ) { return false; } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/StrTestPrivSeqEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/StrTestPrivSeqEntity.java index 1586bfdcfa99..485922059b2d 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/StrTestPrivSeqEntity.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/StrTestPrivSeqEntity.java @@ -68,10 +68,10 @@ public boolean equals(Object o) { StrTestPrivSeqEntity that = (StrTestPrivSeqEntity) o; - if ( id != null ? !id.equals( that.id ) : that.id != null ) { + if ( id != null ? !id.equals( that.getId() ) : that.getId() != null ) { return false; } - if ( str != null ? !str.equals( that.str ) : that.str != null ) { + if ( str != null ? !str.equals( that.getStr() ) : that.getStr() != null ) { return false; } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/converter/BasicModelingTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/converter/BasicModelingTest.java index a343b5da7984..43cfc9e055b4 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/converter/BasicModelingTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/converter/BasicModelingTest.java @@ -10,19 +10,18 @@ import org.hibernate.boot.registry.StandardServiceRegistryBuilder; import org.hibernate.boot.spi.MetadataImplementor; import org.hibernate.cfg.AvailableSettings; -import org.hibernate.orm.test.envers.AbstractEnversTest; import org.hibernate.mapping.PersistentClass; import org.hibernate.testing.orm.junit.JiraKey; import org.hibernate.testing.util.ServiceRegistryUtil; -import org.junit.Test; +import org.junit.jupiter.api.Test; import static org.junit.Assert.assertNotNull; /** * @author Steve Ebersole */ -public class BasicModelingTest extends AbstractEnversTest { +public class BasicModelingTest { @Test @JiraKey( value = "HHH-9042" ) public void testMetamodelBuilding() { diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/CollectionRefEdEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/CollectionRefEdEntity.java index 6f572715906d..b8b8e11ddaee 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/CollectionRefEdEntity.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/CollectionRefEdEntity.java @@ -77,10 +77,10 @@ public boolean equals(Object o) { CollectionRefEdEntity that = (CollectionRefEdEntity) o; - if ( data != null ? !data.equals( that.data ) : that.data != null ) { + if ( data != null ? !data.equals( that.getData() ) : that.getData() != null ) { return false; } - if ( id != null ? !id.equals( that.id ) : that.id != null ) { + if ( id != null ? !id.equals( that.getId() ) : that.getId() != null ) { return false; } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/ListRefEdEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/ListRefEdEntity.java index 3fea3c04df47..b5e5fb196ac3 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/ListRefEdEntity.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/ListRefEdEntity.java @@ -74,10 +74,10 @@ public boolean equals(Object o) { ListRefEdEntity that = (ListRefEdEntity) o; - if ( data != null ? !data.equals( that.data ) : that.data != null ) { + if ( data != null ? !data.equals( that.getData() ) : that.getData() != null ) { return false; } - if ( id != null ? !id.equals( that.id ) : that.id != null ) { + if ( id != null ? !id.equals( that.getId() ) : that.getId() != null ) { return false; } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/SetRefEdEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/SetRefEdEntity.java index 070a8215582b..19f5acb69150 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/SetRefEdEntity.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/SetRefEdEntity.java @@ -91,10 +91,10 @@ public boolean equals(Object o) { SetRefEdEntity that = (SetRefEdEntity) o; - if ( data != null ? !data.equals( that.data ) : that.data != null ) { + if ( data != null ? !data.equals( that.getData() ) : that.getData() != null ) { return false; } - if ( id != null ? !id.equals( that.id ) : that.id != null ) { + if ( id != null ? !id.equals( that.getId() ) : that.getId() != null ) { return false; } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/SetRefIngEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/SetRefIngEntity.java index 02a248004b4b..557516079f5e 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/SetRefIngEntity.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/SetRefIngEntity.java @@ -81,10 +81,10 @@ public boolean equals(Object o) { SetRefIngEntity that = (SetRefIngEntity) o; - if ( data != null ? !data.equals( that.data ) : that.data != null ) { + if ( data != null ? !data.equals( that.getData() ) : that.getData() != null ) { return false; } - if ( id != null ? !id.equals( that.id ) : that.id != null ) { + if ( id != null ? !id.equals( that.getId() ) : that.getId() != null ) { return false; } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/ids/SetRefEdEmbIdEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/ids/SetRefEdEmbIdEntity.java index 92e1edc474c8..5150b39ff5ef 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/ids/SetRefEdEmbIdEntity.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/ids/SetRefEdEmbIdEntity.java @@ -75,10 +75,10 @@ public boolean equals(Object o) { SetRefEdEmbIdEntity that = (SetRefEdEmbIdEntity) o; - if ( data != null ? !data.equals( that.data ) : that.data != null ) { + if ( data != null ? !data.equals( that.getData() ) : that.getData() != null ) { return false; } - if ( id != null ? !id.equals( that.id ) : that.id != null ) { + if ( id != null ? !id.equals( that.getId() ) : that.getId() != null ) { return false; } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/ids/SetRefEdMulIdEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/ids/SetRefEdMulIdEntity.java index 6179b2ee885b..dc3d18326669 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/ids/SetRefEdMulIdEntity.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/entities/onetomany/ids/SetRefEdMulIdEntity.java @@ -95,13 +95,13 @@ public boolean equals(Object o) { SetRefEdMulIdEntity that = (SetRefEdMulIdEntity) o; - if ( data != null ? !data.equals( that.data ) : that.data != null ) { + if ( data != null ? !data.equals( that.getData() ) : that.getData() != null ) { return false; } - if ( id1 != null ? !id1.equals( that.id1 ) : that.id1 != null ) { + if ( id1 != null ? !id1.equals( that.getId1() ) : that.getId1() != null ) { return false; } - if ( id2 != null ? !id2.equals( that.id2 ) : that.id2 != null ) { + if ( id2 != null ? !id2.equals( that.getId2() ) : that.getId2() != null ) { return false; } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/accesstype/AttributeAccessorTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/accesstype/AttributeAccessorTest.java index 589e1b242be7..bf890cf3cbeb 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/accesstype/AttributeAccessorTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/accesstype/AttributeAccessorTest.java @@ -9,41 +9,42 @@ import org.hibernate.annotations.AttributeAccessor; import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.property.access.internal.PropertyAccessStrategyBasicImpl; import org.hibernate.property.access.spi.PropertyAccess; -import org.junit.Test; import org.hibernate.testing.orm.junit.JiraKey; +import org.hibernate.testing.orm.junit.Jpa; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.junit.jupiter.api.Test; -import static org.hibernate.testing.transaction.TransactionUtil.doInJPA; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; /** * @author Chris Cranford */ @JiraKey(value = "HHH-12063") -public class AttributeAccessorTest extends BaseEnversJPAFunctionalTestCase { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { Foo.class }; - } - +@Jpa(annotatedClasses = { AttributeAccessorTest.Foo.class }) +@EnversTest +public class AttributeAccessorTest { @Test - public void testAttributeAccessor() { + public void testAttributeAccessor(EntityManagerFactoryScope scope) { + scope.getEntityManagerFactory(); // force building the metamodel + // Verify that the accessor was triggered during metadata building phase. assertTrue( BasicAttributeAccessor.invoked ); // Create an audited entity - doInJPA( this::entityManagerFactory, entityManager -> { + scope.inTransaction( entityManager -> { final Foo foo = new Foo( 1, "ABC" ); entityManager.persist( foo ); } ); // query the entity. - doInJPA( this::entityManagerFactory, entityManager -> { - final Foo foo = getAuditReader().find( Foo.class, 1, 1 ); + scope.inEntityManager( entityManager -> { + final Foo foo = AuditReaderFactory.get( entityManager ).find( Foo.class, 1, 1 ); assertEquals( "ABC", foo.getName() ); } ); } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/accesstype/FieldAccessType.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/accesstype/FieldAccessType.java index bac1204f7129..e92c4af48080 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/accesstype/FieldAccessType.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/accesstype/FieldAccessType.java @@ -4,52 +4,54 @@ */ package org.hibernate.orm.test.envers.integration.accesstype; -import java.util.Arrays; -import jakarta.persistence.EntityManager; +import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import java.util.Arrays; -import org.junit.Assert; -import org.junit.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Adam Warski (adam at warski dot org) */ -public class FieldAccessType extends BaseEnversJPAFunctionalTestCase { +@Jpa(annotatedClasses = {FieldAccessTypeEntity.class}) +@EnversTest +public class FieldAccessType { private Integer id1; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {FieldAccessTypeEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - FieldAccessTypeEntity fate = new FieldAccessTypeEntity( "data" ); - em.persist( fate ); - id1 = fate.readId(); - em.getTransaction().commit(); - - em.getTransaction().begin(); - fate = em.find( FieldAccessTypeEntity.class, id1 ); - fate.writeData( "data2" ); - em.getTransaction().commit(); + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + scope.inTransaction( em -> { + FieldAccessTypeEntity fate = new FieldAccessTypeEntity( "data" ); + em.persist( fate ); + id1 = fate.readId(); + } ); + + scope.inTransaction( em -> { + FieldAccessTypeEntity fate = em.find( FieldAccessTypeEntity.class, id1 ); + fate.writeData( "data2" ); + } ); } @Test - public void testRevisionsCounts() { - Assert.assertEquals( Arrays.asList( 1, 2 ), getAuditReader().getRevisions( FieldAccessTypeEntity.class, id1 ) ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + assertEquals( Arrays.asList( 1, 2 ), + AuditReaderFactory.get( em ).getRevisions( FieldAccessTypeEntity.class, id1 ) ); + } ); } @Test - public void testHistoryOfId1() { - FieldAccessTypeEntity ver1 = new FieldAccessTypeEntity( id1, "data" ); - FieldAccessTypeEntity ver2 = new FieldAccessTypeEntity( id1, "data2" ); - Assert.assertEquals( ver1, getAuditReader().find( FieldAccessTypeEntity.class, id1, 1 ) ); - Assert.assertEquals( ver2, getAuditReader().find( FieldAccessTypeEntity.class, id1, 2 ) ); + public void testHistoryOfId1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + FieldAccessTypeEntity ver1 = new FieldAccessTypeEntity( id1, "data" ); + FieldAccessTypeEntity ver2 = new FieldAccessTypeEntity( id1, "data2" ); + assertEquals( ver1, AuditReaderFactory.get( em ).find( FieldAccessTypeEntity.class, id1, 1 ) ); + assertEquals( ver2, AuditReaderFactory.get( em ).find( FieldAccessTypeEntity.class, id1, 2 ) ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/accesstype/ImmutableClassAccessType.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/accesstype/ImmutableClassAccessType.java index 83b13d59bf2a..3d631c29a920 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/accesstype/ImmutableClassAccessType.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/accesstype/ImmutableClassAccessType.java @@ -4,58 +4,49 @@ */ package org.hibernate.orm.test.envers.integration.accesstype; -import java.util.Arrays; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; -import org.junit.Test; +import java.util.Arrays; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; -public class ImmutableClassAccessType extends BaseEnversJPAFunctionalTestCase { +@Jpa(annotatedClasses = {Country.class}) +@EnversTest +public class ImmutableClassAccessType { private Country country; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {Country.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Revision 1 - em.getTransaction().begin(); - country = Country.of( 123, "Germany" ); - em.persist( country ); - em.getTransaction().commit(); - + scope.inTransaction( em -> { + country = Country.of( 123, "Germany" ); + em.persist( country ); + } ); } @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1 ) - .equals( - getAuditReader().getRevisions( - Country.class, - country.getCode() - ) - ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + assertEquals( + Arrays.asList( 1 ), + AuditReaderFactory.get( em ).getRevisions( Country.class, country.getCode() ) + ); + } ); } @Test - public void testHistoryOfId1() { - Country country1 = getEntityManager().find( - Country.class, - country.getCode() - ); - assertEquals( country1, country ); - - Country history = getAuditReader().find( Country.class, country1.getCode(), 1 ); - assertEquals( country, history ); + public void testHistoryOfId1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + Country country1 = em.find( Country.class, country.getCode() ); + assertEquals( country1, country ); + + Country history = AuditReaderFactory.get( em ).find( Country.class, country1.getCode(), 1 ); + assertEquals( country, history ); + } ); } - } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/accesstype/PropertyAccessType.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/accesstype/PropertyAccessType.java index c31fdad8d758..3c0fe3a01d28 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/accesstype/PropertyAccessType.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/accesstype/PropertyAccessType.java @@ -4,61 +4,65 @@ */ package org.hibernate.orm.test.envers.integration.accesstype; -import java.util.Arrays; -import jakarta.persistence.EntityManager; +import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import java.util.Arrays; -import org.junit.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; /** * @author Adam Warski (adam at warski dot org) */ -public class PropertyAccessType extends BaseEnversJPAFunctionalTestCase { +@Jpa(annotatedClasses = {PropertyAccessTypeEntity.class}) +@EnversTest +public class PropertyAccessType { private Integer id1; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {PropertyAccessTypeEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - PropertyAccessTypeEntity pate = new PropertyAccessTypeEntity( "data" ); - em.persist( pate ); - id1 = pate.getId(); - em.getTransaction().commit(); + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + scope.inTransaction( em -> { + PropertyAccessTypeEntity pate = new PropertyAccessTypeEntity( "data" ); + em.persist( pate ); + id1 = pate.getId(); + } ); - em.getTransaction().begin(); - pate = em.find( PropertyAccessTypeEntity.class, id1 ); - pate.writeData( "data2" ); - em.getTransaction().commit(); + scope.inTransaction( em -> { + PropertyAccessTypeEntity pate = em.find( PropertyAccessTypeEntity.class, id1 ); + pate.writeData( "data2" ); + } ); } @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( PropertyAccessTypeEntity.class, id1 ) ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + assertEquals( Arrays.asList( 1, 2 ), + AuditReaderFactory.get( em ).getRevisions( PropertyAccessTypeEntity.class, id1 ) ); + } ); } @Test - public void testHistoryOfId1() { - PropertyAccessTypeEntity ver1 = new PropertyAccessTypeEntity( id1, "data" ); - PropertyAccessTypeEntity ver2 = new PropertyAccessTypeEntity( id1, "data2" ); + public void testHistoryOfId1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + PropertyAccessTypeEntity ver1 = new PropertyAccessTypeEntity( id1, "data" ); + PropertyAccessTypeEntity ver2 = new PropertyAccessTypeEntity( id1, "data2" ); - PropertyAccessTypeEntity rev1 = getAuditReader().find( PropertyAccessTypeEntity.class, id1, 1 ); - PropertyAccessTypeEntity rev2 = getAuditReader().find( PropertyAccessTypeEntity.class, id1, 2 ); + PropertyAccessTypeEntity rev1 = AuditReaderFactory.get( em ).find( PropertyAccessTypeEntity.class, id1, 1 ); + PropertyAccessTypeEntity rev2 = AuditReaderFactory.get( em ).find( PropertyAccessTypeEntity.class, id1, 2 ); - assert rev1.isIdSet(); - assert rev2.isIdSet(); + assertTrue( rev1.isIdSet() ); + assertTrue( rev2.isIdSet() ); - assert rev1.isDataSet(); - assert rev2.isDataSet(); + assertTrue( rev1.isDataSet() ); + assertTrue( rev2.isDataSet() ); - assert rev1.equals( ver1 ); - assert rev2.equals( ver2 ); + assertEquals( ver1, rev1 ); + assertEquals( ver2, rev2 ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/auditReader/AuditReaderAPITest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/auditReader/AuditReaderAPITest.java index 686e495876e0..178639297a1d 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/auditReader/AuditReaderAPITest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/auditReader/AuditReaderAPITest.java @@ -4,112 +4,119 @@ */ package org.hibernate.orm.test.envers.integration.auditReader; -import java.util.Arrays; -import java.util.List; - -import jakarta.persistence.EntityManager; - +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.enhanced.SequenceIdRevisionEntity; import org.hibernate.envers.exception.NotAuditedException; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; -import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; +import java.util.Arrays; +import java.util.List; import static org.hibernate.testing.junit4.ExtraAssertions.assertTyping; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.junit.jupiter.api.Assertions.fail; /** * A test which checks the correct behavior of AuditReader.isEntityClassAudited(Class entityClass). * * @author Hernan Chanfreau */ -public class AuditReaderAPITest extends BaseEnversJPAFunctionalTestCase { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {AuditedTestEntity.class, NotAuditedTestEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - AuditedTestEntity ent1 = new AuditedTestEntity( 1, "str1" ); - NotAuditedTestEntity ent2 = new NotAuditedTestEntity( 1, "str1" ); - - em.persist( ent1 ); - em.persist( ent2 ); - em.getTransaction().commit(); - - em.getTransaction().begin(); - - ent1 = em.find( AuditedTestEntity.class, 1 ); - ent2 = em.find( NotAuditedTestEntity.class, 1 ); - ent1.setStr1( "str2" ); - ent2.setStr1( "str2" ); - em.getTransaction().commit(); - - em.getTransaction().begin(); - ent1 = em.find( AuditedTestEntity.class, 1 ); - em.remove( ent1 ); - em.getTransaction().commit(); +@EnversTest +@Jpa(annotatedClasses = {AuditedTestEntity.class, NotAuditedTestEntity.class}) +public class AuditReaderAPITest { + + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + em.getTransaction().begin(); + AuditedTestEntity ent1 = new AuditedTestEntity( 1, "str1" ); + NotAuditedTestEntity ent2 = new NotAuditedTestEntity( 1, "str1" ); + + em.persist( ent1 ); + em.persist( ent2 ); + em.getTransaction().commit(); + + em.getTransaction().begin(); + + ent1 = em.find( AuditedTestEntity.class, 1 ); + ent2 = em.find( NotAuditedTestEntity.class, 1 ); + ent1.setStr1( "str2" ); + ent2.setStr1( "str2" ); + em.getTransaction().commit(); + + em.getTransaction().begin(); + ent1 = em.find( AuditedTestEntity.class, 1 ); + em.remove( ent1 ); + em.getTransaction().commit(); + } ); } @Test - public void testIsEntityClassAuditedForAuditedEntity() { - assertTrue( getAuditReader().isEntityClassAudited( AuditedTestEntity.class ) ); - assertEquals( Arrays.asList( 1, 2, 3 ), getAuditReader().getRevisions( AuditedTestEntity.class, 1 ) ); + public void testIsEntityClassAuditedForAuditedEntity(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertTrue( auditReader.isEntityClassAudited( AuditedTestEntity.class ) ); + assertEquals( Arrays.asList( 1, 2, 3 ), + auditReader.getRevisions( AuditedTestEntity.class, 1 ) ); + } ); } @Test - public void testIsEntityClassAuditedForNotAuditedEntity() { - - assert !getAuditReader().isEntityClassAudited( NotAuditedTestEntity.class ); - - try { - getAuditReader().getRevisions( NotAuditedTestEntity.class, 1 ); - } - catch (NotAuditedException nae) { - // it's ok because the entity is not audited - assert true; - } + public void testIsEntityClassAuditedForNotAuditedEntity(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertFalse( auditReader.isEntityClassAudited( NotAuditedTestEntity.class ) ); + + try { + auditReader.getRevisions( NotAuditedTestEntity.class, 1 ); + fail( "Expected a NotAuditedException" ); + } + catch (NotAuditedException nae) { + // expected + } + } ); } @Test - @JiraKey( value = "HHH-7555" ) - public void testFindRevisionEntitiesWithoutDeletions() { - List revisionInfos = getAuditReader().createQuery() - .forRevisionsOfEntity( AuditedTestEntity.class, false ) - .getResultList(); - assertEquals( 2, revisionInfos.size() ); - revisionInfos.forEach( e -> assertTyping( SequenceIdRevisionEntity.class, e ) ); + public void testFindRevisionEntitiesWithoutDeletions(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + List revisionInfos = AuditReaderFactory.get( em ).createQuery() + .forRevisionsOfEntity( AuditedTestEntity.class, false ) + .getResultList(); + assertEquals( 2, revisionInfos.size() ); + revisionInfos.forEach( e -> assertTyping( SequenceIdRevisionEntity.class, e ) ); + } ); } @Test - @JiraKey( value = "HHH-7555" ) - public void testFindRevisionEntitiesWithDeletions() { - List revisionInfos = getAuditReader().createQuery() - .forRevisionsOfEntity( AuditedTestEntity.class, true ) - .getResultList(); - assertEquals( 3, revisionInfos.size() ); - revisionInfos.forEach( e -> assertTyping( SequenceIdRevisionEntity.class, e ) ); + public void testFindRevisionEntitiesWithDeletions(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + List revisionInfos = AuditReaderFactory.get( em ).createQuery() + .forRevisionsOfEntity( AuditedTestEntity.class, true ) + .getResultList(); + assertEquals( 3, revisionInfos.size() ); + revisionInfos.forEach( e -> assertTyping( SequenceIdRevisionEntity.class, e ) ); + } ); } @Test - @JiraKey( value = "HHH-7555" ) - public void testFindRevisionEntitiesNonAuditedEntity() { - try { - List revisionInfos = getAuditReader().createQuery() - .forRevisionsOfEntity( NotAuditedTestEntity.class, false ) - .getResultList(); - fail( "Expected a NotAuditedException" ); - } - catch ( NotAuditedException e ) { - // expected - } + public void testFindRevisionEntitiesNonAuditedEntity(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + try { + AuditReaderFactory.get( em ).createQuery() + .forRevisionsOfEntity( NotAuditedTestEntity.class, false ) + .getResultList(); + fail( "Expected a NotAuditedException" ); + } + catch (NotAuditedException e) { + // expected + } + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/auditReader/FindByRevisionExactMatchOptionTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/auditReader/FindByRevisionExactMatchOptionTest.java index 782acc834a0e..64593722d371 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/auditReader/FindByRevisionExactMatchOptionTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/auditReader/FindByRevisionExactMatchOptionTest.java @@ -4,21 +4,22 @@ */ package org.hibernate.orm.test.envers.integration.auditReader; -import java.util.Arrays; -import java.util.Map; - import org.hibernate.envers.AuditReader; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.configuration.EnversSettings; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; import org.hibernate.orm.test.envers.entities.IntNoAutoIdTestEntity; -import org.junit.Test; - +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; +import org.hibernate.testing.orm.junit.Jpa; +import org.hibernate.testing.orm.junit.Setting; +import org.junit.jupiter.api.Test; -import static junit.framework.TestCase.assertNull; -import static org.hibernate.testing.transaction.TransactionUtil.doInJPA; -import static org.junit.Assert.assertEquals; +import java.util.Arrays; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNull; /** * A test which verifies the behavior of the various {@link AuditReader} find implementations when the @@ -27,70 +28,69 @@ * @author Chris Cranford */ @JiraKey(value = "HHH-13500") -public class FindByRevisionExactMatchOptionTest extends BaseEnversJPAFunctionalTestCase { - @Override - protected void addConfigOptions(Map options) { - super.addConfigOptions( options ); - - options.put( EnversSettings.FIND_BY_REVISION_EXACT_MATCH, "true" ); - } - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { IntNoAutoIdTestEntity.class }; - } - - @Priority(10) - @Test - public void initData() { +@EnversTest +@Jpa(annotatedClasses = {IntNoAutoIdTestEntity.class}, + integrationSettings = @Setting(name = EnversSettings.FIND_BY_REVISION_EXACT_MATCH, value = "true")) +public class FindByRevisionExactMatchOptionTest { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Insert entity with id=1, numVal=1, revision 1 - doInJPA( this::entityManagerFactory, entityManager -> { - final IntNoAutoIdTestEntity entity = new IntNoAutoIdTestEntity( 1, 1 ); - entityManager.persist( entity ); + scope.inTransaction( em -> { + final IntNoAutoIdTestEntity entity1 = new IntNoAutoIdTestEntity( 1, 1 ); + em.persist( entity1 ); } ); // Update entity with id=1, setting numVal=11, revision 2 - doInJPA( this::entityManagerFactory, entityManager -> { - final IntNoAutoIdTestEntity entity = entityManager.find( IntNoAutoIdTestEntity.class, 1 ); + scope.inTransaction( em -> { + final IntNoAutoIdTestEntity entity = em.find( IntNoAutoIdTestEntity.class, 1 ); entity.setNumVal( 11 ); - entityManager.merge( entity ); + em.merge( entity ); } ); // Insert entity with id=2, numVal=2, revision 3 - doInJPA( this::entityManagerFactory, entityManager -> { - final IntNoAutoIdTestEntity entity = new IntNoAutoIdTestEntity( 2, 2 ); - entityManager.persist( entity ); + scope.inTransaction( em -> { + final IntNoAutoIdTestEntity entity2 = new IntNoAutoIdTestEntity( 2, 2 ); + em.persist( entity2 ); } ); // Update entity with id=2, setting numVal=22, revision 4 - doInJPA( this::entityManagerFactory, entityManager -> { - final IntNoAutoIdTestEntity entity = entityManager.find( IntNoAutoIdTestEntity.class, 2 ); + scope.inTransaction( em -> { + final IntNoAutoIdTestEntity entity = em.find( IntNoAutoIdTestEntity.class, 2 ); entity.setNumVal( 22 ); - entityManager.merge( entity ); + em.merge( entity ); } ); } @Test - public void testRevisionCounts() { - assertEquals( Arrays.asList( 1, 2 ), getAuditReader().getRevisions( IntNoAutoIdTestEntity.class, 1 ) ); - assertEquals( Arrays.asList( 3, 4 ), getAuditReader().getRevisions( IntNoAutoIdTestEntity.class, 2 ) ); + public void testRevisionCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1, 2 ), + auditReader.getRevisions( IntNoAutoIdTestEntity.class, 1 ) ); + assertEquals( Arrays.asList( 3, 4 ), + auditReader.getRevisions( IntNoAutoIdTestEntity.class, 2 ) ); + } ); } @Test - public void testFindEntityId1() { - final AuditReader auditReader = getAuditReader(); - assertEquals( new IntNoAutoIdTestEntity( 1, 1 ), auditReader.find( IntNoAutoIdTestEntity.class, 1, 1 ) ); - assertEquals( new IntNoAutoIdTestEntity( 11, 1 ), auditReader.find( IntNoAutoIdTestEntity.class, 1, 2 ) ); - assertNull( auditReader.find( IntNoAutoIdTestEntity.class, 1, 3 ) ); - assertNull( auditReader.find( IntNoAutoIdTestEntity.class, 1, 4 ) ); + public void testFindEntityId1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( new IntNoAutoIdTestEntity( 1, 1 ), auditReader.find( IntNoAutoIdTestEntity.class, 1, 1 ) ); + assertEquals( new IntNoAutoIdTestEntity( 11, 1 ), auditReader.find( IntNoAutoIdTestEntity.class, 1, 2 ) ); + assertNull( auditReader.find( IntNoAutoIdTestEntity.class, 1, 3 ) ); + assertNull( auditReader.find( IntNoAutoIdTestEntity.class, 1, 4 ) ); + } ); } @Test - public void testFindEntityId2() { - final AuditReader auditReader = getAuditReader(); - assertNull( auditReader.find( IntNoAutoIdTestEntity.class, 2, 1 ) ); - assertNull( auditReader.find( IntNoAutoIdTestEntity.class, 2, 2 ) ); - assertEquals( new IntNoAutoIdTestEntity( 2, 2 ), auditReader.find( IntNoAutoIdTestEntity.class, 2, 3 ) ); - assertEquals( new IntNoAutoIdTestEntity( 22, 2 ), auditReader.find( IntNoAutoIdTestEntity.class, 2, 4 ) ); + public void testFindEntityId2(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertNull( auditReader.find( IntNoAutoIdTestEntity.class, 2, 1 ) ); + assertNull( auditReader.find( IntNoAutoIdTestEntity.class, 2, 2 ) ); + assertEquals( new IntNoAutoIdTestEntity( 2, 2 ), auditReader.find( IntNoAutoIdTestEntity.class, 2, 3 ) ); + assertEquals( new IntNoAutoIdTestEntity( 22, 2 ), auditReader.find( IntNoAutoIdTestEntity.class, 2, 4 ) ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/BasicTypeColumnDefinitionTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/BasicTypeColumnDefinitionTest.java index a8d4d076a706..f1033838c222 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/BasicTypeColumnDefinitionTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/BasicTypeColumnDefinitionTest.java @@ -4,109 +4,116 @@ */ package org.hibernate.orm.test.envers.integration.basic; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.Id; import org.hibernate.annotations.Generated; import org.hibernate.dialect.H2Dialect; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.Audited; import org.hibernate.mapping.Table; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; - -import org.hibernate.testing.RequiresDialect; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.DomainModel; +import org.hibernate.testing.orm.junit.DomainModelScope; import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.ComparisonFailure; -import org.junit.Test; - -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.Id; +import org.hibernate.testing.orm.junit.RequiresDialect; +import org.hibernate.testing.orm.junit.SessionFactory; +import org.hibernate.testing.orm.junit.SessionFactoryScope; +import org.junit.jupiter.api.Test; +import org.opentest4j.AssertionFailedError; import static org.hibernate.boot.model.naming.Identifier.toIdentifier; import static org.hibernate.engine.jdbc.Size.DEFAULT_LENGTH; import static org.hibernate.engine.jdbc.Size.DEFAULT_PRECISION; import static org.hibernate.engine.jdbc.Size.DEFAULT_SCALE; -import static org.hibernate.testing.transaction.TransactionUtil.doInJPA; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; /** * This test verifies that resolving a column mapping's {@code sql-type} for HBM XML is performed * correctly such that when a column supplies a {@code columnDefinition}, Envers properly builds * its schema based on the right type rather than directly using the column definition as-is. - * + *

* The following illustrate some examples of expected transformations: * *

  • {@code @Column(columnDefinition = "varchar(10) not null")} => {@code sql-type = "varchar(255)"}
  • *
  • {@code @Column(length = 10, columnDefinition = "varchar(10) not null")} => {@code sql-type = "varchar(10)"}
  • *
  • {@code @Column(columnDefinition = "integer not null auto_increment")} => {@code sql-type = "integer"}
  • - * + *

    * It is important to point out that resolving the sql-types length/precision/scale is all based on the * values supplied as part of the {@link Column} annotation itself and not what is in the definition text. * * @author Chris Cranford */ @JiraKey(value = "HHH-10844") -@RequiresDialect(value = H2Dialect.class) -public class BasicTypeColumnDefinitionTest extends BaseEnversJPAFunctionalTestCase { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { BasicTypeContainer.class }; - } - - // By reverting changes for HHH-10844 to restore columnDefinition original behavior, this implies this test will - // now fail because the expected sql-type will once again be identical to the base table mapping. - @Test(expected = ComparisonFailure.class) - @Priority(10) - public void testMetadataBindings() { - final Long expectedDefaultLength = new Long( DEFAULT_LENGTH ); - final Integer expectedDefaultPrecision = Integer.valueOf( DEFAULT_PRECISION ); - final Integer expectedDefaultScale = Integer.valueOf( DEFAULT_SCALE ); - - final Table auditTable = metadata().getEntityBinding( BasicTypeContainer.class.getName() + "_AUD" ).getTable(); - - final org.hibernate.mapping.Column caseNumber = auditTable.getColumn( toIdentifier( "caseNumber" ) ); - assertEquals( "integer", caseNumber.getSqlType() ); - assertEquals( expectedDefaultLength, caseNumber.getLength() ); - assertEquals( expectedDefaultPrecision, caseNumber.getPrecision() ); - assertEquals( expectedDefaultScale, caseNumber.getScale() ); - - final org.hibernate.mapping.Column colDef = auditTable.getColumn( toIdentifier( "columnWithDefinition" ) ); - assertEquals( "varchar(10)", colDef.getSqlType() ); - assertEquals( new Long( 10 ), colDef.getLength() ); - assertEquals( expectedDefaultPrecision, colDef.getPrecision() ); - assertEquals( expectedDefaultScale, colDef.getScale() ); - } - - @Test - @Priority(10) - public void initData() { - final BasicTypeContainer detachedEntity = doInJPA( this::entityManagerFactory, entityManager -> { +@RequiresDialect(H2Dialect.class) +@EnversTest +@DomainModel(annotatedClasses = {BasicTypeColumnDefinitionTest.BasicTypeContainer.class}) +@SessionFactory +public class BasicTypeColumnDefinitionTest { + @BeforeClassTemplate + public void initData(SessionFactoryScope scope) { + scope.inTransaction( session -> { final BasicTypeContainer entity = new BasicTypeContainer(); entity.setData( "test" ); entity.setColumnWithDefinition( "1234567890" ); - entityManager.persist( entity ); - return entity; + session.persist( entity ); } ); - doInJPA( this::entityManagerFactory, entityManager -> { - final BasicTypeContainer entity = entityManager.find( BasicTypeContainer.class, detachedEntity.getId() ); + scope.inTransaction( session -> { + final BasicTypeContainer entity = session.createQuery( "from BasicTypeContainer", BasicTypeContainer.class ) + .getResultList().get( 0 ); entity.setData( "test2" ); - entityManager.merge( entity ); + session.merge( entity ); + } ); + } + + // By reverting changes for HHH-10844 to restore columnDefinition original behavior, this implies this test will + // now fail because the expected sql-type will once again be identical to the base table mapping. + @Test + public void testMetadataBindings(DomainModelScope scope) { + final var domainModel = scope.getDomainModel(); + + assertThrows( AssertionFailedError.class, () -> { + final Long expectedDefaultLength = DEFAULT_LENGTH; + final Integer expectedDefaultPrecision = DEFAULT_PRECISION; + final Integer expectedDefaultScale = DEFAULT_SCALE; + + final Table auditTable = domainModel.getEntityBinding( BasicTypeContainer.class.getName() + "_AUD" ) + .getTable(); + + final org.hibernate.mapping.Column caseNumber = auditTable.getColumn( toIdentifier( "caseNumber" ) ); + assertEquals( "integer", caseNumber.getSqlType() ); + assertEquals( expectedDefaultLength, caseNumber.getLength() ); + assertEquals( expectedDefaultPrecision, caseNumber.getPrecision() ); + assertEquals( expectedDefaultScale, caseNumber.getScale() ); + + final org.hibernate.mapping.Column colDef = auditTable.getColumn( toIdentifier( "columnWithDefinition" ) ); + assertEquals( "varchar(10)", colDef.getSqlType() ); + assertEquals( Long.valueOf( 10 ), colDef.getLength() ); + assertEquals( expectedDefaultPrecision, colDef.getPrecision() ); + assertEquals( expectedDefaultScale, colDef.getScale() ); } ); } @Test - public void testRevisionHistory() { - assertEquals( 2, getAuditReader().getRevisions( BasicTypeContainer.class, 1 ).size() ); - - final BasicTypeContainer rev1 = getAuditReader().find( BasicTypeContainer.class, 1, 1 ); - assertEquals( "test", rev1.getData() ); - assertEquals( "1234567890", rev1.getColumnWithDefinition() ); - assertEquals( Integer.valueOf( 1 ), rev1.getCaseNumber() ); - - final BasicTypeContainer rev2 = getAuditReader().find( BasicTypeContainer.class, 1, 2 ); - assertEquals( "test2", rev2.getData() ); - assertEquals( "1234567890", rev2.getColumnWithDefinition() ); - assertEquals( Integer.valueOf( 1 ), rev2.getCaseNumber() ); + public void testRevisionHistory(SessionFactoryScope scope) { + scope.inSession( session -> { + final var auditReader = AuditReaderFactory.get( session ); + assertEquals( 2, auditReader.getRevisions( BasicTypeContainer.class, 1 ).size() ); + + final BasicTypeContainer rev1 = auditReader.find( BasicTypeContainer.class, 1, 1 ); + assertEquals( "test", rev1.getData() ); + assertEquals( "1234567890", rev1.getColumnWithDefinition() ); + assertEquals( Integer.valueOf( 1 ), rev1.getCaseNumber() ); + + final BasicTypeContainer rev2 = auditReader.find( BasicTypeContainer.class, 1, 2 ); + assertEquals( "test2", rev2.getData() ); + assertEquals( "1234567890", rev2.getColumnWithDefinition() ); + assertEquals( Integer.valueOf( 1 ), rev2.getCaseNumber() ); + } ); } @Entity(name = "BasicTypeContainer") diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/BigDecimalTypeTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/BigDecimalTypeTest.java index b0c7975cf0d5..a865a526a8d4 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/BigDecimalTypeTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/BigDecimalTypeTest.java @@ -4,119 +4,86 @@ */ package org.hibernate.orm.test.envers.integration.basic; -import java.math.BigDecimal; -import java.util.Arrays; - import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.EntityManager; import jakarta.persistence.GeneratedValue; import jakarta.persistence.Id; - import org.hibernate.envers.Audited; import org.hibernate.envers.NotAudited; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.junit.Test; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; -import org.hibernate.testing.orm.junit.JiraKey; +import java.math.BigDecimal; +import java.util.Arrays; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertTrue; /** * @author Chris Cranford */ -@JiraKey(value = "HHH-11988") -public class BigDecimalTypeTest extends BaseEnversJPAFunctionalTestCase { - +@EnversTest +@Jpa(annotatedClasses = {BigDecimalTypeTest.BigDecimalEntity.class}) +public class BigDecimalTypeTest { private Integer entityId; private Double bigDecimalValue = 2.2d; - @Test - @Priority(10) - public void initData() { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Triggers RevisionType.ADD - EntityManager entityManager = getOrCreateEntityManager(); - try { - entityManager.getTransaction().begin(); + scope.inTransaction( em -> { final BigDecimalEntity entity = new BigDecimalEntity( BigDecimal.valueOf( bigDecimalValue ), "Test" ); - System.out.println( entity.getBigDecimal().scale() ); - entityManager.persist( entity ); - entityManager.getTransaction().commit(); + em.persist( entity ); this.entityId = entity.getId(); - } - catch ( Throwable t ) { - if ( entityManager.getTransaction().isActive() ) { - entityManager.getTransaction().rollback(); - } - throw t; - } - finally { - entityManager.close(); - } + } ); // Should *not* trigger a revision - entityManager = getOrCreateEntityManager(); - try { - entityManager.getTransaction().begin(); - final BigDecimalEntity entity = entityManager.find( BigDecimalEntity.class, entityId ); + scope.inTransaction( em -> { + final BigDecimalEntity entity = em.find( BigDecimalEntity.class, entityId ); entity.setData( "Updated" ); entity.setBigDecimal( BigDecimal.valueOf( bigDecimalValue ) ); - entityManager.merge( entity ); - entityManager.getTransaction().commit(); - } - catch ( Throwable t ) { - if ( entityManager.getTransaction().isActive() ) { - entityManager.getTransaction().rollback(); - } - throw t; - } - finally { - entityManager.close(); - } + em.merge( entity ); + } ); // Triggers RevisionType.MOD - entityManager = getOrCreateEntityManager(); - try { - entityManager.getTransaction().begin(); - final BigDecimalEntity entity = entityManager.find( BigDecimalEntity.class, entityId ); + scope.inTransaction( em -> { + final BigDecimalEntity entity = em.find( BigDecimalEntity.class, entityId ); entity.setData( "Updated2" ); entity.setBigDecimal( BigDecimal.valueOf( bigDecimalValue + 1d ) ); - entityManager.merge( entity ); - entityManager.getTransaction().commit(); - } - catch ( Throwable t ) { - if ( entityManager.getTransaction().isActive() ) { - entityManager.getTransaction().rollback(); - } - throw t; - } - finally { - entityManager.close(); - } + em.merge( entity ); + } ); } @Test - public void testRevisionCounts() { - assertEquals( Arrays.asList( 1, 2 ), getAuditReader().getRevisions( BigDecimalEntity.class, entityId ) ); + public void testRevisionCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + assertEquals( Arrays.asList( 1, 2 ), + getAuditReader( em ).getRevisions( BigDecimalEntity.class, entityId ) ); + } ); } @Test - public void testRevisionHistory() { - final BigDecimalEntity rev1 = getAuditReader().find( BigDecimalEntity.class, entityId, 1 ); - assertTrue( BigDecimal.valueOf( bigDecimalValue ).compareTo( rev1.getBigDecimal() ) == 0 ); - assertNull( rev1.getData() ); - - final BigDecimalEntity rev2 = getAuditReader().find( BigDecimalEntity.class, entityId, 2 ); - assertTrue( BigDecimal.valueOf( bigDecimalValue + 1d ).compareTo( rev2.getBigDecimal() ) == 0 ); - assertNull( rev2.getData() ); + public void testRevisionHistory(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = getAuditReader( em ); + final BigDecimalEntity rev1 = auditReader.find( BigDecimalEntity.class, entityId, 1 ); + assertTrue( BigDecimal.valueOf( bigDecimalValue ).compareTo( rev1.getBigDecimal() ) == 0 ); + assertNull( rev1.getData() ); + + final BigDecimalEntity rev2 = auditReader.find( BigDecimalEntity.class, entityId, 2 ); + assertTrue( BigDecimal.valueOf( bigDecimalValue + 1d ).compareTo( rev2.getBigDecimal() ) == 0 ); + assertNull( rev2.getData() ); + } ); } - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { BigDecimalEntity.class }; + // helper to access the AuditReader (keeps code concise) + private org.hibernate.envers.AuditReader getAuditReader(EntityManager em) { + return org.hibernate.envers.AuditReaderFactory.get( em ); } @Entity(name = "BigDecimalEntity") @@ -131,7 +98,6 @@ public static class BigDecimalEntity { private String data; BigDecimalEntity() { - } BigDecimalEntity(BigDecimal bigDecimal, String data) { diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/ColumnScalePrecisionTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/ColumnScalePrecisionTest.java index 0f0c23801216..65e11eb50dda 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/ColumnScalePrecisionTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/ColumnScalePrecisionTest.java @@ -4,70 +4,76 @@ */ package org.hibernate.orm.test.envers.integration.basic; -import java.util.Arrays; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.mapping.Column; import org.hibernate.mapping.Table; - +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.DomainModel; +import org.hibernate.testing.orm.junit.DomainModelScope; import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Assert; -import org.junit.Test; +import org.hibernate.testing.orm.junit.SessionFactory; +import org.hibernate.testing.orm.junit.SessionFactoryScope; +import org.junit.jupiter.api.Test; + +import java.util.Arrays; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; /** * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) */ @JiraKey(value = "HHH-7003") -public class ColumnScalePrecisionTest extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@DomainModel(annotatedClasses = {ScalePrecisionEntity.class}) +@SessionFactory +public class ColumnScalePrecisionTest { private Table auditTable = null; private Table originalTable = null; private Long id = null; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { ScalePrecisionEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); + @BeforeClassTemplate + public void initData(SessionFactoryScope scope, DomainModelScope domainModelScope) { + scope.inTransaction( em -> { + // Revision 1 + ScalePrecisionEntity entity = new ScalePrecisionEntity( 13.0 ); + em.persist( entity ); + em.flush(); + id = entity.getId(); + } ); - // Revision 1 - em.getTransaction().begin(); - ScalePrecisionEntity entity = new ScalePrecisionEntity( 13.0 ); - em.persist( entity ); - em.getTransaction().commit(); - - id = entity.getId(); - auditTable = metadata().getEntityBinding( "org.hibernate.orm.test.envers.integration.basic.ScalePrecisionEntity_AUD" ) + final var domainModel = domainModelScope.getDomainModel(); + auditTable = domainModel.getEntityBinding( "org.hibernate.orm.test.envers.integration.basic.ScalePrecisionEntity_AUD" ) .getTable(); - originalTable = metadata().getEntityBinding( "org.hibernate.orm.test.envers.integration.basic.ScalePrecisionEntity" ) + originalTable = domainModel.getEntityBinding( "org.hibernate.orm.test.envers.integration.basic.ScalePrecisionEntity" ) .getTable(); } @Test public void testColumnScalePrecision() { + // runtime assertions; the table variables should have been populated in initData Column testColumn = new Column( "wholeNumber" ); Column scalePrecisionAuditColumn = auditTable.getColumn( testColumn ); Column scalePrecisionColumn = originalTable.getColumn( testColumn ); - Assert.assertNotNull( scalePrecisionAuditColumn ); - Assert.assertEquals( scalePrecisionColumn.getPrecision(), scalePrecisionAuditColumn.getPrecision() ); - Assert.assertEquals( scalePrecisionColumn.getScale(), scalePrecisionAuditColumn.getScale() ); + assertNotNull( scalePrecisionAuditColumn ); + assertEquals( scalePrecisionColumn.getPrecision(), scalePrecisionAuditColumn.getPrecision() ); + assertEquals( scalePrecisionColumn.getScale(), scalePrecisionAuditColumn.getScale() ); } @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1 ).equals( getAuditReader().getRevisions( ScalePrecisionEntity.class, id ) ); + public void testRevisionsCounts(SessionFactoryScope scope) { + scope.inSession( session -> { + assertEquals( Arrays.asList( 1 ), AuditReaderFactory.get( session ).getRevisions( ScalePrecisionEntity.class, id ) ); + } ); } @Test - public void testHistoryOfScalePrecisionEntity() { - ScalePrecisionEntity ver1 = new ScalePrecisionEntity( 13.0, id ); - - Assert.assertEquals( ver1, getAuditReader().find( ScalePrecisionEntity.class, id, 1 ) ); + public void testHistoryOfScalePrecisionEntity(SessionFactoryScope scope) { + scope.inSession( session -> { + ScalePrecisionEntity ver1 = new ScalePrecisionEntity( 13.0, id ); + assertEquals( ver1, AuditReaderFactory.get( session ).find( ScalePrecisionEntity.class, id, 1 ) ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/Delete.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/Delete.java index 4ea256e1e3bc..18c8c5ff3c48 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/Delete.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/Delete.java @@ -4,116 +4,121 @@ */ package org.hibernate.orm.test.envers.integration.basic; -import java.util.Arrays; -import jakarta.persistence.EntityManager; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import java.util.Arrays; -import org.junit.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNull; /** * @author Adam Warski (adam at warski dot org) */ -public class Delete extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {BasicTestEntity2.class}) +public class Delete { private Integer id1; private Integer id2; private Integer id3; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {BasicTestEntity2.class}; - } - - @Test - @Priority(10) - public void initData() { - // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + // Revision 1 + em.getTransaction().begin(); - BasicTestEntity2 bte1 = new BasicTestEntity2( "x", "a" ); - BasicTestEntity2 bte2 = new BasicTestEntity2( "y", "b" ); - BasicTestEntity2 bte3 = new BasicTestEntity2( "z", "c" ); - em.persist( bte1 ); - em.persist( bte2 ); - em.persist( bte3 ); + BasicTestEntity2 bte1 = new BasicTestEntity2( "x", "a" ); + BasicTestEntity2 bte2 = new BasicTestEntity2( "y", "b" ); + BasicTestEntity2 bte3 = new BasicTestEntity2( "z", "c" ); + em.persist( bte1 ); + em.persist( bte2 ); + em.persist( bte3 ); - em.getTransaction().commit(); + em.getTransaction().commit(); - // Revision 2 - em = getEntityManager(); - em.getTransaction().begin(); + // Revision 2 + em.getTransaction().begin(); - bte1 = em.find( BasicTestEntity2.class, bte1.getId() ); - bte2 = em.find( BasicTestEntity2.class, bte2.getId() ); - bte3 = em.find( BasicTestEntity2.class, bte3.getId() ); - bte1.setStr1( "x2" ); - bte2.setStr2( "b2" ); - em.remove( bte3 ); + bte1 = em.find( BasicTestEntity2.class, bte1.getId() ); + bte2 = em.find( BasicTestEntity2.class, bte2.getId() ); + bte3 = em.find( BasicTestEntity2.class, bte3.getId() ); + bte1.setStr1( "x2" ); + bte2.setStr2( "b2" ); + em.remove( bte3 ); - em.getTransaction().commit(); + em.getTransaction().commit(); - // Revision 3 - em = getEntityManager(); - em.getTransaction().begin(); + // Revision 3 + em.getTransaction().begin(); - bte2 = em.find( BasicTestEntity2.class, bte2.getId() ); - em.remove( bte2 ); + bte2 = em.find( BasicTestEntity2.class, bte2.getId() ); + em.remove( bte2 ); - em.getTransaction().commit(); + em.getTransaction().commit(); - // Revision 4 - em = getEntityManager(); - em.getTransaction().begin(); + // Revision 4 + em.getTransaction().begin(); - bte1 = em.find( BasicTestEntity2.class, bte1.getId() ); - em.remove( bte1 ); + bte1 = em.find( BasicTestEntity2.class, bte1.getId() ); + em.remove( bte1 ); - em.getTransaction().commit(); + em.getTransaction().commit(); - id1 = bte1.getId(); - id2 = bte2.getId(); - id3 = bte3.getId(); + id1 = bte1.getId(); + id2 = bte2.getId(); + id3 = bte3.getId(); + } ); } @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2, 4 ).equals( getAuditReader().getRevisions( BasicTestEntity2.class, id1 ) ); - - assert Arrays.asList( 1, 3 ).equals( getAuditReader().getRevisions( BasicTestEntity2.class, id2 ) ); - - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( BasicTestEntity2.class, id3 ) ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + assertEquals( Arrays.asList( 1, 2, 4 ), + org.hibernate.envers.AuditReaderFactory.get( em ).getRevisions( BasicTestEntity2.class, id1 ) ); + assertEquals( Arrays.asList( 1, 3 ), + org.hibernate.envers.AuditReaderFactory.get( em ).getRevisions( BasicTestEntity2.class, id2 ) ); + assertEquals( Arrays.asList( 1, 2 ), + org.hibernate.envers.AuditReaderFactory.get( em ).getRevisions( BasicTestEntity2.class, id3 ) ); + } ); } @Test - public void testHistoryOfId1() { - BasicTestEntity2 ver1 = new BasicTestEntity2( id1, "x", null ); - BasicTestEntity2 ver2 = new BasicTestEntity2( id1, "x2", null ); - - assert getAuditReader().find( BasicTestEntity2.class, id1, 1 ).equals( ver1 ); - assert getAuditReader().find( BasicTestEntity2.class, id1, 2 ).equals( ver2 ); - assert getAuditReader().find( BasicTestEntity2.class, id1, 3 ).equals( ver2 ); - assert getAuditReader().find( BasicTestEntity2.class, id1, 4 ) == null; + public void testHistoryOfId1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + assertEquals( new BasicTestEntity2( id1, "x", null ), + org.hibernate.envers.AuditReaderFactory.get( em ).find( BasicTestEntity2.class, id1, 1 ) ); + assertEquals( new BasicTestEntity2( id1, "x2", null ), + org.hibernate.envers.AuditReaderFactory.get( em ).find( BasicTestEntity2.class, id1, 2 ) ); + assertEquals( new BasicTestEntity2( id1, "x2", null ), + org.hibernate.envers.AuditReaderFactory.get( em ).find( BasicTestEntity2.class, id1, 3 ) ); + assertNull( org.hibernate.envers.AuditReaderFactory.get( em ).find( BasicTestEntity2.class, id1, 4 ) ); + } ); } @Test - public void testHistoryOfId2() { - BasicTestEntity2 ver1 = new BasicTestEntity2( id2, "y", null ); - - assert getAuditReader().find( BasicTestEntity2.class, id2, 1 ).equals( ver1 ); - assert getAuditReader().find( BasicTestEntity2.class, id2, 2 ).equals( ver1 ); - assert getAuditReader().find( BasicTestEntity2.class, id2, 3 ) == null; - assert getAuditReader().find( BasicTestEntity2.class, id2, 4 ) == null; + public void testHistoryOfId2(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + assertEquals( new BasicTestEntity2( id2, "y", null ), + org.hibernate.envers.AuditReaderFactory.get( em ).find( BasicTestEntity2.class, id2, 1 ) ); + assertEquals( new BasicTestEntity2( id2, "y", null ), + org.hibernate.envers.AuditReaderFactory.get( em ).find( BasicTestEntity2.class, id2, 2 ) ); + assertNull( org.hibernate.envers.AuditReaderFactory.get( em ).find( BasicTestEntity2.class, id2, 3 ) ); + assertNull( org.hibernate.envers.AuditReaderFactory.get( em ).find( BasicTestEntity2.class, id2, 4 ) ); + } ); } @Test - public void testHistoryOfId3() { - BasicTestEntity2 ver1 = new BasicTestEntity2( id3, "z", null ); - - assert getAuditReader().find( BasicTestEntity2.class, id3, 1 ).equals( ver1 ); - assert getAuditReader().find( BasicTestEntity2.class, id3, 2 ) == null; - assert getAuditReader().find( BasicTestEntity2.class, id3, 3 ) == null; - assert getAuditReader().find( BasicTestEntity2.class, id3, 4 ) == null; + public void testHistoryOfId3(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + assertEquals( new BasicTestEntity2( id3, "z", null ), + org.hibernate.envers.AuditReaderFactory.get( em ).find( BasicTestEntity2.class, id3, 1 ) ); + assertNull( org.hibernate.envers.AuditReaderFactory.get( em ).find( BasicTestEntity2.class, id3, 2 ) ); + assertNull( org.hibernate.envers.AuditReaderFactory.get( em ).find( BasicTestEntity2.class, id3, 3 ) ); + assertNull( org.hibernate.envers.AuditReaderFactory.get( em ).find( BasicTestEntity2.class, id3, 4 ) ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/EmptyStringTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/EmptyStringTest.java index 97332df34113..215a1f1e3a6b 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/EmptyStringTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/EmptyStringTest.java @@ -4,68 +4,61 @@ */ package org.hibernate.orm.test.envers.integration.basic; -import java.util.Arrays; -import jakarta.persistence.EntityManager; - import org.hibernate.dialect.OracleDialect; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.orm.test.envers.entities.StrTestEntity; - -import org.hibernate.testing.RequiresDialect; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; -import junit.framework.Assert; +import org.hibernate.testing.orm.junit.Jpa; +import org.hibernate.testing.orm.junit.RequiresDialect; +import org.junit.jupiter.api.Test; + +import java.util.Arrays; + +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) */ @JiraKey(value = "HHH-7246") @RequiresDialect(OracleDialect.class) -public class EmptyStringTest extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {StrTestEntity.class}) +public class EmptyStringTest { private Integer emptyId = null; private Integer nullId = null; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {StrTestEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - // Revision 1 - em.getTransaction().begin(); - StrTestEntity emptyEntity = new StrTestEntity( "" ); - em.persist( emptyEntity ); - StrTestEntity nullEntity = new StrTestEntity( null ); - em.persist( nullEntity ); - em.getTransaction().commit(); - - emptyId = emptyEntity.getId(); - nullId = nullEntity.getId(); - - em.close(); - em = getEntityManager(); + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + scope.inTransaction( em -> { + StrTestEntity emptyEntity = new StrTestEntity( "" ); + em.persist( emptyEntity ); + StrTestEntity nullEntity = new StrTestEntity( null ); + em.persist( nullEntity ); - // Should not generate revision after NULL to "" modification and vice versa on Oracle. - em.getTransaction().begin(); - emptyEntity = em.find( StrTestEntity.class, emptyId ); - emptyEntity.setStr( null ); - em.merge( emptyEntity ); - nullEntity = em.find( StrTestEntity.class, nullId ); - nullEntity.setStr( "" ); - em.merge( nullEntity ); - em.getTransaction().commit(); + emptyId = emptyEntity.getId(); + nullId = nullEntity.getId(); + } ); - em.close(); + scope.inTransaction( em -> { + // Should not generate revision after NULL to "" modification and vice versa on Oracle. + StrTestEntity emptyEntity = em.find( StrTestEntity.class, emptyId ); + emptyEntity.setStr( null ); + em.merge( emptyEntity ); + StrTestEntity nullEntity = em.find( StrTestEntity.class, nullId ); + nullEntity.setStr( "" ); + em.merge( nullEntity ); + } ); } @Test - public void testRevisionsCounts() { - Assert.assertEquals( Arrays.asList( 1 ), getAuditReader().getRevisions( StrTestEntity.class, emptyId ) ); - Assert.assertEquals( Arrays.asList( 1 ), getAuditReader().getRevisions( StrTestEntity.class, nullId ) ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1 ), auditReader.getRevisions( StrTestEntity.class, emptyId ) ); + assertEquals( Arrays.asList( 1 ), auditReader.getRevisions( StrTestEntity.class, nullId ) ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/GlobalVersioned.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/GlobalVersioned.java index 220804b39011..a68762880988 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/GlobalVersioned.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/GlobalVersioned.java @@ -4,53 +4,58 @@ */ package org.hibernate.orm.test.envers.integration.basic; -import java.util.Arrays; -import jakarta.persistence.EntityManager; +import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import java.util.Arrays; -import org.junit.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Adam Warski (adam at warski dot org) */ -public class GlobalVersioned extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {BasicTestEntity4.class}) +public class GlobalVersioned { private Integer id1; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {BasicTestEntity4.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - BasicTestEntity4 bte1 = new BasicTestEntity4( "x", "y" ); - em.persist( bte1 ); - id1 = bte1.getId(); - em.getTransaction().commit(); - - em.getTransaction().begin(); - bte1 = em.find( BasicTestEntity4.class, id1 ); - bte1.setStr1( "a" ); - bte1.setStr2( "b" ); - em.getTransaction().commit(); + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + scope.inTransaction( em -> { + BasicTestEntity4 bte1 = new BasicTestEntity4( "x", "y" ); + em.persist( bte1 ); + id1 = bte1.getId(); + } ); + + scope.inTransaction( em -> { + BasicTestEntity4 bte1 = em.find( BasicTestEntity4.class, id1 ); + bte1.setStr1( "a" ); + bte1.setStr2( "b" ); + em.merge( bte1 ); + } ); } @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( BasicTestEntity4.class, id1 ) ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + assertEquals( Arrays.asList( 1, 2 ), + AuditReaderFactory.get( em ).getRevisions( BasicTestEntity4.class, id1 ) ); + } ); } @Test - public void testHistoryOfId1() { - BasicTestEntity4 ver1 = new BasicTestEntity4( id1, "x", "y" ); - BasicTestEntity4 ver2 = new BasicTestEntity4( id1, "a", "b" ); - - assert getAuditReader().find( BasicTestEntity4.class, id1, 1 ).equals( ver1 ); - assert getAuditReader().find( BasicTestEntity4.class, id1, 2 ).equals( ver2 ); + public void testHistoryOfId1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + BasicTestEntity4 ver1 = new BasicTestEntity4( id1, "x", "y" ); + BasicTestEntity4 ver2 = new BasicTestEntity4( id1, "a", "b" ); + + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( ver1, auditReader.find( BasicTestEntity4.class, id1, 1 ) ); + assertEquals( ver2, auditReader.find( BasicTestEntity4.class, id1, 2 ) ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/ManyOperationsInTransaction.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/ManyOperationsInTransaction.java index 29dae69e4a22..c13700a0942d 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/ManyOperationsInTransaction.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/ManyOperationsInTransaction.java @@ -5,106 +5,108 @@ package org.hibernate.orm.test.envers.integration.basic; import java.util.Arrays; -import jakarta.persistence.EntityManager; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; -import org.junit.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Adam Warski (adam at warski dot org) */ -public class ManyOperationsInTransaction extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {BasicTestEntity1.class}) +public class ManyOperationsInTransaction { private Integer id1; private Integer id2; private Integer id3; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {BasicTestEntity1.class}; - } - - @Test - - @Priority(10) - public void initData() { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); + scope.inTransaction( em -> { + BasicTestEntity1 bte1 = new BasicTestEntity1( "x", 1 ); + BasicTestEntity1 bte2 = new BasicTestEntity1( "y", 20 ); + em.persist( bte1 ); + em.persist( bte2 ); - BasicTestEntity1 bte1 = new BasicTestEntity1( "x", 1 ); - BasicTestEntity1 bte2 = new BasicTestEntity1( "y", 20 ); - em.persist( bte1 ); - em.persist( bte2 ); - - em.getTransaction().commit(); + id1 = bte1.getId(); + id2 = bte2.getId(); + } ); // Revision 2 - em.getTransaction().begin(); - - bte1 = em.find( BasicTestEntity1.class, bte1.getId() ); - bte2 = em.find( BasicTestEntity1.class, bte2.getId() ); - BasicTestEntity1 bte3 = new BasicTestEntity1( "z", 300 ); - bte1.setStr1( "x2" ); - bte2.setLong1( 21 ); - em.persist( bte3 ); + scope.inTransaction( em -> { + BasicTestEntity1 bte1 = em.find( BasicTestEntity1.class, id1 ); + BasicTestEntity1 bte2 = em.find( BasicTestEntity1.class, id2 ); + BasicTestEntity1 bte3 = new BasicTestEntity1( "z", 300 ); + bte1.setStr1( "x2" ); + bte2.setLong1( 21 ); + em.persist( bte3 ); - em.getTransaction().commit(); + id3 = bte3.getId(); + } ); // Revision 3 - em.getTransaction().begin(); - - bte2 = em.find( BasicTestEntity1.class, bte2.getId() ); - bte3 = em.find( BasicTestEntity1.class, bte3.getId() ); - bte2.setStr1( "y3" ); - bte2.setLong1( 22 ); - bte3.setStr1( "z3" ); - - em.getTransaction().commit(); - - id1 = bte1.getId(); - id2 = bte2.getId(); - id3 = bte3.getId(); + scope.inTransaction( em -> { + BasicTestEntity1 bte2 = em.find( BasicTestEntity1.class, id2 ); + BasicTestEntity1 bte3 = em.find( BasicTestEntity1.class, id3 ); + bte2.setStr1( "y3" ); + bte2.setLong1( 22 ); + bte3.setStr1( "z3" ); + } ); } @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( BasicTestEntity1.class, id1 ) ); - - assert Arrays.asList( 1, 2, 3 ).equals( getAuditReader().getRevisions( BasicTestEntity1.class, id2 ) ); - - assert Arrays.asList( 2, 3 ).equals( getAuditReader().getRevisions( BasicTestEntity1.class, id3 ) ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1, 2 ), auditReader.getRevisions( BasicTestEntity1.class, id1 ) ); + assertEquals( Arrays.asList( 1, 2, 3 ), auditReader.getRevisions( BasicTestEntity1.class, id2 ) ); + assertEquals( Arrays.asList( 2, 3 ), auditReader.getRevisions( BasicTestEntity1.class, id3 ) ); + } ); } @Test - public void testHistoryOfId1() { - BasicTestEntity1 ver1 = new BasicTestEntity1( id1, "x", 1 ); - BasicTestEntity1 ver2 = new BasicTestEntity1( id1, "x2", 1 ); - - assert getAuditReader().find( BasicTestEntity1.class, id1, 1 ).equals( ver1 ); - assert getAuditReader().find( BasicTestEntity1.class, id1, 2 ).equals( ver2 ); - assert getAuditReader().find( BasicTestEntity1.class, id1, 3 ).equals( ver2 ); + public void testHistoryOfId1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + BasicTestEntity1 ver1 = new BasicTestEntity1( id1, "x", 1 ); + BasicTestEntity1 ver2 = new BasicTestEntity1( id1, "x2", 1 ); + + assertEquals( ver1, auditReader.find( BasicTestEntity1.class, id1, 1 ) ); + assertEquals( ver2, auditReader.find( BasicTestEntity1.class, id1, 2 ) ); + assertEquals( ver2, auditReader.find( BasicTestEntity1.class, id1, 3 ) ); + } ); } @Test - public void testHistoryOfId2() { - BasicTestEntity1 ver1 = new BasicTestEntity1( id2, "y", 20 ); - BasicTestEntity1 ver2 = new BasicTestEntity1( id2, "y", 21 ); - BasicTestEntity1 ver3 = new BasicTestEntity1( id2, "y3", 22 ); - - assert getAuditReader().find( BasicTestEntity1.class, id2, 1 ).equals( ver1 ); - assert getAuditReader().find( BasicTestEntity1.class, id2, 2 ).equals( ver2 ); - assert getAuditReader().find( BasicTestEntity1.class, id2, 3 ).equals( ver3 ); + public void testHistoryOfId2(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + BasicTestEntity1 ver1 = new BasicTestEntity1( id2, "y", 20 ); + BasicTestEntity1 ver2 = new BasicTestEntity1( id2, "y", 21 ); + BasicTestEntity1 ver3 = new BasicTestEntity1( id2, "y3", 22 ); + + assertEquals( ver1, auditReader.find( BasicTestEntity1.class, id2, 1 ) ); + assertEquals( ver2, auditReader.find( BasicTestEntity1.class, id2, 2 ) ); + assertEquals( ver3, auditReader.find( BasicTestEntity1.class, id2, 3 ) ); + } ); } @Test - public void testHistoryOfId3() { - BasicTestEntity1 ver1 = new BasicTestEntity1( id3, "z", 300 ); - BasicTestEntity1 ver2 = new BasicTestEntity1( id3, "z3", 300 ); - - assert getAuditReader().find( BasicTestEntity1.class, id3, 1 ) == null; - assert getAuditReader().find( BasicTestEntity1.class, id3, 2 ).equals( ver1 ); - assert getAuditReader().find( BasicTestEntity1.class, id3, 3 ).equals( ver2 ); + public void testHistoryOfId3(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + BasicTestEntity1 ver1 = new BasicTestEntity1( id3, "z", 300 ); + BasicTestEntity1 ver2 = new BasicTestEntity1( id3, "z3", 300 ); + + assertEquals( null, auditReader.find( BasicTestEntity1.class, id3, 1 ) ); + assertEquals( ver1, auditReader.find( BasicTestEntity1.class, id3, 2 ) ); + assertEquals( ver2, auditReader.find( BasicTestEntity1.class, id3, 3 ) ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/NoneAudited.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/NoneAudited.java index aa8d12a3cca5..50303dab4981 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/NoneAudited.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/NoneAudited.java @@ -6,27 +6,29 @@ import java.util.List; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; import org.hibernate.mapping.PersistentClass; - -import org.junit.Assert; -import org.junit.Test; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.DomainModel; +import org.hibernate.testing.orm.junit.DomainModelScope; +import org.hibernate.testing.orm.junit.SessionFactory; +import org.junit.jupiter.api.Test; import static org.hibernate.envers.internal.tools.Tools.collectionToList; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; /** * @author Adam Warski (adam at warski dot org) */ -public class NoneAudited extends BaseEnversJPAFunctionalTestCase { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {BasicTestEntity3.class}; - } - +@EnversTest +@DomainModel(annotatedClasses = {BasicTestEntity3.class}) +@SessionFactory +public class NoneAudited { @Test - public void testRevisionInfoTableNotCreated() { - @SuppressWarnings("unchecked") List pcs = collectionToList( metadata().getEntityBindings() ); - Assert.assertEquals( 1, pcs.size() ); - Assert.assertTrue( pcs.get( 0 ).getClassName().contains( "BasicTestEntity3" ) ); + public void testRevisionInfoTableNotCreated(DomainModelScope scope) { + @SuppressWarnings("unchecked") + List pcs = collectionToList( scope.getDomainModel().getEntityBindings() ); + assertEquals( 1, pcs.size() ); + assertTrue( pcs.get( 0 ).getClassName().contains( "BasicTestEntity3" ) ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/NotVersioned.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/NotVersioned.java index 6d0a29bfe09a..8e4e6e050f25 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/NotVersioned.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/NotVersioned.java @@ -4,49 +4,56 @@ */ package org.hibernate.orm.test.envers.integration.basic; -import jakarta.persistence.EntityManager; - +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.exception.NotAuditedException; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; -import org.junit.Test; +import static org.junit.jupiter.api.Assertions.assertThrows; /** * @author Adam Warski (adam at warski dot org) */ -public class NotVersioned extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {BasicTestEntity1.class, BasicTestEntity3.class}) +public class NotVersioned { private Integer id1; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {BasicTestEntity1.class, BasicTestEntity3.class}; + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + scope.inTransaction( em -> { + BasicTestEntity3 bte1 = new BasicTestEntity3( "x", "y" ); + em.persist( bte1 ); + id1 = bte1.getId(); + } ); + + scope.inTransaction( em -> { + BasicTestEntity3 bte1 = em.find( BasicTestEntity3.class, id1 ); + bte1.setStr1( "a" ); + bte1.setStr2( "b" ); + } ); } @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - BasicTestEntity3 bte1 = new BasicTestEntity3( "x", "y" ); - em.persist( bte1 ); - id1 = bte1.getId(); - em.getTransaction().commit(); - - em.getTransaction().begin(); - bte1 = em.find( BasicTestEntity3.class, id1 ); - bte1.setStr1( "a" ); - bte1.setStr2( "b" ); - em.getTransaction().commit(); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertThrows( NotAuditedException.class, () -> + auditReader.getRevisions( BasicTestEntity3.class, id1 ) + ); + } ); } - @Test(expected = NotAuditedException.class) - public void testRevisionsCounts() { - getAuditReader().getRevisions( BasicTestEntity3.class, id1 ); - } - - @Test(expected = NotAuditedException.class) - public void testHistoryOfId1() { - getAuditReader().find( BasicTestEntity3.class, id1, 1 ); + @Test + public void testHistoryOfId1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertThrows( NotAuditedException.class, () -> + auditReader.find( BasicTestEntity3.class, id1, 1 ) + ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/NullProperties.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/NullProperties.java index 6919a933c04f..1b0ccff9febc 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/NullProperties.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/NullProperties.java @@ -5,80 +5,87 @@ package org.hibernate.orm.test.envers.integration.basic; import java.util.Arrays; -import jakarta.persistence.EntityManager; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; -import org.junit.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNull; /** * @author Adam Warski (adam at warski dot org) */ -public class NullProperties extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {BasicTestEntity1.class}) +public class NullProperties { private Integer id1; private Integer id2; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {BasicTestEntity1.class}; - } - - private Integer addNewEntity(String str, long lng) { - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - BasicTestEntity1 bte1 = new BasicTestEntity1( str, lng ); - em.persist( bte1 ); - em.getTransaction().commit(); - - return bte1.getId(); - } - - private void modifyEntity(Integer id, String str, long lng) { - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - BasicTestEntity1 bte1 = em.find( BasicTestEntity1.class, id ); - bte1.setLong1( lng ); - bte1.setStr1( str ); - em.getTransaction().commit(); - } - - @Test - @Priority(10) - public void initData() { - id1 = addNewEntity( "x", 1 ); // rev 1 - id2 = addNewEntity( null, 20 ); // rev 2 - - modifyEntity( id1, null, 1 ); // rev 3 - modifyEntity( id2, "y2", 20 ); // rev 4 + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + id1 = scope.fromTransaction( em -> { + BasicTestEntity1 bte1 = new BasicTestEntity1( "x", 1 ); + em.persist( bte1 ); + return bte1.getId(); + } ); + + id2 = scope.fromTransaction( em -> { + BasicTestEntity1 bte2 = new BasicTestEntity1( null, 20 ); + em.persist( bte2 ); + return bte2.getId(); + } ); + + scope.inTransaction( em -> { + BasicTestEntity1 bte1 = em.find( BasicTestEntity1.class, id1 ); + bte1.setLong1( 1 ); + bte1.setStr1( null ); + } ); + + scope.inTransaction( em -> { + BasicTestEntity1 bte2 = em.find( BasicTestEntity1.class, id2 ); + bte2.setLong1( 20 ); + bte2.setStr1( "y2" ); + } ); } @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 3 ).equals( getAuditReader().getRevisions( BasicTestEntity1.class, id1 ) ); - - assert Arrays.asList( 2, 4 ).equals( getAuditReader().getRevisions( BasicTestEntity1.class, id2 ) ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1, 3 ), auditReader.getRevisions( BasicTestEntity1.class, id1 ) ); + assertEquals( Arrays.asList( 2, 4 ), auditReader.getRevisions( BasicTestEntity1.class, id2 ) ); + } ); } @Test - public void testHistoryOfId1() { - BasicTestEntity1 ver1 = new BasicTestEntity1( id1, "x", 1 ); - BasicTestEntity1 ver2 = new BasicTestEntity1( id1, null, 1 ); - - assert getAuditReader().find( BasicTestEntity1.class, id1, 1 ).equals( ver1 ); - assert getAuditReader().find( BasicTestEntity1.class, id1, 2 ).equals( ver1 ); - assert getAuditReader().find( BasicTestEntity1.class, id1, 3 ).equals( ver2 ); - assert getAuditReader().find( BasicTestEntity1.class, id1, 4 ).equals( ver2 ); + public void testHistoryOfId1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + BasicTestEntity1 ver1 = new BasicTestEntity1( id1, "x", 1 ); + BasicTestEntity1 ver2 = new BasicTestEntity1( id1, null, 1 ); + + assertEquals( ver1, auditReader.find( BasicTestEntity1.class, id1, 1 ) ); + assertEquals( ver1, auditReader.find( BasicTestEntity1.class, id1, 2 ) ); + assertEquals( ver2, auditReader.find( BasicTestEntity1.class, id1, 3 ) ); + assertEquals( ver2, auditReader.find( BasicTestEntity1.class, id1, 4 ) ); + } ); } @Test - public void testHistoryOfId2() { - BasicTestEntity1 ver1 = new BasicTestEntity1( id2, null, 20 ); - BasicTestEntity1 ver2 = new BasicTestEntity1( id2, "y2", 20 ); - - assert getAuditReader().find( BasicTestEntity1.class, id2, 1 ) == null; - assert getAuditReader().find( BasicTestEntity1.class, id2, 2 ).equals( ver1 ); - assert getAuditReader().find( BasicTestEntity1.class, id2, 3 ).equals( ver1 ); - assert getAuditReader().find( BasicTestEntity1.class, id2, 4 ).equals( ver2 ); + public void testHistoryOfId2(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + BasicTestEntity1 ver1 = new BasicTestEntity1( id2, null, 20 ); + BasicTestEntity1 ver2 = new BasicTestEntity1( id2, "y2", 20 ); + + assertNull( auditReader.find( BasicTestEntity1.class, id2, 1 ) ); + assertEquals( ver1, auditReader.find( BasicTestEntity1.class, id2, 2 ) ); + assertEquals( ver1, auditReader.find( BasicTestEntity1.class, id2, 3 ) ); + assertEquals( ver2, auditReader.find( BasicTestEntity1.class, id2, 4 ) ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/OutsideTransactionTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/OutsideTransactionTest.java index 425c4de29287..b90445d16f52 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/OutsideTransactionTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/OutsideTransactionTest.java @@ -4,126 +4,118 @@ */ package org.hibernate.orm.test.envers.integration.basic; -import java.util.Map; import jakarta.persistence.TransactionRequiredException; - -import org.hibernate.Session; import org.hibernate.dialect.MySQLDialect; import org.hibernate.envers.configuration.EnversSettings; -import org.hibernate.orm.test.envers.BaseEnversFunctionalTestCase; import org.hibernate.orm.test.envers.entities.StrTestEntity; import org.hibernate.orm.test.envers.integration.collection.norevision.Name; import org.hibernate.orm.test.envers.integration.collection.norevision.Person; - -import org.hibernate.testing.SkipForDialect; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; +import org.hibernate.testing.orm.junit.Jpa; +import org.hibernate.testing.orm.junit.Setting; +import org.hibernate.testing.orm.junit.SkipForDialect; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertThrows; /** * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) */ @JiraKey(value = "HHH-5565") -@SkipForDialect(value = MySQLDialect.class, comment = "The test hangs on") -public class OutsideTransactionTest extends BaseEnversFunctionalTestCase { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {StrTestEntity.class, Person.class, Name.class}; - } - - @Override - protected void addSettings(Map settings) { - super.addSettings( settings ); - - settings.put( EnversSettings.STORE_DATA_AT_DELETE, "true" ); - settings.put( EnversSettings.REVISION_ON_COLLECTION_CHANGE, "true" ); +@SkipForDialect(dialectClass = MySQLDialect.class, reason = "The test hangs on") +@EnversTest +@Jpa(annotatedClasses = {StrTestEntity.class, Person.class, Name.class}, + integrationSettings = { + @Setting(name = EnversSettings.STORE_DATA_AT_DELETE, value = "true"), + @Setting(name = EnversSettings.REVISION_ON_COLLECTION_CHANGE, value = "true") + }) +public class OutsideTransactionTest { + @Test + public void testInsertOutsideActiveTransaction(EntityManagerFactoryScope scope) { + assertThrows( TransactionRequiredException.class, () -> { + scope.inEntityManager( em -> { + // Illegal insertion of entity outside of active transaction. + StrTestEntity entity = new StrTestEntity( "data" ); + em.persist( entity ); + em.flush(); + } ); + } ); } - @Test(expected = TransactionRequiredException.class) - public void testInsertOutsideActiveTransaction() { - Session session = openSession(); - - // Illegal insertion of entity outside of active transaction. - StrTestEntity entity = new StrTestEntity( "data" ); - session.persist( entity ); - session.flush(); - - session.close(); - } - - @Test(expected = TransactionRequiredException.class) - public void testMergeOutsideActiveTransaction() { - Session session = openSession(); - - // Revision 1 - session.getTransaction().begin(); - StrTestEntity entity = new StrTestEntity( "data" ); - session.persist( entity ); - session.getTransaction().commit(); - - // Illegal modification of entity state outside of active transaction. - entity.setStr( "modified data" ); - session.merge( entity ); - session.flush(); - - session.close(); + @Test + public void testMergeOutsideActiveTransaction(EntityManagerFactoryScope scope) { + final StrTestEntity entity = scope.fromTransaction( em -> { + StrTestEntity e = new StrTestEntity( "data" ); + em.persist( e ); + return e; + } ); + + assertThrows( TransactionRequiredException.class, () -> { + scope.inEntityManager( em -> { + // Illegal modification of entity state outside of active transaction. + entity.setStr( "modified data" ); + em.merge( entity ); + em.flush(); + } ); + } ); } - @Test(expected = TransactionRequiredException.class) - public void testDeleteOutsideActiveTransaction() { - Session session = openSession(); - - // Revision 1 - session.getTransaction().begin(); - StrTestEntity entity = new StrTestEntity( "data" ); - session.persist( entity ); - session.getTransaction().commit(); - - // Illegal removal of entity outside of active transaction. - session.remove( entity ); - session.flush(); - - session.close(); + @Test + public void testDeleteOutsideActiveTransaction(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + em.getTransaction().begin(); + final StrTestEntity entity = new StrTestEntity( "data" ); + em.persist( entity ); + em.getTransaction().commit(); + assertThrows( TransactionRequiredException.class, () -> { + // Illegal removal of entity outside of active transaction. + em.remove( entity ); + em.flush(); + } ); + } ); } - @Test(expected = TransactionRequiredException.class) - public void testCollectionUpdateOutsideActiveTransaction() { - Session session = openSession(); - - // Revision 1 - session.getTransaction().begin(); - Person person = new Person(); - Name name = new Name(); - name.setName( "Name" ); - person.getNames().add( name ); - session.persist( person ); - session.getTransaction().commit(); - - // Illegal collection update outside of active transaction. - person.getNames().remove( name ); - session.merge( person ); - session.flush(); - - session.close(); + @Test + public void testCollectionUpdateOutsideActiveTransaction(EntityManagerFactoryScope scope) { + final Person person = scope.fromTransaction( em -> { + Person p = new Person(); + Name name = new Name(); + name.setName( "Name" ); + p.getNames().add( name ); + em.persist( p ); + return p; + } ); + + assertThrows( TransactionRequiredException.class, () -> { + scope.inEntityManager( em -> { + // Illegal collection update outside of active transaction. + person.getNames().clear(); + em.merge( person ); + em.flush(); + } ); + } ); } - @Test(expected = TransactionRequiredException.class) - public void testCollectionRemovalOutsideActiveTransaction() { - Session session = openSession(); - - // Revision 1 - session.getTransaction().begin(); - Person person = new Person(); - Name name = new Name(); - name.setName( "Name" ); - person.getNames().add( name ); - session.persist( person ); - session.getTransaction().commit(); - - // Illegal collection removal outside of active transaction. - person.setNames( null ); - session.merge( person ); - session.flush(); - - session.close(); + @Test + public void testCollectionRemovalOutsideActiveTransaction(EntityManagerFactoryScope scope) { + final Person person = scope.fromTransaction( em -> { + Person p = new Person(); + Name name = new Name(); + name.setName( "Name" ); + p.getNames().add( name ); + em.persist( p ); + return p; + } ); + + assertThrows( TransactionRequiredException.class, () -> { + scope.inEntityManager( em -> { + // Illegal collection removal outside of active transaction. + person.setNames( null ); + em.merge( person ); + em.flush(); + } ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/RegisterUserEventListenersTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/RegisterUserEventListenersTest.java index 70ca3cfb6f97..2e8d34a20ffc 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/RegisterUserEventListenersTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/RegisterUserEventListenersTest.java @@ -4,50 +4,49 @@ */ package org.hibernate.orm.test.envers.integration.basic; -import org.hibernate.Session; import org.hibernate.action.spi.AfterTransactionCompletionProcess; import org.hibernate.action.spi.BeforeTransactionCompletionProcess; import org.hibernate.engine.spi.SharedSessionContractImplementor; import org.hibernate.envers.internal.tools.MutableInteger; -import org.hibernate.orm.test.envers.BaseEnversFunctionalTestCase; -import org.hibernate.orm.test.envers.entities.StrTestEntity; import org.hibernate.event.service.spi.EventListenerRegistry; import org.hibernate.event.spi.EventType; import org.hibernate.event.spi.PostInsertEvent; import org.hibernate.event.spi.PostInsertEventListener; +import org.hibernate.orm.test.envers.entities.StrTestEntity; import org.hibernate.persister.entity.EntityPersister; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.DomainModel; import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Assert; -import org.junit.Test; +import org.hibernate.testing.orm.junit.SessionFactory; +import org.hibernate.testing.orm.junit.SessionFactoryScope; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) */ -public class RegisterUserEventListenersTest extends BaseEnversFunctionalTestCase { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {StrTestEntity.class}; - } - +@EnversTest +@DomainModel(annotatedClasses = {StrTestEntity.class}) +@SessionFactory +public class RegisterUserEventListenersTest { @Test @JiraKey(value = "HHH-7478") - public void testTransactionProcessSynchronization() { - final EventListenerRegistry registry = sessionFactory().getEventListenerRegistry(); + public void testTransactionProcessSynchronization(SessionFactoryScope scope) { + final EventListenerRegistry registry = scope.getSessionFactory().getEventEngine().getListenerRegistry(); final CountingPostInsertTransactionBoundaryListener listener = new CountingPostInsertTransactionBoundaryListener(); registry.getEventListenerGroup( EventType.POST_INSERT ).appendListener( listener ); - Session session = openSession(); - session.getTransaction().begin(); - StrTestEntity entity = new StrTestEntity( "str1" ); - session.persist( entity ); - session.getTransaction().commit(); - session.close(); + scope.inTransaction( session -> { + StrTestEntity entity = new StrTestEntity( "str1" ); + session.persist( entity ); + } ); // Post insert listener invoked three times - before/after insertion of original data, // revision entity and audit row. - Assert.assertEquals( 3, listener.getBeforeCount() ); - Assert.assertEquals( 3, listener.getAfterCount() ); + assertEquals( 3, listener.getBeforeCount() ); + assertEquals( 3, listener.getAfterCount() ); } private static class CountingPostInsertTransactionBoundaryListener implements PostInsertEventListener { diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/RelationTargetNotFoundConfigTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/RelationTargetNotFoundConfigTest.java index 5e389c4f199a..e49590058b92 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/RelationTargetNotFoundConfigTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/RelationTargetNotFoundConfigTest.java @@ -4,25 +4,26 @@ */ package org.hibernate.orm.test.envers.integration.basic; -import java.util.Map; - import jakarta.persistence.Entity; import jakarta.persistence.Id; import jakarta.persistence.ManyToOne; +import org.hibernate.Hibernate; import org.hibernate.envers.AuditReader; import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.Audited; import org.hibernate.envers.RelationTargetAuditMode; import org.hibernate.envers.configuration.EnversSettings; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.junit.Test; - +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; +import org.hibernate.testing.orm.junit.Jpa; +import org.hibernate.testing.orm.junit.Setting; +import org.junit.jupiter.api.Test; -import static org.hibernate.testing.transaction.TransactionUtil.doInJPA; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertNull; /** * Test that when the {@link EnversSettings#GLOBAL_RELATION_NOT_FOUND_LEGACY_FLAG} is {@code false} @@ -31,39 +32,37 @@ * @author Chris Cranford */ @JiraKey(value = "HHH-8051") -public class RelationTargetNotFoundConfigTest extends BaseEnversJPAFunctionalTestCase { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { Foo.class, Bar.class, FooBar.class }; - } - - @Override - protected void addConfigOptions(Map options) { - super.addConfigOptions( options ); - options.put( EnversSettings.GLOBAL_RELATION_NOT_FOUND_LEGACY_FLAG, Boolean.FALSE ); - } - - - @Test - public void testRelationTargetNotFoundAction() { +@EnversTest +@Jpa(annotatedClasses = { + RelationTargetNotFoundConfigTest.Foo.class, + RelationTargetNotFoundConfigTest.Bar.class, + RelationTargetNotFoundConfigTest.FooBar.class +}, integrationSettings = @Setting(name = EnversSettings.GLOBAL_RELATION_NOT_FOUND_LEGACY_FLAG, value = "false")) +public class RelationTargetNotFoundConfigTest { + + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Revision 1, initialize the data for test case - doInJPA( this::entityManagerFactory, entityManager -> { + scope.inTransaction( em -> { final Bar bar = new Bar( 1 ); - entityManager.persist( bar ); + em.persist( bar ); final FooBar fooBar1 = new FooBar( 1, "fooBar" ); - entityManager.persist( fooBar1 ); + em.persist( fooBar1 ); final FooBar fooBar2 = new FooBar( 2, "fooBar2" ); - entityManager.persist( fooBar2 ); + em.persist( fooBar2 ); final Foo foo = new Foo( 1, bar, fooBar1, fooBar2 ); - entityManager.persist( foo ); + em.persist( foo ); } ); + } + @Test + public void testRelationTargetNotFoundAction(EntityManagerFactoryScope scope) { // This test verifies that everything is fine before doing various record manipulation changes. - doInJPA( this::entityManagerFactory, entityManager -> { - final AuditReader auditReader = AuditReaderFactory.get(entityManager ); + scope.inEntityManager( em -> { + final AuditReader auditReader = AuditReaderFactory.get( em ); final Foo rev1 = auditReader.find( Foo.class, 1, 1 ); assertNotNull( rev1 ); assertNotNull( rev1.getBar() ); @@ -72,48 +71,48 @@ public void testRelationTargetNotFoundAction() { } ); // Simulate the removal of main data table data by removing FooBar1 (an audited entity) - doInJPA( this::entityManagerFactory, entityManager -> { + scope.inTransaction( em -> { // obviously we assume either there isn't a FK between tables or the users do something like this - entityManager.createNativeQuery( "UPDATE Foo Set fooBar_id = NULL WHERE id = 1" ).executeUpdate(); - entityManager.createNativeQuery( "DELETE FROM FooBar WHERE id = 1" ).executeUpdate(); + em.createNativeQuery( "UPDATE Foo Set fooBar_id = NULL WHERE id = 1" ).executeUpdate(); + em.createNativeQuery( "DELETE FROM FooBar WHERE id = 1" ).executeUpdate(); } ); // This shouldn't fail because the audited entity data is cached in the audit table and exists. - doInJPA( this::entityManagerFactory, entityManager -> { - final AuditReader auditReader = AuditReaderFactory.get( entityManager ); + scope.inEntityManager( em -> { + final AuditReader auditReader = AuditReaderFactory.get( em ); final Foo rev1 = auditReader.find( Foo.class, 1, 1 ); assertNotNull( rev1 ); - assertNotNull( rev1.getFooBar() ); + assertNotNull( Hibernate.unproxy( rev1.getFooBar() ) ); } ); // Simulate the removal of envers data via purge process by removing FooBar2 (an audited entity) - doInJPA( this::entityManagerFactory, entityManager -> { - entityManager.createNativeQuery( "DELETE FROM FooBar_AUD WHERE id = 2" ).executeUpdate(); + scope.inTransaction( em -> { + em.createNativeQuery( "DELETE FROM FooBar_AUD WHERE id = 2" ).executeUpdate(); } ); // Test querying history record where the reference audit row no longer exists. - doInJPA( this::entityManagerFactory, entityManager -> { - final AuditReader auditReader = AuditReaderFactory.get( entityManager ); + scope.inEntityManager( em -> { + final AuditReader auditReader = AuditReaderFactory.get( em ); final Foo rev1 = auditReader.find( Foo.class, 1, 1 ); assertNotNull( rev1 ); // With RelationTargetNotFoundAction.ERROR, this would throw an EntityNotFoundException. - assertNull( rev1.getFooBar2() ); + assertNull( Hibernate.unproxy( rev1.getFooBar2() ) ); } ); // this simulates the removal of a non-audited entity from the main table - doInJPA( this::entityManagerFactory, entityManager -> { + scope.inTransaction( em -> { // obviously we assume either there isn't a FK between tables or the users do something like this - entityManager.createNativeQuery( "UPDATE Foo SET bar_id = NULL WHERE id = 1" ).executeUpdate(); - entityManager.createNativeQuery( "DELETE FROM Bar WHERE id = 1" ).executeUpdate(); + em.createNativeQuery( "UPDATE Foo SET bar_id = NULL WHERE id = 1" ).executeUpdate(); + em.createNativeQuery( "DELETE FROM Bar WHERE id = 1" ).executeUpdate(); } ); // Test querying history record where the reference non-audited row no longer exists. - doInJPA( this::entityManagerFactory, entityManager -> { - final AuditReader auditReader = AuditReaderFactory.get( entityManager ); + scope.inEntityManager( em -> { + final AuditReader auditReader = AuditReaderFactory.get( em ); final Foo rev1 = auditReader.find( Foo.class, 1, 1 ); assertNotNull( rev1 ); // With RelationTargetNotFoundAction.ERROR, this would throw an EntityNotFoundException - assertNull( rev1.getBar() ); + assertNull( Hibernate.unproxy( rev1.getBar() ) ); } ); } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/RelationTargetNotFoundLegacyTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/RelationTargetNotFoundLegacyTest.java index e23973ff9e6f..09a8ce7476dc 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/RelationTargetNotFoundLegacyTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/RelationTargetNotFoundLegacyTest.java @@ -9,20 +9,21 @@ import jakarta.persistence.Id; import jakarta.persistence.ManyToOne; +import org.hibernate.Hibernate; import org.hibernate.envers.AuditReader; import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.Audited; import org.hibernate.envers.RelationTargetAuditMode; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.junit.Test; - +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; -import static org.hibernate.testing.junit4.ExtraAssertions.assertTyping; -import static org.hibernate.testing.transaction.TransactionUtil.doInJPA; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.fail; +import static org.junit.jupiter.api.Assertions.assertInstanceOf; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertThrows; /** * Test that when using the legacy default behavior, any {@code EntityNotFoundException} will @@ -31,32 +32,37 @@ * @author Chris Cranford */ @JiraKey(value = "HHH-8051") -public class RelationTargetNotFoundLegacyTest extends BaseEnversJPAFunctionalTestCase { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { Foo.class, Bar.class, FooBar.class }; - } - - @Test - public void testRelationTargetNotFoundAction() { +@EnversTest +@Jpa(annotatedClasses = { + RelationTargetNotFoundLegacyTest.Foo.class, + RelationTargetNotFoundLegacyTest.Bar.class, + RelationTargetNotFoundLegacyTest.FooBar.class +}) +public class RelationTargetNotFoundLegacyTest { + + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Revision 1, initialize the data for test case - doInJPA( this::entityManagerFactory, entityManager -> { + scope.inTransaction( em -> { final Bar bar = new Bar( 1 ); - entityManager.persist( bar ); + em.persist( bar ); final FooBar fooBar1 = new FooBar( 1, "fooBar" ); - entityManager.persist( fooBar1 ); + em.persist( fooBar1 ); final FooBar fooBar2 = new FooBar( 2, "fooBar2" ); - entityManager.persist( fooBar2 ); + em.persist( fooBar2 ); final Foo foo = new Foo( 1, bar, fooBar1, fooBar2 ); - entityManager.persist( foo ); + em.persist( foo ); } ); + } + @Test + public void testRelationTargetNotFoundAction(EntityManagerFactoryScope scope) { // This test verifies that everything is fine before doing various record manipulation changes. - doInJPA( this::entityManagerFactory, entityManager -> { - final AuditReader auditReader = AuditReaderFactory.get(entityManager ); + scope.inEntityManager( em -> { + final AuditReader auditReader = AuditReaderFactory.get( em ); final Foo rev1 = auditReader.find( Foo.class, 1, 1 ); assertNotNull( rev1 ); assertNotNull( rev1.getBar() ); @@ -65,60 +71,50 @@ public void testRelationTargetNotFoundAction() { } ); // Simulate the removal of main data table data by removing FooBar1 (an audited entity) - doInJPA( this::entityManagerFactory, entityManager -> { + scope.inTransaction( em -> { // obviously we assume either there isn't a FK between tables or the users do something like this - entityManager.createNativeQuery( "UPDATE Foo Set fooBar_id = NULL WHERE id = 1" ).executeUpdate(); - entityManager.createNativeQuery( "DELETE FROM FooBar WHERE id = 1" ).executeUpdate(); + em.createNativeQuery( "UPDATE Foo Set fooBar_id = NULL WHERE id = 1" ).executeUpdate(); + em.createNativeQuery( "DELETE FROM FooBar WHERE id = 1" ).executeUpdate(); } ); // This shouldn't fail because the audited entity data is cached in the audit table and exists. - doInJPA( this::entityManagerFactory, entityManager -> { - final AuditReader auditReader = AuditReaderFactory.get( entityManager ); + scope.inEntityManager( em -> { + final AuditReader auditReader = AuditReaderFactory.get( em ); final Foo rev1 = auditReader.find( Foo.class, 1, 1 ); assertNotNull( rev1 ); - assertNotNull( rev1.getFooBar() ); + assertNotNull( Hibernate.unproxy( rev1.getFooBar() ) ); } ); // Simulate the removal of envers data via purge process by removing FooBar2 (an audited entity) - doInJPA( this::entityManagerFactory, entityManager -> { - entityManager.createNativeQuery( "DELETE FROM FooBar_AUD WHERE id = 2" ).executeUpdate(); + scope.inTransaction( em -> { + em.createNativeQuery( "DELETE FROM FooBar_AUD WHERE id = 2" ).executeUpdate(); } ); // Test querying history record where the reference audit row no longer exists. - doInJPA( this::entityManagerFactory, entityManager -> { - final AuditReader auditReader = AuditReaderFactory.get( entityManager ); + scope.inEntityManager( em -> { + final AuditReader auditReader = AuditReaderFactory.get( em ); final Foo rev1 = auditReader.find( Foo.class, 1, 1 ); assertNotNull( rev1 ); - try { - // With RelationTargetNotFoundAction.ERROR, this would throw an EntityNotFoundException. - assertNull( rev1.getFooBar2() ); - fail( "This expected an EntityNotFoundException to be thrown" ); - } - catch ( Exception e ) { - assertTyping(EntityNotFoundException.class, e ); - } + // With RelationTargetNotFoundAction.ERROR, this would throw an EntityNotFoundException. + Exception exception = assertThrows( Exception.class, () -> Hibernate.unproxy( rev1.getFooBar2() ) ); + assertInstanceOf( EntityNotFoundException.class, exception ); } ); // this simulates the removal of a non-audited entity from the main table - doInJPA( this::entityManagerFactory, entityManager -> { + scope.inTransaction( em -> { // obviously we assume either there isn't a FK between tables or the users do something like this - entityManager.createNativeQuery( "UPDATE Foo SET bar_id = NULL WHERE id = 1" ).executeUpdate(); - entityManager.createNativeQuery( "DELETE FROM Bar WHERE id = 1" ).executeUpdate(); + em.createNativeQuery( "UPDATE Foo SET bar_id = NULL WHERE id = 1" ).executeUpdate(); + em.createNativeQuery( "DELETE FROM Bar WHERE id = 1" ).executeUpdate(); } ); // Test querying history record where the reference non-audited row no longer exists. - doInJPA( this::entityManagerFactory, entityManager -> { - final AuditReader auditReader = AuditReaderFactory.get( entityManager ); + scope.inEntityManager( em -> { + final AuditReader auditReader = AuditReaderFactory.get( em ); final Foo rev1 = auditReader.find( Foo.class, 1, 1 ); assertNotNull( rev1 ); - try { - // With RelationTargetNotFoundAction.ERROR, this would throw an EntityNotFoundException - assertNull( rev1.getBar() ); - fail( "This expected an EntityNotFoundException to be thrown" ); - } - catch ( Exception e ) { - assertTyping( EntityNotFoundException.class, e ); - } + // With RelationTargetNotFoundAction.ERROR, this would throw an EntityNotFoundException + Exception exception = assertThrows( Exception.class, () -> Hibernate.unproxy( rev1.getBar() ) ); + assertInstanceOf( EntityNotFoundException.class, exception ); } ); } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/RelationTargetNotFoundTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/RelationTargetNotFoundTest.java index e9c85f390fd9..77b556991565 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/RelationTargetNotFoundTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/RelationTargetNotFoundTest.java @@ -8,19 +8,21 @@ import jakarta.persistence.Id; import jakarta.persistence.ManyToOne; +import org.hibernate.Hibernate; import org.hibernate.envers.AuditReader; import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.Audited; import org.hibernate.envers.RelationTargetAuditMode; import org.hibernate.envers.RelationTargetNotFoundAction; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.junit.Test; - +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; -import static org.hibernate.testing.transaction.TransactionUtil.doInJPA; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertNull; /** * Test that when using the override behavior for {@link RelationTargetNotFoundAction#IGNORE} that @@ -29,32 +31,37 @@ * @author Chris Cranford */ @JiraKey(value = "HHH-8051") -public class RelationTargetNotFoundTest extends BaseEnversJPAFunctionalTestCase { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { Foo.class, Bar.class, FooBar.class }; - } - - @Test - public void testRelationTargetNotFoundAction() { +@EnversTest +@Jpa(annotatedClasses = { + RelationTargetNotFoundTest.Foo.class, + RelationTargetNotFoundTest.Bar.class, + RelationTargetNotFoundTest.FooBar.class +}) +public class RelationTargetNotFoundTest { + + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Revision 1, initialize the data for test case - doInJPA( this::entityManagerFactory, entityManager -> { + scope.inTransaction( em -> { final Bar bar = new Bar( 1 ); - entityManager.persist( bar ); + em.persist( bar ); final FooBar fooBar1 = new FooBar( 1, "fooBar" ); - entityManager.persist( fooBar1 ); + em.persist( fooBar1 ); final FooBar fooBar2 = new FooBar( 2, "fooBar2" ); - entityManager.persist( fooBar2 ); + em.persist( fooBar2 ); final Foo foo = new Foo( 1, bar, fooBar1, fooBar2 ); - entityManager.persist( foo ); + em.persist( foo ); } ); + } + @Test + public void testRelationTargetNotFoundAction(EntityManagerFactoryScope scope) { // This test verifies that everything is fine before doing various record manipulation changes. - doInJPA( this::entityManagerFactory, entityManager -> { - final AuditReader auditReader = AuditReaderFactory.get(entityManager ); + scope.inEntityManager( em -> { + final AuditReader auditReader = AuditReaderFactory.get( em ); final Foo rev1 = auditReader.find( Foo.class, 1, 1 ); assertNotNull( rev1 ); assertNotNull( rev1.getBar() ); @@ -63,48 +70,48 @@ public void testRelationTargetNotFoundAction() { } ); // Simulate the removal of main data table data by removing FooBar1 (an audited entity) - doInJPA( this::entityManagerFactory, entityManager -> { + scope.inTransaction( em -> { // obviously we assume either there isn't a FK between tables or the users do something like this - entityManager.createNativeQuery( "UPDATE Foo Set fooBar_id = NULL WHERE id = 1" ).executeUpdate(); - entityManager.createNativeQuery( "DELETE FROM FooBar WHERE id = 1" ).executeUpdate(); + em.createNativeQuery( "UPDATE Foo Set fooBar_id = NULL WHERE id = 1" ).executeUpdate(); + em.createNativeQuery( "DELETE FROM FooBar WHERE id = 1" ).executeUpdate(); } ); // This shouldn't fail because the audited entity data is cached in the audit table and exists. - doInJPA( this::entityManagerFactory, entityManager -> { - final AuditReader auditReader = AuditReaderFactory.get( entityManager ); + scope.inEntityManager( em -> { + final AuditReader auditReader = AuditReaderFactory.get( em ); final Foo rev1 = auditReader.find( Foo.class, 1, 1 ); assertNotNull( rev1 ); - assertNotNull( rev1.getFooBar() ); + assertNotNull( Hibernate.unproxy( rev1.getFooBar() ) ); } ); // Simulate the removal of envers data via purge process by removing FooBar2 (an audited entity) - doInJPA( this::entityManagerFactory, entityManager -> { - entityManager.createNativeQuery( "DELETE FROM FooBar_AUD WHERE id = 2" ).executeUpdate(); + scope.inTransaction( em -> { + em.createNativeQuery( "DELETE FROM FooBar_AUD WHERE id = 2" ).executeUpdate(); } ); // Test querying history record where the reference audit row no longer exists. - doInJPA( this::entityManagerFactory, entityManager -> { - final AuditReader auditReader = AuditReaderFactory.get( entityManager ); + scope.inEntityManager( em -> { + final AuditReader auditReader = AuditReaderFactory.get( em ); final Foo rev1 = auditReader.find( Foo.class, 1, 1 ); assertNotNull( rev1 ); // With RelationTargetNotFoundAction.ERROR, this would throw an EntityNotFoundException. - assertNull( rev1.getFooBar2() ); + assertNull( Hibernate.unproxy( rev1.getFooBar2() ) ); } ); // this simulates the removal of a non-audited entity from the main table - doInJPA( this::entityManagerFactory, entityManager -> { + scope.inTransaction( em -> { // obviously we assume either there isn't a FK between tables or the users do something like this - entityManager.createNativeQuery( "UPDATE Foo SET bar_id = NULL WHERE id = 1" ).executeUpdate(); - entityManager.createNativeQuery( "DELETE FROM Bar WHERE id = 1" ).executeUpdate(); + em.createNativeQuery( "UPDATE Foo SET bar_id = NULL WHERE id = 1" ).executeUpdate(); + em.createNativeQuery( "DELETE FROM Bar WHERE id = 1" ).executeUpdate(); } ); // Test querying history record where the reference non-audited row no longer exists. - doInJPA( this::entityManagerFactory, entityManager -> { - final AuditReader auditReader = AuditReaderFactory.get( entityManager ); + scope.inEntityManager( em -> { + final AuditReader auditReader = AuditReaderFactory.get( em ); final Foo rev1 = auditReader.find( Foo.class, 1, 1 ); assertNotNull( rev1 ); // With RelationTargetNotFoundAction.ERROR, this would throw an EntityNotFoundException - assertNull( rev1.getBar() ); + assertNull( Hibernate.unproxy( rev1.getBar() ) ); } ); } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/Simple.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/Simple.java index 0b192e9a7331..e9c2ba965e5f 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/Simple.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/Simple.java @@ -5,53 +5,58 @@ package org.hibernate.orm.test.envers.integration.basic; import java.util.Arrays; -import jakarta.persistence.EntityManager; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.orm.test.envers.entities.IntTestEntity; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; -import org.junit.Assert; -import org.junit.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Adam Warski (adam at warski dot org) */ -public class Simple extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {IntTestEntity.class}) +public class Simple { private Integer id1; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {IntTestEntity.class}; + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + scope.inTransaction( em -> { + IntTestEntity ite = new IntTestEntity( 10 ); + em.persist( ite ); + id1 = ite.getId(); + } ); + + scope.inTransaction( em -> { + IntTestEntity ite = em.find( IntTestEntity.class, id1 ); + ite.setNumber( 20 ); + } ); } @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - IntTestEntity ite = new IntTestEntity( 10 ); - em.persist( ite ); - id1 = ite.getId(); - em.getTransaction().commit(); - - em.getTransaction().begin(); - ite = em.find( IntTestEntity.class, id1 ); - ite.setNumber( 20 ); - em.getTransaction().commit(); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + assertEquals( + Arrays.asList( 1, 2 ), + AuditReaderFactory.get( em ).getRevisions( IntTestEntity.class, id1 ) + ); + } ); } @Test - public void testRevisionsCounts() { - Assert.assertEquals( Arrays.asList( 1, 2 ), getAuditReader().getRevisions( IntTestEntity.class, id1 ) ); - } - - @Test - public void testHistoryOfId1() { + public void testHistoryOfId1(EntityManagerFactoryScope scope) { IntTestEntity ver1 = new IntTestEntity( 10, id1 ); IntTestEntity ver2 = new IntTestEntity( 20, id1 ); - Assert.assertEquals( ver1, getAuditReader().find( IntTestEntity.class, id1, 1 ) ); - Assert.assertEquals( ver2, getAuditReader().find( IntTestEntity.class, id1, 2 ) ); + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( ver1, auditReader.find( IntTestEntity.class, id1, 1 ) ); + assertEquals( ver2, auditReader.find( IntTestEntity.class, id1, 2 ) ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/SingleOperationInTransaction.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/SingleOperationInTransaction.java index 036b2f4b3d60..a2137915702c 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/SingleOperationInTransaction.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/SingleOperationInTransaction.java @@ -5,138 +5,164 @@ package org.hibernate.orm.test.envers.integration.basic; import java.util.Arrays; -import jakarta.persistence.EntityManager; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.exception.RevisionDoesNotExistException; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; -import org.junit.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertTrue; /** * @author Adam Warski (adam at warski dot org) */ -public class SingleOperationInTransaction extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {BasicTestEntity1.class}) +public class SingleOperationInTransaction { private Integer id1; private Integer id2; private Integer id3; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {BasicTestEntity1.class}; + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + id1 = addNewEntity( scope, "x", 1 ); // rev 1 + id2 = addNewEntity( scope, "y", 20 ); // rev 2 + id3 = addNewEntity( scope, "z", 30 ); // rev 3 + + modifyEntity( scope, id1, "x2", 2 ); // rev 4 + modifyEntity( scope, id2, "y2", 20 ); // rev 5 + modifyEntity( scope, id1, "x3", 3 ); // rev 6 + modifyEntity( scope, id1, "x3", 3 ); // no rev + modifyEntity( scope, id2, "y3", 21 ); // rev 7 } - private Integer addNewEntity(String str, long lng) { - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - BasicTestEntity1 bte1 = new BasicTestEntity1( str, lng ); - em.persist( bte1 ); - em.getTransaction().commit(); - - return bte1.getId(); + private Integer addNewEntity(EntityManagerFactoryScope scope, String str, long lng) { + final Integer[] id = new Integer[1]; + scope.inTransaction( em -> { + BasicTestEntity1 bte1 = new BasicTestEntity1( str, lng ); + em.persist( bte1 ); + id[0] = bte1.getId(); + } ); + return id[0]; } - private void modifyEntity(Integer id, String str, long lng) { - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - BasicTestEntity1 bte1 = em.find( BasicTestEntity1.class, id ); - bte1.setLong1( lng ); - bte1.setStr1( str ); - em.getTransaction().commit(); + private void modifyEntity(EntityManagerFactoryScope scope, Integer id, String str, long lng) { + scope.inTransaction( em -> { + BasicTestEntity1 bte1 = em.find( BasicTestEntity1.class, id ); + bte1.setLong1( lng ); + bte1.setStr1( str ); + } ); } @Test - @Priority(10) - public void initData() { - id1 = addNewEntity( "x", 1 ); // rev 1 - id2 = addNewEntity( "y", 20 ); // rev 2 - id3 = addNewEntity( "z", 30 ); // rev 3 - - modifyEntity( id1, "x2", 2 ); // rev 4 - modifyEntity( id2, "y2", 20 ); // rev 5 - modifyEntity( id1, "x3", 3 ); // rev 6 - modifyEntity( id1, "x3", 3 ); // no rev - modifyEntity( id2, "y3", 21 ); // rev 7 + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1, 4, 6 ), auditReader.getRevisions( BasicTestEntity1.class, id1 ) ); + assertEquals( Arrays.asList( 2, 5, 7 ), auditReader.getRevisions( BasicTestEntity1.class, id2 ) ); + assertEquals( Arrays.asList( 3 ), auditReader.getRevisions( BasicTestEntity1.class, id3 ) ); + } ); } @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 4, 6 ).equals( getAuditReader().getRevisions( BasicTestEntity1.class, id1 ) ); - - assert Arrays.asList( 2, 5, 7 ).equals( getAuditReader().getRevisions( BasicTestEntity1.class, id2 ) ); - - assert Arrays.asList( 3 ).equals( getAuditReader().getRevisions( BasicTestEntity1.class, id3 ) ); + public void testRevisionsDates(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + for ( int i = 1; i < 7; i++ ) { + assertTrue( auditReader.getRevisionDate( i ).getTime() <= + auditReader.getRevisionDate( i + 1 ).getTime() ); + } + } ); } @Test - public void testRevisionsDates() { - for ( int i = 1; i < 7; i++ ) { - assert getAuditReader().getRevisionDate( i ).getTime() <= - getAuditReader().getRevisionDate( i + 1 ).getTime(); - } + public void testNotExistingRevision(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertThrows( RevisionDoesNotExistException.class, () -> auditReader.getRevisionDate( 8 ) ); + } ); } - @Test(expected = RevisionDoesNotExistException.class) - public void testNotExistingRevision() { - getAuditReader().getRevisionDate( 8 ); - } - - @Test(expected = IllegalArgumentException.class) - public void testIllegalRevision() { - getAuditReader().getRevisionDate( 0 ); + @Test + public void testIllegalRevision(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertThrows( IllegalArgumentException.class, () -> auditReader.getRevisionDate( 0 ) ); + } ); } @Test - public void testHistoryOfId1() { + public void testHistoryOfId1(EntityManagerFactoryScope scope) { BasicTestEntity1 ver1 = new BasicTestEntity1( id1, "x", 1 ); BasicTestEntity1 ver2 = new BasicTestEntity1( id1, "x2", 2 ); BasicTestEntity1 ver3 = new BasicTestEntity1( id1, "x3", 3 ); - assert getAuditReader().find( BasicTestEntity1.class, id1, 1 ).equals( ver1 ); - assert getAuditReader().find( BasicTestEntity1.class, id1, 2 ).equals( ver1 ); - assert getAuditReader().find( BasicTestEntity1.class, id1, 3 ).equals( ver1 ); - assert getAuditReader().find( BasicTestEntity1.class, id1, 4 ).equals( ver2 ); - assert getAuditReader().find( BasicTestEntity1.class, id1, 5 ).equals( ver2 ); - assert getAuditReader().find( BasicTestEntity1.class, id1, 6 ).equals( ver3 ); - assert getAuditReader().find( BasicTestEntity1.class, id1, 7 ).equals( ver3 ); + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( ver1, auditReader.find( BasicTestEntity1.class, id1, 1 ) ); + assertEquals( ver1, auditReader.find( BasicTestEntity1.class, id1, 2 ) ); + assertEquals( ver1, auditReader.find( BasicTestEntity1.class, id1, 3 ) ); + assertEquals( ver2, auditReader.find( BasicTestEntity1.class, id1, 4 ) ); + assertEquals( ver2, auditReader.find( BasicTestEntity1.class, id1, 5 ) ); + assertEquals( ver3, auditReader.find( BasicTestEntity1.class, id1, 6 ) ); + assertEquals( ver3, auditReader.find( BasicTestEntity1.class, id1, 7 ) ); + } ); } @Test - public void testHistoryOfId2() { + public void testHistoryOfId2(EntityManagerFactoryScope scope) { BasicTestEntity1 ver1 = new BasicTestEntity1( id2, "y", 20 ); BasicTestEntity1 ver2 = new BasicTestEntity1( id2, "y2", 20 ); BasicTestEntity1 ver3 = new BasicTestEntity1( id2, "y3", 21 ); - assert getAuditReader().find( BasicTestEntity1.class, id2, 1 ) == null; - assert getAuditReader().find( BasicTestEntity1.class, id2, 2 ).equals( ver1 ); - assert getAuditReader().find( BasicTestEntity1.class, id2, 3 ).equals( ver1 ); - assert getAuditReader().find( BasicTestEntity1.class, id2, 4 ).equals( ver1 ); - assert getAuditReader().find( BasicTestEntity1.class, id2, 5 ).equals( ver2 ); - assert getAuditReader().find( BasicTestEntity1.class, id2, 6 ).equals( ver2 ); - assert getAuditReader().find( BasicTestEntity1.class, id2, 7 ).equals( ver3 ); + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertNull( auditReader.find( BasicTestEntity1.class, id2, 1 ) ); + assertEquals( ver1, auditReader.find( BasicTestEntity1.class, id2, 2 ) ); + assertEquals( ver1, auditReader.find( BasicTestEntity1.class, id2, 3 ) ); + assertEquals( ver1, auditReader.find( BasicTestEntity1.class, id2, 4 ) ); + assertEquals( ver2, auditReader.find( BasicTestEntity1.class, id2, 5 ) ); + assertEquals( ver2, auditReader.find( BasicTestEntity1.class, id2, 6 ) ); + assertEquals( ver3, auditReader.find( BasicTestEntity1.class, id2, 7 ) ); + } ); } @Test - public void testHistoryOfId3() { + public void testHistoryOfId3(EntityManagerFactoryScope scope) { BasicTestEntity1 ver1 = new BasicTestEntity1( id3, "z", 30 ); - assert getAuditReader().find( BasicTestEntity1.class, id3, 1 ) == null; - assert getAuditReader().find( BasicTestEntity1.class, id3, 2 ) == null; - assert getAuditReader().find( BasicTestEntity1.class, id3, 3 ).equals( ver1 ); - assert getAuditReader().find( BasicTestEntity1.class, id3, 4 ).equals( ver1 ); - assert getAuditReader().find( BasicTestEntity1.class, id3, 5 ).equals( ver1 ); - assert getAuditReader().find( BasicTestEntity1.class, id3, 6 ).equals( ver1 ); - assert getAuditReader().find( BasicTestEntity1.class, id3, 7 ).equals( ver1 ); + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertNull( auditReader.find( BasicTestEntity1.class, id3, 1 ) ); + assertNull( auditReader.find( BasicTestEntity1.class, id3, 2 ) ); + assertEquals( ver1, auditReader.find( BasicTestEntity1.class, id3, 3 ) ); + assertEquals( ver1, auditReader.find( BasicTestEntity1.class, id3, 4 ) ); + assertEquals( ver1, auditReader.find( BasicTestEntity1.class, id3, 5 ) ); + assertEquals( ver1, auditReader.find( BasicTestEntity1.class, id3, 6 ) ); + assertEquals( ver1, auditReader.find( BasicTestEntity1.class, id3, 7 ) ); + } ); } @Test - public void testHistoryOfNotExistingEntity() { - assert getAuditReader().find( BasicTestEntity1.class, id1 + id2 + id3, 1 ) == null; - assert getAuditReader().find( BasicTestEntity1.class, id1 + id2 + id3, 7 ) == null; + public void testHistoryOfNotExistingEntity(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertNull( auditReader.find( BasicTestEntity1.class, id1 + id2 + id3, 1 ) ); + assertNull( auditReader.find( BasicTestEntity1.class, id1 + id2 + id3, 7 ) ); + } ); } @Test - public void testRevisionsOfNotExistingEntity() { - assert getAuditReader().getRevisions( BasicTestEntity1.class, id1 + id2 + id3 ).size() == 0; + public void testRevisionsOfNotExistingEntity(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( 0, auditReader.getRevisions( BasicTestEntity1.class, id1 + id2 + id3 ).size() ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/TransactionRollbackBehaviour.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/TransactionRollbackBehaviour.java index a8a313349516..5a7af86c3c76 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/TransactionRollbackBehaviour.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/TransactionRollbackBehaviour.java @@ -5,81 +5,85 @@ package org.hibernate.orm.test.envers.integration.basic; import java.util.List; -import jakarta.persistence.EntityManager; import org.hibernate.Session; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.orm.test.envers.entities.IntTestEntity; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; + +import jakarta.persistence.EntityManager; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Tomasz Dziurko (tdziurko at gmail dot com) */ -public class TransactionRollbackBehaviour extends BaseEnversJPAFunctionalTestCase { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {IntTestEntity.class}; - } +@EnversTest +@Jpa(annotatedClasses = {IntTestEntity.class}) +public class TransactionRollbackBehaviour { @Test - public void testAuditRecordsRollbackWithAutoClear() { - testAuditRecordsRollbackBehavior( false, true ); + public void testAuditRecordsRollbackWithAutoClear(EntityManagerFactoryScope scope) { + testAuditRecordsRollbackBehavior( scope, false, true ); } @Test - public void testAuditRecordsRollbackWithNoAutoClear() { - testAuditRecordsRollbackBehavior( false, false ); + public void testAuditRecordsRollbackWithNoAutoClear(EntityManagerFactoryScope scope) { + testAuditRecordsRollbackBehavior( scope, false, false ); } @Test @JiraKey(value = "HHH-8189") - public void testFlushedAuditRecordsRollback() { + public void testFlushedAuditRecordsRollback(EntityManagerFactoryScope scope) { // default auto-clear behavior - testAuditRecordsRollbackBehavior( true, null ); + testAuditRecordsRollbackBehavior( scope, true, null ); } - private void testAuditRecordsRollbackBehavior(boolean flush, Boolean autoClear) { - EntityManager entityManager = getEntityManager(); + private void testAuditRecordsRollbackBehavior(EntityManagerFactoryScope scope, boolean flush, Boolean autoClear) { + EntityManager entityManager = scope.getEntityManagerFactory().createEntityManager(); try { if ( autoClear != null ) { entityManager = entityManager.unwrap( Session.class ) .sessionWithOptions().autoClear( autoClear ).openSession(); } + final EntityManager em = entityManager; + // persist and rollback - entityManager.getTransaction().begin(); + em.getTransaction().begin(); IntTestEntity rollbackEntity = new IntTestEntity( 30 ); - entityManager.persist( rollbackEntity ); + em.persist( rollbackEntity ); if ( flush ) { - entityManager.flush(); + em.flush(); } Integer rollbackId = rollbackEntity.getId(); - entityManager.getTransaction().rollback(); + em.getTransaction().rollback(); // persist and commit - entityManager.getTransaction().begin(); + em.getTransaction().begin(); IntTestEntity commitEntity = new IntTestEntity( 50 ); - entityManager.persist( commitEntity ); + em.persist( commitEntity ); if ( flush ) { - entityManager.flush(); + em.flush(); } Integer commitId = commitEntity.getId(); - entityManager.getTransaction().commit(); + em.getTransaction().commit(); - List revisionsForSavedClass = getAuditReader().getRevisions( + List revisionsForSavedClass = AuditReaderFactory.get( em ).getRevisions( IntTestEntity.class, commitId ); - assertEquals( "There should be one revision for inserted entity.", 1, revisionsForSavedClass.size() ); + assertEquals( 1, revisionsForSavedClass.size(), "There should be one revision for inserted entity." ); - List revisionsForRolledbackClass = getAuditReader().getRevisions( + List revisionsForRolledbackClass = AuditReaderFactory.get( em ).getRevisions( IntTestEntity.class, rollbackId ); - assertEquals( "There should be no revision for rolled back entity.", 0, revisionsForRolledbackClass.size() ); + assertEquals( 0, revisionsForRolledbackClass.size(), "There should be no revision for rolled back entity." ); } finally { entityManager.close(); diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/UnversionedPropertiesChange.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/UnversionedPropertiesChange.java index 07026c0b85cf..609b2e4898d5 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/UnversionedPropertiesChange.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/UnversionedPropertiesChange.java @@ -5,63 +5,65 @@ package org.hibernate.orm.test.envers.integration.basic; import java.util.Arrays; -import jakarta.persistence.EntityManager; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; -import org.junit.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Adam Warski (adam at warski dot org) */ -public class UnversionedPropertiesChange extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {BasicTestEntity2.class}) +public class UnversionedPropertiesChange { private Integer id1; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {BasicTestEntity2.class}; + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + id1 = addNewEntity( scope, "x", "a" ); // rev 1 + modifyEntity( scope, id1, "x", "a" ); // no rev + modifyEntity( scope, id1, "y", "b" ); // rev 2 + modifyEntity( scope, id1, "y", "c" ); // no rev } - private Integer addNewEntity(String str1, String str2) { - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - BasicTestEntity2 bte2 = new BasicTestEntity2( str1, str2 ); - em.persist( bte2 ); - em.getTransaction().commit(); - - return bte2.getId(); - } - - private void modifyEntity(Integer id, String str1, String str2) { - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - BasicTestEntity2 bte2 = em.find( BasicTestEntity2.class, id ); - bte2.setStr1( str1 ); - bte2.setStr2( str2 ); - em.getTransaction().commit(); + private Integer addNewEntity(EntityManagerFactoryScope scope, String str1, String str2) { + return scope.fromTransaction( em -> { + BasicTestEntity2 bte2 = new BasicTestEntity2( str1, str2 ); + em.persist( bte2 ); + return bte2.getId(); + } ); } - @Test - @Priority(10) - public void initData() { - id1 = addNewEntity( "x", "a" ); // rev 1 - modifyEntity( id1, "x", "a" ); // no rev - modifyEntity( id1, "y", "b" ); // rev 2 - modifyEntity( id1, "y", "c" ); // no rev + private void modifyEntity(EntityManagerFactoryScope scope, Integer id, String str1, String str2) { + scope.inTransaction( em -> { + BasicTestEntity2 bte2 = em.find( BasicTestEntity2.class, id ); + bte2.setStr1( str1 ); + bte2.setStr2( str2 ); + } ); } @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( BasicTestEntity2.class, id1 ) ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + assertEquals( Arrays.asList( 1, 2 ), + AuditReaderFactory.get( em ).getRevisions( BasicTestEntity2.class, id1 ) ); + } ); } @Test - public void testHistoryOfId1() { - BasicTestEntity2 ver1 = new BasicTestEntity2( id1, "x", null ); - BasicTestEntity2 ver2 = new BasicTestEntity2( id1, "y", null ); + public void testHistoryOfId1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + BasicTestEntity2 ver1 = new BasicTestEntity2( id1, "x", null ); + BasicTestEntity2 ver2 = new BasicTestEntity2( id1, "y", null ); - assert getAuditReader().find( BasicTestEntity2.class, id1, 1 ).equals( ver1 ); - assert getAuditReader().find( BasicTestEntity2.class, id1, 2 ).equals( ver2 ); + assertEquals( ver1, auditReader.find( BasicTestEntity2.class, id1, 1 ) ); + assertEquals( ver2, auditReader.find( BasicTestEntity2.class, id1, 2 ) ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/UnversionedProperty.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/UnversionedProperty.java index 48c4cc599d3e..8ce8af2446f1 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/UnversionedProperty.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/basic/UnversionedProperty.java @@ -5,56 +5,59 @@ package org.hibernate.orm.test.envers.integration.basic; import java.util.Arrays; -import jakarta.persistence.EntityManager; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.orm.test.envers.entities.UnversionedEntity; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; -import org.junit.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Adam Warski (adam at warski dot org) */ -public class UnversionedProperty extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {UnversionedEntity.class}) +public class UnversionedProperty { private Integer id1; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {UnversionedEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Rev 1 - em.getTransaction().begin(); - UnversionedEntity ue1 = new UnversionedEntity( "a1", "b1" ); - em.persist( ue1 ); - id1 = ue1.getId(); - em.getTransaction().commit(); + scope.inTransaction( em -> { + UnversionedEntity ue1 = new UnversionedEntity( "a1", "b1" ); + em.persist( ue1 ); + id1 = ue1.getId(); + } ); // Rev 2 - em.getTransaction().begin(); - ue1 = em.find( UnversionedEntity.class, id1 ); - ue1.setData1( "a2" ); - ue1.setData2( "b2" ); - em.getTransaction().commit(); + scope.inTransaction( em -> { + UnversionedEntity ue1 = em.find( UnversionedEntity.class, id1 ); + ue1.setData1( "a2" ); + ue1.setData2( "b2" ); + } ); } @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( UnversionedEntity.class, id1 ) ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + assertEquals( Arrays.asList( 1, 2 ), + AuditReaderFactory.get( em ).getRevisions( UnversionedEntity.class, id1 ) ); + } ); } @Test - public void testHistoryOfId1() { - UnversionedEntity rev1 = new UnversionedEntity( id1, "a1", null ); - UnversionedEntity rev2 = new UnversionedEntity( id1, "a2", null ); - - assert getAuditReader().find( UnversionedEntity.class, id1, 1 ).equals( rev1 ); - assert getAuditReader().find( UnversionedEntity.class, id1, 2 ).equals( rev2 ); + public void testHistoryOfId1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + UnversionedEntity rev1 = new UnversionedEntity( id1, "a1", null ); + UnversionedEntity rev2 = new UnversionedEntity( id1, "a2", null ); + + assertEquals( rev1, auditReader.find( UnversionedEntity.class, id1, 1 ) ); + assertEquals( rev2, auditReader.find( UnversionedEntity.class, id1, 2 ) ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/blob/BasicBlobTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/blob/BasicBlobTest.java index 02baf048950e..4cb26a405e74 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/blob/BasicBlobTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/blob/BasicBlobTest.java @@ -7,16 +7,17 @@ import jakarta.persistence.Entity; import jakarta.persistence.GeneratedValue; import jakarta.persistence.Id; -import org.hamcrest.Matchers; import org.hibernate.community.dialect.InformixDialect; import org.hibernate.dialect.PostgreSQLDialect; import org.hibernate.dialect.SQLServerDialect; import org.hibernate.engine.jdbc.proxy.BlobProxy; import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.testing.SkipForDialect; -import org.junit.Test; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; +import org.hibernate.testing.orm.junit.SkipForDialect; +import org.hibernate.testing.envers.junit.EnversTest; +import org.junit.jupiter.api.Test; import java.io.BufferedInputStream; import java.io.InputStream; @@ -26,30 +27,26 @@ import java.sql.Blob; import static org.hamcrest.MatcherAssert.assertThat; -import static org.hibernate.testing.transaction.TransactionUtil.doInJPA; -import static org.junit.Assert.fail; +import static org.hamcrest.Matchers.is; +import static org.junit.jupiter.api.Assertions.fail; /** * @author Chris Cranford */ -public class BasicBlobTest extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {BasicBlobTest.Asset.class}) +public class BasicBlobTest { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {Asset.class}; - } - - @Test - @Priority(10) - public void testGenerateProxyNoStream() throws URISyntaxException { + @BeforeClassTemplate + public void testGenerateProxyNoStream(EntityManagerFactoryScope scope) throws URISyntaxException { final Path path = Path.of( Thread.currentThread().getContextClassLoader() .getResource( "org/hibernate/orm/test/envers/integration/blob/blob.txt" ).toURI() ); - doInJPA( this::entityManagerFactory, entityManager -> { + scope.inTransaction( entityManager -> { final Asset asset = new Asset(); asset.setFileName( "blob.txt" ); try (final InputStream stream = new BufferedInputStream( Files.newInputStream( path ) )) { - assertThat( stream.markSupported(), Matchers.is( true ) ); + assertThat( stream.markSupported(), is( true ) ); // We use the method readAllBytes instead of passing the raw stream to the proxy // since this is the only guaranteed way that will work across all dialects in a @@ -74,27 +71,25 @@ public void testGenerateProxyNoStream() throws URISyntaxException { fail( "Failed to persist the entity" ); } } ); - } @Test - @Priority(10) - @SkipForDialect(value = PostgreSQLDialect.class, - comment = "The driver closes the stream, so it cannot be reused by envers") - @SkipForDialect(value = SQLServerDialect.class, - comment = "The driver closes the stream, so it cannot be reused by envers") - @SkipForDialect(value = InformixDialect.class) - public void testGenerateProxyStream() throws URISyntaxException { + @SkipForDialect(dialectClass = PostgreSQLDialect.class, matchSubTypes = true, + reason = "The driver closes the stream, so it cannot be reused by envers") + @SkipForDialect(dialectClass = SQLServerDialect.class, matchSubTypes = true, + reason = "The driver closes the stream, so it cannot be reused by envers") + @SkipForDialect(dialectClass = InformixDialect.class, matchSubTypes = true) + public void testGenerateProxyStream(EntityManagerFactoryScope scope) throws URISyntaxException { final Path path = Path.of( Thread.currentThread().getContextClassLoader() .getResource( "org/hibernate/orm/test/envers/integration/blob/blob.txt" ).toURI() ); try (final InputStream stream = new BufferedInputStream( Files.newInputStream( path ) )) { final long length = Files.size( path ); - doInJPA( this::entityManagerFactory, entityManager -> { + scope.inTransaction( entityManager -> { final Asset asset = new Asset(); asset.setFileName( "blob.txt" ); - assertThat( stream.markSupported(), Matchers.is( true ) ); + assertThat( stream.markSupported(), is( true ) ); // We use the method readAllBytes instead of passing the raw stream to the proxy // since this is the only guaranteed way that will work across all dialects in a @@ -154,5 +149,4 @@ public void setData(Blob data) { this.data = data; } } - } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/cache/OneToManyCache.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/cache/OneToManyCache.java index ced095f3d405..a6b65878b0a3 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/cache/OneToManyCache.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/cache/OneToManyCache.java @@ -4,36 +4,33 @@ */ package org.hibernate.orm.test.envers.integration.cache; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.orm.test.envers.entities.onetomany.SetRefEdEntity; import org.hibernate.orm.test.envers.entities.onetomany.SetRefIngEntity; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; -import org.junit.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertSame; /** * @author Adam Warski (adam at warski dot org) */ @SuppressWarnings({"ObjectEquality"}) -public class OneToManyCache extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {SetRefEdEntity.class, SetRefIngEntity.class}) +public class OneToManyCache { private Integer ed1_id; private Integer ed2_id; private Integer ing1_id; private Integer ing2_id; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {SetRefEdEntity.class, SetRefIngEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { SetRefEdEntity ed1 = new SetRefEdEntity( 1, "data_ed_1" ); SetRefEdEntity ed2 = new SetRefEdEntity( 2, "data_ed_2" ); @@ -41,30 +38,26 @@ public void initData() { SetRefIngEntity ing2 = new SetRefIngEntity( 2, "data_ing_2" ); // Revision 1 - em.getTransaction().begin(); - - em.persist( ed1 ); - em.persist( ed2 ); + scope.inTransaction( em -> { + em.persist( ed1 ); + em.persist( ed2 ); - ing1.setReference( ed1 ); - ing2.setReference( ed1 ); + ing1.setReference( ed1 ); + ing2.setReference( ed1 ); - em.persist( ing1 ); - em.persist( ing2 ); - - em.getTransaction().commit(); + em.persist( ing1 ); + em.persist( ing2 ); + } ); // Revision 2 - em.getTransaction().begin(); - - ing1 = em.find( SetRefIngEntity.class, ing1.getId() ); - ing2 = em.find( SetRefIngEntity.class, ing2.getId() ); - ed2 = em.find( SetRefEdEntity.class, ed2.getId() ); - - ing1.setReference( ed2 ); - ing2.setReference( ed2 ); + scope.inTransaction( em -> { + SetRefIngEntity ing1Ref = em.find( SetRefIngEntity.class, ing1.getId() ); + SetRefIngEntity ing2Ref = em.find( SetRefIngEntity.class, ing2.getId() ); + SetRefEdEntity ed2Ref = em.find( SetRefEdEntity.class, ed2.getId() ); - em.getTransaction().commit(); + ing1Ref.setReference( ed2Ref ); + ing2Ref.setReference( ed2Ref ); + } ); // @@ -76,50 +69,62 @@ public void initData() { } @Test - public void testCacheReferenceAccessAfterFind() { - SetRefEdEntity ed1_rev1 = getAuditReader().find( SetRefEdEntity.class, ed1_id, 1 ); - - SetRefIngEntity ing1_rev1 = getAuditReader().find( SetRefIngEntity.class, ing1_id, 1 ); - SetRefIngEntity ing2_rev1 = getAuditReader().find( SetRefIngEntity.class, ing2_id, 1 ); - - // It should be exactly the same object - assert ing1_rev1.getReference() == ed1_rev1; - assert ing2_rev1.getReference() == ed1_rev1; + public void testCacheReferenceAccessAfterFind(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + SetRefEdEntity ed1_rev1 = auditReader.find( SetRefEdEntity.class, ed1_id, 1 ); + + SetRefIngEntity ing1_rev1 = auditReader.find( SetRefIngEntity.class, ing1_id, 1 ); + SetRefIngEntity ing2_rev1 = auditReader.find( SetRefIngEntity.class, ing2_id, 1 ); + + // It should be exactly the same object + assertSame( ed1_rev1, ing1_rev1.getReference() ); + assertSame( ed1_rev1, ing2_rev1.getReference() ); + } ); } @Test - public void testCacheReferenceAccessAfterCollectionAccessRev1() { - SetRefEdEntity ed1_rev1 = getAuditReader().find( SetRefEdEntity.class, ed1_id, 1 ); - - // It should be exactly the same object - assert ed1_rev1.getReffering().size() == 2; - for ( SetRefIngEntity setRefIngEntity : ed1_rev1.getReffering() ) { - assert setRefIngEntity.getReference() == ed1_rev1; - } + public void testCacheReferenceAccessAfterCollectionAccessRev1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + SetRefEdEntity ed1_rev1 = auditReader.find( SetRefEdEntity.class, ed1_id, 1 ); + + // It should be exactly the same object + assertEquals( 2, ed1_rev1.getReffering().size() ); + for ( SetRefIngEntity setRefIngEntity : ed1_rev1.getReffering() ) { + assertSame( ed1_rev1, setRefIngEntity.getReference() ); + } + } ); } @Test - public void testCacheReferenceAccessAfterCollectionAccessRev2() { - SetRefEdEntity ed2_rev2 = getAuditReader().find( SetRefEdEntity.class, ed2_id, 2 ); - - assert ed2_rev2.getReffering().size() == 2; - for ( SetRefIngEntity setRefIngEntity : ed2_rev2.getReffering() ) { - assert setRefIngEntity.getReference() == ed2_rev2; - } + public void testCacheReferenceAccessAfterCollectionAccessRev2(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + SetRefEdEntity ed2_rev2 = auditReader.find( SetRefEdEntity.class, ed2_id, 2 ); + + assertEquals( 2, ed2_rev2.getReffering().size() ); + for ( SetRefIngEntity setRefIngEntity : ed2_rev2.getReffering() ) { + assertSame( ed2_rev2, setRefIngEntity.getReference() ); + } + } ); } @Test - public void testCacheFindAfterCollectionAccessRev1() { - SetRefEdEntity ed1_rev1 = getAuditReader().find( SetRefEdEntity.class, ed1_id, 1 ); + public void testCacheFindAfterCollectionAccessRev1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + SetRefEdEntity ed1_rev1 = auditReader.find( SetRefEdEntity.class, ed1_id, 1 ); - // Reading the collection - assert ed1_rev1.getReffering().size() == 2; + // Reading the collection + assertEquals( 2, ed1_rev1.getReffering().size() ); - SetRefIngEntity ing1_rev1 = getAuditReader().find( SetRefIngEntity.class, ing1_id, 1 ); - SetRefIngEntity ing2_rev1 = getAuditReader().find( SetRefIngEntity.class, ing2_id, 1 ); + SetRefIngEntity ing1_rev1 = auditReader.find( SetRefIngEntity.class, ing1_id, 1 ); + SetRefIngEntity ing2_rev1 = auditReader.find( SetRefIngEntity.class, ing2_id, 1 ); - for ( SetRefIngEntity setRefIngEntity : ed1_rev1.getReffering() ) { - assert setRefIngEntity == ing1_rev1 || setRefIngEntity == ing2_rev1; - } + for ( SetRefIngEntity setRefIngEntity : ed1_rev1.getReffering() ) { + assertSame( true, setRefIngEntity == ing1_rev1 || setRefIngEntity == ing2_rev1 ); + } + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/cache/OneToOneCache.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/cache/OneToOneCache.java index fa2cf40b12f4..010c584829d4 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/cache/OneToOneCache.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/cache/OneToOneCache.java @@ -4,60 +4,53 @@ */ package org.hibernate.orm.test.envers.integration.cache; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.orm.test.envers.integration.onetoone.bidirectional.BiRefEdEntity; import org.hibernate.orm.test.envers.integration.onetoone.bidirectional.BiRefIngEntity; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; -import org.junit.Test; +import static org.junit.jupiter.api.Assertions.assertSame; /** * @author Adam Warski (adam at warski dot org) */ @SuppressWarnings({"ObjectEquality"}) -public class OneToOneCache extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {BiRefEdEntity.class, BiRefIngEntity.class}) +public class OneToOneCache { private Integer ed1_id; private Integer ed2_id; private Integer ing1_id; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {BiRefEdEntity.class, BiRefIngEntity.class}; - } - - @Test - @Priority(10) - public void initData() { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { BiRefEdEntity ed1 = new BiRefEdEntity( 1, "data_ed_1" ); BiRefEdEntity ed2 = new BiRefEdEntity( 2, "data_ed_2" ); BiRefIngEntity ing1 = new BiRefIngEntity( 3, "data_ing_1" ); // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - - ing1.setReference( ed1 ); + scope.inTransaction( em -> { + ing1.setReference( ed1 ); - em.persist( ed1 ); - em.persist( ed2 ); + em.persist( ed1 ); + em.persist( ed2 ); - em.persist( ing1 ); - - em.getTransaction().commit(); + em.persist( ing1 ); + } ); // Revision 2 - em.getTransaction().begin(); - - ing1 = em.find( BiRefIngEntity.class, ing1.getId() ); - ed2 = em.find( BiRefEdEntity.class, ed2.getId() ); - - ing1.setReference( ed2 ); + scope.inTransaction( em -> { + BiRefIngEntity ing1Ref = em.find( BiRefIngEntity.class, ing1.getId() ); + BiRefEdEntity ed2Ref = em.find( BiRefEdEntity.class, ed2.getId() ); - em.getTransaction().commit(); + ing1Ref.setReference( ed2Ref ); + } ); ed1_id = ed1.getId(); ed2_id = ed2.getId(); @@ -66,18 +59,24 @@ public void initData() { } @Test - public void testCacheReferenceAccessAfterFindRev1() { - BiRefEdEntity ed1_rev1 = getAuditReader().find( BiRefEdEntity.class, ed1_id, 1 ); - BiRefIngEntity ing1_rev1 = getAuditReader().find( BiRefIngEntity.class, ing1_id, 1 ); - - assert ing1_rev1.getReference() == ed1_rev1; + public void testCacheReferenceAccessAfterFindRev1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + BiRefEdEntity ed1_rev1 = auditReader.find( BiRefEdEntity.class, ed1_id, 1 ); + BiRefIngEntity ing1_rev1 = auditReader.find( BiRefIngEntity.class, ing1_id, 1 ); + + assertSame( ed1_rev1, ing1_rev1.getReference() ); + } ); } @Test - public void testCacheReferenceAccessAfterFindRev2() { - BiRefEdEntity ed2_rev2 = getAuditReader().find( BiRefEdEntity.class, ed2_id, 2 ); - BiRefIngEntity ing1_rev2 = getAuditReader().find( BiRefIngEntity.class, ing1_id, 2 ); - - assert ing1_rev2.getReference() == ed2_rev2; + public void testCacheReferenceAccessAfterFindRev2(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + BiRefEdEntity ed2_rev2 = auditReader.find( BiRefEdEntity.class, ed2_id, 2 ); + BiRefIngEntity ing1_rev2 = auditReader.find( BiRefIngEntity.class, ing1_id, 2 ); + + assertSame( ed2_rev2, ing1_rev2.getReference() ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/cache/QueryCache.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/cache/QueryCache.java index 5621fdc9fcf0..1149691148da 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/cache/QueryCache.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/cache/QueryCache.java @@ -5,65 +5,69 @@ package org.hibernate.orm.test.envers.integration.cache; import java.util.List; -import jakarta.persistence.EntityManager; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.orm.test.envers.entities.IntTestEntity; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; -import org.junit.Test; +import static org.junit.jupiter.api.Assertions.assertSame; /** * @author Adam Warski (adam at warski dot org) */ @SuppressWarnings({"ObjectEquality"}) -public class QueryCache extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {IntTestEntity.class}) +public class QueryCache { private Integer id1; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {IntTestEntity.class}; - } - - @Test - @Priority(10) - public void initData() { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - IntTestEntity ite = new IntTestEntity( 10 ); - em.persist( ite ); - id1 = ite.getId(); - em.getTransaction().commit(); + scope.inTransaction( em -> { + IntTestEntity ite = new IntTestEntity( 10 ); + em.persist( ite ); + id1 = ite.getId(); + } ); // Revision 2 - em.getTransaction().begin(); - ite = em.find( IntTestEntity.class, id1 ); - ite.setNumber( 20 ); - em.getTransaction().commit(); + scope.inTransaction( em -> { + IntTestEntity ite = em.find( IntTestEntity.class, id1 ); + ite.setNumber( 20 ); + } ); } @Test - public void testCacheFindAfterRevisionsOfEntityQuery() { - List entsFromQuery = getAuditReader().createQuery() - .forRevisionsOfEntity( IntTestEntity.class, true, false ) - .getResultList(); + public void testCacheFindAfterRevisionsOfEntityQuery(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + List entsFromQuery = auditReader.createQuery() + .forRevisionsOfEntity( IntTestEntity.class, true, false ) + .getResultList(); - IntTestEntity entFromFindRev1 = getAuditReader().find( IntTestEntity.class, id1, 1 ); - IntTestEntity entFromFindRev2 = getAuditReader().find( IntTestEntity.class, id1, 2 ); + IntTestEntity entFromFindRev1 = auditReader.find( IntTestEntity.class, id1, 1 ); + IntTestEntity entFromFindRev2 = auditReader.find( IntTestEntity.class, id1, 2 ); - assert entFromFindRev1 == entsFromQuery.get( 0 ); - assert entFromFindRev2 == entsFromQuery.get( 1 ); + assertSame( entsFromQuery.get( 0 ), entFromFindRev1 ); + assertSame( entsFromQuery.get( 1 ), entFromFindRev2 ); + } ); } @Test - public void testCacheFindAfterEntitiesAtRevisionQuery() { - IntTestEntity entFromQuery = (IntTestEntity) getAuditReader().createQuery() - .forEntitiesAtRevision( IntTestEntity.class, 1 ) - .getSingleResult(); + public void testCacheFindAfterEntitiesAtRevisionQuery(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + IntTestEntity entFromQuery = (IntTestEntity) auditReader.createQuery() + .forEntitiesAtRevision( IntTestEntity.class, 1 ) + .getSingleResult(); - IntTestEntity entFromFind = getAuditReader().find( IntTestEntity.class, id1, 1 ); + IntTestEntity entFromFind = auditReader.find( IntTestEntity.class, id1, 1 ); - assert entFromFind == entFromQuery; + assertSame( entFromQuery, entFromFind ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/CollectionNullValueTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/CollectionNullValueTest.java index 47e6e90f06b4..a559ecd8d04f 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/CollectionNullValueTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/CollectionNullValueTest.java @@ -7,38 +7,35 @@ import java.util.Arrays; import java.util.List; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.orm.test.envers.entities.collection.StringListEntity; import org.hibernate.orm.test.envers.entities.collection.StringMapEntity; import org.hibernate.orm.test.envers.entities.collection.StringSetEntity; import org.hibernate.orm.test.envers.tools.TestTools; -import org.junit.Test; - +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; -import static org.hibernate.testing.transaction.TransactionUtil.doInJPA; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Chris Cranford */ @JiraKey(value = "HHH-11901") -public class CollectionNullValueTest extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = { StringMapEntity.class, StringListEntity.class, StringSetEntity.class }) +public class CollectionNullValueTest { private Integer mapId; private Integer listId; private Integer setId; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { StringMapEntity.class, StringListEntity.class, StringSetEntity.class }; - } - - @Test - @Priority(10) - public void initData() { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Persist map with null values - mapId = doInJPA( this::entityManagerFactory, entityManager -> { + mapId = scope.fromTransaction( entityManager -> { final StringMapEntity sme = new StringMapEntity(); sme.getStrings().put( "A", "B" ); sme.getStrings().put( "B", null ); @@ -48,7 +45,7 @@ public void initData() { } ); // Update map with null values - doInJPA( this::entityManagerFactory, entityManager -> { + scope.inTransaction( entityManager -> { final StringMapEntity sme = entityManager.find( StringMapEntity.class, mapId ); sme.getStrings().put( "C", null ); sme.getStrings().put( "D", "E" ); @@ -57,7 +54,7 @@ public void initData() { } ); // Persist list with null values - listId = doInJPA( this::entityManagerFactory, entityManager -> { + listId = scope.fromTransaction( entityManager -> { final StringListEntity sle = new StringListEntity(); sle.getStrings().add( "A" ); sle.getStrings().add( null ); @@ -67,7 +64,7 @@ public void initData() { } ); // Update list with null values - doInJPA( this::entityManagerFactory, entityManager -> { + scope.inTransaction( entityManager -> { final StringListEntity sle = entityManager.find( StringListEntity.class, listId ); sle.getStrings().add( null ); sle.getStrings().add( "D" ); @@ -76,7 +73,7 @@ public void initData() { } ); // Persist set with null values - setId = doInJPA( this::entityManagerFactory, entityManager -> { + setId = scope.fromTransaction( entityManager -> { final StringSetEntity sse = new StringSetEntity(); sse.getStrings().add( "A" ); sse.getStrings().add( null ); @@ -86,7 +83,7 @@ public void initData() { } ); // Update set with null values - doInJPA( this::entityManagerFactory, entityManager -> { + scope.inTransaction( entityManager -> { final StringSetEntity sse = entityManager.find( StringSetEntity.class, setId ); sse.getStrings().add( null ); sse.getStrings().add( "D" ); @@ -96,41 +93,49 @@ public void initData() { } @Test - public void testStringMapHistory() { - final List revisions = getAuditReader().getRevisions( StringMapEntity.class, mapId ); - assertEquals( Arrays.asList( 1, 2 ), revisions ); + public void testStringMapHistory(EntityManagerFactoryScope scope) { + scope.inEntityManager( entityManager -> { + final var auditReader = AuditReaderFactory.get( entityManager ); + final List revisions = auditReader.getRevisions( StringMapEntity.class, mapId ); + assertEquals( Arrays.asList( 1, 2 ), revisions ); - final StringMapEntity rev1 = getAuditReader().find( StringMapEntity.class, mapId, 1 ); - assertEquals( TestTools.makeMap( "A", "B" ), rev1.getStrings() ); + final StringMapEntity rev1 = auditReader.find( StringMapEntity.class, mapId, 1 ); + assertEquals( TestTools.makeMap( "A", "B" ), rev1.getStrings() ); - final StringMapEntity rev2 = getAuditReader().find( StringMapEntity.class, mapId, 2 ); - assertEquals( TestTools.makeMap( "D", "E" ), rev2.getStrings() ); + final StringMapEntity rev2 = auditReader.find( StringMapEntity.class, mapId, 2 ); + assertEquals( TestTools.makeMap( "D", "E" ), rev2.getStrings() ); + } ); } @Test - public void testStringListHistory() { - final List revisions = getAuditReader().getRevisions( StringListEntity.class, listId ); - assertEquals( Arrays.asList( 3, 4 ), revisions ); - - final StringListEntity rev3 = getAuditReader().find( StringListEntity.class, listId, 3 ); - assertEquals( TestTools.makeList( "A" ), rev3.getStrings() ); - - // NOTE: the only reason this assertion expects a null element is because the collection is indexed. - // ORM will return a list that consists of { null, "D" } and Envers should effectively mimic that. - final StringListEntity rev4 = getAuditReader().find( StringListEntity.class, listId, 4 ); - assertEquals( TestTools.makeList( null, "D" ), rev4.getStrings() ); + public void testStringListHistory(EntityManagerFactoryScope scope) { + scope.inEntityManager( entityManager -> { + final var auditReader = AuditReaderFactory.get( entityManager ); + final List revisions = auditReader.getRevisions( StringListEntity.class, listId ); + assertEquals( Arrays.asList( 3, 4 ), revisions ); + + final StringListEntity rev3 = auditReader.find( StringListEntity.class, listId, 3 ); + assertEquals( TestTools.makeList( "A" ), rev3.getStrings() ); + + // NOTE: the only reason this assertion expects a null element is because the collection is indexed. + // ORM will return a list that consists of { null, "D" } and Envers should effectively mimic that. + final StringListEntity rev4 = auditReader.find( StringListEntity.class, listId, 4 ); + assertEquals( TestTools.makeList( null, "D" ), rev4.getStrings() ); + } ); } @Test - public void testStringSetHistory() { - final List revisions = getAuditReader().getRevisions( StringSetEntity.class, setId ); - assertEquals( Arrays.asList( 5, 6 ), revisions ); + public void testStringSetHistory(EntityManagerFactoryScope scope) { + scope.inEntityManager( entityManager -> { + final var auditReader = AuditReaderFactory.get( entityManager ); + final List revisions = auditReader.getRevisions( StringSetEntity.class, setId ); + assertEquals( Arrays.asList( 5, 6 ), revisions ); - final StringSetEntity rev5 = getAuditReader().find( StringSetEntity.class, setId, 5 ); - assertEquals( TestTools.makeSet( "A" ), rev5.getStrings() ); + final StringSetEntity rev5 = auditReader.find( StringSetEntity.class, setId, 5 ); + assertEquals( TestTools.makeSet( "A" ), rev5.getStrings() ); - final StringSetEntity rev6 = getAuditReader().find( StringSetEntity.class, setId, 6 ); - assertEquals( TestTools.makeSet( "D" ), rev6.getStrings() ); + final StringSetEntity rev6 = auditReader.find( StringSetEntity.class, setId, 6 ); + assertEquals( TestTools.makeSet( "D" ), rev6.getStrings() ); + } ); } - } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/DetachedCollectionChangeTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/DetachedCollectionChangeTest.java index 5ab6b17d41c2..7f95781a375e 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/DetachedCollectionChangeTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/DetachedCollectionChangeTest.java @@ -4,35 +4,45 @@ */ package org.hibernate.orm.test.envers.integration.collection; -import java.io.Serializable; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashSet; -import java.util.List; -import java.util.Objects; -import java.util.Set; - import jakarta.persistence.ElementCollection; import jakarta.persistence.Embeddable; import jakarta.persistence.Entity; -import jakarta.persistence.EntityManager; import jakarta.persistence.GeneratedValue; import jakarta.persistence.Id; import jakarta.persistence.ManyToMany; - +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.junit.Assert; -import org.junit.Test; - +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.MethodOrderer; +import org.junit.jupiter.api.Order; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestMethodOrder; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashSet; +import java.util.List; +import java.util.Objects; +import java.util.Set; + +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Chris Cranford */ @JiraKey(value = "HHH-13080") -public class DetachedCollectionChangeTest extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = { + DetachedCollectionChangeTest.Alert.class, + DetachedCollectionChangeTest.RuleName.class +}) +@TestMethodOrder(MethodOrderer.OrderAnnotation.class) +public class DetachedCollectionChangeTest { @Audited @Entity(name = "Alert") public static class Alert { @@ -121,7 +131,7 @@ public boolean equals(Object o) { } RuleName ruleName = (RuleName) o; return Objects.equals( id, ruleName.id ) && - Objects.equals( name, ruleName.name ); + Objects.equals( name, ruleName.name ); } @Override @@ -161,147 +171,147 @@ public void setValue2(String value2) { } } - @Override - protected Class[] getAnnotatedClasses() { - return new Class[]{ Alert.class, RuleName.class }; - } - private Integer ruleName1Id; private Integer ruleName2Id; private Integer alertId; - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - RuleName ruleName1 = new RuleName(); - RuleName ruleName2 = new RuleName(); - - CompositeName compositeName1 = new CompositeName( "First1", "Last1" ); - CompositeName compositeName2 = new CompositeName( "First2", "Last2" ); - - Alert alert = new Alert(); - alert.getRuleNames().add( ruleName1 ); - alert.getRuleNames().add( ruleName2 ); - alert.getNames().add( "N1" ); - alert.getNames().add( "N2" ); - alert.getComposites().add( compositeName1 ); - alert.getComposites().add( compositeName2 ); - - // Revision 1 - em.getTransaction().begin(); - em.persist( ruleName1 ); - em.persist( ruleName2 ); - em.persist( alert ); - em.getTransaction().commit(); - - alertId = alert.id; - ruleName1Id = ruleName1.id; - ruleName2Id = ruleName2.id; + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + RuleName ruleName1 = new RuleName(); + RuleName ruleName2 = new RuleName(); + + CompositeName compositeName1 = new CompositeName( "First1", "Last1" ); + CompositeName compositeName2 = new CompositeName( "First2", "Last2" ); + + Alert alert = new Alert(); + alert.getRuleNames().add( ruleName1 ); + alert.getRuleNames().add( ruleName2 ); + alert.getNames().add( "N1" ); + alert.getNames().add( "N2" ); + alert.getComposites().add( compositeName1 ); + alert.getComposites().add( compositeName2 ); + + // Revision 1 + em.getTransaction().begin(); + em.persist( ruleName1 ); + em.persist( ruleName2 ); + em.persist( alert ); + em.getTransaction().commit(); + + alertId = alert.id; + ruleName1Id = ruleName1.id; + ruleName2Id = ruleName2.id; + } ); } @Test - @Priority(9) - public void testRevisionsCounts() { - Assert.assertEquals( Arrays.asList( 1 ), getAuditReader().getRevisions( Alert.class, alertId ) ); - Assert.assertEquals( Arrays.asList( 1 ), getAuditReader().getRevisions( RuleName.class, ruleName1Id ) ); - Assert.assertEquals( Arrays.asList( 1 ), getAuditReader().getRevisions( RuleName.class, ruleName2Id ) ); + @Order(1) + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1 ), auditReader.getRevisions( Alert.class, alertId ) ); + assertEquals( Arrays.asList( 1 ), auditReader.getRevisions( RuleName.class, ruleName1Id ) ); + assertEquals( Arrays.asList( 1 ), auditReader.getRevisions( RuleName.class, ruleName2Id ) ); + } ); } @Test - @Priority(8) - public void testClearAndAddWithinTransactionDoesNotChangeAnything() { - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - - final Alert alert = em.find( Alert.class, alertId ); + @Order(2) + public void testClearAndAddWithinTransactionDoesNotChangeAnything(EntityManagerFactoryScope scope) { + scope.inTransaction( em -> { + final Alert alert = em.find( Alert.class, alertId ); - List ruleNamesClone = new ArrayList<>( alert.getRuleNames() ); - List namesClone = new ArrayList<>( alert.getNames() ); - List compositeNamesClones = new ArrayList<>( alert.getComposites() ); + List ruleNamesClone = new ArrayList<>( alert.getRuleNames() ); + List namesClone = new ArrayList<>( alert.getNames() ); + List compositeNamesClones = new ArrayList<>( alert.getComposites() ); - alert.getRuleNames().clear(); - alert.getRuleNames().addAll( ruleNamesClone ); + alert.getRuleNames().clear(); + alert.getRuleNames().addAll( ruleNamesClone ); - alert.getNames().clear(); - alert.getNames().addAll( namesClone ); + alert.getNames().clear(); + alert.getNames().addAll( namesClone ); - alert.getComposites().clear(); - alert.getComposites().addAll( compositeNamesClones ); + alert.getComposites().clear(); + alert.getComposites().addAll( compositeNamesClones ); - em.persist( alert ); - em.getTransaction().commit(); + em.persist( alert ); + } ); - Assert.assertEquals( Arrays.asList( 1 ), getAuditReader().getRevisions( Alert.class, alertId ) ); - Assert.assertEquals( Arrays.asList( 1 ), getAuditReader().getRevisions( RuleName.class, ruleName1Id ) ); - Assert.assertEquals( Arrays.asList( 1 ), getAuditReader().getRevisions( RuleName.class, ruleName2Id ) ); + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1 ), auditReader.getRevisions( Alert.class, alertId ) ); + assertEquals( Arrays.asList( 1 ), auditReader.getRevisions( RuleName.class, ruleName1Id ) ); + assertEquals( Arrays.asList( 1 ), auditReader.getRevisions( RuleName.class, ruleName2Id ) ); + } ); } @Test - @Priority(7) - public void testClearAddDetachedOutsideTransaction() { - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - - final RuleName ruleName1 = em.find( RuleName.class, ruleName1Id ); - final RuleName ruleName2 = em.find( RuleName.class, ruleName2Id ); - + @Order(3) + public void testClearAddDetachedOutsideTransaction(EntityManagerFactoryScope scope) { + final RuleName ruleName1; + final RuleName ruleName2; final CompositeName compositeName1 = new CompositeName( "First1", "Last1" ); final CompositeName compositeName2 = new CompositeName( "First2", "Last2" ); + // Load entities outside transaction + ruleName1 = scope.fromTransaction( em -> em.find( RuleName.class, ruleName1Id ) ); + ruleName2 = scope.fromTransaction( em -> em.find( RuleName.class, ruleName2Id ) ); + List ruleNamesClone = Arrays.asList( ruleName1, ruleName2 ); List namesClone = Arrays.asList( "N1", "N2" ); List compositeNamesClone = Arrays.asList( compositeName1, compositeName2 ); - em.getTransaction().rollback(); - - em.getTransaction().begin(); - Alert alert = em.find( Alert.class, alertId ); + scope.inTransaction( em -> { + Alert alert = em.find( Alert.class, alertId ); - alert.getRuleNames().clear(); - alert.getRuleNames().addAll( ruleNamesClone ); + alert.getRuleNames().clear(); + alert.getRuleNames().addAll( ruleNamesClone ); - alert.getNames().clear(); - alert.getNames().addAll( namesClone ); + alert.getNames().clear(); + alert.getNames().addAll( namesClone ); - alert.getComposites().clear(); - alert.getComposites().addAll( compositeNamesClone ); + alert.getComposites().clear(); + alert.getComposites().addAll( compositeNamesClone ); - em.persist( alert ); - em.getTransaction().commit(); + em.persist( alert ); + } ); - Assert.assertEquals( Arrays.asList( 1 ), getAuditReader().getRevisions( Alert.class, alertId ) ); - Assert.assertEquals( Arrays.asList( 1 ), getAuditReader().getRevisions( RuleName.class, ruleName1Id ) ); - Assert.assertEquals( Arrays.asList( 1 ), getAuditReader().getRevisions( RuleName.class, ruleName2Id ) ); + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1 ), auditReader.getRevisions( Alert.class, alertId ) ); + assertEquals( Arrays.asList( 1 ), auditReader.getRevisions( RuleName.class, ruleName1Id ) ); + assertEquals( Arrays.asList( 1 ), auditReader.getRevisions( RuleName.class, ruleName2Id ) ); + } ); } @Test - @Priority(6) - public void testClearAddOneWithinTransaction() { - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - - Alert alert = em.find( Alert.class, alertId ); + @Order(4) + public void testClearAddOneWithinTransaction(EntityManagerFactoryScope scope) { + scope.inTransaction( em -> { + Alert alert = em.find( Alert.class, alertId ); - List ruleNamesClone = new ArrayList<>( alert.getRuleNames() ); - List namesClone = new ArrayList<>( alert.getNames() ); - List compositeNamesClones = new ArrayList<>( alert.getComposites() ); + List ruleNamesClone = new ArrayList<>( alert.getRuleNames() ); + List namesClone = new ArrayList<>( alert.getNames() ); + List compositeNamesClones = new ArrayList<>( alert.getComposites() ); - alert.getRuleNames().clear(); - alert.getRuleNames().add( ruleNamesClone.get( 0 ) ); + alert.getRuleNames().clear(); + alert.getRuleNames().add( ruleNamesClone.get( 0 ) ); - alert.getNames().clear(); - alert.getNames().add( namesClone.get( 0 ) ); + alert.getNames().clear(); + alert.getNames().add( namesClone.get( 0 ) ); - alert.getComposites().clear(); - alert.getComposites().add( compositeNamesClones.get( 0 ) ); + alert.getComposites().clear(); + alert.getComposites().add( compositeNamesClones.get( 0 ) ); - em.persist( alert ); - em.getTransaction().commit(); + em.persist( alert ); + } ); - Assert.assertEquals( Arrays.asList( 1, 2 ), getAuditReader().getRevisions( Alert.class, alertId ) ); - Assert.assertEquals( Arrays.asList( 1 ), getAuditReader().getRevisions( RuleName.class, ruleName1Id ) ); - Assert.assertEquals( Arrays.asList( 1 ), getAuditReader().getRevisions( RuleName.class, ruleName2Id ) ); + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1, 2 ), auditReader.getRevisions( Alert.class, alertId ) ); + assertEquals( Arrays.asList( 1 ), auditReader.getRevisions( RuleName.class, ruleName1Id ) ); + assertEquals( Arrays.asList( 1 ), auditReader.getRevisions( RuleName.class, ruleName2Id ) ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/DetachedMultipleCollectionChangeTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/DetachedMultipleCollectionChangeTest.java index 9a3e5937939c..658648eae585 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/DetachedMultipleCollectionChangeTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/DetachedMultipleCollectionChangeTest.java @@ -4,33 +4,31 @@ */ package org.hibernate.orm.test.envers.integration.collection; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Map; import jakarta.persistence.EntityManager; import jakarta.persistence.Query; -import jakarta.transaction.Status; -import jakarta.transaction.TransactionManager; -import org.hibernate.cfg.AvailableSettings; import org.hibernate.community.dialect.AltibaseDialect; import org.hibernate.dialect.CockroachDialect; import org.hibernate.dialect.OracleDialect; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.RevisionType; import org.hibernate.envers.enhanced.SequenceIdRevisionEntity; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; import org.hibernate.orm.test.envers.entities.collection.MultipleCollectionEntity; import org.hibernate.orm.test.envers.entities.collection.MultipleCollectionRefEntity1; import org.hibernate.orm.test.envers.entities.collection.MultipleCollectionRefEntity2; -import org.hibernate.testing.SkipForDialect; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; -import org.hibernate.testing.jta.TestingJtaBootstrap; -import org.hibernate.testing.jta.TestingJtaPlatformImpl; -import org.junit.Test; +import org.hibernate.testing.orm.junit.Jpa; +import org.hibernate.testing.orm.junit.SkipForDialect; +import org.junit.jupiter.api.Test; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; /** * Test the audit history of a detached entity with multiple collections that is @@ -39,12 +37,17 @@ * @author Erik-Berndt Scheper */ @JiraKey(value = "HHH-6349") -@SkipForDialect(value = OracleDialect.class, - comment = "Oracle does not support identity key generation") -@SkipForDialect(value = AltibaseDialect.class, - comment = "Altibase does not support identity key generation") -public class DetachedMultipleCollectionChangeTest extends BaseEnversJPAFunctionalTestCase { - private TransactionManager tm = null; +@SkipForDialect(dialectClass = OracleDialect.class, + reason = "Oracle does not support identity key generation") +@SkipForDialect(dialectClass = AltibaseDialect.class, + reason = "Altibase does not support identity key generation") +@EnversTest +@Jpa(annotatedClasses = { + MultipleCollectionEntity.class, + MultipleCollectionRefEntity1.class, + MultipleCollectionRefEntity2.class +}) +public class DetachedMultipleCollectionChangeTest { private Long mceId1 = null; private Long re1Id1 = null; @@ -54,50 +57,23 @@ public class DetachedMultipleCollectionChangeTest extends BaseEnversJPAFunctiona private Long re2Id2 = null; private Long re2Id3 = null; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { - MultipleCollectionEntity.class, - MultipleCollectionRefEntity1.class, - MultipleCollectionRefEntity2.class - }; - } + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { - @Override - protected void addConfigOptions(Map options) { - super.addConfigOptions( options ); - TestingJtaBootstrap.prepare( options ); - options.put( AvailableSettings.ALLOW_JTA_TRANSACTION_ACCESS, "true" ); - tm = TestingJtaPlatformImpl.INSTANCE.getTransactionManager(); - } + MultipleCollectionEntity mce; + MultipleCollectionRefEntity1 re1_1, updatedRe1_1, re1_2, re1_3; + MultipleCollectionRefEntity2 re2_1, updatedRe2_1, re2_2, re2_3; - @Test - @Priority(10) - public void initData() throws Exception { - EntityManager em; - MultipleCollectionEntity mce; - MultipleCollectionRefEntity1 re1_1, updatedRe1_1, re1_2, re1_3; - MultipleCollectionRefEntity2 re2_1, updatedRe2_1, re2_2, re2_3; - - tm.begin(); - try { - em = createIsolatedEntityManager(); - em.joinTransaction(); + em.getTransaction().begin(); mce = new MultipleCollectionEntity(); mce.setText( "MultipleCollectionEntity-1" ); em.persist( mce ); mceId1 = mce.getId(); - } - finally { - tryCommit( tm ); - } - assertNotNull( mceId1 ); - - tm.begin(); - try { - em = createIsolatedEntityManager(); - em.joinTransaction(); + em.getTransaction().commit(); + assertNotNull( mceId1 ); + em.getTransaction().begin(); re1_1 = new MultipleCollectionRefEntity1(); re1_1.setText( "MultipleCollectionRefEntity1-1" ); re1_1.setMultipleCollectionEntity( mce ); @@ -121,178 +97,181 @@ public void initData() throws Exception { mce.addRefEntity2( re2_2 ); mce = em.merge( mce ); - } - finally { - tryCommit( tm ); - } - for ( MultipleCollectionRefEntity1 refEnt1 : mce.getRefEntities1() ) { - if ( refEnt1.equals( re1_1 ) ) { - re1Id1 = refEnt1.getId(); + em.getTransaction().commit(); + + for ( MultipleCollectionRefEntity1 refEnt1 : mce.getRefEntities1() ) { + if ( refEnt1.equals( re1_1 ) ) { + re1Id1 = refEnt1.getId(); + } + else if ( refEnt1.equals( re1_2 ) ) { + re1Id2 = refEnt1.getId(); + } + else { + throw new IllegalStateException( "unexpected instance" ); + } } - else if ( refEnt1.equals( re1_2 ) ) { - re1Id2 = refEnt1.getId(); - } - else { - throw new IllegalStateException( "unexpected instance" ); - } - } - for ( MultipleCollectionRefEntity2 refEnt2 : mce.getRefEntities2() ) { - if ( refEnt2.equals( re2_1 ) ) { - re2Id1 = refEnt2.getId(); + for ( MultipleCollectionRefEntity2 refEnt2 : mce.getRefEntities2() ) { + if ( refEnt2.equals( re2_1 ) ) { + re2Id1 = refEnt2.getId(); + } + else if ( refEnt2.equals( re2_2 ) ) { + re2Id2 = refEnt2.getId(); + } + else { + throw new IllegalStateException( "unexpected instance" ); + } } - else if ( refEnt2.equals( re2_2 ) ) { - re2Id2 = refEnt2.getId(); - } - else { - throw new IllegalStateException( "unexpected instance" ); - } - } - assertNotNull( re1Id1 ); - assertNotNull( re1Id2 ); - assertNotNull( re2Id1 ); - assertNotNull( re2Id2 ); + assertNotNull( re1Id1 ); + assertNotNull( re1Id2 ); + assertNotNull( re2Id1 ); + assertNotNull( re2Id2 ); - tm.begin(); - try { - em = createIsolatedEntityManager(); - em.joinTransaction(); + em.getTransaction().begin(); + final MultipleCollectionEntity entity = em.find( MultipleCollectionEntity.class, mceId1 ); + assertEquals( 2, entity.getRefEntities1().size() ); - assertEquals( 2, mce.getRefEntities1().size() ); + entity.removeRefEntity1( re1_2 ); + assertEquals( 1, entity.getRefEntities1().size() ); - mce.removeRefEntity1( re1_2 ); - assertEquals( 1, mce.getRefEntities1().size() ); - - updatedRe1_1 = mce.getRefEntities1().get( 0 ); + updatedRe1_1 = entity.getRefEntities1().get( 0 ); assertEquals( re1_1, updatedRe1_1 ); updatedRe1_1.setText( "MultipleCollectionRefEntity1-1-updated" ); re1_3 = new MultipleCollectionRefEntity1(); re1_3.setText( "MultipleCollectionRefEntity1-3" ); - re1_3.setMultipleCollectionEntity( mce ); - mce.addRefEntity1( re1_3 ); - assertEquals( 2, mce.getRefEntities1().size() ); + re1_3.setMultipleCollectionEntity( entity ); + entity.addRefEntity1( re1_3 ); + assertEquals( 2, entity.getRefEntities1().size() ); - assertEquals( 2, mce.getRefEntities2().size() ); + assertEquals( 2, entity.getRefEntities2().size() ); - mce.removeRefEntity2( re2_2 ); - assertEquals( 1, mce.getRefEntities2().size() ); + entity.removeRefEntity2( re2_2 ); + assertEquals( 1, entity.getRefEntities2().size() ); - updatedRe2_1 = mce.getRefEntities2().get( 0 ); + updatedRe2_1 = entity.getRefEntities2().get( 0 ); assertEquals( re2_1, updatedRe2_1 ); updatedRe2_1.setText( "MultipleCollectionRefEntity2-1-updated" ); re2_3 = new MultipleCollectionRefEntity2(); re2_3.setText( "MultipleCollectionRefEntity2-3" ); - re2_3.setMultipleCollectionEntity( mce ); - mce.addRefEntity2( re2_3 ); - assertEquals( 2, mce.getRefEntities2().size() ); + re2_3.setMultipleCollectionEntity( entity ); + entity.addRefEntity2( re2_3 ); + assertEquals( 2, entity.getRefEntities2().size() ); - mce = em.merge( mce ); + em.merge( entity ); + em.getTransaction().commit(); - } - finally { - tryCommit( tm ); - } - for ( MultipleCollectionRefEntity1 adres : mce.getRefEntities1() ) { - if ( adres.equals( re1_3 ) ) { - re1Id3 = adres.getId(); + + mce = em.find( MultipleCollectionEntity.class, mceId1 ); + for ( MultipleCollectionRefEntity1 adres : mce.getRefEntities1() ) { + if ( adres.equals( re1_3 ) ) { + re1Id3 = adres.getId(); + } } - } - for ( MultipleCollectionRefEntity2 partner : mce.getRefEntities2() ) { - if ( partner.equals( re2_3 ) ) { - re2Id3 = partner.getId(); + for ( MultipleCollectionRefEntity2 partner : mce.getRefEntities2() ) { + if ( partner.equals( re2_3 ) ) { + re2Id3 = partner.getId(); + } } - } - assertNotNull( re1Id3 ); - assertNotNull( re2Id3 ); + assertNotNull( re1Id3 ); + assertNotNull( re2Id3 ); + } ); } @Test - public void testRevisionsCounts() throws Exception { - List mceId1Revs = getAuditReader().getRevisions( MultipleCollectionEntity.class, mceId1 ); - List re1Id1Revs = getAuditReader().getRevisions( MultipleCollectionRefEntity1.class, re1Id1 ); - List re1Id2Revs = getAuditReader().getRevisions( MultipleCollectionRefEntity1.class, re1Id2 ); - List re1Id3Revs = getAuditReader().getRevisions( MultipleCollectionRefEntity1.class, re1Id3 ); - List re2Id1Revs = getAuditReader().getRevisions( MultipleCollectionRefEntity2.class, re2Id1 ); - List re2Id2Revs = getAuditReader().getRevisions( MultipleCollectionRefEntity2.class, re2Id2 ); - List re2Id3Revs = getAuditReader().getRevisions( MultipleCollectionRefEntity2.class, re2Id3 ); - - assertEquals( Arrays.asList( 1, 2, 3 ), mceId1Revs ); - assertEquals( Arrays.asList( 2, 3 ), re1Id1Revs ); - assertEquals( Arrays.asList( 2, 3 ), re1Id2Revs ); - assertEquals( Arrays.asList( 3 ), re1Id3Revs ); - assertEquals( Arrays.asList( 2, 3 ), re2Id1Revs ); - assertEquals( Arrays.asList( 2, 3 ), re2Id2Revs ); - assertEquals( Arrays.asList( 3 ), re2Id3Revs ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + List mceId1Revs = auditReader.getRevisions( MultipleCollectionEntity.class, mceId1 ); + List re1Id1Revs = auditReader.getRevisions( MultipleCollectionRefEntity1.class, re1Id1 ); + List re1Id2Revs = auditReader.getRevisions( MultipleCollectionRefEntity1.class, re1Id2 ); + List re1Id3Revs = auditReader.getRevisions( MultipleCollectionRefEntity1.class, re1Id3 ); + List re2Id1Revs = auditReader.getRevisions( MultipleCollectionRefEntity2.class, re2Id1 ); + List re2Id2Revs = auditReader.getRevisions( MultipleCollectionRefEntity2.class, re2Id2 ); + List re2Id3Revs = auditReader.getRevisions( MultipleCollectionRefEntity2.class, re2Id3 ); + + assertEquals( Arrays.asList( 1, 2, 3 ), mceId1Revs ); + assertEquals( Arrays.asList( 2, 3 ), re1Id1Revs ); + assertEquals( Arrays.asList( 2, 3 ), re1Id2Revs ); + assertEquals( Arrays.asList( 3 ), re1Id3Revs ); + assertEquals( Arrays.asList( 2, 3 ), re2Id1Revs ); + assertEquals( Arrays.asList( 2, 3 ), re2Id2Revs ); + assertEquals( Arrays.asList( 3 ), re2Id3Revs ); + } ); } @Test - @SkipForDialect(value = CockroachDialect.class, - comment = "requires serial_normalization=sql_sequence setting") - @SkipForDialect(value = OracleDialect.class, - comment = "Oracle does not support identity key generation") - public void testAuditJoinTable() throws Exception { - List mceRe1AuditJoinTableInfos = getAuditJoinTableRows( - "MCE_RE1_AUD", "MCE_ID", - "aud.originalId.MultipleCollectionEntity_id", "RE1_ID", - "aud.originalId.refEntities1_id", "aud.originalId.REV", - "aud.originalId.REV.id", "aud.REVTYPE" - ); - List mceRe2AuditJoinTableInfos = getAuditJoinTableRows( - "MCE_RE2_AUD", "MCE_ID", - "aud.originalId.MultipleCollectionEntity_id", "RE2_ID", - "aud.originalId.refEntities2_id", "aud.originalId.REV", - "aud.originalId.REV.id", "aud.REVTYPE" - ); - - assertEquals( 4, mceRe1AuditJoinTableInfos.size() ); - assertEquals( 4, mceRe2AuditJoinTableInfos.size() ); - - SequenceIdRevisionEntity rev2 = new SequenceIdRevisionEntity(); - rev2.setId( 2 ); - SequenceIdRevisionEntity rev3 = new SequenceIdRevisionEntity(); - rev3.setId( 3 ); - - assertEquals( - new AuditJoinTableInfo( "MCE_RE1_AUD", rev2, RevisionType.ADD, "MCE_ID", 1L, "RE1_ID", 1L ), - mceRe1AuditJoinTableInfos.get( 0 ) - ); - assertEquals( - new AuditJoinTableInfo( "MCE_RE1_AUD", rev2, RevisionType.ADD, "MCE_ID", 1L, "RE1_ID", 2L ), - mceRe1AuditJoinTableInfos.get( 1 ) - ); - assertEquals( - new AuditJoinTableInfo( "MCE_RE1_AUD", rev3, RevisionType.DEL, "MCE_ID", 1L, "RE1_ID", 2L ), - mceRe1AuditJoinTableInfos.get( 2 ) - ); - assertEquals( - new AuditJoinTableInfo( "MCE_RE1_AUD", rev3, RevisionType.ADD, "MCE_ID", 1L, "RE1_ID", 3L ), - mceRe1AuditJoinTableInfos.get( 3 ) - ); - - assertEquals( - new AuditJoinTableInfo( "MCE_RE2_AUD", rev2, RevisionType.ADD, "MCE_ID", 1L, "RE2_ID", 1L ), - mceRe2AuditJoinTableInfos.get( 0 ) - ); - assertEquals( - new AuditJoinTableInfo( "MCE_RE2_AUD", rev2, RevisionType.ADD, "MCE_ID", 1L, "RE2_ID", 2L ), - mceRe2AuditJoinTableInfos.get( 1 ) - ); - assertEquals( - new AuditJoinTableInfo( "MCE_RE2_AUD", rev3, RevisionType.DEL, "MCE_ID", 1L, "RE2_ID", 2L ), - mceRe2AuditJoinTableInfos.get( 2 ) - ); - assertEquals( - new AuditJoinTableInfo( "MCE_RE2_AUD", rev3, RevisionType.ADD, "MCE_ID", 1L, "RE2_ID", 3L ), - mceRe2AuditJoinTableInfos.get( 3 ) - ); + @SkipForDialect(dialectClass = CockroachDialect.class, + reason = "requires serial_normalization=sql_sequence setting") + @SkipForDialect(dialectClass = OracleDialect.class, + reason = "Oracle does not support identity key generation") + public void testAuditJoinTable(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + List mceRe1AuditJoinTableInfos = getAuditJoinTableRows( + em, + "MCE_RE1_AUD", "MCE_ID", + "aud.originalId.MultipleCollectionEntity_id", "RE1_ID", + "aud.originalId.refEntities1_id", "aud.originalId.REV", + "aud.originalId.REV.id", "aud.REVTYPE" + ); + List mceRe2AuditJoinTableInfos = getAuditJoinTableRows( + em, + "MCE_RE2_AUD", "MCE_ID", + "aud.originalId.MultipleCollectionEntity_id", "RE2_ID", + "aud.originalId.refEntities2_id", "aud.originalId.REV", + "aud.originalId.REV.id", "aud.REVTYPE" + ); + + assertEquals( 4, mceRe1AuditJoinTableInfos.size() ); + assertEquals( 4, mceRe2AuditJoinTableInfos.size() ); + + SequenceIdRevisionEntity rev2 = new SequenceIdRevisionEntity(); + rev2.setId( 2 ); + SequenceIdRevisionEntity rev3 = new SequenceIdRevisionEntity(); + rev3.setId( 3 ); + + assertEquals( + new AuditJoinTableInfo( "MCE_RE1_AUD", rev2, RevisionType.ADD, "MCE_ID", 1L, "RE1_ID", 1L ), + mceRe1AuditJoinTableInfos.get( 0 ) + ); + assertEquals( + new AuditJoinTableInfo( "MCE_RE1_AUD", rev2, RevisionType.ADD, "MCE_ID", 1L, "RE1_ID", 2L ), + mceRe1AuditJoinTableInfos.get( 1 ) + ); + assertEquals( + new AuditJoinTableInfo( "MCE_RE1_AUD", rev3, RevisionType.DEL, "MCE_ID", 1L, "RE1_ID", 2L ), + mceRe1AuditJoinTableInfos.get( 2 ) + ); + assertEquals( + new AuditJoinTableInfo( "MCE_RE1_AUD", rev3, RevisionType.ADD, "MCE_ID", 1L, "RE1_ID", 3L ), + mceRe1AuditJoinTableInfos.get( 3 ) + ); + + assertEquals( + new AuditJoinTableInfo( "MCE_RE2_AUD", rev2, RevisionType.ADD, "MCE_ID", 1L, "RE2_ID", 1L ), + mceRe2AuditJoinTableInfos.get( 0 ) + ); + assertEquals( + new AuditJoinTableInfo( "MCE_RE2_AUD", rev2, RevisionType.ADD, "MCE_ID", 1L, "RE2_ID", 2L ), + mceRe2AuditJoinTableInfos.get( 1 ) + ); + assertEquals( + new AuditJoinTableInfo( "MCE_RE2_AUD", rev3, RevisionType.DEL, "MCE_ID", 1L, "RE2_ID", 2L ), + mceRe2AuditJoinTableInfos.get( 2 ) + ); + assertEquals( + new AuditJoinTableInfo( "MCE_RE2_AUD", rev3, RevisionType.ADD, "MCE_ID", 1L, "RE2_ID", 3L ), + mceRe2AuditJoinTableInfos.get( 3 ) + ); + } ); } private List getAuditJoinTableRows( + EntityManager em, String middleEntityName, String joinColumnIdName, String joinColumnIdProp, String inverseJoinColumnIdName, String inverseJoinColumnIdProp, String revProp, String revIdProp, - String revTypeProp) throws Exception { + String revTypeProp) { StringBuilder qryBuilder = new StringBuilder( "select " ); qryBuilder.append( "aud " ); qryBuilder.append( ", " ).append( joinColumnIdProp ).append( " as joinColumnId" ); @@ -305,7 +284,6 @@ private List getAuditJoinTableRows( String query = qryBuilder.toString(); - EntityManager em = createIsolatedEntityManager(); Query qry = em.createQuery( query ); @SuppressWarnings("unchecked") @@ -353,9 +331,9 @@ private AuditJoinTableInfo( @Override public String toString() { return "AuditJoinTableInfo [name=" + name + ", revId=" + revId - + ", revType=" + revType + ", " + joinColumnName + "=" - + joinColumnId + ", " + inverseJoinColumnName + "=" - + inverseJoinColumnId + "]"; + + ", revType=" + revType + ", " + joinColumnName + "=" + + joinColumnId + ", " + inverseJoinColumnName + "=" + + inverseJoinColumnId + "]"; } @Override @@ -400,13 +378,4 @@ public int hashCode() { return result; } } - - public static void tryCommit(TransactionManager tm) throws Exception { - if ( tm.getStatus() == Status.STATUS_MARKED_ROLLBACK ) { - tm.rollback(); - } - else { - tm.commit(); - } - } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/EmbeddableSet.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/EmbeddableSet.java index a3ca02c1bfa8..6225d17fba7b 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/EmbeddableSet.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/EmbeddableSet.java @@ -4,56 +4,60 @@ */ package org.hibernate.orm.test.envers.integration.collection; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.orm.test.envers.entities.collection.EmbeddableSetEntity; import org.hibernate.orm.test.envers.entities.components.Component3; import org.hibernate.orm.test.envers.tools.TestTools; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Felix Feisst (feisst dot felix at gmail dot com) */ -public class EmbeddableSet extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = { EmbeddableSetEntity.class }) +public class EmbeddableSet { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { EmbeddableSetEntity.class }; - } + private Integer entityId; + private Component3 comp1; + private Component3 comp2; - @Test + @BeforeClassTemplate @JiraKey(value = "HHH-9199") - public void testRemoval() { - EntityManager em = getEntityManager(); - - final Component3 comp1 = new Component3( "comp1", null, null ); - final Component3 comp2 = new Component3( "comp2", null, null ); + public void initData(EntityManagerFactoryScope scope) { + comp1 = new Component3( "comp1", null, null ); + comp2 = new Component3( "comp2", null, null ); EmbeddableSetEntity entity = new EmbeddableSetEntity(); - em.getTransaction().begin(); - - entity.getComponentSet().add( comp1 ); - entity.getComponentSet().add( comp2 ); - - em.persist( entity ); + scope.inTransaction( em -> { + entity.getComponentSet().add( comp1 ); + entity.getComponentSet().add( comp2 ); - em.getTransaction().commit(); + em.persist( entity ); + entityId = entity.getId(); + } ); - em.getTransaction().begin(); - - entity.getComponentSet().remove( comp1 ); - - em.getTransaction().commit(); - - EmbeddableSetEntity rev1 = getAuditReader().find( EmbeddableSetEntity.class, entity.getId(), 1 ); - EmbeddableSetEntity rev2 = getAuditReader().find( EmbeddableSetEntity.class, entity.getId(), 2 ); - assertEquals( "Unexpected components", TestTools.makeSet( comp1, comp2 ), rev1.getComponentSet() ); - assertEquals( "Unexpected components", TestTools.makeSet( comp2 ), rev2.getComponentSet() ); + scope.inTransaction( em -> { + final EmbeddableSetEntity e = em.find( EmbeddableSetEntity.class, entityId ); + e.getComponentSet().remove( comp1 ); + } ); } + @Test + public void testRemoval(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + EmbeddableSetEntity rev1 = auditReader.find( EmbeddableSetEntity.class, entityId, 1 ); + EmbeddableSetEntity rev2 = auditReader.find( EmbeddableSetEntity.class, entityId, 2 ); + assertEquals( TestTools.makeSet( comp1, comp2 ), rev1.getComponentSet(), "Unexpected components" ); + assertEquals( TestTools.makeSet( comp2 ), rev2.getComponentSet(), "Unexpected components" ); + } ); + } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/EntityMapCompositeElementTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/EntityMapCompositeElementTest.java index c1dcfc487a01..48a0abacb569 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/EntityMapCompositeElementTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/EntityMapCompositeElementTest.java @@ -10,33 +10,38 @@ import java.util.Map; import org.hibernate.envers.AuditReader; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.Audited; import org.hibernate.envers.query.AuditEntity; import org.hibernate.envers.query.AuditQuery; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.junit.Test; - -import org.hibernate.testing.FailureExpected; +import org.hibernate.testing.orm.junit.FailureExpected; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; -import org.hibernate.testing.transaction.TransactionUtil; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; /** * @author Chris Cranford */ @JiraKey(value = "HHH-11841") -public class EntityMapCompositeElementTest extends BaseEnversJPAFunctionalTestCase { - - private Category category; - private Item item; - - @Test - @Priority(10) - public void initData() { - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager-> { +@EnversTest +@Jpa(xmlMappings = { + "mappings/collections/Category.hbm.xml", + "mappings/collections/Item.hbm.xml" +}) +public class EntityMapCompositeElementTest { + + private Long categoryId; + private Long itemId; + + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + scope.inTransaction( entityManager-> { final Item item = new Item( "The Item" ); entityManager.persist( item ); @@ -46,45 +51,40 @@ public void initData() { category.setText( item, "The text" ); entityManager.persist( category ); - this.category = category; - this.item = item; + this.categoryId = category.getId(); + this.itemId = item.getId(); } ); } @Test - @FailureExpected(jiraKey = "HHH-11841", message = "Reverted fix in HHH-12018 and will be fixed in HHH-12043") - public void testRevisionHistory() { - final AuditReader reader = getAuditReader(); - - AuditQuery categoryQuery = reader.createQuery().forRevisionsOfEntity( Category.class, false, true ) - .addOrder( AuditEntity.revisionProperty( "timestamp" ).asc() ) - .add( AuditEntity.id().eq( category.getId() ) ); - - @SuppressWarnings( "unchecked" ) - List history = (List) categoryQuery.getResultList(); - assertNotNull( history ); - assertEquals( 1, history.size() ); - - final Category category = (Category) reader.createQuery().forEntitiesAtRevision( Category.class, 1 ) - .add( AuditEntity.property( "id" ).eq( this.category.getId() ) ) - .setMaxResults( 1 ) - .getSingleResult(); - - assertEquals( this.category.getName(), category.getName() ); - assertEquals( this.category.getDescription(), category.getDescription() ); - assertEquals( "The text", category.getText( this.item ) ); - - final Value value = category.getValue( this.item ); - assertEquals( "The Value", value.getText() ); - assertEquals( Long.valueOf( 4711L ), value.getNumberValue() ); - } - - @Override - protected String[] getMappings() { - return new String[] { - "mappings/collections/Category.hbm.xml", - "mappings/collections/Item.hbm.xml" - }; + @FailureExpected(jiraKey = "HHH-11841", reason = "Reverted fix in HHH-12018 and will be fixed in HHH-12043") + public void testRevisionHistory(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final AuditReader reader = AuditReaderFactory.get( em ); + + AuditQuery categoryQuery = reader.createQuery().forRevisionsOfEntity( Category.class, false, true ) + .addOrder( AuditEntity.revisionProperty( "timestamp" ).asc() ) + .add( AuditEntity.id().eq( categoryId ) ); + + @SuppressWarnings( "unchecked" ) + List history = (List) categoryQuery.getResultList(); + assertNotNull( history ); + assertEquals( 1, history.size() ); + + final Item item = em.find( Item.class, itemId ); + final Category category = (Category) reader.createQuery().forEntitiesAtRevision( Category.class, 1 ) + .add( AuditEntity.property( "id" ).eq( this.categoryId ) ) + .setMaxResults( 1 ) + .getSingleResult(); + + assertEquals( "The Category", category.getName() ); + assertEquals( "The description", category.getDescription() ); + assertEquals( "The text", category.getText( item ) ); + + final Value value = category.getValue( item ); + assertEquals( "The Value", value.getText() ); + assertEquals( Long.valueOf( 4711L ), value.getNumberValue() ); + } ); } @Audited diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/EntityMapTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/EntityMapTest.java index 6817ed87664e..9999e2d2bdf3 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/EntityMapTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/EntityMapTest.java @@ -15,15 +15,16 @@ import jakarta.persistence.MappedSuperclass; import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.orm.test.envers.tools.TestTools; -import org.junit.Test; - +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; -import static org.hibernate.testing.transaction.TransactionUtil.doInJPA; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * Tests an entity mapping using an entity as a map-key and map-value. @@ -36,19 +37,20 @@ * @author Chris Cranford */ @JiraKey(value = "HHH-11892") -public class EntityMapTest extends BaseEnversJPAFunctionalTestCase { - - private A a; +@EnversTest +@Jpa(annotatedClasses = { + EntityMapTest.A.class, + EntityMapTest.B.class, + EntityMapTest.C.class +}) +public class EntityMapTest { + + private Integer aId; private B b1; private B b2; private C c1; private C c2; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { A.class, B.class, C.class }; - } - @MappedSuperclass public static abstract class AbstractEntity { @Id @@ -110,11 +112,10 @@ public static class C extends AbstractEntity { } - @Test - @Priority(10) - public void initData() { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // add b/c key-pair to the map and save a entity. - doInJPA( this::entityManagerFactory, entityManager -> { + scope.inTransaction( entityManager -> { final A a = new A(); final B b = new B(); @@ -125,14 +126,14 @@ public void initData() { a.getMap().put( b, c ); entityManager.persist( a ); - this.a = a; + this.aId = a.getId(); this.b1 = b; this.c1 = c; } ); // add a new b/c key-pair to the map - doInJPA( this::entityManagerFactory, entityManager -> { - final A a = entityManager.find( A.class, this.a.getId() ); + scope.inTransaction( entityManager -> { + final A a = entityManager.find( A.class, this.aId ); final B b = new B(); final C c = new C(); @@ -147,45 +148,54 @@ public void initData() { } ); // Remove b1 from the map - doInJPA( this::entityManagerFactory, entityManager -> { - final A a = entityManager.find( A.class, this.a.getId() ); + scope.inTransaction( entityManager -> { + final A a = entityManager.find( A.class, this.aId ); a.getMap().remove( this.b1 ); entityManager.merge( a ); } ); } @Test - public void testRevisionHistory() { - doInJPA( this::entityManagerFactory, entityManager -> { - assertEquals( Arrays.asList( 1, 2, 3 ), getAuditReader().getRevisions( A.class, a.getId() ) ); + public void testRevisionHistory(EntityManagerFactoryScope scope) { + scope.inEntityManager( entityManager -> { + final var auditReader = AuditReaderFactory.get( entityManager ); + assertEquals( Arrays.asList( 1, 2, 3 ), auditReader.getRevisions( A.class, aId ) ); - assertEquals( Arrays.asList( 1 ), getAuditReader().getRevisions( B.class, b1.getId() ) ); - assertEquals( Arrays.asList( 1 ), getAuditReader().getRevisions( C.class, c1.getId() ) ); + assertEquals( Arrays.asList( 1 ), auditReader.getRevisions( B.class, b1.getId() ) ); + assertEquals( Arrays.asList( 1 ), auditReader.getRevisions( C.class, c1.getId() ) ); - assertEquals( Arrays.asList( 2 ), getAuditReader().getRevisions( B.class, b2.getId() ) ); - assertEquals( Arrays.asList( 2 ), getAuditReader().getRevisions( C.class, c2.getId() ) ); + assertEquals( Arrays.asList( 2 ), auditReader.getRevisions( B.class, b2.getId() ) ); + assertEquals( Arrays.asList( 2 ), auditReader.getRevisions( C.class, c2.getId() ) ); } ); } @Test - public void testRevision1() { - final A rev1 = getAuditReader().find( A.class, this.a.getId(), 1 ); - assertEquals( 1, rev1.getMap().size() ); - assertEquals( TestTools.makeMap( this.b1, this.c1 ), rev1.getMap() ); + public void testRevision1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + final A rev1 = auditReader.find( A.class, this.aId, 1 ); + assertEquals( 1, rev1.getMap().size() ); + assertEquals( TestTools.makeMap( this.b1, this.c1 ), rev1.getMap() ); + } ); } @Test - public void testRevision2() { - final A rev2 = getAuditReader().find( A.class, this.a.getId(), 2 ); - assertEquals( 2, rev2.getMap().size() ); - assertEquals( TestTools.makeMap( this.b1, this.c1, this.b2, this.c2 ), rev2.getMap() ); + public void testRevision2(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + final A rev2 = auditReader.find( A.class, this.aId, 2 ); + assertEquals( 2, rev2.getMap().size() ); + assertEquals( TestTools.makeMap( this.b1, this.c1, this.b2, this.c2 ), rev2.getMap() ); + } ); } @Test - public void testRevision3() { - final A rev3 = getAuditReader().find( A.class, this.a.getId(), 3 ); - assertEquals( 1, rev3.getMap().size() ); - assertEquals( TestTools.makeMap( this.b2, this.c2 ), rev3.getMap() ); + public void testRevision3(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + final A rev3 = auditReader.find( A.class, this.aId, 3 ); + assertEquals( 1, rev3.getMap().size() ); + assertEquals( TestTools.makeMap( this.b2, this.c2 ), rev3.getMap() ); + } ); } - } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/EntitySameMapKeyMultiMapValueTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/EntitySameMapKeyMultiMapValueTest.java index 49d30fe4e744..34b01fbb27f9 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/EntitySameMapKeyMultiMapValueTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/EntitySameMapKeyMultiMapValueTest.java @@ -13,25 +13,30 @@ import jakarta.persistence.GeneratedValue; import jakarta.persistence.Id; -import org.hibernate.envers.AuditReader; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.junit.Test; - +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; -import static org.hibernate.testing.transaction.TransactionUtil.doInJPA; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertTrue; /** * @author Chris Cranford */ @JiraKey(value = "HHH-12018") -public class EntitySameMapKeyMultiMapValueTest extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = { + EntitySameMapKeyMultiMapValueTest.SomeEntity.class, + EntitySameMapKeyMultiMapValueTest.OtherEntity.class +}) +public class EntitySameMapKeyMultiMapValueTest { private Integer otherEntityId; private Integer someEntityId; @@ -83,15 +88,9 @@ public void setId(Integer id) { } } - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { SomeEntity.class, OtherEntity.class }; - } - - @Test - @Priority(10) - public void initData() { - doInJPA( this::entityManagerFactory, entityManager -> { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + scope.inTransaction( entityManager -> { final SomeEntity someEntity = new SomeEntity(); final OtherEntity otherEntity = new OtherEntity(); entityManager.persist( otherEntity ); @@ -101,17 +100,16 @@ public void initData() { this.otherEntityId = otherEntity.getId(); this.someEntityId = someEntity.getId(); - } ); - doInJPA( this::entityManagerFactory, entityManager -> { + scope.inTransaction( entityManager -> { final SomeEntity someEntity = entityManager.find( SomeEntity.class, someEntityId ); final OtherEntity otherEntity = entityManager.find( OtherEntity.class, otherEntityId ); someEntity.getMap().put( otherEntity, SomeEntity.Status.B ); entityManager.merge( someEntity ); } ); - doInJPA( this::entityManagerFactory, entityManager -> { + scope.inTransaction( entityManager -> { final SomeEntity someEntity = entityManager.find( SomeEntity.class, someEntityId ); someEntity.getMap().clear(); entityManager.merge( someEntity ); @@ -119,51 +117,63 @@ public void initData() { } @Test - public void testRevisionCounts() { - assertEquals( Arrays.asList( 1 ), getAuditReader().getRevisions( OtherEntity.class, otherEntityId ) ); - assertEquals( Arrays.asList( 1, 2, 3 ), getAuditReader().getRevisions( SomeEntity.class, someEntityId ) ); + public void testRevisionCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1 ), auditReader.getRevisions( OtherEntity.class, otherEntityId ) ); + assertEquals( Arrays.asList( 1, 2, 3 ), auditReader.getRevisions( SomeEntity.class, someEntityId ) ); + } ); } @Test - public void blockTest() { - final AuditReader reader = getAuditReader(); + public void blockTest(EntityManagerFactoryScope scope) { + scope.fromEntityManager( AuditReaderFactory::get ); System.out.println( "Halt" ); } @Test - public void testRevisionOne() { - final SomeEntity someEntity = getAuditReader().find( SomeEntity.class, someEntityId, 1 ); - assertNotNull( someEntity ); - assertFalse( someEntity.getMap().isEmpty() ); - assertEquals( 1, someEntity.getMap().size() ); - - final OtherEntity otherEntity = getAuditReader().find( OtherEntity.class, otherEntityId, 1 ); - assertNotNull( otherEntity ); - - final Map.Entry entry = someEntity.getMap().entrySet().iterator().next(); - assertEquals( otherEntity, entry.getKey() ); - assertEquals( SomeEntity.Status.A, entry.getValue() ); + public void testRevisionOne(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + final SomeEntity someEntity = auditReader.find( SomeEntity.class, someEntityId, 1 ); + assertNotNull( someEntity ); + assertFalse( someEntity.getMap().isEmpty() ); + assertEquals( 1, someEntity.getMap().size() ); + + final OtherEntity otherEntity = auditReader.find( OtherEntity.class, otherEntityId, 1 ); + assertNotNull( otherEntity ); + + final Map.Entry entry = someEntity.getMap().entrySet().iterator().next(); + assertEquals( otherEntity, entry.getKey() ); + assertEquals( SomeEntity.Status.A, entry.getValue() ); + } ); } @Test - public void testRevisionTwo() { - final SomeEntity someEntity = getAuditReader().find( SomeEntity.class, someEntityId, 2 ); - assertNotNull( someEntity ); - assertFalse( someEntity.getMap().isEmpty() ); - assertEquals( 1, someEntity.getMap().size() ); - - final OtherEntity otherEntity = getAuditReader().find( OtherEntity.class, otherEntityId, 2 ); - assertNotNull( otherEntity ); - - final Map.Entry entry = someEntity.getMap().entrySet().iterator().next(); - assertEquals( otherEntity, entry.getKey() ); - assertEquals( SomeEntity.Status.B, entry.getValue() ); + public void testRevisionTwo(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + final SomeEntity someEntity = auditReader.find( SomeEntity.class, someEntityId, 2 ); + assertNotNull( someEntity ); + assertFalse( someEntity.getMap().isEmpty() ); + assertEquals( 1, someEntity.getMap().size() ); + + final OtherEntity otherEntity = auditReader.find( OtherEntity.class, otherEntityId, 2 ); + assertNotNull( otherEntity ); + + final Map.Entry entry = someEntity.getMap().entrySet().iterator().next(); + assertEquals( otherEntity, entry.getKey() ); + assertEquals( SomeEntity.Status.B, entry.getValue() ); + } ); } @Test - public void testRevisionThree() { - final SomeEntity someEntity = getAuditReader().find( SomeEntity.class, someEntityId, 3 ); - assertNotNull( someEntity ); - assertTrue( someEntity.getMap().isEmpty() ); + public void testRevisionThree(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + final SomeEntity someEntity = auditReader.find( SomeEntity.class, someEntityId, 3 ); + assertNotNull( someEntity ); + assertTrue( someEntity.getMap().isEmpty() ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/EnumMapTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/EnumMapTest.java index 1a5f17134df9..cdd6128d83ed 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/EnumMapTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/EnumMapTest.java @@ -5,73 +5,68 @@ package org.hibernate.orm.test.envers.integration.collection; import java.util.Arrays; -import jakarta.persistence.EntityManager; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.orm.test.envers.entities.collection.EnumMapEntity; import org.hibernate.orm.test.envers.entities.collection.EnumMapType; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; /** * @author Chris Cranford */ @JiraKey(value = "HHH-6374") -public class EnumMapTest extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {EnumMapEntity.class, EnumMapType.class}) +public class EnumMapTest { private Integer entityId; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { - EnumMapEntity.class, - EnumMapType.class - }; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getOrCreateEntityManager(); - try { - // revision 1 + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + // revision 1 + scope.inTransaction( em -> { EnumMapEntity entity = new EnumMapEntity(); entity.getTypes().put( EnumMapEntity.EnumType.TYPE_A, new EnumMapType( "A" ) ); entity.getTypes().put( EnumMapEntity.EnumType.TYPE_B, new EnumMapType( "B" ) ); - em.getTransaction().begin(); em.persist( entity ); - em.getTransaction().commit(); - // revision 2 - em.getTransaction().begin(); - entity = em.find( EnumMapEntity.class, entity.getId() ); + entityId = entity.getId(); + } ); + + // revision 2 + scope.inTransaction( em -> { + EnumMapEntity entity = em.find( EnumMapEntity.class, entityId ); entity.getTypes().remove( EnumMapEntity.EnumType.TYPE_A ); entity.getTypes().put( EnumMapEntity.EnumType.TYPE_C, new EnumMapType( "C" ) ); - em.getTransaction().commit(); - entityId = entity.getId(); - } - finally { - em.close(); - } + } ); } @Test - public void testRevisionsCount() { - assertEquals( 2, getAuditReader().getRevisions( EnumMapEntity.class, entityId ).size() ); + public void testRevisionsCount(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( 2, auditReader.getRevisions( EnumMapEntity.class, entityId ).size() ); + } ); } @Test - public void testAuditEnumMapCollection() { - EnumMapEntity rev1 = getAuditReader().find( EnumMapEntity.class, entityId, 1 ); - assertTrue( rev1.getTypes().keySet().containsAll( - Arrays.asList( EnumMapEntity.EnumType.TYPE_A, EnumMapEntity.EnumType.TYPE_B ) - ) ); - EnumMapEntity rev2 = getAuditReader().find( EnumMapEntity.class, entityId, 2 ); - assertTrue( rev2.getTypes().keySet().containsAll( - Arrays.asList( EnumMapEntity.EnumType.TYPE_B, EnumMapEntity.EnumType.TYPE_C ) - ) ); + public void testAuditEnumMapCollection(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + EnumMapEntity rev1 = auditReader.find( EnumMapEntity.class, entityId, 1 ); + assertTrue( rev1.getTypes().keySet().containsAll( + Arrays.asList( EnumMapEntity.EnumType.TYPE_A, EnumMapEntity.EnumType.TYPE_B ) + ) ); + EnumMapEntity rev2 = auditReader.find( EnumMapEntity.class, entityId, 2 ); + assertTrue( rev2.getTypes().keySet().containsAll( + Arrays.asList( EnumMapEntity.EnumType.TYPE_B, EnumMapEntity.EnumType.TYPE_C ) + ) ); + } ); } - } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/EnumSet.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/EnumSet.java index 3ec389769a9b..be6d339be0f8 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/EnumSet.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/EnumSet.java @@ -7,134 +7,115 @@ import java.sql.Types; import java.util.Arrays; import java.util.List; -import java.util.Map; -import jakarta.persistence.EntityManager; import org.assertj.core.api.Assertions; - import org.hibernate.cfg.AvailableSettings; import org.hibernate.engine.spi.SessionImplementor; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.metamodel.mapping.CompositeIdentifierMapping; import org.hibernate.metamodel.mapping.EntityMappingType; import org.hibernate.metamodel.mapping.JdbcMapping; import org.hibernate.metamodel.mapping.PluralAttributeMapping; import org.hibernate.metamodel.spi.MappingMetamodelImplementor; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; import org.hibernate.orm.test.envers.entities.collection.EnumSetEntity; import org.hibernate.orm.test.envers.entities.collection.EnumSetEntity.E1; import org.hibernate.orm.test.envers.entities.collection.EnumSetEntity.E2; import org.hibernate.orm.test.envers.tools.TestTools; - +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; +import org.hibernate.testing.orm.junit.Jpa; +import org.hibernate.testing.orm.junit.Setting; import org.hibernate.type.SqlTypes; -import org.junit.Test; +import org.junit.jupiter.api.Test; import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Adam Warski (adam at warski dot org) */ -public class EnumSet extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {EnumSetEntity.class}, + integrationSettings = @Setting(name = AvailableSettings.PREFER_NATIVE_ENUM_TYPES, value = "false")) +public class EnumSet { private Integer sse1_id; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {EnumSetEntity.class}; - } - - @Override - protected void addConfigOptions(Map options) { - super.addConfigOptions( options ); - options.put( AvailableSettings.PREFER_NATIVE_ENUM_TYPES, "false" ); - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - EnumSetEntity sse1 = new EnumSetEntity(); - + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Revision 1 (sse1: initialy 1 element) - em.getTransaction().begin(); - - sse1.getEnums1().add( E1.X ); - sse1.getEnums2().add( E2.A ); - - em.persist( sse1 ); - - em.getTransaction().commit(); + scope.inTransaction( em -> { + EnumSetEntity sse1 = new EnumSetEntity(); + sse1.getEnums1().add( E1.X ); + sse1.getEnums2().add( E2.A ); + em.persist( sse1 ); + sse1_id = sse1.getId(); + } ); // Revision 2 (sse1: adding 1 element/removing a non-existing element) - em.getTransaction().begin(); - - sse1 = em.find( EnumSetEntity.class, sse1.getId() ); - - sse1.getEnums1().add( E1.Y ); - sse1.getEnums2().remove( E2.B ); - - em.getTransaction().commit(); + scope.inTransaction( em -> { + EnumSetEntity sse1 = em.find( EnumSetEntity.class, sse1_id ); + sse1.getEnums1().add( E1.Y ); + sse1.getEnums2().remove( E2.B ); + } ); // Revision 3 (sse1: removing 1 element/adding an exisiting element) - em.getTransaction().begin(); - - sse1 = em.find( EnumSetEntity.class, sse1.getId() ); - - sse1.getEnums1().remove( E1.X ); - sse1.getEnums2().add( E2.A ); - - em.getTransaction().commit(); - - // - - sse1_id = sse1.getId(); + scope.inTransaction( em -> { + EnumSetEntity sse1 = em.find( EnumSetEntity.class, sse1_id ); + sse1.getEnums1().remove( E1.X ); + sse1.getEnums2().add( E2.A ); + } ); } @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2, 3 ).equals( getAuditReader().getRevisions( EnumSetEntity.class, sse1_id ) ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1, 2, 3 ), auditReader.getRevisions( EnumSetEntity.class, sse1_id ) ); + } ); } @Test - public void testHistoryOfSse1() { - EnumSetEntity rev1 = getAuditReader().find( EnumSetEntity.class, sse1_id, 1 ); - EnumSetEntity rev2 = getAuditReader().find( EnumSetEntity.class, sse1_id, 2 ); - EnumSetEntity rev3 = getAuditReader().find( EnumSetEntity.class, sse1_id, 3 ); - - assert rev1.getEnums1().equals( TestTools.makeSet( E1.X ) ); - assert rev2.getEnums1().equals( TestTools.makeSet( E1.X, E1.Y ) ); - assert rev3.getEnums1().equals( TestTools.makeSet( E1.Y ) ); - - assert rev1.getEnums2().equals( TestTools.makeSet( E2.A ) ); - assert rev2.getEnums2().equals( TestTools.makeSet( E2.A ) ); - assert rev3.getEnums2().equals( TestTools.makeSet( E2.A ) ); + public void testHistoryOfSse1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + EnumSetEntity rev1 = auditReader.find( EnumSetEntity.class, sse1_id, 1 ); + EnumSetEntity rev2 = auditReader.find( EnumSetEntity.class, sse1_id, 2 ); + EnumSetEntity rev3 = auditReader.find( EnumSetEntity.class, sse1_id, 3 ); + + assertEquals( TestTools.makeSet( E1.X ), rev1.getEnums1() ); + assertEquals( TestTools.makeSet( E1.X, E1.Y ), rev2.getEnums1() ); + assertEquals( TestTools.makeSet( E1.Y ), rev3.getEnums1() ); + + assertEquals( TestTools.makeSet( E2.A ), rev1.getEnums2() ); + assertEquals( TestTools.makeSet( E2.A ), rev2.getEnums2() ); + assertEquals( TestTools.makeSet( E2.A ), rev3.getEnums2() ); + } ); } @Test @JiraKey(value = "HHH-7780") - public void testEnumRepresentation() { - EntityManager entityManager = getEntityManager(); - - verifyModel( entityManager ); - - { - final String qry = "SELECT enums1 FROM EnumSetEntity_enums1_AUD ORDER BY REV ASC"; - List enums1 = entityManager.createNativeQuery( qry, String.class ).getResultList(); - Assertions.assertThat( enums1 ).isEqualTo( List.of( "X", "Y", "X" ) ); - } - - { - final String qry = "SELECT enums2 FROM EnumSetEntity_enums2_AUD ORDER BY REV ASC"; - String enum2 = (String) entityManager.createNativeQuery( qry, String.class ).getSingleResult(); - // Compare the String value to account for, as an example, Oracle returning a BigDecimal instead of an int. - Assertions.assertThat( enum2 ).isEqualTo( "0" ); - } - - entityManager.close(); + public void testEnumRepresentation(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + verifyModel( em ); + + { + final String qry = "SELECT enums1 FROM EnumSetEntity_enums1_AUD ORDER BY REV ASC"; + List enums1 = em.createNativeQuery( qry, String.class ).getResultList(); + Assertions.assertThat( enums1 ).isEqualTo( List.of( "X", "Y", "X" ) ); + } + + { + final String qry = "SELECT enums2 FROM EnumSetEntity_enums2_AUD ORDER BY REV ASC"; + String enum2 = (String) em.createNativeQuery( qry, String.class ).getSingleResult(); + // Compare the String value to account for, as an example, Oracle returning a BigDecimal instead of an int. + Assertions.assertThat( enum2 ).isEqualTo( "0" ); + } + } ); } - private void verifyModel(EntityManager entityManager) { + private void verifyModel(jakarta.persistence.EntityManager entityManager) { final MappingMetamodelImplementor mappingMetamodel = entityManager.unwrap( SessionImplementor.class ) .getFactory() .getRuntimeMetamodels() @@ -151,7 +132,6 @@ private void verifyModel(EntityManager entityManager) { final CompositeIdentifierMapping cidMapping = (CompositeIdentifierMapping) entityMapping.getIdentifierMapping(); verifyMapping( cidMapping.getEmbeddableTypeDescriptor().findAttributeMapping( "element" ).getJdbcMapping( 0 ) ); } - } private void verifyMapping(JdbcMapping jdbcMapping) { diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/IndexColumnListTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/IndexColumnListTest.java index f1b4f5f5bb62..25e88af72e28 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/IndexColumnListTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/IndexColumnListTest.java @@ -12,91 +12,101 @@ import jakarta.persistence.Id; import jakarta.persistence.OrderColumn; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; - +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; -import org.hibernate.testing.transaction.TransactionUtil; -import org.junit.Test; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Chris Cranford */ @JiraKey(value = "HHH-7940") -public class IndexColumnListTest extends BaseEnversJPAFunctionalTestCase { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { Parent.class }; - } +@EnversTest +@Jpa(annotatedClasses = {IndexColumnListTest.Parent.class}) +public class IndexColumnListTest { - @Test - @Priority(10) - public void initData() { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Revision 1 - Create indexed entries. - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { + scope.inTransaction( em -> { Parent p = new Parent( 1 ); p.getChildren().add( "child1" ); p.getChildren().add( "child2" ); - entityManager.persist( p ); + em.persist( p ); } ); // Revision 2 - remove an indexed entry, resetting positions. - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - final Parent p = entityManager.find( Parent.class, 1 ); + scope.inTransaction( em -> { + final Parent p = em.find( Parent.class, 1 ); // should remove child with id 1 p.getChildren().remove( 0 ); - entityManager.merge( p ); } ); // Revision 3 - add new indexed entity to reset positions - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - final Parent p = entityManager.find( Parent.class, 1 ); + scope.inTransaction( em -> { + final Parent p = em.find( Parent.class, 1 ); // add child with id 3 p.getChildren().add( 0, "child3" ); - entityManager.merge( p ); } ); // Revision 4 - remove all children - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - final Parent p = entityManager.find( Parent.class, 1 ); + scope.inTransaction( em -> { + final Parent p = em.find( Parent.class, 1 ); p.getChildren().clear(); - entityManager.merge( p ); } ); } @Test - public void testRevisionCounts() { - assertEquals( Arrays.asList( 1, 2, 3, 4 ), getAuditReader().getRevisions( Parent.class, 1 ) ); + public void testRevisionCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1, 2, 3, 4 ), auditReader.getRevisions( Parent.class, 1 ) ); + } ); } @Test - public void testIndexedCollectionRev1() { - final Parent p = getAuditReader().find( Parent.class, 1, 1 ); - assertEquals( 2, p.getChildren().size() ); - assertEquals( Arrays.asList( "child1", "child2" ), p.getChildren() ); + public void testIndexedCollectionRev1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + final Parent p = auditReader.find( Parent.class, 1, 1 ); + assertEquals( 2, p.getChildren().size() ); + assertEquals( Arrays.asList( "child1", "child2" ), p.getChildren() ); + } ); } @Test - public void testIndexedCollectionRev2() { - final Parent p = getAuditReader().find( Parent.class, 1, 2 ); - assertEquals( 1, p.getChildren().size() ); - assertEquals( Arrays.asList( "child2" ), p.getChildren() ); + public void testIndexedCollectionRev2(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + final Parent p = auditReader.find( Parent.class, 1, 2 ); + assertEquals( 1, p.getChildren().size() ); + assertEquals( Arrays.asList( "child2" ), p.getChildren() ); + } ); } @Test - public void testIndexedCollectionRev3() { - final Parent p = getAuditReader().find( Parent.class, 1, 3 ); - assertEquals( 2, p.getChildren().size() ); - assertEquals( Arrays.asList( "child3", "child2" ), p.getChildren() ); + public void testIndexedCollectionRev3(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + final Parent p = auditReader.find( Parent.class, 1, 3 ); + assertEquals( 2, p.getChildren().size() ); + assertEquals( Arrays.asList( "child3", "child2" ), p.getChildren() ); + } ); } @Test - public void testIndexedCollectionRev4() { - final Parent p = getAuditReader().find( Parent.class, 1, 4 ); - assertEquals( 0, p.getChildren().size() ); + public void testIndexedCollectionRev4(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + final Parent p = auditReader.find( Parent.class, 1, 4 ); + assertEquals( 0, p.getChildren().size() ); + } ); } @Audited diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/OrderColumnListTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/OrderColumnListTest.java index 646a15016999..c36f3f779691 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/OrderColumnListTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/OrderColumnListTest.java @@ -13,90 +13,101 @@ import jakarta.persistence.Id; import jakarta.persistence.OrderColumn; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; -import org.hibernate.testing.transaction.TransactionUtil; -import org.junit.Test; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Chris Cranford */ @JiraKey(value = "HHH-7940") -public class OrderColumnListTest extends BaseEnversJPAFunctionalTestCase { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { Parent.class }; - } +@EnversTest +@Jpa(annotatedClasses = {OrderColumnListTest.Parent.class}) +public class OrderColumnListTest { - @Test - @Priority(10) - public void initData() { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Revision 1 - Create indexed entries. - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { + scope.inTransaction( em -> { Parent p = new Parent( 1 ); p.getChildren().add( "child1" ); p.getChildren().add( "child2" ); - entityManager.persist( p ); + em.persist( p ); } ); // Revision 2 - remove an indexed entry, resetting positions. - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - final Parent p = entityManager.find( Parent.class, 1 ); + scope.inTransaction( em -> { + final Parent p = em.find( Parent.class, 1 ); // should remove child with id 1 p.getChildren().remove( 0 ); - entityManager.merge( p ); } ); // Revision 3 - add new indexed entity to reset positions - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - final Parent p = entityManager.find( Parent.class, 1 ); + scope.inTransaction( em -> { + final Parent p = em.find( Parent.class, 1 ); // add child with id 3 p.getChildren().add( 0, "child3" ); - entityManager.merge( p ); } ); // Revision 4 - remove all children - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - final Parent p = entityManager.find( Parent.class, 1 ); + scope.inTransaction( em -> { + final Parent p = em.find( Parent.class, 1 ); p.getChildren().clear(); - entityManager.merge( p ); } ); } @Test - public void testRevisionCounts() { - assertEquals( Arrays.asList( 1, 2, 3, 4 ), getAuditReader().getRevisions( Parent.class, 1 ) ); + public void testRevisionCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1, 2, 3, 4 ), auditReader.getRevisions( Parent.class, 1 ) ); + } ); } @Test - public void testIndexedCollectionRev1() { - final Parent p = getAuditReader().find( Parent.class, 1, 1 ); - assertEquals( 2, p.getChildren().size() ); - assertEquals( Arrays.asList( "child1", "child2" ), p.getChildren() ); + public void testIndexedCollectionRev1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + final Parent p = auditReader.find( Parent.class, 1, 1 ); + assertEquals( 2, p.getChildren().size() ); + assertEquals( Arrays.asList( "child1", "child2" ), p.getChildren() ); + } ); } @Test - public void testIndexedCollectionRev2() { - final Parent p = getAuditReader().find( Parent.class, 1, 2 ); - assertEquals( 1, p.getChildren().size() ); - assertEquals( Arrays.asList( "child2" ), p.getChildren() ); + public void testIndexedCollectionRev2(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + final Parent p = auditReader.find( Parent.class, 1, 2 ); + assertEquals( 1, p.getChildren().size() ); + assertEquals( Arrays.asList( "child2" ), p.getChildren() ); + } ); } @Test - public void testIndexedCollectionRev3() { - final Parent p = getAuditReader().find( Parent.class, 1, 3 ); - assertEquals( 2, p.getChildren().size() ); - assertEquals( Arrays.asList( "child3", "child2" ), p.getChildren() ); + public void testIndexedCollectionRev3(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + final Parent p = auditReader.find( Parent.class, 1, 3 ); + assertEquals( 2, p.getChildren().size() ); + assertEquals( Arrays.asList( "child3", "child2" ), p.getChildren() ); + } ); } @Test - public void testIndexedCollectionRev4() { - final Parent p = getAuditReader().find( Parent.class, 1, 4 ); - assertEquals( 0, p.getChildren().size() ); + public void testIndexedCollectionRev4(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + final Parent p = auditReader.find( Parent.class, 1, 4 ); + assertEquals( 0, p.getChildren().size() ); + } ); } @Audited diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/StringList.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/StringList.java index da30331d9ccc..0c390e74f345 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/StringList.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/StringList.java @@ -6,102 +6,100 @@ import java.util.Arrays; import java.util.Collections; -import jakarta.persistence.EntityManager; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.orm.test.envers.entities.collection.StringListEntity; import org.hibernate.orm.test.envers.tools.TestTools; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; -import org.junit.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Adam Warski (adam at warski dot org) */ -public class StringList extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {StringListEntity.class}) +public class StringList { private Integer sle1_id; private Integer sle2_id; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {StringListEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - StringListEntity sle1 = new StringListEntity(); - StringListEntity sle2 = new StringListEntity(); - + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Revision 1 (sle1: initialy empty, sle2: initialy 2 elements) - em.getTransaction().begin(); + scope.inTransaction( em -> { + StringListEntity sle1 = new StringListEntity(); + StringListEntity sle2 = new StringListEntity(); - sle2.getStrings().add( "sle2_string1" ); - sle2.getStrings().add( "sle2_string2" ); + sle2.getStrings().add( "sle2_string1" ); + sle2.getStrings().add( "sle2_string2" ); - em.persist( sle1 ); - em.persist( sle2 ); + em.persist( sle1 ); + em.persist( sle2 ); - em.getTransaction().commit(); + sle1_id = sle1.getId(); + sle2_id = sle2.getId(); + } ); // Revision 2 (sle1: adding 2 elements, sle2: adding an existing element) - em.getTransaction().begin(); - - sle1 = em.find( StringListEntity.class, sle1.getId() ); - sle2 = em.find( StringListEntity.class, sle2.getId() ); + scope.inTransaction( em -> { + StringListEntity sle1 = em.find( StringListEntity.class, sle1_id ); + StringListEntity sle2 = em.find( StringListEntity.class, sle2_id ); - sle1.getStrings().add( "sle1_string1" ); - sle1.getStrings().add( "sle1_string2" ); + sle1.getStrings().add( "sle1_string1" ); + sle1.getStrings().add( "sle1_string2" ); - sle2.getStrings().add( "sle2_string1" ); - - em.getTransaction().commit(); + sle2.getStrings().add( "sle2_string1" ); + } ); // Revision 3 (sle1: replacing an element at index 0, sle2: removing an element at index 0) - em.getTransaction().begin(); - - sle1 = em.find( StringListEntity.class, sle1.getId() ); - sle2 = em.find( StringListEntity.class, sle2.getId() ); - - sle1.getStrings().set( 0, "sle1_string3" ); - - sle2.getStrings().remove( 0 ); - - em.getTransaction().commit(); + scope.inTransaction( em -> { + StringListEntity sle1 = em.find( StringListEntity.class, sle1_id ); + StringListEntity sle2 = em.find( StringListEntity.class, sle2_id ); - // + sle1.getStrings().set( 0, "sle1_string3" ); - sle1_id = sle1.getId(); - sle2_id = sle2.getId(); + sle2.getStrings().remove( 0 ); + } ); } @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2, 3 ).equals( getAuditReader().getRevisions( StringListEntity.class, sle1_id ) ); - assert Arrays.asList( 1, 2, 3 ).equals( getAuditReader().getRevisions( StringListEntity.class, sle2_id ) ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1, 2, 3 ), auditReader.getRevisions( StringListEntity.class, sle1_id ) ); + assertEquals( Arrays.asList( 1, 2, 3 ), auditReader.getRevisions( StringListEntity.class, sle2_id ) ); + } ); } @Test - public void testHistoryOfSle1() { - StringListEntity rev1 = getAuditReader().find( StringListEntity.class, sle1_id, 1 ); - StringListEntity rev2 = getAuditReader().find( StringListEntity.class, sle1_id, 2 ); - StringListEntity rev3 = getAuditReader().find( StringListEntity.class, sle1_id, 3 ); - - assert rev1.getStrings().equals( Collections.EMPTY_LIST ); - assert rev2.getStrings().equals( TestTools.makeList( "sle1_string1", "sle1_string2" ) ); - assert rev3.getStrings().equals( TestTools.makeList( "sle1_string3", "sle1_string2" ) ); + public void testHistoryOfSle1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + StringListEntity rev1 = auditReader.find( StringListEntity.class, sle1_id, 1 ); + StringListEntity rev2 = auditReader.find( StringListEntity.class, sle1_id, 2 ); + StringListEntity rev3 = auditReader.find( StringListEntity.class, sle1_id, 3 ); + + assertEquals( Collections.EMPTY_LIST, rev1.getStrings() ); + assertEquals( TestTools.makeList( "sle1_string1", "sle1_string2" ), rev2.getStrings() ); + assertEquals( TestTools.makeList( "sle1_string3", "sle1_string2" ), rev3.getStrings() ); + } ); } @Test - public void testHistoryOfSse2() { - StringListEntity rev1 = getAuditReader().find( StringListEntity.class, sle2_id, 1 ); - StringListEntity rev2 = getAuditReader().find( StringListEntity.class, sle2_id, 2 ); - StringListEntity rev3 = getAuditReader().find( StringListEntity.class, sle2_id, 3 ); - - assert rev1.getStrings().equals( TestTools.makeList( "sle2_string1", "sle2_string2" ) ); - assert rev2.getStrings().equals( TestTools.makeList( "sle2_string1", "sle2_string2", "sle2_string1" ) ); - assert rev3.getStrings().equals( TestTools.makeList( "sle2_string2", "sle2_string1" ) ); + public void testHistoryOfSse2(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + StringListEntity rev1 = auditReader.find( StringListEntity.class, sle2_id, 1 ); + StringListEntity rev2 = auditReader.find( StringListEntity.class, sle2_id, 2 ); + StringListEntity rev3 = auditReader.find( StringListEntity.class, sle2_id, 3 ); + + assertEquals( TestTools.makeList( "sle2_string1", "sle2_string2" ), rev1.getStrings() ); + assertEquals( TestTools.makeList( "sle2_string1", "sle2_string2", "sle2_string1" ), rev2.getStrings() ); + assertEquals( TestTools.makeList( "sle2_string2", "sle2_string1" ), rev3.getStrings() ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/StringMap.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/StringMap.java index dfd445c4e09e..fbbb60dc5b47 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/StringMap.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/StringMap.java @@ -6,113 +6,109 @@ import java.util.Arrays; import java.util.Collections; -import jakarta.persistence.EntityManager; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.orm.test.envers.entities.collection.StringMapEntity; import org.hibernate.orm.test.envers.tools.TestTools; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; -import org.junit.Test; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Adam Warski (adam at warski dot org) */ -public class StringMap extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {StringMapEntity.class}) +public class StringMap { private Integer sme1_id; private Integer sme2_id; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {StringMapEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { StringMapEntity sme1 = new StringMapEntity(); StringMapEntity sme2 = new StringMapEntity(); // Revision 1 (sme1: initialy empty, sme2: initialy 1 mapping) - em.getTransaction().begin(); - - sme2.getStrings().put( "1", "a" ); - - em.persist( sme1 ); - em.persist( sme2 ); + scope.inTransaction( em -> { + sme2.getStrings().put( "1", "a" ); - em.getTransaction().commit(); + em.persist( sme1 ); + em.persist( sme2 ); + } ); // Revision 2 (sme1: adding 2 mappings, sme2: no changes) - em.getTransaction().begin(); + scope.inTransaction( em -> { + StringMapEntity sme1Ref = em.find( StringMapEntity.class, sme1.getId() ); - sme1 = em.find( StringMapEntity.class, sme1.getId() ); - sme2 = em.find( StringMapEntity.class, sme2.getId() ); - - sme1.getStrings().put( "1", "a" ); - sme1.getStrings().put( "2", "b" ); - - em.getTransaction().commit(); + sme1Ref.getStrings().put( "1", "a" ); + sme1Ref.getStrings().put( "2", "b" ); + } ); // Revision 3 (sme1: removing an existing mapping, sme2: replacing a value) - em.getTransaction().begin(); - - sme1 = em.find( StringMapEntity.class, sme1.getId() ); - sme2 = em.find( StringMapEntity.class, sme2.getId() ); - - sme1.getStrings().remove( "1" ); - sme2.getStrings().put( "1", "b" ); + scope.inTransaction( em -> { + StringMapEntity sme1Ref = em.find( StringMapEntity.class, sme1.getId() ); + StringMapEntity sme2Ref = em.find( StringMapEntity.class, sme2.getId() ); - em.getTransaction().commit(); + sme1Ref.getStrings().remove( "1" ); + sme2Ref.getStrings().put( "1", "b" ); + } ); // No revision (sme1: removing a non-existing mapping, sme2: replacing with the same value) - em.getTransaction().begin(); - - sme1 = em.find( StringMapEntity.class, sme1.getId() ); - sme2 = em.find( StringMapEntity.class, sme2.getId() ); - - sme1.getStrings().remove( "3" ); - sme2.getStrings().put( "1", "b" ); - - em.getTransaction().commit(); + scope.inTransaction( em -> { + StringMapEntity sme1Ref = em.find( StringMapEntity.class, sme1.getId() ); + StringMapEntity sme2Ref = em.find( StringMapEntity.class, sme2.getId() ); - // + sme1Ref.getStrings().remove( "3" ); + sme2Ref.getStrings().put( "1", "b" ); + } ); sme1_id = sme1.getId(); sme2_id = sme2.getId(); } @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2, 3 ).equals( getAuditReader().getRevisions( StringMapEntity.class, sme1_id ) ); - assert Arrays.asList( 1, 3 ).equals( getAuditReader().getRevisions( StringMapEntity.class, sme2_id ) ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1, 2, 3 ), auditReader.getRevisions( StringMapEntity.class, sme1_id ) ); + assertEquals( Arrays.asList( 1, 3 ), auditReader.getRevisions( StringMapEntity.class, sme2_id ) ); + } ); } @Test - public void testHistoryOfSse1() { - StringMapEntity rev1 = getAuditReader().find( StringMapEntity.class, sme1_id, 1 ); - StringMapEntity rev2 = getAuditReader().find( StringMapEntity.class, sme1_id, 2 ); - StringMapEntity rev3 = getAuditReader().find( StringMapEntity.class, sme1_id, 3 ); - StringMapEntity rev4 = getAuditReader().find( StringMapEntity.class, sme1_id, 4 ); - - assert rev1.getStrings().equals( Collections.EMPTY_MAP ); - assert rev2.getStrings().equals( TestTools.makeMap( "1", "a", "2", "b" ) ); - assert rev3.getStrings().equals( TestTools.makeMap( "2", "b" ) ); - assert rev4.getStrings().equals( TestTools.makeMap( "2", "b" ) ); + public void testHistoryOfSse1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + StringMapEntity rev1 = auditReader.find( StringMapEntity.class, sme1_id, 1 ); + StringMapEntity rev2 = auditReader.find( StringMapEntity.class, sme1_id, 2 ); + StringMapEntity rev3 = auditReader.find( StringMapEntity.class, sme1_id, 3 ); + StringMapEntity rev4 = auditReader.find( StringMapEntity.class, sme1_id, 4 ); + + assertEquals( Collections.EMPTY_MAP, rev1.getStrings() ); + assertEquals( TestTools.makeMap( "1", "a", "2", "b" ), rev2.getStrings() ); + assertEquals( TestTools.makeMap( "2", "b" ), rev3.getStrings() ); + assertEquals( TestTools.makeMap( "2", "b" ), rev4.getStrings() ); + } ); } @Test - public void testHistoryOfSse2() { - StringMapEntity rev1 = getAuditReader().find( StringMapEntity.class, sme2_id, 1 ); - StringMapEntity rev2 = getAuditReader().find( StringMapEntity.class, sme2_id, 2 ); - StringMapEntity rev3 = getAuditReader().find( StringMapEntity.class, sme2_id, 3 ); - StringMapEntity rev4 = getAuditReader().find( StringMapEntity.class, sme2_id, 4 ); - - assert rev1.getStrings().equals( TestTools.makeMap( "1", "a" ) ); - assert rev2.getStrings().equals( TestTools.makeMap( "1", "a" ) ); - assert rev3.getStrings().equals( TestTools.makeMap( "1", "b" ) ); - assert rev4.getStrings().equals( TestTools.makeMap( "1", "b" ) ); + public void testHistoryOfSse2(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + StringMapEntity rev1 = auditReader.find( StringMapEntity.class, sme2_id, 1 ); + StringMapEntity rev2 = auditReader.find( StringMapEntity.class, sme2_id, 2 ); + StringMapEntity rev3 = auditReader.find( StringMapEntity.class, sme2_id, 3 ); + StringMapEntity rev4 = auditReader.find( StringMapEntity.class, sme2_id, 4 ); + + assertEquals( TestTools.makeMap( "1", "a" ), rev1.getStrings() ); + assertEquals( TestTools.makeMap( "1", "a" ), rev2.getStrings() ); + assertEquals( TestTools.makeMap( "1", "b" ), rev3.getStrings() ); + assertEquals( TestTools.makeMap( "1", "b" ), rev4.getStrings() ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/StringMapLobTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/StringMapLobTest.java index fb034ba0251e..4e7b6d931df0 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/StringMapLobTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/StringMapLobTest.java @@ -18,65 +18,63 @@ import org.hibernate.dialect.OracleDialect; import org.hibernate.dialect.PostgreSQLDialect; import org.hibernate.dialect.SybaseDialect; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; import org.hibernate.orm.test.envers.tools.TestTools; - -import org.hibernate.testing.SkipForDialect; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; import org.hibernate.testing.orm.junit.JiraKey; -import org.hibernate.testing.transaction.TransactionUtil; -import org.junit.Test; +import org.hibernate.testing.orm.junit.SkipForDialect; + +import org.junit.jupiter.api.Test; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Chris Cranford */ @JiraKey(value = "HHH-9834") -@SkipForDialect(OracleDialect.class) -@SkipForDialect(value = PostgreSQLDialect.class, jiraKey = "HHH-11477", comment = "@Lob field in HQL predicate fails with error about text = bigint") -@SkipForDialect(value = HANADialect.class, comment = "HANA doesn't support comparing LOBs with the = operator") -@SkipForDialect(value = SybaseDialect.class, comment = "Sybase doesn't support comparing LOBs with the = operator") -@SkipForDialect(value = DB2Dialect.class, comment = "DB2 jdbc driver doesn't support setNString") -@SkipForDialect(value = DerbyDialect.class, comment = "Derby jdbc driver doesn't support setNString") -public class StringMapLobTest extends BaseEnversJPAFunctionalTestCase { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { Simple.class }; - } - - @Test - @Priority(10) - public void initData() { - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { +@EnversTest +@Jpa(annotatedClasses = {StringMapLobTest.Simple.class}) +@SkipForDialect(dialectClass = OracleDialect.class) +@SkipForDialect(dialectClass = PostgreSQLDialect.class, matchSubTypes = true, reason = "@Lob field in HQL predicate fails with error about text = bigint") +@SkipForDialect(dialectClass = HANADialect.class, matchSubTypes = true, reason = "HANA doesn't support comparing LOBs with the = operator") +@SkipForDialect(dialectClass = SybaseDialect.class, matchSubTypes = true, reason = "Sybase doesn't support comparing LOBs with the = operator") +@SkipForDialect(dialectClass = DB2Dialect.class, matchSubTypes = true, reason = "DB2 jdbc driver doesn't support setNString") +@SkipForDialect(dialectClass = DerbyDialect.class, matchSubTypes = true, reason = "Derby jdbc driver doesn't support setNString") +public class StringMapLobTest { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + scope.inTransaction( entityManager -> { final Simple simple = new Simple( 1, "Simple" ); simple.getEmbeddedMap().put( "1", "One" ); simple.getEmbeddedMap().put( "2", "Two" ); entityManager.persist( simple ); } ); - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { + scope.inTransaction( entityManager -> { final Simple simple = entityManager.find( Simple.class, 1 ); simple.getEmbeddedMap().put( "3", "Three" ); entityManager.merge( simple ); } ); - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { + scope.inTransaction( entityManager -> { final Simple simple = entityManager.find( Simple.class, 1 ); simple.getEmbeddedMap().remove( "1" ); simple.getEmbeddedMap().remove( "2" ); entityManager.merge( simple ); } ); - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { + scope.inTransaction( entityManager -> { final Simple simple = entityManager.find( Simple.class, 1 ); simple.getEmbeddedMap().remove( "3" ); simple.getEmbeddedMap().put( "3", "Three-New" ); entityManager.merge( simple ); } ); - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { + scope.inTransaction( entityManager -> { final Simple simple = entityManager.find( Simple.class, 1 ); simple.getEmbeddedMap().clear(); entityManager.merge( simple ); @@ -84,52 +82,59 @@ public void initData() { } @Test - public void testRevisionCounts() { - assertEquals( Arrays.asList( 1, 2, 3, 4, 5 ), getAuditReader().getRevisions( Simple.class, 1 ) ); + public void testRevisionCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1, 2, 3, 4, 5 ), auditReader.getRevisions( Simple.class, 1 ) ); + } ); } @Test - public void testRevisionHistory() { - final Simple rev1 = getAuditReader().find( Simple.class, 1, 1 ); - assertEquals( 2, rev1.getEmbeddedMap().entrySet().size() ); - TestTools.assertCollectionsEqual( - TestTools.mapBuilder() - .add( "1", "One" ) - .add( "2", "Two" ) - .entries(), - rev1.getEmbeddedMap().entrySet() - ); - - final Simple rev2 = getAuditReader().find( Simple.class, 1, 2 ); - assertEquals( 3, rev2.getEmbeddedMap().entrySet().size() ); - TestTools.assertCollectionsEqual( - TestTools.mapBuilder() - .add( "1", "One" ) - .add( "2", "Two" ) - .add( "3", "Three" ) - .entries(), - rev2.getEmbeddedMap().entrySet() - ); - - final Simple rev3 = getAuditReader().find( Simple.class, 1, 3 ); - assertEquals( 1, rev3.getEmbeddedMap().entrySet().size() ); - TestTools.assertCollectionsEqual( - TestTools.mapBuilder() - .add( "3", "Three" ) - .entries(), - rev3.getEmbeddedMap().entrySet() - ); - - final Simple rev4 = getAuditReader().find( Simple.class, 1, 4 ); - TestTools.assertCollectionsEqual( - TestTools.mapBuilder() - .add( "3", "Three-New" ) - .entries(), - rev4.getEmbeddedMap().entrySet() - ); - - final Simple rev5 = getAuditReader().find( Simple.class, 1, 5 ); - assertEquals( 0, rev5.getEmbeddedMap().size() ); + public void testRevisionHistory(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + + final Simple rev1 = auditReader.find( Simple.class, 1, 1 ); + assertEquals( 2, rev1.getEmbeddedMap().entrySet().size() ); + TestTools.assertCollectionsEqual( + TestTools.mapBuilder() + .add( "1", "One" ) + .add( "2", "Two" ) + .entries(), + rev1.getEmbeddedMap().entrySet() + ); + + final Simple rev2 = auditReader.find( Simple.class, 1, 2 ); + assertEquals( 3, rev2.getEmbeddedMap().entrySet().size() ); + TestTools.assertCollectionsEqual( + TestTools.mapBuilder() + .add( "1", "One" ) + .add( "2", "Two" ) + .add( "3", "Three" ) + .entries(), + rev2.getEmbeddedMap().entrySet() + ); + + final Simple rev3 = auditReader.find( Simple.class, 1, 3 ); + assertEquals( 1, rev3.getEmbeddedMap().entrySet().size() ); + TestTools.assertCollectionsEqual( + TestTools.mapBuilder() + .add( "3", "Three" ) + .entries(), + rev3.getEmbeddedMap().entrySet() + ); + + final Simple rev4 = auditReader.find( Simple.class, 1, 4 ); + TestTools.assertCollectionsEqual( + TestTools.mapBuilder() + .add( "3", "Three-New" ) + .entries(), + rev4.getEmbeddedMap().entrySet() + ); + + final Simple rev5 = auditReader.find( Simple.class, 1, 5 ); + assertEquals( 0, rev5.getEmbeddedMap().size() ); + } ); } @Entity(name = "Simple") diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/StringMapNationalizedLobTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/StringMapNationalizedLobTest.java index c26a776d2a48..3dde7e9a6af9 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/StringMapNationalizedLobTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/StringMapNationalizedLobTest.java @@ -19,65 +19,63 @@ import org.hibernate.dialect.OracleDialect; import org.hibernate.dialect.PostgreSQLDialect; import org.hibernate.dialect.SybaseDialect; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; import org.hibernate.orm.test.envers.tools.TestTools; - -import org.hibernate.testing.SkipForDialect; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; import org.hibernate.testing.orm.junit.JiraKey; -import org.hibernate.testing.transaction.TransactionUtil; -import org.junit.Test; +import org.hibernate.testing.orm.junit.SkipForDialect; + +import org.junit.jupiter.api.Test; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Chris Cranford */ @JiraKey(value = "HHH-9834") -@SkipForDialect(OracleDialect.class) -@SkipForDialect(value = PostgreSQLDialect.class, jiraKey = "HHH-11477", comment = "@Lob field in HQL predicate fails with error about text = bigint") -@SkipForDialect(value = HANADialect.class, comment = "HANA doesn't support comparing LOBs with the = operator") -@SkipForDialect(value = SybaseDialect.class, comment = "Sybase doesn't support comparing LOBs with the = operator") -@SkipForDialect(value = DB2Dialect.class, comment = "DB2 jdbc driver doesn't support setNString") -@SkipForDialect(value = DerbyDialect.class, comment = "Derby jdbc driver doesn't support setNString") -public class StringMapNationalizedLobTest extends BaseEnversJPAFunctionalTestCase { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { Simple.class }; - } - - @Test - @Priority(10) - public void initData() { - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { +@EnversTest +@Jpa(annotatedClasses = {StringMapNationalizedLobTest.Simple.class}) +@SkipForDialect(dialectClass = OracleDialect.class) +@SkipForDialect(dialectClass = PostgreSQLDialect.class, matchSubTypes = true, reason = "@Lob field in HQL predicate fails with error about text = bigint") +@SkipForDialect(dialectClass = HANADialect.class, matchSubTypes = true, reason = "HANA doesn't support comparing LOBs with the = operator") +@SkipForDialect(dialectClass = SybaseDialect.class, matchSubTypes = true, reason = "Sybase doesn't support comparing LOBs with the = operator") +@SkipForDialect(dialectClass = DB2Dialect.class, matchSubTypes = true, reason = "DB2 jdbc driver doesn't support setNString") +@SkipForDialect(dialectClass = DerbyDialect.class, matchSubTypes = true, reason = "Derby jdbc driver doesn't support setNString") +public class StringMapNationalizedLobTest { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + scope.inTransaction( entityManager -> { final Simple simple = new Simple( 1, "Simple" ); simple.getEmbeddedMap().put( "1", "One" ); simple.getEmbeddedMap().put( "2", "Two" ); entityManager.persist( simple ); } ); - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { + scope.inTransaction( entityManager -> { final Simple simple = entityManager.find( Simple.class, 1 ); simple.getEmbeddedMap().put( "3", "Three" ); entityManager.merge( simple ); } ); - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { + scope.inTransaction( entityManager -> { final Simple simple = entityManager.find( Simple.class, 1 ); simple.getEmbeddedMap().remove( "1" ); simple.getEmbeddedMap().remove( "2" ); entityManager.merge( simple ); } ); - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { + scope.inTransaction( entityManager -> { final Simple simple = entityManager.find( Simple.class, 1 ); simple.getEmbeddedMap().remove( "3" ); simple.getEmbeddedMap().put( "3", "Three-New" ); entityManager.merge( simple ); } ); - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { + scope.inTransaction( entityManager -> { final Simple simple = entityManager.find( Simple.class, 1 ); simple.getEmbeddedMap().clear(); entityManager.merge( simple ); @@ -85,52 +83,59 @@ public void initData() { } @Test - public void testRevisionCounts() { - assertEquals( Arrays.asList( 1, 2, 3, 4, 5 ), getAuditReader().getRevisions( Simple.class, 1 ) ); + public void testRevisionCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1, 2, 3, 4, 5 ), auditReader.getRevisions( Simple.class, 1 ) ); + } ); } @Test - public void testRevisionHistory() { - final Simple rev1 = getAuditReader().find( Simple.class, 1, 1 ); - assertEquals( 2, rev1.getEmbeddedMap().entrySet().size() ); - TestTools.assertCollectionsEqual( - TestTools.mapBuilder() - .add( "1", "One" ) - .add( "2", "Two" ) - .entries(), - rev1.getEmbeddedMap().entrySet() - ); - - final Simple rev2 = getAuditReader().find( Simple.class, 1, 2 ); - assertEquals( 3, rev2.getEmbeddedMap().entrySet().size() ); - TestTools.assertCollectionsEqual( - TestTools.mapBuilder() - .add( "1", "One" ) - .add( "2", "Two" ) - .add( "3", "Three" ) - .entries(), - rev2.getEmbeddedMap().entrySet() - ); - - final Simple rev3 = getAuditReader().find( Simple.class, 1, 3 ); - assertEquals( 1, rev3.getEmbeddedMap().entrySet().size() ); - TestTools.assertCollectionsEqual( - TestTools.mapBuilder() - .add( "3", "Three" ) - .entries(), - rev3.getEmbeddedMap().entrySet() - ); - - final Simple rev4 = getAuditReader().find( Simple.class, 1, 4 ); - TestTools.assertCollectionsEqual( - TestTools.mapBuilder() - .add( "3", "Three-New" ) - .entries(), - rev4.getEmbeddedMap().entrySet() - ); - - final Simple rev5 = getAuditReader().find( Simple.class, 1, 5 ); - assertEquals( 0, rev5.getEmbeddedMap().size() ); + public void testRevisionHistory(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + + final Simple rev1 = auditReader.find( Simple.class, 1, 1 ); + assertEquals( 2, rev1.getEmbeddedMap().entrySet().size() ); + TestTools.assertCollectionsEqual( + TestTools.mapBuilder() + .add( "1", "One" ) + .add( "2", "Two" ) + .entries(), + rev1.getEmbeddedMap().entrySet() + ); + + final Simple rev2 = auditReader.find( Simple.class, 1, 2 ); + assertEquals( 3, rev2.getEmbeddedMap().entrySet().size() ); + TestTools.assertCollectionsEqual( + TestTools.mapBuilder() + .add( "1", "One" ) + .add( "2", "Two" ) + .add( "3", "Three" ) + .entries(), + rev2.getEmbeddedMap().entrySet() + ); + + final Simple rev3 = auditReader.find( Simple.class, 1, 3 ); + assertEquals( 1, rev3.getEmbeddedMap().entrySet().size() ); + TestTools.assertCollectionsEqual( + TestTools.mapBuilder() + .add( "3", "Three" ) + .entries(), + rev3.getEmbeddedMap().entrySet() + ); + + final Simple rev4 = auditReader.find( Simple.class, 1, 4 ); + TestTools.assertCollectionsEqual( + TestTools.mapBuilder() + .add( "3", "Three-New" ) + .entries(), + rev4.getEmbeddedMap().entrySet() + ); + + final Simple rev5 = auditReader.find( Simple.class, 1, 5 ); + assertEquals( 0, rev5.getEmbeddedMap().size() ); + } ); } @Entity(name = "Simple") diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/StringSet.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/StringSet.java index 683dd1d5f270..3a6f1016eccf 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/StringSet.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/StringSet.java @@ -6,101 +6,100 @@ import java.util.Arrays; import java.util.Collections; -import jakarta.persistence.EntityManager; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.orm.test.envers.entities.collection.StringSetEntity; import org.hibernate.orm.test.envers.tools.TestTools; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; -import org.junit.Test; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Adam Warski (adam at warski dot org) */ -public class StringSet extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {StringSetEntity.class}) +public class StringSet { private Integer sse1_id; private Integer sse2_id; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {StringSetEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { StringSetEntity sse1 = new StringSetEntity(); StringSetEntity sse2 = new StringSetEntity(); // Revision 1 (sse1: initialy empty, sse2: initialy 2 elements) - em.getTransaction().begin(); - - sse2.getStrings().add( "sse2_string1" ); - sse2.getStrings().add( "sse2_string2" ); + scope.inTransaction( em -> { + sse2.getStrings().add( "sse2_string1" ); + sse2.getStrings().add( "sse2_string2" ); - em.persist( sse1 ); - em.persist( sse2 ); - - em.getTransaction().commit(); + em.persist( sse1 ); + em.persist( sse2 ); + } ); // Revision 2 (sse1: adding 2 elements, sse2: adding an existing element) - em.getTransaction().begin(); - - sse1 = em.find( StringSetEntity.class, sse1.getId() ); - sse2 = em.find( StringSetEntity.class, sse2.getId() ); - - sse1.getStrings().add( "sse1_string1" ); - sse1.getStrings().add( "sse1_string2" ); + scope.inTransaction( em -> { + StringSetEntity sse1Ref = em.find( StringSetEntity.class, sse1.getId() ); + StringSetEntity sse2Ref = em.find( StringSetEntity.class, sse2.getId() ); - sse2.getStrings().add( "sse2_string1" ); + sse1Ref.getStrings().add( "sse1_string1" ); + sse1Ref.getStrings().add( "sse1_string2" ); - em.getTransaction().commit(); + sse2Ref.getStrings().add( "sse2_string1" ); + } ); // Revision 3 (sse1: removing a non-existing element, sse2: removing one element) - em.getTransaction().begin(); - - sse1 = em.find( StringSetEntity.class, sse1.getId() ); - sse2 = em.find( StringSetEntity.class, sse2.getId() ); - - sse1.getStrings().remove( "sse1_string3" ); - sse2.getStrings().remove( "sse2_string1" ); - - em.getTransaction().commit(); + scope.inTransaction( em -> { + StringSetEntity sse1Ref = em.find( StringSetEntity.class, sse1.getId() ); + StringSetEntity sse2Ref = em.find( StringSetEntity.class, sse2.getId() ); - // + sse1Ref.getStrings().remove( "sse1_string3" ); + sse2Ref.getStrings().remove( "sse2_string1" ); + } ); sse1_id = sse1.getId(); sse2_id = sse2.getId(); } @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( StringSetEntity.class, sse1_id ) ); - assert Arrays.asList( 1, 3 ).equals( getAuditReader().getRevisions( StringSetEntity.class, sse2_id ) ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1, 2 ), auditReader.getRevisions( StringSetEntity.class, sse1_id ) ); + assertEquals( Arrays.asList( 1, 3 ), auditReader.getRevisions( StringSetEntity.class, sse2_id ) ); + } ); } @Test - public void testHistoryOfSse1() { - StringSetEntity rev1 = getAuditReader().find( StringSetEntity.class, sse1_id, 1 ); - StringSetEntity rev2 = getAuditReader().find( StringSetEntity.class, sse1_id, 2 ); - StringSetEntity rev3 = getAuditReader().find( StringSetEntity.class, sse1_id, 3 ); - - assert rev1.getStrings().equals( Collections.EMPTY_SET ); - assert rev2.getStrings().equals( TestTools.makeSet( "sse1_string1", "sse1_string2" ) ); - assert rev3.getStrings().equals( TestTools.makeSet( "sse1_string1", "sse1_string2" ) ); + public void testHistoryOfSse1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + StringSetEntity rev1 = auditReader.find( StringSetEntity.class, sse1_id, 1 ); + StringSetEntity rev2 = auditReader.find( StringSetEntity.class, sse1_id, 2 ); + StringSetEntity rev3 = auditReader.find( StringSetEntity.class, sse1_id, 3 ); + + assertEquals( Collections.EMPTY_SET, rev1.getStrings() ); + assertEquals( TestTools.makeSet( "sse1_string1", "sse1_string2" ), rev2.getStrings() ); + assertEquals( TestTools.makeSet( "sse1_string1", "sse1_string2" ), rev3.getStrings() ); + } ); } @Test - public void testHistoryOfSse2() { - StringSetEntity rev1 = getAuditReader().find( StringSetEntity.class, sse2_id, 1 ); - StringSetEntity rev2 = getAuditReader().find( StringSetEntity.class, sse2_id, 2 ); - StringSetEntity rev3 = getAuditReader().find( StringSetEntity.class, sse2_id, 3 ); - - assert rev1.getStrings().equals( TestTools.makeSet( "sse2_string1", "sse2_string2" ) ); - assert rev2.getStrings().equals( TestTools.makeSet( "sse2_string1", "sse2_string2" ) ); - assert rev3.getStrings().equals( TestTools.makeSet( "sse2_string2" ) ); + public void testHistoryOfSse2(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + StringSetEntity rev1 = auditReader.find( StringSetEntity.class, sse2_id, 1 ); + StringSetEntity rev2 = auditReader.find( StringSetEntity.class, sse2_id, 2 ); + StringSetEntity rev3 = auditReader.find( StringSetEntity.class, sse2_id, 3 ); + + assertEquals( TestTools.makeSet( "sse2_string1", "sse2_string2" ), rev1.getStrings() ); + assertEquals( TestTools.makeSet( "sse2_string1", "sse2_string2" ), rev2.getStrings() ); + assertEquals( TestTools.makeSet( "sse2_string2" ), rev3.getStrings() ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/embeddable/BasicEmbeddableCollection.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/embeddable/BasicEmbeddableCollection.java index 3aab3e8dc50d..bb554ece85b9 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/embeddable/BasicEmbeddableCollection.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/embeddable/BasicEmbeddableCollection.java @@ -5,107 +5,106 @@ package org.hibernate.orm.test.envers.integration.collection.embeddable; import java.util.Arrays; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; -import junit.framework.Assert; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) */ @JiraKey(value = "HHH-6613") -public class BasicEmbeddableCollection extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {DarkCharacter.class}) +public class BasicEmbeddableCollection { private int id = -1; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {DarkCharacter.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Revision 1 - empty element collection - em.getTransaction().begin(); - DarkCharacter darkCharacter = new DarkCharacter( 1, 1 ); - em.persist( darkCharacter ); - em.getTransaction().commit(); - - id = darkCharacter.getId(); + scope.inTransaction( em -> { + DarkCharacter darkCharacter = new DarkCharacter( 1, 1 ); + em.persist( darkCharacter ); + id = darkCharacter.getId(); + } ); // Revision 2 - adding collection element - em.getTransaction().begin(); - darkCharacter = em.find( DarkCharacter.class, darkCharacter.getId() ); - darkCharacter.getNames().add( new Name( "Action", "Hank" ) ); - darkCharacter = em.merge( darkCharacter ); - em.getTransaction().commit(); + scope.inTransaction( em -> { + DarkCharacter darkCharacter = em.find( DarkCharacter.class, id ); + darkCharacter.getNames().add( new Name( "Action", "Hank" ) ); + em.merge( darkCharacter ); + } ); // Revision 3 - adding another collection element - em.getTransaction().begin(); - darkCharacter = em.find( DarkCharacter.class, darkCharacter.getId() ); - darkCharacter.getNames().add( new Name( "Green", "Lantern" ) ); - darkCharacter = em.merge( darkCharacter ); - em.getTransaction().commit(); + scope.inTransaction( em -> { + DarkCharacter darkCharacter = em.find( DarkCharacter.class, id ); + darkCharacter.getNames().add( new Name( "Green", "Lantern" ) ); + em.merge( darkCharacter ); + } ); // Revision 4 - removing single collection element - em.getTransaction().begin(); - darkCharacter = em.find( DarkCharacter.class, darkCharacter.getId() ); - darkCharacter.getNames().remove( new Name( "Action", "Hank" ) ); - darkCharacter = em.merge( darkCharacter ); - em.getTransaction().commit(); + scope.inTransaction( em -> { + DarkCharacter darkCharacter = em.find( DarkCharacter.class, id ); + darkCharacter.getNames().remove( new Name( "Action", "Hank" ) ); + em.merge( darkCharacter ); + } ); // Revision 5 - removing all collection elements - em.getTransaction().begin(); - darkCharacter = em.find( DarkCharacter.class, darkCharacter.getId() ); - darkCharacter.getNames().clear(); - darkCharacter = em.merge( darkCharacter ); - em.getTransaction().commit(); - - em.close(); + scope.inTransaction( em -> { + DarkCharacter darkCharacter = em.find( DarkCharacter.class, id ); + darkCharacter.getNames().clear(); + em.merge( darkCharacter ); + } ); } @Test - public void testRevisionsCount() { - Assert.assertEquals( Arrays.asList( 1, 2, 3, 4, 5 ), getAuditReader().getRevisions( DarkCharacter.class, id ) ); + public void testRevisionsCount(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1, 2, 3, 4, 5 ), auditReader.getRevisions( DarkCharacter.class, id ) ); + } ); } @Test - public void testHistoryOfCharacter() { - DarkCharacter darkCharacter = new DarkCharacter( id, 1 ); + public void testHistoryOfCharacter(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + DarkCharacter darkCharacter = new DarkCharacter( id, 1 ); - DarkCharacter ver1 = getAuditReader().find( DarkCharacter.class, id, 1 ); + DarkCharacter ver1 = auditReader.find( DarkCharacter.class, id, 1 ); - Assert.assertEquals( darkCharacter, ver1 ); - Assert.assertEquals( 0, ver1.getNames().size() ); + assertEquals( darkCharacter, ver1 ); + assertEquals( 0, ver1.getNames().size() ); - darkCharacter.getNames().add( new Name( "Action", "Hank" ) ); - DarkCharacter ver2 = getAuditReader().find( DarkCharacter.class, id, 2 ); + darkCharacter.getNames().add( new Name( "Action", "Hank" ) ); + DarkCharacter ver2 = auditReader.find( DarkCharacter.class, id, 2 ); - Assert.assertEquals( darkCharacter, ver2 ); - Assert.assertEquals( darkCharacter.getNames(), ver2.getNames() ); + assertEquals( darkCharacter, ver2 ); + assertEquals( darkCharacter.getNames(), ver2.getNames() ); - darkCharacter.getNames().add( new Name( "Green", "Lantern" ) ); - DarkCharacter ver3 = getAuditReader().find( DarkCharacter.class, id, 3 ); + darkCharacter.getNames().add( new Name( "Green", "Lantern" ) ); + DarkCharacter ver3 = auditReader.find( DarkCharacter.class, id, 3 ); - Assert.assertEquals( darkCharacter, ver3 ); - Assert.assertEquals( darkCharacter.getNames(), ver3.getNames() ); + assertEquals( darkCharacter, ver3 ); + assertEquals( darkCharacter.getNames(), ver3.getNames() ); - darkCharacter.getNames().remove( new Name( "Action", "Hank" ) ); - DarkCharacter ver4 = getAuditReader().find( DarkCharacter.class, id, 4 ); + darkCharacter.getNames().remove( new Name( "Action", "Hank" ) ); + DarkCharacter ver4 = auditReader.find( DarkCharacter.class, id, 4 ); - Assert.assertEquals( darkCharacter, ver4 ); - Assert.assertEquals( darkCharacter.getNames(), ver4.getNames() ); + assertEquals( darkCharacter, ver4 ); + assertEquals( darkCharacter.getNames(), ver4.getNames() ); - darkCharacter.getNames().clear(); - DarkCharacter ver5 = getAuditReader().find( DarkCharacter.class, id, 5 ); + darkCharacter.getNames().clear(); + DarkCharacter ver5 = auditReader.find( DarkCharacter.class, id, 5 ); - Assert.assertEquals( darkCharacter, ver5 ); - Assert.assertEquals( darkCharacter.getNames(), ver5.getNames() ); + assertEquals( darkCharacter, ver5 ); + assertEquals( darkCharacter.getNames(), ver5.getNames() ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/embeddable/EmbeddableList1.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/embeddable/EmbeddableList1.java index 8f603bb9efe6..9679db0c87c8 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/embeddable/EmbeddableList1.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/embeddable/EmbeddableList1.java @@ -6,24 +6,27 @@ import java.util.Arrays; import java.util.Collections; -import jakarta.persistence.EntityManager; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.orm.test.envers.entities.collection.EmbeddableListEntity1; import org.hibernate.orm.test.envers.entities.components.Component3; import org.hibernate.orm.test.envers.entities.components.Component4; - +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Kristoffer Lundberg (kristoffer at cambio dot se) */ @JiraKey(value = "HHH-6613") -public class EmbeddableList1 extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {EmbeddableListEntity1.class}) +public class EmbeddableList1 { private Integer ele1_id = null; private final Component4 c4_1 = new Component4( "c41", "c41_value", "c41_description" ); @@ -31,73 +34,65 @@ public class EmbeddableList1 extends BaseEnversJPAFunctionalTestCase { private final Component3 c3_1 = new Component3( "c31", c4_1, c4_2 ); private final Component3 c3_2 = new Component3( "c32", c4_1, c4_2 ); - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {EmbeddableListEntity1.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - EmbeddableListEntity1 ele1 = new EmbeddableListEntity1(); - + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Revision 1 (ele1: initially 1 element in both collections) - em.getTransaction().begin(); - ele1.getComponentList().add( c3_1 ); - em.persist( ele1 ); - em.getTransaction().commit(); + scope.inTransaction( em -> { + EmbeddableListEntity1 ele1 = new EmbeddableListEntity1(); + ele1.getComponentList().add( c3_1 ); + em.persist( ele1 ); + ele1_id = ele1.getId(); + } ); // Revision (still 1) (ele1: removing non-existing element) - em.getTransaction().begin(); - ele1 = em.find( EmbeddableListEntity1.class, ele1.getId() ); - ele1.getComponentList().remove( c3_2 ); - em.getTransaction().commit(); + scope.inTransaction( em -> { + EmbeddableListEntity1 ele1 = em.find( EmbeddableListEntity1.class, ele1_id ); + ele1.getComponentList().remove( c3_2 ); + } ); // Revision 2 (ele1: adding one element) - em.getTransaction().begin(); - ele1 = em.find( EmbeddableListEntity1.class, ele1.getId() ); - ele1.getComponentList().add( c3_2 ); - em.getTransaction().commit(); + scope.inTransaction( em -> { + EmbeddableListEntity1 ele1 = em.find( EmbeddableListEntity1.class, ele1_id ); + ele1.getComponentList().add( c3_2 ); + } ); // Revision 3 (ele1: adding one existing element) - em.getTransaction().begin(); - ele1 = em.find( EmbeddableListEntity1.class, ele1.getId() ); - ele1.getComponentList().add( c3_1 ); - em.getTransaction().commit(); + scope.inTransaction( em -> { + EmbeddableListEntity1 ele1 = em.find( EmbeddableListEntity1.class, ele1_id ); + ele1.getComponentList().add( c3_1 ); + } ); // Revision 4 (ele1: removing one existing element) - em.getTransaction().begin(); - ele1 = em.find( EmbeddableListEntity1.class, ele1.getId() ); - ele1.getComponentList().remove( c3_2 ); - em.getTransaction().commit(); - - ele1_id = ele1.getId(); - - em.close(); + scope.inTransaction( em -> { + EmbeddableListEntity1 ele1 = em.find( EmbeddableListEntity1.class, ele1_id ); + ele1.getComponentList().remove( c3_2 ); + } ); } @Test - public void testRevisionsCounts() { - assertEquals( - Arrays.asList( 1, 2, 3, 4 ), getAuditReader().getRevisions( - EmbeddableListEntity1.class, - ele1_id - ) - ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( + Arrays.asList( 1, 2, 3, 4 ), + auditReader.getRevisions( EmbeddableListEntity1.class, ele1_id ) + ); + } ); } @Test - public void testHistoryOfEle1() { - EmbeddableListEntity1 rev1 = getAuditReader().find( EmbeddableListEntity1.class, ele1_id, 1 ); - EmbeddableListEntity1 rev2 = getAuditReader().find( EmbeddableListEntity1.class, ele1_id, 2 ); - EmbeddableListEntity1 rev3 = getAuditReader().find( EmbeddableListEntity1.class, ele1_id, 3 ); - EmbeddableListEntity1 rev4 = getAuditReader().find( EmbeddableListEntity1.class, ele1_id, 4 ); - - assertEquals( Collections.singletonList( c3_1 ), rev1.getComponentList() ); - assertEquals( Arrays.asList( c3_1, c3_2 ), rev2.getComponentList() ); - assertEquals( Arrays.asList( c3_1, c3_2, c3_1 ), rev3.getComponentList() ); - assertEquals( Arrays.asList( c3_1, c3_1 ), rev4.getComponentList() ); + public void testHistoryOfEle1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + EmbeddableListEntity1 rev1 = auditReader.find( EmbeddableListEntity1.class, ele1_id, 1 ); + EmbeddableListEntity1 rev2 = auditReader.find( EmbeddableListEntity1.class, ele1_id, 2 ); + EmbeddableListEntity1 rev3 = auditReader.find( EmbeddableListEntity1.class, ele1_id, 3 ); + EmbeddableListEntity1 rev4 = auditReader.find( EmbeddableListEntity1.class, ele1_id, 4 ); + + assertEquals( Collections.singletonList( c3_1 ), rev1.getComponentList() ); + assertEquals( Arrays.asList( c3_1, c3_2 ), rev2.getComponentList() ); + assertEquals( Arrays.asList( c3_1, c3_2, c3_1 ), rev3.getComponentList() ); + assertEquals( Arrays.asList( c3_1, c3_1 ), rev4.getComponentList() ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/embeddable/EmbeddableList2.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/embeddable/EmbeddableList2.java index be28736e3db3..167abb03ba17 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/embeddable/EmbeddableList2.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/embeddable/EmbeddableList2.java @@ -4,22 +4,23 @@ */ package org.hibernate.orm.test.envers.integration.collection.embeddable; -import java.util.Arrays; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.orm.test.envers.entities.StrTestNoProxyEntity; import org.hibernate.orm.test.envers.entities.collection.EmbeddableListEntity2; import org.hibernate.orm.test.envers.entities.components.relations.ManyToOneEagerComponent; - +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; + +import java.util.Arrays; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertTrue; /** * Checks if many-to-one relations inside an embedded component list are being audited. @@ -27,192 +28,202 @@ * @author thiagolrc */ @JiraKey(value = "HHH-6613") -public class EmbeddableList2 extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {EmbeddableListEntity2.class, StrTestNoProxyEntity.class}) +public class EmbeddableList2 { private Integer ele_id1 = null; - private StrTestNoProxyEntity entity1 = new StrTestNoProxyEntity( "strTestEntity1" ); - private StrTestNoProxyEntity entity2 = new StrTestNoProxyEntity( "strTestEntity2" ); - private StrTestNoProxyEntity entity3 = new StrTestNoProxyEntity( "strTestEntity3" ); - private StrTestNoProxyEntity entity4 = new StrTestNoProxyEntity( "strTestEntity3" ); - private StrTestNoProxyEntity entity4Copy = null; + private StrTestNoProxyEntity entity1; + private StrTestNoProxyEntity entity2; + private StrTestNoProxyEntity entity3; + private StrTestNoProxyEntity entity4; + private StrTestNoProxyEntity entity4Copy; - private ManyToOneEagerComponent manyToOneComponent1 = new ManyToOneEagerComponent( entity1, "dataComponent1" ); - private ManyToOneEagerComponent manyToOneComponent2 = new ManyToOneEagerComponent( entity2, "dataComponent2" ); - private ManyToOneEagerComponent manyToOneComponent4 = new ManyToOneEagerComponent( entity4, "dataComponent4" ); - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {EmbeddableListEntity2.class, StrTestNoProxyEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); + private ManyToOneEagerComponent manyToOneComponent1; + private ManyToOneEagerComponent manyToOneComponent2; + private ManyToOneEagerComponent manyToOneComponent4; + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Revision 1 (ele1: saving a list with 1 many-to-one component) - em.getTransaction().begin(); - EmbeddableListEntity2 ele1 = new EmbeddableListEntity2(); - em.persist( entity1 ); //persisting the entities referenced by the components - em.persist( entity2 ); - ele1.getComponentList().add( manyToOneComponent1 ); - em.persist( ele1 ); - em.getTransaction().commit(); - ele_id1 = ele1.getId(); - - // Revision 2 (ele1: changing the component) - em.getTransaction().begin(); - ele1 = em.find( EmbeddableListEntity2.class, ele1.getId() ); - ele1.getComponentList().clear(); - ele1.getComponentList().add( manyToOneComponent2 ); - em.getTransaction().commit(); - - //Revision 3 (ele1: putting back the many-to-one component to the list) - em.getTransaction().begin(); - ele1 = em.find( EmbeddableListEntity2.class, ele1.getId() ); - ele1.getComponentList().add( manyToOneComponent1 ); - em.getTransaction().commit(); - - // Revision 4 (ele1: changing the component's entity) - em.getTransaction().begin(); - ele1 = em.find( EmbeddableListEntity2.class, ele1.getId() ); - em.persist( entity3 ); - ele1.getComponentList().get( ele1.getComponentList().indexOf( manyToOneComponent2 ) ).setEntity( entity3 ); - ele1.getComponentList() - .get( ele1.getComponentList().indexOf( manyToOneComponent2 ) ) - .setData( "dataComponent3" ); - em.getTransaction().commit(); - - // Revision 5 (ele1: adding a new many-to-one component) - em.getTransaction().begin(); - ele1 = em.find( EmbeddableListEntity2.class, ele1.getId() ); - em.persist( entity4 ); - entity4Copy = new StrTestNoProxyEntity( entity4.getStr(), entity4.getId() ); - ele1.getComponentList().add( manyToOneComponent4 ); - em.getTransaction().commit(); - - // Revision 6 (ele1: changing the component's entity properties) - em.getTransaction().begin(); - ele1 = em.find( EmbeddableListEntity2.class, ele1.getId() ); - ele1.getComponentList() - .get( ele1.getComponentList().indexOf( manyToOneComponent4 ) ) - .getEntity() - .setStr( "sat4" ); - em.getTransaction().commit(); - - // Revision 7 (ele1: removing component) - em.getTransaction().begin(); - ele1 = em.find( EmbeddableListEntity2.class, ele1.getId() ); - ele1.getComponentList().remove( ele1.getComponentList().indexOf( manyToOneComponent4 ) ); - em.getTransaction().commit(); - - // Revision 8 (ele1: removing all) - em.getTransaction().begin(); - ele1 = em.find( EmbeddableListEntity2.class, ele1.getId() ); - em.remove( ele1 ); - em.getTransaction().commit(); - - em.close(); + scope.inEntityManager( em -> { + em.getTransaction().begin(); + EmbeddableListEntity2 ele1 = new EmbeddableListEntity2(); + entity1 = new StrTestNoProxyEntity( "strTestEntity1" ); + em.persist( entity1 ); //persisting the entities referenced by the components + entity2 = new StrTestNoProxyEntity( "strTestEntity2" ); + em.persist( entity2 ); + manyToOneComponent1 = new ManyToOneEagerComponent( entity1, "dataComponent1" ); + ele1.getComponentList().add( manyToOneComponent1 ); + em.persist( ele1 ); + ele_id1 = ele1.getId(); + em.getTransaction().commit(); + + // Revision 2 (ele1: changing the component) + em.getTransaction().begin(); + ele1 = em.find( EmbeddableListEntity2.class, ele_id1 ); + ele1.getComponentList().clear(); + manyToOneComponent2 = new ManyToOneEagerComponent( entity2, "dataComponent2" ); + ele1.getComponentList().add( manyToOneComponent2 ); + em.getTransaction().commit(); + + //Revision 3 (ele1: putting back the many-to-one component to the list) + em.getTransaction().begin(); + ele1 = em.find( EmbeddableListEntity2.class, ele_id1 ); + ele1.getComponentList().add( manyToOneComponent1 ); + em.getTransaction().commit(); + + // Revision 4 (ele1: changing the component's entity) + em.getTransaction().begin(); + ele1 = em.find( EmbeddableListEntity2.class, ele_id1 ); + entity3 = new StrTestNoProxyEntity( "strTestEntity3" ); + em.persist( entity3 ); + ele1.getComponentList().get( ele1.getComponentList().indexOf( manyToOneComponent2 ) ).setEntity( entity3 ); + ele1.getComponentList() + .get( ele1.getComponentList().indexOf( manyToOneComponent2 ) ) + .setData( "dataComponent3" ); + em.getTransaction().commit(); + + // Revision 5 (ele1: adding a new many-to-one component) + em.getTransaction().begin(); + ele1 = em.find( EmbeddableListEntity2.class, ele_id1 ); + entity4 = new StrTestNoProxyEntity( "strTestEntity4" ); + em.persist( entity4 ); + entity4Copy = new StrTestNoProxyEntity( entity4.getStr(), entity4.getId() ); + manyToOneComponent4 = new ManyToOneEagerComponent( entity4, "dataComponent4" ); + ele1.getComponentList().add( manyToOneComponent4 ); + em.getTransaction().commit(); + + // Revision 6 (ele1: changing the component's entity properties) + em.getTransaction().begin(); + ele1 = em.find( EmbeddableListEntity2.class, ele_id1 ); + ele1.getComponentList() + .get( ele1.getComponentList().indexOf( manyToOneComponent4 ) ) + .getEntity() + .setStr( "sat4" ); + em.getTransaction().commit(); + + // Revision 7 (ele1: removing component) + em.getTransaction().begin(); + ele1 = em.find( EmbeddableListEntity2.class, ele_id1 ); + ele1.getComponentList().remove( ele1.getComponentList().indexOf( manyToOneComponent4 ) ); + em.getTransaction().commit(); + + // Revision 8 (ele1: removing all) + em.getTransaction().begin(); + ele1 = em.find( EmbeddableListEntity2.class, ele_id1 ); + em.remove( ele1 ); + em.getTransaction().commit(); + } ); } @Test - public void testRevisionsCounts() { - assertEquals( - Arrays.asList( 1, 2, 3, 4, 5, 7, 8 ), - getAuditReader().getRevisions( EmbeddableListEntity2.class, ele_id1 ) - ); - assertEquals( - Arrays.asList( 1 ), getAuditReader().getRevisions( StrTestNoProxyEntity.class, entity1.getId() ) - ); - assertEquals( - Arrays.asList( 1 ), getAuditReader().getRevisions( StrTestNoProxyEntity.class, entity2.getId() ) - ); - assertEquals( - Arrays.asList( 4 ), getAuditReader().getRevisions( StrTestNoProxyEntity.class, entity3.getId() ) - ); - assertEquals( - Arrays.asList( 5, 6 ), - getAuditReader().getRevisions( StrTestNoProxyEntity.class, entity4.getId() ) - ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( + Arrays.asList( 1, 2, 3, 4, 5, 7, 8 ), + auditReader.getRevisions( EmbeddableListEntity2.class, ele_id1 ) + ); + assertEquals( + Arrays.asList( 1 ), auditReader.getRevisions( StrTestNoProxyEntity.class, entity1.getId() ) + ); + assertEquals( + Arrays.asList( 1 ), auditReader.getRevisions( StrTestNoProxyEntity.class, entity2.getId() ) + ); + assertEquals( + Arrays.asList( 4 ), auditReader.getRevisions( StrTestNoProxyEntity.class, entity3.getId() ) + ); + assertEquals( + Arrays.asList( 5, 6 ), + auditReader.getRevisions( StrTestNoProxyEntity.class, entity4.getId() ) + ); + } ); } @Test - public void testManyToOneComponentList() { - // Revision 1: many-to-one component1 in the list - EmbeddableListEntity2 rev1 = getAuditReader().find( EmbeddableListEntity2.class, ele_id1, 1 ); - assertNotNull( "Revision not found", rev1 ); - assertTrue( "The component collection was not audited", rev1.getComponentList().size() > 0 ); - assertEquals( - "The component primitive property was not audited", - "dataComponent1", rev1.getComponentList().get( 0 ).getData() - ); - assertEquals( - "The component manyToOne reference was not audited", - entity1, rev1.getComponentList().get( 0 ).getEntity() - ); + public void testManyToOneComponentList(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + // Revision 1: many-to-one component1 in the list + EmbeddableListEntity2 rev1 = auditReader.find( EmbeddableListEntity2.class, ele_id1, 1 ); + assertNotNull( rev1, "Revision not found" ); + assertTrue( rev1.getComponentList().size() > 0, "The component collection was not audited" ); + assertEquals( + "dataComponent1", rev1.getComponentList().get( 0 ).getData(), + "The component primitive property was not audited" + ); + assertEquals( + entity1, rev1.getComponentList().get( 0 ).getEntity(), + "The component manyToOne reference was not audited" + ); + } ); } @Test - public void testHistoryOfEle1() { - // Revision 1: many-to-one component in the list - assertEquals( - Arrays.asList( new ManyToOneEagerComponent( entity1, "dataComponent1" ) ), - getAuditReader().find( EmbeddableListEntity2.class, ele_id1, 1 ).getComponentList() - ); - - // Revision 2: many-to-one component in the list - assertEquals( - Arrays.asList( new ManyToOneEagerComponent( entity2, "dataComponent2" ) ), - getAuditReader().find( EmbeddableListEntity2.class, ele_id1, 2 ).getComponentList() - ); - - // Revision 3: two many-to-one components in the list - assertEquals( - Arrays.asList( - new ManyToOneEagerComponent( entity2, "dataComponent2" ), - new ManyToOneEagerComponent( entity1, "dataComponent1" ) - ), - getAuditReader().find( EmbeddableListEntity2.class, ele_id1, 3 ).getComponentList() - ); - - // Revision 4: second component edited and first one in the list - assertEquals( - Arrays.asList( - new ManyToOneEagerComponent( entity3, "dataComponent3" ), - new ManyToOneEagerComponent( entity1, "dataComponent1" ) - ), - getAuditReader().find( EmbeddableListEntity2.class, ele_id1, 4 ).getComponentList() - ); - - // Revision 5: fourth component added in the list - assertEquals( - Arrays.asList( - new ManyToOneEagerComponent( entity3, "dataComponent3" ), - new ManyToOneEagerComponent( entity1, "dataComponent1" ), - new ManyToOneEagerComponent( entity4Copy, "dataComponent4" ) - ), - getAuditReader().find( EmbeddableListEntity2.class, ele_id1, 5 ).getComponentList() - ); - - // Revision 6: changing fourth component property - assertEquals( - Arrays.asList( - new ManyToOneEagerComponent( entity3, "dataComponent3" ), - new ManyToOneEagerComponent( entity1, "dataComponent1" ), - new ManyToOneEagerComponent( entity4, "dataComponent4" ) - ), - getAuditReader().find( EmbeddableListEntity2.class, ele_id1, 6 ).getComponentList() - ); - - // Revision 7: removing component number four - assertEquals( - Arrays.asList( - new ManyToOneEagerComponent( entity3, "dataComponent3" ), - new ManyToOneEagerComponent( entity1, "dataComponent1" ) - ), - getAuditReader().find( EmbeddableListEntity2.class, ele_id1, 7 ).getComponentList() - ); - - assertNull( getAuditReader().find( EmbeddableListEntity2.class, ele_id1, 8 ) ); + public void testHistoryOfEle1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + // Revision 1: many-to-one component in the list + assertEquals( + Arrays.asList( new ManyToOneEagerComponent( entity1, "dataComponent1" ) ), + auditReader.find( EmbeddableListEntity2.class, ele_id1, 1 ).getComponentList() + ); + + // Revision 2: many-to-one component in the list + assertEquals( + Arrays.asList( new ManyToOneEagerComponent( entity2, "dataComponent2" ) ), + auditReader.find( EmbeddableListEntity2.class, ele_id1, 2 ).getComponentList() + ); + + // Revision 3: two many-to-one components in the list + assertEquals( + Arrays.asList( + new ManyToOneEagerComponent( entity2, "dataComponent2" ), + new ManyToOneEagerComponent( entity1, "dataComponent1" ) + ), + auditReader.find( EmbeddableListEntity2.class, ele_id1, 3 ).getComponentList() + ); + + // Revision 4: second component edited and first one in the list + assertEquals( + Arrays.asList( + new ManyToOneEagerComponent( entity3, "dataComponent3" ), + new ManyToOneEagerComponent( entity1, "dataComponent1" ) + ), + auditReader.find( EmbeddableListEntity2.class, ele_id1, 4 ).getComponentList() + ); + + // Revision 5: fourth component added in the list + assertEquals( + Arrays.asList( + new ManyToOneEagerComponent( entity3, "dataComponent3" ), + new ManyToOneEagerComponent( entity1, "dataComponent1" ), + new ManyToOneEagerComponent( entity4Copy, "dataComponent4" ) + ), + auditReader.find( EmbeddableListEntity2.class, ele_id1, 5 ).getComponentList() + ); + + // Revision 6: changing fourth component property + assertEquals( + Arrays.asList( + new ManyToOneEagerComponent( entity3, "dataComponent3" ), + new ManyToOneEagerComponent( entity1, "dataComponent1" ), + new ManyToOneEagerComponent( entity4, "dataComponent4" ) + ), + auditReader.find( EmbeddableListEntity2.class, ele_id1, 6 ).getComponentList() + ); + + // Revision 7: removing component number four + assertEquals( + Arrays.asList( + new ManyToOneEagerComponent( entity3, "dataComponent3" ), + new ManyToOneEagerComponent( entity1, "dataComponent1" ) + ), + auditReader.find( EmbeddableListEntity2.class, ele_id1, 7 ).getComponentList() + ); + + assertNull( auditReader.find( EmbeddableListEntity2.class, ele_id1, 8 ) ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/embeddable/EmbeddableList3.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/embeddable/EmbeddableList3.java index c1049844cae3..c9a92b590750 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/embeddable/EmbeddableList3.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/embeddable/EmbeddableList3.java @@ -4,50 +4,54 @@ */ package org.hibernate.orm.test.envers.integration.collection.embeddable; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.orm.test.envers.entities.StrTestNoProxyEntity; import org.hibernate.orm.test.envers.entities.collection.EmbeddableListEntity3; import org.hibernate.orm.test.envers.entities.components.relations.ManyToOneEagerComponent; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; -import org.hibernate.testing.transaction.TransactionUtil; -import org.junit.Test; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; import java.util.Arrays; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Cankut Guven */ @JiraKey(value = "HHH-11364") -public class EmbeddableList3 extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {EmbeddableListEntity3.class, StrTestNoProxyEntity.class}) +public class EmbeddableList3 { private Integer ele3_id; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { EmbeddableListEntity3.class, StrTestNoProxyEntity.class }; - } - - @Test - @Priority(10) - public void initData() { - ele3_id = TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + scope.inTransaction( em -> { EmbeddableListEntity3 ele3 = new EmbeddableListEntity3(); ele3.getComponentList().add( new ManyToOneEagerComponent( null, "data" ) ); - entityManager.persist( ele3 ); - return ele3.getId(); + em.persist( ele3 ); + ele3_id = ele3.getId(); } ); } @Test - public void testRevisionsCounts() { - assertEquals( Arrays.asList( 1 ), getAuditReader().getRevisions( EmbeddableListEntity3.class, ele3_id) ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1 ), auditReader.getRevisions( EmbeddableListEntity3.class, ele3_id ) ); + } ); } @Test - public void testCollectionOfEmbeddableWithNullJoinColumn() { - final EmbeddableListEntity3 ele3 = getAuditReader().find( EmbeddableListEntity3.class, ele3_id, 1 ); - assertEquals( "Expected there to be elements in the list", 1, ele3.getComponentList().size() ); + public void testCollectionOfEmbeddableWithNullJoinColumn(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + final EmbeddableListEntity3 ele3 = auditReader.find( EmbeddableListEntity3.class, ele3_id, 1 ); + assertEquals( 1, ele3.getComponentList().size(), "Expected there to be elements in the list" ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/embeddable/EmbeddableMap.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/embeddable/EmbeddableMap.java index 39a21461e3c7..6edfa81bf21d 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/embeddable/EmbeddableMap.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/embeddable/EmbeddableMap.java @@ -6,24 +6,28 @@ import java.util.Arrays; import java.util.Collections; -import jakarta.persistence.EntityManager; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.orm.test.envers.entities.collection.EmbeddableMapEntity; import org.hibernate.orm.test.envers.entities.components.Component3; import org.hibernate.orm.test.envers.entities.components.Component4; import org.hibernate.orm.test.envers.tools.TestTools; - +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Assert; -import org.junit.Test; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Kristoffer Lundberg (kristoffer at cambio dot se) */ @JiraKey(value = "HHH-6613") -public class EmbeddableMap extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {EmbeddableMapEntity.class}) +public class EmbeddableMap { private Integer eme1_id = null; private Integer eme2_id = null; @@ -32,95 +36,87 @@ public class EmbeddableMap extends BaseEnversJPAFunctionalTestCase { private final Component3 c3_1 = new Component3( "c31", c4_1, c4_2 ); private final Component3 c3_2 = new Component3( "c32", c4_1, c4_2 ); - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {EmbeddableMapEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - EmbeddableMapEntity eme1 = new EmbeddableMapEntity(); - EmbeddableMapEntity eme2 = new EmbeddableMapEntity(); - + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Revision 1 (eme1: initialy empty, eme2: initialy 1 mapping) - em.getTransaction().begin(); - eme2.getComponentMap().put( "1", c3_1 ); - em.persist( eme1 ); - em.persist( eme2 ); - em.getTransaction().commit(); + scope.inTransaction( em -> { + EmbeddableMapEntity eme1 = new EmbeddableMapEntity(); + EmbeddableMapEntity eme2 = new EmbeddableMapEntity(); + eme2.getComponentMap().put( "1", c3_1 ); + em.persist( eme1 ); + em.persist( eme2 ); + eme1_id = eme1.getId(); + eme2_id = eme2.getId(); + } ); // Revision 2 (eme1: adding 2 mappings, eme2: no changes) - em.getTransaction().begin(); - eme1 = em.find( EmbeddableMapEntity.class, eme1.getId() ); - eme2 = em.find( EmbeddableMapEntity.class, eme2.getId() ); - eme1.getComponentMap().put( "1", c3_1 ); - eme1.getComponentMap().put( "2", c3_2 ); - em.getTransaction().commit(); + scope.inTransaction( em -> { + EmbeddableMapEntity eme1 = em.find( EmbeddableMapEntity.class, eme1_id ); + eme1.getComponentMap().put( "1", c3_1 ); + eme1.getComponentMap().put( "2", c3_2 ); + } ); // Revision 3 (eme1: removing an existing mapping, eme2: replacing a value) - em.getTransaction().begin(); - eme1 = em.find( EmbeddableMapEntity.class, eme1.getId() ); - eme2 = em.find( EmbeddableMapEntity.class, eme2.getId() ); - eme1.getComponentMap().remove( "1" ); - eme2.getComponentMap().put( "1", c3_2 ); - em.getTransaction().commit(); + scope.inTransaction( em -> { + EmbeddableMapEntity eme1 = em.find( EmbeddableMapEntity.class, eme1_id ); + EmbeddableMapEntity eme2 = em.find( EmbeddableMapEntity.class, eme2_id ); + eme1.getComponentMap().remove( "1" ); + eme2.getComponentMap().put( "1", c3_2 ); + } ); // No revision (eme1: removing a non-existing mapping, eme2: replacing with the same value) - em.getTransaction().begin(); - eme1 = em.find( EmbeddableMapEntity.class, eme1.getId() ); - eme2 = em.find( EmbeddableMapEntity.class, eme2.getId() ); - eme1.getComponentMap().remove( "3" ); - eme2.getComponentMap().put( "1", c3_2 ); - em.getTransaction().commit(); - - eme1_id = eme1.getId(); - eme2_id = eme2.getId(); - - em.close(); + scope.inTransaction( em -> { + EmbeddableMapEntity eme1 = em.find( EmbeddableMapEntity.class, eme1_id ); + EmbeddableMapEntity eme2 = em.find( EmbeddableMapEntity.class, eme2_id ); + eme1.getComponentMap().remove( "3" ); + eme2.getComponentMap().put( "1", c3_2 ); + } ); } @Test - public void testRevisionsCounts() { - Assert.assertEquals( - Arrays.asList( 1, 2, 3 ), getAuditReader().getRevisions( - EmbeddableMapEntity.class, - eme1_id - ) - ); - Assert.assertEquals( - Arrays.asList( 1, 3 ), getAuditReader().getRevisions( - EmbeddableMapEntity.class, - eme2_id - ) - ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( + Arrays.asList( 1, 2, 3 ), + auditReader.getRevisions( EmbeddableMapEntity.class, eme1_id ) + ); + assertEquals( + Arrays.asList( 1, 3 ), + auditReader.getRevisions( EmbeddableMapEntity.class, eme2_id ) + ); + } ); } @Test - public void testHistoryOfEme1() { - EmbeddableMapEntity rev1 = getAuditReader().find( EmbeddableMapEntity.class, eme1_id, 1 ); - EmbeddableMapEntity rev2 = getAuditReader().find( EmbeddableMapEntity.class, eme1_id, 2 ); - EmbeddableMapEntity rev3 = getAuditReader().find( EmbeddableMapEntity.class, eme1_id, 3 ); - EmbeddableMapEntity rev4 = getAuditReader().find( EmbeddableMapEntity.class, eme1_id, 4 ); - - Assert.assertEquals( Collections.EMPTY_MAP, rev1.getComponentMap() ); - Assert.assertEquals( TestTools.makeMap( "1", c3_1, "2", c3_2 ), rev2.getComponentMap() ); - Assert.assertEquals( TestTools.makeMap( "2", c3_2 ), rev3.getComponentMap() ); - Assert.assertEquals( TestTools.makeMap( "2", c3_2 ), rev4.getComponentMap() ); + public void testHistoryOfEme1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + EmbeddableMapEntity rev1 = auditReader.find( EmbeddableMapEntity.class, eme1_id, 1 ); + EmbeddableMapEntity rev2 = auditReader.find( EmbeddableMapEntity.class, eme1_id, 2 ); + EmbeddableMapEntity rev3 = auditReader.find( EmbeddableMapEntity.class, eme1_id, 3 ); + EmbeddableMapEntity rev4 = auditReader.find( EmbeddableMapEntity.class, eme1_id, 4 ); + + assertEquals( Collections.EMPTY_MAP, rev1.getComponentMap() ); + assertEquals( TestTools.makeMap( "1", c3_1, "2", c3_2 ), rev2.getComponentMap() ); + assertEquals( TestTools.makeMap( "2", c3_2 ), rev3.getComponentMap() ); + assertEquals( TestTools.makeMap( "2", c3_2 ), rev4.getComponentMap() ); + } ); } @Test - public void testHistoryOfEme2() { - EmbeddableMapEntity rev1 = getAuditReader().find( EmbeddableMapEntity.class, eme2_id, 1 ); - EmbeddableMapEntity rev2 = getAuditReader().find( EmbeddableMapEntity.class, eme2_id, 2 ); - EmbeddableMapEntity rev3 = getAuditReader().find( EmbeddableMapEntity.class, eme2_id, 3 ); - EmbeddableMapEntity rev4 = getAuditReader().find( EmbeddableMapEntity.class, eme2_id, 4 ); - - Assert.assertEquals( TestTools.makeMap( "1", c3_1 ), rev1.getComponentMap() ); - Assert.assertEquals( TestTools.makeMap( "1", c3_1 ), rev2.getComponentMap() ); - Assert.assertEquals( TestTools.makeMap( "1", c3_2 ), rev3.getComponentMap() ); - Assert.assertEquals( TestTools.makeMap( "1", c3_2 ), rev4.getComponentMap() ); + public void testHistoryOfEme2(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + EmbeddableMapEntity rev1 = auditReader.find( EmbeddableMapEntity.class, eme2_id, 1 ); + EmbeddableMapEntity rev2 = auditReader.find( EmbeddableMapEntity.class, eme2_id, 2 ); + EmbeddableMapEntity rev3 = auditReader.find( EmbeddableMapEntity.class, eme2_id, 3 ); + EmbeddableMapEntity rev4 = auditReader.find( EmbeddableMapEntity.class, eme2_id, 4 ); + + assertEquals( TestTools.makeMap( "1", c3_1 ), rev1.getComponentMap() ); + assertEquals( TestTools.makeMap( "1", c3_1 ), rev2.getComponentMap() ); + assertEquals( TestTools.makeMap( "1", c3_2 ), rev3.getComponentMap() ); + assertEquals( TestTools.makeMap( "1", c3_2 ), rev4.getComponentMap() ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/embeddable/EmbeddableSet.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/embeddable/EmbeddableSet.java index 8da68de7c02c..e6d3b9df0441 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/embeddable/EmbeddableSet.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/embeddable/EmbeddableSet.java @@ -5,25 +5,28 @@ package org.hibernate.orm.test.envers.integration.collection.embeddable; import java.util.Arrays; -import jakarta.persistence.EntityManager; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.orm.test.envers.entities.collection.EmbeddableSetEntity; import org.hibernate.orm.test.envers.entities.components.Component3; import org.hibernate.orm.test.envers.entities.components.Component4; import org.hibernate.orm.test.envers.tools.TestTools; - +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Kristoffer Lundberg (kristoffer at cambio dot se) */ @JiraKey(value = "HHH-6613") -public class EmbeddableSet extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {EmbeddableSetEntity.class}) +public class EmbeddableSet { private Integer ese1_id = null; private final Component4 c4_1 = new Component4( "c41", "c41_value", "c41_description" ); @@ -33,109 +36,101 @@ public class EmbeddableSet extends BaseEnversJPAFunctionalTestCase { private final Component3 c3_3 = new Component3( "c33", c4_1, c4_2 ); private final Component3 c3_4 = new Component3( "c34", c4_1, c4_2 ); - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {EmbeddableSetEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - EmbeddableSetEntity ese1 = new EmbeddableSetEntity(); - + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Revision 1 (ese1: initially two elements) - em.getTransaction().begin(); - ese1.getComponentSet().add( c3_1 ); - ese1.getComponentSet().add( c3_3 ); - em.persist( ese1 ); - em.getTransaction().commit(); + scope.inTransaction( em -> { + EmbeddableSetEntity ese1 = new EmbeddableSetEntity(); + ese1.getComponentSet().add( c3_1 ); + ese1.getComponentSet().add( c3_3 ); + em.persist( ese1 ); + ese1_id = ese1.getId(); + } ); // Revision (still 1) (ese1: removing non-existing element) - em.getTransaction().begin(); - ese1 = em.find( EmbeddableSetEntity.class, ese1.getId() ); - ese1.getComponentSet().remove( c3_2 ); - em.getTransaction().commit(); + scope.inTransaction( em -> { + EmbeddableSetEntity ese1 = em.find( EmbeddableSetEntity.class, ese1_id ); + ese1.getComponentSet().remove( c3_2 ); + } ); // Revision 2 (ese1: adding one element) - em.getTransaction().begin(); - ese1 = em.find( EmbeddableSetEntity.class, ese1.getId() ); - ese1.getComponentSet().add( c3_2 ); - em.getTransaction().commit(); + scope.inTransaction( em -> { + EmbeddableSetEntity ese1 = em.find( EmbeddableSetEntity.class, ese1_id ); + ese1.getComponentSet().add( c3_2 ); + } ); // Revision (still 2) (ese1: adding one existing element) - em.getTransaction().begin(); - ese1 = em.find( EmbeddableSetEntity.class, ese1.getId() ); - ese1.getComponentSet().add( c3_1 ); - em.getTransaction().commit(); + scope.inTransaction( em -> { + EmbeddableSetEntity ese1 = em.find( EmbeddableSetEntity.class, ese1_id ); + ese1.getComponentSet().add( c3_1 ); + } ); // Revision 3 (ese1: removing one existing element) - em.getTransaction().begin(); - ese1 = em.find( EmbeddableSetEntity.class, ese1.getId() ); - ese1.getComponentSet().remove( c3_2 ); - em.getTransaction().commit(); + scope.inTransaction( em -> { + EmbeddableSetEntity ese1 = em.find( EmbeddableSetEntity.class, ese1_id ); + ese1.getComponentSet().remove( c3_2 ); + } ); // Revision 4 (ese1: adding two elements) - em.getTransaction().begin(); - ese1 = em.find( EmbeddableSetEntity.class, ese1.getId() ); - ese1.getComponentSet().add( c3_2 ); - ese1.getComponentSet().add( c3_4 ); - em.getTransaction().commit(); + scope.inTransaction( em -> { + EmbeddableSetEntity ese1 = em.find( EmbeddableSetEntity.class, ese1_id ); + ese1.getComponentSet().add( c3_2 ); + ese1.getComponentSet().add( c3_4 ); + } ); // Revision 5 (ese1: removing two elements) - em.getTransaction().begin(); - ese1 = em.find( EmbeddableSetEntity.class, ese1.getId() ); - ese1.getComponentSet().remove( c3_2 ); - ese1.getComponentSet().remove( c3_4 ); - em.getTransaction().commit(); + scope.inTransaction( em -> { + EmbeddableSetEntity ese1 = em.find( EmbeddableSetEntity.class, ese1_id ); + ese1.getComponentSet().remove( c3_2 ); + ese1.getComponentSet().remove( c3_4 ); + } ); // Revision 6 (ese1: removing and adding two elements) - em.getTransaction().begin(); - ese1 = em.find( EmbeddableSetEntity.class, ese1.getId() ); - ese1.getComponentSet().remove( c3_1 ); - ese1.getComponentSet().remove( c3_3 ); - ese1.getComponentSet().add( c3_2 ); - ese1.getComponentSet().add( c3_4 ); - em.getTransaction().commit(); + scope.inTransaction( em -> { + EmbeddableSetEntity ese1 = em.find( EmbeddableSetEntity.class, ese1_id ); + ese1.getComponentSet().remove( c3_1 ); + ese1.getComponentSet().remove( c3_3 ); + ese1.getComponentSet().add( c3_2 ); + ese1.getComponentSet().add( c3_4 ); + } ); // Revision 7 (ese1: adding one element) - em.getTransaction().begin(); - ese1 = em.find( EmbeddableSetEntity.class, ese1.getId() ); - ese1.getComponentSet().add( c3_1 ); - em.getTransaction().commit(); - - ese1_id = ese1.getId(); - - em.close(); + scope.inTransaction( em -> { + EmbeddableSetEntity ese1 = em.find( EmbeddableSetEntity.class, ese1_id ); + ese1.getComponentSet().add( c3_1 ); + } ); } @Test - public void testRevisionsCounts() { - assertEquals( - Arrays.asList( 1, 2, 3, 4, 5, 6, 7 ), getAuditReader().getRevisions( - EmbeddableSetEntity.class, - ese1_id - ) - ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( + Arrays.asList( 1, 2, 3, 4, 5, 6, 7 ), + auditReader.getRevisions( EmbeddableSetEntity.class, ese1_id ) + ); + } ); } @Test - public void testHistoryOfEse1() { - EmbeddableSetEntity rev1 = getAuditReader().find( EmbeddableSetEntity.class, ese1_id, 1 ); - EmbeddableSetEntity rev2 = getAuditReader().find( EmbeddableSetEntity.class, ese1_id, 2 ); - EmbeddableSetEntity rev3 = getAuditReader().find( EmbeddableSetEntity.class, ese1_id, 3 ); - EmbeddableSetEntity rev4 = getAuditReader().find( EmbeddableSetEntity.class, ese1_id, 4 ); - EmbeddableSetEntity rev5 = getAuditReader().find( EmbeddableSetEntity.class, ese1_id, 5 ); - EmbeddableSetEntity rev6 = getAuditReader().find( EmbeddableSetEntity.class, ese1_id, 6 ); - EmbeddableSetEntity rev7 = getAuditReader().find( EmbeddableSetEntity.class, ese1_id, 7 ); - - assertEquals( TestTools.makeSet( c3_1, c3_3 ), rev1.getComponentSet() ); - assertEquals( TestTools.makeSet( c3_1, c3_2, c3_3 ), rev2.getComponentSet() ); - assertEquals( TestTools.makeSet( c3_1, c3_3 ), rev3.getComponentSet() ); - assertEquals( TestTools.makeSet( c3_1, c3_2, c3_3, c3_4 ), rev4.getComponentSet() ); - assertEquals( TestTools.makeSet( c3_1, c3_3 ), rev5.getComponentSet() ); - assertEquals( TestTools.makeSet( c3_2, c3_4 ), rev6.getComponentSet() ); - assertEquals( TestTools.makeSet( c3_2, c3_4, c3_1 ), rev7.getComponentSet() ); + public void testHistoryOfEse1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + EmbeddableSetEntity rev1 = auditReader.find( EmbeddableSetEntity.class, ese1_id, 1 ); + EmbeddableSetEntity rev2 = auditReader.find( EmbeddableSetEntity.class, ese1_id, 2 ); + EmbeddableSetEntity rev3 = auditReader.find( EmbeddableSetEntity.class, ese1_id, 3 ); + EmbeddableSetEntity rev4 = auditReader.find( EmbeddableSetEntity.class, ese1_id, 4 ); + EmbeddableSetEntity rev5 = auditReader.find( EmbeddableSetEntity.class, ese1_id, 5 ); + EmbeddableSetEntity rev6 = auditReader.find( EmbeddableSetEntity.class, ese1_id, 6 ); + EmbeddableSetEntity rev7 = auditReader.find( EmbeddableSetEntity.class, ese1_id, 7 ); + + assertEquals( TestTools.makeSet( c3_1, c3_3 ), rev1.getComponentSet() ); + assertEquals( TestTools.makeSet( c3_1, c3_2, c3_3 ), rev2.getComponentSet() ); + assertEquals( TestTools.makeSet( c3_1, c3_3 ), rev3.getComponentSet() ); + assertEquals( TestTools.makeSet( c3_1, c3_2, c3_3, c3_4 ), rev4.getComponentSet() ); + assertEquals( TestTools.makeSet( c3_1, c3_3 ), rev5.getComponentSet() ); + assertEquals( TestTools.makeSet( c3_2, c3_4 ), rev6.getComponentSet() ); + assertEquals( TestTools.makeSet( c3_2, c3_4, c3_1 ), rev7.getComponentSet() ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/embeddable/ListEqualsHashCodeTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/embeddable/ListEqualsHashCodeTest.java index 19214689bf33..a80c5741adde 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/embeddable/ListEqualsHashCodeTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/embeddable/ListEqualsHashCodeTest.java @@ -4,30 +4,32 @@ */ package org.hibernate.orm.test.envers.integration.collection.embeddable; -import java.io.Serializable; -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; - import jakarta.persistence.Column; import jakarta.persistence.ElementCollection; import jakarta.persistence.Embeddable; import jakarta.persistence.Entity; import jakarta.persistence.Id; import jakarta.persistence.OrderColumn; - +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.Audited; import org.hibernate.envers.strategy.ValidityAuditStrategy; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.junit.Test; - +import org.hibernate.envers.strategy.internal.DefaultAuditStrategy; +import org.hibernate.testing.envers.RequiresAuditStrategy; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; -import static org.hibernate.testing.transaction.TransactionUtil.doInJPA; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.fail; +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.fail; /** * This test verifies that when a list-based {@link ElementCollection} of {@link Embeddable} objects @@ -37,18 +39,14 @@ * @author Chris Cranford */ @JiraKey(value = "HHH-12607") -public class ListEqualsHashCodeTest extends BaseEnversJPAFunctionalTestCase { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { TestEntity.class }; - } - - @Test - @Priority(10) - public void initData() { +@EnversTest +@Jpa(annotatedClasses = {ListEqualsHashCodeTest.TestEntity.class}) +public class ListEqualsHashCodeTest { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { final Emb emb1 = new Emb( "value1" ); final Emb emb2 = new Emb( "value2" ); - doInJPA( this::entityManagerFactory, entityManager -> { + scope.inTransaction( entityManager -> { TestEntity e = new TestEntity( 1 ); e.setEmbs1( new ArrayList<>() ); e.getEmbs1().add( emb1 ); @@ -56,7 +54,7 @@ public void initData() { entityManager.persist( e ); } ); - doInJPA( this::entityManagerFactory, entityManager -> { + scope.inTransaction( entityManager -> { TestEntity e = entityManager.find( TestEntity.class, 1 ); for ( Emb emb : e.getEmbs1() ) { if ( emb.getValue().equals( "value1" ) ) { @@ -69,65 +67,67 @@ public void initData() { } @Test - public void testAuditRowsForValidityAuditStrategy() { - if ( ValidityAuditStrategy.class.getName().equals( getAuditStrategy() ) ) { - doInJPA( this::entityManagerFactory, entityManager -> { - Long results = entityManager - .createQuery( - "SELECT COUNT(1) FROM TestEntity_embs1_AUD WHERE REVEND IS NULL", - Long.class - ) - .getSingleResult(); - - assertNotNull( results ); - assertEquals( Long.valueOf( 4 ), results ); - } ); - - doInJPA( this::entityManagerFactory, entityManager -> { - Long results = entityManager - .createQuery( - "SELECT COUNT(1) FROM TestEntity_embs1_AUD", - Long.class - ) - .getSingleResult(); - - assertNotNull( results ); - assertEquals( Long.valueOf( 6 ), results ); - } ); - } + @RequiresAuditStrategy(ValidityAuditStrategy.class) + public void testAuditRowsForValidityAuditStrategy(EntityManagerFactoryScope scope) { + scope.inEntityManager( entityManager -> { + Long results = entityManager + .createQuery( + "SELECT COUNT(1) FROM TestEntity_embs1_AUD WHERE REVEND IS NULL", + Long.class + ) + .getSingleResult(); + + assertNotNull( results ); + assertEquals( Long.valueOf( 4 ), results ); + + results = entityManager + .createQuery( + "SELECT COUNT(1) FROM TestEntity_embs1_AUD", + Long.class + ) + .getSingleResult(); + + assertNotNull( results ); + assertEquals( Long.valueOf( 6 ), results ); + } ); } @Test - public void testAuditRowsForDefaultAuditStrategy() { - if ( !ValidityAuditStrategy.class.getName().equals( getAuditStrategy() ) ) { - doInJPA( this::entityManagerFactory, entityManager -> { - Long results = entityManager - .createQuery( - "SELECT COUNT(1) FROM TestEntity_embs1_AUD", - Long.class - ) - .getSingleResult(); - - assertNotNull( results ); - assertEquals( Long.valueOf( 6 ), results ); - } ); - } + @RequiresAuditStrategy(DefaultAuditStrategy.class) + public void testAuditRowsForDefaultAuditStrategy(EntityManagerFactoryScope scope) { + scope.inEntityManager( entityManager -> { + Long results = entityManager + .createQuery( + "SELECT COUNT(1) FROM TestEntity_embs1_AUD", + Long.class + ) + .getSingleResult(); + + assertNotNull( results ); + assertEquals( Long.valueOf( 6 ), results ); + } ); } @Test - public void testRevisionHistory1() { - TestEntity e = getAuditReader().find( TestEntity.class, 1, 1 ); - assertEquals( 2, e.getEmbs1().size() ); - assertHasEmbeddableWithValue( e, "value1" ); - assertHasEmbeddableWithValue( e, "value2" ); + public void testRevisionHistory1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + TestEntity e = auditReader.find( TestEntity.class, 1, 1 ); + assertEquals( 2, e.getEmbs1().size() ); + assertHasEmbeddableWithValue( e, "value1" ); + assertHasEmbeddableWithValue( e, "value2" ); + } ); } @Test - public void testRevisionHistory2() { - TestEntity e = getAuditReader().find( TestEntity.class, 1, 2 ); - assertEquals( 2, e.getEmbs1().size() ); - assertHasEmbeddableWithValue( e, "value3" ); - assertHasEmbeddableWithValue( e, "value2" ); + public void testRevisionHistory2(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + TestEntity e = auditReader.find( TestEntity.class, 1, 2 ); + assertEquals( 2, e.getEmbs1().size() ); + assertHasEmbeddableWithValue( e, "value3" ); + assertHasEmbeddableWithValue( e, "value2" ); + } ); } private static void assertHasEmbeddableWithValue(TestEntity entity, String value) { diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/embeddable/ListNoEqualsHashCodeTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/embeddable/ListNoEqualsHashCodeTest.java index 2ebaa2d5ebd4..d011934a9d4c 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/embeddable/ListNoEqualsHashCodeTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/embeddable/ListNoEqualsHashCodeTest.java @@ -4,29 +4,31 @@ */ package org.hibernate.orm.test.envers.integration.collection.embeddable; -import java.io.Serializable; -import java.util.ArrayList; -import java.util.List; - import jakarta.persistence.Column; import jakarta.persistence.ElementCollection; import jakarta.persistence.Embeddable; import jakarta.persistence.Entity; import jakarta.persistence.Id; import jakarta.persistence.OrderColumn; - +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.Audited; import org.hibernate.envers.strategy.ValidityAuditStrategy; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.junit.Test; - +import org.hibernate.envers.strategy.internal.DefaultAuditStrategy; +import org.hibernate.testing.envers.RequiresAuditStrategy; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; -import static org.hibernate.testing.transaction.TransactionUtil.doInJPA; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.fail; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.fail; /** * This test verifies that when a list-based {@link ElementCollection} of {@link Embeddable} objects @@ -36,18 +38,14 @@ * @author Chris Cranford */ @JiraKey(value = "HHH-12607") -public class ListNoEqualsHashCodeTest extends BaseEnversJPAFunctionalTestCase { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { TestEntity.class }; - } - - @Test - @Priority(10) - public void initData() { +@EnversTest +@Jpa(annotatedClasses = {ListNoEqualsHashCodeTest.TestEntity.class}) +public class ListNoEqualsHashCodeTest { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { final Emb emb1 = new Emb( "value1" ); final Emb emb2 = new Emb( "value2" ); - doInJPA( this::entityManagerFactory, entityManager -> { + scope.inTransaction( entityManager -> { TestEntity e = new TestEntity( 1 ); e.setEmbs1( new ArrayList<>() ); e.getEmbs1().add( emb1 ); @@ -55,7 +53,7 @@ public void initData() { entityManager.persist( e ); } ); - doInJPA( this::entityManagerFactory, entityManager -> { + scope.inTransaction( entityManager -> { TestEntity e = entityManager.find( TestEntity.class, 1 ); for ( Emb emb : e.getEmbs1() ) { if ( emb.getValue().equals( "value1" ) ) { @@ -68,65 +66,67 @@ public void initData() { } @Test - public void testAuditRowsForValidityAuditStrategy() { - if ( ValidityAuditStrategy.class.getName().equals( getAuditStrategy() ) ) { - doInJPA( this::entityManagerFactory, entityManager -> { - Long results = entityManager - .createQuery( - "SELECT COUNT(1) FROM TestEntity_embs1_AUD WHERE REVEND IS NULL", - Long.class - ) - .getSingleResult(); - - assertNotNull( results ); - assertEquals( Long.valueOf( 4 ), results ); - } ); - - doInJPA( this::entityManagerFactory, entityManager -> { - Long results = entityManager - .createQuery( - "SELECT COUNT(1) FROM TestEntity_embs1_AUD", - Long.class - ) - .getSingleResult(); - - assertNotNull( results ); - assertEquals( Long.valueOf( 6 ), results ); - } ); - } + @RequiresAuditStrategy(ValidityAuditStrategy.class) + public void testAuditRowsForValidityAuditStrategy(EntityManagerFactoryScope scope) { + scope.inEntityManager( entityManager -> { + Long results = entityManager + .createQuery( + "SELECT COUNT(1) FROM TestEntity_embs1_AUD WHERE REVEND IS NULL", + Long.class + ) + .getSingleResult(); + + assertNotNull( results ); + assertEquals( Long.valueOf( 4 ), results ); + + results = entityManager + .createQuery( + "SELECT COUNT(1) FROM TestEntity_embs1_AUD", + Long.class + ) + .getSingleResult(); + + assertNotNull( results ); + assertEquals( Long.valueOf( 6 ), results ); + } ); } @Test - public void testAuditRowsForDefaultAuditStrategy() { - if ( !ValidityAuditStrategy.class.getName().equals( getAuditStrategy() ) ) { - doInJPA( this::entityManagerFactory, entityManager -> { - Long results = entityManager - .createQuery( - "SELECT COUNT(1) FROM TestEntity_embs1_AUD", - Long.class - ) - .getSingleResult(); - - assertNotNull( results ); - assertEquals( Long.valueOf( 6 ), results ); - } ); - } + @RequiresAuditStrategy(DefaultAuditStrategy.class) + public void testAuditRowsForDefaultAuditStrategy(EntityManagerFactoryScope scope) { + scope.inEntityManager( entityManager -> { + Long results = entityManager + .createQuery( + "SELECT COUNT(1) FROM TestEntity_embs1_AUD", + Long.class + ) + .getSingleResult(); + + assertNotNull( results ); + assertEquals( Long.valueOf( 6 ), results ); + } ); } @Test - public void testRevisionHistory1() { - TestEntity e = getAuditReader().find( TestEntity.class, 1, 1 ); - assertEquals( 2, e.getEmbs1().size() ); - assertHasEmbeddableWithValue( e, "value1" ); - assertHasEmbeddableWithValue( e, "value2" ); + public void testRevisionHistory1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + TestEntity e = auditReader.find( TestEntity.class, 1, 1 ); + assertEquals( 2, e.getEmbs1().size() ); + assertHasEmbeddableWithValue( e, "value1" ); + assertHasEmbeddableWithValue( e, "value2" ); + } ); } @Test - public void testRevisionHistory2() { - TestEntity e = getAuditReader().find( TestEntity.class, 1, 2 ); - assertEquals( 2, e.getEmbs1().size() ); - assertHasEmbeddableWithValue( e, "value3" ); - assertHasEmbeddableWithValue( e, "value2" ); + public void testRevisionHistory2(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + TestEntity e = auditReader.find( TestEntity.class, 1, 2 ); + assertEquals( 2, e.getEmbs1().size() ); + assertHasEmbeddableWithValue( e, "value3" ); + assertHasEmbeddableWithValue( e, "value2" ); + } ); } private static void assertHasEmbeddableWithValue(TestEntity entity, String value) { diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/embeddable/MapEqualsHashCodeTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/embeddable/MapEqualsHashCodeTest.java index ea21c28b7a15..fd31192dacfb 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/embeddable/MapEqualsHashCodeTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/embeddable/MapEqualsHashCodeTest.java @@ -4,36 +4,38 @@ */ package org.hibernate.orm.test.envers.integration.collection.embeddable; -import java.io.Serializable; -import java.util.HashMap; -import java.util.Map; -import java.util.Objects; - import jakarta.persistence.Column; import jakarta.persistence.ElementCollection; import jakarta.persistence.Embeddable; import jakarta.persistence.Entity; import jakarta.persistence.Id; - +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.Audited; import org.hibernate.envers.strategy.ValidityAuditStrategy; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.junit.Test; - +import org.hibernate.envers.strategy.internal.DefaultAuditStrategy; +import org.hibernate.testing.envers.RequiresAuditStrategy; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; -import static org.hibernate.testing.transaction.TransactionUtil.doInJPA; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; +import java.io.Serializable; +import java.util.HashMap; +import java.util.Map; +import java.util.Objects; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; /** * This test verifies that when a map-based {@link ElementCollection} of {@link Embeddable} objects * are audited that the same number of audit rows are generated regardless whether the embeddable * implements proper {@code equals} and {@code hashCode} methods. - * + *

    * The {@link ValidityAuditStrategy} with equals/hashcode. - * + *

    * +-----+---------+---------------+-----------+--------+--------+ * | REV | REVTYPE | TESTENTITY_ID | EMBS1_KEY | REVEND | VALUE | * +-----+---------+---------------+-----------+--------+--------+ @@ -42,9 +44,9 @@ * | 2 | 0 | 1 | a | null | value3 | * | 2 | 2 | 1 | a | null | value1 | * +-----+---------+---------------+-----------+--------+--------+ - * + *

    * The {@link org.hibernate.envers.strategy.DefaultAuditStrategy} with equals/hashcode. - * + *

    * +-----+---------+---------------+-----------+--------+ * | REV | REVTYPE | TESTENTITY_ID | EMBS1_KEY | VALUE | * +-----+---------+---------------+-----------+--------+ @@ -53,22 +55,18 @@ * | 2 | 0 | 1 | a | value3 | * | 2 | 2 | 1 | a | value1 | * +-----+---------+---------------+-----------+--------+ - * + *

    * This test uses hashcode and equals as a baseline. * * @author Chris Cranford */ @JiraKey(value = "HHH-12607") -public class MapEqualsHashCodeTest extends BaseEnversJPAFunctionalTestCase { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { TestEntity.class }; - } - - @Test - @Priority(10) - public void initData() { - doInJPA( this::entityManagerFactory, entityManager -> { +@EnversTest +@Jpa(annotatedClasses = {MapEqualsHashCodeTest.TestEntity.class}) +public class MapEqualsHashCodeTest { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + scope.inTransaction( entityManager -> { TestEntity e = new TestEntity( 1 ); e.setEmbs1( new HashMap<>() ); e.getEmbs1().put( "a", new Emb( "value1" ) ); @@ -76,72 +74,74 @@ public void initData() { entityManager.persist( e ); } ); - doInJPA( this::entityManagerFactory, entityManager -> { + scope.inTransaction( entityManager -> { TestEntity e = entityManager.find( TestEntity.class, 1 ); e.getEmbs1().put( "a", new Emb( "value3" ) ); } ); } @Test - public void testAuditRowsForValidityAuditStrategy() { - if ( ValidityAuditStrategy.class.getName().equals( getAuditStrategy() ) ) { - doInJPA( this::entityManagerFactory, entityManager -> { - Long results = entityManager - .createQuery( - "SELECT COUNT(1) FROM TestEntity_embs1_AUD WHERE REVEND IS NULL", - Long.class - ) - .getSingleResult(); - - assertNotNull( results ); - assertEquals( Long.valueOf( 3 ), results ); - } ); - - doInJPA( this::entityManagerFactory, entityManager -> { - Long results = entityManager - .createQuery( - "SELECT COUNT(1) FROM TestEntity_embs1_AUD", - Long.class - ) - .getSingleResult(); - - assertNotNull( results ); - assertEquals( Long.valueOf( 4 ), results ); - } ); - } + @RequiresAuditStrategy(ValidityAuditStrategy.class) + public void testAuditRowsForValidityAuditStrategy(EntityManagerFactoryScope scope) { + scope.inEntityManager( entityManager -> { + Long results = entityManager + .createQuery( + "SELECT COUNT(1) FROM TestEntity_embs1_AUD WHERE REVEND IS NULL", + Long.class + ) + .getSingleResult(); + + assertNotNull( results ); + assertEquals( Long.valueOf( 3 ), results ); + + results = entityManager + .createQuery( + "SELECT COUNT(1) FROM TestEntity_embs1_AUD", + Long.class + ) + .getSingleResult(); + + assertNotNull( results ); + assertEquals( Long.valueOf( 4 ), results ); + } ); } @Test - public void testAuditRowsForDefaultAuditStrategy() { - if ( !ValidityAuditStrategy.class.getName().equals( getAuditStrategy() ) ) { - doInJPA( this::entityManagerFactory, entityManager -> { - Long results = entityManager - .createQuery( - "SELECT COUNT(1) FROM TestEntity_embs1_AUD", - Long.class - ) - .getSingleResult(); - - assertNotNull( results ); - assertEquals( Long.valueOf( 4 ), results ); - } ); - } + @RequiresAuditStrategy(DefaultAuditStrategy.class) + public void testAuditRowsForDefaultAuditStrategy(EntityManagerFactoryScope scope) { + scope.inEntityManager( entityManager -> { + Long results = entityManager + .createQuery( + "SELECT COUNT(1) FROM TestEntity_embs1_AUD", + Long.class + ) + .getSingleResult(); + + assertNotNull( results ); + assertEquals( Long.valueOf( 4 ), results ); + } ); } @Test - public void testRevisionHistory1() { - TestEntity e = getAuditReader().find( TestEntity.class, 1, 1 ); - assertEquals( 2, e.getEmbs1().size() ); - assertEquals( "value1", e.getEmbs1().get( "a" ).getValue() ); - assertEquals( "value2", e.getEmbs1().get( "b" ).getValue() ); + public void testRevisionHistory1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + TestEntity e = auditReader.find( TestEntity.class, 1, 1 ); + assertEquals( 2, e.getEmbs1().size() ); + assertEquals( "value1", e.getEmbs1().get( "a" ).getValue() ); + assertEquals( "value2", e.getEmbs1().get( "b" ).getValue() ); + } ); } @Test - public void testRevisionHistory2() { - TestEntity e = getAuditReader().find( TestEntity.class, 1, 2 ); - assertEquals( 2, e.getEmbs1().size() ); - assertEquals( "value3", e.getEmbs1().get( "a" ).getValue() ); - assertEquals( "value2", e.getEmbs1().get( "b" ).getValue() ); + public void testRevisionHistory2(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + TestEntity e = auditReader.find( TestEntity.class, 1, 2 ); + assertEquals( 2, e.getEmbs1().size() ); + assertEquals( "value3", e.getEmbs1().get( "a" ).getValue() ); + assertEquals( "value2", e.getEmbs1().get( "b" ).getValue() ); + } ); } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/embeddable/MapNoEqualsHashCodeTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/embeddable/MapNoEqualsHashCodeTest.java index 8ec96355164a..8e4cc49b6c19 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/embeddable/MapNoEqualsHashCodeTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/embeddable/MapNoEqualsHashCodeTest.java @@ -4,35 +4,37 @@ */ package org.hibernate.orm.test.envers.integration.collection.embeddable; -import java.io.Serializable; -import java.util.HashMap; -import java.util.Map; - import jakarta.persistence.Column; import jakarta.persistence.ElementCollection; import jakarta.persistence.Embeddable; import jakarta.persistence.Entity; import jakarta.persistence.Id; - +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.Audited; import org.hibernate.envers.strategy.ValidityAuditStrategy; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.junit.Test; - +import org.hibernate.envers.strategy.internal.DefaultAuditStrategy; +import org.hibernate.testing.envers.RequiresAuditStrategy; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; -import static org.hibernate.testing.transaction.TransactionUtil.doInJPA; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; +import java.io.Serializable; +import java.util.HashMap; +import java.util.Map; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; /** * This test verifies that when a map-based {@link ElementCollection} of {@link Embeddable} objects * are audited that the same number of audit rows are generated regardless whether the embeddable * implements proper {@code equals} and {@code hashCode} methods. - * + *

    * The {@link ValidityAuditStrategy} with equals/hashcode. - * + *

    * +-----+---------+---------------+-----------+--------+--------+ * | REV | REVTYPE | TESTENTITY_ID | EMBS1_KEY | REVEND | VALUE | * +-----+---------+---------------+-----------+--------+--------+ @@ -41,9 +43,9 @@ * | 2 | 0 | 1 | a | null | value3 | * | 2 | 2 | 1 | a | null | value1 | * +-----+---------+---------------+-----------+--------+--------+ - * + *

    * The {@link org.hibernate.envers.strategy.DefaultAuditStrategy} with equals/hashcode. - * + *

    * +-----+---------+---------------+-----------+--------+ * | REV | REVTYPE | TESTENTITY_ID | EMBS1_KEY | VALUE | * +-----+---------+---------------+-----------+--------+ @@ -56,16 +58,12 @@ * @author Chris Cranford */ @JiraKey(value = "HHH-12607") -public class MapNoEqualsHashCodeTest extends BaseEnversJPAFunctionalTestCase { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { TestEntity.class }; - } - - @Test - @Priority(10) - public void initData() { - doInJPA( this::entityManagerFactory, entityManager -> { +@EnversTest +@Jpa(annotatedClasses = {MapNoEqualsHashCodeTest.TestEntity.class}) +public class MapNoEqualsHashCodeTest { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + scope.inTransaction( entityManager -> { TestEntity e = new TestEntity( 1 ); e.setEmbs1( new HashMap<>() ); e.getEmbs1().put( "a", new Emb( "value1" ) ); @@ -73,72 +71,74 @@ public void initData() { entityManager.persist( e ); } ); - doInJPA( this::entityManagerFactory, entityManager -> { + scope.inTransaction( entityManager -> { TestEntity e = entityManager.find( TestEntity.class, 1 ); e.getEmbs1().put( "a", new Emb( "value3" ) ); } ); } @Test - public void testAuditRowsForValidityAuditStrategy() { - if ( ValidityAuditStrategy.class.getName().equals( getAuditStrategy() ) ) { - doInJPA( this::entityManagerFactory, entityManager -> { - Long results = entityManager - .createQuery( - "SELECT COUNT(1) FROM TestEntity_embs1_AUD WHERE REVEND IS NULL", - Long.class - ) - .getSingleResult(); - - assertNotNull( results ); - assertEquals( Long.valueOf( 3 ), results ); - } ); - - doInJPA( this::entityManagerFactory, entityManager -> { - Long results = entityManager - .createQuery( - "SELECT COUNT(1) FROM TestEntity_embs1_AUD", - Long.class - ) - .getSingleResult(); - - assertNotNull( results ); - assertEquals( Long.valueOf( 4 ), results ); - } ); - } + @RequiresAuditStrategy(ValidityAuditStrategy.class) + public void testAuditRowsForValidityAuditStrategy(EntityManagerFactoryScope scope) { + scope.inEntityManager( entityManager -> { + Long results = entityManager + .createQuery( + "SELECT COUNT(1) FROM TestEntity_embs1_AUD WHERE REVEND IS NULL", + Long.class + ) + .getSingleResult(); + + assertNotNull( results ); + assertEquals( Long.valueOf( 3 ), results ); + + results = entityManager + .createQuery( + "SELECT COUNT(1) FROM TestEntity_embs1_AUD", + Long.class + ) + .getSingleResult(); + + assertNotNull( results ); + assertEquals( Long.valueOf( 4 ), results ); + } ); } @Test - public void testAuditRowsForDefaultAuditStrategy() { - if ( !ValidityAuditStrategy.class.getName().equals( getAuditStrategy() ) ) { - doInJPA( this::entityManagerFactory, entityManager -> { - Long results = entityManager - .createQuery( - "SELECT COUNT(1) FROM TestEntity_embs1_AUD", - Long.class - ) - .getSingleResult(); - - assertNotNull( results ); - assertEquals( Long.valueOf( 4 ), results ); - } ); - } + @RequiresAuditStrategy(DefaultAuditStrategy.class) + public void testAuditRowsForDefaultAuditStrategy(EntityManagerFactoryScope scope) { + scope.inEntityManager( entityManager -> { + Long results = entityManager + .createQuery( + "SELECT COUNT(1) FROM TestEntity_embs1_AUD", + Long.class + ) + .getSingleResult(); + + assertNotNull( results ); + assertEquals( Long.valueOf( 4 ), results ); + } ); } @Test - public void testRevisionHistory1() { - TestEntity e = getAuditReader().find( TestEntity.class, 1, 1 ); - assertEquals( 2, e.getEmbs1().size() ); - assertEquals( "value1", e.getEmbs1().get( "a" ).getValue() ); - assertEquals( "value2", e.getEmbs1().get( "b" ).getValue() ); + public void testRevisionHistory1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + TestEntity e = auditReader.find( TestEntity.class, 1, 1 ); + assertEquals( 2, e.getEmbs1().size() ); + assertEquals( "value1", e.getEmbs1().get( "a" ).getValue() ); + assertEquals( "value2", e.getEmbs1().get( "b" ).getValue() ); + } ); } @Test - public void testRevisionHistory2() { - TestEntity e = getAuditReader().find( TestEntity.class, 1, 2 ); - assertEquals( 2, e.getEmbs1().size() ); - assertEquals( "value3", e.getEmbs1().get( "a" ).getValue() ); - assertEquals( "value2", e.getEmbs1().get( "b" ).getValue() ); + public void testRevisionHistory2(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + TestEntity e = auditReader.find( TestEntity.class, 1, 2 ); + assertEquals( 2, e.getEmbs1().size() ); + assertEquals( "value3", e.getEmbs1().get( "a" ).getValue() ); + assertEquals( "value2", e.getEmbs1().get( "b" ).getValue() ); + } ); } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/embeddable/NullPointerExceptionTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/embeddable/NullPointerExceptionTest.java index bc62217f3d98..41a0b4f259e6 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/embeddable/NullPointerExceptionTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/embeddable/NullPointerExceptionTest.java @@ -5,41 +5,31 @@ package org.hibernate.orm.test.envers.integration.collection.embeddable; import java.util.Arrays; -import java.util.Map; -import org.hibernate.envers.configuration.EnversSettings; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.strategy.ValidityAuditStrategy; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; -import org.hibernate.testing.transaction.TransactionUtil; -import org.junit.Test; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Chris Cranford */ @JiraKey(value = "HHH-11215") -public class NullPointerExceptionTest extends BaseEnversJPAFunctionalTestCase { +@EnversTest(auditStrategies = ValidityAuditStrategy.class) +@Jpa(annotatedClasses = {Product.class, Type.class}) +public class NullPointerExceptionTest { private Integer productId; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { Product.class, Type.class }; - } - - @Override - protected void addConfigOptions(Map options) { - super.addConfigOptions( options ); - options.put( EnversSettings.AUDIT_STRATEGY, ValidityAuditStrategy.class.getName() ); - } - - @Test - @Priority(10) - public void initData() { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Revision 1 - this.productId = TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { + this.productId = scope.fromTransaction( entityManager -> { Product product = new Product( 1 , "Test" ); product.getItems().add( new Item( "bread", null ) ); entityManager.persist( product ); @@ -47,7 +37,7 @@ public void initData() { } ); // Revision 2 - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { + scope.inTransaction( entityManager -> { Type type = new Type( 2, "T2" ); entityManager.persist( type ); Product product = entityManager.find( Product.class, productId ); @@ -56,7 +46,7 @@ public void initData() { } ); // Revision 3 - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { + scope.inTransaction( entityManager -> { Product product = entityManager.find( Product.class, productId ); product.getItems().remove( 0 ); entityManager.merge( product ); @@ -64,34 +54,46 @@ public void initData() { } @Test - public void testRevisionCounts() { - assertEquals( Arrays.asList( 1, 2, 3 ), getAuditReader().getRevisions( Product.class, productId ) ); - assertEquals( 1, getAuditReader().find( Product.class, productId, 1 ).getItems().size() ); - assertEquals( 2, getAuditReader().find( Product.class, productId, 2 ).getItems().size() ); - assertEquals( 1, getAuditReader().find( Product.class, productId, 3 ).getItems().size() ); + public void testRevisionCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1, 2, 3 ), auditReader.getRevisions( Product.class, productId ) ); + assertEquals( 1, auditReader.find( Product.class, productId, 1 ).getItems().size() ); + assertEquals( 2, auditReader.find( Product.class, productId, 2 ).getItems().size() ); + assertEquals( 1, auditReader.find( Product.class, productId, 3 ).getItems().size() ); + } ); } @Test - public void testRevision1() { - final Product product = getAuditReader().find( Product.class, productId, 1 ); - assertEquals( 1, product.getItems().size() ); - assertEquals( "bread", product.getItems().get( 0 ).getName() ); + public void testRevision1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + final Product product = auditReader.find( Product.class, productId, 1 ); + assertEquals( 1, product.getItems().size() ); + assertEquals( "bread", product.getItems().get( 0 ).getName() ); + } ); } @Test - public void testRevision2() { - final Product product = getAuditReader().find( Product.class, productId, 2 ); - assertEquals( 2, product.getItems().size() ); - assertEquals( "bread", product.getItems().get( 0 ).getName() ); - assertEquals( "bread2", product.getItems().get( 1 ).getName() ); - assertEquals( new Type( 2, "T2" ), product.getItems().get( 1 ).getType() ); + public void testRevision2(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + final Product product = auditReader.find( Product.class, productId, 2 ); + assertEquals( 2, product.getItems().size() ); + assertEquals( "bread", product.getItems().get( 0 ).getName() ); + assertEquals( "bread2", product.getItems().get( 1 ).getName() ); + assertEquals( new Type( 2, "T2" ), product.getItems().get( 1 ).getType() ); + } ); } @Test - public void testRevision3() { - final Product product = getAuditReader().find( Product.class, productId, 3 ); - assertEquals( 1, product.getItems().size() ); - assertEquals( "bread2", product.getItems().get( 0 ).getName() ); - assertEquals( new Type( 2, "T2" ), product.getItems().get( 0 ).getType() ); + public void testRevision3(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + final Product product = auditReader.find( Product.class, productId, 3 ); + assertEquals( 1, product.getItems().size() ); + assertEquals( "bread2", product.getItems().get( 0 ).getName() ); + assertEquals( new Type( 2, "T2" ), product.getItems().get( 0 ).getType() ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/embeddable/SetEqualsHashCodeTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/embeddable/SetEqualsHashCodeTest.java index 0f90f4f62845..c9ecafcae828 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/embeddable/SetEqualsHashCodeTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/embeddable/SetEqualsHashCodeTest.java @@ -4,37 +4,39 @@ */ package org.hibernate.orm.test.envers.integration.collection.embeddable; -import java.io.Serializable; -import java.util.HashSet; -import java.util.Objects; -import java.util.Set; - import jakarta.persistence.Column; import jakarta.persistence.ElementCollection; import jakarta.persistence.Embeddable; import jakarta.persistence.Entity; import jakarta.persistence.Id; - +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.Audited; import org.hibernate.envers.strategy.ValidityAuditStrategy; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.strategy.internal.DefaultAuditStrategy; import org.hibernate.orm.test.envers.tools.TestTools; -import org.junit.Test; - +import org.hibernate.testing.envers.RequiresAuditStrategy; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; -import static org.hibernate.testing.transaction.TransactionUtil.doInJPA; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; +import java.io.Serializable; +import java.util.HashSet; +import java.util.Objects; +import java.util.Set; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; /** * This test verifies that when a set-based {@link ElementCollection} of {@link Embeddable} objects * are audited that the same number of audit rows are generated regardless whether the embeddable * implements proper {@code equals} and {@code hashCode} methods. - * + *

    * The {@link ValidityAuditStrategy} with equals/hashcode. - * + *

    * +-----+---------+---------------+-----------+--------+--------+ * | REV | REVTYPE | TESTENTITY_ID | EMBS1_KEY | REVEND | VALUE | * +-----+---------+---------------+-----------+--------+--------+ @@ -43,9 +45,9 @@ * | 2 | 0 | 1 | a | null | value3 | * | 2 | 2 | 1 | a | null | value1 | * +-----+---------+---------------+-----------+--------+--------+ - * + *

    * The {@link org.hibernate.envers.strategy.DefaultAuditStrategy} with equals/hashcode. - * + *

    * +-----+---------+---------------+-----------+--------+ * | REV | REVTYPE | TESTENTITY_ID | EMBS1_KEY | VALUE | * +-----+---------+---------------+-----------+--------+ @@ -54,24 +56,20 @@ * | 2 | 0 | 1 | a | value3 | * | 2 | 2 | 1 | a | value1 | * +-----+---------+---------------+-----------+--------+ - * + *

    * This test uses hashcode and equals as a baseline. * * @author Chris Cranford */ @JiraKey(value = "HHH-12607") -public class SetEqualsHashCodeTest extends BaseEnversJPAFunctionalTestCase { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { TestEntity.class }; - } - - @Test - @Priority(10) - public void initData() { +@EnversTest +@Jpa(annotatedClasses = {SetEqualsHashCodeTest.TestEntity.class}) +public class SetEqualsHashCodeTest { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { final Emb emb1 = new Emb( "value1" ); final Emb emb2 = new Emb( "value2" ); - doInJPA( this::entityManagerFactory, entityManager -> { + scope.inTransaction( entityManager -> { TestEntity e = new TestEntity( 1 ); e.setEmbs1( new HashSet<>() ); e.getEmbs1().add( emb1 ); @@ -79,7 +77,7 @@ public void initData() { entityManager.persist( e ); } ); - doInJPA( this::entityManagerFactory, entityManager -> { + scope.inTransaction( entityManager -> { TestEntity e = entityManager.find( TestEntity.class, 1 ); e.getEmbs1().remove( emb1 ); e.getEmbs1().add( new Emb( "value3" ) ); @@ -87,63 +85,65 @@ public void initData() { } @Test - public void testAuditRowsForValidityAuditStrategy() { - if ( ValidityAuditStrategy.class.getName().equals( getAuditStrategy() ) ) { - doInJPA( this::entityManagerFactory, entityManager -> { - Long results = entityManager - .createQuery( - "SELECT COUNT(1) FROM TestEntity_embs1_AUD WHERE REVEND IS NULL", - Long.class - ) - .getSingleResult(); - - assertNotNull( results ); - assertEquals( Long.valueOf( 3 ), results ); - } ); - - doInJPA( this::entityManagerFactory, entityManager -> { - Long results = entityManager - .createQuery( - "SELECT COUNT(1) FROM TestEntity_embs1_AUD", - Long.class - ) - .getSingleResult(); - - assertNotNull( results ); - assertEquals( Long.valueOf( 4 ), results ); - } ); - } + @RequiresAuditStrategy(ValidityAuditStrategy.class) + public void testAuditRowsForValidityAuditStrategy(EntityManagerFactoryScope scope) { + scope.inEntityManager( entityManager -> { + Long results = entityManager + .createQuery( + "SELECT COUNT(1) FROM TestEntity_embs1_AUD WHERE REVEND IS NULL", + Long.class + ) + .getSingleResult(); + + assertNotNull( results ); + assertEquals( Long.valueOf( 3 ), results ); + + results = entityManager + .createQuery( + "SELECT COUNT(1) FROM TestEntity_embs1_AUD", + Long.class + ) + .getSingleResult(); + + assertNotNull( results ); + assertEquals( Long.valueOf( 4 ), results ); + } ); } @Test - public void testAuditRowsForDefaultAuditStrategy() { - if ( !ValidityAuditStrategy.class.getName().equals( getAuditStrategy() ) ) { - doInJPA( this::entityManagerFactory, entityManager -> { - Long results = entityManager - .createQuery( - "SELECT COUNT(1) FROM TestEntity_embs1_AUD", - Long.class - ) - .getSingleResult(); - - assertNotNull( results ); - assertEquals( Long.valueOf( 4 ), results ); - } ); - } + @RequiresAuditStrategy(DefaultAuditStrategy.class) + public void testAuditRowsForDefaultAuditStrategy(EntityManagerFactoryScope scope) { + scope.inEntityManager( entityManager -> { + Long results = entityManager + .createQuery( + "SELECT COUNT(1) FROM TestEntity_embs1_AUD", + Long.class + ) + .getSingleResult(); + + assertNotNull( results ); + assertEquals( Long.valueOf( 4 ), results ); + } ); } @Test - public void testRevisionHistory1() { - TestEntity e = getAuditReader().find( TestEntity.class, 1, 1 ); - assertEquals( 2, e.getEmbs1().size() ); - assertEquals( e.getEmbs1(), TestTools.makeSet( new Emb( "value1" ), new Emb( "value2" ) ) ); + public void testRevisionHistory1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + TestEntity e = auditReader.find( TestEntity.class, 1, 1 ); + assertEquals( 2, e.getEmbs1().size() ); + assertEquals( e.getEmbs1(), TestTools.makeSet( new Emb( "value1" ), new Emb( "value2" ) ) ); + } ); } @Test - public void testRevisionHistory2() { - TestEntity e = getAuditReader().find( TestEntity.class, 1, 2 ); - assertEquals( 2, e.getEmbs1().size() ); - assertEquals( e.getEmbs1(), TestTools.makeSet( new Emb( "value3" ), new Emb( "value2" ) ) ); + public void testRevisionHistory2(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + TestEntity e = auditReader.find( TestEntity.class, 1, 2 ); + assertEquals( 2, e.getEmbs1().size() ); + assertEquals( e.getEmbs1(), TestTools.makeSet( new Emb( "value3" ), new Emb( "value2" ) ) ); + } ); } @Entity(name = "TestEntity") diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/embeddable/SetNoEqualsHashCodeTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/embeddable/SetNoEqualsHashCodeTest.java index 0c8a8c9fa02d..33d5c0cd1488 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/embeddable/SetNoEqualsHashCodeTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/embeddable/SetNoEqualsHashCodeTest.java @@ -4,36 +4,38 @@ */ package org.hibernate.orm.test.envers.integration.collection.embeddable; -import java.io.Serializable; -import java.util.HashSet; -import java.util.Set; - import jakarta.persistence.Column; import jakarta.persistence.ElementCollection; import jakarta.persistence.Embeddable; import jakarta.persistence.Entity; import jakarta.persistence.Id; - +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.Audited; import org.hibernate.envers.strategy.ValidityAuditStrategy; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.junit.Test; - +import org.hibernate.envers.strategy.internal.DefaultAuditStrategy; +import org.hibernate.testing.envers.RequiresAuditStrategy; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; -import static org.hibernate.testing.transaction.TransactionUtil.doInJPA; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.fail; +import java.io.Serializable; +import java.util.HashSet; +import java.util.Set; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.fail; /** * This test verifies that when a set-based {@link ElementCollection} of {@link Embeddable} objects * are audited that the same number of audit rows are generated regardless whether the embeddable * implements proper {@code equals} and {@code hashCode} methods. - * + *

    * The {@link ValidityAuditStrategy} with equals/hashcode. - * + *

    * +-----+---------+---------------+-----------+--------+--------+ * | REV | REVTYPE | TESTENTITY_ID | EMBS1_KEY | REVEND | VALUE | * +-----+---------+---------------+-----------+--------+--------+ @@ -42,9 +44,9 @@ * | 2 | 0 | 1 | a | null | value3 | * | 2 | 2 | 1 | a | null | value1 | * +-----+---------+---------------+-----------+--------+--------+ - * + *

    * The {@link org.hibernate.envers.strategy.DefaultAuditStrategy} with equals/hashcode. - * + *

    * +-----+---------+---------------+-----------+--------+ * | REV | REVTYPE | TESTENTITY_ID | EMBS1_KEY | VALUE | * +-----+---------+---------------+-----------+--------+ @@ -57,18 +59,15 @@ * @author Chris Cranford */ @JiraKey(value = "HHH-12607") -public class SetNoEqualsHashCodeTest extends BaseEnversJPAFunctionalTestCase { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { TestEntity.class }; - } +@EnversTest +@Jpa(annotatedClasses = {SetNoEqualsHashCodeTest.TestEntity.class}) +public class SetNoEqualsHashCodeTest { - @Test - @Priority(10) - public void initData() { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { final Emb emb1 = new Emb( "value1" ); final Emb emb2 = new Emb( "value2" ); - doInJPA( this::entityManagerFactory, entityManager -> { + scope.inTransaction( entityManager -> { TestEntity e = new TestEntity( 1 ); e.setEmbs1( new HashSet<>() ); e.getEmbs1().add( emb1 ); @@ -76,7 +75,7 @@ public void initData() { entityManager.persist( e ); } ); - doInJPA( this::entityManagerFactory, entityManager -> { + scope.inTransaction( entityManager -> { TestEntity e = entityManager.find( TestEntity.class, 1 ); for ( Emb emb : e.getEmbs1() ) { if ( emb.getValue().equals( "value1" ) ) { @@ -89,65 +88,65 @@ public void initData() { } @Test - public void testAuditRowsForValidityAuditStrategy() { - if ( ValidityAuditStrategy.class.getName().equals( getAuditStrategy() ) ) { - doInJPA( this::entityManagerFactory, entityManager -> { - Long results = entityManager - .createQuery( - "SELECT COUNT(1) FROM TestEntity_embs1_AUD WHERE REVEND IS NULL", - Long.class - ) - .getSingleResult(); - - assertNotNull( results ); - assertEquals( Long.valueOf( 3 ), results ); - } ); - - doInJPA( this::entityManagerFactory, entityManager -> { - Long results = entityManager - .createQuery( - "SELECT COUNT(1) FROM TestEntity_embs1_AUD", - Long.class - ) - .getSingleResult(); - - assertNotNull( results ); - assertEquals( Long.valueOf( 4 ), results ); - } ); - } + @RequiresAuditStrategy(ValidityAuditStrategy.class) + public void testAuditRowsForValidityAuditStrategy(EntityManagerFactoryScope scope) { + scope.inEntityManager( entityManager -> { + Long results = entityManager + .createQuery( + "SELECT COUNT(1) FROM TestEntity_embs1_AUD WHERE REVEND IS NULL", + Long.class + ) + .getSingleResult(); + + assertNotNull( results ); + assertEquals( Long.valueOf( 3 ), results ); + + results = entityManager + .createQuery( + "SELECT COUNT(1) FROM TestEntity_embs1_AUD", + Long.class + ) + .getSingleResult(); + + assertNotNull( results ); + assertEquals( Long.valueOf( 4 ), results ); + } ); } @Test - public void testAuditRowsForDefaultAuditStrategy() { - if ( !ValidityAuditStrategy.class.getName().equals( getAuditStrategy() ) ) { - doInJPA( this::entityManagerFactory, entityManager -> { - Long results = entityManager - .createQuery( - "SELECT COUNT(1) FROM TestEntity_embs1_AUD", - Long.class - ) - .getSingleResult(); - - assertNotNull( results ); - assertEquals( Long.valueOf( 4 ), results ); - } ); - } + @RequiresAuditStrategy(DefaultAuditStrategy.class) + public void testAuditRowsForDefaultAuditStrategy(EntityManagerFactoryScope scope) { + scope.inEntityManager( entityManager -> { + Long results = entityManager + .createQuery( + "SELECT COUNT(1) FROM TestEntity_embs1_AUD", + Long.class + ) + .getSingleResult(); + + assertNotNull( results ); + assertEquals( Long.valueOf( 4 ), results ); + } ); } @Test - public void testRevisionHistory1() { - TestEntity e = getAuditReader().find( TestEntity.class, 1, 1 ); - assertEquals( 2, e.getEmbs1().size() ); - assertHasEmbeddableWithValue( e, "value1" ); - assertHasEmbeddableWithValue( e, "value2" ); + public void testRevisionHistory1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + TestEntity e = AuditReaderFactory.get( em ).find( TestEntity.class, 1, 1 ); + assertEquals( 2, e.getEmbs1().size() ); + assertHasEmbeddableWithValue( e, "value1" ); + assertHasEmbeddableWithValue( e, "value2" ); + } ); } @Test - public void testRevisionHistory2() { - TestEntity e = getAuditReader().find( TestEntity.class, 1, 2 ); - assertEquals( 2, e.getEmbs1().size() ); - assertHasEmbeddableWithValue( e, "value3" ); - assertHasEmbeddableWithValue( e, "value2" ); + public void testRevisionHistory2(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + TestEntity e = AuditReaderFactory.get( em ).find( TestEntity.class, 1, 2 ); + assertEquals( 2, e.getEmbs1().size() ); + assertHasEmbeddableWithValue( e, "value3" ); + assertHasEmbeddableWithValue( e, "value2" ); + } ); } private static void assertHasEmbeddableWithValue(TestEntity entity, String value) { diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/mapkey/ComponentMapKey.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/mapkey/ComponentMapKey.java index 4d5ccd9f3aac..2c72a767af94 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/mapkey/ComponentMapKey.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/mapkey/ComponentMapKey.java @@ -5,99 +5,96 @@ package org.hibernate.orm.test.envers.integration.collection.mapkey; import java.util.Arrays; -import jakarta.persistence.EntityManager; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.orm.test.envers.entities.components.Component1; import org.hibernate.orm.test.envers.entities.components.Component2; import org.hibernate.orm.test.envers.entities.components.ComponentTestEntity; import org.hibernate.orm.test.envers.tools.TestTools; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; -import org.junit.Test; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Adam Warski (adam at warski dot org) */ -public class ComponentMapKey extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {ComponentMapKeyEntity.class, ComponentTestEntity.class}) +public class ComponentMapKey { private Integer cmke_id; private Integer cte1_id; private Integer cte2_id; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {ComponentMapKeyEntity.class, ComponentTestEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { ComponentMapKeyEntity imke = new ComponentMapKeyEntity(); // Revision 1 (intialy 1 mapping) - em.getTransaction().begin(); - - ComponentTestEntity cte1 = new ComponentTestEntity( - new Component1( "x1", "y2" ), new Component2( - "a1", - "b2" - ) - ); - ComponentTestEntity cte2 = new ComponentTestEntity( - new Component1( "x1", "y2" ), new Component2( - "a1", - "b2" - ) - ); - - em.persist( cte1 ); - em.persist( cte2 ); - - imke.getIdmap().put( cte1.getComp1(), cte1 ); - - em.persist( imke ); - - em.getTransaction().commit(); + scope.inTransaction( em -> { + ComponentTestEntity cte1 = new ComponentTestEntity( + new Component1( "x1", "y2" ), new Component2( + "a1", + "b2" + ) + ); + ComponentTestEntity cte2 = new ComponentTestEntity( + new Component1( "x1", "y2" ), new Component2( + "a1", + "b2" + ) + ); + + em.persist( cte1 ); + em.persist( cte2 ); + + imke.getIdmap().put( cte1.getComp1(), cte1 ); + + em.persist( imke ); + + cte1_id = cte1.getId(); + cte2_id = cte2.getId(); + } ); // Revision 2 (sse1: adding 1 mapping) - em.getTransaction().begin(); - - cte2 = em.find( ComponentTestEntity.class, cte2.getId() ); - imke = em.find( ComponentMapKeyEntity.class, imke.getId() ); - - imke.getIdmap().put( cte2.getComp1(), cte2 ); - - em.getTransaction().commit(); + scope.inTransaction( em -> { + ComponentTestEntity cte2 = em.find( ComponentTestEntity.class, cte2_id ); + ComponentMapKeyEntity imkeRef = em.find( ComponentMapKeyEntity.class, imke.getId() ); - // + imkeRef.getIdmap().put( cte2.getComp1(), cte2 ); + } ); cmke_id = imke.getId(); - - cte1_id = cte1.getId(); - cte2_id = cte2.getId(); } @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( ComponentMapKeyEntity.class, cmke_id ) ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + assertEquals( Arrays.asList( 1, 2 ), AuditReaderFactory.get( em ).getRevisions( ComponentMapKeyEntity.class, cmke_id ) ); + } ); } @Test - public void testHistoryOfImke() { - ComponentTestEntity cte1 = getEntityManager().find( ComponentTestEntity.class, cte1_id ); - ComponentTestEntity cte2 = getEntityManager().find( ComponentTestEntity.class, cte2_id ); - - // These fields are unversioned. - cte1.setComp2( null ); - cte2.setComp2( null ); - - ComponentMapKeyEntity rev1 = getAuditReader().find( ComponentMapKeyEntity.class, cmke_id, 1 ); - ComponentMapKeyEntity rev2 = getAuditReader().find( ComponentMapKeyEntity.class, cmke_id, 2 ); - - assert rev1.getIdmap().equals( TestTools.makeMap( cte1.getComp1(), cte1 ) ); - assert rev2.getIdmap().equals( TestTools.makeMap( cte1.getComp1(), cte1, cte2.getComp1(), cte2 ) ); + public void testHistoryOfImke(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + ComponentTestEntity cte1 = em.find( ComponentTestEntity.class, cte1_id ); + ComponentTestEntity cte2 = em.find( ComponentTestEntity.class, cte2_id ); + + // These fields are unversioned. + cte1.setComp2( null ); + cte2.setComp2( null ); + + var auditReader = AuditReaderFactory.get( em ); + ComponentMapKeyEntity rev1 = auditReader.find( ComponentMapKeyEntity.class, cmke_id, 1 ); + ComponentMapKeyEntity rev2 = auditReader.find( ComponentMapKeyEntity.class, cmke_id, 2 ); + + assertEquals( TestTools.makeMap( cte1.getComp1(), cte1 ), rev1.getIdmap() ); + assertEquals( TestTools.makeMap( cte1.getComp1(), cte1, cte2.getComp1(), cte2 ), rev2.getIdmap() ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/mapkey/IdMapKey.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/mapkey/IdMapKey.java index bbdc94529d46..d02a71f958b9 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/mapkey/IdMapKey.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/mapkey/IdMapKey.java @@ -5,83 +5,88 @@ package org.hibernate.orm.test.envers.integration.collection.mapkey; import java.util.Arrays; -import jakarta.persistence.EntityManager; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.orm.test.envers.entities.StrTestEntity; import org.hibernate.orm.test.envers.tools.TestTools; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; -import org.junit.Test; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Adam Warski (adam at warski dot org) */ -public class IdMapKey extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {IdMapKeyEntity.class, StrTestEntity.class}) +public class IdMapKey { private Integer imke_id; private Integer ste1_id; private Integer ste2_id; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {IdMapKeyEntity.class, StrTestEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + IdMapKeyEntity imke = new IdMapKeyEntity(); - IdMapKeyEntity imke = new IdMapKeyEntity(); + // Revision 1 (intialy 1 mapping) + em.getTransaction().begin(); - // Revision 1 (intialy 1 mapping) - em.getTransaction().begin(); + StrTestEntity ste1 = new StrTestEntity( "x" ); + StrTestEntity ste2 = new StrTestEntity( "y" ); - StrTestEntity ste1 = new StrTestEntity( "x" ); - StrTestEntity ste2 = new StrTestEntity( "y" ); + em.persist( ste1 ); + em.persist( ste2 ); - em.persist( ste1 ); - em.persist( ste2 ); + imke.getIdmap().put( ste1.getId(), ste1 ); - imke.getIdmap().put( ste1.getId(), ste1 ); + em.persist( imke ); - em.persist( imke ); + em.getTransaction().commit(); - em.getTransaction().commit(); + // Revision 2 (sse1: adding 1 mapping) + em.getTransaction().begin(); - // Revision 2 (sse1: adding 1 mapping) - em.getTransaction().begin(); + ste2 = em.find( StrTestEntity.class, ste2.getId() ); + imke = em.find( IdMapKeyEntity.class, imke.getId() ); - ste2 = em.find( StrTestEntity.class, ste2.getId() ); - imke = em.find( IdMapKeyEntity.class, imke.getId() ); + imke.getIdmap().put( ste2.getId(), ste2 ); - imke.getIdmap().put( ste2.getId(), ste2 ); + em.getTransaction().commit(); - em.getTransaction().commit(); + // - // + imke_id = imke.getId(); - imke_id = imke.getId(); - - ste1_id = ste1.getId(); - ste2_id = ste2.getId(); + ste1_id = ste1.getId(); + ste2_id = ste2.getId(); + } ); } @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( IdMapKeyEntity.class, imke_id ) ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + assertEquals( Arrays.asList( 1, 2 ), AuditReaderFactory.get( em ).getRevisions( IdMapKeyEntity.class, imke_id ) ); + } ); } @Test - public void testHistoryOfImke() { - StrTestEntity ste1 = getEntityManager().find( StrTestEntity.class, ste1_id ); - StrTestEntity ste2 = getEntityManager().find( StrTestEntity.class, ste2_id ); - - IdMapKeyEntity rev1 = getAuditReader().find( IdMapKeyEntity.class, imke_id, 1 ); - IdMapKeyEntity rev2 = getAuditReader().find( IdMapKeyEntity.class, imke_id, 2 ); - - assert rev1.getIdmap().equals( TestTools.makeMap( ste1.getId(), ste1 ) ); - assert rev2.getIdmap().equals( TestTools.makeMap( ste1.getId(), ste1, ste2.getId(), ste2 ) ); + public void testHistoryOfImke(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + StrTestEntity ste1 = em.find( StrTestEntity.class, ste1_id ); + StrTestEntity ste2 = em.find( StrTestEntity.class, ste2_id ); + + var auditReader = AuditReaderFactory.get( em ); + IdMapKeyEntity rev1 = auditReader.find( IdMapKeyEntity.class, imke_id, 1 ); + IdMapKeyEntity rev2 = auditReader.find( IdMapKeyEntity.class, imke_id, 2 ); + + assertEquals( TestTools.makeMap( ste1.getId(), ste1 ), rev1.getIdmap() ); + assertEquals( TestTools.makeMap( ste1.getId(), ste1, ste2.getId(), ste2 ), rev2.getIdmap() ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/mapkey/MapKeyEnumeratedNonEntityTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/mapkey/MapKeyEnumeratedNonEntityTest.java index 8f4c0e3e3f79..088abf672eff 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/mapkey/MapKeyEnumeratedNonEntityTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/mapkey/MapKeyEnumeratedNonEntityTest.java @@ -16,34 +16,32 @@ import jakarta.persistence.MapKeyColumn; import jakarta.persistence.MapKeyEnumerated; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; import org.hibernate.orm.test.envers.tools.TestTools; -import org.junit.Test; - +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; +import org.hibernate.testing.orm.junit.Jpa; + +import org.junit.jupiter.api.Test; import static org.hibernate.orm.test.envers.tools.TestTools.checkCollection; -import static org.hibernate.testing.transaction.TransactionUtil.doInJPA; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Chris Cranford */ @JiraKey(value = "HHH-13655") -public class MapKeyEnumeratedNonEntityTest extends BaseEnversJPAFunctionalTestCase { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { TestEntity.class }; - } +@EnversTest +@Jpa(annotatedClasses = {MapKeyEnumeratedNonEntityTest.TestEntity.class}) +public class MapKeyEnumeratedNonEntityTest { - @Test - @Priority(10) - public void initData() { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Revision 1 - doInJPA( this::entityManagerFactory, entityManager -> { - + scope.inTransaction( entityManager -> { final TestEntity test = new TestEntity(); test.setId( 1 ); test.addMapKeyAssociation( TestEnum.ONE, 1 ); @@ -52,7 +50,7 @@ public void initData() { } ); // Revision 2 - doInJPA( this::entityManagerFactory, entityManager -> { + scope.inTransaction( entityManager -> { final TestEntity test = entityManager.find( TestEntity.class, 1 ); test.addMapKeyAssociation( TestEnum.TWO, 2 ); @@ -60,14 +58,14 @@ public void initData() { } ); // Revision 3 - doInJPA( this::entityManagerFactory, entityManager -> { + scope.inTransaction( entityManager -> { final TestEntity test = entityManager.find( TestEntity.class, 1 ); test.removeMapKeyAssociation( TestEnum.ONE ); entityManager.merge( test ); } ); // Revision 4 - doInJPA( this::entityManagerFactory, entityManager -> { + scope.inTransaction( entityManager -> { final TestEntity test = entityManager.find( TestEntity.class, 1 ); test.removeMapKeyAssociation( TestEnum.TWO ); entityManager.merge( test ); @@ -75,29 +73,34 @@ public void initData() { } @Test - public void testRevisionNumberHistory() { - assertEquals( Arrays.asList( 1, 2, 3, 4 ), getAuditReader().getRevisions( TestEntity.class, 1 ) ); + public void testRevisionNumberHistory(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + assertEquals( Arrays.asList( 1, 2, 3, 4 ), AuditReaderFactory.get( em ).getRevisions( TestEntity.class, 1 ) ); + } ); } @Test - public void testRevisionHistory() { - - final TestEntity rev1 = getAuditReader().find( TestEntity.class, 1, 1 ); - assertEquals( 1, rev1.getMapEnumMap().size() ); - assertEquals( TestEnum.ONE, rev1.getMapEnumMap().keySet().iterator().next() ); - - final TestEntity rev2 = getAuditReader().find( TestEntity.class, 1, 2 ); - assertEquals( 2, rev2.getMapEnumMap().size() ); - assertEquals( TestTools.makeSet( TestEnum.ONE, TestEnum.TWO ), rev2.getMapEnumMap().keySet() ); - checkCollection( rev2.getMapEnumMap().values(), 1, 2 ); - - final TestEntity rev3 = getAuditReader().find( TestEntity.class, 1, 3 ); - assertEquals( 1, rev3.getMapEnumMap().size() ); - assertEquals( TestTools.makeSet( TestEnum.TWO ), rev3.getMapEnumMap().keySet() ); - checkCollection( rev2.getMapEnumMap().values(), 2 ); - - final TestEntity rev4 = getAuditReader().find( TestEntity.class, 1, 4 ); - assertEquals( 0, rev4.getMapEnumMap().size() ); + public void testRevisionHistory(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + var auditReader = AuditReaderFactory.get( em ); + + final TestEntity rev1 = auditReader.find( TestEntity.class, 1, 1 ); + assertEquals( 1, rev1.getMapEnumMap().size() ); + assertEquals( TestEnum.ONE, rev1.getMapEnumMap().keySet().iterator().next() ); + + final TestEntity rev2 = auditReader.find( TestEntity.class, 1, 2 ); + assertEquals( 2, rev2.getMapEnumMap().size() ); + assertEquals( TestTools.makeSet( TestEnum.ONE, TestEnum.TWO ), rev2.getMapEnumMap().keySet() ); + checkCollection( rev2.getMapEnumMap().values(), 1, 2 ); + + final TestEntity rev3 = auditReader.find( TestEntity.class, 1, 3 ); + assertEquals( 1, rev3.getMapEnumMap().size() ); + assertEquals( TestTools.makeSet( TestEnum.TWO ), rev3.getMapEnumMap().keySet() ); + checkCollection( rev3.getMapEnumMap().values(), 2 ); + + final TestEntity rev4 = auditReader.find( TestEntity.class, 1, 4 ); + assertEquals( 0, rev4.getMapEnumMap().size() ); + } ); } public enum TestEnum { diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/mapkey/MapKeyEnumeratedTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/mapkey/MapKeyEnumeratedTest.java index 804e3755d5da..89af5e3b15fb 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/mapkey/MapKeyEnumeratedTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/mapkey/MapKeyEnumeratedTest.java @@ -16,32 +16,31 @@ import jakarta.persistence.MapKeyEnumerated; import jakarta.persistence.OneToMany; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; import org.hibernate.orm.test.envers.tools.TestTools; -import org.junit.Test; - +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; +import org.hibernate.testing.orm.junit.Jpa; + +import org.junit.jupiter.api.Test; -import static org.hibernate.testing.transaction.TransactionUtil.doInJPA; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Chris Cranford */ @JiraKey(value = "HHH-11797") -public class MapKeyEnumeratedTest extends BaseEnversJPAFunctionalTestCase { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { TestEntity.class, MapEntity.class }; - } +@EnversTest +@Jpa(annotatedClasses = {MapKeyEnumeratedTest.TestEntity.class, MapKeyEnumeratedTest.MapEntity.class}) +public class MapKeyEnumeratedTest { - @Test - @Priority(10) - public void initData() { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Revision 1 - doInJPA( this::entityManagerFactory, entityManager -> { + scope.inTransaction( entityManager -> { final MapEntity map = new MapEntity( "Map1" ); map.setId( 1 ); @@ -54,7 +53,7 @@ public void initData() { } ); // Revision 2 - doInJPA( this::entityManagerFactory, entityManager -> { + scope.inTransaction( entityManager -> { final MapEntity map = new MapEntity( "Map2" ); map.setId( 2 ); @@ -66,7 +65,7 @@ public void initData() { } ); // Revision 3 - doInJPA( this::entityManagerFactory, entityManager -> { + scope.inTransaction( entityManager -> { final TestEntity test = entityManager.find( TestEntity.class, 1 ); final MapEntity map = test.removeMapKeyAssociation( TestEnum.ONE ); entityManager.remove( map ); @@ -74,7 +73,7 @@ public void initData() { } ); // Revision 4 - doInJPA( this::entityManagerFactory, entityManager -> { + scope.inTransaction( entityManager -> { final TestEntity test = entityManager.find( TestEntity.class, 1 ); final MapEntity map = test.removeMapKeyAssociation( TestEnum.TWO ); entityManager.remove( map ); @@ -83,31 +82,37 @@ public void initData() { } @Test - public void testRevisionNumberHistory() { - assertEquals( Arrays.asList( 1, 2, 3, 4 ), getAuditReader().getRevisions( TestEntity.class, 1 ) ); - assertEquals( Arrays.asList( 1, 3 ), getAuditReader().getRevisions( MapEntity.class, 1 ) ); - assertEquals( Arrays.asList( 2, 4 ), getAuditReader().getRevisions( MapEntity.class, 2 ) ); + public void testRevisionNumberHistory(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1, 2, 3, 4 ), auditReader.getRevisions( TestEntity.class, 1 ) ); + assertEquals( Arrays.asList( 1, 3 ), auditReader.getRevisions( MapEntity.class, 1 ) ); + assertEquals( Arrays.asList( 2, 4 ), auditReader.getRevisions( MapEntity.class, 2 ) ); + } ); } @Test - public void testRevisionHistory() { - - final TestEntity rev1 = getAuditReader().find( TestEntity.class, 1, 1 ); - assertEquals( 1, rev1.getMapEntityMap().size() ); - assertEquals( TestEnum.ONE, rev1.getMapEntityMap().keySet().iterator().next() ); - - final TestEntity rev2 = getAuditReader().find( TestEntity.class, 1, 2 ); - assertEquals( 2, rev2.getMapEntityMap().size() ); - assertEquals( TestTools.makeSet( TestEnum.ONE, TestEnum.TWO ), rev2.getMapEntityMap().keySet() ); - assertEquals( TestTools.makeSet( 1, 2 ), rev2.getMapEntityMap().values().stream().map( MapEntity::getId ).collect( Collectors.toSet() ) ); - - final TestEntity rev3 = getAuditReader().find( TestEntity.class, 1, 3 ); - assertEquals( 1, rev3.getMapEntityMap().size() ); - assertEquals( TestTools.makeSet( TestEnum.TWO ), rev3.getMapEntityMap().keySet() ); - assertEquals( TestTools.makeSet( 2 ), rev3.getMapEntityMap().values().stream().map( MapEntity::getId ).collect( Collectors.toSet() ) ); - - final TestEntity rev4 = getAuditReader().find( TestEntity.class, 1, 4 ); - assertEquals( 0, rev4.getMapEntityMap().size() ); + public void testRevisionHistory(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + var auditReader = AuditReaderFactory.get( em ); + + final TestEntity rev1 = auditReader.find( TestEntity.class, 1, 1 ); + assertEquals( 1, rev1.getMapEntityMap().size() ); + assertEquals( TestEnum.ONE, rev1.getMapEntityMap().keySet().iterator().next() ); + + final TestEntity rev2 = auditReader.find( TestEntity.class, 1, 2 ); + assertEquals( 2, rev2.getMapEntityMap().size() ); + assertEquals( TestTools.makeSet( TestEnum.ONE, TestEnum.TWO ), rev2.getMapEntityMap().keySet() ); + assertEquals( TestTools.makeSet( 1, 2 ), rev2.getMapEntityMap().values().stream().map( MapEntity::getId ).collect( Collectors.toSet() ) ); + + final TestEntity rev3 = auditReader.find( TestEntity.class, 1, 3 ); + assertEquals( 1, rev3.getMapEntityMap().size() ); + assertEquals( TestTools.makeSet( TestEnum.TWO ), rev3.getMapEntityMap().keySet() ); + assertEquals( TestTools.makeSet( 2 ), rev3.getMapEntityMap().values().stream().map( MapEntity::getId ).collect( Collectors.toSet() ) ); + + final TestEntity rev4 = auditReader.find( TestEntity.class, 1, 4 ); + assertEquals( 0, rev4.getMapEntityMap().size() ); + } ); } public enum TestEnum { diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/norevision/AbstractCollectionChangeTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/norevision/AbstractCollectionChangeTest.java index 802f6436be89..04f2ba0c0aa1 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/norevision/AbstractCollectionChangeTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/norevision/AbstractCollectionChangeTest.java @@ -5,125 +5,118 @@ package org.hibernate.orm.test.envers.integration.collection.norevision; import java.util.List; -import java.util.Map; - -import org.hibernate.Session; -import org.hibernate.envers.configuration.EnversSettings; -import org.hibernate.orm.test.envers.BaseEnversFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; - -import org.junit.Test; +import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; +import org.junit.jupiter.api.Test; -public abstract class AbstractCollectionChangeTest extends BaseEnversFunctionalTestCase { +import static org.junit.jupiter.api.Assertions.assertEquals; + +public abstract class AbstractCollectionChangeTest { protected Integer personId; protected Integer parentId; protected Integer houseId; - @Override - protected void addSettings(Map settings) { - super.addSettings( settings ); - - settings.put( EnversSettings.REVISION_ON_COLLECTION_CHANGE, getCollectionChangeValue() ); - } - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {Person.class, Name.class, Parent.class, Child.class, House.class}; - } - - protected abstract String getCollectionChangeValue(); - protected abstract List getExpectedPersonRevisions(); protected abstract List getExpectedParentRevisions(); protected abstract List getExpectedHouseRevisions(); - @Test - @Priority(10) - public void initData() { - Session session = openSession(); - + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Rev 1 - session.getTransaction().begin(); - Person p = new Person(); - Name n = new Name(); - n.setName( "name1" ); - p.getNames().add( n ); - session.persist( p ); - session.getTransaction().commit(); + scope.inTransaction( em -> { + Person p = new Person(); + Name n = new Name(); + n.setName( "name1" ); + p.getNames().add( n ); + em.persist( p ); + personId = p.getId(); + } ); // Rev 2 - session.getTransaction().begin(); - n.setName( "Changed name" ); - session.merge( p ); - session.getTransaction().commit(); + scope.inTransaction( em -> { + Person p = em.find( Person.class, personId ); + Name n = p.getNames().iterator().next(); + n.setName( "Changed name" ); + em.merge( p ); + } ); // Rev 3 - session.getTransaction().begin(); - Name n2 = new Name(); - n2.setName( "name2" ); - p.getNames().add( n2 ); - session.getTransaction().commit(); - - personId = p.getId(); + scope.inTransaction( em -> { + Person p = em.find( Person.class, personId ); + Name n2 = new Name(); + n2.setName( "name2" ); + p.getNames().add( n2 ); + } ); // Rev 4 - session.getTransaction().begin(); - Child child1 = new Child(); - Parent parent = new Parent(); - parent.setName( "P1" ); - child1.setParent( parent ); - parent.getChildren().add( child1 ); - session.persist( child1 ); - session.persist( parent ); - session.getTransaction().commit(); + scope.inTransaction( em -> { + Child child1 = new Child(); + Parent parent = new Parent(); + parent.setName( "P1" ); + child1.setParent( parent ); + parent.getChildren().add( child1 ); + em.persist( child1 ); + em.persist( parent ); + parentId = parent.getId(); + } ); // Rev 5 - session.getTransaction().begin(); - Child child2 = new Child(); - parent.getChildren().add( child2 ); - child2.setParent( parent ); - session.persist( child2 ); - session.persist( parent ); - session.getTransaction().commit(); - - parentId = parent.getId(); + scope.inTransaction( em -> { + Parent parent = em.find( Parent.class, parentId ); + Child child2 = new Child(); + parent.getChildren().add( child2 ); + child2.setParent( parent ); + em.persist( child2 ); + em.persist( parent ); + } ); // Rev 6 - session.getTransaction().begin(); - House house = new House(); - house.getColors().add( "Red" ); - session.persist( house ); - session.getTransaction().commit(); + scope.inTransaction( em -> { + House house = new House(); + house.getColors().add( "Red" ); + em.persist( house ); + houseId = house.getId(); + } ); // Rev 7 - session.getTransaction().begin(); - house.getColors().add( "Blue" ); - session.merge( house ); - session.getTransaction().commit(); - - houseId = house.getId(); - - session.close(); + scope.inTransaction( em -> { + House house = em.find( House.class, houseId ); + house.getColors().add( "Blue" ); + em.merge( house ); + } ); } @Test - public void testPersonRevisionCount() { - assert getAuditReader().getRevisions( Person.class, personId ).equals( getExpectedPersonRevisions() ); + public void testPersonRevisionCount(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( getExpectedPersonRevisions(), + auditReader.getRevisions( Person.class, personId ) ); + } ); } @Test @JiraKey(value = "HHH-10201") - public void testParentRevisionCount() { - assert getAuditReader().getRevisions( Parent.class, parentId ).equals( getExpectedParentRevisions() ); + public void testParentRevisionCount(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( getExpectedParentRevisions(), + auditReader.getRevisions( Parent.class, parentId ) ); + } ); } @Test @JiraKey(value = "HHH-10201") - public void testHouseRevisionCount() { - assert getAuditReader().getRevisions( House.class, houseId ).equals( getExpectedHouseRevisions() ); + public void testHouseRevisionCount(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( getExpectedHouseRevisions(), + auditReader.getRevisions( House.class, houseId ) ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/norevision/CollectionChangeNoRevisionTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/norevision/CollectionChangeNoRevisionTest.java index 8a46193ccfda..edbf8843c49e 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/norevision/CollectionChangeNoRevisionTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/norevision/CollectionChangeNoRevisionTest.java @@ -7,11 +7,15 @@ import java.util.Arrays; import java.util.List; -public class CollectionChangeNoRevisionTest extends AbstractCollectionChangeTest { - protected String getCollectionChangeValue() { - return "false"; - } +import org.hibernate.envers.configuration.EnversSettings; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.Jpa; +import org.hibernate.testing.orm.junit.Setting; +@EnversTest +@Jpa(annotatedClasses = {Person.class, Name.class, Parent.class, Child.class, House.class}, + integrationSettings = @Setting(name = EnversSettings.REVISION_ON_COLLECTION_CHANGE, value = "false")) +public class CollectionChangeNoRevisionTest extends AbstractCollectionChangeTest { @Override protected List getExpectedPersonRevisions() { return Arrays.asList( 1 ); diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/norevision/CollectionChangeRevisionTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/norevision/CollectionChangeRevisionTest.java index dec3420fffb1..4456fbaa5cc4 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/norevision/CollectionChangeRevisionTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/collection/norevision/CollectionChangeRevisionTest.java @@ -7,12 +7,15 @@ import java.util.Arrays; import java.util.List; -public class CollectionChangeRevisionTest extends AbstractCollectionChangeTest { - @Override - protected String getCollectionChangeValue() { - return "true"; - } +import org.hibernate.envers.configuration.EnversSettings; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.Jpa; +import org.hibernate.testing.orm.junit.Setting; +@EnversTest +@Jpa(annotatedClasses = {Person.class, Name.class, Parent.class, Child.class, House.class}, + integrationSettings = @Setting(name = EnversSettings.REVISION_ON_COLLECTION_CHANGE, value = "true")) +public class CollectionChangeRevisionTest extends AbstractCollectionChangeTest { @Override protected List getExpectedPersonRevisions() { return Arrays.asList( 1, 3 ); diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/Components.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/Components.java index 502f2e880418..d5d1723d73b2 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/Components.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/Components.java @@ -5,163 +5,162 @@ package org.hibernate.orm.test.envers.integration.components; import java.util.Arrays; -import jakarta.persistence.EntityManager; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.orm.test.envers.entities.components.Component1; import org.hibernate.orm.test.envers.entities.components.Component2; import org.hibernate.orm.test.envers.entities.components.ComponentTestEntity; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; -import org.junit.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNull; /** * @author Adam Warski (adam at warski dot org) */ -public class Components extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {ComponentTestEntity.class}) +public class Components { private Integer id1; private Integer id2; private Integer id3; private Integer id4; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {ComponentTestEntity.class}; - } - - @Test - @Priority(10) - public void initData() { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - - ComponentTestEntity cte1 = new ComponentTestEntity( new Component1( "a", "b" ), new Component2( "x", "y" ) ); - ComponentTestEntity cte2 = new ComponentTestEntity( - new Component1( "a2", "b2" ), new Component2( - "x2", - "y2" - ) - ); - ComponentTestEntity cte3 = new ComponentTestEntity( - new Component1( "a3", "b3" ), new Component2( - "x3", - "y3" - ) - ); - ComponentTestEntity cte4 = new ComponentTestEntity( null, null ); - - em.persist( cte1 ); - em.persist( cte2 ); - em.persist( cte3 ); - em.persist( cte4 ); - - em.getTransaction().commit(); + scope.inTransaction( em -> { + ComponentTestEntity cte1 = new ComponentTestEntity( new Component1( "a", "b" ), new Component2( "x", "y" ) ); + ComponentTestEntity cte2 = new ComponentTestEntity( + new Component1( "a2", "b2" ), new Component2( + "x2", + "y2" + ) + ); + ComponentTestEntity cte3 = new ComponentTestEntity( + new Component1( "a3", "b3" ), new Component2( + "x3", + "y3" + ) + ); + ComponentTestEntity cte4 = new ComponentTestEntity( null, null ); + + em.persist( cte1 ); + em.persist( cte2 ); + em.persist( cte3 ); + em.persist( cte4 ); + + id1 = cte1.getId(); + id2 = cte2.getId(); + id3 = cte3.getId(); + id4 = cte4.getId(); + } ); // Revision 2 - em = getEntityManager(); - em.getTransaction().begin(); - - cte1 = em.find( ComponentTestEntity.class, cte1.getId() ); - cte2 = em.find( ComponentTestEntity.class, cte2.getId() ); - cte3 = em.find( ComponentTestEntity.class, cte3.getId() ); - cte4 = em.find( ComponentTestEntity.class, cte4.getId() ); - - cte1.setComp1( new Component1( "a'", "b'" ) ); - cte2.getComp1().setStr1( "a2'" ); - cte3.getComp2().setStr6( "y3'" ); - cte4.setComp1( new Component1() ); - cte4.getComp1().setStr1( "n" ); - cte4.setComp2( new Component2() ); - cte4.getComp2().setStr5( "m" ); - - em.getTransaction().commit(); + scope.inTransaction( em -> { + ComponentTestEntity cte1 = em.find( ComponentTestEntity.class, id1 ); + ComponentTestEntity cte2 = em.find( ComponentTestEntity.class, id2 ); + ComponentTestEntity cte3 = em.find( ComponentTestEntity.class, id3 ); + ComponentTestEntity cte4 = em.find( ComponentTestEntity.class, id4 ); + + cte1.setComp1( new Component1( "a'", "b'" ) ); + cte2.getComp1().setStr1( "a2'" ); + cte3.getComp2().setStr6( "y3'" ); + cte4.setComp1( new Component1() ); + cte4.getComp1().setStr1( "n" ); + cte4.setComp2( new Component2() ); + cte4.getComp2().setStr5( "m" ); + } ); // Revision 3 - em = getEntityManager(); - em.getTransaction().begin(); - - cte1 = em.find( ComponentTestEntity.class, cte1.getId() ); - cte2 = em.find( ComponentTestEntity.class, cte2.getId() ); - cte3 = em.find( ComponentTestEntity.class, cte3.getId() ); - cte4 = em.find( ComponentTestEntity.class, cte4.getId() ); - - cte1.setComp2( new Component2( "x'", "y'" ) ); - cte3.getComp1().setStr2( "b3'" ); - cte4.setComp1( null ); - cte4.setComp2( null ); - - em.getTransaction().commit(); + scope.inTransaction( em -> { + ComponentTestEntity cte1 = em.find( ComponentTestEntity.class, id1 ); + ComponentTestEntity cte2 = em.find( ComponentTestEntity.class, id2 ); + ComponentTestEntity cte3 = em.find( ComponentTestEntity.class, id3 ); + ComponentTestEntity cte4 = em.find( ComponentTestEntity.class, id4 ); + + cte1.setComp2( new Component2( "x'", "y'" ) ); + cte3.getComp1().setStr2( "b3'" ); + cte4.setComp1( null ); + cte4.setComp2( null ); + } ); // Revision 4 - em = getEntityManager(); - em.getTransaction().begin(); - - cte2 = em.find( ComponentTestEntity.class, cte2.getId() ); - - em.remove( cte2 ); - - em.getTransaction().commit(); - - id1 = cte1.getId(); - id2 = cte2.getId(); - id3 = cte3.getId(); - id4 = cte4.getId(); + scope.inTransaction( em -> { + ComponentTestEntity cte2 = em.find( ComponentTestEntity.class, id2 ); + em.remove( cte2 ); + } ); } @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( ComponentTestEntity.class, id1 ) ); - - assert Arrays.asList( 1, 2, 4 ).equals( getAuditReader().getRevisions( ComponentTestEntity.class, id2 ) ); - - assert Arrays.asList( 1, 3 ).equals( getAuditReader().getRevisions( ComponentTestEntity.class, id3 ) ); - - assert Arrays.asList( 1, 2, 3 ).equals( getAuditReader().getRevisions( ComponentTestEntity.class, id4 ) ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1, 2 ), auditReader.getRevisions( ComponentTestEntity.class, id1 ) ); + assertEquals( Arrays.asList( 1, 2, 4 ), auditReader.getRevisions( ComponentTestEntity.class, id2 ) ); + assertEquals( Arrays.asList( 1, 3 ), auditReader.getRevisions( ComponentTestEntity.class, id3 ) ); + assertEquals( Arrays.asList( 1, 2, 3 ), auditReader.getRevisions( ComponentTestEntity.class, id4 ) ); + } ); } @Test - public void testHistoryOfId1() { + public void testHistoryOfId1(EntityManagerFactoryScope scope) { ComponentTestEntity ver1 = new ComponentTestEntity( id1, new Component1( "a", "b" ), null ); ComponentTestEntity ver2 = new ComponentTestEntity( id1, new Component1( "a'", "b'" ), null ); - assert getAuditReader().find( ComponentTestEntity.class, id1, 1 ).equals( ver1 ); - assert getAuditReader().find( ComponentTestEntity.class, id1, 2 ).equals( ver2 ); - assert getAuditReader().find( ComponentTestEntity.class, id1, 3 ).equals( ver2 ); - assert getAuditReader().find( ComponentTestEntity.class, id1, 4 ).equals( ver2 ); + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( ver1, auditReader.find( ComponentTestEntity.class, id1, 1 ) ); + assertEquals( ver2, auditReader.find( ComponentTestEntity.class, id1, 2 ) ); + assertEquals( ver2, auditReader.find( ComponentTestEntity.class, id1, 3 ) ); + assertEquals( ver2, auditReader.find( ComponentTestEntity.class, id1, 4 ) ); + } ); } @Test - public void testHistoryOfId2() { + public void testHistoryOfId2(EntityManagerFactoryScope scope) { ComponentTestEntity ver1 = new ComponentTestEntity( id2, new Component1( "a2", "b2" ), null ); ComponentTestEntity ver2 = new ComponentTestEntity( id2, new Component1( "a2'", "b2" ), null ); - assert getAuditReader().find( ComponentTestEntity.class, id2, 1 ).equals( ver1 ); - assert getAuditReader().find( ComponentTestEntity.class, id2, 2 ).equals( ver2 ); - assert getAuditReader().find( ComponentTestEntity.class, id2, 3 ).equals( ver2 ); - assert getAuditReader().find( ComponentTestEntity.class, id2, 4 ) == null; + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( ver1, auditReader.find( ComponentTestEntity.class, id2, 1 ) ); + assertEquals( ver2, auditReader.find( ComponentTestEntity.class, id2, 2 ) ); + assertEquals( ver2, auditReader.find( ComponentTestEntity.class, id2, 3 ) ); + assertNull( auditReader.find( ComponentTestEntity.class, id2, 4 ) ); + } ); } @Test - public void testHistoryOfId3() { + public void testHistoryOfId3(EntityManagerFactoryScope scope) { ComponentTestEntity ver1 = new ComponentTestEntity( id3, new Component1( "a3", "b3" ), null ); ComponentTestEntity ver2 = new ComponentTestEntity( id3, new Component1( "a3", "b3'" ), null ); - assert getAuditReader().find( ComponentTestEntity.class, id3, 1 ).equals( ver1 ); - assert getAuditReader().find( ComponentTestEntity.class, id3, 2 ).equals( ver1 ); - assert getAuditReader().find( ComponentTestEntity.class, id3, 3 ).equals( ver2 ); - assert getAuditReader().find( ComponentTestEntity.class, id3, 4 ).equals( ver2 ); + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( ver1, auditReader.find( ComponentTestEntity.class, id3, 1 ) ); + assertEquals( ver1, auditReader.find( ComponentTestEntity.class, id3, 2 ) ); + assertEquals( ver2, auditReader.find( ComponentTestEntity.class, id3, 3 ) ); + assertEquals( ver2, auditReader.find( ComponentTestEntity.class, id3, 4 ) ); + } ); } @Test - public void testHistoryOfId4() { + public void testHistoryOfId4(EntityManagerFactoryScope scope) { ComponentTestEntity ver1 = new ComponentTestEntity( id4, null, null ); ComponentTestEntity ver2 = new ComponentTestEntity( id4, new Component1( "n", null ), null ); ComponentTestEntity ver3 = new ComponentTestEntity( id4, null, null ); - assert getAuditReader().find( ComponentTestEntity.class, id4, 1 ).equals( ver1 ); - assert getAuditReader().find( ComponentTestEntity.class, id4, 2 ).equals( ver2 ); - assert getAuditReader().find( ComponentTestEntity.class, id4, 3 ).equals( ver3 ); - assert getAuditReader().find( ComponentTestEntity.class, id4, 4 ).equals( ver3 ); + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( ver1, auditReader.find( ComponentTestEntity.class, id4, 1 ) ); + assertEquals( ver2, auditReader.find( ComponentTestEntity.class, id4, 2 ) ); + assertEquals( ver3, auditReader.find( ComponentTestEntity.class, id4, 3 ) ); + assertEquals( ver3, auditReader.find( ComponentTestEntity.class, id4, 4 ) ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/DefaultValueComponents.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/DefaultValueComponents.java index 0e7cee8aeeea..f8ace07817d0 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/DefaultValueComponents.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/DefaultValueComponents.java @@ -4,28 +4,33 @@ */ package org.hibernate.orm.test.envers.integration.components; -import java.util.Arrays; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.orm.test.envers.entities.components.DefaultValueComponent1; import org.hibernate.orm.test.envers.entities.components.DefaultValueComponent2; import org.hibernate.orm.test.envers.entities.components.DefaultValueComponentTestEntity; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; +import org.jboss.logging.Logger; +import org.junit.jupiter.api.Test; -import org.junit.Test; +import java.util.Arrays; -import org.jboss.logging.Logger; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNull; /** * Test class for components with default values. * * @author Erik-Berndt Scheper * @see - * Hibernate JIRA + * href="http://opensource.atlassian.com/projects/hibernate/browse/HHH-5288"> + * Hibernate JIRA */ -public class DefaultValueComponents extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {DefaultValueComponentTestEntity.class}) +public class DefaultValueComponents { private static final Logger log = Logger.getLogger( DefaultValueComponents.class ); private Integer id0; @@ -36,449 +41,377 @@ public class DefaultValueComponents extends BaseEnversJPAFunctionalTestCase { private Integer id5; private Integer id6; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {DefaultValueComponentTestEntity.class}; + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + // Revision 1 + em.getTransaction().begin(); + + DefaultValueComponentTestEntity cte0 = DefaultValueComponentTestEntity + .of( null ); + + DefaultValueComponentTestEntity cte1 = DefaultValueComponentTestEntity + .of( DefaultValueComponent1.of( "c1-str1", null ) ); + + DefaultValueComponentTestEntity cte2 = DefaultValueComponentTestEntity + .of( + DefaultValueComponent1.of( + "c1-str1", DefaultValueComponent2 + .of( "c2-str1", "c2-str2" ) + ) + ); + + DefaultValueComponentTestEntity cte3 = DefaultValueComponentTestEntity + .of( + DefaultValueComponent1.of( + null, DefaultValueComponent2.of( + "c2-str1", "c2-str2" + ) + ) + ); + + DefaultValueComponentTestEntity cte4 = DefaultValueComponentTestEntity + .of( + DefaultValueComponent1.of( + null, DefaultValueComponent2.of( + null, "c2-str2" + ) + ) + ); + + DefaultValueComponentTestEntity cte5 = DefaultValueComponentTestEntity + .of( + DefaultValueComponent1.of( + null, DefaultValueComponent2.of( + "c2-str1", null + ) + ) + ); + + DefaultValueComponentTestEntity cte6 = DefaultValueComponentTestEntity + .of( + DefaultValueComponent1.of( + null, DefaultValueComponent2.of( + null, null + ) + ) + ); + + em.persist( cte0 ); + em.persist( cte1 ); + em.persist( cte2 ); + em.persist( cte3 ); + em.persist( cte4 ); + em.persist( cte5 ); + em.persist( cte6 ); + + em.getTransaction().commit(); + + // Revision 2 + em.getTransaction().begin(); + + cte0 = em.find( DefaultValueComponentTestEntity.class, cte0.getId() ); + cte1 = em.find( DefaultValueComponentTestEntity.class, cte1.getId() ); + cte2 = em.find( DefaultValueComponentTestEntity.class, cte2.getId() ); + cte3 = em.find( DefaultValueComponentTestEntity.class, cte3.getId() ); + cte4 = em.find( DefaultValueComponentTestEntity.class, cte4.getId() ); + cte5 = em.find( DefaultValueComponentTestEntity.class, cte5.getId() ); + cte6 = em.find( DefaultValueComponentTestEntity.class, cte6.getId() ); + + cte0.setComp1( DefaultValueComponent1.of( "upd-c1-str1", null ) ); + cte1.setComp1( + DefaultValueComponent1.of( + null, DefaultValueComponent2 + .of( "upd-c2-str1", "upd-c2-str2" ) + ) + ); + cte2.getComp1().getComp2().setStr1( "upd-c2-str1" ); + cte3.getComp1().getComp2().setStr1( "upd-c2-str1" ); + cte4.getComp1().getComp2().setStr1( "upd-c2-str1" ); + cte5.getComp1().getComp2().setStr1( "upd-c2-str1" ); + cte6.getComp1().getComp2().setStr1( "upd-c2-str1" ); + + em.getTransaction().commit(); + + // afterwards + id0 = cte0.getId(); + id1 = cte1.getId(); + id2 = cte2.getId(); + id3 = cte3.getId(); + id4 = cte4.getId(); + id5 = cte5.getId(); + id6 = cte6.getId(); + } ); } @Test - @Priority(10) - public void initData() { - // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - - DefaultValueComponentTestEntity cte0 = DefaultValueComponentTestEntity - .of( null ); - - DefaultValueComponentTestEntity cte1 = DefaultValueComponentTestEntity - .of( DefaultValueComponent1.of( "c1-str1", null ) ); - - DefaultValueComponentTestEntity cte2 = DefaultValueComponentTestEntity - .of( - DefaultValueComponent1.of( - "c1-str1", DefaultValueComponent2 - .of( "c2-str1", "c2-str2" ) - ) - ); - - DefaultValueComponentTestEntity cte3 = DefaultValueComponentTestEntity - .of( - DefaultValueComponent1.of( - null, DefaultValueComponent2.of( - "c2-str1", "c2-str2" - ) - ) - ); - - DefaultValueComponentTestEntity cte4 = DefaultValueComponentTestEntity - .of( - DefaultValueComponent1.of( - null, DefaultValueComponent2.of( - null, "c2-str2" - ) - ) - ); - - DefaultValueComponentTestEntity cte5 = DefaultValueComponentTestEntity - .of( - DefaultValueComponent1.of( - null, DefaultValueComponent2.of( - "c2-str1", null - ) - ) - ); - - DefaultValueComponentTestEntity cte6 = DefaultValueComponentTestEntity - .of( - DefaultValueComponent1.of( - null, DefaultValueComponent2.of( - null, null - ) - ) - ); - - em.persist( cte0 ); - em.persist( cte1 ); - em.persist( cte2 ); - em.persist( cte3 ); - em.persist( cte4 ); - em.persist( cte5 ); - em.persist( cte6 ); - - em.getTransaction().commit(); - - // Revision 2 - em = getEntityManager(); - em.getTransaction().begin(); - - cte0 = em.find( DefaultValueComponentTestEntity.class, cte0.getId() ); - cte1 = em.find( DefaultValueComponentTestEntity.class, cte1.getId() ); - cte2 = em.find( DefaultValueComponentTestEntity.class, cte2.getId() ); - cte3 = em.find( DefaultValueComponentTestEntity.class, cte3.getId() ); - cte4 = em.find( DefaultValueComponentTestEntity.class, cte4.getId() ); - cte5 = em.find( DefaultValueComponentTestEntity.class, cte5.getId() ); - cte6 = em.find( DefaultValueComponentTestEntity.class, cte6.getId() ); - - cte0.setComp1( DefaultValueComponent1.of( "upd-c1-str1", null ) ); - cte1.setComp1( - DefaultValueComponent1.of( - null, DefaultValueComponent2 - .of( "upd-c2-str1", "upd-c2-str2" ) - ) - ); - cte2.getComp1().getComp2().setStr1( "upd-c2-str1" ); - cte3.getComp1().getComp2().setStr1( "upd-c2-str1" ); - cte4.getComp1().getComp2().setStr1( "upd-c2-str1" ); - cte5.getComp1().getComp2().setStr1( "upd-c2-str1" ); - cte6.getComp1().getComp2().setStr1( "upd-c2-str1" ); - - em.getTransaction().commit(); - - // afterwards - id0 = cte0.getId(); - id1 = cte1.getId(); - id2 = cte2.getId(); - id3 = cte3.getId(); - id4 = cte4.getId(); - id5 = cte5.getId(); - id6 = cte6.getId(); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + log.error( auditReader.getRevisions( DefaultValueComponentTestEntity.class, id0 ).toString() ); + log.error( auditReader.getRevisions( DefaultValueComponentTestEntity.class, id1 ).toString() ); + log.error( auditReader.getRevisions( DefaultValueComponentTestEntity.class, id2 ).toString() ); + log.error( auditReader.getRevisions( DefaultValueComponentTestEntity.class, id3 ).toString() ); + log.error( auditReader.getRevisions( DefaultValueComponentTestEntity.class, id4 ).toString() ); + log.error( auditReader.getRevisions( DefaultValueComponentTestEntity.class, id5 ).toString() ); + log.error( auditReader.getRevisions( DefaultValueComponentTestEntity.class, id6 ).toString() ); + + assertEquals( Arrays.asList( 1, 2 ), + auditReader.getRevisions( DefaultValueComponentTestEntity.class, id0 ) ); + assertEquals( Arrays.asList( 1, 2 ), + auditReader.getRevisions( DefaultValueComponentTestEntity.class, id1 ) ); + assertEquals( Arrays.asList( 1, 2 ), + auditReader.getRevisions( DefaultValueComponentTestEntity.class, id2 ) ); + assertEquals( Arrays.asList( 1, 2 ), + auditReader.getRevisions( DefaultValueComponentTestEntity.class, id3 ) ); + assertEquals( Arrays.asList( 1, 2 ), + auditReader.getRevisions( DefaultValueComponentTestEntity.class, id4 ) ); + assertEquals( Arrays.asList( 1, 2 ), + auditReader.getRevisions( DefaultValueComponentTestEntity.class, id5 ) ); + assertEquals( Arrays.asList( 1, 2 ), + auditReader.getRevisions( DefaultValueComponentTestEntity.class, id6 ) ); + } ); } @Test - public void testRevisionsCounts() { - log.error( - getAuditReader().getRevisions( - DefaultValueComponentTestEntity.class, id0 - ).toString() - ); - log.error( - getAuditReader().getRevisions( - DefaultValueComponentTestEntity.class, id1 - ).toString() - ); - log.error( - getAuditReader().getRevisions( - DefaultValueComponentTestEntity.class, id2 - ).toString() - ); - log.error( - getAuditReader().getRevisions( - DefaultValueComponentTestEntity.class, id3 - ).toString() - ); - log.error( - getAuditReader().getRevisions( - DefaultValueComponentTestEntity.class, id4 - ).toString() - ); - log.error( - getAuditReader().getRevisions( - DefaultValueComponentTestEntity.class, id5 - ).toString() - ); - log.error( - getAuditReader().getRevisions( - DefaultValueComponentTestEntity.class, id6 - ).toString() - ); - - assert Arrays.asList( 1, 2 ).equals( - getAuditReader().getRevisions( - DefaultValueComponentTestEntity.class, id0 - ) - ); - - assert Arrays.asList( 1, 2 ).equals( - getAuditReader().getRevisions( - DefaultValueComponentTestEntity.class, id1 - ) - ); - - assert Arrays.asList( 1, 2 ).equals( - getAuditReader().getRevisions( - DefaultValueComponentTestEntity.class, id2 - ) - ); - - assert Arrays.asList( 1, 2 ).equals( - getAuditReader().getRevisions( - DefaultValueComponentTestEntity.class, id3 - ) - ); - - assert Arrays.asList( 1, 2 ).equals( - getAuditReader().getRevisions( - DefaultValueComponentTestEntity.class, id4 - ) - ); - - assert Arrays.asList( 1, 2 ).equals( - getAuditReader().getRevisions( - DefaultValueComponentTestEntity.class, id5 - ) - ); - - assert Arrays.asList( 1, 2 ).equals( - getAuditReader().getRevisions( - DefaultValueComponentTestEntity.class, id6 - ) - ); + public void testHistoryOfId0(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + DefaultValueComponentTestEntity ent1 = auditReader.find( DefaultValueComponentTestEntity.class, id0, 1 ); + DefaultValueComponentTestEntity ent2 = auditReader.find( DefaultValueComponentTestEntity.class, id0, 2 ); + + log.error( "------------ id0 -------------" ); + log.error( ent1.toString() ); + log.error( ent2.toString() ); + + checkCorrectlyPersisted( em, id0, null, null ); + + DefaultValueComponentTestEntity expectedVer1 = DefaultValueComponentTestEntity + .of( id0, DefaultValueComponent1.of( null, null ) ); + DefaultValueComponentTestEntity expectedVer2 = DefaultValueComponentTestEntity + .of( id0, DefaultValueComponent1.of( "upd-c1-str1", null ) ); + + assertEquals( expectedVer1, ent1 ); + assertEquals( expectedVer2, ent2 ); + } ); } @Test - public void testHistoryOfId0() { - - DefaultValueComponentTestEntity ent1 = getAuditReader().find( - DefaultValueComponentTestEntity.class, id0, 1 - ); - DefaultValueComponentTestEntity ent2 = getAuditReader().find( - DefaultValueComponentTestEntity.class, id0, 2 - ); - - log.error( "------------ id0 -------------" ); - log.error( ent1.toString() ); - log.error( ent2.toString() ); - - checkCorrectlyPersisted( id0, null, null ); - - DefaultValueComponentTestEntity expectedVer1 = DefaultValueComponentTestEntity - .of( id0, DefaultValueComponent1.of( null, null ) ); - DefaultValueComponentTestEntity expectedVer2 = DefaultValueComponentTestEntity - .of( id0, DefaultValueComponent1.of( "upd-c1-str1", null ) ); - - assert ent1.equals( expectedVer1 ); - assert ent2.equals( expectedVer2 ); - } - - @Test - public void testHistoryOfId1() { - - DefaultValueComponentTestEntity ent1 = getAuditReader().find( - DefaultValueComponentTestEntity.class, id1, 1 - ); - DefaultValueComponentTestEntity ent2 = getAuditReader().find( - DefaultValueComponentTestEntity.class, id1, 2 - ); - - log.error( "------------ id1 -------------" ); - log.error( ent1.toString() ); - log.error( ent2.toString() ); - - checkCorrectlyPersisted( id1, null, "upd-c2-str1" ); - - DefaultValueComponentTestEntity expectedVer1 = DefaultValueComponentTestEntity - .of( id1, DefaultValueComponent1.of( "c1-str1", null ) ); - DefaultValueComponentTestEntity expectedVer2 = DefaultValueComponentTestEntity - .of( - id1, DefaultValueComponent1.of( - null, DefaultValueComponent2 - .of( "upd-c2-str1", "upd-c2-str2" ) - ) - ); - - assert ent2.equals( expectedVer2 ); - assert ent1.equals( expectedVer1 ); + public void testHistoryOfId1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + DefaultValueComponentTestEntity ent1 = auditReader.find( DefaultValueComponentTestEntity.class, id1, 1 ); + DefaultValueComponentTestEntity ent2 = auditReader.find( DefaultValueComponentTestEntity.class, id1, 2 ); + + log.error( "------------ id1 -------------" ); + log.error( ent1.toString() ); + log.error( ent2.toString() ); + + checkCorrectlyPersisted( em, id1, null, "upd-c2-str1" ); + + DefaultValueComponentTestEntity expectedVer1 = DefaultValueComponentTestEntity + .of( id1, DefaultValueComponent1.of( "c1-str1", null ) ); + DefaultValueComponentTestEntity expectedVer2 = DefaultValueComponentTestEntity + .of( + id1, DefaultValueComponent1.of( + null, DefaultValueComponent2 + .of( "upd-c2-str1", "upd-c2-str2" ) + ) + ); + + assertEquals( expectedVer2, ent2 ); + assertEquals( expectedVer1, ent1 ); + } ); } @Test - public void testHistoryOfId2() { - - DefaultValueComponentTestEntity ent1 = getAuditReader().find( - DefaultValueComponentTestEntity.class, id2, 1 - ); - DefaultValueComponentTestEntity ent2 = getAuditReader().find( - DefaultValueComponentTestEntity.class, id2, 2 - ); - - log.error( "------------ id2 -------------" ); - log.error( ent1.toString() ); - log.error( ent2.toString() ); - - DefaultValueComponentTestEntity expectedVer1 = DefaultValueComponentTestEntity - .of( - id2, DefaultValueComponent1.of( - "c1-str1", - DefaultValueComponent2.of( "c2-str1", "c2-str2" ) - ) - ); - DefaultValueComponentTestEntity expectedVer2 = DefaultValueComponentTestEntity - .of( - id2, DefaultValueComponent1.of( - "c1-str1", - DefaultValueComponent2.of( "upd-c2-str1", "c2-str2" ) - ) - ); - - assert ent1.equals( expectedVer1 ); - assert ent2.equals( expectedVer2 ); + public void testHistoryOfId2(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + DefaultValueComponentTestEntity ent1 = auditReader.find( DefaultValueComponentTestEntity.class, id2, 1 ); + DefaultValueComponentTestEntity ent2 = auditReader.find( DefaultValueComponentTestEntity.class, id2, 2 ); + + log.error( "------------ id2 -------------" ); + log.error( ent1.toString() ); + log.error( ent2.toString() ); + + DefaultValueComponentTestEntity expectedVer1 = DefaultValueComponentTestEntity + .of( + id2, DefaultValueComponent1.of( + "c1-str1", + DefaultValueComponent2.of( "c2-str1", "c2-str2" ) + ) + ); + DefaultValueComponentTestEntity expectedVer2 = DefaultValueComponentTestEntity + .of( + id2, DefaultValueComponent1.of( + "c1-str1", + DefaultValueComponent2.of( "upd-c2-str1", "c2-str2" ) + ) + ); + + assertEquals( expectedVer1, ent1 ); + assertEquals( expectedVer2, ent2 ); + } ); } @Test - public void testHistoryOfId3() { - - DefaultValueComponentTestEntity ent1 = getAuditReader().find( - DefaultValueComponentTestEntity.class, id3, 1 - ); - DefaultValueComponentTestEntity ent2 = getAuditReader().find( - DefaultValueComponentTestEntity.class, id3, 2 - ); - - log.error( "------------ id3 -------------" ); - log.error( ent1.toString() ); - log.error( ent2.toString() ); - - DefaultValueComponentTestEntity expectedVer1 = DefaultValueComponentTestEntity - .of( - id3, DefaultValueComponent1.of( - null, DefaultValueComponent2 - .of( "c2-str1", "c2-str2" ) - ) - ); - DefaultValueComponentTestEntity expectedVer2 = DefaultValueComponentTestEntity - .of( - id3, DefaultValueComponent1.of( - null, DefaultValueComponent2 - .of( "upd-c2-str1", "c2-str2" ) - ) - ); - - assert ent1.equals( expectedVer1 ); - assert ent2.equals( expectedVer2 ); + public void testHistoryOfId3(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + DefaultValueComponentTestEntity ent1 = auditReader.find( DefaultValueComponentTestEntity.class, id3, 1 ); + DefaultValueComponentTestEntity ent2 = auditReader.find( DefaultValueComponentTestEntity.class, id3, 2 ); + + log.error( "------------ id3 -------------" ); + log.error( ent1.toString() ); + log.error( ent2.toString() ); + + DefaultValueComponentTestEntity expectedVer1 = DefaultValueComponentTestEntity + .of( + id3, DefaultValueComponent1.of( + null, DefaultValueComponent2 + .of( "c2-str1", "c2-str2" ) + ) + ); + DefaultValueComponentTestEntity expectedVer2 = DefaultValueComponentTestEntity + .of( + id3, DefaultValueComponent1.of( + null, DefaultValueComponent2 + .of( "upd-c2-str1", "c2-str2" ) + ) + ); + + assertEquals( expectedVer1, ent1 ); + assertEquals( expectedVer2, ent2 ); + } ); } @Test - public void testHistoryOfId4() { - - DefaultValueComponentTestEntity ent1 = getAuditReader().find( - DefaultValueComponentTestEntity.class, id4, 1 - ); - DefaultValueComponentTestEntity ent2 = getAuditReader().find( - DefaultValueComponentTestEntity.class, id4, 2 - ); - - log.error( "------------ id4 -------------" ); - log.error( ent1.toString() ); - log.error( ent2.toString() ); - - DefaultValueComponentTestEntity expectedVer1 = DefaultValueComponentTestEntity - .of( - id4, DefaultValueComponent1.of( - null, DefaultValueComponent2 - .of( null, "c2-str2" ) - ) - ); - DefaultValueComponentTestEntity expectedVer2 = DefaultValueComponentTestEntity - .of( - id4, DefaultValueComponent1.of( - null, DefaultValueComponent2 - .of( "upd-c2-str1", "c2-str2" ) - ) - ); - - assert ent1.equals( expectedVer1 ); - assert ent2.equals( expectedVer2 ); + public void testHistoryOfId4(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + DefaultValueComponentTestEntity ent1 = auditReader.find( DefaultValueComponentTestEntity.class, id4, 1 ); + DefaultValueComponentTestEntity ent2 = auditReader.find( DefaultValueComponentTestEntity.class, id4, 2 ); + + log.error( "------------ id4 -------------" ); + log.error( ent1.toString() ); + log.error( ent2.toString() ); + + DefaultValueComponentTestEntity expectedVer1 = DefaultValueComponentTestEntity + .of( + id4, DefaultValueComponent1.of( + null, DefaultValueComponent2 + .of( null, "c2-str2" ) + ) + ); + DefaultValueComponentTestEntity expectedVer2 = DefaultValueComponentTestEntity + .of( + id4, DefaultValueComponent1.of( + null, DefaultValueComponent2 + .of( "upd-c2-str1", "c2-str2" ) + ) + ); + + assertEquals( expectedVer1, ent1 ); + assertEquals( expectedVer2, ent2 ); + } ); } @Test - public void testHistoryOfId5() { - - DefaultValueComponentTestEntity ent1 = getAuditReader().find( - DefaultValueComponentTestEntity.class, id5, 1 - ); - DefaultValueComponentTestEntity ent2 = getAuditReader().find( - DefaultValueComponentTestEntity.class, id5, 2 - ); - - log.error( "------------ id5 -------------" ); - log.error( ent1.toString() ); - log.error( ent2.toString() ); - - DefaultValueComponentTestEntity expectedVer1 = DefaultValueComponentTestEntity - .of( - id5, DefaultValueComponent1.of( - null, DefaultValueComponent2 - .of( "c2-str1", null ) - ) - ); - DefaultValueComponentTestEntity expectedVer2 = DefaultValueComponentTestEntity - .of( - id5, DefaultValueComponent1.of( - null, DefaultValueComponent2 - .of( "upd-c2-str1", null ) - ) - ); - - assert ent1.equals( expectedVer1 ); - assert ent2.equals( expectedVer2 ); + public void testHistoryOfId5(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + DefaultValueComponentTestEntity ent1 = auditReader.find( DefaultValueComponentTestEntity.class, id5, 1 ); + DefaultValueComponentTestEntity ent2 = auditReader.find( DefaultValueComponentTestEntity.class, id5, 2 ); + + log.error( "------------ id5 -------------" ); + log.error( ent1.toString() ); + log.error( ent2.toString() ); + + DefaultValueComponentTestEntity expectedVer1 = DefaultValueComponentTestEntity + .of( + id5, DefaultValueComponent1.of( + null, DefaultValueComponent2 + .of( "c2-str1", null ) + ) + ); + DefaultValueComponentTestEntity expectedVer2 = DefaultValueComponentTestEntity + .of( + id5, DefaultValueComponent1.of( + null, DefaultValueComponent2 + .of( "upd-c2-str1", null ) + ) + ); + + assertEquals( expectedVer1, ent1 ); + assertEquals( expectedVer2, ent2 ); + } ); } @Test - public void testHistoryOfId6() { - - DefaultValueComponentTestEntity ent1 = getAuditReader().find( - DefaultValueComponentTestEntity.class, id6, 1 - ); - DefaultValueComponentTestEntity ent2 = getAuditReader().find( - DefaultValueComponentTestEntity.class, id6, 2 - ); - - log.error( "------------ id6 -------------" ); - log.error( ent1.toString() ); - log.error( ent2.toString() ); - - DefaultValueComponentTestEntity expectedVer1 = DefaultValueComponentTestEntity - .of( id6, DefaultValueComponent1.of( null, null ) ); - DefaultValueComponentTestEntity expectedVer2 = DefaultValueComponentTestEntity - .of( - id6, DefaultValueComponent1.of( - null, DefaultValueComponent2 - .of( "upd-c2-str1", null ) - ) - ); - - assert ent2.equals( expectedVer2 ); - assert ent1.equals( expectedVer1 ); + public void testHistoryOfId6(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + DefaultValueComponentTestEntity ent1 = auditReader.find( DefaultValueComponentTestEntity.class, id6, 1 ); + DefaultValueComponentTestEntity ent2 = auditReader.find( DefaultValueComponentTestEntity.class, id6, 2 ); + + log.error( "------------ id6 -------------" ); + log.error( ent1.toString() ); + log.error( ent2.toString() ); + + DefaultValueComponentTestEntity expectedVer1 = DefaultValueComponentTestEntity + .of( id6, DefaultValueComponent1.of( null, null ) ); + DefaultValueComponentTestEntity expectedVer2 = DefaultValueComponentTestEntity + .of( + id6, DefaultValueComponent1.of( + null, DefaultValueComponent2 + .of( "upd-c2-str1", null ) + ) + ); + + assertEquals( expectedVer2, ent2 ); + assertEquals( expectedVer1, ent1 ); + } ); } private void checkCorrectlyPersisted( + jakarta.persistence.EntityManager em, Integer expectedId, String expectedComp2Str1Rev1, String expectedComp2Str1Rev2) { // Verify that the entity was correctly persisted - EntityManager em = getEntityManager(); Long entCount = (Long) em.createQuery( "select count(s) from DefaultValueComponentTestEntity s where s.id = " - + expectedId.toString() + + expectedId.toString() ).getSingleResult(); Number auditCount = (Number) em.createNativeQuery( "select count(id) from DefaultValueComponent_AUD s where s.id = " - + expectedId.toString() + + expectedId.toString() ).getSingleResult(); String comp2Str1Rev1 = (String) em .createNativeQuery( "select COMP2_STR1 from DefaultValueComponent_AUD s where REV=1 and s.id = " - + expectedId.toString() + + expectedId.toString() ).getSingleResult(); String comp2Str1Rev2 = (String) em .createNativeQuery( "select COMP2_STR1 from DefaultValueComponent_AUD s where REV=2 and s.id = " - + expectedId.toString() + + expectedId.toString() ).getSingleResult(); - assert Long.valueOf( 1L ).equals( entCount ); - assert Integer.valueOf( 2 ).equals( auditCount.intValue() ); + assertEquals( Long.valueOf( 1L ), entCount ); + assertEquals( Integer.valueOf( 2 ), auditCount.intValue() ); if ( expectedComp2Str1Rev1 == null ) { - assert comp2Str1Rev1 == null; + assertNull( comp2Str1Rev1 ); } else { - assert expectedComp2Str1Rev1.equals( comp2Str1Rev1 ); + assertEquals( expectedComp2Str1Rev1, comp2Str1Rev1 ); } if ( expectedComp2Str1Rev2 == null ) { - assert comp2Str1Rev2 == null; + assertNull( comp2Str1Rev2 ); } else { - assert expectedComp2Str1Rev2.equals( comp2Str1Rev2 ); + assertEquals( expectedComp2Str1Rev2, comp2Str1Rev2 ); } } } diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/components/EmbeddableWithCollectionTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/EmbeddableWithCollectionTest.java similarity index 66% rename from hibernate-envers/src/test/java/org/hibernate/envers/test/integration/components/EmbeddableWithCollectionTest.java rename to hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/EmbeddableWithCollectionTest.java index 3149f10cdbc8..002c4b8f6a36 100644 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/components/EmbeddableWithCollectionTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/EmbeddableWithCollectionTest.java @@ -2,7 +2,7 @@ * SPDX-License-Identifier: Apache-2.0 * Copyright Red Hat Inc. and Hibernate Authors */ -package org.hibernate.envers.test.integration.components; +package org.hibernate.orm.test.envers.integration.components; import java.util.ArrayList; import java.util.Arrays; @@ -24,32 +24,30 @@ import jakarta.persistence.Table; import org.hibernate.envers.AuditMappedBy; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; -import org.hibernate.testing.transaction.TransactionUtil; -import org.junit.Test; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Chris Cranford */ @JiraKey(value = "HHH-9108") -public class EmbeddableWithCollectionTest extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {EmbeddableWithCollectionTest.Header.class, EmbeddableWithCollectionTest.Item.class}) +public class EmbeddableWithCollectionTest { private Long headerId; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { Header.class, Item.class }; - } - - @Test - @Priority(10) - public void initData() { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Revision 1 - headerId = TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { + headerId = scope.fromTransaction( entityManager -> { Header h1 = new Header( "h1" ); h1.addItem( new Item( "h1-item0", h1 ) ); h1.addItem( new Item( "h1-item1", h1 ) ); @@ -58,21 +56,21 @@ public void initData() { } ); // Revision 2 - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { + scope.inTransaction( entityManager -> { final Header header = entityManager.find( Header.class, headerId ); header.addItem( new Item( "h1-item2", header ) ); entityManager.merge( header ); } ); // Revision 3 - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { + scope.inTransaction( entityManager -> { final Header header = entityManager.find( Header.class, headerId ); header.removeItem( header.getEmbeddableWithCollection().getItems().get( 0 ) ); entityManager.merge( header ); } ); // Revision 4 - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { + scope.inTransaction( entityManager -> { final Header header = entityManager.find( Header.class, headerId ); header.setEmbeddableWithCollection( null ); entityManager.merge( header ); @@ -80,30 +78,36 @@ public void initData() { } @Test - public void testRevisionCounts() { - assertEquals( Arrays.asList( 1, 2, 3, 4 ), getAuditReader().getRevisions( Header.class, headerId ) ); + public void testRevisionCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1, 2, 3, 4 ), auditReader.getRevisions( Header.class, headerId ) ); + } ); } @Test - public void testRevisionHistory() { - final Header rev1 = getAuditReader().find( Header.class, headerId, 1 ); - assertEquals( 2, rev1.getEmbeddableWithCollection().getItems().size() ); - assertEquals( "h1-item0", rev1.getEmbeddableWithCollection().getItems().get( 0 ).getName() ); - assertEquals( "h1-item1", rev1.getEmbeddableWithCollection().getItems().get( 1 ).getName() ); - - final Header rev2 = getAuditReader().find( Header.class, headerId, 2 ); - assertEquals( 3, rev2.getEmbeddableWithCollection().getItems().size() ); - assertEquals( "h1-item0", rev2.getEmbeddableWithCollection().getItems().get( 0 ).getName() ); - assertEquals( "h1-item1", rev2.getEmbeddableWithCollection().getItems().get( 1 ).getName() ); - assertEquals( "h1-item2", rev2.getEmbeddableWithCollection().getItems().get( 2 ).getName() ); - - final Header rev3 = getAuditReader().find( Header.class, headerId, 3 ); - assertEquals( 2, rev3.getEmbeddableWithCollection().getItems().size() ); - assertEquals( "h1-item1", rev3.getEmbeddableWithCollection().getItems().get( 0 ).getName() ); - assertEquals( "h1-item2", rev3.getEmbeddableWithCollection().getItems().get( 1 ).getName() ); - - final Header rev4 = getAuditReader().find( Header.class, headerId, 4 ); - assertEquals( 0, rev4.getEmbeddableWithCollection().getItems().size() ); + public void testRevisionHistory(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + final Header rev1 = auditReader.find( Header.class, headerId, 1 ); + assertEquals( 2, rev1.getEmbeddableWithCollection().getItems().size() ); + assertEquals( "h1-item0", rev1.getEmbeddableWithCollection().getItems().get( 0 ).getName() ); + assertEquals( "h1-item1", rev1.getEmbeddableWithCollection().getItems().get( 1 ).getName() ); + + final Header rev2 = auditReader.find( Header.class, headerId, 2 ); + assertEquals( 3, rev2.getEmbeddableWithCollection().getItems().size() ); + assertEquals( "h1-item0", rev2.getEmbeddableWithCollection().getItems().get( 0 ).getName() ); + assertEquals( "h1-item1", rev2.getEmbeddableWithCollection().getItems().get( 1 ).getName() ); + assertEquals( "h1-item2", rev2.getEmbeddableWithCollection().getItems().get( 2 ).getName() ); + + final Header rev3 = auditReader.find( Header.class, headerId, 3 ); + assertEquals( 2, rev3.getEmbeddableWithCollection().getItems().size() ); + assertEquals( "h1-item1", rev3.getEmbeddableWithCollection().getItems().get( 0 ).getName() ); + assertEquals( "h1-item2", rev3.getEmbeddableWithCollection().getItems().get( 1 ).getName() ); + + final Header rev4 = auditReader.find( Header.class, headerId, 4 ); + assertEquals( 0, rev4.getEmbeddableWithCollection().getItems().size() ); + } ); } @Entity(name = "Header") diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/PropertiesGroupTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/PropertiesGroupTest.java index c5f8066e81fa..013d11a2d873 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/PropertiesGroupTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/PropertiesGroupTest.java @@ -4,87 +4,94 @@ */ package org.hibernate.orm.test.envers.integration.components; -import org.hibernate.Session; -import org.hibernate.orm.test.envers.BaseEnversFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.components.UniquePropsEntity; -import org.hibernate.orm.test.envers.entities.components.UniquePropsNotAuditedEntity; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.mapping.Column; import org.hibernate.mapping.PersistentClass; - +import org.hibernate.orm.test.envers.entities.components.UniquePropsEntity; +import org.hibernate.orm.test.envers.entities.components.UniquePropsNotAuditedEntity; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.DomainModel; import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Assert; -import org.junit.Test; +import org.hibernate.testing.orm.junit.SessionFactory; +import org.hibernate.testing.orm.junit.SessionFactoryScope; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertNull; /** * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) */ @JiraKey(value = "HHH-6636") -public class PropertiesGroupTest extends BaseEnversFunctionalTestCase { +@EnversTest +@DomainModel(xmlMappings = { + "mappings/components/UniquePropsEntity.hbm.xml", + "mappings/components/UniquePropsNotAuditedEntity.hbm.xml" +}) +@SessionFactory +public class PropertiesGroupTest { private PersistentClass uniquePropsAudit = null; private PersistentClass uniquePropsNotAuditedAudit = null; private UniquePropsEntity entityRev1 = null; private UniquePropsNotAuditedEntity entityNotAuditedRev2 = null; - @Override - protected String[] getMappings() { - return new String[] { - "mappings/components/UniquePropsEntity.hbm.xml", - "mappings/components/UniquePropsNotAuditedEntity.hbm.xml" - }; - } - - @Test - @Priority(10) - public void initData() { - uniquePropsAudit = metadata().getEntityBinding( + @BeforeClassTemplate + public void initData(SessionFactoryScope scope) { + uniquePropsAudit = scope.getMetadataImplementor().getEntityBinding( "org.hibernate.orm.test.envers.entities.components.UniquePropsEntity_AUD" ); - uniquePropsNotAuditedAudit = metadata().getEntityBinding( + uniquePropsNotAuditedAudit = scope.getMetadataImplementor().getEntityBinding( "org.hibernate.orm.test.envers.entities.components.UniquePropsNotAuditedEntity_AUD" ); // Revision 1 - Session session = openSession(); - session.getTransaction().begin(); - UniquePropsEntity ent = new UniquePropsEntity(); - ent.setData1( "data1" ); - ent.setData2( "data2" ); - session.persist( ent ); - session.getTransaction().commit(); + scope.inTransaction( session -> { + UniquePropsEntity ent = new UniquePropsEntity(); + ent.setData1( "data1" ); + ent.setData2( "data2" ); + session.persist( ent ); - entityRev1 = new UniquePropsEntity( ent.getId(), ent.getData1(), ent.getData2() ); + entityRev1 = new UniquePropsEntity( ent.getId(), ent.getData1(), ent.getData2() ); + } ); // Revision 2 - session.getTransaction().begin(); - UniquePropsNotAuditedEntity entNotAud = new UniquePropsNotAuditedEntity(); - entNotAud.setData1( "data3" ); - entNotAud.setData2( "data4" ); - session.persist( entNotAud ); - session.getTransaction().commit(); + scope.inTransaction( session -> { + UniquePropsNotAuditedEntity entNotAud = new UniquePropsNotAuditedEntity(); + entNotAud.setData1( "data3" ); + entNotAud.setData2( "data4" ); + session.persist( entNotAud ); - entityNotAuditedRev2 = new UniquePropsNotAuditedEntity( entNotAud.getId(), entNotAud.getData1(), null ); + entityNotAuditedRev2 = new UniquePropsNotAuditedEntity( entNotAud.getId(), entNotAud.getData1(), null ); + } ); } @Test public void testAuditTableColumns() { - Assert.assertNotNull( uniquePropsAudit.getTable().getColumn( new Column( "DATA1" ) ) ); - Assert.assertNotNull( uniquePropsAudit.getTable().getColumn( new Column( "DATA2" ) ) ); + assertNotNull( uniquePropsAudit.getTable().getColumn( new Column( "DATA1" ) ) ); + assertNotNull( uniquePropsAudit.getTable().getColumn( new Column( "DATA2" ) ) ); - Assert.assertNotNull( uniquePropsNotAuditedAudit.getTable().getColumn( new Column( "DATA1" ) ) ); - Assert.assertNull( uniquePropsNotAuditedAudit.getTable().getColumn( new Column( "DATA2" ) ) ); + assertNotNull( uniquePropsNotAuditedAudit.getTable().getColumn( new Column( "DATA1" ) ) ); + assertNull( uniquePropsNotAuditedAudit.getTable().getColumn( new Column( "DATA2" ) ) ); } @Test - public void testHistoryOfUniquePropsEntity() { - Assert.assertEquals( entityRev1, getAuditReader().find( UniquePropsEntity.class, entityRev1.getId(), 1 ) ); + public void testHistoryOfUniquePropsEntity(SessionFactoryScope scope) { + scope.inSession( session -> { + final var auditReader = AuditReaderFactory.get( session ); + assertEquals( entityRev1, auditReader.find( UniquePropsEntity.class, entityRev1.getId(), 1 ) ); + } ); } @Test - public void testHistoryOfUniquePropsNotAuditedEntity() { - Assert.assertEquals( - entityNotAuditedRev2, - getAuditReader().find( UniquePropsNotAuditedEntity.class, entityNotAuditedRev2.getId(), 2 ) - ); + public void testHistoryOfUniquePropsNotAuditedEntity(SessionFactoryScope scope) { + scope.inSession( session -> { + final var auditReader = AuditReaderFactory.get( session ); + assertEquals( + entityNotAuditedRev2, + auditReader.find( UniquePropsNotAuditedEntity.class, entityNotAuditedRev2.getId(), 2 ) + ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/collections/CollectionOfComponents.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/collections/CollectionOfComponents.java index 4cc9f3350b9f..758b735ad422 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/collections/CollectionOfComponents.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/collections/CollectionOfComponents.java @@ -7,82 +7,83 @@ import java.util.Arrays; import java.util.Collections; import java.util.Set; -import jakarta.persistence.EntityManager; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.orm.test.envers.entities.components.Component1; import org.hibernate.orm.test.envers.entities.components.ComponentSetTestEntity; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; /** * @author Adam Warski (adam at warski dot org) * @author Felix Feisst */ -public class CollectionOfComponents extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {ComponentSetTestEntity.class}) +public class CollectionOfComponents { private Integer id1; private Integer id2; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {ComponentSetTestEntity.class}; - } - - @Test - @Priority(10) - public void initData() { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); + scope.inTransaction( em -> { + ComponentSetTestEntity cte1 = new ComponentSetTestEntity(); - ComponentSetTestEntity cte1 = new ComponentSetTestEntity(); + ComponentSetTestEntity cte2 = new ComponentSetTestEntity(); + cte2.getComps().add( new Component1( "string1", null ) ); - ComponentSetTestEntity cte2 = new ComponentSetTestEntity(); - cte2.getComps().add( new Component1( "string1", null ) ); + em.persist( cte2 ); + em.persist( cte1 ); - em.persist( cte2 ); - em.persist( cte1 ); - - em.getTransaction().commit(); + id1 = cte1.getId(); + id2 = cte2.getId(); + } ); // Revision 2 - em = getEntityManager(); - em.getTransaction().begin(); - - cte1 = em.find( ComponentSetTestEntity.class, cte1.getId() ); - - cte1.getComps().add( new Component1( "a", "b" ) ); - - em.getTransaction().commit(); - - id1 = cte1.getId(); - id2 = cte2.getId(); + scope.inTransaction( em -> { + ComponentSetTestEntity cte1 = em.find( ComponentSetTestEntity.class, id1 ); + cte1.getComps().add( new Component1( "a", "b" ) ); + } ); } @Test - public void testRevisionsCounts() { - assertEquals( Arrays.asList( 1, 2 ), getAuditReader().getRevisions( ComponentSetTestEntity.class, id1 ) ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + assertEquals( Arrays.asList( 1, 2 ), AuditReaderFactory.get( em ).getRevisions( ComponentSetTestEntity.class, id1 ) ); + } ); } @Test - public void testHistoryOfId1() { - assertEquals( 0, getAuditReader().find( ComponentSetTestEntity.class, id1, 1 ).getComps().size() ); + public void testHistoryOfId1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + + assertEquals( 0, auditReader.find( ComponentSetTestEntity.class, id1, 1 ).getComps().size() ); - Set comps1 = getAuditReader().find( ComponentSetTestEntity.class, id1, 2 ).getComps(); - assertEquals( 1, comps1.size() ); - assertTrue( comps1.contains( new Component1( "a", "b" ) ) ); + Set comps1 = auditReader.find( ComponentSetTestEntity.class, id1, 2 ).getComps(); + assertEquals( 1, comps1.size() ); + assertTrue( comps1.contains( new Component1( "a", "b" ) ) ); + } ); } @Test @JiraKey(value = "HHH-8968") - public void testCollectionOfEmbeddableWithNullValue() { - final Component1 componentV1 = new Component1( "string1", null ); - final ComponentSetTestEntity entityV1 = getAuditReader().find( ComponentSetTestEntity.class, id2, 1 ); - assertEquals( "Expected a component", Collections.singleton( componentV1 ), entityV1.getComps() ); + public void testCollectionOfEmbeddableWithNullValue(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + + final Component1 componentV1 = new Component1( "string1", null ); + final ComponentSetTestEntity entityV1 = auditReader.find( ComponentSetTestEntity.class, id2, 1 ); + assertEquals( Collections.singleton( componentV1 ), entityV1.getComps() ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/collections/mappedsuperclasselement/CollectionOfMappedSuperclassComponentsTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/collections/mappedsuperclasselement/CollectionOfMappedSuperclassComponentsTest.java index 915a67d20e4a..fe329f26fd4b 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/collections/mappedsuperclasselement/CollectionOfMappedSuperclassComponentsTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/collections/mappedsuperclasselement/CollectionOfMappedSuperclassComponentsTest.java @@ -6,85 +6,83 @@ import java.util.Arrays; import java.util.Set; -import jakarta.persistence.EntityManager; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; -import org.hibernate.testing.FailureExpected; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.FailureExpected; import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Gail Badner */ @JiraKey( value = "HHH-9193" ) -public class CollectionOfMappedSuperclassComponentsTest extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {MappedSuperclassComponentSetTestEntity.class, Code.class}) +public class CollectionOfMappedSuperclassComponentsTest { private Integer id1; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {MappedSuperclassComponentSetTestEntity.class, Code.class}; + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + // Revision 1 + em.getTransaction().begin(); + MappedSuperclassComponentSetTestEntity cte1 = new MappedSuperclassComponentSetTestEntity(); + em.persist( cte1 ); + em.getTransaction().commit(); + + // Revision 2 + em.getTransaction().begin(); + cte1 = em.find( MappedSuperclassComponentSetTestEntity.class, cte1.getId() ); + cte1.getComps().add( new Code( 1 ) ); + cte1.getCompsNotAudited().add( new Code( 100 ) ); + em.getTransaction().commit(); + + id1 = cte1.getId(); + } ); } @Test - @Priority(10) - public void initData() { - // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - - MappedSuperclassComponentSetTestEntity cte1 = new MappedSuperclassComponentSetTestEntity(); - - em.persist( cte1 ); - - em.getTransaction().commit(); - - // Revision 2 - em = getEntityManager(); - em.getTransaction().begin(); - - cte1 = em.find( MappedSuperclassComponentSetTestEntity.class, cte1.getId() ); - - cte1.getComps().add( new Code( 1 ) ); - cte1.getCompsNotAudited().add( new Code( 100 ) ); - - em.getTransaction().commit(); - - id1 = cte1.getId(); - } - - @Test - public void testRevisionsCounts() { - assertEquals( - Arrays.asList( 1, 2 ), - getAuditReader().getRevisions( MappedSuperclassComponentSetTestEntity.class, id1 ) - ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + assertEquals( + Arrays.asList( 1, 2 ), + AuditReaderFactory.get( em ).getRevisions( MappedSuperclassComponentSetTestEntity.class, id1 ) + ); + } ); } @Test @FailureExpected( jiraKey = "HHH-9193") - public void testHistoryOfId1() { - MappedSuperclassComponentSetTestEntity entity = getAuditReader().find( - MappedSuperclassComponentSetTestEntity.class, - id1, - 1 - ); - assertEquals( 0, entity.getComps().size() ); - assertEquals( 0, entity.getCompsNotAudited().size() ); - - entity = getAuditReader().find( MappedSuperclassComponentSetTestEntity.class, id1, 2 ); - - // TODO: what is the expectation here? The collection is audited, but the embeddable class - // has no data and it extends a mapped-superclass that is not audited. - // currently the collection has 1 element that has value AbstractCode.UNDEFINED - // (which seems wrong). I changed the expected size to 0 which currently fails; is that what - // should be expected? - Set comps1 = entity.getComps(); - assertEquals( 0, comps1.size() ); - - // The contents of entity.getCompsNotAudited() is unspecified, so no need to test. + public void testHistoryOfId1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + + MappedSuperclassComponentSetTestEntity entity = auditReader.find( + MappedSuperclassComponentSetTestEntity.class, + id1, + 1 + ); + assertEquals( 0, entity.getComps().size() ); + assertEquals( 0, entity.getCompsNotAudited().size() ); + + entity = auditReader.find( MappedSuperclassComponentSetTestEntity.class, id1, 2 ); + + // TODO: what is the expectation here? The collection is audited, but the embeddable class + // has no data and it extends a mapped-superclass that is not audited. + // currently the collection has 1 element that has value AbstractCode.UNDEFINED + // (which seems wrong). I changed the expected size to 0 which currently fails; is that what + // should be expected? + Set comps1 = entity.getComps(); + assertEquals( 0, comps1.size() ); + + // The contents of entity.getCompsNotAudited() is unspecified, so no need to test. + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/dynamic/AuditedDynamicComponentTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/dynamic/AuditedDynamicComponentTest.java index 0a8efe050400..ed0b65408e74 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/dynamic/AuditedDynamicComponentTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/dynamic/AuditedDynamicComponentTest.java @@ -11,52 +11,59 @@ import java.util.List; import org.hibernate.MappingException; -import org.hibernate.Session; import org.hibernate.cfg.Configuration; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.configuration.EnversSettings; -import org.hibernate.envers.internal.tools.StringTools; import org.hibernate.envers.query.AuditEntity; -import org.hibernate.orm.test.envers.BaseEnversFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.strategy.internal.DefaultAuditStrategy; import org.hibernate.service.ServiceRegistry; import org.hibernate.testing.ServiceRegistryBuilder; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; -import junit.framework.Assert; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; + +import static org.hibernate.testing.envers.EnversEntityManagerFactoryScope.getAuditStrategy; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.fail; /** * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) * @author Lukasz Zuchowski (author at zuchos dot com) */ @JiraKey("HHH-8049") -public class AuditedDynamicComponentTest extends BaseEnversFunctionalTestCase { - - @Override - protected String[] getMappings() { - return new String[] { "mappings/dynamicComponents/mapAudited.hbm.xml" }; - } +@EnversTest +@Jpa( + xmlMappings = "mappings/dynamicComponents/mapAudited.hbm.xml", + annotatedClasses = {AuditedDynamicComponentEntity.class, SimpleEntity.class} +) +public class AuditedDynamicComponentTest { //@Test - public void testAuditedDynamicComponentFailure() throws URISyntaxException { + public void testAuditedDynamicComponentFailure(EntityManagerFactoryScope scope) throws URISyntaxException { final Configuration config = new Configuration(); final URL hbm = Thread.currentThread().getContextClassLoader().getResource( "mappings/dynamicComponents/mapAudited.hbm.xml" ); config.addFile( new File( hbm.toURI() ) ); - final String auditStrategy = getAuditStrategy(); - if ( !StringTools.isEmpty( auditStrategy ) ) { - config.setProperty( EnversSettings.AUDIT_STRATEGY, auditStrategy ); - } + scope.inEntityManager( em -> { + final var auditStrategyClass = getAuditStrategy( em ).getClass(); + if ( auditStrategyClass != DefaultAuditStrategy.class ) { + config.setProperty( EnversSettings.AUDIT_STRATEGY, auditStrategyClass.getName() ); + } + } ); final ServiceRegistry serviceRegistry = ServiceRegistryBuilder.buildServiceRegistry( config.getProperties() ); try { config.buildSessionFactory( serviceRegistry ).close(); - Assert.fail( "MappingException expected" ); + fail( "MappingException expected" ); } catch ( MappingException e ) { - Assert.assertEquals( + assertEquals( "Audited dynamic-component properties are not supported. Consider applying @NotAudited annotation to " + AuditedDynamicComponentEntity.class.getName() + "#customFields.", e.getMessage() @@ -67,172 +74,176 @@ public void testAuditedDynamicComponentFailure() throws URISyntaxException { } } - @Test - @Priority(10) - public void initData() { - Session session = openSession(); - - SimpleEntity simpleEntity = new SimpleEntity( 1L, "Very simple entity" ); - - // Revision 1 - session.getTransaction().begin(); - session.persist( simpleEntity ); - session.getTransaction().commit(); + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + scope.inTransaction( em -> { + SimpleEntity simpleEntity = new SimpleEntity( 1L, "Very simple entity" ); + em.persist( simpleEntity ); + } ); // Revision 2 - session.getTransaction().begin(); - AuditedDynamicComponentEntity entity = new AuditedDynamicComponentEntity( 1L, "static field value" ); - entity.getCustomFields().put( "prop1", 13 ); - entity.getCustomFields().put( "prop2", 0.1f ); - entity.getCustomFields().put( "prop3", simpleEntity ); - entity.getCustomFields().put( "prop4", true ); - session.persist( entity ); - session.getTransaction().commit(); + scope.inTransaction( em -> { + SimpleEntity simpleEntity = em.find( SimpleEntity.class, 1L ); + AuditedDynamicComponentEntity entity = new AuditedDynamicComponentEntity( 1L, "static field value" ); + entity.getCustomFields().put( "prop1", 13 ); + entity.getCustomFields().put( "prop2", 0.1f ); + entity.getCustomFields().put( "prop3", simpleEntity ); + entity.getCustomFields().put( "prop4", true ); + em.persist( entity ); + } ); // revision 3 - session.getTransaction().begin(); - SimpleEntity simpleEntity2 = new SimpleEntity( 2L, "Not so simple entity" ); - session.persist( simpleEntity2 ); - entity = session.get( AuditedDynamicComponentEntity.class, entity.getId() ); - entity.getCustomFields().put( "prop3", simpleEntity2 ); - session.merge( entity ); - session.getTransaction().commit(); + scope.inTransaction( em -> { + SimpleEntity simpleEntity2 = new SimpleEntity( 2L, "Not so simple entity" ); + em.persist( simpleEntity2 ); + AuditedDynamicComponentEntity entity = em.find( AuditedDynamicComponentEntity.class, 1L ); + entity.getCustomFields().put( "prop3", simpleEntity2 ); + em.merge( entity ); + } ); // Revision 4 - session.getTransaction().begin(); - entity = session.get( AuditedDynamicComponentEntity.class, entity.getId() ); - entity.getCustomFields().put( "prop1", 2 ); - entity.getCustomFields().put( "prop4", false ); - session.merge( entity ); - session.getTransaction().commit(); + scope.inTransaction( em -> { + AuditedDynamicComponentEntity entity = em.find( AuditedDynamicComponentEntity.class, 1L ); + entity.getCustomFields().put( "prop1", 2 ); + entity.getCustomFields().put( "prop4", false ); + em.merge( entity ); + } ); // Revision 5 - session.getTransaction().begin(); - entity = session.getReference( AuditedDynamicComponentEntity.class, entity.getId() ); - entity.getCustomFields().remove( "prop2" ); - session.merge( entity ); - session.getTransaction().commit(); + scope.inTransaction( em -> { + AuditedDynamicComponentEntity entity = em.getReference( AuditedDynamicComponentEntity.class, 1L ); + entity.getCustomFields().remove( "prop2" ); + em.merge( entity ); + } ); // Revision 6 - session.getTransaction().begin(); - entity = session.getReference( AuditedDynamicComponentEntity.class, entity.getId() ); - entity.getCustomFields().clear(); - session.merge( entity ); - session.getTransaction().commit(); + scope.inTransaction( em -> { + AuditedDynamicComponentEntity entity = em.getReference( AuditedDynamicComponentEntity.class, 1L ); + entity.getCustomFields().clear(); + em.merge( entity ); + } ); // Revision 7 - session.getTransaction().begin(); - entity = session.getReference( AuditedDynamicComponentEntity.class, entity.getId() ); - session.remove( entity ); - session.getTransaction().commit(); - - session.close(); + scope.inTransaction( em -> { + AuditedDynamicComponentEntity entity = em.getReference( AuditedDynamicComponentEntity.class, 1L ); + em.remove( entity ); + } ); } @Test - public void testRevisionsCounts() { - Assert.assertEquals( - Arrays.asList( 2, 3, 4, 5, 6, 7 ), - getAuditReader().getRevisions( AuditedDynamicComponentEntity.class, 1L ) - ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + assertEquals( + Arrays.asList( 2, 3, 4, 5, 6, 7 ), + AuditReaderFactory.get( em ).getRevisions( AuditedDynamicComponentEntity.class, 1L ) + ); + } ); } @Test - public void testHistoryOfId1() { - // Revision 2 - AuditedDynamicComponentEntity entity = new AuditedDynamicComponentEntity( 1L, "static field value" ); - entity.getCustomFields().put( "prop1", 13 ); - entity.getCustomFields().put( "prop2", 0.1f ); - entity.getCustomFields().put( "prop3", new SimpleEntity( 1L, "Very simple entity" ) ); - entity.getCustomFields().put( "prop4", true ); - AuditedDynamicComponentEntity ver2 = getAuditReader().find( - AuditedDynamicComponentEntity.class, - entity.getId(), - 2 - ); - Assert.assertEquals( entity, ver2 ); - - // Revision 3 - SimpleEntity simpleEntity2 = new SimpleEntity( 2L, "Not so simple entity" ); - entity.getCustomFields().put( "prop3", simpleEntity2 ); - AuditedDynamicComponentEntity ver3 = getAuditReader().find( - AuditedDynamicComponentEntity.class, - entity.getId(), - 3 - ); - Assert.assertEquals( entity, ver3 ); - - // Revision 4 - entity.getCustomFields().put( "prop1", 2 ); - entity.getCustomFields().put( "prop4", false ); - AuditedDynamicComponentEntity ver4 = getAuditReader().find( - AuditedDynamicComponentEntity.class, - entity.getId(), - 4 - ); - Assert.assertEquals( entity, ver4 ); - - // Revision 5 - entity.getCustomFields().put( "prop2", null ); - AuditedDynamicComponentEntity ver5 = getAuditReader().find( - AuditedDynamicComponentEntity.class, - entity.getId(), - 5 - ); - Assert.assertEquals( entity, ver5 ); - - // Revision 5 - entity.getCustomFields().put( "prop1", null ); - entity.getCustomFields().put( "prop2", null ); - entity.getCustomFields().put( "prop3", null ); - entity.getCustomFields().put( "prop4", null ); - AuditedDynamicComponentEntity ver6 = getAuditReader().find( - AuditedDynamicComponentEntity.class, - entity.getId(), - 6 - ); - Assert.assertEquals( entity, ver6 ); + public void testHistoryOfId1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + + // Revision 2 + AuditedDynamicComponentEntity entity = new AuditedDynamicComponentEntity( 1L, "static field value" ); + entity.getCustomFields().put( "prop1", 13 ); + entity.getCustomFields().put( "prop2", 0.1f ); + entity.getCustomFields().put( "prop3", new SimpleEntity( 1L, "Very simple entity" ) ); + entity.getCustomFields().put( "prop4", true ); + AuditedDynamicComponentEntity ver2 = auditReader.find( + AuditedDynamicComponentEntity.class, + entity.getId(), + 2 + ); + assertEquals( entity, ver2 ); + + // Revision 3 + SimpleEntity simpleEntity2 = new SimpleEntity( 2L, "Not so simple entity" ); + entity.getCustomFields().put( "prop3", simpleEntity2 ); + AuditedDynamicComponentEntity ver3 = auditReader.find( + AuditedDynamicComponentEntity.class, + entity.getId(), + 3 + ); + assertEquals( entity, ver3 ); + + // Revision 4 + entity.getCustomFields().put( "prop1", 2 ); + entity.getCustomFields().put( "prop4", false ); + AuditedDynamicComponentEntity ver4 = auditReader.find( + AuditedDynamicComponentEntity.class, + entity.getId(), + 4 + ); + assertEquals( entity, ver4 ); + + // Revision 5 + entity.getCustomFields().put( "prop2", null ); + AuditedDynamicComponentEntity ver5 = auditReader.find( + AuditedDynamicComponentEntity.class, + entity.getId(), + 5 + ); + assertEquals( entity, ver5 ); + + // Revision 6 + entity.getCustomFields().put( "prop1", null ); + entity.getCustomFields().put( "prop2", null ); + entity.getCustomFields().put( "prop3", null ); + entity.getCustomFields().put( "prop4", null ); + AuditedDynamicComponentEntity ver6 = auditReader.find( + AuditedDynamicComponentEntity.class, + entity.getId(), + 6 + ); + assertEquals( entity, ver6 ); + } ); } @Test - public void testOfQueryOnDynamicComponent() { - //given (and result of initData() - AuditedDynamicComponentEntity entity = new AuditedDynamicComponentEntity( 1L, "static field value" ); - entity.getCustomFields().put( "prop1", 13 ); - entity.getCustomFields().put( "prop2", 0.1f ); - entity.getCustomFields().put( "prop3", new SimpleEntity( 1L, "Very simple entity" ) ); - entity.getCustomFields().put( "prop4", true ); - - //when - List resultList = getAuditReader().createQuery() - .forEntitiesAtRevision( AuditedDynamicComponentEntity.class, 2 ) - .add( AuditEntity.property( "customFields_prop1" ).le( 20 ) ) - .getResultList(); - - //then - Assert.assertEquals( entity, resultList.get( 0 ) ); - - //when - resultList = getAuditReader().createQuery() - .forEntitiesAtRevision( AuditedDynamicComponentEntity.class, 2 ) - .add( AuditEntity.property( "customFields_prop3" ).eq( new SimpleEntity( 1L, "Very simple entity" ) ) ) - .getResultList(); - - - //then - entity = (AuditedDynamicComponentEntity) getAuditReader().createQuery() - .forEntitiesAtRevision( AuditedDynamicComponentEntity.class, 4 ) - .getResultList().get( 0 ); - entity.getCustomFields().put( "prop2", null ); - - resultList = getAuditReader().createQuery() - .forEntitiesAtRevision( AuditedDynamicComponentEntity.class, 5 ) - .add( AuditEntity.property( "customFields_prop2" ).isNull() ) - .getResultList(); - - //then - Assert.assertEquals( entity, resultList.get( 0 ) ); + public void testOfQueryOnDynamicComponent(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + + //given (and result of initData() + AuditedDynamicComponentEntity entity = new AuditedDynamicComponentEntity( 1L, "static field value" ); + entity.getCustomFields().put( "prop1", 13 ); + entity.getCustomFields().put( "prop2", 0.1f ); + entity.getCustomFields().put( "prop3", new SimpleEntity( 1L, "Very simple entity" ) ); + entity.getCustomFields().put( "prop4", true ); + + //when + List resultList = auditReader.createQuery() + .forEntitiesAtRevision( AuditedDynamicComponentEntity.class, 2 ) + .add( AuditEntity.property( "customFields_prop1" ).le( 20 ) ) + .getResultList(); + + //then + assertEquals( entity, resultList.get( 0 ) ); + + //when + resultList = auditReader.createQuery() + .forEntitiesAtRevision( AuditedDynamicComponentEntity.class, 2 ) + .add( AuditEntity.property( "customFields_prop3" ).eq( new SimpleEntity( 1L, "Very simple entity" ) ) ) + .getResultList(); + + + //then + AuditedDynamicComponentEntity entity2 = (AuditedDynamicComponentEntity) auditReader.createQuery() + .forEntitiesAtRevision( AuditedDynamicComponentEntity.class, 4 ) + .getResultList().get( 0 ); + entity2.getCustomFields().put( "prop2", null ); + + resultList = auditReader.createQuery() + .forEntitiesAtRevision( AuditedDynamicComponentEntity.class, 5 ) + .add( AuditEntity.property( "customFields_prop2" ).isNull() ) + .getResultList(); + + //then + assertEquals( entity2, resultList.get( 0 ) ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/dynamic/NotAuditedDynamicComponentTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/dynamic/NotAuditedDynamicComponentTest.java index 76a3ae453418..ab6f663947d8 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/dynamic/NotAuditedDynamicComponentTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/dynamic/NotAuditedDynamicComponentTest.java @@ -6,90 +6,96 @@ import java.util.Arrays; -import org.hibernate.Session; -import org.hibernate.orm.test.envers.BaseEnversFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; -import junit.framework.Assert; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; /** * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) */ @JiraKey("HHH-8049") -public class NotAuditedDynamicComponentTest extends BaseEnversFunctionalTestCase { - @Override - protected String[] getMappings() { - return new String[] { "mappings/dynamicComponents/mapNotAudited.hbm.xml" }; - } - - @Test - @Priority(10) - public void initData() { - Session session = openSession(); +@EnversTest +@Jpa( + xmlMappings = "mappings/dynamicComponents/mapNotAudited.hbm.xml", + annotatedClasses = {NotAuditedDynamicMapComponent.class} +) +public class NotAuditedDynamicComponentTest { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Revision 1 - session.getTransaction().begin(); - NotAuditedDynamicMapComponent entity = new NotAuditedDynamicMapComponent( 1L, "static field value" ); - entity.getCustomFields().put( "prop1", 13 ); - entity.getCustomFields().put( "prop2", 0.1f ); - session.persist( entity ); - session.getTransaction().commit(); + scope.inTransaction( em -> { + NotAuditedDynamicMapComponent entity = new NotAuditedDynamicMapComponent( 1L, "static field value" ); + entity.getCustomFields().put( "prop1", 13 ); + entity.getCustomFields().put( "prop2", 0.1f ); + em.persist( entity ); + } ); // No revision - session.getTransaction().begin(); - entity = session.get( NotAuditedDynamicMapComponent.class, entity.getId() ); - entity.getCustomFields().put( "prop1", 0 ); - session.merge( entity ); - session.getTransaction().commit(); + scope.inTransaction( em -> { + NotAuditedDynamicMapComponent entity = em.find( NotAuditedDynamicMapComponent.class, 1L ); + entity.getCustomFields().put( "prop1", 0 ); + em.merge( entity ); + } ); // Revision 2 - session.getTransaction().begin(); - entity = session.get( NotAuditedDynamicMapComponent.class, entity.getId() ); - entity.setNote( "updated note" ); - session.merge( entity ); - session.getTransaction().commit(); + scope.inTransaction( em -> { + NotAuditedDynamicMapComponent entity = em.find( NotAuditedDynamicMapComponent.class, 1L ); + entity.setNote( "updated note" ); + em.merge( entity ); + } ); // Revision 3 - session.getTransaction().begin(); - entity = session.getReference( NotAuditedDynamicMapComponent.class, entity.getId() ); - session.remove( entity ); - session.getTransaction().commit(); - - session.close(); + scope.inTransaction( em -> { + NotAuditedDynamicMapComponent entity = em.getReference( NotAuditedDynamicMapComponent.class, 1L ); + em.remove( entity ); + } ); } @Test - public void testRevisionsCounts() { - Assert.assertEquals( - Arrays.asList( 1, 2, 3 ), - getAuditReader().getRevisions( NotAuditedDynamicMapComponent.class, 1L ) - ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + assertEquals( + Arrays.asList( 1, 2, 3 ), + AuditReaderFactory.get( em ).getRevisions( NotAuditedDynamicMapComponent.class, 1L ) + ); + } ); } @Test - public void testHistoryOfId1() { - // Revision 1 - NotAuditedDynamicMapComponent entity = new NotAuditedDynamicMapComponent( 1L, "static field value" ); - NotAuditedDynamicMapComponent ver1 = getAuditReader().find( - NotAuditedDynamicMapComponent.class, - entity.getId(), - 1 - ); - Assert.assertEquals( entity, ver1 ); - // Assume empty NotAuditedDynamicMapComponent#customFields map, because dynamic-component is not audited. - Assert.assertTrue( ver1.getCustomFields().isEmpty() ); + public void testHistoryOfId1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); - // Revision 2 - entity.setNote( "updated note" ); - NotAuditedDynamicMapComponent ver2 = getAuditReader().find( - NotAuditedDynamicMapComponent.class, - entity.getId(), - 2 - ); - Assert.assertEquals( entity, ver2 ); - // Assume empty NotAuditedDynamicMapComponent#customFields map, because dynamic-component is not audited. - Assert.assertTrue( ver2.getCustomFields().isEmpty() ); + // Revision 1 + NotAuditedDynamicMapComponent entity = new NotAuditedDynamicMapComponent( 1L, "static field value" ); + NotAuditedDynamicMapComponent ver1 = auditReader.find( + NotAuditedDynamicMapComponent.class, + entity.getId(), + 1 + ); + assertEquals( entity, ver1 ); + // Assume empty NotAuditedDynamicMapComponent#customFields map, because dynamic-component is not audited. + assertTrue( ver1.getCustomFields().isEmpty() ); + + // Revision 2 + entity.setNote( "updated note" ); + NotAuditedDynamicMapComponent ver2 = auditReader.find( + NotAuditedDynamicMapComponent.class, + entity.getId(), + 2 + ); + assertEquals( entity, ver2 ); + // Assume empty NotAuditedDynamicMapComponent#customFields map, because dynamic-component is not audited. + assertTrue( ver2.getCustomFields().isEmpty() ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/dynamic/SanityCheckTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/dynamic/SanityCheckTest.java index a78dc9694218..9f92174700e2 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/dynamic/SanityCheckTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/dynamic/SanityCheckTest.java @@ -7,49 +7,52 @@ import java.util.ArrayList; import java.util.List; -import junit.framework.Assert; -import org.hibernate.Session; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.exception.AuditException; import org.hibernate.envers.query.AuditEntity; -import org.hibernate.orm.test.envers.BaseEnversFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.junit.Test; - -import static org.hibernate.testing.junit4.ExtraAssertions.assertTyping; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.fail; - -public class SanityCheckTest extends BaseEnversFunctionalTestCase { - - @Override - protected String[] getMappings() { - return new String[] { "mappings/dynamicComponents/mapSanityCheck.hbm.xml" }; - } - - @Test - @Priority(10) - public void shouldInit() { - Session session = getSession(); - session.getTransaction().begin(); - - ManyToOneEntity manyToOne = getManyToOneEntity(); - ManyToManyEntity manyToMany = getManyToManyEntity(); - OneToOneEntity oneToOne = getOneToOneEntity(); - - PlainEntity plainEntity = getPlainEntity( manyToOne, manyToMany, oneToOne ); - - session.persist( manyToMany ); - session.persist( manyToOne ); - session.persist( oneToOne ); - session.persist( plainEntity ); - - session.getTransaction().commit(); - session.getTransaction().begin(); - PlainEntity load = (PlainEntity) session.getReference( PlainEntity.class, 1L ); - - Assert.assertEquals( plainEntity, load ); - session.getTransaction().commit(); +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; + +import static org.hibernate.testing.orm.junit.ExtraAssertions.assertTyping; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.fail; + +@EnversTest +@Jpa( + xmlMappings = "mappings/dynamicComponents/mapSanityCheck.hbm.xml", + annotatedClasses = { + PlainEntity.class, + ManyToOneEntity.class, + ManyToManyEntity.class, + OneToOneEntity.class + } +) +public class SanityCheckTest { + + @BeforeClassTemplate + public void shouldInit(EntityManagerFactoryScope scope) { + scope.inTransaction( em -> { + ManyToOneEntity manyToOne = getManyToOneEntity(); + ManyToManyEntity manyToMany = getManyToManyEntity(); + OneToOneEntity oneToOne = getOneToOneEntity(); + + PlainEntity plainEntity = getPlainEntity( manyToOne, manyToMany, oneToOne ); + + em.persist( manyToMany ); + em.persist( manyToOne ); + em.persist( oneToOne ); + em.persist( plainEntity ); + } ); + + scope.inTransaction( em -> { + PlainEntity load = em.getReference( PlainEntity.class, 1L ); + PlainEntity expected = getPlainEntity( getManyToOneEntity(), getManyToManyEntity(), getOneToOneEntity() ); + assertEquals( expected, load ); + } ); } private PlainEntity getPlainEntity(ManyToOneEntity manyToOne, ManyToManyEntity manyToMany, OneToOneEntity oneToOne) { @@ -85,100 +88,113 @@ private ManyToManyEntity getManyToManyEntity() { } @Test - public void shouldFindRevisionBySimpleProperty() { - ManyToOneEntity manyToOne = getManyToOneEntity(); - ManyToManyEntity manyToMany = getManyToManyEntity(); - OneToOneEntity oneToOne = getOneToOneEntity(); - - PlainEntity entity = getPlainEntity( manyToOne, manyToMany, oneToOne ); + public void shouldFindRevisionBySimpleProperty(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + ManyToOneEntity manyToOne = getManyToOneEntity(); + ManyToManyEntity manyToMany = getManyToManyEntity(); + OneToOneEntity oneToOne = getOneToOneEntity(); - //given (and result of shouldInitData() + PlainEntity entity = getPlainEntity( manyToOne, manyToMany, oneToOne ); - //when - List resultList = getAuditReader().createQuery() - .forEntitiesAtRevision( PlainEntity.class, 1 ) - .add( AuditEntity.property( "component_componentNote" ).eq( "Note" ) ) - .getResultList(); + //when + List resultList = auditReader.createQuery() + .forEntitiesAtRevision( PlainEntity.class, 1 ) + .add( AuditEntity.property( "component_componentNote" ).eq( "Note" ) ) + .getResultList(); - Assert.assertEquals( entity, resultList.get( 0 ) ); + assertEquals( entity, resultList.get( 0 ) ); + } ); } @Test - public void shouldFindByInternalComponentProperty() { - ManyToOneEntity manyToOne = getManyToOneEntity(); - ManyToManyEntity manyToMany = getManyToManyEntity(); - OneToOneEntity oneToOne = getOneToOneEntity(); - - PlainEntity entity = getPlainEntity( manyToOne, manyToMany, oneToOne ); - + public void shouldFindByInternalComponentProperty(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); - //given (and result of shouldInitData() + ManyToOneEntity manyToOne = getManyToOneEntity(); + ManyToManyEntity manyToMany = getManyToManyEntity(); + OneToOneEntity oneToOne = getOneToOneEntity(); - //when - List resultList = getAuditReader().createQuery() - .forEntitiesAtRevision( PlainEntity.class, 1 ) - .add( - AuditEntity.property( "component_internalComponent_property" ) - .eq( entity.getComponent().getInternalComponent().getProperty() ) - ) - .getResultList(); + PlainEntity entity = getPlainEntity( manyToOne, manyToMany, oneToOne ); - Assert.assertEquals( entity, resultList.get( 0 ) ); - } - - @Test - public void shouldFailWhenQueryOnManyToMany() { - ManyToManyEntity manyToMany = getManyToManyEntity(); - - //when - - List manyToManyEntities = new ArrayList(); - manyToManyEntities.add( manyToMany ); - try { - getAuditReader().createQuery() + //when + List resultList = auditReader.createQuery() .forEntitiesAtRevision( PlainEntity.class, 1 ) - .add( AuditEntity.property( "component_manyToManyList" ).eq( manyToManyEntities ) ) + .add( + AuditEntity.property( "component_internalComponent_property" ) + .eq( entity.getComponent().getInternalComponent().getProperty() ) + ) .getResultList(); - //then - fail( "This should have generated an AuditException" ); - } - catch ( Exception e ) { - assertTyping( AuditException.class, e ); - assertEquals( - "This type of relation (org.hibernate.orm.test.envers.integration.components.dynamic.PlainEntity." + - "component_manyToManyList) can't be used in audit query restrictions.", - e.getMessage() - ); - } + + assertEquals( entity, resultList.get( 0 ) ); + } ); } @Test - public void shouldFailWhenQueryOnManyToOne() { - //when - PlainEntity plainEntity = (PlainEntity) getAuditReader().createQuery() - .forEntitiesAtRevision( PlainEntity.class, 1 ) - .add( AuditEntity.relatedId( "component_manyToOneEntity" ).eq( getManyToOneEntity().getId() ) ) - .getResultList().get( 0 ); - - //then - Assert.assertEquals( getManyToOneEntity(), plainEntity.getComponent().getManyToOneEntity() ); + public void shouldFailWhenQueryOnManyToMany(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + + ManyToManyEntity manyToMany = getManyToManyEntity(); + + //when + List manyToManyEntities = new ArrayList(); + manyToManyEntities.add( manyToMany ); + try { + auditReader.createQuery() + .forEntitiesAtRevision( PlainEntity.class, 1 ) + .add( AuditEntity.property( "component_manyToManyList" ).eq( manyToManyEntities ) ) + .getResultList(); + //then + fail( "This should have generated an AuditException" ); + } + catch ( Exception e ) { + assertTyping( AuditException.class, e ); + assertEquals( + "This type of relation (org.hibernate.orm.test.envers.integration.components.dynamic.PlainEntity." + + "component_manyToManyList) can't be used in audit query restrictions.", + e.getMessage() + ); + } + } ); } @Test - public void shouldFailWhenQueryOnOneToOne() { - //when - try { - getAuditReader().createQuery() + public void shouldFailWhenQueryOnManyToOne(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + + //when + PlainEntity plainEntity = (PlainEntity) auditReader.createQuery() .forEntitiesAtRevision( PlainEntity.class, 1 ) - .add( AuditEntity.relatedId( "component_oneToOneEntity" ).eq( getOneToOneEntity().getId() ) ) - .getResultList(); + .add( AuditEntity.relatedId( "component_manyToOneEntity" ).eq( getManyToOneEntity().getId() ) ) + .getResultList().get( 0 ); //then - fail( "This should have generated an IllegalArgumentException" ); - } - catch ( Exception e ) { - assertTyping( IllegalArgumentException.class, e ); - } + assertEquals( getManyToOneEntity(), plainEntity.getComponent().getManyToOneEntity() ); + } ); + } + + @Test + public void shouldFailWhenQueryOnOneToOne(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + + //when + try { + auditReader.createQuery() + .forEntitiesAtRevision( PlainEntity.class, 1 ) + .add( AuditEntity.relatedId( "component_oneToOneEntity" ).eq( getOneToOneEntity().getId() ) ) + .getResultList(); + + //then + fail( "This should have generated an IllegalArgumentException" ); + } + catch ( Exception e ) { + assertTyping( IllegalArgumentException.class, e ); + } + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/mappedsuperclass/AuditedEmbeddableWithDeclaredDataTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/mappedsuperclass/AuditedEmbeddableWithDeclaredDataTest.java index 9b7c8183dbf7..fab84f36a124 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/mappedsuperclass/AuditedEmbeddableWithDeclaredDataTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/mappedsuperclass/AuditedEmbeddableWithDeclaredDataTest.java @@ -8,12 +8,13 @@ import org.hibernate.envers.AuditReader; import org.hibernate.envers.AuditReaderFactory; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; -import org.hibernate.testing.transaction.TransactionUtil; -import org.junit.Test; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; import static org.assertj.core.api.Assertions.assertThat; @@ -21,35 +22,31 @@ * @author Chris Cranford */ @JiraKey("HHH-17189") -public class AuditedEmbeddableWithDeclaredDataTest extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = { + EntityWithAuditedEmbeddableWithDeclaredData.class, + AbstractAuditedEmbeddable.class, + AuditedEmbeddableWithDeclaredData.class +}) +public class AuditedEmbeddableWithDeclaredDataTest { private long id; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { - EntityWithAuditedEmbeddableWithDeclaredData.class, - AbstractAuditedEmbeddable.class, - AuditedEmbeddableWithDeclaredData.class - }; - } - - @Test - @Priority(10) - public void initData() { - this.id = TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - final EntityWithAuditedEmbeddableWithDeclaredData entity = new EntityWithAuditedEmbeddableWithDeclaredData(); - entity.setName( "Entity 1" ); - entity.setValue( new AuditedEmbeddableWithDeclaredData( 42, "Data" ) ); + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + this.id = scope.fromTransaction( entityManager -> { + final EntityWithAuditedEmbeddableWithDeclaredData entity = new EntityWithAuditedEmbeddableWithDeclaredData(); + entity.setName( "Entity 1" ); + entity.setValue( new AuditedEmbeddableWithDeclaredData( 42, "Data" ) ); - entityManager.persist(entity); - return entity.getId(); + entityManager.persist( entity ); + return entity.getId(); } ); } @Test - public void testEmbeddableThatExtendsAuditedMappedSuperclass() { - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { + public void testEmbeddableThatExtendsAuditedMappedSuperclass(EntityManagerFactoryScope scope) { + scope.inEntityManager( entityManager -> { final EntityWithAuditedEmbeddableWithDeclaredData entity = entityManager.find( EntityWithAuditedEmbeddableWithDeclaredData.class, id diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/mappedsuperclass/AuditedEmbeddableWithNoDeclaredDataTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/mappedsuperclass/AuditedEmbeddableWithNoDeclaredDataTest.java index 80640077d38d..7cc3bb516b33 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/mappedsuperclass/AuditedEmbeddableWithNoDeclaredDataTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/mappedsuperclass/AuditedEmbeddableWithNoDeclaredDataTest.java @@ -8,12 +8,13 @@ import org.hibernate.envers.AuditReader; import org.hibernate.envers.AuditReaderFactory; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; -import org.hibernate.testing.transaction.TransactionUtil; -import org.junit.Test; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; import static org.assertj.core.api.Assertions.assertThat; @@ -21,36 +22,32 @@ * @author Chris Cranford */ @JiraKey("HHH-17189") -public class AuditedEmbeddableWithNoDeclaredDataTest extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = { + EntityWithAuditedEmbeddableWithNoDeclaredData.class, + AbstractAuditedEmbeddable.class, + AuditedEmbeddableWithDeclaredData.class, + AuditedEmbeddableWithNoDeclaredData.class +}) +public class AuditedEmbeddableWithNoDeclaredDataTest { private long id; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { - EntityWithAuditedEmbeddableWithNoDeclaredData.class, - AbstractAuditedEmbeddable.class, - AuditedEmbeddableWithDeclaredData.class, - AuditedEmbeddableWithNoDeclaredData.class, - }; - } - - @Test - @Priority(10) - public void initData() { - this.id = TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - final EntityWithAuditedEmbeddableWithNoDeclaredData entity = new EntityWithAuditedEmbeddableWithNoDeclaredData(); - entity.setName( "Entity 1" ); - entity.setValue( new AuditedEmbeddableWithNoDeclaredData( 42 ) ); + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + this.id = scope.fromTransaction( entityManager -> { + final EntityWithAuditedEmbeddableWithNoDeclaredData entity = new EntityWithAuditedEmbeddableWithNoDeclaredData(); + entity.setName( "Entity 1" ); + entity.setValue( new AuditedEmbeddableWithNoDeclaredData( 42 ) ); - entityManager.persist(entity); - return entity.getId(); + entityManager.persist( entity ); + return entity.getId(); } ); } @Test - public void testEmbeddableThatExtendsAuditedMappedSuperclass() { - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { + public void testEmbeddableThatExtendsAuditedMappedSuperclass(EntityManagerFactoryScope scope) { + scope.inEntityManager( entityManager -> { final EntityWithAuditedEmbeddableWithNoDeclaredData entity = entityManager.find( EntityWithAuditedEmbeddableWithNoDeclaredData.class, id diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/mappedsuperclass/EmbeddableWithDeclaredDataTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/mappedsuperclass/EmbeddableWithDeclaredDataTest.java index 577cd46c1506..6dfc995deacf 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/mappedsuperclass/EmbeddableWithDeclaredDataTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/mappedsuperclass/EmbeddableWithDeclaredDataTest.java @@ -5,71 +5,63 @@ package org.hibernate.orm.test.envers.integration.components.mappedsuperclass; import java.util.List; -import jakarta.persistence.EntityManager; -import jakarta.persistence.EntityTransaction; import org.hibernate.envers.AuditReader; import org.hibernate.envers.AuditReaderFactory; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.testing.FailureExpected; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.FailureExpected; import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Assert; -import org.junit.Test; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.Assertions.assertThat; /** * @author Jakob Braeuchi. * @author Gail Badner */ @JiraKey(value = "HHH-9193") -public class EmbeddableWithDeclaredDataTest extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = { + EntityWithEmbeddableWithDeclaredData.class, + AbstractEmbeddable.class, + EmbeddableWithDeclaredData.class +}) +public class EmbeddableWithDeclaredDataTest { private long id; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { EntityWithEmbeddableWithDeclaredData.class, AbstractEmbeddable.class, EmbeddableWithDeclaredData.class }; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - EntityWithEmbeddableWithDeclaredData entity = new EntityWithEmbeddableWithDeclaredData(); - entity.setName( "Entity 1" ); - entity.setValue( new EmbeddableWithDeclaredData( 42, "TestCodeart" ) ); - - EntityTransaction tx = em.getTransaction(); - tx.begin(); - em.persist( entity ); - tx.commit(); - em.close(); - - id = entity.getId(); + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + this.id = scope.fromTransaction( entityManager -> { + EntityWithEmbeddableWithDeclaredData entity = new EntityWithEmbeddableWithDeclaredData(); + entity.setName( "Entity 1" ); + entity.setValue( new EmbeddableWithDeclaredData( 42, "TestCodeart" ) ); + entityManager.persist( entity ); + return entity.getId(); + } ); } @Test @FailureExpected( jiraKey = "HHH-9193" ) - public void testEmbeddableThatExtendsMappedSuperclass() { - - // Reload and Compare Revision - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - EntityWithEmbeddableWithDeclaredData entityLoaded = em.find( EntityWithEmbeddableWithDeclaredData.class, id ); + public void testEmbeddableThatExtendsMappedSuperclass(EntityManagerFactoryScope scope) { + scope.inEntityManager( entityManager -> { + EntityWithEmbeddableWithDeclaredData entityLoaded = entityManager.find( EntityWithEmbeddableWithDeclaredData.class, id ); - AuditReader reader = AuditReaderFactory.get( em ); + AuditReader reader = AuditReaderFactory.get( entityManager ); - List revs = reader.getRevisions( EntityWithEmbeddableWithDeclaredData.class, id ); - Assert.assertEquals( 1, revs.size() ); + List revs = reader.getRevisions( EntityWithEmbeddableWithDeclaredData.class, id ); + assertThat( revs ).hasSize( 1 ); - EntityWithEmbeddableWithDeclaredData entityRev1 = reader.find( EntityWithEmbeddableWithDeclaredData.class, id, revs.get( 0 ) ); - em.getTransaction().commit(); - Assert.assertEquals( entityLoaded.getName(), entityRev1.getName() ); + EntityWithEmbeddableWithDeclaredData entityRev1 = reader.find( EntityWithEmbeddableWithDeclaredData.class, id, revs.get( 0 ) ); + assertThat( entityRev1.getName() ).isEqualTo( entityLoaded.getName() ); - // only value.codeArt should be audited because it is the only audited field in EmbeddableWithDeclaredData; - // fields in AbstractEmbeddable should not be audited. - Assert.assertEquals( entityLoaded.getValue().getCodeart(), entityRev1.getValue().getCodeart() ); - Assert.assertEquals(0, entityRev1.getValue().getCode() ); + // only value.codeArt should be audited because it is the only audited field in EmbeddableWithDeclaredData; + // fields in AbstractEmbeddable should not be audited. + assertThat( entityRev1.getValue().getCodeart() ).isEqualTo( entityLoaded.getValue().getCodeart() ); + assertThat( entityRev1.getValue().getCode() ).isEqualTo( 0 ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/mappedsuperclass/EmbeddableWithNoDeclaredDataTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/mappedsuperclass/EmbeddableWithNoDeclaredDataTest.java index 103ff25da6fc..1e4f3693b021 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/mappedsuperclass/EmbeddableWithNoDeclaredDataTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/mappedsuperclass/EmbeddableWithNoDeclaredDataTest.java @@ -5,69 +5,61 @@ package org.hibernate.orm.test.envers.integration.components.mappedsuperclass; import java.util.List; -import jakarta.persistence.EntityManager; -import jakarta.persistence.EntityTransaction; import org.hibernate.envers.AuditReader; import org.hibernate.envers.AuditReaderFactory; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Assert; -import org.junit.Test; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.Assertions.assertThat; /** * @author Jakob Braeuchi. * @author Gail Badner */ @JiraKey(value = "HHH-9193") -public class EmbeddableWithNoDeclaredDataTest extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = { + EntityWithEmbeddableWithNoDeclaredData.class, + AbstractEmbeddable.class, + EmbeddableWithNoDeclaredData.class +}) +public class EmbeddableWithNoDeclaredDataTest { private long id; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { EntityWithEmbeddableWithNoDeclaredData.class, AbstractEmbeddable.class, EmbeddableWithNoDeclaredData.class }; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - EntityWithEmbeddableWithNoDeclaredData entity = new EntityWithEmbeddableWithNoDeclaredData(); - entity.setName( "Entity 1" ); - entity.setValue( new EmbeddableWithNoDeclaredData( 84 ) ); - - EntityTransaction tx = em.getTransaction(); - tx.begin(); - em.persist( entity ); - tx.commit(); - em.close(); - - id = entity.getId(); + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + this.id = scope.fromTransaction( entityManager -> { + EntityWithEmbeddableWithNoDeclaredData entity = new EntityWithEmbeddableWithNoDeclaredData(); + entity.setName( "Entity 1" ); + entity.setValue( new EmbeddableWithNoDeclaredData( 84 ) ); + entityManager.persist( entity ); + return entity.getId(); + } ); } @Test - public void testEmbeddableThatExtendsMappedSuperclass() { - - // Reload and Compare Revision - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - EntityWithEmbeddableWithNoDeclaredData entityLoaded = em.find( EntityWithEmbeddableWithNoDeclaredData.class, id ); + public void testEmbeddableThatExtendsMappedSuperclass(EntityManagerFactoryScope scope) { + scope.inEntityManager( entityManager -> { + EntityWithEmbeddableWithNoDeclaredData entityLoaded = entityManager.find( EntityWithEmbeddableWithNoDeclaredData.class, id ); - AuditReader reader = AuditReaderFactory.get( em ); + AuditReader reader = AuditReaderFactory.get( entityManager ); - List revs = reader.getRevisions( EntityWithEmbeddableWithNoDeclaredData.class, id ); - Assert.assertEquals( 1, revs.size() ); + List revs = reader.getRevisions( EntityWithEmbeddableWithNoDeclaredData.class, id ); + assertThat( revs ).hasSize( 1 ); - EntityWithEmbeddableWithNoDeclaredData entityRev1 = reader.find( EntityWithEmbeddableWithNoDeclaredData.class, id, revs.get( 0 ) ); + EntityWithEmbeddableWithNoDeclaredData entityRev1 = reader.find( EntityWithEmbeddableWithNoDeclaredData.class, id, revs.get( 0 ) ); - em.getTransaction().commit(); - Assert.assertEquals( entityLoaded.getName(), entityRev1.getName() ); + assertThat( entityRev1.getName() ).isEqualTo( entityLoaded.getName() ); - // value should be null because there is no data in EmbeddableWithNoDeclaredData - // and the fields in AbstractEmbeddable should not be audited. - Assert.assertNull( entityRev1.getValue() ); + // value should be null because there is no data in EmbeddableWithNoDeclaredData + // and the fields in AbstractEmbeddable should not be audited. + assertThat( entityRev1.getValue() ).isNull(); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/relations/ManyToOneInComponent.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/relations/ManyToOneInComponent.java index ce4a918addc1..4ada71f6f38f 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/relations/ManyToOneInComponent.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/relations/ManyToOneInComponent.java @@ -5,107 +5,101 @@ package org.hibernate.orm.test.envers.integration.components.relations; import java.util.Arrays; -import jakarta.persistence.EntityManager; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.orm.test.envers.entities.StrTestEntity; import org.hibernate.orm.test.envers.entities.components.relations.ManyToOneComponent; import org.hibernate.orm.test.envers.entities.components.relations.ManyToOneComponentTestEntity; -import org.junit.Test; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNull; /** * @author Adam Warski (adam at warski dot org) */ -public class ManyToOneInComponent extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {ManyToOneComponentTestEntity.class, StrTestEntity.class}) +public class ManyToOneInComponent { private Integer mtocte_id1; private Integer ste_id1; private Integer ste_id2; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {ManyToOneComponentTestEntity.class, StrTestEntity.class}; - - } - - @Test - @Priority(10) - public void initData() { - // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - - StrTestEntity ste1 = new StrTestEntity(); - ste1.setStr( "str1" ); - - StrTestEntity ste2 = new StrTestEntity(); - ste2.setStr( "str2" ); - - em.persist( ste1 ); - em.persist( ste2 ); - - em.getTransaction().commit(); - - // Revision 2 - em = getEntityManager(); - em.getTransaction().begin(); - - ManyToOneComponentTestEntity mtocte1 = new ManyToOneComponentTestEntity( - new ManyToOneComponent( - ste1, - "data1" - ) - ); - - em.persist( mtocte1 ); - - em.getTransaction().commit(); - - // Revision 3 - em = getEntityManager(); - em.getTransaction().begin(); - - mtocte1 = em.find( ManyToOneComponentTestEntity.class, mtocte1.getId() ); - mtocte1.getComp1().setEntity( ste2 ); - - em.getTransaction().commit(); - - mtocte_id1 = mtocte1.getId(); - ste_id1 = ste1.getId(); - ste_id2 = ste2.getId(); + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + // Revision 1 + em.getTransaction().begin(); + StrTestEntity ste1 = new StrTestEntity(); + ste1.setStr( "str1" ); + StrTestEntity ste2 = new StrTestEntity(); + ste2.setStr( "str2" ); + em.persist( ste1 ); + em.persist( ste2 ); + em.getTransaction().commit(); + + // Revision 2 + em.getTransaction().begin(); + ManyToOneComponentTestEntity mtocte1 = new ManyToOneComponentTestEntity( + new ManyToOneComponent( + ste1, + "data1" + ) + ); + em.persist( mtocte1 ); + em.getTransaction().commit(); + + // Revision 3 + em.getTransaction().begin(); + mtocte1 = em.find( ManyToOneComponentTestEntity.class, mtocte1.getId() ); + mtocte1.getComp1().setEntity( ste2 ); + em.getTransaction().commit(); + + mtocte_id1 = mtocte1.getId(); + ste_id1 = ste1.getId(); + ste_id2 = ste2.getId(); + } ); } @Test - public void testRevisionsCounts() { - assert Arrays.asList( 2, 3 ).equals( - getAuditReader().getRevisions( + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> assertEquals( + Arrays.asList( 2, 3 ), + AuditReaderFactory.get( em ).getRevisions( ManyToOneComponentTestEntity.class, mtocte_id1 ) - ); + ) ); } @Test - public void testHistoryOfId1() { - StrTestEntity ste1 = getEntityManager().find( StrTestEntity.class, ste_id1 ); - StrTestEntity ste2 = getEntityManager().find( StrTestEntity.class, ste_id2 ); - - ManyToOneComponentTestEntity ver2 = new ManyToOneComponentTestEntity( - mtocte_id1, new ManyToOneComponent( - ste1, - "data1" - ) - ); - ManyToOneComponentTestEntity ver3 = new ManyToOneComponentTestEntity( - mtocte_id1, new ManyToOneComponent( - ste2, - "data1" - ) - ); - - assert getAuditReader().find( ManyToOneComponentTestEntity.class, mtocte_id1, 1 ) == null; - assert getAuditReader().find( ManyToOneComponentTestEntity.class, mtocte_id1, 2 ).equals( ver2 ); - assert getAuditReader().find( ManyToOneComponentTestEntity.class, mtocte_id1, 3 ).equals( ver3 ); + public void testHistoryOfId1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + StrTestEntity ste1 = em.find( StrTestEntity.class, ste_id1 ); + StrTestEntity ste2 = em.find( StrTestEntity.class, ste_id2 ); + + ManyToOneComponentTestEntity ver2 = new ManyToOneComponentTestEntity( + mtocte_id1, new ManyToOneComponent( + ste1, + "data1" + ) + ); + ManyToOneComponentTestEntity ver3 = new ManyToOneComponentTestEntity( + mtocte_id1, new ManyToOneComponent( + ste2, + "data1" + ) + ); + + final var auditReader = AuditReaderFactory.get( em ); + assertNull( auditReader.find( ManyToOneComponentTestEntity.class, mtocte_id1, 1 ) ); + assertEquals( ver2, auditReader.find( ManyToOneComponentTestEntity.class, mtocte_id1, 2 ) ); + assertEquals( ver3, auditReader.find( ManyToOneComponentTestEntity.class, mtocte_id1, 3 ) ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/relations/NotAuditedManyToOneInComponent.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/relations/NotAuditedManyToOneInComponent.java index a13f4aef2cd6..6d145028e9e0 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/relations/NotAuditedManyToOneInComponent.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/relations/NotAuditedManyToOneInComponent.java @@ -5,96 +5,100 @@ package org.hibernate.orm.test.envers.integration.components.relations; import java.util.Arrays; -import jakarta.persistence.EntityManager; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.orm.test.envers.entities.UnversionedStrTestEntity; import org.hibernate.orm.test.envers.entities.components.relations.NotAuditedManyToOneComponent; import org.hibernate.orm.test.envers.entities.components.relations.NotAuditedManyToOneComponentTestEntity; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; -import org.junit.Test; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Adam Warski (adam at warski dot org) */ -public class NotAuditedManyToOneInComponent extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {NotAuditedManyToOneComponentTestEntity.class, UnversionedStrTestEntity.class}) +public class NotAuditedManyToOneInComponent { private Integer mtocte_id1; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {NotAuditedManyToOneComponentTestEntity.class, UnversionedStrTestEntity.class}; - } - - @Test - @Priority(10) - public void initData() { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // No revision - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - - UnversionedStrTestEntity ste1 = new UnversionedStrTestEntity(); - ste1.setStr( "str1" ); - - UnversionedStrTestEntity ste2 = new UnversionedStrTestEntity(); - ste2.setStr( "str2" ); + scope.inTransaction( em -> { + UnversionedStrTestEntity ste1 = new UnversionedStrTestEntity(); + ste1.setStr( "str1" ); - em.persist( ste1 ); - em.persist( ste2 ); + UnversionedStrTestEntity ste2 = new UnversionedStrTestEntity(); + ste2.setStr( "str2" ); - em.getTransaction().commit(); + em.persist( ste1 ); + em.persist( ste2 ); + } ); // Revision 1 - em = getEntityManager(); - em.getTransaction().begin(); + scope.inTransaction( em -> { + UnversionedStrTestEntity ste1 = em.createQuery( + "from UnversionedStrTestEntity where str = 'str1'", + UnversionedStrTestEntity.class + ).getSingleResult(); - NotAuditedManyToOneComponentTestEntity mtocte1 = new NotAuditedManyToOneComponentTestEntity( - new NotAuditedManyToOneComponent( ste1, "data1" ) - ); + NotAuditedManyToOneComponentTestEntity mtocte1 = new NotAuditedManyToOneComponentTestEntity( + new NotAuditedManyToOneComponent( ste1, "data1" ) + ); - em.persist( mtocte1 ); + em.persist( mtocte1 ); - em.getTransaction().commit(); + mtocte_id1 = mtocte1.getId(); + } ); // No revision - em = getEntityManager(); - em.getTransaction().begin(); - - mtocte1 = em.find( NotAuditedManyToOneComponentTestEntity.class, mtocte1.getId() ); - mtocte1.getComp1().setEntity( ste2 ); - - em.getTransaction().commit(); + scope.inTransaction( em -> { + UnversionedStrTestEntity ste2 = em.createQuery( + "from UnversionedStrTestEntity where str = 'str2'", + UnversionedStrTestEntity.class + ).getSingleResult(); + NotAuditedManyToOneComponentTestEntity mtocte1 = em.find( NotAuditedManyToOneComponentTestEntity.class, mtocte_id1 ); + mtocte1.getComp1().setEntity( ste2 ); + } ); // Revision 2 - em = getEntityManager(); - em.getTransaction().begin(); - - mtocte1 = em.find( NotAuditedManyToOneComponentTestEntity.class, mtocte1.getId() ); - mtocte1.getComp1().setData( "data2" ); - - em.getTransaction().commit(); - - mtocte_id1 = mtocte1.getId(); + scope.inTransaction( em -> { + NotAuditedManyToOneComponentTestEntity mtocte1 = em.find( NotAuditedManyToOneComponentTestEntity.class, mtocte_id1 ); + mtocte1.getComp1().setData( "data2" ); + } ); } @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ) - .equals( getAuditReader().getRevisions( NotAuditedManyToOneComponentTestEntity.class, mtocte_id1 ) ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + assertEquals( + Arrays.asList( 1, 2 ), + AuditReaderFactory.get( em ).getRevisions( NotAuditedManyToOneComponentTestEntity.class, mtocte_id1 ) + ); + } ); } @Test - public void testHistoryOfId1() { - NotAuditedManyToOneComponentTestEntity ver1 = new NotAuditedManyToOneComponentTestEntity( - mtocte_id1, - new NotAuditedManyToOneComponent( null, "data1" ) - ); - NotAuditedManyToOneComponentTestEntity ver2 = new NotAuditedManyToOneComponentTestEntity( - mtocte_id1, - new NotAuditedManyToOneComponent( null, "data2" ) - ); - - assert getAuditReader().find( NotAuditedManyToOneComponentTestEntity.class, mtocte_id1, 1 ).equals( ver1 ); - assert getAuditReader().find( NotAuditedManyToOneComponentTestEntity.class, mtocte_id1, 2 ).equals( ver2 ); + public void testHistoryOfId1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + NotAuditedManyToOneComponentTestEntity ver1 = new NotAuditedManyToOneComponentTestEntity( + mtocte_id1, + new NotAuditedManyToOneComponent( null, "data1" ) + ); + NotAuditedManyToOneComponentTestEntity ver2 = new NotAuditedManyToOneComponentTestEntity( + mtocte_id1, + new NotAuditedManyToOneComponent( null, "data2" ) + ); + + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( ver1, auditReader.find( NotAuditedManyToOneComponentTestEntity.class, mtocte_id1, 1 ) ); + assertEquals( ver2, auditReader.find( NotAuditedManyToOneComponentTestEntity.class, mtocte_id1, 2 ) ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/relations/OneToManyInComponent.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/relations/OneToManyInComponent.java index f2ed6025b0d6..abb170745f58 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/relations/OneToManyInComponent.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/components/relations/OneToManyInComponent.java @@ -5,103 +5,105 @@ package org.hibernate.orm.test.envers.integration.components.relations; import java.util.Arrays; -import jakarta.persistence.EntityManager; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.orm.test.envers.entities.StrTestEntity; import org.hibernate.orm.test.envers.entities.components.relations.OneToManyComponent; import org.hibernate.orm.test.envers.entities.components.relations.OneToManyComponentTestEntity; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; -import org.junit.Test; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNull; /** * @author Adam Warski (adam at warski dot org) */ -public class OneToManyInComponent extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {OneToManyComponentTestEntity.class, StrTestEntity.class}) +public class OneToManyInComponent { private Integer otmcte_id1; private Integer ste_id1; private Integer ste_id2; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {OneToManyComponentTestEntity.class, StrTestEntity.class}; - } - - @Test - @Priority(10) - public void initData() { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); + scope.inTransaction( em -> { + StrTestEntity ste1 = new StrTestEntity(); + ste1.setStr( "str1" ); - StrTestEntity ste1 = new StrTestEntity(); - ste1.setStr( "str1" ); + StrTestEntity ste2 = new StrTestEntity(); + ste2.setStr( "str2" ); - StrTestEntity ste2 = new StrTestEntity(); - ste2.setStr( "str2" ); + em.persist( ste1 ); + em.persist( ste2 ); - em.persist( ste1 ); - em.persist( ste2 ); - - em.getTransaction().commit(); + ste_id1 = ste1.getId(); + ste_id2 = ste2.getId(); + } ); // Revision 2 - em = getEntityManager(); - em.getTransaction().begin(); + scope.inTransaction( em -> { + StrTestEntity ste1 = em.find( StrTestEntity.class, ste_id1 ); - OneToManyComponentTestEntity otmcte1 = new OneToManyComponentTestEntity( new OneToManyComponent( "data1" ) ); - otmcte1.getComp1().getEntities().add( ste1 ); + OneToManyComponentTestEntity otmcte1 = new OneToManyComponentTestEntity( new OneToManyComponent( "data1" ) ); + otmcte1.getComp1().getEntities().add( ste1 ); - em.persist( otmcte1 ); + em.persist( otmcte1 ); - em.getTransaction().commit(); + otmcte_id1 = otmcte1.getId(); + } ); // Revision 3 - em = getEntityManager(); - em.getTransaction().begin(); - - otmcte1 = em.find( OneToManyComponentTestEntity.class, otmcte1.getId() ); - otmcte1.getComp1().getEntities().add( ste2 ); - - em.getTransaction().commit(); - - otmcte_id1 = otmcte1.getId(); - ste_id1 = ste1.getId(); - ste_id2 = ste2.getId(); + scope.inTransaction( em -> { + StrTestEntity ste2 = em.find( StrTestEntity.class, ste_id2 ); + OneToManyComponentTestEntity otmcte1 = em.find( OneToManyComponentTestEntity.class, otmcte_id1 ); + otmcte1.getComp1().getEntities().add( ste2 ); + } ); } @Test - public void testRevisionsCounts() { - assert Arrays.asList( 2, 3 ).equals( - getAuditReader().getRevisions( - OneToManyComponentTestEntity.class, - otmcte_id1 - ) - ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + assertEquals( + Arrays.asList( 2, 3 ), + AuditReaderFactory.get( em ).getRevisions( + OneToManyComponentTestEntity.class, + otmcte_id1 + ) + ); + } ); } @Test - public void testHistoryOfId1() { - StrTestEntity ste1 = getEntityManager().find( StrTestEntity.class, ste_id1 ); - StrTestEntity ste2 = getEntityManager().find( StrTestEntity.class, ste_id2 ); - - OneToManyComponentTestEntity ver2 = new OneToManyComponentTestEntity( - otmcte_id1, new OneToManyComponent( - "data1" - ) - ); - ver2.getComp1().getEntities().add( ste1 ); - OneToManyComponentTestEntity ver3 = new OneToManyComponentTestEntity( - otmcte_id1, new OneToManyComponent( - "data1" - ) - ); - ver3.getComp1().getEntities().add( ste1 ); - ver3.getComp1().getEntities().add( ste2 ); - - assert getAuditReader().find( OneToManyComponentTestEntity.class, otmcte_id1, 1 ) == null; - assert getAuditReader().find( OneToManyComponentTestEntity.class, otmcte_id1, 2 ).equals( ver2 ); - assert getAuditReader().find( OneToManyComponentTestEntity.class, otmcte_id1, 3 ).equals( ver3 ); + public void testHistoryOfId1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + StrTestEntity ste1 = em.find( StrTestEntity.class, ste_id1 ); + StrTestEntity ste2 = em.find( StrTestEntity.class, ste_id2 ); + + OneToManyComponentTestEntity ver2 = new OneToManyComponentTestEntity( + otmcte_id1, new OneToManyComponent( + "data1" + ) + ); + ver2.getComp1().getEntities().add( ste1 ); + OneToManyComponentTestEntity ver3 = new OneToManyComponentTestEntity( + otmcte_id1, new OneToManyComponent( + "data1" + ) + ); + ver3.getComp1().getEntities().add( ste1 ); + ver3.getComp1().getEntities().add( ste2 ); + + final var auditReader = AuditReaderFactory.get( em ); + assertNull( auditReader.find( OneToManyComponentTestEntity.class, otmcte_id1, 1 ) ); + assertEquals( ver2, auditReader.find( OneToManyComponentTestEntity.class, otmcte_id1, 2 ) ); + assertEquals( ver3, auditReader.find( OneToManyComponentTestEntity.class, otmcte_id1, 3 ) ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/customtype/DurationTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/customtype/DurationTest.java similarity index 54% rename from hibernate-envers/src/test/java/org/hibernate/envers/test/integration/customtype/DurationTest.java rename to hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/customtype/DurationTest.java index 49160562363a..f6ca0b5ca701 100644 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/customtype/DurationTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/customtype/DurationTest.java @@ -2,25 +2,26 @@ * SPDX-License-Identifier: Apache-2.0 * Copyright Red Hat Inc. and Hibernate Authors */ -package org.hibernate.envers.test.integration.customtype; +package org.hibernate.orm.test.envers.integration.customtype; import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; - +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; +import org.hibernate.testing.orm.junit.Jpa; import jakarta.persistence.Entity; import jakarta.persistence.GeneratedValue; import jakarta.persistence.Id; +import org.junit.jupiter.api.Test; -import static org.hibernate.testing.transaction.TransactionUtil.doInJPA; import java.time.Duration; @JiraKey(value = "HHH-17243") -public class DurationTest extends BaseEnversJPAFunctionalTestCase{ +@EnversTest +@Jpa(annotatedClasses = DurationTest.DurationTestEntity.class) +public class DurationTest { @Entity(name = "Duration") @Audited @@ -31,12 +32,12 @@ public static class DurationTestEntity { private Duration duration; - DurationTestEntity(){ + DurationTestEntity() { - } + } DurationTestEntity(Duration aDuration) { - this.duration = aDuration; + this.duration = aDuration; } public Integer getId() { @@ -52,28 +53,22 @@ public void setDuration(Duration aDuration) { } } - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { DurationTestEntity.class }; - } - private Integer durationId; @Test - @Priority(10) - public void initData() { + public void initData(EntityManagerFactoryScope scope) { // Revision 1 - insert - this.durationId = doInJPA( this::entityManagerFactory, entityManager -> { - final DurationTestEntity duration = new DurationTestEntity(Duration.ofHours(2)); + this.durationId = scope.fromTransaction( entityManager -> { + final DurationTestEntity duration = new DurationTestEntity( Duration.ofHours( 2 ) ); entityManager.persist( duration ); return duration.getId(); } ); // Revision 2 - update - doInJPA( this::entityManagerFactory, entityManager -> { + scope.inTransaction( entityManager -> { final DurationTestEntity duration = entityManager.find( DurationTestEntity.class, this.durationId ); - duration.setDuration(Duration.ofHours(3)); - entityManager.merge(duration); + duration.setDuration( Duration.ofHours( 3 ) ); + entityManager.merge( duration ); } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/customtype/EnumType.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/customtype/EnumType.java similarity index 99% rename from hibernate-envers/src/test/java/org/hibernate/envers/test/integration/customtype/EnumType.java rename to hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/customtype/EnumType.java index 117c0ee80b9b..e077434751c8 100644 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/customtype/EnumType.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/customtype/EnumType.java @@ -2,7 +2,7 @@ * SPDX-License-Identifier: Apache-2.0 * Copyright Red Hat Inc. and Hibernate Authors */ -package org.hibernate.envers.test.integration.customtype; +package org.hibernate.orm.test.envers.integration.customtype; import jakarta.persistence.Enumerated; import jakarta.persistence.MapKeyEnumerated; diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/customtype/EnumTypeTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/customtype/EnumTypeTest.java index d24e92677f1f..9f79e804f97f 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/customtype/EnumTypeTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/customtype/EnumTypeTest.java @@ -4,63 +4,51 @@ */ package org.hibernate.orm.test.envers.integration.customtype; -import java.util.Map; - import org.hibernate.cfg.AvailableSettings; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; import org.hibernate.orm.test.envers.entities.customtype.EnumTypeEntity; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Assert; -import org.junit.Test; +import org.hibernate.testing.orm.junit.Jpa; +import org.hibernate.testing.orm.junit.Setting; +import org.junit.jupiter.api.Test; -import jakarta.persistence.EntityManager; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; /** * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) */ @JiraKey(value = "HHH-7780") -public class EnumTypeTest extends BaseEnversJPAFunctionalTestCase { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {EnumTypeEntity.class}; - } - - @Override - protected void addConfigOptions(Map options) { - super.addConfigOptions( options ); - options.put( AvailableSettings.PREFER_NATIVE_ENUM_TYPES, "false" ); - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - em.getTransaction().begin(); - EnumTypeEntity entity = new EnumTypeEntity( EnumTypeEntity.E1.X, EnumTypeEntity.E2.A ); - em.persist( entity ); - em.getTransaction().commit(); - - em.close(); +@EnversTest +@Jpa( + annotatedClasses = {EnumTypeEntity.class}, + integrationSettings = @Setting(name = AvailableSettings.PREFER_NATIVE_ENUM_TYPES, value = "false") +) +public class EnumTypeTest { + + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + scope.inTransaction( em -> { + EnumTypeEntity entity = new EnumTypeEntity( EnumTypeEntity.E1.X, EnumTypeEntity.E2.A ); + em.persist( entity ); + } ); } @Test - public void testEnumRepresentation() { - EntityManager entityManager = getEntityManager(); - entityManager.getTransaction().begin(); - - final String qry = "SELECT enum1, enum2 FROM EnumTypeEntity_AUD ORDER BY REV ASC"; - Object[] results = (Object[]) entityManager.createNativeQuery( qry, "e1_e2" ).getSingleResult(); - entityManager.getTransaction().commit(); - entityManager.close(); - - Assert.assertNotNull( results ); - Assert.assertEquals( 2, results.length ); - Assert.assertEquals( "X", results[0] ); - // Compare the Strings to account for, as an example, Oracle - // returning a BigDecimal instead of an int. - Assert.assertEquals( "0", results[1] + "" ); + public void testEnumRepresentation(EntityManagerFactoryScope scope) { + scope.inTransaction( entityManager -> { + final String qry = "SELECT enum1, enum2 FROM EnumTypeEntity_AUD ORDER BY REV ASC"; + Object[] results = (Object[]) entityManager.createNativeQuery( qry, "e1_e2" ).getSingleResult(); + + assertNotNull( results ); + assertEquals( 2, results.length ); + assertEquals( "X", results[0] ); + // Compare the Strings to account for, as an example, Oracle + // returning a BigDecimal instead of an int. + assertEquals( "0", results[1] + "" ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/customtype/ExtendedEnumTypeTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/customtype/ExtendedEnumTypeTest.java similarity index 64% rename from hibernate-envers/src/test/java/org/hibernate/envers/test/integration/customtype/ExtendedEnumTypeTest.java rename to hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/customtype/ExtendedEnumTypeTest.java index 6ff25a9bb36a..943db1732456 100644 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/customtype/ExtendedEnumTypeTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/customtype/ExtendedEnumTypeTest.java @@ -2,7 +2,7 @@ * SPDX-License-Identifier: Apache-2.0 * Copyright Red Hat Inc. and Hibernate Authors */ -package org.hibernate.envers.test.integration.customtype; +package org.hibernate.orm.test.envers.integration.customtype; import java.util.Arrays; import java.util.List; @@ -10,16 +10,19 @@ import org.hibernate.annotations.Type; import org.hibernate.engine.spi.SessionFactoryImplementor; import org.hibernate.engine.spi.SessionImplementor; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.Audited; import org.hibernate.envers.boot.internal.EnversService; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; import org.hibernate.persister.entity.EntityPersister; import org.hibernate.type.CustomType; import org.hibernate.usertype.UserType; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; import jakarta.persistence.Entity; import jakarta.persistence.EnumType; @@ -28,12 +31,11 @@ import jakarta.persistence.Id; import static org.hibernate.testing.junit4.ExtraAssertions.assertTyping; -import static org.hibernate.testing.transaction.TransactionUtil.doInJPA; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNull; /** - * Tests that a custom type which extends {@link org.hibernate.envers.test.integration.customtype.EnumType} + * Tests that a custom type which extends {@link org.hibernate.orm.test.envers.integration.customtype.EnumType} * continues to be recognized as an EnumType rather than a basic custom type implementation since the values * which envers sends to describe the type in HBM differ whether its an Enum or not. * @@ -42,11 +44,13 @@ * @author Chris Cranford */ @JiraKey(value = "HHH-12304") -public class ExtendedEnumTypeTest extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = ExtendedEnumTypeTest.Widget.class) +public class ExtendedEnumTypeTest { // An extended type to trigger the need for Envers to supply type information in the HBM mappings. // This should be treated the same as any other property annotated as Enumerated or uses an Enum. - public static class ExtendedEnumType extends org.hibernate.envers.test.integration.customtype.EnumType { + public static class ExtendedEnumType extends org.hibernate.orm.test.envers.integration.customtype.EnumType { } @@ -103,63 +107,60 @@ public void setStatus2(Status status2) { } } - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { Widget.class }; - } - private Integer widgetId; - @Test - @Priority(10) - public void initData() { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Revision 1 - insert - this.widgetId = doInJPA( this::entityManagerFactory, entityManager -> { + this.widgetId = scope.fromTransaction( entityManager -> { final Widget widget = new Widget( Widget.Status.DRAFT ); entityManager.persist( widget ); return widget.getId(); } ); // Revision 2 - update - doInJPA( this::entityManagerFactory, entityManager -> { + scope.inTransaction( entityManager -> { final Widget widget = entityManager.find( Widget.class, this.widgetId ); widget.setStatus( Widget.Status.ARCHIVED ); entityManager.merge( widget ); } ); // Revision 3 - delete - doInJPA( this::entityManagerFactory, entityManager -> { + scope.inTransaction( entityManager -> { final Widget widget = entityManager.find( Widget.class, this.widgetId ); entityManager.remove( widget ); } ); } @Test - public void testRevisionHistory() { - List revisions = getAuditReader().getRevisions( Widget.class, this.widgetId ); - assertEquals( Arrays.asList( 1, 2, 3 ), revisions ); + public void testRevisionHistory(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + List revisions = auditReader.getRevisions( Widget.class, this.widgetId ); + assertEquals( Arrays.asList( 1, 2, 3 ), revisions ); - final Widget rev1 = getAuditReader().find( Widget.class, this.widgetId, 1 ); - assertEquals( Widget.Status.DRAFT, rev1.getStatus() ); + final Widget rev1 = auditReader.find( Widget.class, this.widgetId, 1 ); + assertEquals( Widget.Status.DRAFT, rev1.getStatus() ); - final Widget rev2 = getAuditReader().find( Widget.class, this.widgetId, 2 ); - assertEquals( Widget.Status.ARCHIVED, rev2.getStatus() ); + final Widget rev2 = auditReader.find( Widget.class, this.widgetId, 2 ); + assertEquals( Widget.Status.ARCHIVED, rev2.getStatus() ); - final Widget rev3 = getAuditReader().find( Widget.class, this.widgetId, 3 ); - assertNull( rev3 ); + final Widget rev3 = auditReader.find( Widget.class, this.widgetId, 3 ); + assertNull( rev3 ); + } ); } @Test - public void testEnumPropertyStorageType() { + public void testEnumPropertyStorageType(EntityManagerFactoryScope scope) { // test that property 'status' translates to an enum type that is stored by name (e.g. STRING) - assertEnumProperty( Widget.class, ExtendedEnumType.class, "status", EnumType.STRING ); + assertEnumProperty( scope, Widget.class, ExtendedEnumType.class, "status", EnumType.STRING ); // test that property 'status2' translates to an enum type that is stored by position (e.g. ORDINAL) - assertEnumProperty( Widget.class, ExtendedEnumType.class, "status2", EnumType.ORDINAL ); + assertEnumProperty( scope, Widget.class, ExtendedEnumType.class, "status2", EnumType.ORDINAL ); } - private void assertEnumProperty(Class entityClass, Class typeClass, String propertyName, EnumType expectedType) { - doInJPA( this::entityManagerFactory, entityManager -> { + private void assertEnumProperty(EntityManagerFactoryScope scope, Class entityClass, Class typeClass, String propertyName, EnumType expectedType) { + scope.inEntityManager( entityManager -> { final SessionFactoryImplementor sessionFactory = entityManager.unwrap( SessionImplementor.class ).getSessionFactory(); final EntityPersister entityPersister = sessionFactory.getMappingMetamodel().getEntityDescriptor( entityClass ); @@ -175,7 +176,7 @@ private void assertEnumProperty(Class entityClass, Class typeClass, String final UserType userType = ( (CustomType) propertyType ).getUserType(); assertTyping( typeClass, userType ); - assertTyping( org.hibernate.envers.test.integration.customtype.EnumType.class, userType ); + assertTyping( org.hibernate.orm.test.envers.integration.customtype.EnumType.class, userType ); // org,hibernate.type.EnumType used to be special-cased in the Envers code // switch ( expectedType ) { diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/customtype/ObjectUserType.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/customtype/ObjectUserType.java similarity index 97% rename from hibernate-envers/src/test/java/org/hibernate/envers/test/integration/customtype/ObjectUserType.java rename to hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/customtype/ObjectUserType.java index f80eeb528cfd..c53bba90f888 100644 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/customtype/ObjectUserType.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/customtype/ObjectUserType.java @@ -2,7 +2,7 @@ * SPDX-License-Identifier: Apache-2.0 * Copyright Red Hat Inc. and Hibernate Authors */ -package org.hibernate.envers.test.integration.customtype; +package org.hibernate.orm.test.envers.integration.customtype; import java.io.Serializable; diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/customtype/ObjectUserTypeEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/customtype/ObjectUserTypeEntity.java similarity index 97% rename from hibernate-envers/src/test/java/org/hibernate/envers/test/integration/customtype/ObjectUserTypeEntity.java rename to hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/customtype/ObjectUserTypeEntity.java index 025b6f39c981..c2d0c71aeea1 100644 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/customtype/ObjectUserTypeEntity.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/customtype/ObjectUserTypeEntity.java @@ -2,7 +2,7 @@ * SPDX-License-Identifier: Apache-2.0 * Copyright Red Hat Inc. and Hibernate Authors */ -package org.hibernate.envers.test.integration.customtype; +package org.hibernate.orm.test.envers.integration.customtype; import java.io.Serializable; diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/customtype/ObjectUserTypeTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/customtype/ObjectUserTypeTest.java new file mode 100644 index 000000000000..88ea47df7d31 --- /dev/null +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/customtype/ObjectUserTypeTest.java @@ -0,0 +1,86 @@ +/* + * SPDX-License-Identifier: Apache-2.0 + * Copyright Red Hat Inc. and Hibernate Authors + */ +package org.hibernate.orm.test.envers.integration.customtype; + +import java.util.Arrays; + +import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.envers.configuration.EnversSettings; + +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.JiraKey; +import org.hibernate.testing.orm.junit.Jpa; +import org.hibernate.testing.orm.junit.Setting; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +/** + * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) + */ +@JiraKey(value = "HHH-7870") +@EnversTest +@Jpa( + annotatedClasses = {ObjectUserTypeEntity.class}, + integrationSettings = @Setting(name = EnversSettings.STORE_DATA_AT_DELETE, value = "true") +) +public class ObjectUserTypeTest { + private int id; + + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + // Revision 1 - add + scope.inTransaction( em -> { + ObjectUserTypeEntity entity = new ObjectUserTypeEntity( "builtInType1", "stringUserType1" ); + em.persist( entity ); + this.id = entity.getId(); + } ); + + // Revision 2 - modify + scope.inTransaction( em -> { + ObjectUserTypeEntity entity = em.find( ObjectUserTypeEntity.class, this.id ); + entity.setUserType( 2 ); + em.merge( entity ); + } ); + + // Revision 3 - remove + scope.inTransaction( em -> { + ObjectUserTypeEntity entity = em.find( ObjectUserTypeEntity.class, this.id ); + em.remove( entity ); + } ); + } + + @Test + public void testRevisionCount(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( + Arrays.asList( 1, 2, 3 ), + auditReader.getRevisions( ObjectUserTypeEntity.class, id ) + ); + } ); + } + + @Test + public void testHistory(EntityManagerFactoryScope scope) { + ObjectUserTypeEntity ver1 = new ObjectUserTypeEntity( id, "builtInType1", "stringUserType1" ); + ObjectUserTypeEntity ver2 = new ObjectUserTypeEntity( id, "builtInType1", 2 ); + + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( ver1, auditReader.find( ObjectUserTypeEntity.class, id, 1 ) ); + assertEquals( ver2, auditReader.find( ObjectUserTypeEntity.class, id, 2 ) ); + assertEquals( + ver2, + auditReader.createQuery() + .forRevisionsOfEntity( ObjectUserTypeEntity.class, true, true ) + .getResultList() + .get( 2 ) + ); // Checking delete state. + } ); + } +} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/customtype/ParametrizedCustom.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/customtype/ParametrizedCustom.java new file mode 100644 index 000000000000..8200fddd81b0 --- /dev/null +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/customtype/ParametrizedCustom.java @@ -0,0 +1,67 @@ +/* + * SPDX-License-Identifier: Apache-2.0 + * Copyright Red Hat Inc. and Hibernate Authors + */ +package org.hibernate.orm.test.envers.integration.customtype; + +import java.util.Arrays; + +import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.orm.test.envers.entities.customtype.ParametrizedCustomTypeEntity; + +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +/** + * @author Adam Warski (adam at warski dot org) + */ +@EnversTest +@Jpa(annotatedClasses = {ParametrizedCustomTypeEntity.class}) +public class ParametrizedCustom { + private Integer pcte_id; + + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + // Revision 1 (persisting 1 entity) + this.pcte_id = scope.fromTransaction( em -> { + ParametrizedCustomTypeEntity pcte = new ParametrizedCustomTypeEntity(); + pcte.setStr( "U" ); + em.persist( pcte ); + return pcte.getId(); + } ); + + // Revision 2 (changing the value) + scope.inTransaction( em -> { + ParametrizedCustomTypeEntity pcte = em.find( ParametrizedCustomTypeEntity.class, this.pcte_id ); + pcte.setStr( "V" ); + } ); + } + + @Test + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( + Arrays.asList( 1, 2 ), + auditReader.getRevisions( ParametrizedCustomTypeEntity.class, pcte_id ) + ); + } ); + } + + @Test + public void testHistoryOfCcte(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + ParametrizedCustomTypeEntity rev1 = auditReader.find( ParametrizedCustomTypeEntity.class, pcte_id, 1 ); + ParametrizedCustomTypeEntity rev2 = auditReader.find( ParametrizedCustomTypeEntity.class, pcte_id, 2 ); + + assertEquals( "xUy", rev1.getStr() ); + assertEquals( "xVy", rev2.getStr() ); + } ); + } +} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/customtype/UnspecifiedEnumTypeTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/customtype/UnspecifiedEnumTypeTest.java new file mode 100644 index 000000000000..2b82438477ee --- /dev/null +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/customtype/UnspecifiedEnumTypeTest.java @@ -0,0 +1,114 @@ +/* + * SPDX-License-Identifier: Apache-2.0 + * Copyright Red Hat Inc. and Hibernate Authors + */ +package org.hibernate.orm.test.envers.integration.customtype; + +import org.hibernate.cfg.AvailableSettings; +import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.envers.strategy.internal.DefaultAuditStrategy; +import org.hibernate.orm.test.envers.entities.customtype.UnspecifiedEnumTypeEntity; +import org.hibernate.testing.envers.RequiresAuditStrategy; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.DomainModel; +import org.hibernate.testing.orm.junit.JiraKey; +import org.hibernate.testing.orm.junit.ServiceRegistry; +import org.hibernate.testing.orm.junit.SessionFactory; +import org.hibernate.testing.orm.junit.SessionFactoryScope; +import org.hibernate.testing.orm.junit.Setting; +import org.hibernate.type.StandardBasicTypes; +import org.junit.jupiter.api.Test; + +import java.util.Arrays; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.assertArrayEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; + +/** + * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) + */ +@JiraKey(value = "HHH-7780") +@RequiresAuditStrategy(DefaultAuditStrategy.class) +@EnversTest +@DomainModel(xmlMappings = "mappings/customType/mappings.hbm.xml") +@ServiceRegistry(settings = { + @Setting(name = AvailableSettings.SHOW_SQL, value = "true"), + @Setting(name = AvailableSettings.FORMAT_SQL, value = "true"), + @Setting(name = AvailableSettings.PREFER_NATIVE_ENUM_TYPES, value = "false") +}) +@SessionFactory +public class UnspecifiedEnumTypeTest { + private Long id = null; + + @BeforeClassTemplate + public void initData(SessionFactoryScope scope) { + // Revision 1 + this.id = scope.fromTransaction( session -> { + UnspecifiedEnumTypeEntity entity = new UnspecifiedEnumTypeEntity( + UnspecifiedEnumTypeEntity.E1.X, + UnspecifiedEnumTypeEntity.E2.A + ); + session.persist( entity ); + return entity.getId(); + } ); + + // Revision 2 + scope.inTransaction( session -> { + UnspecifiedEnumTypeEntity entity = session.get( UnspecifiedEnumTypeEntity.class, this.id ); + entity.setEnum1( UnspecifiedEnumTypeEntity.E1.Y ); + entity.setEnum2( UnspecifiedEnumTypeEntity.E2.B ); + session.merge( entity ); + } ); + } + + @Test + public void testRevisionCount(SessionFactoryScope scope) { + scope.inSession( session -> { + final var auditReader = AuditReaderFactory.get( session ); + assertEquals( + Arrays.asList( 1, 2 ), + auditReader.getRevisions( UnspecifiedEnumTypeEntity.class, id ) + ); + } ); + } + + @Test + public void testHistoryOfEnums(SessionFactoryScope scope) { + UnspecifiedEnumTypeEntity ver1 = new UnspecifiedEnumTypeEntity( + UnspecifiedEnumTypeEntity.E1.X, + UnspecifiedEnumTypeEntity.E2.A, + id + ); + UnspecifiedEnumTypeEntity ver2 = new UnspecifiedEnumTypeEntity( + UnspecifiedEnumTypeEntity.E1.Y, + UnspecifiedEnumTypeEntity.E2.B, + id + ); + + scope.inSession( session -> { + final var auditReader = AuditReaderFactory.get( session ); + assertEquals( ver1, auditReader.find( UnspecifiedEnumTypeEntity.class, id, 1 ) ); + assertEquals( ver2, auditReader.find( UnspecifiedEnumTypeEntity.class, id, 2 ) ); + } ); + } + + @Test + public void testEnumRepresentation(SessionFactoryScope scope) { + scope.inSession( session -> { + @SuppressWarnings("unchecked") + List values = session + .createNativeQuery( "SELECT enum1 e1, enum2 e2 FROM ENUM_ENTITY_AUD ORDER BY REV ASC" ) + .addScalar( "e1", StandardBasicTypes.INTEGER ) + .addScalar( "e2", StandardBasicTypes.INTEGER ) + .list(); + + assertNotNull( values ); + assertEquals( 2, values.size() ); + assertArrayEquals( new Object[] {0, 0}, values.get( 0 ) ); + assertArrayEquals( new Object[] {1, 1}, values.get( 1 ) ); + } ); + } +} diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/data/DateTestEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/data/DateTestEntity.java similarity index 96% rename from hibernate-envers/src/test/java/org/hibernate/envers/test/integration/data/DateTestEntity.java rename to hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/data/DateTestEntity.java index 09b9ee6713e2..e306bee06056 100644 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/data/DateTestEntity.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/data/DateTestEntity.java @@ -2,7 +2,7 @@ * SPDX-License-Identifier: Apache-2.0 * Copyright Red Hat Inc. and Hibernate Authors */ -package org.hibernate.envers.test.integration.data; +package org.hibernate.orm.test.envers.integration.data; import java.util.Date; import jakarta.persistence.Entity; diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/data/Dates.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/data/Dates.java index 10bb08677f98..081bd97fb936 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/data/Dates.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/data/Dates.java @@ -6,53 +6,55 @@ import java.util.Arrays; import java.util.Date; -import jakarta.persistence.EntityManager; -import org.hibernate.envers.test.integration.data.DateTestEntity; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; -import org.junit.Assert; -import org.junit.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Adam Warski (adam at warski dot org) */ -public class Dates extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {DateTestEntity.class}) +public class Dates { private Integer id1; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { DateTestEntity.class}; + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + id1 = scope.fromTransaction( em -> { + DateTestEntity dte = new DateTestEntity( new Date( 12345000 ) ); + em.persist( dte ); + return dte.getId(); + } ); + + scope.inTransaction( em -> { + DateTestEntity dte = em.find( DateTestEntity.class, id1 ); + dte.setDateValue( new Date( 45678000 ) ); + } ); } @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - DateTestEntity dte = new DateTestEntity( new Date( 12345000 ) ); - em.persist( dte ); - id1 = dte.getId(); - em.getTransaction().commit(); - - em.getTransaction().begin(); - dte = em.find( DateTestEntity.class, id1 ); - dte.setDateValue( new Date( 45678000 ) ); - em.getTransaction().commit(); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1, 2 ), auditReader.getRevisions( DateTestEntity.class, id1 ) ); + } ); } @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( DateTestEntity.class, id1 ) ); - } - - @Test - public void testHistoryOfId1() { - DateTestEntity ver1 = new DateTestEntity( id1, new Date( 12345000 ) ); - DateTestEntity ver2 = new DateTestEntity( id1, new Date( 45678000 ) ); - - Assert.assertEquals( ver1, getAuditReader().find( DateTestEntity.class, id1, 1 ) ); - Assert.assertEquals( ver2, getAuditReader().find( DateTestEntity.class, id1, 2 ) ); + public void testHistoryOfId1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + DateTestEntity ver1 = new DateTestEntity( id1, new Date( 12345000 ) ); + DateTestEntity ver2 = new DateTestEntity( id1, new Date( 45678000 ) ); + + assertEquals( ver1, auditReader.find( DateTestEntity.class, id1, 1 ) ); + assertEquals( ver2, auditReader.find( DateTestEntity.class, id1, 2 ) ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/data/EnumTestEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/data/EnumTestEntity.java similarity index 96% rename from hibernate-envers/src/test/java/org/hibernate/envers/test/integration/data/EnumTestEntity.java rename to hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/data/EnumTestEntity.java index 88d6d4421eec..08ef472bca10 100644 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/data/EnumTestEntity.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/data/EnumTestEntity.java @@ -2,7 +2,7 @@ * SPDX-License-Identifier: Apache-2.0 * Copyright Red Hat Inc. and Hibernate Authors */ -package org.hibernate.envers.test.integration.data; +package org.hibernate.orm.test.envers.integration.data; import jakarta.persistence.Entity; import jakarta.persistence.EnumType; diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/data/Enums.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/data/Enums.java index 6d8f6798c0dc..9134d591545e 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/data/Enums.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/data/Enums.java @@ -5,53 +5,56 @@ package org.hibernate.orm.test.envers.integration.data; import java.util.Arrays; -import jakarta.persistence.EntityManager; -import org.hibernate.envers.test.integration.data.EnumTestEntity; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; -import org.junit.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Adam Warski (adam at warski dot org) */ -public class Enums extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {EnumTestEntity.class}) +public class Enums { private Integer id1; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { EnumTestEntity.class}; + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + id1 = scope.fromTransaction( em -> { + EnumTestEntity ete = new EnumTestEntity( EnumTestEntity.E1.X, EnumTestEntity.E2.A ); + em.persist( ete ); + return ete.getId(); + } ); + + scope.inTransaction( em -> { + EnumTestEntity ete = em.find( EnumTestEntity.class, id1 ); + ete.setEnum1( EnumTestEntity.E1.Y ); + ete.setEnum2( EnumTestEntity.E2.B ); + } ); } @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - EnumTestEntity ete = new EnumTestEntity( EnumTestEntity.E1.X, EnumTestEntity.E2.A ); - em.persist( ete ); - id1 = ete.getId(); - em.getTransaction().commit(); - - em.getTransaction().begin(); - ete = em.find( EnumTestEntity.class, id1 ); - ete.setEnum1( EnumTestEntity.E1.Y ); - ete.setEnum2( EnumTestEntity.E2.B ); - em.getTransaction().commit(); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1, 2 ), auditReader.getRevisions( EnumTestEntity.class, id1 ) ); + } ); } @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( EnumTestEntity.class, id1 ) ); - } - - @Test - public void testHistoryOfId1() { - EnumTestEntity ver1 = new EnumTestEntity( id1, EnumTestEntity.E1.X, EnumTestEntity.E2.A ); - EnumTestEntity ver2 = new EnumTestEntity( id1, EnumTestEntity.E1.Y, EnumTestEntity.E2.B ); - - assert getAuditReader().find( EnumTestEntity.class, id1, 1 ).equals( ver1 ); - assert getAuditReader().find( EnumTestEntity.class, id1, 2 ).equals( ver2 ); + public void testHistoryOfId1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + EnumTestEntity ver1 = new EnumTestEntity( id1, EnumTestEntity.E1.X, EnumTestEntity.E2.A ); + EnumTestEntity ver2 = new EnumTestEntity( id1, EnumTestEntity.E1.Y, EnumTestEntity.E2.B ); + + assertEquals( ver1, auditReader.find( EnumTestEntity.class, id1, 1 ) ); + assertEquals( ver2, auditReader.find( EnumTestEntity.class, id1, 2 ) ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/data/LobSerializableTestEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/data/LobSerializableTestEntity.java similarity index 96% rename from hibernate-envers/src/test/java/org/hibernate/envers/test/integration/data/LobSerializableTestEntity.java rename to hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/data/LobSerializableTestEntity.java index b8cd42a3d1e6..27b80b21367b 100644 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/data/LobSerializableTestEntity.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/data/LobSerializableTestEntity.java @@ -2,7 +2,7 @@ * SPDX-License-Identifier: Apache-2.0 * Copyright Red Hat Inc. and Hibernate Authors */ -package org.hibernate.envers.test.integration.data; +package org.hibernate.orm.test.envers.integration.data; import jakarta.persistence.Entity; import jakarta.persistence.GeneratedValue; diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/data/LobSerializables.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/data/LobSerializables.java index fbc6d6b57ae1..5857e66636ac 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/data/LobSerializables.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/data/LobSerializables.java @@ -4,66 +4,61 @@ */ package org.hibernate.orm.test.envers.integration.data; -import java.util.Arrays; -import java.util.Map; -import jakarta.persistence.EntityManager; +import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.DialectFeatureChecks; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; +import org.hibernate.testing.orm.junit.RequiresDialectFeature; +import org.hibernate.testing.orm.junit.Setting; +import org.junit.jupiter.api.Test; -import org.hibernate.dialect.PostgreSQLDialect; -import org.hibernate.envers.test.integration.data.LobSerializableTestEntity; -import org.hibernate.envers.test.integration.data.SerObject; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; +import java.util.Arrays; -import org.hibernate.testing.DialectChecks; -import org.hibernate.testing.RequiresDialectFeature; -import org.junit.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Adam Warski (adam at warski dot org) */ -@RequiresDialectFeature(DialectChecks.SupportsExpectedLobUsagePattern.class) -public class LobSerializables extends BaseEnversJPAFunctionalTestCase { +@RequiresDialectFeature(feature = DialectFeatureChecks.SupportsExpectedLobUsagePattern.class) +@EnversTest +@Jpa(annotatedClasses = {LobSerializableTestEntity.class}, + integrationSettings = @Setting(name = "hibernate.connection.autocommit", value = "false")) +public class LobSerializables { private Integer id1; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { LobSerializableTestEntity.class}; - } - - @Override - protected void addConfigOptions(Map options) { - super.addConfigOptions( options ); - if ( getDialect() instanceof PostgreSQLDialect ) { - // In PostgreSQL LOBs cannot be used in auto-commit mode. - options.put( "hibernate.connection.autocommit", "false" ); - } - } - - @Test - public void initData() { - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - LobSerializableTestEntity ste = new LobSerializableTestEntity( new SerObject( "d1" ) ); - em.persist( ste ); - id1 = ste.getId(); - em.getTransaction().commit(); + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + id1 = scope.fromTransaction( em -> { + LobSerializableTestEntity ste = new LobSerializableTestEntity( new SerObject( "d1" ) ); + em.persist( ste ); + return ste.getId(); + } ); - em.getTransaction().begin(); - ste = em.find( LobSerializableTestEntity.class, id1 ); - ste.setObj( new SerObject( "d2" ) ); - em.getTransaction().commit(); + scope.inTransaction( em -> { + LobSerializableTestEntity ste = em.find( LobSerializableTestEntity.class, id1 ); + ste.setObj( new SerObject( "d2" ) ); + } ); } @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( LobSerializableTestEntity.class, id1 ) ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1, 2 ), auditReader.getRevisions( LobSerializableTestEntity.class, id1 ) ); + } ); } @Test - public void testHistoryOfId1() { - LobSerializableTestEntity ver1 = new LobSerializableTestEntity( id1, new SerObject( "d1" ) ); - LobSerializableTestEntity ver2 = new LobSerializableTestEntity( id1, new SerObject( "d2" ) ); + public void testHistoryOfId1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + LobSerializableTestEntity ver1 = new LobSerializableTestEntity( id1, new SerObject( "d1" ) ); + LobSerializableTestEntity ver2 = new LobSerializableTestEntity( id1, new SerObject( "d2" ) ); - assert getAuditReader().find( LobSerializableTestEntity.class, id1, 1 ).equals( ver1 ); - assert getAuditReader().find( LobSerializableTestEntity.class, id1, 2 ).equals( ver2 ); + assertEquals( ver1, auditReader.find( LobSerializableTestEntity.class, id1, 1 ) ); + assertEquals( ver2, auditReader.find( LobSerializableTestEntity.class, id1, 2 ) ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/data/LobTestEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/data/LobTestEntity.java similarity index 97% rename from hibernate-envers/src/test/java/org/hibernate/envers/test/integration/data/LobTestEntity.java rename to hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/data/LobTestEntity.java index b8c1aeb40734..a1746532b9ac 100644 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/data/LobTestEntity.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/data/LobTestEntity.java @@ -2,7 +2,7 @@ * SPDX-License-Identifier: Apache-2.0 * Copyright Red Hat Inc. and Hibernate Authors */ -package org.hibernate.envers.test.integration.data; +package org.hibernate.orm.test.envers.integration.data; import java.util.Arrays; diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/data/Lobs.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/data/Lobs.java new file mode 100644 index 000000000000..4d2c10e53330 --- /dev/null +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/data/Lobs.java @@ -0,0 +1,101 @@ +/* + * SPDX-License-Identifier: Apache-2.0 + * Copyright Red Hat Inc. and Hibernate Authors + */ +package org.hibernate.orm.test.envers.integration.data; + +import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.DialectFeatureChecks; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.JiraKey; +import org.hibernate.testing.orm.junit.Jpa; +import org.hibernate.testing.orm.junit.RequiresDialectFeature; +import org.hibernate.testing.orm.junit.Setting; +import org.junit.jupiter.api.Test; + +import java.util.Arrays; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +/** + * @author Adam Warski (adam at warski dot org) + * @author Chris Cranford + */ +@RequiresDialectFeature(feature = DialectFeatureChecks.SupportsExpectedLobUsagePattern.class) +@EnversTest +@Jpa(annotatedClasses = {LobTestEntity.class}, + integrationSettings = @Setting(name = "hibernate.connection.autocommit", value = "false")) +public class Lobs { + private Integer id1; + private Integer id2; + + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + id1 = scope.fromTransaction( em -> { + LobTestEntity lte = new LobTestEntity( "abc", new byte[] {0, 1, 2}, new char[] {'x', 'y', 'z'} ); + em.persist( lte ); + return lte.getId(); + } ); + + scope.inTransaction( em -> { + LobTestEntity lte = em.find( LobTestEntity.class, id1 ); + lte.setStringLob( "def" ); + lte.setByteLob( new byte[] {3, 4, 5} ); + lte.setCharLob( new char[] {'h', 'i', 'j'} ); + } ); + + // this creates a revision history for a Lob-capable entity but the change is on a non-audited + // field and so it should only generate 1 revision, the initial persist. + id2 = scope.fromTransaction( em -> { + LobTestEntity lte2 = new LobTestEntity( "abc", new byte[] {0, 1, 2}, new char[] {'x', 'y', 'z'} ); + lte2.setData( "Hi" ); + em.persist( lte2 ); + return lte2.getId(); + } ); + + scope.inTransaction( em -> { + LobTestEntity lte2 = em.find( LobTestEntity.class, id2 ); + lte2.setData( "Hello World" ); + } ); + } + + @Test + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1, 2 ), auditReader.getRevisions( LobTestEntity.class, id1 ) ); + } ); + } + + @Test + public void testHistoryOfId1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + LobTestEntity ver1 = new LobTestEntity( id1, "abc", new byte[] {0, 1, 2}, new char[] {'x', 'y', 'z'} ); + LobTestEntity ver2 = new LobTestEntity( id1, "def", new byte[] {3, 4, 5}, new char[] {'h', 'i', 'j'} ); + assertEquals( ver1, auditReader.find( LobTestEntity.class, id1, 1 ) ); + assertEquals( ver2, auditReader.find( LobTestEntity.class, id1, 2 ) ); + } ); + } + + @Test + @JiraKey(value = "HHH-10734") + public void testRevisionsCountsForAuditedArraysWithNoChanges(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 3 ), auditReader.getRevisions( LobTestEntity.class, id2 ) ); + } ); + } + + @Test + @JiraKey(value = "HHH-10734") + public void testHistoryOfId2(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + LobTestEntity ver1 = new LobTestEntity( id2, "abc", new byte[] {0, 1, 2}, new char[] {'x', 'y', 'z'} ); + assertEquals( ver1, auditReader.find( LobTestEntity.class, id2, 3 ) ); + } ); + } +} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/data/RecordFieldEntityTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/data/RecordFieldEntityTest.java new file mode 100644 index 000000000000..b6967d6a89ab --- /dev/null +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/data/RecordFieldEntityTest.java @@ -0,0 +1,147 @@ +/* + * SPDX-License-Identifier: Apache-2.0 + * Copyright Red Hat Inc. and Hibernate Authors + */ +package org.hibernate.orm.test.envers.integration.data; + +import jakarta.persistence.Embedded; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.envers.Audited; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.JiraKey; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; + +import static org.junit.Assert.assertEquals; + + +/** + * Tests that {@link jakarta.persistence.Embedded} works correctly when combined with Java record classes + * in the context of Envers auditing. + * + * @author Minjae Seon + */ +@JiraKey(value = "HHH-18691") +@EnversTest +@Jpa(annotatedClasses = { + RecordFieldEntityTest.TestRecord.class, + RecordFieldEntityTest.WithRecord.class, + RecordFieldEntityTest.TestEmbeddedClass.class, + RecordFieldEntityTest.WithoutRecord.class +}) +public class RecordFieldEntityTest { + record TestRecord(String foo, String bar) { + } + + static class TestEmbeddedClass { + public TestEmbeddedClass() { + } + + public TestEmbeddedClass(String foo, String bar) { + this.foo = foo; + this.bar = bar; + } + + private String foo; + private String bar; + + public String getFoo() { + return foo; + } + + public String getBar() { + return bar; + } + + public void setFoo(String foo) { + this.foo = foo; + } + } + + @Entity + @Audited + static class WithRecord { + @Id + private Integer id; + + @Embedded + private TestRecord testRecord; + + public Integer getId() { + return id; + } + + static WithRecord of(int id, String foo, String bar) { + WithRecord withRecord = new WithRecord(); + + withRecord.id = id; + withRecord.testRecord = new TestRecord( foo, bar ); + return withRecord; + } + } + + @Entity + @Audited + static class WithoutRecord { + @Id + private Integer id; + + @Embedded + private TestEmbeddedClass testEmbeddedClass; + + public Integer getId() { + return id; + } + + public TestEmbeddedClass getTestEmbeddedClass() { + return testEmbeddedClass; + } + + static WithoutRecord of(int id, String foo, String bar) { + WithoutRecord withoutRecord = new WithoutRecord(); + + withoutRecord.id = id; + withoutRecord.testEmbeddedClass = new TestEmbeddedClass( foo, bar ); + + return withoutRecord; + } + } + + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + scope.inTransaction( em -> { + // Create WithRecord Entity + WithRecord withRecord = WithRecord.of( 1, "foo", "bar" ); + em.persist( withRecord ); + // Create WithoutRecord + WithoutRecord withoutRecord = WithoutRecord.of( 1, "foo", "bar" ); + em.persist( withoutRecord ); + } ); + } + + @Test + public void testLoadRecordData(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + WithRecord recordRev = auditReader.find( WithRecord.class, 1, 1 ); + assertEquals( "WithRecord.TestRecord.foo equals foo", "foo", recordRev.testRecord.foo() ); + assertEquals( "WithRecord.TestRecord.bar equals bar", "bar", recordRev.testRecord.bar() ); + } ); + } + + @Test + public void testLoadWithoutRecordData(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + WithoutRecord withoutRecordRev = auditReader.find( WithoutRecord.class, 1, 1 ); + assertEquals( "WithoutRecord.TestEmbeddedClass.foo equals foo", "foo", + withoutRecordRev.getTestEmbeddedClass().getFoo() ); + assertEquals( "WithoutRecord.TestEmbeddedClass.bar equals bar", "bar", + withoutRecordRev.getTestEmbeddedClass().getBar() ); + } ); + } +} diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/data/SerObject.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/data/SerObject.java similarity index 93% rename from hibernate-envers/src/test/java/org/hibernate/envers/test/integration/data/SerObject.java rename to hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/data/SerObject.java index 48df8196df0f..7afe422f3891 100644 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/data/SerObject.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/data/SerObject.java @@ -2,7 +2,7 @@ * SPDX-License-Identifier: Apache-2.0 * Copyright Red Hat Inc. and Hibernate Authors */ -package org.hibernate.envers.test.integration.data; +package org.hibernate.orm.test.envers.integration.data; import java.io.Serializable; diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/data/SerializableTestEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/data/SerializableTestEntity.java similarity index 96% rename from hibernate-envers/src/test/java/org/hibernate/envers/test/integration/data/SerializableTestEntity.java rename to hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/data/SerializableTestEntity.java index 6b4489c68538..8112043016bc 100644 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/data/SerializableTestEntity.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/data/SerializableTestEntity.java @@ -2,7 +2,7 @@ * SPDX-License-Identifier: Apache-2.0 * Copyright Red Hat Inc. and Hibernate Authors */ -package org.hibernate.envers.test.integration.data; +package org.hibernate.orm.test.envers.integration.data; import jakarta.persistence.Entity; import jakarta.persistence.GeneratedValue; diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/data/Serializables.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/data/Serializables.java index 85cad20ff107..9e1862fda5cd 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/data/Serializables.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/data/Serializables.java @@ -5,53 +5,55 @@ package org.hibernate.orm.test.envers.integration.data; import java.util.Arrays; -import jakarta.persistence.EntityManager; -import org.hibernate.envers.test.integration.data.SerObject; -import org.hibernate.envers.test.integration.data.SerializableTestEntity; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; -import org.junit.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Adam Warski (adam at warski dot org) */ -public class Serializables extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {SerializableTestEntity.class}) +public class Serializables { private Integer id1; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { SerializableTestEntity.class}; + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + id1 = scope.fromTransaction( em -> { + SerializableTestEntity ste = new SerializableTestEntity( new SerObject( "d1" ) ); + em.persist( ste ); + return ste.getId(); + } ); + + scope.inTransaction( em -> { + SerializableTestEntity ste = em.find( SerializableTestEntity.class, id1 ); + ste.setObj( new SerObject( "d2" ) ); + } ); } @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - SerializableTestEntity ste = new SerializableTestEntity( new SerObject( "d1" ) ); - em.persist( ste ); - id1 = ste.getId(); - em.getTransaction().commit(); - - em.getTransaction().begin(); - ste = em.find( SerializableTestEntity.class, id1 ); - ste.setObj( new SerObject( "d2" ) ); - em.getTransaction().commit(); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1, 2 ), auditReader.getRevisions( SerializableTestEntity.class, id1 ) ); + } ); } @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( SerializableTestEntity.class, id1 ) ); - } - - @Test - public void testHistoryOfId1() { - SerializableTestEntity ver1 = new SerializableTestEntity( id1, new SerObject( "d1" ) ); - SerializableTestEntity ver2 = new SerializableTestEntity( id1, new SerObject( "d2" ) ); - - assert getAuditReader().find( SerializableTestEntity.class, id1, 1 ).equals( ver1 ); - assert getAuditReader().find( SerializableTestEntity.class, id1, 2 ).equals( ver2 ); + public void testHistoryOfId1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + SerializableTestEntity ver1 = new SerializableTestEntity( id1, new SerObject( "d1" ) ); + SerializableTestEntity ver2 = new SerializableTestEntity( id1, new SerObject( "d2" ) ); + + assertEquals( ver1, auditReader.find( SerializableTestEntity.class, id1, 1 ) ); + assertEquals( ver2, auditReader.find( SerializableTestEntity.class, id1, 2 ) ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/dynamic/AuditedDynamicComponentsAdvancedCasesTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/dynamic/AuditedDynamicComponentsAdvancedCasesTest.java new file mode 100644 index 000000000000..ef2194727b94 --- /dev/null +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/dynamic/AuditedDynamicComponentsAdvancedCasesTest.java @@ -0,0 +1,336 @@ +/* + * SPDX-License-Identifier: Apache-2.0 + * Copyright Red Hat Inc. and Hibernate Authors + */ +package org.hibernate.orm.test.envers.integration.dynamic; + +import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.envers.query.AuditEntity; +import org.hibernate.orm.test.envers.integration.components.dynamic.AdvancedEntity; +import org.hibernate.orm.test.envers.integration.components.dynamic.Age; +import org.hibernate.orm.test.envers.integration.components.dynamic.InternalComponent; +import org.hibernate.orm.test.envers.integration.components.dynamic.ManyToManyEntity; +import org.hibernate.orm.test.envers.integration.components.dynamic.ManyToOneEntity; +import org.hibernate.orm.test.envers.integration.components.dynamic.OneToOneEntity; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.JiraKey; +import org.hibernate.testing.orm.junit.Jpa; +import org.hibernate.testing.orm.junit.Setting; +import org.junit.jupiter.api.Test; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import static org.hibernate.cfg.AvailableSettings.JPA_TRANSACTION_COMPLIANCE; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; + +/** + * @author Lukasz Zuchowski (author at zuchos dot com) + * More advanced tests for dynamic component. + */ +@JiraKey(value = "HHH-8049") +@EnversTest +@Jpa( + xmlMappings = "mappings/dynamicComponents/mapAdvanced.hbm.xml", + integrationSettings = @Setting(name = JPA_TRANSACTION_COMPLIANCE, value = "false") +) +public class AuditedDynamicComponentsAdvancedCasesTest { + + public static final String PROP_BOOLEAN = "propBoolean"; + public static final String PROP_INT = "propInt"; + 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"; + public static final String INTERNAL_SET = "internalSet"; + public static final String INTERNAL_SET_OF_COMPONENTS = "internalSetOfComponents"; + public static final String AGE_USER_TYPE = "ageUserType"; + public static final String INTERNAL_LIST_OF_USER_TYPES = "internalListOfUserTypes"; + + 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" ) ); + List list = new ArrayList(); + list.add( "One" ); + list.add( "Two" ); + list.add( "Three" ); + advancedEntity.getDynamicConfiguration().put( INTERNAL_LIST, list ); + 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 ); + Set set = new HashSet(); + set.add( "Une" ); + set.add( "Due" ); + advancedEntity.getDynamicConfiguration().put( INTERNAL_SET, set ); + Set componentSet = new HashSet(); + componentSet.add( new InternalComponent( "Ein" ) ); + componentSet.add( new InternalComponent( "Zwei" ) ); + advancedEntity.getDynamicConfiguration().put( INTERNAL_SET_OF_COMPONENTS, componentSet ); + advancedEntity.getDynamicConfiguration().put( AGE_USER_TYPE, new Age( 18 ) ); + List ages = new ArrayList(); + ages.add( new Age( 1 ) ); + ages.add( new Age( 2 ) ); + ages.add( new Age( 3 ) ); + + advancedEntity.getDynamicConfiguration().put( INTERNAL_LIST_OF_USER_TYPES, ages ); + return advancedEntity; + } + + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + //given + ManyToOneEntity manyToOne = getManyToOneEntity(); + OneToOneEntity oneToOne = getOneToOneEntity(); + ManyToManyEntity manyToManyEntity = getManyToManyEntity(); + AdvancedEntity advancedEntity = getAdvancedEntity( manyToOne, oneToOne, manyToManyEntity ); + + scope.inEntityManager( em -> { + //rev 1 + em.getTransaction().begin(); + em.persist( manyToOne ); + em.persist( oneToOne ); + em.persist( manyToManyEntity ); + em.persist( advancedEntity ); + em.getTransaction().commit(); + + //rev 2 + em.getTransaction().begin(); + InternalComponent internalComponent = (InternalComponent) advancedEntity.getDynamicConfiguration() + .get( INTERNAL_COMPONENT ); + internalComponent.setProperty( "new value" ); + em.persist( advancedEntity ); + em.getTransaction().commit(); + + //rev 3 + em.getTransaction().begin(); + List internalList = (List) advancedEntity.getDynamicConfiguration().get( INTERNAL_LIST ); + internalList.add( "four" ); + em.persist( advancedEntity ); + em.getTransaction().commit(); + + //rev 4 + em.getTransaction().begin(); + Map map = (Map) advancedEntity.getDynamicConfiguration().get( INTERNAL_MAP ); + map.put( "three", "3" ); + em.persist( advancedEntity ); + em.getTransaction().commit(); + + //rev 5 + em.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 ); + em.persist( manyToManyEntity2 ); + em.persist( advancedEntity ); + em.getTransaction().commit(); + + //rev 6 + em.getTransaction().begin(); + mapWithManyToMany = (Map) advancedEntity.getDynamicConfiguration().get( INTERNAL_MAP_WITH_MANY_TO_MANY ); + mapWithManyToMany.clear(); + em.persist( advancedEntity ); + em.getTransaction().commit(); + + //rev 7 + em.getTransaction().begin(); + Set internalComponentSet = (Set) advancedEntity.getDynamicConfiguration() + .get( INTERNAL_SET_OF_COMPONENTS ); + internalComponentSet.add( new InternalComponent( "drei" ) ); + em.persist( advancedEntity ); + em.getTransaction().commit(); + + //rev 8 + em.getTransaction().begin(); + advancedEntity.getDynamicConfiguration().put( AGE_USER_TYPE, new Age( 19 ) ); + em.persist( advancedEntity ); + em.getTransaction().commit(); + + //rev 9 + em.getTransaction().begin(); + List ages = (List) advancedEntity.getDynamicConfiguration().get( INTERNAL_LIST_OF_USER_TYPES ); + ages.add( new Age( 4 ) ); + em.persist( advancedEntity ); + em.getTransaction().commit(); + + //rev this, should not create revision + em.getTransaction().begin(); + em.getTransaction().commit(); + + //sanity check. Loaded entity should be equal to one that we created. + AdvancedEntity advancedEntityActual = em.getReference( AdvancedEntity.class, 1L ); + + assertEquals( advancedEntity, advancedEntityActual ); + } ); + } + + @Test + public void shouldMakeRevisions(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + //given & when initData + ManyToOneEntity manyToOne = getManyToOneEntity(); + OneToOneEntity oneToOne = getOneToOneEntity(); + ManyToManyEntity manyToManyEntity = getManyToManyEntity(); + AdvancedEntity advancedEntity = getAdvancedEntity( manyToOne, oneToOne, manyToManyEntity ); + + final var auditReader = AuditReaderFactory.get( em ); + + //then v1 + AdvancedEntity ver1 = auditReader.find( AdvancedEntity.class, advancedEntity.getId(), 1 ); + assertEquals( advancedEntity, ver1 ); + + //then v2 + InternalComponent internalComponent = (InternalComponent) advancedEntity.getDynamicConfiguration() + .get( INTERNAL_COMPONENT ); + internalComponent.setProperty( "new value" ); + + AdvancedEntity ver2 = auditReader.find( AdvancedEntity.class, advancedEntity.getId(), 2 ); + assertEquals( advancedEntity, ver2 ); + + //then v3 + List internalList = (List) advancedEntity.getDynamicConfiguration().get( INTERNAL_LIST ); + internalList.add( "four" ); + + AdvancedEntity ver3 = auditReader.find( AdvancedEntity.class, advancedEntity.getId(), 3 ); + assertEquals( advancedEntity, ver3 ); + + //then v4 + Map map = (Map) advancedEntity.getDynamicConfiguration().get( INTERNAL_MAP ); + map.put( "three", "3" ); + + AdvancedEntity ver4 = auditReader.find( AdvancedEntity.class, advancedEntity.getId(), 4 ); + 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 = auditReader.find( AdvancedEntity.class, advancedEntity.getId(), 5 ); + assertEquals( advancedEntity, ver5 ); + + //then v6 + mapWithManyToMany = (Map) advancedEntity.getDynamicConfiguration().get( INTERNAL_MAP_WITH_MANY_TO_MANY ); + mapWithManyToMany.clear(); + + AdvancedEntity ver6 = auditReader.find( AdvancedEntity.class, advancedEntity.getId(), 6 ); + assertEquals( advancedEntity, ver6 ); + + //then v7 + Set internalComponentSet = (Set) advancedEntity.getDynamicConfiguration() + .get( INTERNAL_SET_OF_COMPONENTS ); + internalComponentSet.add( new InternalComponent( "drei" ) ); + + AdvancedEntity ver7 = auditReader.find( AdvancedEntity.class, advancedEntity.getId(), 7 ); + assertEquals( advancedEntity, ver7 ); + + //then v8 + advancedEntity.getDynamicConfiguration().put( AGE_USER_TYPE, new Age( 19 ) ); + + AdvancedEntity ver8 = auditReader.find( AdvancedEntity.class, advancedEntity.getId(), 8 ); + assertEquals( advancedEntity, ver8 ); + + //then v9 + List ages = (List) advancedEntity.getDynamicConfiguration().get( INTERNAL_LIST_OF_USER_TYPES ); + ages.add( new Age( 4 ) ); + + AdvancedEntity ver9 = auditReader.find( AdvancedEntity.class, advancedEntity.getId(), 9 ); + assertEquals( advancedEntity, ver9 ); + } ); + } + + @Test + public void testOfQueryOnDynamicComponent(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + //given (and result of initData() + AdvancedEntity entity = getAdvancedEntity( getManyToOneEntity(), getOneToOneEntity(), + getManyToManyEntity() ); + + final var auditReader = AuditReaderFactory.get( em ); + + //when + ManyToOneEntity manyToOneEntity = (ManyToOneEntity) entity.getDynamicConfiguration() + .get( PROP_MANY_TO_ONE ); + List resultList = auditReader.createQuery() + .forEntitiesAtRevision( AdvancedEntity.class, 1 ) + .add( + AuditEntity.relatedId( "dynamicConfiguration_" + PROP_MANY_TO_ONE ) + .eq( manyToOneEntity.getId() ) + ) + .getResultList(); + + //then + assertEquals( entity, resultList.get( 0 ) ); + + //when + InternalComponent internalComponent = (InternalComponent) entity.getDynamicConfiguration() + .get( INTERNAL_COMPONENT ); + resultList = auditReader.createQuery() + .forEntitiesAtRevision( AdvancedEntity.class, 1 ) + .add( + AuditEntity.property( "dynamicConfiguration_" + INTERNAL_COMPONENT + "_property" ) + .eq( internalComponent.getProperty() ) + ) + .getResultList(); + + //then + assertEquals( entity, resultList.get( 0 ) ); + + //when & then + OneToOneEntity oneToOneEntity = (OneToOneEntity) entity.getDynamicConfiguration().get( PROP_ONE_TO_ONE ); + assertThrows( IllegalArgumentException.class, () -> + auditReader.createQuery() + .forEntitiesAtRevision( AdvancedEntity.class, 1 ) + .add( AuditEntity.property( "dynamicConfiguration_" + PROP_ONE_TO_ONE ) + .eq( oneToOneEntity ) ) + .getResultList() + ); + } ); + } + + @Test + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( + Arrays.asList( 1, 2, 3, 4, 5, 6, 7, 8, 9 ), + auditReader.getRevisions( AdvancedEntity.class, 1L ) + ); + } ); + } +} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/dynamicmodel/DynamicModelTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/dynamicmodel/DynamicModelTest.java index 9fb05da3c3a4..e25cd853d777 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/dynamicmodel/DynamicModelTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/dynamicmodel/DynamicModelTest.java @@ -4,32 +4,29 @@ */ package org.hibernate.orm.test.envers.integration.dynamicmodel; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; -import jakarta.persistence.EntityManager; - -import static org.junit.Assert.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertNotNull; /** * @author Felix Feisst (feisst dot felix at gmail dot com) */ @JiraKey(value = "HHH-8769") -public class DynamicModelTest extends BaseEnversJPAFunctionalTestCase { - - @Override - protected String[] getMappings() { - return new String[] { "mappings/dynamicmodel/dynamicModel.hbm.xml" }; - } +@EnversTest +@Jpa(xmlMappings = "mappings/dynamicmodel/dynamicModel.hbm.xml") +public class DynamicModelTest { /** * Tests that an EntityManager can be created when using a dynamic model mapping. */ @Test - public void testDynamicModelMapping() { - EntityManager entityManager = getOrCreateEntityManager(); - assertNotNull( "Expected an entity manager to be returned", entityManager ); + public void testDynamicModelMapping(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + assertNotNull( em, "Expected an entity manager to be returned" ); + } ); } - } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/entityNames/auditedEntity/ReadEntityWhitEntityNameTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/entityNames/auditedEntity/ReadEntityWhitEntityNameTest.java index 899aa04189d2..2b59972f5e48 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/entityNames/auditedEntity/ReadEntityWhitEntityNameTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/entityNames/auditedEntity/ReadEntityWhitEntityNameTest.java @@ -4,24 +4,32 @@ */ package org.hibernate.orm.test.envers.integration.entityNames.auditedEntity; -import java.io.File; -import java.net.URISyntaxException; -import java.net.URL; import java.util.List; -import org.hibernate.MappingException; import org.hibernate.dialect.H2Dialect; -import org.hibernate.orm.test.envers.AbstractOneSessionTest; -import org.hibernate.orm.test.envers.Priority; - +import org.hibernate.engine.spi.SessionImplementor; +import org.hibernate.envers.AuditReader; +import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.testing.orm.junit.DomainModel; import org.hibernate.testing.orm.junit.RequiresDialect; -import org.junit.Test; +import org.hibernate.testing.orm.junit.SessionFactory; +import org.hibernate.testing.orm.junit.SessionFactoryScope; +import org.junit.jupiter.api.MethodOrderer; +import org.junit.jupiter.api.Order; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestMethodOrder; + +import static org.assertj.core.api.Assertions.assertThat; + /** * @author Hernán Chanfreau */ @RequiresDialect(H2Dialect.class) -public class ReadEntityWhitEntityNameTest extends AbstractOneSessionTest { +@DomainModel(xmlMappings = "mappings/entityNames/auditedEntity/mappings.hbm.xml") +@SessionFactory +@TestMethodOrder(MethodOrderer.OrderAnnotation.class) +public class ReadEntityWhitEntityNameTest { private long id_pers1; private long id_pers2; @@ -33,114 +41,92 @@ public class ReadEntityWhitEntityNameTest extends AbstractOneSessionTest { private Person currentPers1; - protected void initMappings() throws MappingException, URISyntaxException { - URL url = Thread.currentThread().getContextClassLoader().getResource( - "mappings/entityNames/auditedEntity/mappings.hbm.xml" - ); - config.addFile( new File( url.toURI() ) ); - } - - @Test - @Priority(10) - public void initData() { - - initializeSession(); - - Person pers1 = new Person( "Hernan", 28 ); - Person pers2 = new Person( "Leandro", 29 ); - Person pers3 = new Person( "Barba", 30 ); - - //REV 1 - getSession().getTransaction().begin(); - getSession().persist( "Personaje", pers1 ); - id_pers1 = pers1.getId(); - getSession().getTransaction().commit(); - - //REV 2 - getSession().getTransaction().begin(); - pers1 = (Person) getSession().get( "Personaje", id_pers1 ); - pers1.setAge( 29 ); - getSession().persist( "Personaje", pers1 ); - getSession().persist( "Personaje", pers2 ); - id_pers2 = pers2.getId(); - getSession().getTransaction().commit(); - - //REV - getSession().getTransaction().begin(); - pers1 = (Person) getSession().get( "Personaje", id_pers1 ); - pers1.setName( "Hernan David" ); - pers2 = (Person) getSession().get( "Personaje", id_pers2 ); - pers2.setAge( 30 ); - getSession().persist( "Personaje", pers1 ); - getSession().persist( "Personaje", pers2 ); - getSession().persist( "Personaje", pers3 ); - id_pers3 = pers3.getId(); - getSession().getTransaction().commit(); - - getSession().getTransaction().begin(); - currentPers1 = (Person) getSession().get( "Personaje", id_pers1 ); - getSession().getTransaction().commit(); - + @Order(1) + public void testObtainEntityNameAuditedEntityWithEntityName(SessionFactoryScope scope) { + scope.inSession( session -> { + Person pers1 = new Person( "Hernan", 28 ); + Person pers2 = new Person( "Leandro", 29 ); + Person pers3 = new Person( "Barba", 30 ); + + //REV 1 + session.getTransaction().begin(); + session.persist( "Personaje", pers1 ); + id_pers1 = pers1.getId(); + session.getTransaction().commit(); + + //REV 2 + session.getTransaction().begin(); + pers1 = (Person) session.get( "Personaje", id_pers1 ); + pers1.setAge( 29 ); + session.persist( "Personaje", pers1 ); + session.persist( "Personaje", pers2 ); + id_pers2 = pers2.getId(); + session.getTransaction().commit(); + + //REV + session.getTransaction().begin(); + pers1 = (Person) session.get( "Personaje", id_pers1 ); + pers1.setName( "Hernan David" ); + pers2 = (Person) session.get( "Personaje", id_pers2 ); + pers2.setAge( 30 ); + session.persist( "Personaje", pers1 ); + session.persist( "Personaje", pers2 ); + session.persist( "Personaje", pers3 ); + id_pers3 = pers3.getId(); + session.getTransaction().commit(); + + session.getTransaction().begin(); + currentPers1 = (Person) session.get( "Personaje", id_pers1 ); + session.getTransaction().commit(); + + final var auditReader = AuditReaderFactory.get( session ); + testRetrieveRevisionsWithEntityName( auditReader ); + testRetrieveAuditedEntityWithEntityName( auditReader ); + checkEntityNames( session, auditReader ); + } ); } + public void testRetrieveRevisionsWithEntityName(AuditReader auditReader) { + List pers1Revs = auditReader.getRevisions( Person.class, "Personaje", id_pers1 ); + List pers2Revs = auditReader.getRevisions( Person.class, "Personaje", id_pers2 ); + List pers3Revs = auditReader.getRevisions( Person.class, "Personaje", id_pers3 ); - @Test - public void testRetrieveRevisionsWithEntityName() { - List pers1Revs = getAuditReader().getRevisions( Person.class, "Personaje", id_pers1 ); - List pers2Revs = getAuditReader().getRevisions( Person.class, "Personaje", id_pers2 ); - List pers3Revs = getAuditReader().getRevisions( Person.class, "Personaje", id_pers3 ); - - assert (pers1Revs.size() == 3); - assert (pers2Revs.size() == 2); - assert (pers3Revs.size() == 1); + assertThat( pers1Revs ).hasSize( 3 ); + assertThat( pers2Revs ).hasSize( 2 ); + assertThat( pers3Revs ).hasSize( 1 ); } - @Test - public void testRetrieveAuditedEntityWithEntityName() { - person1_1 = getAuditReader().find( Person.class, "Personaje", id_pers1, 1 ); - person1_2 = getAuditReader().find( Person.class, "Personaje", id_pers1, 2 ); - person1_3 = getAuditReader().find( Person.class, "Personaje", id_pers1, 3 ); - - assert (person1_1 != null); - assert (person1_2 != null); - assert (person1_3 != null); + public void testRetrieveAuditedEntityWithEntityName(AuditReader auditReader) { + person1_1 = auditReader.find( Person.class, "Personaje", id_pers1, 1 ); + person1_2 = auditReader.find( Person.class, "Personaje", id_pers1, 2 ); + person1_3 = auditReader.find( Person.class, "Personaje", id_pers1, 3 ); + assertThat( person1_1 ).isNotNull(); + assertThat( person1_2 ).isNotNull(); + assertThat( person1_3 ).isNotNull(); } - @Test - public void testObtainEntityNameAuditedEntityWithEntityName() { - person1_1 = getAuditReader().find( Person.class, "Personaje", id_pers1, 1 ); - person1_2 = getAuditReader().find( Person.class, "Personaje", id_pers1, 2 ); - person1_3 = getAuditReader().find( Person.class, "Personaje", id_pers1, 3 ); - - String currentPers1EN = getSession().getEntityName( currentPers1 ); + private void checkEntityNames(SessionImplementor session, AuditReader auditReader) { + String currentPers1EN = session.getEntityName( currentPers1 ); - String person1EN = getAuditReader().getEntityName( person1_1.getId(), 1, person1_1 ); - assert (currentPers1EN.equals( person1EN )); + String person1EN = auditReader.getEntityName( person1_1.getId(), 1, person1_1 ); + assertThat( person1EN ).isEqualTo( currentPers1EN ); - String person2EN = getAuditReader().getEntityName( person1_2.getId(), 2, person1_2 ); - assert (currentPers1EN.equals( person2EN )); - - String person3EN = getAuditReader().getEntityName( person1_3.getId(), 3, person1_3 ); - assert (currentPers1EN.equals( person3EN )); + String person2EN = auditReader.getEntityName( person1_2.getId(), 2, person1_2 ); + assertThat( person2EN ).isEqualTo( currentPers1EN ); + String person3EN = auditReader.getEntityName( person1_3.getId(), 3, person1_3 ); + assertThat( person3EN ).isEqualTo( currentPers1EN ); } @Test - public void testRetrieveAuditedEntityWithEntityNameWithNewSession() { - - // force a new session and AR - forceNewSession(); - - person1_1 = getAuditReader().find( Person.class, "Personaje", id_pers1, 1 ); - person1_2 = getAuditReader().find( Person.class, "Personaje", id_pers1, 2 ); - person1_3 = getAuditReader().find( Person.class, "Personaje", id_pers1, 3 ); - - assert (person1_1 != null); - assert (person1_2 != null); - assert (person1_3 != null); + public void testRetrieveAuditedEntityWithEntityNameWithNewSession(SessionFactoryScope scope) { + scope.inSession( session -> { + // force a new session and AR + final var auditReader = AuditReaderFactory.get( session ); + testRetrieveRevisionsWithEntityName( auditReader ); + testRetrieveAuditedEntityWithEntityName( auditReader ); + } ); } - - } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/entityNames/manyToManyAudited/ReadEntityWithAuditedManyToManyTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/entityNames/manyToManyAudited/ReadEntityWithAuditedManyToManyTest.java index d774b61c6491..919aaf5869b4 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/entityNames/manyToManyAudited/ReadEntityWithAuditedManyToManyTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/entityNames/manyToManyAudited/ReadEntityWithAuditedManyToManyTest.java @@ -4,25 +4,30 @@ */ package org.hibernate.orm.test.envers.integration.entityNames.manyToManyAudited; -import java.io.File; -import java.net.URISyntaxException; -import java.net.URL; +import org.hibernate.dialect.H2Dialect; +import org.hibernate.engine.spi.SessionImplementor; +import org.hibernate.envers.AuditReader; +import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.testing.orm.junit.DomainModel; +import org.hibernate.testing.orm.junit.RequiresDialect; +import org.hibernate.testing.orm.junit.SessionFactory; +import org.hibernate.testing.orm.junit.SessionFactoryScope; +import org.junit.jupiter.api.MethodOrderer; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestMethodOrder; + import java.util.ArrayList; import java.util.List; -import org.hibernate.MappingException; -import org.hibernate.dialect.H2Dialect; -import org.hibernate.orm.test.envers.AbstractOneSessionTest; -import org.hibernate.orm.test.envers.Priority; - -import org.hibernate.testing.orm.junit.RequiresDialect; -import org.junit.Test; /** * @author Hernán Chanfreau */ @RequiresDialect(H2Dialect.class) -public class ReadEntityWithAuditedManyToManyTest extends AbstractOneSessionTest { +@DomainModel(xmlMappings = "mappings/entityNames/manyToManyAudited/mappings.hbm.xml") +@SessionFactory +@TestMethodOrder(MethodOrderer.OrderAnnotation.class) +public class ReadEntityWithAuditedManyToManyTest { private long id_car1; private long id_car2; @@ -35,58 +40,51 @@ public class ReadEntityWithAuditedManyToManyTest extends AbstractOneSessionTest private Person person1_1; private Car car1_2; - protected void initMappings() throws MappingException, URISyntaxException { - URL url = Thread.currentThread().getContextClassLoader().getResource( - "mappings/entityNames/manyToManyAudited/mappings.hbm.xml" - ); - config.addFile( new File( url.toURI() ) ); - } - - @Test - @Priority(10) - public void initData() { - - initializeSession(); - - Person pers1 = new Person( "Hernan", 28 ); - Person pers2 = new Person( "Leandro", 29 ); - Person pers3 = new Person( "Barba", 32 ); - Person pers4 = new Person( "Camomo", 15 ); - - //REV 1 - getSession().getTransaction().begin(); - List owners = new ArrayList(); - owners.add( pers1 ); - owners.add( pers2 ); - owners.add( pers3 ); - Car car1 = new Car( 5, owners ); - - getSession().persist( car1 ); - getSession().getTransaction().commit(); - id_pers1 = pers1.getId(); - id_car1 = car1.getId(); - - owners = new ArrayList(); - owners.add( pers2 ); - owners.add( pers3 ); - owners.add( pers4 ); - Car car2 = new Car( 27, owners ); - //REV 2 - getSession().getTransaction().begin(); - Person person1 = (Person) getSession().get( "Personaje", id_pers1 ); - person1.setName( "Hernan David" ); - person1.setAge( 40 ); - getSession().persist( car1 ); - getSession().persist( car2 ); - getSession().getTransaction().commit(); - id_car2 = car2.getId(); + public void testGetEntityNameManyYoManyWithEntityName(SessionFactoryScope scope) { + scope.inSession( session -> { + Person pers1 = new Person( "Hernan", 28 ); + Person pers2 = new Person( "Leandro", 29 ); + Person pers3 = new Person( "Barba", 32 ); + Person pers4 = new Person( "Camomo", 15 ); + + //REV 1 + session.getTransaction().begin(); + List owners = new ArrayList(); + owners.add( pers1 ); + owners.add( pers2 ); + owners.add( pers3 ); + Car car1 = new Car( 5, owners ); + + session.persist( car1 ); + session.getTransaction().commit(); + id_pers1 = pers1.getId(); + id_car1 = car1.getId(); + + owners = new ArrayList(); + owners.add( pers2 ); + owners.add( pers3 ); + owners.add( pers4 ); + Car car2 = new Car( 27, owners ); + //REV 2 + session.getTransaction().begin(); + Person person1 = (Person) session.get( "Personaje", id_pers1 ); + person1.setName( "Hernan David" ); + person1.setAge( 40 ); + session.persist( car1 ); + session.persist( car2 ); + session.getTransaction().commit(); + id_car2 = car2.getId(); + + final var auditReader = AuditReaderFactory.get( session ); + loadDataOnSessionAndAuditReader( session, auditReader ); + checkEntityNames( session, auditReader ); + } ); } - private void loadDataOnSessionAndAuditReader() { - - car1_2 = getAuditReader().find( Car.class, id_car1, 2 ); - Car car2_2 = getAuditReader().find( Car.class, id_car2, 2 ); + private void loadDataOnSessionAndAuditReader(SessionImplementor session, AuditReader auditReader) { + car1_2 = auditReader.find( Car.class, id_car1, 2 ); + Car car2_2 = auditReader.find( Car.class, id_car2, 2 ); // navigate through relations to load objects for ( Person owner : car1_2.getOwners() ) { @@ -100,39 +98,29 @@ private void loadDataOnSessionAndAuditReader() { } } - car1 = (Car) getSession().get( Car.class, id_car1 ); - person1 = (Person) getSession().get( "Personaje", id_pers1 ); - person1_1 = getAuditReader().find( Person.class, "Personaje", id_pers1, 1 ); + car1 = (Car) session.get( Car.class, id_car1 ); + person1 = (Person) session.get( "Personaje", id_pers1 ); + person1_1 = auditReader.find( Person.class, "Personaje", id_pers1, 1 ); } + private void checkEntityNames(SessionImplementor session, AuditReader auditReader) { + String currPerson1EN = session.getEntityName( person1 ); + String currCar1EN = session.getEntityName( car1 ); - private void checkEntityNames() { - String currPerson1EN = getSession().getEntityName( person1 ); - String currCar1EN = getSession().getEntityName( car1 ); - - String person1_1EN = getAuditReader().getEntityName( id_pers1, 1, person1_1 ); + String person1_1EN = auditReader.getEntityName( id_pers1, 1, person1_1 ); assert (currPerson1EN.equals( person1_1EN )); - String car1_2EN = getAuditReader().getEntityName( id_car1, 2, car1_2 ); + String car1_2EN = auditReader.getEntityName( id_car1, 2, car1_2 ); assert (currCar1EN.equals( car1_2EN )); } @Test - public void testGetEntityNameManyYoManyWithEntityName() { - - loadDataOnSessionAndAuditReader(); - - checkEntityNames(); - } - - - @Test - public void testGetEntityNameManyYoManyWithEntityNameInNewSession() { - //force new session and AR - forceNewSession(); - loadDataOnSessionAndAuditReader(); - - checkEntityNames(); - + public void testGetEntityNameManyYoManyWithEntityNameInNewSession(SessionFactoryScope scope) { + scope.inSession( session -> { + //force new session and AR + final var auditReader = AuditReaderFactory.get( session ); + loadDataOnSessionAndAuditReader( session, auditReader ); + checkEntityNames( session, auditReader ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/entityNames/oneToManyAudited/ReadEntityWithAuditedCollectionTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/entityNames/oneToManyAudited/ReadEntityWithAuditedCollectionTest.java index 11a2034f8725..9ad7d754e947 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/entityNames/oneToManyAudited/ReadEntityWithAuditedCollectionTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/entityNames/oneToManyAudited/ReadEntityWithAuditedCollectionTest.java @@ -4,25 +4,32 @@ */ package org.hibernate.orm.test.envers.integration.entityNames.oneToManyAudited; -import java.io.File; -import java.net.URISyntaxException; -import java.net.URL; -import java.util.ArrayList; -import java.util.List; - -import org.hibernate.MappingException; import org.hibernate.dialect.H2Dialect; -import org.hibernate.orm.test.envers.AbstractOneSessionTest; -import org.hibernate.orm.test.envers.Priority; - +import org.hibernate.engine.spi.SessionImplementor; +import org.hibernate.envers.AuditReader; +import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.DomainModel; import org.hibernate.testing.orm.junit.RequiresDialect; -import org.junit.Test; +import org.hibernate.testing.orm.junit.SessionFactory; +import org.hibernate.testing.orm.junit.SessionFactoryScope; +import org.junit.jupiter.api.MethodOrderer; +import org.junit.jupiter.api.Order; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestMethodOrder; + +import java.util.ArrayList; +import java.util.List; /** * @author Hernán Chanfreau */ @RequiresDialect(H2Dialect.class) -public class ReadEntityWithAuditedCollectionTest extends AbstractOneSessionTest { +@EnversTest +@DomainModel(xmlMappings = "mappings/entityNames/oneToManyAudited/mappings.hbm.xml") +@SessionFactory +@TestMethodOrder(MethodOrderer.OrderAnnotation.class) +public class ReadEntityWithAuditedCollectionTest { private long id_car1; private long id_car2; @@ -35,60 +42,53 @@ public class ReadEntityWithAuditedCollectionTest extends AbstractOneSessionTest private Car car1_1; private Person person1_1; - protected void initMappings() throws MappingException, URISyntaxException { - URL url = Thread.currentThread().getContextClassLoader().getResource( - "mappings/entityNames/oneToManyAudited/mappings.hbm.xml" - ); - config.addFile( new File( url.toURI() ) ); - } - - @Test - @Priority(10) - public void initData() { - - initializeSession(); - - Person pers1 = new Person( "Hernan", 28 ); - Person pers2 = new Person( "Leandro", 29 ); - Person pers4 = new Person( "Camomo", 15 ); - - List owners = new ArrayList(); - owners.add( pers1 ); - owners.add( pers2 ); - Car car1 = new Car( 5, owners ); - - //REV 1 - getSession().getTransaction().begin(); - getSession().persist( car1 ); - getSession().getTransaction().commit(); - id_pers1 = pers1.getId(); - id_car1 = car1.getId(); - - owners = new ArrayList(); - owners.add( pers2 ); - owners.add( pers4 ); - Car car2 = new Car( 27, owners ); - //REV 2 - getSession().getTransaction().begin(); - Person person1 = (Person) getSession().get( "Personaje", id_pers1 ); - person1.setName( "Hernan David" ); - person1.setAge( 40 ); - getSession().persist( car1 ); - getSession().persist( car2 ); - getSession().getTransaction().commit(); - id_car2 = car2.getId(); - + @Order(1) + public void initData(SessionFactoryScope scope) { + scope.inSession( session -> { + Person pers1 = new Person( "Hernan", 28 ); + Person pers2 = new Person( "Leandro", 29 ); + Person pers4 = new Person( "Camomo", 15 ); + + List owners = new ArrayList(); + owners.add( pers1 ); + owners.add( pers2 ); + Car car1 = new Car( 5, owners ); + + //REV 1 + session.getTransaction().begin(); + session.persist( car1 ); + session.getTransaction().commit(); + id_pers1 = pers1.getId(); + id_car1 = car1.getId(); + + owners = new ArrayList(); + owners.add( pers2 ); + owners.add( pers4 ); + Car car2 = new Car( 27, owners ); + //REV 2 + session.getTransaction().begin(); + Person person1 = (Person) session.get( "Personaje", id_pers1 ); + person1.setName( "Hernan David" ); + person1.setAge( 40 ); + session.persist( car1 ); + session.persist( car2 ); + session.getTransaction().commit(); + id_car2 = car2.getId(); + + final var auditReader = loadDataOnSessionAndAuditReader( session ); + checkEntityNames( session, auditReader); + } ); } - private void loadDataOnSessionAndAuditReader() { - - currentCar1 = (Car) getSession().get( Car.class, id_car1 ); - currentPerson1 = (Person) getSession().get( "Personaje", id_pers1 ); + private AuditReader loadDataOnSessionAndAuditReader(SessionImplementor session) { + currentCar1 = (Car) session.get( Car.class, id_car1 ); + currentPerson1 = (Person) session.get( "Personaje", id_pers1 ); - person1_1 = getAuditReader().find( Person.class, "Personaje", id_pers1, 1 ); - car1_1 = getAuditReader().find( Car.class, id_car1, 2 ); - Car car2 = getAuditReader().find( Car.class, id_car2, 2 ); + final var auditReader = AuditReaderFactory.get( session ); + person1_1 = auditReader.find( Person.class, "Personaje", id_pers1, 1 ); + car1_1 = auditReader.find( Car.class, id_car1, 2 ); + Car car2 = auditReader.find( Car.class, id_car2, 2 ); for ( Person owner : car1_1.getOwners() ) { owner.getName(); @@ -98,37 +98,27 @@ private void loadDataOnSessionAndAuditReader() { owner.getName(); owner.getAge(); } + + return auditReader; } - private void checkEntityNames() { - String currCar1EN = getSession().getEntityName( currentCar1 ); - String currPerson1EN = getSession().getEntityName( currentPerson1 ); + private void checkEntityNames(SessionImplementor session, AuditReader auditReader) { + String currCar1EN = session.getEntityName( currentCar1 ); + String currPerson1EN = session.getEntityName( currentPerson1 ); - String car1_1EN = getAuditReader().getEntityName( id_car1, 2, car1_1 ); + String car1_1EN = auditReader.getEntityName( id_car1, 2, car1_1 ); assert (currCar1EN.equals( car1_1EN )); - String person1_1EN = getAuditReader().getEntityName( id_pers1, 1, person1_1 ); + String person1_1EN = auditReader.getEntityName( id_pers1, 1, person1_1 ); assert (currPerson1EN.equals( person1_1EN )); } @Test - public void testObtainEntityNameAuditedCollectionWithEntityName() { - - this.loadDataOnSessionAndAuditReader(); - - checkEntityNames(); - - } - - - @Test - public void testObtainEntityNameAuditedCollectionWithEntityNameInNewSession() { + public void testObtainEntityNameAuditedCollectionWithEntityNameInNewSession(SessionFactoryScope scope) { // force a new session and AR - forceNewSession(); - - loadDataOnSessionAndAuditReader(); - - checkEntityNames(); - + scope.inSession( session -> { + final var auditReader = loadDataOnSessionAndAuditReader( session ); + checkEntityNames( session, auditReader ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/entityNames/oneToManyNotAudited/ReadEntityWithAuditedCollectionTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/entityNames/oneToManyNotAudited/ReadEntityWithAuditedCollectionTest.java index e48ee0181281..9df96b8ed839 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/entityNames/oneToManyNotAudited/ReadEntityWithAuditedCollectionTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/entityNames/oneToManyNotAudited/ReadEntityWithAuditedCollectionTest.java @@ -4,25 +4,31 @@ */ package org.hibernate.orm.test.envers.integration.entityNames.oneToManyNotAudited; -import java.io.File; -import java.net.URISyntaxException; -import java.net.URL; +import org.hibernate.dialect.H2Dialect; +import org.hibernate.engine.spi.SessionImplementor; +import org.hibernate.envers.AuditReader; +import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.testing.orm.junit.DomainModel; +import org.hibernate.testing.orm.junit.RequiresDialect; +import org.hibernate.testing.orm.junit.SessionFactory; +import org.hibernate.testing.orm.junit.SessionFactoryScope; +import org.junit.jupiter.api.MethodOrderer; +import org.junit.jupiter.api.Order; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestMethodOrder; + import java.util.ArrayList; import java.util.List; -import org.hibernate.MappingException; -import org.hibernate.dialect.H2Dialect; -import org.hibernate.orm.test.envers.AbstractOneSessionTest; -import org.hibernate.orm.test.envers.Priority; - -import org.hibernate.testing.orm.junit.RequiresDialect; -import org.junit.Test; /** * @author Hernán Chanfreau */ @RequiresDialect(H2Dialect.class) -public class ReadEntityWithAuditedCollectionTest extends AbstractOneSessionTest { +@DomainModel(xmlMappings = "mappings/entityNames/oneToManyNotAudited/mappings.hbm.xml") +@SessionFactory +@TestMethodOrder(MethodOrderer.OrderAnnotation.class) +public class ReadEntityWithAuditedCollectionTest { private long id_car1; private long id_car2; @@ -34,59 +40,52 @@ public class ReadEntityWithAuditedCollectionTest extends AbstractOneSessionTest private Car car1_1; - protected void initMappings() throws MappingException, URISyntaxException { - URL url = Thread.currentThread().getContextClassLoader().getResource( - "mappings/entityNames/oneToManyNotAudited/mappings.hbm.xml" - ); - config.addFile( new File( url.toURI() ) ); - } - - @Test - @Priority(10) - public void initData() { - - initializeSession(); - - Person pers1 = new Person( "Hernan", 28 ); - Person pers2 = new Person( "Leandro", 29 ); - Person pers4 = new Person( "Camomo", 15 ); - - List owners = new ArrayList(); - owners.add( pers1 ); - owners.add( pers2 ); - Car car1 = new Car( 5, owners ); - - //REV 1 - getSession().getTransaction().begin(); - getSession().persist( car1 ); - getSession().getTransaction().commit(); - id_pers1 = pers1.getId(); - id_car1 = car1.getId(); - - owners = new ArrayList(); - owners.add( pers2 ); - owners.add( pers4 ); - Car car2 = new Car( 27, owners ); - //REV 2 - getSession().getTransaction().begin(); - Person person1 = (Person) getSession().get( "Personaje", id_pers1 ); - person1.setName( "Hernan David" ); - person1.setAge( 40 ); - getSession().persist( car1 ); - getSession().persist( car2 ); - getSession().getTransaction().commit(); - id_car2 = car2.getId(); - + @Order(1) + public void testObtainEntityNameCollectionWithEntityNameAndNotAuditedMode(SessionFactoryScope scope) { + scope.inSession( session -> { + Person pers1 = new Person( "Hernan", 28 ); + Person pers2 = new Person( "Leandro", 29 ); + Person pers4 = new Person( "Camomo", 15 ); + + List owners = new ArrayList(); + owners.add( pers1 ); + owners.add( pers2 ); + Car car1 = new Car( 5, owners ); + + //REV 1 + session.getTransaction().begin(); + session.persist( car1 ); + session.getTransaction().commit(); + id_pers1 = pers1.getId(); + id_car1 = car1.getId(); + + owners = new ArrayList(); + owners.add( pers2 ); + owners.add( pers4 ); + Car car2 = new Car( 27, owners ); + //REV 2 + session.getTransaction().begin(); + Person person1 = (Person) session.get( "Personaje", id_pers1 ); + person1.setName( "Hernan David" ); + person1.setAge( 40 ); + session.persist( car1 ); + session.persist( car2 ); + session.getTransaction().commit(); + id_car2 = car2.getId(); + + final var auditReader = AuditReaderFactory.get( session ); + loadDataOnSessionAndAuditReader( session, auditReader ); + checkEntityNames( session, auditReader ); + } ); } - private void loadDataOnSessionAndAuditReader() { - - currentCar1 = (Car) getSession().get( Car.class, id_car1 ); - currentPerson1 = (Person) getSession().get( "Personaje", id_pers1 ); + private void loadDataOnSessionAndAuditReader(SessionImplementor session, AuditReader auditReader) { + currentCar1 = (Car) session.get( Car.class, id_car1 ); + currentPerson1 = (Person) session.get( "Personaje", id_pers1 ); - car1_1 = getAuditReader().find( Car.class, id_car1, 2 ); - Car car2 = getAuditReader().find( Car.class, id_car2, 2 ); + car1_1 = auditReader.find( Car.class, id_car1, 2 ); + Car car2 = auditReader.find( Car.class, id_car2, 2 ); for ( Person owner : car1_1.getOwners() ) { owner.getName(); @@ -98,38 +97,24 @@ private void loadDataOnSessionAndAuditReader() { } } - private void checkEntityNames() { - - String currCar1EN = getSession().getEntityName( currentCar1 ); - String currPerson1EN = getSession().getEntityName( currentPerson1 ); + private void checkEntityNames(SessionImplementor session, AuditReader auditReader) { + String currCar1EN = session.getEntityName( currentCar1 ); + String currPerson1EN = session.getEntityName( currentPerson1 ); - String car1_1EN = getAuditReader().getEntityName( id_car1, 2, car1_1 ); + String car1_1EN = auditReader.getEntityName( id_car1, 2, car1_1 ); assert (currCar1EN.equals( car1_1EN )); - String person1_1EN = getSession().getEntityName( currentPerson1 ); + String person1_1EN = session.getEntityName( currentPerson1 ); assert (currPerson1EN.equals( person1_1EN )); } @Test - public void testObtainEntityNameCollectionWithEntityNameAndNotAuditedMode() { - loadDataOnSessionAndAuditReader(); - - checkEntityNames(); - - - } - - @Test - public void testObtainEntityNameCollectionWithEntityNameAndNotAuditedModeInNewSession() { - // force new session and AR - forceNewSession(); - - loadDataOnSessionAndAuditReader(); - - checkEntityNames(); - - + public void testObtainEntityNameCollectionWithEntityNameAndNotAuditedModeInNewSession(SessionFactoryScope scope) { + scope.inSession( session -> { + // force new session and AR + final var auditReader = AuditReaderFactory.get( session ); + loadDataOnSessionAndAuditReader( session, auditReader ); + checkEntityNames( session, auditReader ); + } ); } - - } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/entityNames/singleAssociatedAudited/ReadEntityAssociatedAuditedTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/entityNames/singleAssociatedAudited/ReadEntityAssociatedAuditedTest.java index 4e54e2d1df41..816fbac4f888 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/entityNames/singleAssociatedAudited/ReadEntityAssociatedAuditedTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/entityNames/singleAssociatedAudited/ReadEntityAssociatedAuditedTest.java @@ -4,23 +4,32 @@ */ package org.hibernate.orm.test.envers.integration.entityNames.singleAssociatedAudited; -import java.io.File; -import java.net.URISyntaxException; -import java.net.URL; - -import org.hibernate.MappingException; import org.hibernate.dialect.H2Dialect; -import org.hibernate.orm.test.envers.AbstractOneSessionTest; -import org.hibernate.orm.test.envers.Priority; - +import org.hibernate.engine.spi.SessionImplementor; +import org.hibernate.envers.AuditReader; +import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.DomainModel; import org.hibernate.testing.orm.junit.RequiresDialect; -import org.junit.Test; +import org.hibernate.testing.orm.junit.SessionFactory; +import org.hibernate.testing.orm.junit.SessionFactoryScope; +import org.junit.jupiter.api.MethodOrderer; +import org.junit.jupiter.api.Order; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestMethodOrder; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotEquals; /** * @author Hernán Chanfreau */ @RequiresDialect(H2Dialect.class) -public class ReadEntityAssociatedAuditedTest extends AbstractOneSessionTest { +@DomainModel(xmlMappings = "mappings/entityNames/singleAssociatedAudited/mappings.hbm.xml") +@SessionFactory +@EnversTest +@TestMethodOrder(MethodOrderer.OrderAnnotation.class) +public class ReadEntityAssociatedAuditedTest { private long id_car1; private long id_car2; @@ -35,95 +44,78 @@ public class ReadEntityAssociatedAuditedTest extends AbstractOneSessionTest { private Person person1; - protected void initMappings() throws MappingException, URISyntaxException { - URL url = Thread.currentThread().getContextClassLoader().getResource( - "mappings/entityNames/singleAssociatedAudited/mappings.hbm.xml" - ); - config.addFile( new File( url.toURI() ) ); - } - - @Test - @Priority(10) - public void initData() { - - initializeSession(); - + @Order(1) + public void testGetAssociationWithEntityName(SessionFactoryScope scope) { Person pers1 = new Person( "Hernan", 15 ); Person pers2 = new Person( "Leandro", 19 ); Car car1 = new Car( 1, pers1, null ); Car car2 = new Car( 2, pers2, null ); - //REV 1 - getSession().getTransaction().begin(); - getSession().persist( "Personaje", pers1 ); - getSession().persist( car1 ); - getSession().getTransaction().commit(); - id_car1 = car1.getId(); - id_pers1 = pers1.getId(); - - //REV 2 - getSession().getTransaction().begin(); - pers1.setAge( 50 ); - getSession().persist( "Personaje", pers1 ); - getSession().persist( "Personaje", pers2 ); - getSession().persist( car2 ); - getSession().getTransaction().commit(); - id_car2 = car2.getId(); - id_pers2 = pers2.getId(); - + scope.inSession( session -> { + final var auditReader = AuditReaderFactory.get( session ); + //REV 1 + session.getTransaction().begin(); + session.persist( "Personaje", pers1 ); + session.persist( car1 ); + session.getTransaction().commit(); + id_car1 = car1.getId(); + id_pers1 = pers1.getId(); + + //REV 2 + session.getTransaction().begin(); + pers1.setAge( 50 ); + session.persist( "Personaje", pers1 ); + session.persist( "Personaje", pers2 ); + session.persist( car2 ); + session.getTransaction().commit(); + id_car2 = car2.getId(); + id_pers2 = pers2.getId(); + + // first test with the same session and AR + loadDataOnSessionAndAuditReader( session, auditReader ); + checkEntities( session, auditReader ); + checkEntityNames( session, auditReader ); + } ); } - private void loadDataOnSessionAndAuditReader() { - currentCar1 = (Car) getSession().get( Car.class, id_car1 ); - currentPerson1 = (Person) getSession().get( "Personaje", id_pers1 ); - car1 = getAuditReader().find( Car.class, id_car1, 1 ); + private void loadDataOnSessionAndAuditReader(SessionImplementor session, AuditReader auditReader) { + currentCar1 = (Car) session.get( Car.class, id_car1 ); + currentPerson1 = (Person) session.get( "Personaje", id_pers1 ); + car1 = auditReader.find( Car.class, id_car1, 1 ); person1 = car1.getOwner(); - } - private void checkEntities() { - assert (currentPerson1.getAge() != person1.getAge()); + private void checkEntities(SessionImplementor session, AuditReader auditReader) { + assertNotEquals( currentPerson1.getAge(), person1.getAge() ); - Person person2 = (Person) getSession().get( "Personaje", id_pers2 ); - Car car2 = getAuditReader().find( Car.class, id_car2, 2 ); + Person person2 = (Person) session.get( "Personaje", id_pers2 ); + Car car2 = auditReader.find( Car.class, id_car2, 2 ); Person person2_1 = car2.getOwner(); - assert (person2.getAge() == person2_1.getAge()); + assertEquals( person2.getAge(), person2_1.getAge() ); } + private void checkEntityNames(SessionImplementor session, AuditReader auditReader) { + String currentCar1EN = session.getEntityName( currentCar1 ); - private void checkEntityNames() { - String currentCar1EN = getSession().getEntityName( currentCar1 ); + String currentPerson1EN = session.getEntityName( currentPerson1 ); - String currentPerson1EN = getSession().getEntityName( currentPerson1 ); + String car1EN = auditReader.getEntityName( id_car1, 1, car1 ); + assertEquals( currentCar1EN, car1EN ); - String car1EN = getAuditReader().getEntityName( id_car1, 1, car1 ); - assert (currentCar1EN.equals( car1EN )); - - String person1EN = getAuditReader().getEntityName( id_pers1, 1, person1 ); - assert (currentPerson1EN.equals( person1EN )); + String person1EN = auditReader.getEntityName( id_pers1, 1, person1 ); + assertEquals( currentPerson1EN, person1EN ); } @Test - public void testGetAssociationWithEntityName() { - loadDataOnSessionAndAuditReader(); - checkEntities(); - checkEntityNames(); - } - - - @Test - public void testGetAssociationWithEntityNameInNewSession() { - //force a new session and AR - forceNewSession(); - - loadDataOnSessionAndAuditReader(); - - checkEntities(); - - checkEntityNames(); - + public void testGetAssociationWithEntityNameInNewSession(SessionFactoryScope scope) { + scope.inSession( session -> { + //force a new session and AR + final var auditReader = AuditReaderFactory.get( session ); + loadDataOnSessionAndAuditReader( session, auditReader ); + checkEntities( session, auditReader ); + checkEntityNames( session, auditReader ); + } ); } - } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/entityNames/singleAssociatedAudited/SingleDomainObjectToMultipleTablesTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/entityNames/singleAssociatedAudited/SingleDomainObjectToMultipleTablesTest.java index e58f1dfc9816..175022494ede 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/entityNames/singleAssociatedAudited/SingleDomainObjectToMultipleTablesTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/entityNames/singleAssociatedAudited/SingleDomainObjectToMultipleTablesTest.java @@ -4,71 +4,64 @@ */ package org.hibernate.orm.test.envers.integration.entityNames.singleAssociatedAudited; -import java.io.File; -import java.net.URISyntaxException; -import java.net.URL; - -import org.hibernate.MappingException; import org.hibernate.dialect.H2Dialect; -import org.hibernate.orm.test.envers.AbstractOneSessionTest; -import org.hibernate.orm.test.envers.Priority; - -import org.hibernate.testing.orm.junit.JiraKey; +import org.hibernate.envers.AuditReader; +import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.DomainModel; import org.hibernate.testing.orm.junit.RequiresDialect; -import org.junit.Assert; -import org.junit.Test; +import org.hibernate.testing.orm.junit.SessionFactory; +import org.hibernate.testing.orm.junit.SessionFactoryScope; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) */ @RequiresDialect(H2Dialect.class) -public class SingleDomainObjectToMultipleTablesTest extends AbstractOneSessionTest { - private long carId = 0; - private long ownerId = 0; - private long driverId = 0; - - protected void initMappings() throws MappingException, URISyntaxException { - URL url = Thread.currentThread().getContextClassLoader().getResource( - "mappings/entityNames/singleAssociatedAudited/mappings.hbm.xml" - ); - config.addFile( new File( url.toURI() ) ); - } - +@DomainModel(xmlMappings = "mappings/entityNames/singleAssociatedAudited/mappings.hbm.xml") +@SessionFactory +@EnversTest +public class SingleDomainObjectToMultipleTablesTest { + private long carId; + private long ownerId; + private long driverId; @Test - @Priority(10) - public void initData() { - initializeSession(); + public void testSingleDomainObjectToMultipleTablesMapping(SessionFactoryScope scope) { + scope.inSession( session -> { + //REV 1 + session.getTransaction().begin(); + Person owner = new Person( "Lukasz", 25 ); + Person driver = new Person( "Kinga", 24 ); + Car car = new Car( 1, owner, driver ); + session.persist( "Personaje", owner ); + session.persist( "Driveraje", driver ); + session.persist( car ); + session.getTransaction().commit(); - //REV 1 - getSession().getTransaction().begin(); - Person owner = new Person( "Lukasz", 25 ); - Person driver = new Person( "Kinga", 24 ); - Car car = new Car( 1, owner, driver ); - getSession().persist( "Personaje", owner ); - getSession().persist( "Driveraje", driver ); - getSession().persist( car ); - getSession().getTransaction().commit(); + carId = car.getId(); + ownerId = owner.getId(); + driverId = driver.getId(); - carId = car.getId(); - ownerId = owner.getId(); - driverId = driver.getId(); + final var auditReader = AuditReaderFactory.get( session ); + doAssertions( auditReader ); + } ); } - @Test - @JiraKey(value = "HHH-4648") - public void testSingleDomainObjectToMultipleTablesMapping() { - Car carVer1 = getAuditReader().find( Car.class, carId, 1 ); - Person ownerVer1 = getAuditReader().find( Person.class, "Personaje", ownerId, 1 ); - Person driverVer1 = getAuditReader().find( Person.class, "Driveraje", driverId, 1 ); + public void doAssertions(AuditReader auditReader) { + Car carVer1 = auditReader.find( Car.class, carId, 1 ); + Person ownerVer1 = auditReader.find( Person.class, "Personaje", ownerId, 1 ); + Person driverVer1 = auditReader.find( Person.class, "Driveraje", driverId, 1 ); /* Check ids. */ - Assert.assertEquals( ownerVer1.getId(), carVer1.getOwner().getId() ); - Assert.assertEquals( driverVer1.getId(), carVer1.getDriver().getId() ); + assertEquals( ownerVer1.getId(), carVer1.getOwner().getId() ); + assertEquals( driverVer1.getId(), carVer1.getDriver().getId() ); /* Check object properties. */ - Assert.assertEquals( "Lukasz", ownerVer1.getName() ); - Assert.assertEquals( "Kinga", driverVer1.getName() ); - Assert.assertEquals( 1, carVer1.getNumber() ); + assertEquals( "Lukasz", ownerVer1.getName() ); + assertEquals( "Kinga", driverVer1.getName() ); + assertEquals( 1, carVer1.getNumber() ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/entityNames/singleAssociatedNotAudited/ReadEntityAssociatedNotAuditedTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/entityNames/singleAssociatedNotAudited/ReadEntityAssociatedNotAuditedTest.java index a4c81e613f01..524996cbfb2e 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/entityNames/singleAssociatedNotAudited/ReadEntityAssociatedNotAuditedTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/entityNames/singleAssociatedNotAudited/ReadEntityAssociatedNotAuditedTest.java @@ -4,23 +4,31 @@ */ package org.hibernate.orm.test.envers.integration.entityNames.singleAssociatedNotAudited; -import java.io.File; -import java.net.URISyntaxException; -import java.net.URL; - -import org.hibernate.MappingException; import org.hibernate.dialect.H2Dialect; -import org.hibernate.orm.test.envers.AbstractOneSessionTest; -import org.hibernate.orm.test.envers.Priority; - +import org.hibernate.engine.spi.SessionImplementor; +import org.hibernate.envers.AuditReader; +import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.DomainModel; import org.hibernate.testing.orm.junit.RequiresDialect; -import org.junit.Test; +import org.hibernate.testing.orm.junit.SessionFactory; +import org.hibernate.testing.orm.junit.SessionFactoryScope; +import org.junit.jupiter.api.MethodOrderer; +import org.junit.jupiter.api.Order; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestMethodOrder; + +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Hernán Chanfreau */ @RequiresDialect(H2Dialect.class) -public class ReadEntityAssociatedNotAuditedTest extends AbstractOneSessionTest { +@DomainModel(xmlMappings = "mappings/entityNames/singleAssociatedNotAudited/mappings.hbm.xml") +@SessionFactory +@EnversTest +@TestMethodOrder(MethodOrderer.OrderAnnotation.class) +public class ReadEntityAssociatedNotAuditedTest { private long id_car1; private long id_car2; @@ -35,97 +43,77 @@ public class ReadEntityAssociatedNotAuditedTest extends AbstractOneSessionTest { private Person currentPerson1; private Car currentCar1; - - protected void initMappings() throws MappingException, URISyntaxException { - URL url = Thread.currentThread().getContextClassLoader().getResource( - "mappings/entityNames/singleAssociatedNotAudited/mappings.hbm.xml" - ); - config.addFile( new File( url.toURI() ) ); - } - @Test - @Priority(10) - public void initData() { - - initializeSession(); - + @Order(1) + public void testObtainEntityNameAssociationWithEntityNameAndNotAuditedMode(SessionFactoryScope scope) { Person pers1 = new Person( "Hernan", 15 ); Person pers2 = new Person( "Leandro", 19 ); Car car1 = new Car( 1, pers1 ); Car car2 = new Car( 2, pers2 ); - //REV 1 - getSession().getTransaction().begin(); - getSession().persist( "Personaje", pers1 ); - getSession().persist( car1 ); - getSession().getTransaction().commit(); - id_car1 = car1.getId(); - id_pers1 = pers1.getId(); - - //REV 2 - getSession().getTransaction().begin(); - pers1.setAge( 50 ); - getSession().persist( "Personaje", pers1 ); - getSession().persist( "Personaje", pers2 ); - getSession().persist( car2 ); - getSession().getTransaction().commit(); - id_car2 = car2.getId(); - id_pers2 = pers2.getId(); - + scope.inSession( session -> { + //REV 1 + session.getTransaction().begin(); + session.persist( "Personaje", pers1 ); + session.persist( car1 ); + session.getTransaction().commit(); + id_car1 = car1.getId(); + id_pers1 = pers1.getId(); + + //REV 2 + session.getTransaction().begin(); + pers1.setAge( 50 ); + session.persist( "Personaje", pers1 ); + session.persist( "Personaje", pers2 ); + session.persist( car2 ); + session.getTransaction().commit(); + id_car2 = car2.getId(); + id_pers2 = pers2.getId(); + + final var auditReader = AuditReaderFactory.get( session ); + loadDataOnSessionAndAuditReader( session, auditReader ); + checkEntities(); + checkEntityNames( session, auditReader ); + } ); } - private void loadDataOnSessionAndAuditReader() { - currentPerson1 = (Person) getSession().get( "Personaje", id_pers1 ); - person2 = (Person) getSession().get( "Personaje", id_pers2 ); + private void loadDataOnSessionAndAuditReader(SessionImplementor session, AuditReader auditReader) { + currentPerson1 = (Person) session.get( "Personaje", id_pers1 ); + person2 = (Person) session.get( "Personaje", id_pers2 ); - currentCar1 = (Car) getSession().get( Car.class, id_car1 ); - - car1 = getAuditReader().find( Car.class, id_car1, 1 ); - car2 = getAuditReader().find( Car.class, id_car2, 2 ); + currentCar1 = (Car) session.get( Car.class, id_car1 ); + car1 = auditReader.find( Car.class, id_car1, 1 ); + car2 = auditReader.find( Car.class, id_car2, 2 ); } - private void checkEntityNames() { - - String currentCar1EN = getSession().getEntityName( currentCar1 ); - - String car1EN = getAuditReader().getEntityName( id_car1, 1, car1 ); + private void checkEntityNames(SessionImplementor session, AuditReader auditReader) { + String currentCar1EN = session.getEntityName( currentCar1 ); - assert (currentCar1EN.equals( car1EN )); + String car1EN = auditReader.getEntityName( id_car1, 1, car1 ); + assertEquals( currentCar1EN, car1EN ); } private void checkEntities() { - person1_1 = car1.getOwner(); Person person2_1 = car2.getOwner(); - assert (currentPerson1.getAge() == person1_1.getAge()); - assert (person2.getAge() == person2_1.getAge()); + assertEquals( currentPerson1.getAge(), person1_1.getAge() ); + assertEquals( person2.getAge(), person2_1.getAge() ); } @Test - public void testObtainEntityNameAssociationWithEntityNameAndNotAuditedMode() { - loadDataOnSessionAndAuditReader(); - - checkEntities(); - - checkEntityNames(); - } - - - @Test - public void testObtainEntityNameAssociationWithEntityNameAndNotAuditedModeInNewSession() { - //force a new session and AR - forceNewSession(); - - loadDataOnSessionAndAuditReader(); - - checkEntities(); - - checkEntityNames(); - + @Order(2) + public void testObtainEntityNameAssociationWithEntityNameAndNotAuditedModeInNewSession(SessionFactoryScope scope) { + scope.inSession( session -> { + //force a new session and AR + final var auditReader = AuditReaderFactory.get( session ); + loadDataOnSessionAndAuditReader( session, auditReader ); + checkEntities(); + checkEntityNames( session, auditReader ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/flush/AbstractFlushTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/flush/AbstractFlushTest.java deleted file mode 100644 index aa4fa1a48fed..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/flush/AbstractFlushTest.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * SPDX-License-Identifier: Apache-2.0 - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.flush; - -import java.io.IOException; -import jakarta.persistence.EntityManager; - -import org.hibernate.FlushMode; -import org.hibernate.Session; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.entities.StrTestEntity; - -import org.junit.Before; - -/** - * @author Adam Warski (adam at warski dot org) - */ -public abstract class AbstractFlushTest extends BaseEnversJPAFunctionalTestCase { - public abstract FlushMode getFlushMode(); - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {StrTestEntity.class}; - } - - private static Session getSession(EntityManager em) { - Object delegate = em.getDelegate(); - if ( delegate instanceof Session ) { - return (Session) delegate; - } - else if ( delegate instanceof EntityManager ) { - Object delegate2 = ((EntityManager) delegate).getDelegate(); - - if ( delegate2 instanceof Session ) { - return (Session) delegate2; - } - } - - throw new RuntimeException( "Invalid entity manager" ); - } - - @Before - public void initFlush() throws IOException { - Session session = getSession( getEntityManager() ); - session.setHibernateFlushMode( getFlushMode() ); - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/flush/CommitFlush.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/flush/CommitFlush.java index 4edc20de7bde..67e4d2b2a9e0 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/flush/CommitFlush.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/flush/CommitFlush.java @@ -6,81 +6,93 @@ import java.util.Arrays; import java.util.List; -import jakarta.persistence.EntityManager; import org.hibernate.FlushMode; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.RevisionType; import org.hibernate.envers.query.AuditEntity; -import org.hibernate.orm.test.envers.Priority; import org.hibernate.orm.test.envers.entities.StrTestEntity; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.DomainModel; import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; +import org.hibernate.testing.orm.junit.SessionFactory; +import org.hibernate.testing.orm.junit.SessionFactoryScope; +import org.junit.jupiter.api.Test; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) */ @JiraKey( value = "HHH-8243" ) -public class CommitFlush extends AbstractFlushTest { +@EnversTest +@DomainModel(annotatedClasses = {StrTestEntity.class}) +@SessionFactory +public class CommitFlush { private Integer id = null; - @Override - public FlushMode getFlushMode() { - return FlushMode.COMMIT; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); + @BeforeClassTemplate + public void initData(SessionFactoryScope scope) { + scope.inTransaction( session -> { + session.setHibernateFlushMode( FlushMode.COMMIT ); - // Revision 1 - em.getTransaction().begin(); - StrTestEntity entity = new StrTestEntity( "x" ); - em.persist( entity ); - em.getTransaction().commit(); + // Revision 1 + StrTestEntity entity = new StrTestEntity( "x" ); + session.persist( entity ); + session.flush(); - id = entity.getId(); + id = entity.getId(); + } ); // Revision 2 - em.getTransaction().begin(); - entity = em.find( StrTestEntity.class, entity.getId() ); - entity.setStr( "y" ); - entity = em.merge( entity ); - em.getTransaction().commit(); + scope.inTransaction( session -> { + session.setHibernateFlushMode( FlushMode.COMMIT ); - em.close(); + StrTestEntity entity = session.find( StrTestEntity.class, id ); + entity.setStr( "y" ); + session.merge( entity ); + } ); } @Test - public void testRevisionsCounts() { - assertEquals( Arrays.asList( 1, 2 ), getAuditReader().getRevisions( StrTestEntity.class, id ) ); + public void testRevisionsCounts(SessionFactoryScope scope) { + scope.inSession( session -> { + assertEquals( Arrays.asList( 1, 2 ), AuditReaderFactory.get( session ).getRevisions( StrTestEntity.class, id ) ); + } ); } @Test - public void testHistoryOfId() { + public void testHistoryOfId(SessionFactoryScope scope) { StrTestEntity ver1 = new StrTestEntity( "x", id ); StrTestEntity ver2 = new StrTestEntity( "y", id ); - assertEquals( ver1, getAuditReader().find( StrTestEntity.class, id, 1 ) ); - assertEquals( ver2, getAuditReader().find( StrTestEntity.class, id, 2 ) ); + scope.inSession( session -> { + var auditReader = org.hibernate.envers.AuditReaderFactory.get( session ); + assertEquals( ver1, auditReader.find( StrTestEntity.class, id, 1 ) ); + assertEquals( ver2, auditReader.find( StrTestEntity.class, id, 2 ) ); + } ); } @Test - public void testCurrent() { - assertEquals( new StrTestEntity( "y", id ), getEntityManager().find( StrTestEntity.class, id ) ); + public void testCurrent(SessionFactoryScope scope) { + scope.inSession( session -> { + assertEquals( new StrTestEntity( "y", id ), session.find( StrTestEntity.class, id ) ); + } ); } @Test - public void testRevisionTypes() { - List results = getAuditReader().createQuery() - .forRevisionsOfEntity( StrTestEntity.class, false, true ) - .add( AuditEntity.id().eq( id ) ) - .getResultList(); - - assertEquals( results.get( 0 )[2], RevisionType.ADD ); - assertEquals( results.get( 1 )[2], RevisionType.MOD ); + public void testRevisionTypes(SessionFactoryScope scope) { + scope.inSession( session -> { + var auditReader = org.hibernate.envers.AuditReaderFactory.get( session ); + List results = auditReader.createQuery() + .forRevisionsOfEntity( StrTestEntity.class, false, true ) + .add( AuditEntity.id().eq( id ) ) + .getResultList(); + + assertEquals( RevisionType.ADD, results.get( 0 )[2] ); + assertEquals( RevisionType.MOD, results.get( 1 )[2] ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/flush/CommitFlushCollectionTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/flush/CommitFlushCollectionTest.java index 8066fa8490d5..f11e3b2b6107 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/flush/CommitFlushCollectionTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/flush/CommitFlushCollectionTest.java @@ -4,7 +4,7 @@ */ package org.hibernate.orm.test.envers.integration.flush; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; import java.util.Arrays; import java.util.Date; @@ -14,7 +14,6 @@ import jakarta.persistence.CascadeType; import jakarta.persistence.Column; import jakarta.persistence.Entity; -import jakarta.persistence.EntityManager; import jakarta.persistence.FetchType; import jakarta.persistence.FlushModeType; import jakarta.persistence.GeneratedValue; @@ -27,11 +26,14 @@ import org.hibernate.envers.AuditMappedBy; import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; import org.hibernate.testing.orm.junit.JiraKeyGroup; -import org.junit.Test; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; /** * @author Chris Cranford @@ -40,7 +42,9 @@ @JiraKey(value = "HHH-12826"), @JiraKey(value = "HHH-12846") } ) -public class CommitFlushCollectionTest extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {CommitFlushCollectionTest.DocumentA.class, CommitFlushCollectionTest.DocumentLineA.class}) +public class CommitFlushCollectionTest { @MappedSuperclass public static abstract class AbstractEntity { @@ -147,17 +151,28 @@ public void setDocument(DocumentA document) { } } - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { DocumentA.class, DocumentLineA.class }; + private Long entityId1; + private Long entityId2; + + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + // This failed when using Envers. + entityId1 = persistDocument( scope, FlushModeType.COMMIT ); + + // This worked + entityId2 = persistDocument( scope, FlushModeType.AUTO ); + + // This failed + mergeDocument( scope, FlushModeType.COMMIT, entityId1 ); + + // This worked + mergeDocument( scope, FlushModeType.AUTO, entityId2 ); } - private Long persistDocument(FlushModeType flushModeType) { - final EntityManager entityManager = getOrCreateEntityManager(); - try { - entityManager.setFlushMode( flushModeType ); + private Long persistDocument(EntityManagerFactoryScope scope, FlushModeType flushModeType) { + return scope.fromTransaction( em -> { + em.setFlushMode( flushModeType ); - entityManager.getTransaction().begin(); DocumentA doc = new DocumentA(); doc.setNumber( "1" ); doc.setDate( new Date() ); @@ -166,31 +181,16 @@ private Long persistDocument(FlushModeType flushModeType) { line.setText( "line1" ); doc.addLine( line ); - entityManager.persist( doc ); - entityManager.getTransaction().commit(); - + em.persist( doc ); return doc.getId(); - } - catch ( Exception e ) { - if ( entityManager != null && entityManager.getTransaction().isActive() ) { - entityManager.getTransaction().rollback(); - } - throw e; - } - finally { - if ( entityManager != null && entityManager.isOpen() ) { - entityManager.close(); - } - } + } ); } - private void mergeDocument(FlushModeType flushModeType, Long id) { - final EntityManager entityManager = getOrCreateEntityManager(); - try { - entityManager.setFlushMode( flushModeType ); + private void mergeDocument(EntityManagerFactoryScope scope, FlushModeType flushModeType, Long id) { + scope.inTransaction( em -> { + em.setFlushMode( flushModeType ); - entityManager.getTransaction().begin(); - DocumentA doc = entityManager.find( DocumentA.class, id ); + DocumentA doc = em.find( DocumentA.class, id ); doc.setDate( new Date() ); for ( DocumentLineA line : doc.getLines() ) { line.setText( "Updated" ); @@ -200,49 +200,23 @@ private void mergeDocument(FlushModeType flushModeType, Long id) { line.setText( "line2" ); doc.addLine( line ); - entityManager.merge( doc ); - entityManager.getTransaction().commit(); - } - catch ( Exception e ) { - if ( entityManager != null && entityManager.getTransaction().isActive() ) { - entityManager.getTransaction().rollback(); - } - throw e; - } - finally { - if ( entityManager != null && entityManager.isOpen() ) { - entityManager.close(); - } - } - } - - private Long entityId1; - private Long entityId2; - - @Test - @Priority(10) - public void initData() { - // This failed when using Envers. - entityId1 = persistDocument( FlushModeType.COMMIT ); - - // This worked - entityId2 = persistDocument( FlushModeType.AUTO ); - - // This failed - mergeDocument( FlushModeType.COMMIT, entityId1 ); - - // This worked - mergeDocument( FlushModeType.AUTO, entityId2 ); + em.merge( doc ); + } ); } @Test - public void testWithFlushModeCommit() { - assertEquals( Arrays.asList( 1, 3 ), getAuditReader().getRevisions( DocumentA.class, entityId1 ) ); + public void testWithFlushModeCommit(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + assertEquals( Arrays.asList( 1, 3 ), + AuditReaderFactory.get( em ).getRevisions( DocumentA.class, entityId1 ) ); + } ); } @Test - @Priority(1) - public void testWithFlushModeAuto() { - assertEquals( Arrays.asList( 2, 4 ), getAuditReader().getRevisions( DocumentA.class, entityId2 ) ); + public void testWithFlushModeAuto(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + assertEquals( Arrays.asList( 2, 4 ), + AuditReaderFactory.get( em ).getRevisions( DocumentA.class, entityId2 ) ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/flush/CommitFlushSingleRevisionInTransaction.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/flush/CommitFlushSingleRevisionInTransaction.java index 7b75068e8d73..eb56c540328d 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/flush/CommitFlushSingleRevisionInTransaction.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/flush/CommitFlushSingleRevisionInTransaction.java @@ -4,52 +4,58 @@ */ package org.hibernate.orm.test.envers.integration.flush; -import static org.junit.Assert.assertEquals; - -import jakarta.persistence.EntityManager; - import org.hibernate.FlushMode; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.enhanced.SequenceIdRevisionEntity; import org.hibernate.envers.query.AuditEntity; import org.hibernate.orm.test.envers.entities.StrTestEntity; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.DomainModel; import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; +import org.hibernate.testing.orm.junit.SessionFactory; +import org.hibernate.testing.orm.junit.SessionFactoryScope; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Felix Feisst (feisst dot felix at gmail dot com) */ -public class CommitFlushSingleRevisionInTransaction extends AbstractFlushTest { - - @Override - public FlushMode getFlushMode() { - return FlushMode.COMMIT; - } +@EnversTest +@DomainModel(annotatedClasses = StrTestEntity.class) +@SessionFactory +public class CommitFlushSingleRevisionInTransaction { @Test @JiraKey(value = "HHH-11575") - public void testSingleRevisionInTransaction() { - EntityManager em = getEntityManager(); - - em.getTransaction().begin(); + public void testSingleRevisionInTransaction(SessionFactoryScope scope) { + scope.inSession( session -> { + session.setHibernateFlushMode( FlushMode.COMMIT ); + session.getTransaction().begin(); - SequenceIdRevisionEntity revisionBeforeFlush = getAuditReader().getCurrentRevision( SequenceIdRevisionEntity.class, true ); - int revisionNumberBeforeFlush = revisionBeforeFlush.getId(); + final var auditReader = AuditReaderFactory.get( session ); + SequenceIdRevisionEntity revisionBeforeFlush = auditReader.getCurrentRevision( + SequenceIdRevisionEntity.class, true ); + int revisionNumberBeforeFlush = revisionBeforeFlush.getId(); - em.flush(); + session.flush(); - StrTestEntity entity = new StrTestEntity( "entity" ); - em.persist( entity ); + StrTestEntity entity = new StrTestEntity( "entity" ); + session.persist( entity ); - em.getTransaction().commit(); + session.getTransaction().commit(); - SequenceIdRevisionEntity entity2Revision = (SequenceIdRevisionEntity) ( (Object[]) getAuditReader().createQuery() - .forRevisionsOfEntity( StrTestEntity.class, false, false ).add( AuditEntity.id().eq( entity.getId() ) ).getSingleResult() )[1]; + SequenceIdRevisionEntity entity2Revision = (SequenceIdRevisionEntity) ((Object[]) auditReader.createQuery() + .forRevisionsOfEntity( StrTestEntity.class, false, false ) + .add( AuditEntity.id().eq( entity.getId() ) ) + .getSingleResult())[1]; - assertEquals( - "The revision number obtained before the flush and the persisting of the entity should be the same as the revision number of the entity because there should only be one revision number per transaction", - revisionNumberBeforeFlush, - entity2Revision.getId() ); + assertEquals( + revisionNumberBeforeFlush, + entity2Revision.getId(), + "The revision number obtained before the flush and the persisting of the entity should be the same as the revision number of the entity because there should only be one revision number per transaction" + ); + } ); } - } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/flush/DoubleFlushAddDel.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/flush/DoubleFlushAddDel.java index 1f19a99234e5..89c625b593c0 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/flush/DoubleFlushAddDel.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/flush/DoubleFlushAddDel.java @@ -5,54 +5,60 @@ package org.hibernate.orm.test.envers.integration.flush; import java.util.Arrays; -import jakarta.persistence.EntityManager; import org.hibernate.FlushMode; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.orm.test.envers.entities.StrTestEntity; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.DomainModel; +import org.hibernate.testing.orm.junit.SessionFactory; +import org.hibernate.testing.orm.junit.SessionFactoryScope; +import org.junit.jupiter.api.Test; -import org.junit.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNull; /** * @author Adam Warski (adam at warski dot org) */ -public class DoubleFlushAddDel extends AbstractFlushTest { +@EnversTest +@DomainModel(annotatedClasses = {StrTestEntity.class}) +@SessionFactory +public class DoubleFlushAddDel { private Integer id; - public FlushMode getFlushMode() { - return FlushMode.MANUAL; - } - - @Test - @Priority(10) - public void initData() { + @BeforeClassTemplate + public void initData(SessionFactoryScope scope) { // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - - StrTestEntity fe = new StrTestEntity( "x" ); - em.persist( fe ); - - em.flush(); + scope.inTransaction( session -> { + session.setHibernateFlushMode( FlushMode.MANUAL ); - em.remove( em.find( StrTestEntity.class, fe.getId() ) ); + StrTestEntity fe = new StrTestEntity( "x" ); + session.persist( fe ); - em.flush(); + session.flush(); - em.getTransaction().commit(); + session.remove( session.find( StrTestEntity.class, fe.getId() ) ); - // + session.flush(); - id = fe.getId(); + id = fe.getId(); + } ); } @Test - public void testRevisionsCounts() { - assert Arrays.asList().equals( getAuditReader().getRevisions( StrTestEntity.class, id ) ); + public void testRevisionsCounts(SessionFactoryScope scope) { + scope.inSession( session -> { + assertEquals( Arrays.asList(), + AuditReaderFactory.get( session ).getRevisions( StrTestEntity.class, id ) ); + } ); } @Test - public void testHistoryOfId() { - assert getAuditReader().find( StrTestEntity.class, id, 1 ) == null; + public void testHistoryOfId(SessionFactoryScope scope) { + scope.inSession( session -> { + assertNull( AuditReaderFactory.get( session ).find( StrTestEntity.class, id, 1 ) ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/flush/DoubleFlushAddMod.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/flush/DoubleFlushAddMod.java index 566e57b0494a..03faf8d5f1e5 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/flush/DoubleFlushAddMod.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/flush/DoubleFlushAddMod.java @@ -6,84 +6,93 @@ import java.util.Arrays; import java.util.List; -import jakarta.persistence.EntityManager; import org.hibernate.FlushMode; +import org.hibernate.Session; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.RevisionType; import org.hibernate.envers.query.AuditEntity; -import org.hibernate.orm.test.envers.Priority; import org.hibernate.orm.test.envers.entities.StrTestEntity; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; -import org.junit.Test; +import org.junit.jupiter.api.Test; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Adam Warski (adam at warski dot org) */ -public class DoubleFlushAddMod extends AbstractFlushTest { +@EnversTest +@Jpa(annotatedClasses = {StrTestEntity.class}) +public class DoubleFlushAddMod { private Integer id; - public FlushMode getFlushMode() { - return FlushMode.MANUAL; - } - - @Test - @Priority(10) - public void initData() { - // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + // Set flush mode to MANUAL + scope.inTransaction( em -> { + Session session = em.unwrap( Session.class ); + session.setHibernateFlushMode( FlushMode.MANUAL ); - StrTestEntity fe = new StrTestEntity( "x" ); - em.persist( fe ); + // Revision 1 + StrTestEntity fe = new StrTestEntity( "x" ); + em.persist( fe ); - em.flush(); + em.flush(); - fe.setStr( "y" ); + fe.setStr( "y" ); - em.flush(); + em.flush(); - em.getTransaction().commit(); + id = fe.getId(); + } ); // Revision 2 - em.getTransaction().begin(); - - fe = em.find( StrTestEntity.class, fe.getId() ); + scope.inTransaction( em -> { + Session session = em.unwrap( Session.class ); + session.setHibernateFlushMode( FlushMode.MANUAL ); - fe.setStr( "z" ); - em.flush(); + StrTestEntity fe = em.find( StrTestEntity.class, id ); - em.getTransaction().commit(); - - // - - id = fe.getId(); + fe.setStr( "z" ); + em.flush(); + } ); } @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( StrTestEntity.class, id ) ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + assertEquals( Arrays.asList( 1, 2 ), + AuditReaderFactory.get( em ).getRevisions( StrTestEntity.class, id ) ); + } ); } @Test - public void testHistoryOfId() { - StrTestEntity ver1 = new StrTestEntity( "y", id ); - StrTestEntity ver2 = new StrTestEntity( "z", id ); - - assert getAuditReader().find( StrTestEntity.class, id, 1 ).equals( ver1 ); - assert getAuditReader().find( StrTestEntity.class, id, 2 ).equals( ver2 ); + public void testHistoryOfId(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + StrTestEntity ver1 = new StrTestEntity( "y", id ); + StrTestEntity ver2 = new StrTestEntity( "z", id ); + + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( ver1, auditReader.find( StrTestEntity.class, id, 1 ) ); + assertEquals( ver2, auditReader.find( StrTestEntity.class, id, 2 ) ); + } ); } @Test - public void testRevisionTypes() { - @SuppressWarnings("unchecked") List results = - getAuditReader().createQuery() - .forRevisionsOfEntity( StrTestEntity.class, false, true ) - .add( AuditEntity.id().eq( id ) ) - .getResultList(); - - assertEquals( results.get( 0 )[2], RevisionType.ADD ); - assertEquals( results.get( 1 )[2], RevisionType.MOD ); + public void testRevisionTypes(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + @SuppressWarnings("unchecked") List results = + AuditReaderFactory.get( em ).createQuery() + .forRevisionsOfEntity( StrTestEntity.class, false, true ) + .add( AuditEntity.id().eq( id ) ) + .getResultList(); + + assertEquals( RevisionType.ADD, results.get( 0 )[2] ); + assertEquals( RevisionType.MOD, results.get( 1 )[2] ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/flush/DoubleFlushModDel.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/flush/DoubleFlushModDel.java index a2c0fc387a73..5764127d35df 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/flush/DoubleFlushModDel.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/flush/DoubleFlushModDel.java @@ -6,81 +6,90 @@ import java.util.Arrays; import java.util.List; -import jakarta.persistence.EntityManager; import org.hibernate.FlushMode; +import org.hibernate.Session; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.RevisionType; import org.hibernate.envers.query.AuditEntity; -import org.hibernate.orm.test.envers.Priority; import org.hibernate.orm.test.envers.entities.StrTestEntity; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; -import org.junit.Test; +import org.junit.jupiter.api.Test; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNull; /** * @author Adam Warski (adam at warski dot org) */ -public class DoubleFlushModDel extends AbstractFlushTest { +@EnversTest +@Jpa(annotatedClasses = {StrTestEntity.class}) +public class DoubleFlushModDel { private Integer id; - public FlushMode getFlushMode() { - return FlushMode.MANUAL; - } - - @Test - @Priority(10) - public void initData() { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); + scope.inTransaction( em -> { + Session session = em.unwrap( Session.class ); + session.setHibernateFlushMode( FlushMode.MANUAL ); - StrTestEntity fe = new StrTestEntity( "x" ); - em.persist( fe ); - em.flush(); + StrTestEntity fe = new StrTestEntity( "x" ); + em.persist( fe ); + em.flush(); - em.getTransaction().commit(); + id = fe.getId(); + } ); // Revision 2 - em.getTransaction().begin(); - - fe = em.find( StrTestEntity.class, fe.getId() ); + scope.inTransaction( em -> { + Session session = em.unwrap( Session.class ); + session.setHibernateFlushMode( FlushMode.MANUAL ); - fe.setStr( "y" ); - em.flush(); + StrTestEntity fe = em.find( StrTestEntity.class, id ); - em.remove( em.find( StrTestEntity.class, fe.getId() ) ); - em.flush(); + fe.setStr( "y" ); + em.flush(); - em.getTransaction().commit(); - - // - - id = fe.getId(); + em.remove( em.find( StrTestEntity.class, id ) ); + em.flush(); + } ); } @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( StrTestEntity.class, id ) ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + assertEquals( Arrays.asList( 1, 2 ), + AuditReaderFactory.get( em ).getRevisions( StrTestEntity.class, id ) ); + } ); } @Test - public void testHistoryOfId() { - StrTestEntity ver1 = new StrTestEntity( "x", id ); - - assert getAuditReader().find( StrTestEntity.class, id, 1 ).equals( ver1 ); - assert getAuditReader().find( StrTestEntity.class, id, 2 ) == null; + public void testHistoryOfId(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + StrTestEntity ver1 = new StrTestEntity( "x", id ); + + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( ver1, auditReader.find( StrTestEntity.class, id, 1 ) ); + assertNull( auditReader.find( StrTestEntity.class, id, 2 ) ); + } ); } @Test - public void testRevisionTypes() { - @SuppressWarnings("unchecked") List results = - getAuditReader().createQuery() - .forRevisionsOfEntity( StrTestEntity.class, false, true ) - .add( AuditEntity.id().eq( id ) ) - .getResultList(); - - assertEquals( results.get( 0 )[2], RevisionType.ADD ); - assertEquals( results.get( 1 )[2], RevisionType.DEL ); + public void testRevisionTypes(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + @SuppressWarnings("unchecked") List results = + AuditReaderFactory.get( em ).createQuery() + .forRevisionsOfEntity( StrTestEntity.class, false, true ) + .add( AuditEntity.id().eq( id ) ) + .getResultList(); + + assertEquals( RevisionType.ADD, results.get( 0 )[2] ); + assertEquals( RevisionType.DEL, results.get( 1 )[2] ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/flush/DoubleFlushModMod.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/flush/DoubleFlushModMod.java index ebdb9a8074b9..017d84a41d1f 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/flush/DoubleFlushModMod.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/flush/DoubleFlushModMod.java @@ -6,82 +6,90 @@ import java.util.Arrays; import java.util.List; -import jakarta.persistence.EntityManager; import org.hibernate.FlushMode; +import org.hibernate.Session; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.RevisionType; import org.hibernate.envers.query.AuditEntity; -import org.hibernate.orm.test.envers.Priority; import org.hibernate.orm.test.envers.entities.StrTestEntity; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; -import org.junit.Test; +import org.junit.jupiter.api.Test; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Adam Warski (adam at warski dot org) */ -public class DoubleFlushModMod extends AbstractFlushTest { +@EnversTest +@Jpa(annotatedClasses = {StrTestEntity.class}) +public class DoubleFlushModMod { private Integer id; - public FlushMode getFlushMode() { - return FlushMode.MANUAL; - } - - @Test - @Priority(10) - public void initData() { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); + scope.inTransaction( em -> { + Session session = em.unwrap( Session.class ); + session.setHibernateFlushMode( FlushMode.MANUAL ); - StrTestEntity fe = new StrTestEntity( "x" ); - em.persist( fe ); - em.flush(); + StrTestEntity fe = new StrTestEntity( "x" ); + em.persist( fe ); + em.flush(); - em.getTransaction().commit(); + id = fe.getId(); + } ); // Revision 2 - em.getTransaction().begin(); - - fe = em.find( StrTestEntity.class, fe.getId() ); + scope.inTransaction( em -> { + Session session = em.unwrap( Session.class ); + session.setHibernateFlushMode( FlushMode.MANUAL ); - fe.setStr( "y" ); - em.flush(); + StrTestEntity fe = em.find( StrTestEntity.class, id ); - fe.setStr( "z" ); - em.flush(); + fe.setStr( "y" ); + em.flush(); - em.getTransaction().commit(); - - // - - id = fe.getId(); + fe.setStr( "z" ); + em.flush(); + } ); } @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( StrTestEntity.class, id ) ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + assertEquals( Arrays.asList( 1, 2 ), + AuditReaderFactory.get( em ).getRevisions( StrTestEntity.class, id ) ); + } ); } @Test - public void testHistoryOfId() { - StrTestEntity ver1 = new StrTestEntity( "x", id ); - StrTestEntity ver2 = new StrTestEntity( "z", id ); - - assert getAuditReader().find( StrTestEntity.class, id, 1 ).equals( ver1 ); - assert getAuditReader().find( StrTestEntity.class, id, 2 ).equals( ver2 ); + public void testHistoryOfId(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + StrTestEntity ver1 = new StrTestEntity( "x", id ); + StrTestEntity ver2 = new StrTestEntity( "z", id ); + + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( ver1, auditReader.find( StrTestEntity.class, id, 1 ) ); + assertEquals( ver2, auditReader.find( StrTestEntity.class, id, 2 ) ); + } ); } @Test - public void testRevisionTypes() { - @SuppressWarnings("unchecked") List results = - getAuditReader().createQuery() - .forRevisionsOfEntity( StrTestEntity.class, false, true ) - .add( AuditEntity.id().eq( id ) ) - .getResultList(); - - assertEquals( results.get( 0 )[2], RevisionType.ADD ); - assertEquals( results.get( 1 )[2], RevisionType.MOD ); + public void testRevisionTypes(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + @SuppressWarnings("unchecked") List results = + AuditReaderFactory.get( em ).createQuery() + .forRevisionsOfEntity( StrTestEntity.class, false, true ) + .add( AuditEntity.id().eq( id ) ) + .getResultList(); + + assertEquals( RevisionType.ADD, results.get( 0 )[2] ); + assertEquals( RevisionType.MOD, results.get( 1 )[2] ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/flush/ManualFlush.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/flush/ManualFlush.java index 79a052d7eefe..4683639e6b46 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/flush/ManualFlush.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/flush/ManualFlush.java @@ -6,94 +6,105 @@ import java.util.Arrays; import java.util.List; -import jakarta.persistence.EntityManager; import org.hibernate.FlushMode; +import org.hibernate.Session; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.RevisionType; import org.hibernate.envers.query.AuditEntity; -import org.hibernate.orm.test.envers.Priority; import org.hibernate.orm.test.envers.entities.StrTestEntity; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; -import org.junit.Test; +import org.junit.jupiter.api.Test; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Adam Warski (adam at warski dot org) */ -public class ManualFlush extends AbstractFlushTest { +@EnversTest +@Jpa(annotatedClasses = {StrTestEntity.class}) +public class ManualFlush { private Integer id; - public FlushMode getFlushMode() { - return FlushMode.MANUAL; - } - - @Test - @Priority(10) - public void initData() { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); + scope.inTransaction( em -> { + Session session = em.unwrap( Session.class ); + session.setHibernateFlushMode( FlushMode.MANUAL ); - StrTestEntity fe = new StrTestEntity( "x" ); - em.persist( fe ); - em.flush(); + StrTestEntity fe = new StrTestEntity( "x" ); + em.persist( fe ); + em.flush(); - em.getTransaction().commit(); + id = fe.getId(); + } ); // No revision - we change the data, but do not flush the session - em.getTransaction().begin(); - - fe = em.find( StrTestEntity.class, fe.getId() ); - fe.setStr( "y" ); + scope.inTransaction( em -> { + Session session = em.unwrap( Session.class ); + session.setHibernateFlushMode( FlushMode.MANUAL ); - em.getTransaction().commit(); + StrTestEntity fe = em.find( StrTestEntity.class, id ); + fe.setStr( "y" ); + } ); // Revision 2 - only the first change should be saved - em.getTransaction().begin(); + scope.inTransaction( em -> { + Session session = em.unwrap( Session.class ); + session.setHibernateFlushMode( FlushMode.MANUAL ); - fe = em.find( StrTestEntity.class, fe.getId() ); - fe.setStr( "z" ); - em.flush(); + StrTestEntity fe = em.find( StrTestEntity.class, id ); + fe.setStr( "z" ); + em.flush(); - fe = em.find( StrTestEntity.class, fe.getId() ); - fe.setStr( "z2" ); - - em.getTransaction().commit(); - - // - - id = fe.getId(); + fe = em.find( StrTestEntity.class, id ); + fe.setStr( "z2" ); + } ); } @Test - public void testRevisionsCounts() { - assertEquals( Arrays.asList( 1, 2 ), getAuditReader().getRevisions( StrTestEntity.class, id ) ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + assertEquals( Arrays.asList( 1, 2 ), + AuditReaderFactory.get( em ).getRevisions( StrTestEntity.class, id ) ); + } ); } @Test - public void testHistoryOfId() { - StrTestEntity ver1 = new StrTestEntity( "x", id ); - StrTestEntity ver2 = new StrTestEntity( "z", id ); - - assertEquals( ver1, getAuditReader().find( StrTestEntity.class, id, 1 ) ); - assertEquals( ver2, getAuditReader().find( StrTestEntity.class, id, 2 ) ); + public void testHistoryOfId(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + StrTestEntity ver1 = new StrTestEntity( "x", id ); + StrTestEntity ver2 = new StrTestEntity( "z", id ); + + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( ver1, auditReader.find( StrTestEntity.class, id, 1 ) ); + assertEquals( ver2, auditReader.find( StrTestEntity.class, id, 2 ) ); + } ); } @Test - public void testCurrent() { - assertEquals( new StrTestEntity( "z", id ), getEntityManager().find( StrTestEntity.class, id ) ); + public void testCurrent(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + assertEquals( new StrTestEntity( "z", id ), em.find( StrTestEntity.class, id ) ); + } ); } @Test - public void testRevisionTypes() { - @SuppressWarnings("unchecked") List results = - getAuditReader().createQuery() - .forRevisionsOfEntity( StrTestEntity.class, false, true ) - .add( AuditEntity.id().eq( id ) ) - .getResultList(); - - assertEquals( results.get( 0 )[2], RevisionType.ADD ); - assertEquals( results.get( 1 )[2], RevisionType.MOD ); + public void testRevisionTypes(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + @SuppressWarnings("unchecked") List results = + AuditReaderFactory.get( em ).createQuery() + .forRevisionsOfEntity( StrTestEntity.class, false, true ) + .add( AuditEntity.id().eq( id ) ) + .getResultList(); + + assertEquals( RevisionType.ADD, results.get( 0 )[2] ); + assertEquals( RevisionType.MOD, results.get( 1 )[2] ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/flush/ManualFlushAutoCommitDisabled.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/flush/ManualFlushAutoCommitDisabled.java index ec301dd0b535..5fab4d7270e8 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/flush/ManualFlushAutoCommitDisabled.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/flush/ManualFlushAutoCommitDisabled.java @@ -4,18 +4,19 @@ */ package org.hibernate.orm.test.envers.integration.flush; -import java.util.Map; - +import org.hibernate.cfg.JdbcSettings; +import org.hibernate.orm.test.envers.entities.StrTestEntity; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.Jpa; import org.hibernate.testing.orm.junit.JiraKey; +import org.hibernate.testing.orm.junit.Setting; /** * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) */ @JiraKey(value = "HHH-7017") +@EnversTest +@Jpa(annotatedClasses = {StrTestEntity.class}, + integrationSettings = @Setting(name = JdbcSettings.AUTOCOMMIT, value = "false")) public class ManualFlushAutoCommitDisabled extends ManualFlush { - @Override - protected void addConfigOptions(Map options) { - super.addConfigOptions( options ); - options.put( "hibernate.connection.autocommit", "false" ); - } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/generated/GeneratedColumnTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/generated/GeneratedColumnTest.java index bb2fb7b9f45b..dfdf1fb5c710 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/generated/GeneratedColumnTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/generated/GeneratedColumnTest.java @@ -4,33 +4,29 @@ */ package org.hibernate.orm.test.envers.integration.generated; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; - +import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.AssertionsKt.assertNull; /** * @author Chris Cranford */ @JiraKey(value = "HHH-10841") -public class GeneratedColumnTest extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {SimpleEntity.class}) +public class GeneratedColumnTest { private Integer entityId; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { SimpleEntity.class }; - } - - @Test - @Priority(10) - public void initData() { - EntityManager entityManager = getOrCreateEntityManager(); - try { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + scope.inEntityManager( entityManager -> { // Revision 1 SimpleEntity se = new SimpleEntity(); se.setData( "data" ); @@ -52,33 +48,35 @@ public void initData() { se = entityManager.find( SimpleEntity.class, se.getId() ); entityManager.remove( se ); entityManager.getTransaction().commit(); - - } - finally { - entityManager.close(); - } + } ); } @Test - public void getRevisionCounts() { - assertEquals( 3, getAuditReader().getRevisions( SimpleEntity.class, entityId ).size() ); + public void getRevisionCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( 3, auditReader.getRevisions( SimpleEntity.class, entityId ).size() ); + } ); } @Test - public void testRevisionHistory() { - // revision - insertion - final SimpleEntity rev1 = getAuditReader().find( SimpleEntity.class, entityId, 1 ); - assertEquals( "data", rev1.getData() ); - assertEquals( 1, rev1.getCaseNumberInsert() ); + public void testRevisionHistory(EntityManagerFactoryScope scope) { + scope.inEntityManager( entityManager -> { + final var auditReader = AuditReaderFactory.get( entityManager ); + + // revision - insertion + final SimpleEntity rev1 = auditReader.find( SimpleEntity.class, entityId, 1 ); + assertEquals( "data", rev1.getData() ); + assertEquals( 1, rev1.getCaseNumberInsert() ); - // revision - update - final SimpleEntity rev2 = getAuditReader().find( SimpleEntity.class, entityId, 2 ); - assertEquals( "data2", rev2.getData() ); - assertEquals( 1, rev2.getCaseNumberInsert() ); + // revision - update + final SimpleEntity rev2 = auditReader.find( SimpleEntity.class, entityId, 2 ); + assertEquals( "data2", rev2.getData() ); + assertEquals( 1, rev2.getCaseNumberInsert() ); - // revision - deletion - final SimpleEntity rev3 = getAuditReader().find( SimpleEntity.class, entityId, 3 ); - assertEquals( "data2", rev2.getData() ); - assertEquals( 1, rev2.getCaseNumberInsert() ); + // revision - deletion + final SimpleEntity rev3 = auditReader.find( SimpleEntity.class, entityId, 3 ); + assertNull( rev3 ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/hashcode/ChangingHashcode.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/hashcode/ChangingHashcode.java index 26e634575eb3..f1600b4086f1 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/hashcode/ChangingHashcode.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/hashcode/ChangingHashcode.java @@ -5,92 +5,87 @@ package org.hibernate.orm.test.envers.integration.hashcode; import java.util.Arrays; -import jakarta.persistence.EntityManager; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.orm.test.envers.tools.TestTools; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; -import org.junit.Test; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNull; /** * @author Adam Warski (adam at warski dot org) */ -public class ChangingHashcode extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {WikiPage.class, WikiImage.class}) +public class ChangingHashcode { private Long pageId; private Long imageId; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {WikiPage.class, WikiImage.class}; - } - - @Test - @Priority(10) - public void initData() { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - - WikiPage page = new WikiPage( "title", "content" ); - em.persist( page ); - - em.getTransaction().commit(); + scope.inTransaction( em -> { + WikiPage page = new WikiPage( "title", "content" ); + em.persist( page ); + pageId = page.getId(); + } ); // Revision 2 - em = getEntityManager(); - em.getTransaction().begin(); - - WikiImage image = new WikiImage( "name1" ); - em.persist( image ); + scope.inTransaction( em -> { + WikiImage image = new WikiImage( "name1" ); + em.persist( image ); - page = em.find( WikiPage.class, page.getId() ); - page.getImages().add( image ); + WikiPage page = em.find( WikiPage.class, pageId ); + page.getImages().add( image ); - em.getTransaction().commit(); + imageId = image.getId(); + } ); // Revision 3 - em = getEntityManager(); - em.getTransaction().begin(); - - image = em.find( WikiImage.class, image.getId() ); - image.setName( "name2" ); - - em.getTransaction().commit(); - - pageId = page.getId(); - imageId = image.getId(); + scope.inTransaction( em -> { + WikiImage image = em.find( WikiImage.class, imageId ); + image.setName( "name2" ); + } ); } @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( WikiPage.class, pageId ) ); - assert Arrays.asList( 2, 3 ).equals( getAuditReader().getRevisions( WikiImage.class, imageId ) ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1, 2 ), auditReader.getRevisions( WikiPage.class, pageId ) ); + assertEquals( Arrays.asList( 2, 3 ), auditReader.getRevisions( WikiImage.class, imageId ) ); + } ); } @Test - public void testHistoryOfImage() { - assert getAuditReader().find( WikiImage.class, imageId, 1 ) == null; - assert getAuditReader().find( WikiImage.class, imageId, 2 ).equals( new WikiImage( "name1" ) ); - assert getAuditReader().find( WikiImage.class, imageId, 3 ).equals( new WikiImage( "name2" ) ); + public void testHistoryOfImage(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertNull( auditReader.find( WikiImage.class, imageId, 1 ) ); + assertEquals( new WikiImage( "name1" ), auditReader.find( WikiImage.class, imageId, 2 ) ); + assertEquals( new WikiImage( "name2" ), auditReader.find( WikiImage.class, imageId, 3 ) ); + } ); } @Test - public void testHistoryOfPage() { - assert getAuditReader().find( WikiPage.class, pageId, 1 ).getImages().size() == 0; - assert getAuditReader().find( WikiPage.class, pageId, 2 ).getImages().equals( - TestTools.makeSet( - new WikiImage( - "name1" - ) - ) - ); - assert getAuditReader().find( WikiPage.class, pageId, 3 ).getImages().equals( - TestTools.makeSet( - new WikiImage( - "name2" - ) - ) - ); + public void testHistoryOfPage(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( 0, auditReader.find( WikiPage.class, pageId, 1 ).getImages().size() ); + assertEquals( + TestTools.makeSet( new WikiImage( "name1" ) ), + auditReader.find( WikiPage.class, pageId, 2 ).getImages() + ); + assertEquals( + TestTools.makeSet( new WikiImage( "name2" ) ), + auditReader.find( WikiPage.class, pageId, 3 ).getImages() + ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/hashcode/ComponentCollectionHashcodeChangeTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/hashcode/ComponentCollectionHashcodeChangeTest.java index e37fb52cc13c..ae9652a44a62 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/hashcode/ComponentCollectionHashcodeChangeTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/hashcode/ComponentCollectionHashcodeChangeTest.java @@ -11,36 +11,34 @@ import jakarta.persistence.ElementCollection; import jakarta.persistence.Embeddable; import jakarta.persistence.Entity; -import jakarta.persistence.EntityManager; import jakarta.persistence.GeneratedValue; import jakarta.persistence.Id; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; import org.hibernate.orm.test.envers.tools.TestTools; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; +import org.hibernate.testing.orm.junit.Jpa; -import static org.junit.Assert.assertEquals; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Chris Cranford */ @JiraKey(value = "HHH-11063") -public class ComponentCollectionHashcodeChangeTest extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {ComponentCollectionHashcodeChangeTest.ComponentEntity.class, ComponentCollectionHashcodeChangeTest.Component.class}) +public class ComponentCollectionHashcodeChangeTest { private Integer id; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { ComponentEntity.class, Component.class }; - } - - @Test - @Priority(10) - public void initData() { - EntityManager entityManager = getEntityManager(); - try { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + scope.inEntityManager( entityManager -> { // Revision 1 - Create entity with 2 components entityManager.getTransaction().begin(); Component component1 = new Component(); @@ -72,53 +70,52 @@ public void initData() { entity.getComponents().add( component3 ); entityManager.merge( entity ); entityManager.getTransaction().commit(); - } - catch ( Exception e ) { - if ( entityManager.getTransaction().isActive() ) { - entityManager.getTransaction().rollback(); - } - } - finally { - entityManager.close(); - } + } ); } @Test - public void testRevisionCounts() { - assertEquals( Arrays.asList( 1, 2, 3 ), getAuditReader().getRevisions( ComponentEntity.class, id ) ); + public void testRevisionCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1, 2, 3 ), auditReader.getRevisions( ComponentEntity.class, id ) ); + } ); } @Test - public void testCollectionHistory() { - final ComponentEntity rev1 = getAuditReader().find( ComponentEntity.class, id, 1 ); - assertEquals( 2, rev1.getComponents().size() ); - assertEquals( - TestTools.makeSet( - new Component( "User1", "Test1" ), - new Component( "User2", "Test2" ) - ), - rev1.getComponents() - ); - - final ComponentEntity rev2 = getAuditReader().find( ComponentEntity.class, id, 2 ); - assertEquals( 2, rev2.getComponents().size() ); - assertEquals( - TestTools.makeSet( - new Component( "User1-Inline", "Test1" ), - new Component( "User2", "Test2" ) - ), - rev2.getComponents() - ); - - final ComponentEntity rev3 = getAuditReader().find( ComponentEntity.class, id, 3 ); - assertEquals( 2, rev3.getComponents().size() ); - assertEquals( - TestTools.makeSet( - new Component( "User1-Inline", "Test1" ), - new Component( "User2", "Test3" ) - ), - rev3.getComponents() - ); + public void testCollectionHistory(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + + final ComponentEntity rev1 = auditReader.find( ComponentEntity.class, id, 1 ); + assertEquals( 2, rev1.getComponents().size() ); + assertEquals( + TestTools.makeSet( + new Component( "User1", "Test1" ), + new Component( "User2", "Test2" ) + ), + rev1.getComponents() + ); + + final ComponentEntity rev2 = auditReader.find( ComponentEntity.class, id, 2 ); + assertEquals( 2, rev2.getComponents().size() ); + assertEquals( + TestTools.makeSet( + new Component( "User1-Inline", "Test1" ), + new Component( "User2", "Test2" ) + ), + rev2.getComponents() + ); + + final ComponentEntity rev3 = auditReader.find( ComponentEntity.class, id, 3 ); + assertEquals( 2, rev3.getComponents().size() ); + assertEquals( + TestTools.makeSet( + new Component( "User1-Inline", "Test1" ), + new Component( "User2", "Test3" ) + ), + rev3.getComponents() + ); + } ); } @Entity(name = "ComponentEntity") diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/hashcode/ListHashcodeChangeTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/hashcode/ListHashcodeChangeTest.java index 276444640313..75046b397810 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/hashcode/ListHashcodeChangeTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/hashcode/ListHashcodeChangeTest.java @@ -4,23 +4,8 @@ */ package org.hibernate.orm.test.envers.integration.hashcode; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Objects; - -import org.hibernate.envers.AuditReader; -import org.hibernate.envers.Audited; -import org.hibernate.envers.NotAudited; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; - -import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; - import jakarta.persistence.CascadeType; import jakarta.persistence.Entity; -import jakarta.persistence.EntityManager; import jakarta.persistence.FetchType; import jakarta.persistence.GeneratedValue; import jakarta.persistence.Id; @@ -28,100 +13,73 @@ import jakarta.persistence.JoinTable; import jakarta.persistence.ManyToOne; import jakarta.persistence.OneToMany; +import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.envers.Audited; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.JiraKey; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.Objects; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; /** * @author Chris Cranford */ @JiraKey(value = "HHH-11063") -public class ListHashcodeChangeTest extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {ListHashcodeChangeTest.Author.class, ListHashcodeChangeTest.Book.class}) +public class ListHashcodeChangeTest { private Integer authorId; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { Author.class, Book.class }; - } - - @Test - @Priority(10) - public void initData() { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Revision 1 - EntityManager entityManager = getEntityManager(); - try { - entityManager.getTransaction().begin(); + scope.inTransaction( em -> { final Author author = new Author(); author.setFirstName( "TestFirstName" ); author.setLastName( "lastName" ); author.addBook( createBook1() ); author.addBook( createBook2() ); - entityManager.persist( author ); + em.persist( author ); authorId = author.getId(); - entityManager.getTransaction().commit(); - } - catch ( Exception e ) { - if ( entityManager.getTransaction().isActive() ) { - entityManager.getTransaction().rollback(); - } - } - finally { - entityManager.close(); - } + } ); + // Revision 2 // Removes all books and re-adds original 2 plus one new book - entityManager = getEntityManager(); - try { - entityManager.getTransaction().begin(); - final Author author = entityManager.find( Author.class, authorId ); + scope.inTransaction( em -> { + final Author author = em.find( Author.class, authorId ); author.removeAllBooks(); author.addBook( createBook1() ); author.addBook( createBook2() ); author.addBook( createBook3() ); - entityManager.merge( author ); - entityManager.getTransaction().commit(); - } - catch ( Exception e ) { - if( entityManager.getTransaction().isActive() ) { - entityManager.getTransaction().rollback(); - } - } - finally { - entityManager.close(); - } - } - - @Test - public void testRevisionCounts() { - + em.merge( author ); + } ); } @Test // tests that Author has 3 books. - public void testAuthorState() { - EntityManager entityManager = getEntityManager(); - try { - final Author author = entityManager.find( Author.class, authorId ); + public void testAuthorState(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final Author author = em.find( Author.class, authorId ); assertNotNull( author ); assertEquals( 3, author.getBooks().size() ); - } - catch ( Exception e ) { - if ( entityManager.getTransaction().isActive() ) { - entityManager.getTransaction().rollback(); - } - } - finally { - entityManager.close(); - } + } ); } @Test - public void testAuthorLastRevision() { + public void testAuthorLastRevision(EntityManagerFactoryScope scope) { // tests that Author has 3 books, Book1, Book2, and Book3. // where Book1 and Book2 were removed and re-added with the addition of Book3. - EntityManager entityManager = getEntityManager(); - try { - final AuditReader reader = getAuditReader(); + scope.inEntityManager( entityManager -> { + final var reader = AuditReaderFactory.get( entityManager ); final List revisions = reader.getRevisions( Author.class, authorId ); final Number lastRevision = revisions.get( revisions.size() - 1 ); @@ -131,15 +89,7 @@ public void testAuthorLastRevision() { assertNotNull( author ); assertEquals( 3, author.getBooks().size() ); - } - catch ( Exception e ) { - if ( entityManager.getTransaction().isActive() ) { - entityManager.getTransaction().rollback(); - } - } - finally { - entityManager.close(); - } + } ); } private Book createBook1() { @@ -225,7 +175,7 @@ public Book getBook(String title) { } public void removeBook(String title) { - for( Iterator it = books.iterator(); it.hasNext(); ) { + for ( Iterator it = books.iterator(); it.hasNext(); ) { Book book = it.next(); if ( title.equals( title ) ) { it.remove(); @@ -236,10 +186,10 @@ public void removeBook(String title) { @Override public String toString() { return "Author{" + - "id=" + id + - ", firstName='" + firstName + '\'' + - ", lastName='" + lastName + '\'' + - '}'; + "id=" + id + + ", firstName='" + firstName + '\'' + + ", lastName='" + lastName + '\'' + + '}'; } } @@ -255,8 +205,7 @@ public static class Book { @ManyToOne(fetch = FetchType.LAZY) @JoinTable(name = "author_book", joinColumns = @JoinColumn(name = "book_id"), - inverseJoinColumns = @JoinColumn(name="author_id",nullable = false)) - @NotAudited + inverseJoinColumns = @JoinColumn(name = "author_id", nullable = false)) private Author author; public Integer getId() { @@ -303,10 +252,10 @@ public boolean equals(Object object) { @Override public String toString() { return "Book{" + - "id=" + id + - ", title='" + title + '\'' + - ", author=" + author + - '}'; + "id=" + id + + ", title='" + title + '\'' + + ", author=" + author + + '}'; } } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/hashcode/SetHashcodeChangeTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/hashcode/SetHashcodeChangeTest.java index 3568f43f472f..2febc14cedd4 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/hashcode/SetHashcodeChangeTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/hashcode/SetHashcodeChangeTest.java @@ -10,18 +10,18 @@ import java.util.Objects; import java.util.Set; -import org.hibernate.envers.AuditReader; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.Audited; -import org.hibernate.envers.NotAudited; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; - +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; +import org.hibernate.testing.orm.junit.Jpa; + +import org.junit.jupiter.api.Test; import jakarta.persistence.CascadeType; import jakarta.persistence.Entity; -import jakarta.persistence.EntityManager; import jakarta.persistence.FetchType; import jakarta.persistence.GeneratedValue; import jakarta.persistence.Id; @@ -30,117 +30,69 @@ import jakarta.persistence.ManyToOne; import jakarta.persistence.OneToMany; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; /** * @author Chris Cranford */ @JiraKey(value = "HHH-11063") -public class SetHashcodeChangeTest extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {SetHashcodeChangeTest.Author.class, SetHashcodeChangeTest.Book.class}) +public class SetHashcodeChangeTest { private Integer authorId; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { Author.class, Book.class }; - } - - @Test - @Priority(10) - public void initData() { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Revision 1 - EntityManager entityManager = getEntityManager(); - try { - entityManager.getTransaction().begin(); + scope.inTransaction( em -> { final Author author = new Author(); author.setFirstName( "TestFirstName" ); author.setLastName( "lastName" ); author.addBook( createBook1() ); author.addBook( createBook2() ); - entityManager.persist( author ); + em.persist( author ); authorId = author.getId(); - entityManager.getTransaction().commit(); - } - catch ( Exception e ) { - if ( entityManager.getTransaction().isActive() ) { - entityManager.getTransaction().rollback(); - } - } - finally { - entityManager.close(); - } + } ); + // Revision 2 // Removes all books and re-adds original 2 plus one new book - entityManager = getEntityManager(); - try { - entityManager.getTransaction().begin(); - final Author author = entityManager.find( Author.class, authorId ); + scope.inTransaction( em -> { + final Author author = em.find( Author.class, authorId ); author.removeAllBooks(); author.addBook( createBook1() ); author.addBook( createBook2() ); author.addBook( createBook3() ); - entityManager.merge( author ); - entityManager.getTransaction().commit(); - } - catch ( Exception e ) { - if( entityManager.getTransaction().isActive() ) { - entityManager.getTransaction().rollback(); - } - } - finally { - entityManager.close(); - } - } - - @Test - public void testRevisionCounts() { - + em.merge( author ); + } ); } @Test // tests that Author has 3 books. - public void testAuthorState() { - EntityManager entityManager = getEntityManager(); - try { - final Author author = entityManager.find( Author.class, authorId ); + public void testAuthorState(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final Author author = em.find( Author.class, authorId ); assertNotNull( author ); assertEquals( 3, author.getBooks().size() ); - } - catch ( Exception e ) { - if ( entityManager.getTransaction().isActive() ) { - entityManager.getTransaction().rollback(); - } - } - finally { - entityManager.close(); - } + } ); } @Test - public void testAuthorLastRevision() { + public void testAuthorLastRevision(EntityManagerFactoryScope scope) { // tests that Author has 3 books, Book1, Book2, and Book3. // where Book1 and Book2 were removed and re-added with the addition of Book3. - EntityManager entityManager = getEntityManager(); - try { - final AuditReader reader = getAuditReader(); - final List revisions = reader.getRevisions( Author.class, authorId ); + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + final List revisions = auditReader.getRevisions( Author.class, authorId ); final Number lastRevision = revisions.get( revisions.size() - 1 ); - final Author author = (Author) reader.createQuery() + final Author author = (Author) auditReader.createQuery() .forEntitiesAtRevision( Author.class, lastRevision ) .getSingleResult(); assertNotNull( author ); assertEquals( 3, author.getBooks().size() ); - } - catch ( Exception e ) { - if ( entityManager.getTransaction().isActive() ) { - entityManager.getTransaction().rollback(); - } - } - finally { - entityManager.close(); - } + } ); } private Book createBook1() { @@ -256,7 +208,6 @@ public static class Book { @ManyToOne(fetch = FetchType.LAZY) @JoinTable(name = "author_book", joinColumns = @JoinColumn(name = "book_id"), inverseJoinColumns = @JoinColumn(name="author_id",nullable = false)) - @NotAudited private Author author; public Integer getId() { diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/hbm/allAudited/joined/JoinedAllAuditedTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/hbm/allAudited/joined/JoinedAllAuditedTest.java deleted file mode 100644 index 867725dd335e..000000000000 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/hbm/allAudited/joined/JoinedAllAuditedTest.java +++ /dev/null @@ -1,17 +0,0 @@ -/* - * SPDX-License-Identifier: Apache-2.0 - * Copyright Red Hat Inc. and Hibernate Authors - */ -package org.hibernate.orm.test.envers.integration.hbm.allAudited.joined; - -import org.hibernate.orm.test.envers.integration.interfaces.hbm.allAudited.AbstractAllAuditedTest; - -/** - * @author Hern�n Chanfreau - */ -public class JoinedAllAuditedTest extends AbstractAllAuditedTest { - @Override - protected String[] getMappings() { - return new String[] {"mappings/interfaces/joinedAllAuditedMappings.hbm.xml"}; - } -} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/CompositeDateId.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/CompositeDateId.java index 15e2c815714f..848a13b1b285 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/CompositeDateId.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/CompositeDateId.java @@ -6,62 +6,58 @@ import java.util.Arrays; import java.util.Date; -import jakarta.persistence.EntityManager; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.orm.test.envers.entities.ids.CompositeDateIdTestEntity; import org.hibernate.orm.test.envers.entities.ids.DateEmbId; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; -import org.junit.Test; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Adam Warski (adam at warski dot org) */ -public class CompositeDateId extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {CompositeDateIdTestEntity.class}) +public class CompositeDateId { private DateEmbId id1; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {CompositeDateIdTestEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); + scope.inTransaction( em -> { + CompositeDateIdTestEntity dite = new CompositeDateIdTestEntity( new DateEmbId( new Date(), new Date() ), "x" ); + em.persist( dite ); - CompositeDateIdTestEntity dite = new CompositeDateIdTestEntity( new DateEmbId( new Date(), new Date() ), "x" ); - em.persist( dite ); - - id1 = dite.getId(); - - em.getTransaction().commit(); + id1 = dite.getId(); + } ); // Revision 2 - em = getEntityManager(); - em.getTransaction().begin(); - - dite = em.find( CompositeDateIdTestEntity.class, id1 ); - dite.setStr1( "y" ); - - em.getTransaction().commit(); + scope.inTransaction( em -> { + CompositeDateIdTestEntity dite = em.find( CompositeDateIdTestEntity.class, id1 ); + dite.setStr1( "y" ); + } ); } @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( CompositeDateIdTestEntity.class, id1 ) ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1, 2 ), auditReader.getRevisions( CompositeDateIdTestEntity.class, id1 ) ); + } ); } @Test - public void testHistoryOfId1() { - CompositeDateIdTestEntity ver1 = new CompositeDateIdTestEntity( id1, "x" ); - CompositeDateIdTestEntity ver2 = new CompositeDateIdTestEntity( id1, "y" ); - - assert getAuditReader().find( CompositeDateIdTestEntity.class, id1, 1 ).getStr1().equals( "x" ); - assert getAuditReader().find( CompositeDateIdTestEntity.class, id1, 2 ).getStr1().equals( "y" ); + public void testHistoryOfId1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( "x", auditReader.find( CompositeDateIdTestEntity.class, id1, 1 ).getStr1() ); + assertEquals( "y", auditReader.find( CompositeDateIdTestEntity.class, id1, 2 ).getStr1() ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/CompositeIds.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/CompositeIds.java index f71203774e0b..84827f5a1589 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/CompositeIds.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/CompositeIds.java @@ -5,10 +5,8 @@ package org.hibernate.orm.test.envers.integration.ids; import java.util.Arrays; -import jakarta.persistence.EntityManager; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.orm.test.envers.entities.ids.CustomEnum; import org.hibernate.orm.test.envers.entities.ids.EmbId; import org.hibernate.orm.test.envers.entities.ids.EmbIdTestEntity; @@ -16,13 +14,22 @@ import org.hibernate.orm.test.envers.entities.ids.EmbIdWithCustomTypeTestEntity; import org.hibernate.orm.test.envers.entities.ids.MulId; import org.hibernate.orm.test.envers.entities.ids.MulIdTestEntity; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; -import org.junit.Test; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNull; /** * @author Adam Warski (adam at warski dot org) */ -public class CompositeIds extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {EmbIdTestEntity.class, MulIdTestEntity.class, EmbIdWithCustomTypeTestEntity.class}) +public class CompositeIds { private EmbId id1; private EmbId id2; private MulId id3; @@ -30,14 +37,8 @@ public class CompositeIds extends BaseEnversJPAFunctionalTestCase { private EmbIdWithCustomType id5; private EmbIdWithCustomType id6; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {EmbIdTestEntity.class, MulIdTestEntity.class, EmbIdWithCustomTypeTestEntity.class}; - } - - @Test - @Priority(10) - public void initData() { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { id1 = new EmbId( 1, 2 ); id2 = new EmbId( 10, 20 ); id3 = new MulId( 100, 101 ); @@ -46,171 +47,161 @@ public void initData() { id6 = new EmbIdWithCustomType( 27, CustomEnum.YES ); // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - - em.persist( new EmbIdTestEntity( id1, "x" ) ); - em.persist( new MulIdTestEntity( id3.getId1(), id3.getId2(), "a" ) ); - em.persist( new EmbIdWithCustomTypeTestEntity( id5, "c" ) ); - - em.getTransaction().commit(); + scope.inTransaction( em -> { + em.persist( new EmbIdTestEntity( id1, "x" ) ); + em.persist( new MulIdTestEntity( id3.getId1(), id3.getId2(), "a" ) ); + em.persist( new EmbIdWithCustomTypeTestEntity( id5, "c" ) ); + } ); // Revision 2 - em = getEntityManager(); - em.getTransaction().begin(); - - em.persist( new EmbIdTestEntity( id2, "y" ) ); - em.persist( new MulIdTestEntity( id4.getId1(), id4.getId2(), "b" ) ); - em.persist( new EmbIdWithCustomTypeTestEntity( id6, "d" ) ); - - em.getTransaction().commit(); + scope.inTransaction( em -> { + em.persist( new EmbIdTestEntity( id2, "y" ) ); + em.persist( new MulIdTestEntity( id4.getId1(), id4.getId2(), "b" ) ); + em.persist( new EmbIdWithCustomTypeTestEntity( id6, "d" ) ); + } ); // Revision 3 - em = getEntityManager(); - em.getTransaction().begin(); - - EmbIdTestEntity ete1 = em.find( EmbIdTestEntity.class, id1 ); - EmbIdTestEntity ete2 = em.find( EmbIdTestEntity.class, id2 ); - MulIdTestEntity mte3 = em.find( MulIdTestEntity.class, id3 ); - MulIdTestEntity mte4 = em.find( MulIdTestEntity.class, id4 ); - EmbIdWithCustomTypeTestEntity cte5 = em.find( EmbIdWithCustomTypeTestEntity.class, id5 ); - EmbIdWithCustomTypeTestEntity cte6 = em.find( EmbIdWithCustomTypeTestEntity.class, id6 ); - - ete1.setStr1( "x2" ); - ete2.setStr1( "y2" ); - mte3.setStr1( "a2" ); - mte4.setStr1( "b2" ); - cte5.setStr1( "c2" ); - cte6.setStr1( "d2" ); - - em.getTransaction().commit(); + scope.inTransaction( em -> { + EmbIdTestEntity ete1 = em.find( EmbIdTestEntity.class, id1 ); + EmbIdTestEntity ete2 = em.find( EmbIdTestEntity.class, id2 ); + MulIdTestEntity mte3 = em.find( MulIdTestEntity.class, id3 ); + MulIdTestEntity mte4 = em.find( MulIdTestEntity.class, id4 ); + EmbIdWithCustomTypeTestEntity cte5 = em.find( EmbIdWithCustomTypeTestEntity.class, id5 ); + EmbIdWithCustomTypeTestEntity cte6 = em.find( EmbIdWithCustomTypeTestEntity.class, id6 ); + + ete1.setStr1( "x2" ); + ete2.setStr1( "y2" ); + mte3.setStr1( "a2" ); + mte4.setStr1( "b2" ); + cte5.setStr1( "c2" ); + cte6.setStr1( "d2" ); + } ); // Revision 4 - em = getEntityManager(); - em.getTransaction().begin(); + scope.inTransaction( em -> { + EmbIdTestEntity ete1 = em.find( EmbIdTestEntity.class, id1 ); + EmbIdTestEntity ete2 = em.find( EmbIdTestEntity.class, id2 ); + MulIdTestEntity mte3 = em.find( MulIdTestEntity.class, id3 ); + EmbIdWithCustomTypeTestEntity cte5 = em.find( EmbIdWithCustomTypeTestEntity.class, id5 ); + EmbIdWithCustomTypeTestEntity cte6 = em.find( EmbIdWithCustomTypeTestEntity.class, id6 ); - ete1 = em.find( EmbIdTestEntity.class, id1 ); - ete2 = em.find( EmbIdTestEntity.class, id2 ); - mte3 = em.find( MulIdTestEntity.class, id3 ); - cte5 = em.find( EmbIdWithCustomTypeTestEntity.class, id5 ); - cte6 = em.find( EmbIdWithCustomTypeTestEntity.class, id6 ); + em.remove( ete1 ); + em.remove( mte3 ); + em.remove( cte6 ); - em.remove( ete1 ); - em.remove( mte3 ); - em.remove( cte6 ); - - ete2.setStr1( "y3" ); - cte5.setStr1( "c3" ); - - em.getTransaction().commit(); + ete2.setStr1( "y3" ); + cte5.setStr1( "c3" ); + } ); // Revision 5 - em = getEntityManager(); - em.getTransaction().begin(); - - ete2 = em.find( EmbIdTestEntity.class, id2 ); - - em.remove( ete2 ); - - em.getTransaction().commit(); + scope.inTransaction( em -> { + EmbIdTestEntity ete2 = em.find( EmbIdTestEntity.class, id2 ); + em.remove( ete2 ); + } ); } @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 3, 4 ).equals( getAuditReader().getRevisions( EmbIdTestEntity.class, id1 ) ); - - assert Arrays.asList( 2, 3, 4, 5 ).equals( getAuditReader().getRevisions( EmbIdTestEntity.class, id2 ) ); - - assert Arrays.asList( 1, 3, 4 ).equals( getAuditReader().getRevisions( MulIdTestEntity.class, id3 ) ); - - assert Arrays.asList( 2, 3 ).equals( getAuditReader().getRevisions( MulIdTestEntity.class, id4 ) ); - - assert Arrays.asList( 1, 3, 4 ).equals( - getAuditReader().getRevisions( - EmbIdWithCustomTypeTestEntity.class, - id5 - ) - ); - - assert Arrays.asList( 2, 3, 4 ).equals( - getAuditReader().getRevisions( - EmbIdWithCustomTypeTestEntity.class, - id6 - ) - ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1, 3, 4 ), auditReader.getRevisions( EmbIdTestEntity.class, id1 ) ); + assertEquals( Arrays.asList( 2, 3, 4, 5 ), auditReader.getRevisions( EmbIdTestEntity.class, id2 ) ); + assertEquals( Arrays.asList( 1, 3, 4 ), auditReader.getRevisions( MulIdTestEntity.class, id3 ) ); + assertEquals( Arrays.asList( 2, 3 ), auditReader.getRevisions( MulIdTestEntity.class, id4 ) ); + assertEquals( Arrays.asList( 1, 3, 4 ), auditReader.getRevisions( EmbIdWithCustomTypeTestEntity.class, id5 ) ); + assertEquals( Arrays.asList( 2, 3, 4 ), auditReader.getRevisions( EmbIdWithCustomTypeTestEntity.class, id6 ) ); + } ); } @Test - public void testHistoryOfId1() { - EmbIdTestEntity ver1 = new EmbIdTestEntity( id1, "x" ); - EmbIdTestEntity ver2 = new EmbIdTestEntity( id1, "x2" ); - - assert getAuditReader().find( EmbIdTestEntity.class, id1, 1 ).equals( ver1 ); - assert getAuditReader().find( EmbIdTestEntity.class, id1, 2 ).equals( ver1 ); - assert getAuditReader().find( EmbIdTestEntity.class, id1, 3 ).equals( ver2 ); - assert getAuditReader().find( EmbIdTestEntity.class, id1, 4 ) == null; - assert getAuditReader().find( EmbIdTestEntity.class, id1, 5 ) == null; + public void testHistoryOfId1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + EmbIdTestEntity ver1 = new EmbIdTestEntity( id1, "x" ); + EmbIdTestEntity ver2 = new EmbIdTestEntity( id1, "x2" ); + + assertEquals( ver1, auditReader.find( EmbIdTestEntity.class, id1, 1 ) ); + assertEquals( ver1, auditReader.find( EmbIdTestEntity.class, id1, 2 ) ); + assertEquals( ver2, auditReader.find( EmbIdTestEntity.class, id1, 3 ) ); + assertNull( auditReader.find( EmbIdTestEntity.class, id1, 4 ) ); + assertNull( auditReader.find( EmbIdTestEntity.class, id1, 5 ) ); + } ); } @Test - public void testHistoryOfId2() { - EmbIdTestEntity ver1 = new EmbIdTestEntity( id2, "y" ); - EmbIdTestEntity ver2 = new EmbIdTestEntity( id2, "y2" ); - EmbIdTestEntity ver3 = new EmbIdTestEntity( id2, "y3" ); - - assert getAuditReader().find( EmbIdTestEntity.class, id2, 1 ) == null; - assert getAuditReader().find( EmbIdTestEntity.class, id2, 2 ).equals( ver1 ); - assert getAuditReader().find( EmbIdTestEntity.class, id2, 3 ).equals( ver2 ); - assert getAuditReader().find( EmbIdTestEntity.class, id2, 4 ).equals( ver3 ); - assert getAuditReader().find( EmbIdTestEntity.class, id2, 5 ) == null; + public void testHistoryOfId2(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + EmbIdTestEntity ver1 = new EmbIdTestEntity( id2, "y" ); + EmbIdTestEntity ver2 = new EmbIdTestEntity( id2, "y2" ); + EmbIdTestEntity ver3 = new EmbIdTestEntity( id2, "y3" ); + + assertNull( auditReader.find( EmbIdTestEntity.class, id2, 1 ) ); + assertEquals( ver1, auditReader.find( EmbIdTestEntity.class, id2, 2 ) ); + assertEquals( ver2, auditReader.find( EmbIdTestEntity.class, id2, 3 ) ); + assertEquals( ver3, auditReader.find( EmbIdTestEntity.class, id2, 4 ) ); + assertNull( auditReader.find( EmbIdTestEntity.class, id2, 5 ) ); + } ); } @Test - public void testHistoryOfId3() { - MulIdTestEntity ver1 = new MulIdTestEntity( id3.getId1(), id3.getId2(), "a" ); - MulIdTestEntity ver2 = new MulIdTestEntity( id3.getId1(), id3.getId2(), "a2" ); - - assert getAuditReader().find( MulIdTestEntity.class, id3, 1 ).equals( ver1 ); - assert getAuditReader().find( MulIdTestEntity.class, id3, 2 ).equals( ver1 ); - assert getAuditReader().find( MulIdTestEntity.class, id3, 3 ).equals( ver2 ); - assert getAuditReader().find( MulIdTestEntity.class, id3, 4 ) == null; - assert getAuditReader().find( MulIdTestEntity.class, id3, 5 ) == null; + public void testHistoryOfId3(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + MulIdTestEntity ver1 = new MulIdTestEntity( id3.getId1(), id3.getId2(), "a" ); + MulIdTestEntity ver2 = new MulIdTestEntity( id3.getId1(), id3.getId2(), "a2" ); + + assertEquals( ver1, auditReader.find( MulIdTestEntity.class, id3, 1 ) ); + assertEquals( ver1, auditReader.find( MulIdTestEntity.class, id3, 2 ) ); + assertEquals( ver2, auditReader.find( MulIdTestEntity.class, id3, 3 ) ); + assertNull( auditReader.find( MulIdTestEntity.class, id3, 4 ) ); + assertNull( auditReader.find( MulIdTestEntity.class, id3, 5 ) ); + } ); } @Test - public void testHistoryOfId4() { - MulIdTestEntity ver1 = new MulIdTestEntity( id4.getId1(), id4.getId2(), "b" ); - MulIdTestEntity ver2 = new MulIdTestEntity( id4.getId1(), id4.getId2(), "b2" ); - - assert getAuditReader().find( MulIdTestEntity.class, id4, 1 ) == null; - assert getAuditReader().find( MulIdTestEntity.class, id4, 2 ).equals( ver1 ); - assert getAuditReader().find( MulIdTestEntity.class, id4, 3 ).equals( ver2 ); - assert getAuditReader().find( MulIdTestEntity.class, id4, 4 ).equals( ver2 ); - assert getAuditReader().find( MulIdTestEntity.class, id4, 5 ).equals( ver2 ); + public void testHistoryOfId4(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + MulIdTestEntity ver1 = new MulIdTestEntity( id4.getId1(), id4.getId2(), "b" ); + MulIdTestEntity ver2 = new MulIdTestEntity( id4.getId1(), id4.getId2(), "b2" ); + + assertNull( auditReader.find( MulIdTestEntity.class, id4, 1 ) ); + assertEquals( ver1, auditReader.find( MulIdTestEntity.class, id4, 2 ) ); + assertEquals( ver2, auditReader.find( MulIdTestEntity.class, id4, 3 ) ); + assertEquals( ver2, auditReader.find( MulIdTestEntity.class, id4, 4 ) ); + assertEquals( ver2, auditReader.find( MulIdTestEntity.class, id4, 5 ) ); + } ); } @Test - public void testHistoryOfId5() { - EmbIdWithCustomTypeTestEntity ver1 = new EmbIdWithCustomTypeTestEntity( id5, "c" ); - EmbIdWithCustomTypeTestEntity ver2 = new EmbIdWithCustomTypeTestEntity( id5, "c2" ); - EmbIdWithCustomTypeTestEntity ver3 = new EmbIdWithCustomTypeTestEntity( id5, "c3" ); - - assert getAuditReader().find( EmbIdWithCustomTypeTestEntity.class, id5, 1 ).equals( ver1 ); - assert getAuditReader().find( EmbIdWithCustomTypeTestEntity.class, id5, 2 ).equals( ver1 ); - assert getAuditReader().find( EmbIdWithCustomTypeTestEntity.class, id5, 3 ).equals( ver2 ); - assert getAuditReader().find( EmbIdWithCustomTypeTestEntity.class, id5, 4 ).equals( ver3 ); - assert getAuditReader().find( EmbIdWithCustomTypeTestEntity.class, id5, 5 ).equals( ver3 ); + public void testHistoryOfId5(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + EmbIdWithCustomTypeTestEntity ver1 = new EmbIdWithCustomTypeTestEntity( id5, "c" ); + EmbIdWithCustomTypeTestEntity ver2 = new EmbIdWithCustomTypeTestEntity( id5, "c2" ); + EmbIdWithCustomTypeTestEntity ver3 = new EmbIdWithCustomTypeTestEntity( id5, "c3" ); + + assertEquals( ver1, auditReader.find( EmbIdWithCustomTypeTestEntity.class, id5, 1 ) ); + assertEquals( ver1, auditReader.find( EmbIdWithCustomTypeTestEntity.class, id5, 2 ) ); + assertEquals( ver2, auditReader.find( EmbIdWithCustomTypeTestEntity.class, id5, 3 ) ); + assertEquals( ver3, auditReader.find( EmbIdWithCustomTypeTestEntity.class, id5, 4 ) ); + assertEquals( ver3, auditReader.find( EmbIdWithCustomTypeTestEntity.class, id5, 5 ) ); + } ); } @Test - public void testHistoryOfId6() { - EmbIdWithCustomTypeTestEntity ver1 = new EmbIdWithCustomTypeTestEntity( id6, "d" ); - EmbIdWithCustomTypeTestEntity ver2 = new EmbIdWithCustomTypeTestEntity( id6, "d2" ); - - assert getAuditReader().find( EmbIdWithCustomTypeTestEntity.class, id6, 1 ) == null; - assert getAuditReader().find( EmbIdWithCustomTypeTestEntity.class, id6, 2 ).equals( ver1 ); - assert getAuditReader().find( EmbIdWithCustomTypeTestEntity.class, id6, 3 ).equals( ver2 ); - assert getAuditReader().find( EmbIdWithCustomTypeTestEntity.class, id6, 4 ) == null; - assert getAuditReader().find( EmbIdWithCustomTypeTestEntity.class, id6, 5 ) == null; + public void testHistoryOfId6(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + EmbIdWithCustomTypeTestEntity ver1 = new EmbIdWithCustomTypeTestEntity( id6, "d" ); + EmbIdWithCustomTypeTestEntity ver2 = new EmbIdWithCustomTypeTestEntity( id6, "d2" ); + + assertNull( auditReader.find( EmbIdWithCustomTypeTestEntity.class, id6, 1 ) ); + assertEquals( ver1, auditReader.find( EmbIdWithCustomTypeTestEntity.class, id6, 2 ) ); + assertEquals( ver2, auditReader.find( EmbIdWithCustomTypeTestEntity.class, id6, 3 ) ); + assertNull( auditReader.find( EmbIdWithCustomTypeTestEntity.class, id6, 4 ) ); + assertNull( auditReader.find( EmbIdWithCustomTypeTestEntity.class, id6, 5 ) ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/DateId.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/DateId.java index 2dd48326edc1..29ec8359123b 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/DateId.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/DateId.java @@ -6,61 +6,57 @@ import java.util.Arrays; import java.util.Date; -import jakarta.persistence.EntityManager; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.orm.test.envers.entities.ids.DateIdTestEntity; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; -import org.junit.Test; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Adam Warski (adam at warski dot org) */ -public class DateId extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {DateIdTestEntity.class}) +public class DateId { private Date id1; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {DateIdTestEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); + scope.inTransaction( em -> { + DateIdTestEntity dite = new DateIdTestEntity( new Date(), "x" ); + em.persist( dite ); - DateIdTestEntity dite = new DateIdTestEntity( new Date(), "x" ); - em.persist( dite ); - - id1 = dite.getId(); - - em.getTransaction().commit(); + id1 = dite.getId(); + } ); // Revision 2 - em = getEntityManager(); - em.getTransaction().begin(); - - dite = em.find( DateIdTestEntity.class, id1 ); - dite.setStr1( "y" ); - - em.getTransaction().commit(); + scope.inTransaction( em -> { + DateIdTestEntity dite = em.find( DateIdTestEntity.class, id1 ); + dite.setStr1( "y" ); + } ); } @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( DateIdTestEntity.class, id1 ) ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1, 2 ), auditReader.getRevisions( DateIdTestEntity.class, id1 ) ); + } ); } @Test - public void testHistoryOfId1() { - DateIdTestEntity ver1 = new DateIdTestEntity( id1, "x" ); - DateIdTestEntity ver2 = new DateIdTestEntity( id1, "y" ); - - assert getAuditReader().find( DateIdTestEntity.class, id1, 1 ).getStr1().equals( "x" ); - assert getAuditReader().find( DateIdTestEntity.class, id1, 2 ).getStr1().equals( "y" ); + public void testHistoryOfId1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( "x", auditReader.find( DateIdTestEntity.class, id1, 1 ).getStr1() ); + assertEquals( "y", auditReader.find( DateIdTestEntity.class, id1, 2 ).getStr1() ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/ManyToOneIdNotAudited.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/ManyToOneIdNotAudited.java index ffe0a347360f..dc7f20279dcc 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/ManyToOneIdNotAudited.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/ManyToOneIdNotAudited.java @@ -4,16 +4,14 @@ */ package org.hibernate.orm.test.envers.integration.ids; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; import org.hibernate.orm.test.envers.entities.StrTestEntity; import org.hibernate.orm.test.envers.entities.UnversionedStrTestEntity; import org.hibernate.orm.test.envers.entities.ids.ManyToOneIdNotAuditedTestEntity; import org.hibernate.orm.test.envers.entities.ids.ManyToOneNotAuditedEmbId; - -import org.junit.Test; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; /** * A test checking that when using Envers it is possible to have non-audited entities that use unsupported @@ -21,38 +19,28 @@ * * @author Adam Warski (adam at warski dot org) */ -public class ManyToOneIdNotAudited extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {ManyToOneIdNotAuditedTestEntity.class, UnversionedStrTestEntity.class, StrTestEntity.class}) +public class ManyToOneIdNotAudited { private ManyToOneNotAuditedEmbId id1; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {ManyToOneIdNotAuditedTestEntity.class, UnversionedStrTestEntity.class, StrTestEntity.class}; - } - - @Test - @Priority(10) - public void initData() { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); + scope.inTransaction( em -> { + UnversionedStrTestEntity uste = new UnversionedStrTestEntity(); + uste.setStr( "test1" ); + em.persist( uste ); - UnversionedStrTestEntity uste = new UnversionedStrTestEntity(); - uste.setStr( "test1" ); - em.persist( uste ); - - id1 = new ManyToOneNotAuditedEmbId( uste ); - - em.getTransaction().commit(); + id1 = new ManyToOneNotAuditedEmbId( uste ); + } ); // Revision 2 - em = getEntityManager(); - em.getTransaction().begin(); - - ManyToOneIdNotAuditedTestEntity mtoinate = new ManyToOneIdNotAuditedTestEntity(); - mtoinate.setData( "data1" ); - mtoinate.setId( id1 ); - em.persist( mtoinate ); - - em.getTransaction().commit(); + scope.inTransaction( em -> { + ManyToOneIdNotAuditedTestEntity mtoinate = new ManyToOneIdNotAuditedTestEntity(); + mtoinate.setData( "data1" ); + mtoinate.setId( id1 ); + em.persist( mtoinate ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/embeddedid/EmbeddedIdGenericsTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/embeddedid/EmbeddedIdGenericsTest.java index b0e666de30e7..2dc90c35fd4a 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/embeddedid/EmbeddedIdGenericsTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/embeddedid/EmbeddedIdGenericsTest.java @@ -20,14 +20,15 @@ import org.hibernate.envers.Audited; import org.hibernate.envers.RelationTargetAuditMode; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.junit.Test; - +import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; -import static org.hibernate.testing.transaction.TransactionUtil.doInJPA; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * Tests an entity mapping that uses an {@link EmbeddedId} mapping that makes use of generics. @@ -35,18 +36,15 @@ * @author Chris Cranford */ @JiraKey(value = "HHH-13564") -public class EmbeddedIdGenericsTest extends BaseEnversJPAFunctionalTestCase { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { NotificationType.class, Trigger.class }; - } +@EnversTest +@Jpa(annotatedClasses = {EmbeddedIdGenericsTest.NotificationType.class, EmbeddedIdGenericsTest.Trigger.class}) +public class EmbeddedIdGenericsTest { - @Test - @Priority(10) - public void initData() { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Revision 1 // Store NotificationType and Trigger instance - doInJPA( this::entityManagerFactory, entityManager -> { + scope.inTransaction( entityManager -> { final NotificationType type = new NotificationType( "code" ); entityManager.persist( type ); @@ -59,18 +57,22 @@ public void initData() { } @Test - public void testAuditQueryMappedSuperclassWithEmbeddedId() { - // There should be at least one revision for Trigger - List resultList = getAuditReader().createQuery().forRevisionsOfEntity( Trigger.class, true, true ).getResultList(); - assertEquals( 1, resultList.size() ); - - // Trigger should be hydrated with a composite-id values below - Trigger entityInstance = (Trigger) resultList.get( 0 ); - assertEquals( "str", entityInstance.getPk().getEventType() ); - assertEquals( "code", entityInstance.getPk().getNotificationType().getCode() ); + public void testAuditQueryMappedSuperclassWithEmbeddedId(EntityManagerFactoryScope scope) { + scope.inEntityManager( entityManager -> { + // There should be at least one revision for Trigger + List resultList = AuditReaderFactory.get( entityManager ) + .createQuery() + .forRevisionsOfEntity( Trigger.class, true, true ) + .getResultList(); + assertEquals( 1, resultList.size() ); + + // Trigger should be hydrated with a composite-id values below + Trigger entityInstance = (Trigger) resultList.get( 0 ); + assertEquals( "str", entityInstance.getPk().getEventType() ); + assertEquals( "code", entityInstance.getPk().getNotificationType().getCode() ); + } ); } - @MappedSuperclass public abstract static class CompositeIdBaseEntity implements Serializable { protected PK pk; diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/embeddedid/NestedEmbeddedIdentifiersTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/embeddedid/NestedEmbeddedIdentifiersTest.java index e324d02f940c..28bda750ec1c 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/embeddedid/NestedEmbeddedIdentifiersTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/embeddedid/NestedEmbeddedIdentifiersTest.java @@ -4,32 +4,30 @@ */ package org.hibernate.orm.test.envers.integration.ids.embeddedid; -import static org.hibernate.testing.transaction.TransactionUtil.doInJPA; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; +import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.JiraKey; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; import java.util.Arrays; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNull; @JiraKey(value = "HHH-13361") -public class NestedEmbeddedIdentifiersTest extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {OwnerOfRelationCode.class, CompositeEntity.class}) +public class NestedEmbeddedIdentifiersTest { private OwnerOfRelationCodeId id; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { OwnerOfRelationCode.class, CompositeEntity.class }; - } - - @Test - @Priority(10) - public void initData() { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Revision 1, test insert - final OwnerOfRelationCode owner = doInJPA( this::entityManagerFactory, session -> { + final OwnerOfRelationCode owner = scope.fromTransaction( session -> { CompositeEntity compositeEntity = new CompositeEntity(); compositeEntity.setFirstCode( "firstCode" ); compositeEntity.setSecondCode( "secondCode" ); @@ -46,32 +44,41 @@ public void initData() { this.id = owner.getCodeObject(); // Revision 2, test update - doInJPA( this::entityManagerFactory, session -> { + scope.inTransaction( session -> { OwnerOfRelationCode ownerEntity = session.find( OwnerOfRelationCode.class, id ); ownerEntity.setDescription( "first description" ); } ); } @Test - public void testRevisionCounts() { - assertEquals( Arrays.asList( 1, 2 ), getAuditReader().getRevisions( OwnerOfRelationCode.class, id ) ); + public void testRevisionCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + assertEquals( Arrays.asList( 1, 2 ), + AuditReaderFactory.get( em ).getRevisions( OwnerOfRelationCode.class, id ) ); + } ); } @Test - public void testIdentifierAtRevision1() { - final OwnerOfRelationCode rev1 = getAuditReader().find( OwnerOfRelationCode.class, id, 1 ); - assertEquals( rev1.getCodeObject().getSecondIdentifier(), "secondIdentifier" ); - assertEquals( rev1.getCodeObject().getCompositeEntity().getFirstCode(), "firstCode" ); - assertEquals( rev1.getCodeObject().getCompositeEntity().getSecondCode(), "secondCode" ); - assertNull( rev1.getDescription() ); + public void testIdentifierAtRevision1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final OwnerOfRelationCode rev1 = AuditReaderFactory.get( em ) + .find( OwnerOfRelationCode.class, id, 1 ); + assertEquals( rev1.getCodeObject().getSecondIdentifier(), "secondIdentifier" ); + assertEquals( rev1.getCodeObject().getCompositeEntity().getFirstCode(), "firstCode" ); + assertEquals( rev1.getCodeObject().getCompositeEntity().getSecondCode(), "secondCode" ); + assertNull( rev1.getDescription() ); + } ); } @Test - public void testIdentifierAtRevision2() { - final OwnerOfRelationCode rev2 = getAuditReader().find( OwnerOfRelationCode.class, id, 2 ); - assertEquals( rev2.getCodeObject().getSecondIdentifier(), "secondIdentifier" ); - assertEquals( rev2.getCodeObject().getCompositeEntity().getFirstCode(), "firstCode" ); - assertEquals( rev2.getCodeObject().getCompositeEntity().getSecondCode(), "secondCode" ); - assertEquals( rev2.getDescription(), "first description" ); + public void testIdentifierAtRevision2(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final OwnerOfRelationCode rev2 = AuditReaderFactory.get( em ) + .find( OwnerOfRelationCode.class, id, 2 ); + assertEquals( rev2.getCodeObject().getSecondIdentifier(), "secondIdentifier" ); + assertEquals( rev2.getCodeObject().getCompositeEntity().getFirstCode(), "firstCode" ); + assertEquals( rev2.getCodeObject().getCompositeEntity().getSecondCode(), "secondCode" ); + assertEquals( rev2.getDescription(), "first description" ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/embeddedid/RelationInsideEmbeddableNotAuditedTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/embeddedid/RelationInsideEmbeddableNotAuditedTest.java index eb33d06f55cc..45c606dbe465 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/embeddedid/RelationInsideEmbeddableNotAuditedTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/embeddedid/RelationInsideEmbeddableNotAuditedTest.java @@ -19,17 +19,18 @@ import org.hibernate.envers.Audited; import org.hibernate.envers.RevisionType; import org.hibernate.envers.query.AuditEntity; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.junit.Test; - +import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; -import static org.hibernate.testing.transaction.TransactionUtil.doInJPA; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertTrue; /** * Test an audited entity with an embeddable composite key that has an association @@ -38,21 +39,18 @@ * @author Chris Cranford */ @JiraKey(value = "HHH-12498") -public class RelationInsideEmbeddableNotAuditedTest extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {RelationInsideEmbeddableNotAuditedTest.Book.class, + RelationInsideEmbeddableNotAuditedTest.Author.class}) +public class RelationInsideEmbeddableNotAuditedTest { private Integer authorId; private BookId bookId1; private BookId bookId2; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[]{ Book.class, Author.class }; - } - - @Test - @Priority(10) - public void initData() { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Revision 1, persist author and book - doInJPA( this::entityManagerFactory, entityManager -> { + scope.inTransaction( entityManager -> { final Author author = new Author(); author.setName( "Stephen King" ); entityManager.persist( author ); @@ -69,7 +67,7 @@ public void initData() { } ); // Revision 2, persist new book - doInJPA( this::entityManagerFactory, entityManager -> { + scope.inTransaction( entityManager -> { final Author author = entityManager.find( Author.class, authorId ); final Book book = new Book(); @@ -83,20 +81,20 @@ public void initData() { } ); // Modify books - doInJPA( this::entityManagerFactory, entityManager -> { + scope.inTransaction( entityManager -> { final Book book1 = entityManager.find( Book.class, bookId1 ); book1.setName( "Gunslinger: Dark Tower" ); entityManager.merge( book1 ); } ); - doInJPA( this::entityManagerFactory, entityManager -> { + scope.inTransaction( entityManager -> { final Book book2 = entityManager.find( Book.class, bookId2 ); book2.setName( "Gunslinger: Dark Tower" ); entityManager.merge( book2 ); } ); //! Delete books - doInJPA( this::entityManagerFactory, entityManager -> { + scope.inTransaction( entityManager -> { final Book book1 = entityManager.find( Book.class, bookId1 ); entityManager.remove( book1 ); @@ -106,67 +104,83 @@ public void initData() { } @Test - public void tesRevisionCounts() { - assertEquals( Arrays.asList( 1, 3, 5 ), getAuditReader().getRevisions( Book.class, bookId1 ) ); - assertEquals( Arrays.asList( 2, 4, 5 ), getAuditReader().getRevisions( Book.class, bookId2 ) ); + public void tesRevisionCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + assertEquals( Arrays.asList( 1, 3, 5 ), + AuditReaderFactory.get( em ).getRevisions( Book.class, bookId1 ) ); + assertEquals( Arrays.asList( 2, 4, 5 ), + AuditReaderFactory.get( em ).getRevisions( Book.class, bookId2 ) ); + } ); } @Test - public void testRevisionHistoryBook1() { - final Book rev1 = getAuditReader().find( Book.class, bookId1, 1 ); - assertNotNull( rev1.getId().getAuthor() ); + public void testRevisionHistoryBook1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + + final Book rev1 = auditReader.find( Book.class, bookId1, 1 ); + assertNotNull( rev1.getId().getAuthor() ); - final Book rev3 = getAuditReader().find( Book.class, bookId1, 3 ); - assertNotNull( rev3.getId().getAuthor() ); + final Book rev3 = auditReader.find( Book.class, bookId1, 3 ); + assertNotNull( rev3.getId().getAuthor() ); - final Book rev5 = getAuditReader().find( Book.class, bookId1, 5 ); - assertNull( rev5 ); + final Book rev5 = auditReader.find( Book.class, bookId1, 5 ); + assertNull( rev5 ); + } ); } @Test - public void testRevisionHistoryBook2() { - final Book rev2 = getAuditReader().find( Book.class, bookId2, 2 ); - assertNotNull( rev2.getId().getAuthor() ); + public void testRevisionHistoryBook2(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + + final Book rev2 = auditReader.find( Book.class, bookId2, 2 ); + assertNotNull( rev2.getId().getAuthor() ); - final Book rev4 = getAuditReader().find( Book.class, bookId2, 4 ); - assertNotNull( rev4.getId().getAuthor() ); + final Book rev4 = auditReader.find( Book.class, bookId2, 4 ); + assertNotNull( rev4.getId().getAuthor() ); - final Book rev5 = getAuditReader().find( Book.class, bookId2, 5 ); - assertNull( rev5 ); + final Book rev5 = auditReader.find( Book.class, bookId2, 5 ); + assertNull( rev5 ); + } ); } @Test @SuppressWarnings("unchecked") - public void testSelectDeletedEntitiesBook1() { - List books = (List) getAuditReader().createQuery() - .forRevisionsOfEntity( Book.class, true, true ) - .add( AuditEntity.id().eq( bookId1 ) ) - .add( AuditEntity.revisionType().eq( RevisionType.DEL ) ) - .getResultList(); - - assertTrue( !books.isEmpty() ); - - final Book book = books.get( 0 ); - assertNotNull( book.getId() ); - assertNotNull( book.getId().getAuthor() ); - assertEquals( authorId, book.getId().getAuthor().getId() ); + public void testSelectDeletedEntitiesBook1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + List books = (List) AuditReaderFactory.get( em ).createQuery() + .forRevisionsOfEntity( Book.class, true, true ) + .add( AuditEntity.id().eq( bookId1 ) ) + .add( AuditEntity.revisionType().eq( RevisionType.DEL ) ) + .getResultList(); + + assertTrue( !books.isEmpty() ); + + final Book book = books.get( 0 ); + assertNotNull( book.getId() ); + assertNotNull( book.getId().getAuthor() ); + assertEquals( authorId, book.getId().getAuthor().getId() ); + } ); } @Test @SuppressWarnings("unchecked") - public void testSelectDeletedEntitiesBook2() { - List books = (List) getAuditReader().createQuery() - .forRevisionsOfEntity( Book.class, true, true ) - .add( AuditEntity.id().eq( bookId2 ) ) - .add( AuditEntity.revisionType().eq( RevisionType.DEL ) ) - .getResultList(); - - assertTrue( !books.isEmpty() ); - - final Book book = books.get( 0 ); - assertNotNull( book.getId() ); - assertNotNull( book.getId().getAuthor() ); - assertEquals( authorId, book.getId().getAuthor().getId() ); + public void testSelectDeletedEntitiesBook2(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + List books = (List) AuditReaderFactory.get( em ).createQuery() + .forRevisionsOfEntity( Book.class, true, true ) + .add( AuditEntity.id().eq( bookId2 ) ) + .add( AuditEntity.revisionType().eq( RevisionType.DEL ) ) + .getResultList(); + + assertTrue( !books.isEmpty() ); + + final Book book = books.get( 0 ); + assertNotNull( book.getId() ); + assertNotNull( book.getId().getAuthor() ); + assertEquals( authorId, book.getId().getAuthor().getId() ); + } ); } @Audited diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/embeddedid/RelationInsideEmbeddableRemoveTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/embeddedid/RelationInsideEmbeddableRemoveTest.java index 410e2ce0345b..d0de5de92312 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/embeddedid/RelationInsideEmbeddableRemoveTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/embeddedid/RelationInsideEmbeddableRemoveTest.java @@ -6,14 +6,15 @@ import java.util.Arrays; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * Test avoiding the creating of a foreign key constraint for an embedded identifier that @@ -23,19 +24,14 @@ * @author Chris Cranford */ @JiraKey(value = "HHH-11107") -public class RelationInsideEmbeddableRemoveTest extends BaseEnversJPAFunctionalTestCase { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { CorrectChild.class, IncorrectChild.class, Parent.class }; - } +@EnversTest +@Jpa(annotatedClasses = {CorrectChild.class, IncorrectChild.class, Parent.class}) +public class RelationInsideEmbeddableRemoveTest { - @Test - @Priority(10) - public void initData() { - EntityManager entityManager = getOrCreateEntityManager(); - try { - // Revision 1 - entityManager.getTransaction().begin(); + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + // Revision 1 + scope.inTransaction( entityManager -> { Parent parent = new Parent( "Parent" ); parent.addIncorrectChild( 1 ); parent.addCorrectChild( 1 ); @@ -46,10 +42,11 @@ public void initData() { for ( CorrectChild child : parent.getCorrectChildren() ) { entityManager.persist( child ); } - entityManager.getTransaction().commit(); + } ); - // Revision 2 - entityManager.getTransaction().begin(); + // Revision 2 + scope.inTransaction( entityManager -> { + Parent parent = entityManager.find( Parent.class, "Parent" ); for ( IncorrectChild child : parent.getIncorrectChildren() ) { entityManager.remove( child ); } @@ -58,27 +55,21 @@ public void initData() { entityManager.remove( child ); } parent.getCorrectChildren().clear(); - entityManager.getTransaction().commit(); + } ); - // Revision 3 - // This fails because of referential integrity constraints without fix. - entityManager.getTransaction().begin(); + // Revision 3 + // This fails because of referential integrity constraints without fix. + scope.inTransaction( entityManager -> { + Parent parent = entityManager.find( Parent.class, "Parent" ); entityManager.remove( parent ); - entityManager.getTransaction().commit(); - } - catch ( Exception e ) { - if ( entityManager.getTransaction().isActive() ) { - entityManager.getTransaction().rollback(); - } - throw e; - } - finally { - entityManager.close(); - } + } ); } @Test - public void testRevisionCounts() { - assertEquals( Arrays.asList( 1, 3 ), getAuditReader().getRevisions( Parent.class, "Parent" ) ); + public void testRevisionCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + assertEquals( Arrays.asList( 1, 3 ), + AuditReaderFactory.get( em ).getRevisions( Parent.class, "Parent" ) ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/embeddedid/RelationInsideEmbeddableTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/embeddedid/RelationInsideEmbeddableTest.java index 874f5399e7c0..43763183160a 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/embeddedid/RelationInsideEmbeddableTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/embeddedid/RelationInsideEmbeddableTest.java @@ -5,94 +5,99 @@ package org.hibernate.orm.test.envers.integration.ids.embeddedid; import java.util.Arrays; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Assert; -import org.junit.Test; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) */ @JiraKey(value = "HHH-7690") -public class RelationInsideEmbeddableTest extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {PurchaseOrder.class, Item.class, ItemId.class, Producer.class}) +public class RelationInsideEmbeddableTest { private Integer orderId = null; private ItemId itemId = null; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { PurchaseOrder.class, Item.class, ItemId.class, Producer.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Revision 1 - em.getTransaction().begin(); - Producer producer = new Producer( 1, "Sony" ); - ItemId sonyId = new ItemId( "TV", 1, producer ); - Item item = new Item( sonyId, 100.50 ); - PurchaseOrder order = new PurchaseOrder( item, null ); - em.persist( producer ); - em.persist( item ); - em.persist( order ); - em.getTransaction().commit(); + scope.inTransaction( em -> { + Producer producer = new Producer( 1, "Sony" ); + ItemId sonyId = new ItemId( "TV", 1, producer ); + Item item = new Item( sonyId, 100.50 ); + PurchaseOrder order = new PurchaseOrder( item, null ); + em.persist( producer ); + em.persist( item ); + em.persist( order ); + + orderId = order.getId(); + itemId = sonyId; + } ); // Revision 2 - em.getTransaction().begin(); - order = em.find( PurchaseOrder.class, order.getId() ); - order.setComment( "fragile" ); - order = em.merge( order ); - em.getTransaction().commit(); + scope.inTransaction( em -> { + PurchaseOrder order = em.find( PurchaseOrder.class, orderId ); + order.setComment( "fragile" ); + em.merge( order ); + } ); // Revision 3 - em.getTransaction().begin(); - item = em.find( Item.class, sonyId ); - item.setPrice( 110.00 ); - em.getTransaction().commit(); - - orderId = order.getId(); - itemId = sonyId; - - em.close(); + scope.inTransaction( em -> { + Item item = em.find( Item.class, itemId ); + item.setPrice( 110.00 ); + } ); } @Test - public void testRevisionsCounts() throws Exception { - Assert.assertEquals( Arrays.asList( 1, 2 ), getAuditReader().getRevisions( PurchaseOrder.class, orderId ) ); - Assert.assertEquals( Arrays.asList( 1, 3 ), getAuditReader().getRevisions( Item.class, itemId ) ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1, 2 ), auditReader.getRevisions( PurchaseOrder.class, orderId ) ); + assertEquals( Arrays.asList( 1, 3 ), auditReader.getRevisions( Item.class, itemId ) ); + } ); } @Test - public void testHistoryOfPurchaseOrder() { - PurchaseOrder ver1 = new PurchaseOrder( - orderId, new Item( - new ItemId( "TV", 1, new Producer( 1, "Sony" ) ), - 100.50 - ), null - ); - PurchaseOrder ver2 = new PurchaseOrder( - orderId, new Item( - new ItemId( "TV", 1, new Producer( 1, "Sony" ) ), - 100.50 - ), "fragile" - ); - - Assert.assertEquals( ver1, getAuditReader().find( PurchaseOrder.class, orderId, 1 ) ); - Assert.assertEquals( ver2, getAuditReader().find( PurchaseOrder.class, orderId, 2 ) ); + public void testHistoryOfPurchaseOrder(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + + PurchaseOrder ver1 = new PurchaseOrder( + orderId, new Item( + new ItemId( "TV", 1, new Producer( 1, "Sony" ) ), + 100.50 + ), null + ); + PurchaseOrder ver2 = new PurchaseOrder( + orderId, new Item( + new ItemId( "TV", 1, new Producer( 1, "Sony" ) ), + 100.50 + ), "fragile" + ); + + assertEquals( ver1, auditReader.find( PurchaseOrder.class, orderId, 1 ) ); + assertEquals( ver2, auditReader.find( PurchaseOrder.class, orderId, 2 ) ); + } ); } @Test - public void testHistoryOfItem() { - Item ver1 = new Item( itemId, 100.50 ); - Item ver2 = new Item( itemId, 110.00 ); + public void testHistoryOfItem(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + + Item ver1 = new Item( itemId, 100.50 ); + Item ver2 = new Item( itemId, 110.00 ); - Assert.assertEquals( ver1, getAuditReader().find( Item.class, itemId, 1 ) ); - Assert.assertEquals( ver2, getAuditReader().find( Item.class, itemId, 3 ) ); + assertEquals( ver1, auditReader.find( Item.class, itemId, 1 ) ); + assertEquals( ver2, auditReader.find( Item.class, itemId, 3 ) ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/idclass/IdClassReferenceIdentifierTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/idclass/IdClassReferenceIdentifierTest.java index 8b0032819773..4c319a55394f 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/idclass/IdClassReferenceIdentifierTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/idclass/IdClassReferenceIdentifierTest.java @@ -4,108 +4,112 @@ */ package org.hibernate.orm.test.envers.integration.ids.idclass; -import junit.framework.Assert; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; -import jakarta.persistence.EntityManager; import java.util.Arrays; +import static org.junit.jupiter.api.Assertions.assertEquals; + /** * @author Matthew Morrissette (yinzara at gmail dot com) */ @JiraKey(value = "HHH-10667") -public class IdClassReferenceIdentifierTest extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = { + ReferenceIdentifierEntity.class, + ReferenceIdentifierClassId.class, + ClassType.class, + IntegerGeneratedIdentityEntity.class +}) +public class IdClassReferenceIdentifierTest { private ReferenceIdentifierClassId entityId = null; private Integer typeId = null; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { - ReferenceIdentifierEntity.class, - ReferenceIdentifierClassId.class, - ClassType.class, - IntegerGeneratedIdentityEntity.class - }; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Revision 1 - em.getTransaction().begin(); - ClassType type = new ClassType( "type", "initial description" ); - em.persist( type ); - - IntegerGeneratedIdentityEntity type2 = new IntegerGeneratedIdentityEntity(); - em.persist(type2); + scope.inTransaction( em -> { + ClassType type = new ClassType( "type", "initial description" ); + em.persist( type ); - ReferenceIdentifierEntity entity = new ReferenceIdentifierEntity(); - entity.setSampleValue( "initial data" ); - entity.setType( type ); - entity.setIiie( type2 ); + IntegerGeneratedIdentityEntity type2 = new IntegerGeneratedIdentityEntity(); + em.persist( type2 ); + ReferenceIdentifierEntity entity = new ReferenceIdentifierEntity(); + entity.setSampleValue( "initial data" ); + entity.setType( type ); + entity.setIiie( type2 ); - em.persist( entity ); - em.getTransaction().commit(); + em.persist( entity ); - typeId = type2.getId(); - entityId = new ReferenceIdentifierClassId( typeId, type.getType() ); + typeId = type2.getId(); + entityId = new ReferenceIdentifierClassId( typeId, type.getType() ); + } ); // Revision 2 - em.getTransaction().begin(); - type = em.find( ClassType.class, type.getType() ); - type.setDescription( "modified description" ); - em.merge( type ); - em.getTransaction().commit(); + scope.inTransaction( em -> { + ClassType type = em.find( ClassType.class, "type" ); + type.setDescription( "modified description" ); + em.merge( type ); + } ); // Revision 3 - em.getTransaction().begin(); - entity = em.find( ReferenceIdentifierEntity.class, entityId ); - entity.setSampleValue( "modified data" ); - em.merge( entity ); - em.getTransaction().commit(); - - em.close(); + scope.inTransaction( em -> { + ReferenceIdentifierEntity entity = em.find( ReferenceIdentifierEntity.class, entityId ); + entity.setSampleValue( "modified data" ); + em.merge( entity ); + } ); } @Test - public void testRevisionsCounts() { - Assert.assertEquals( Arrays.asList( 1, 2 ), getAuditReader().getRevisions( ClassType.class, "type" ) ); - Assert.assertEquals( Arrays.asList( 1 ), getAuditReader().getRevisions( IntegerGeneratedIdentityEntity.class, typeId ) ); - Assert.assertEquals( Arrays.asList( 1, 3 ), getAuditReader().getRevisions( ReferenceIdentifierEntity.class, entityId ) ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1, 2 ), auditReader.getRevisions( ClassType.class, "type" ) ); + assertEquals( Arrays.asList( 1 ), auditReader.getRevisions( IntegerGeneratedIdentityEntity.class, typeId ) ); + assertEquals( Arrays.asList( 1, 3 ), auditReader.getRevisions( ReferenceIdentifierEntity.class, entityId ) ); + } ); } @Test - public void testHistoryOfEntity() { - // given - ReferenceIdentifierEntity entity = new ReferenceIdentifierEntity( new IntegerGeneratedIdentityEntity(typeId), new ClassType( "type", "initial description" ), "initial data" ); - - // when - ReferenceIdentifierEntity ver1 = getAuditReader().find( ReferenceIdentifierEntity.class, entityId, 1 ); - - // then - Assert.assertEquals( entity.getIiie().getId(), ver1.getIiie().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 - ReferenceIdentifierEntity ver2 = getAuditReader().find( ReferenceIdentifierEntity.class, entityId, 3 ); - - // then - Assert.assertEquals( entity.getIiie().getId(), ver2.getIiie().getId() ); - Assert.assertEquals( entity.getSampleValue(), ver2.getSampleValue() ); - Assert.assertEquals( entity.getType().getType(), ver2.getType().getType() ); - Assert.assertEquals( entity.getType().getDescription(), ver2.getType().getDescription() ); + public void testHistoryOfEntity(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + + // given + ReferenceIdentifierEntity entity = new ReferenceIdentifierEntity( + new IntegerGeneratedIdentityEntity( typeId ), + new ClassType( "type", "initial description" ), + "initial data" + ); + + // when + ReferenceIdentifierEntity ver1 = auditReader.find( ReferenceIdentifierEntity.class, entityId, 1 ); + + // then + assertEquals( entity.getIiie().getId(), ver1.getIiie().getId() ); + assertEquals( entity.getSampleValue(), ver1.getSampleValue() ); + assertEquals( entity.getType().getType(), ver1.getType().getType() ); + assertEquals( entity.getType().getDescription(), ver1.getType().getDescription() ); + + // given + entity.setSampleValue( "modified data" ); + entity.getType().setDescription( "modified description" ); + + // when + ReferenceIdentifierEntity ver2 = auditReader.find( ReferenceIdentifierEntity.class, entityId, 3 ); + + // then + assertEquals( entity.getIiie().getId(), ver2.getIiie().getId() ); + assertEquals( entity.getSampleValue(), ver2.getSampleValue() ); + assertEquals( entity.getType().getType(), ver2.getType().getType() ); + assertEquals( entity.getType().getDescription(), ver2.getType().getDescription() ); + } ); } - } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/idclass/IdClassWithRelationTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/idclass/IdClassWithRelationTest.java index 21c0f92f0845..4e99adcbf1b1 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/idclass/IdClassWithRelationTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/idclass/IdClassWithRelationTest.java @@ -5,117 +5,122 @@ package org.hibernate.orm.test.envers.integration.ids.idclass; import java.util.Arrays; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; -import junit.framework.Assert; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) */ @JiraKey(value = "HHH-4751") -public class IdClassWithRelationTest extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {SampleClass.class, RelationalClassId.class, ClassType.class}) +public class IdClassWithRelationTest { 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(); - + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // 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" ) ); + scope.inTransaction( em -> { + ClassType type = new ClassType( "type", "initial description" ); + SampleClass entity = new SampleClass(); + entity.setType( type ); + entity.setSampleValue( "initial data" ); + em.persist( type ); + em.persist( entity ); + + 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(); + scope.inTransaction( em -> { + ClassType type = em.find( ClassType.class, typeId ); + type.setDescription( "modified description" ); + em.merge( type ); + } ); // Revision 3 - em.getTransaction().begin(); - entity = em.find( SampleClass.class, entityId ); - entity.setSampleValue( "modified data" ); - em.merge( entity ); - em.getTransaction().commit(); - - em.close(); + scope.inTransaction( em -> { + SampleClass entity = em.find( SampleClass.class, entityId ); + entity.setSampleValue( "modified data" ); + em.merge( entity ); + } ); } @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 ) ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1, 2 ), auditReader.getRevisions( ClassType.class, typeId ) ); + assertEquals( Arrays.asList( 1, 3 ), auditReader.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() ); + public void testHistoryOfEntity(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + + // given + SampleClass entity = new SampleClass( entityId.getId(), entityId.getType(), "initial data" ); + + // when + SampleClass ver1 = auditReader.find( SampleClass.class, entityId, 1 ); + + // then + assertEquals( entity.getId(), ver1.getId() ); + assertEquals( entity.getSampleValue(), ver1.getSampleValue() ); + assertEquals( entity.getType().getType(), ver1.getType().getType() ); + assertEquals( entity.getType().getDescription(), ver1.getType().getDescription() ); + + // given + entity.setSampleValue( "modified data" ); + entity.getType().setDescription( "modified description" ); + + // when + SampleClass ver2 = auditReader.find( SampleClass.class, entityId, 3 ); + + // then + assertEquals( entity.getId(), ver2.getId() ); + assertEquals( entity.getSampleValue(), ver2.getSampleValue() ); + assertEquals( entity.getType().getType(), ver2.getType().getType() ); + assertEquals( entity.getType().getDescription(), ver2.getType().getDescription() ); + } ); } @Test - public void testHistoryOfType() { - // given - ClassType type = new ClassType( typeId, "initial description" ); + public void testHistoryOfType(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + + // given + ClassType type = new ClassType( typeId, "initial description" ); - // when - ClassType ver1 = getAuditReader().find( ClassType.class, typeId, 1 ); + // when + ClassType ver1 = auditReader.find( ClassType.class, typeId, 1 ); - // then - Assert.assertEquals( type, ver1 ); - Assert.assertEquals( type.getDescription(), ver1.getDescription() ); + // then + assertEquals( type, ver1 ); + assertEquals( type.getDescription(), ver1.getDescription() ); - // given - type.setDescription( "modified description" ); + // given + type.setDescription( "modified description" ); - // when - ClassType ver2 = getAuditReader().find( ClassType.class, typeId, 2 ); + // when + ClassType ver2 = auditReader.find( ClassType.class, typeId, 2 ); - // then - Assert.assertEquals( type, ver2 ); - Assert.assertEquals( type.getDescription(), ver2.getDescription() ); + // then + assertEquals( type, ver2 ); + assertEquals( type.getDescription(), ver2.getDescription() ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/idclass/ManyToOneNotAuditedMulIdTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/idclass/ManyToOneNotAuditedMulIdTest.java index 87fe6fe771bf..ec36523dc890 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/idclass/ManyToOneNotAuditedMulIdTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/idclass/ManyToOneNotAuditedMulIdTest.java @@ -6,57 +6,54 @@ import java.util.List; import jakarta.persistence.Entity; -import jakarta.persistence.EntityManager; import jakarta.persistence.GeneratedValue; import jakarta.persistence.Id; import jakarta.persistence.IdClass; import jakarta.persistence.ManyToOne; import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.orm.test.envers.entities.UnversionedStrTestEntity; import org.hibernate.orm.test.envers.entities.ids.MulId; - +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; -@JiraKey( value = "HHH-14280" ) -public class ManyToOneNotAuditedMulIdTest extends BaseEnversJPAFunctionalTestCase { +@JiraKey(value = "HHH-14280") +@EnversTest +@Jpa(annotatedClasses = {UnversionedStrTestEntity.class, ManyToOneNotAuditedMulIdTest.ManyToOneNotAuditedMulIdTestEntity.class}) +public class ManyToOneNotAuditedMulIdTest { private final static String str1 = "str1", str2 = "str2"; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { UnversionedStrTestEntity.class, ManyToOneNotAuditedMulIdTestEntity.class }; - } - - @Test - @Priority(10) - public void initData() { - UnversionedStrTestEntity id2 = new UnversionedStrTestEntity( str1 ); - ManyToOneNotAuditedMulIdTestEntity entity = new ManyToOneNotAuditedMulIdTestEntity( id2, str2 ); - - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - - em.persist( id2 ); - em.persist( entity ); + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + scope.inTransaction( em -> { + UnversionedStrTestEntity id2 = new UnversionedStrTestEntity( str1 ); + ManyToOneNotAuditedMulIdTestEntity entity = new ManyToOneNotAuditedMulIdTestEntity( id2, str2 ); - em.getTransaction().commit(); + em.persist( id2 ); + em.persist( entity ); + } ); } @Test - public void testRevisionQuery() { - final List entities = getAuditReader().createQuery() - .forRevisionsOfEntity( ManyToOneNotAuditedMulIdTestEntity.class, true, true ) - .getResultList(); - - assertEquals( 1, entities.size() ); - final ManyToOneNotAuditedMulIdTestEntity entity = entities.get( 0 ); - assertEquals( str1, entity.id2.getStr() ); - assertEquals( str2, entity.str ); + public void testRevisionQuery(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + final List entities = auditReader.createQuery() + .forRevisionsOfEntity( ManyToOneNotAuditedMulIdTestEntity.class, true, true ) + .getResultList(); + + assertEquals( 1, entities.size() ); + final ManyToOneNotAuditedMulIdTestEntity entity = entities.get( 0 ); + assertEquals( str1, entity.id2.getStr() ); + assertEquals( str2, entity.str ); + } ); } @Entity(name = "ManyToOneNotAudited") diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/protectedmodifier/ProtectedConstructorTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/protectedmodifier/ProtectedConstructorTest.java index 285bace14218..844c61c78fed 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/protectedmodifier/ProtectedConstructorTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/ids/protectedmodifier/ProtectedConstructorTest.java @@ -6,47 +6,45 @@ import java.util.Arrays; import java.util.List; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Assert; -import org.junit.Test; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) */ @JiraKey(value = "HHH-7934") -public class ProtectedConstructorTest extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {WrappedStringId.class, ProtectedConstructorEntity.class}) +public class ProtectedConstructorTest { private final ProtectedConstructorEntity testEntity = new ProtectedConstructorEntity( - new WrappedStringId( - "embeddedStringId" - ), "string" + new WrappedStringId( "embeddedStringId" ), + "string" ); - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {WrappedStringId.class, ProtectedConstructorEntity.class}; - } - - @Test - @Priority(10) - public void initData() { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - em.persist( testEntity ); - em.getTransaction().commit(); - em.close(); + scope.inTransaction( em -> { + em.persist( testEntity ); + } ); } @Test - public void testAuditEntityInstantiation() { - List result = getAuditReader().createQuery() - .forEntitiesAtRevision( ProtectedConstructorEntity.class, 1 ) - .getResultList(); - Assert.assertEquals( Arrays.asList( testEntity ), result ); + public void testAuditEntityInstantiation(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + List result = auditReader.createQuery() + .forEntitiesAtRevision( ProtectedConstructorEntity.class, 1 ) + .getResultList(); + assertEquals( Arrays.asList( testEntity ), result ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/ChildAuditing.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/ChildAuditing.java index 573745c52a03..8772707f1739 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/ChildAuditing.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/ChildAuditing.java @@ -5,70 +5,73 @@ package org.hibernate.orm.test.envers.integration.inheritance.joined; import java.util.Arrays; -import jakarta.persistence.EntityManager; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; -import org.junit.Test; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Adam Warski (adam at warski dot org) */ -public class ChildAuditing extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {ChildEntity.class, ParentEntity.class}) +public class ChildAuditing { private Integer id1; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {ChildEntity.class, ParentEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { id1 = 1; // Rev 1 - em.getTransaction().begin(); - ChildEntity ce = new ChildEntity( id1, "x", 1l ); - em.persist( ce ); - em.getTransaction().commit(); + scope.inTransaction( em -> { + ChildEntity ce = new ChildEntity( id1, "x", 1l ); + em.persist( ce ); + } ); // Rev 2 - em.getTransaction().begin(); - ce = em.find( ChildEntity.class, id1 ); - ce.setData( "y" ); - ce.setNumVal( 2l ); - em.getTransaction().commit(); + scope.inTransaction( em -> { + ChildEntity ce = em.find( ChildEntity.class, id1 ); + ce.setData( "y" ); + ce.setNumVal( 2l ); + } ); } @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( ChildEntity.class, id1 ) ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + assertEquals( Arrays.asList( 1, 2 ), AuditReaderFactory.get( em ).getRevisions( ChildEntity.class, id1 ) ); + } ); } @Test - public void testHistoryOfChildId1() { + public void testHistoryOfChildId1(EntityManagerFactoryScope scope) { ChildEntity ver1 = new ChildEntity( id1, "x", 1l ); ChildEntity ver2 = new ChildEntity( id1, "y", 2l ); - assert getAuditReader().find( ChildEntity.class, id1, 1 ).equals( ver1 ); - assert getAuditReader().find( ChildEntity.class, id1, 2 ).equals( ver2 ); + scope.inEntityManager( em -> { + var auditReader = AuditReaderFactory.get( em ); + assertEquals( ver1, auditReader.find( ChildEntity.class, id1, 1 ) ); + assertEquals( ver2, auditReader.find( ChildEntity.class, id1, 2 ) ); - assert getAuditReader().find( ParentEntity.class, id1, 1 ).equals( ver1 ); - assert getAuditReader().find( ParentEntity.class, id1, 2 ).equals( ver2 ); + assertEquals( ver1, auditReader.find( ParentEntity.class, id1, 1 ) ); + assertEquals( ver2, auditReader.find( ParentEntity.class, id1, 2 ) ); + } ); } @Test - public void testPolymorphicQuery() { + public void testPolymorphicQuery(EntityManagerFactoryScope scope) { ChildEntity childVer1 = new ChildEntity( id1, "x", 1l ); - assert getAuditReader().createQuery().forEntitiesAtRevision( ChildEntity.class, 1 ).getSingleResult() - .equals( childVer1 ); - - assert getAuditReader().createQuery().forEntitiesAtRevision( ParentEntity.class, 1 ).getSingleResult() - .equals( childVer1 ); + scope.inEntityManager( em -> { + var auditReader = AuditReaderFactory.get( em ); + assertEquals( childVer1, auditReader.createQuery().forEntitiesAtRevision( ChildEntity.class, 1 ).getSingleResult() ); + assertEquals( childVer1, auditReader.createQuery().forEntitiesAtRevision( ParentEntity.class, 1 ).getSingleResult() ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/ChildNullAuditing.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/ChildNullAuditing.java index b5215b287a19..cf93f6430b7b 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/ChildNullAuditing.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/ChildNullAuditing.java @@ -5,70 +5,73 @@ package org.hibernate.orm.test.envers.integration.inheritance.joined; import java.util.Arrays; -import jakarta.persistence.EntityManager; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; -import org.junit.Test; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Adam Warski (adam at warski dot org) */ -public class ChildNullAuditing extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {ChildEntity.class, ParentEntity.class}) +public class ChildNullAuditing { private Integer id1; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {ChildEntity.class, ParentEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { id1 = 1; // Rev 1 - em.getTransaction().begin(); - ChildEntity ce = new ChildEntity( id1, "x", null ); - em.persist( ce ); - em.getTransaction().commit(); + scope.inTransaction( em -> { + ChildEntity ce = new ChildEntity( id1, "x", null ); + em.persist( ce ); + } ); // Rev 2 - em.getTransaction().begin(); - ce = em.find( ChildEntity.class, id1 ); - ce.setData( null ); - ce.setNumVal( 2l ); - em.getTransaction().commit(); + scope.inTransaction( em -> { + ChildEntity ce = em.find( ChildEntity.class, id1 ); + ce.setData( null ); + ce.setNumVal( 2l ); + } ); } @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( ChildEntity.class, id1 ) ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + assertEquals( Arrays.asList( 1, 2 ), AuditReaderFactory.get( em ).getRevisions( ChildEntity.class, id1 ) ); + } ); } @Test - public void testHistoryOfChildId1() { + public void testHistoryOfChildId1(EntityManagerFactoryScope scope) { ChildEntity ver1 = new ChildEntity( id1, "x", null ); ChildEntity ver2 = new ChildEntity( id1, null, 2l ); - assert getAuditReader().find( ChildEntity.class, id1, 1 ).equals( ver1 ); - assert getAuditReader().find( ChildEntity.class, id1, 2 ).equals( ver2 ); + scope.inEntityManager( em -> { + var auditReader = AuditReaderFactory.get( em ); + assertEquals( ver1, auditReader.find( ChildEntity.class, id1, 1 ) ); + assertEquals( ver2, auditReader.find( ChildEntity.class, id1, 2 ) ); - assert getAuditReader().find( ParentEntity.class, id1, 1 ).equals( ver1 ); - assert getAuditReader().find( ParentEntity.class, id1, 2 ).equals( ver2 ); + assertEquals( ver1, auditReader.find( ParentEntity.class, id1, 1 ) ); + assertEquals( ver2, auditReader.find( ParentEntity.class, id1, 2 ) ); + } ); } @Test - public void testPolymorphicQuery() { + public void testPolymorphicQuery(EntityManagerFactoryScope scope) { ChildEntity childVer1 = new ChildEntity( id1, "x", null ); - assert getAuditReader().createQuery().forEntitiesAtRevision( ChildEntity.class, 1 ).getSingleResult() - .equals( childVer1 ); - - assert getAuditReader().createQuery().forEntitiesAtRevision( ParentEntity.class, 1 ).getSingleResult() - .equals( childVer1 ); + scope.inEntityManager( em -> { + var auditReader = AuditReaderFactory.get( em ); + assertEquals( childVer1, auditReader.createQuery().forEntitiesAtRevision( ChildEntity.class, 1 ).getSingleResult() ); + assertEquals( childVer1, auditReader.createQuery().forEntitiesAtRevision( ParentEntity.class, 1 ).getSingleResult() ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/DiscriminatorJoinedInheritanceTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/DiscriminatorJoinedInheritanceTest.java index efd7252d0eb0..f1f3a064dbcd 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/DiscriminatorJoinedInheritanceTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/DiscriminatorJoinedInheritanceTest.java @@ -11,7 +11,6 @@ import jakarta.persistence.DiscriminatorColumn; import jakarta.persistence.DiscriminatorValue; import jakarta.persistence.Entity; -import jakarta.persistence.EntityManager; import jakarta.persistence.Id; import jakarta.persistence.Inheritance; import jakarta.persistence.InheritanceType; @@ -19,70 +18,68 @@ import jakarta.persistence.Table; import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Chris Cranford */ @JiraKey(value = "HHH-11133") -public class DiscriminatorJoinedInheritanceTest extends BaseEnversJPAFunctionalTestCase { - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { ParentEntity.class, ChildEntity.class, ChildListHolder.class }; - } - - @Test - @Priority(10) - public void initData() { - EntityManager entityManager = getEntityManager(); - try { +@EnversTest +@Jpa(annotatedClasses = { + DiscriminatorJoinedInheritanceTest.ParentEntity.class, + DiscriminatorJoinedInheritanceTest.ChildEntity.class, + DiscriminatorJoinedInheritanceTest.ChildListHolder.class +}) +public class DiscriminatorJoinedInheritanceTest { + + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + scope.inTransaction( em -> { ChildEntity childEntity = new ChildEntity( 1, "Child" ); - entityManager.getTransaction().begin(); - entityManager.persist( childEntity ); - entityManager.getTransaction().commit(); + em.persist( childEntity ); + } ); + scope.inTransaction( em -> { + ChildEntity childEntity = em.find( ChildEntity.class, 1 ); ChildListHolder holder = new ChildListHolder(); holder.setId( 1 ); holder.setChildren( Arrays.asList( childEntity ) ); - entityManager.getTransaction().begin(); - entityManager.persist( holder ); - entityManager.getTransaction().commit(); - - } - catch ( Exception e ) { - if ( entityManager.getTransaction().isActive() ) { - entityManager.getTransaction().rollback(); - } - throw e; - } - finally { - entityManager.close(); - } + em.persist( holder ); + } ); } @Test - public void testRevisionCounts() { - assertEquals( Arrays.asList( 1 ), getAuditReader().getRevisions( ChildEntity.class, 1 ) ); - assertEquals( Arrays.asList( 2 ), getAuditReader().getRevisions( ChildListHolder.class, 1 ) ); + public void testRevisionCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1 ), auditReader.getRevisions( ChildEntity.class, 1 ) ); + assertEquals( Arrays.asList( 2 ), auditReader.getRevisions( ChildListHolder.class, 1 ) ); + } ); } @Test - public void testConfiguredDiscriminatorValue() { - ChildEntity entity = getAuditReader().find( ChildEntity.class, 1, 1 ); - assertEquals( "ce", entity.getType() ); + public void testConfiguredDiscriminatorValue(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + ChildEntity entity = AuditReaderFactory.get( em ).find( ChildEntity.class, 1, 1 ); + assertEquals( "ce", entity.getType() ); + } ); } @Test - public void testDiscriminatorValuesViaRelatedEntityQuery() { - ChildListHolder holder = getAuditReader().find( ChildListHolder.class, 1, 2 ); - assertEquals( 1, holder.getChildren().size() ); - assertEquals( "ce", holder.getChildren().get( 0 ).getType() ); + public void testDiscriminatorValuesViaRelatedEntityQuery(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + ChildListHolder holder = AuditReaderFactory.get( em ).find( ChildListHolder.class, 1, 2 ); + assertEquals( 1, holder.getChildren().size() ); + assertEquals( "ce", holder.getChildren().get( 0 ).getType() ); + } ); } @Entity(name = "ParentEntity") diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/ParentAuditing.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/ParentAuditing.java index dd29c543fee8..b2d64bea2f11 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/ParentAuditing.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/ParentAuditing.java @@ -5,71 +5,79 @@ package org.hibernate.orm.test.envers.integration.inheritance.joined; import java.util.Arrays; -import jakarta.persistence.EntityManager; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; -import org.junit.Test; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNull; /** * @author Adam Warski (adam at warski dot org) */ -public class ParentAuditing extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {ChildEntity.class, ParentEntity.class}) +public class ParentAuditing { private Integer id1; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {ChildEntity.class, ParentEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { id1 = 1; // Rev 1 - em.getTransaction().begin(); - ParentEntity pe = new ParentEntity( id1, "x" ); - em.persist( pe ); - em.getTransaction().commit(); + scope.inTransaction( em -> { + ParentEntity pe = new ParentEntity( id1, "x" ); + em.persist( pe ); + } ); // Rev 2 - em.getTransaction().begin(); - pe = em.find( ParentEntity.class, id1 ); - pe.setData( "y" ); - em.getTransaction().commit(); + scope.inTransaction( em -> { + ParentEntity pe = em.find( ParentEntity.class, id1 ); + pe.setData( "y" ); + } ); } @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( ParentEntity.class, id1 ) ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + assertEquals( Arrays.asList( 1, 2 ), AuditReaderFactory.get( em ).getRevisions( ParentEntity.class, id1 ) ); + } ); } @Test - public void testHistoryOfChildId1() { - assert getAuditReader().find( ChildEntity.class, id1, 1 ) == null; - assert getAuditReader().find( ChildEntity.class, id1, 2 ) == null; + public void testHistoryOfChildId1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + var auditReader = AuditReaderFactory.get( em ); + assertNull( auditReader.find( ChildEntity.class, id1, 1 ) ); + assertNull( auditReader.find( ChildEntity.class, id1, 2 ) ); + } ); } @Test - public void testHistoryOfParentId1() { + public void testHistoryOfParentId1(EntityManagerFactoryScope scope) { ParentEntity ver1 = new ParentEntity( id1, "x" ); ParentEntity ver2 = new ParentEntity( id1, "y" ); - assert getAuditReader().find( ParentEntity.class, id1, 1 ).equals( ver1 ); - assert getAuditReader().find( ParentEntity.class, id1, 2 ).equals( ver2 ); + scope.inEntityManager( em -> { + var auditReader = AuditReaderFactory.get( em ); + assertEquals( ver1, auditReader.find( ParentEntity.class, id1, 1 ) ); + assertEquals( ver2, auditReader.find( ParentEntity.class, id1, 2 ) ); + } ); } @Test - public void testPolymorphicQuery() { + public void testPolymorphicQuery(EntityManagerFactoryScope scope) { ParentEntity parentVer1 = new ParentEntity( id1, "x" ); - assert getAuditReader().createQuery().forEntitiesAtRevision( ParentEntity.class, 1 ).getSingleResult() - .equals( parentVer1 ); - assert getAuditReader().createQuery().forEntitiesAtRevision( ChildEntity.class, 1 ) - .getResultList().size() == 0; + scope.inEntityManager( em -> { + var auditReader = AuditReaderFactory.get( em ); + assertEquals( parentVer1, auditReader.createQuery().forEntitiesAtRevision( ParentEntity.class, 1 ).getSingleResult() ); + assertEquals( 0, auditReader.createQuery().forEntitiesAtRevision( ChildEntity.class, 1 ).getResultList().size() ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/childrelation/ChildReferencing.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/childrelation/ChildReferencing.java index cc481020291e..b710c89f6778 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/childrelation/ChildReferencing.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/childrelation/ChildReferencing.java @@ -5,103 +5,111 @@ package org.hibernate.orm.test.envers.integration.inheritance.joined.childrelation; import java.util.Arrays; -import jakarta.persistence.EntityManager; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.orm.test.envers.tools.TestTools; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; -import org.junit.Test; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Adam Warski (adam at warski dot org) */ -public class ChildReferencing extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {ChildIngEntity.class, ParentNotIngEntity.class, ReferencedEntity.class}) +public class ChildReferencing { private Integer re_id1; private Integer re_id2; private Integer c_id; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {ChildIngEntity.class, ParentNotIngEntity.class, ReferencedEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { re_id1 = 1; re_id2 = 10; c_id = 100; // Rev 1 - em.getTransaction().begin(); - - ReferencedEntity re1 = new ReferencedEntity( re_id1 ); - em.persist( re1 ); + scope.inTransaction( em -> { + ReferencedEntity re1 = new ReferencedEntity( re_id1 ); + em.persist( re1 ); - ReferencedEntity re2 = new ReferencedEntity( re_id2 ); - em.persist( re2 ); - - em.getTransaction().commit(); + ReferencedEntity re2 = new ReferencedEntity( re_id2 ); + em.persist( re2 ); + } ); // Rev 2 - em.getTransaction().begin(); - - re1 = em.find( ReferencedEntity.class, re_id1 ); - - ChildIngEntity cie = new ChildIngEntity( c_id, "y", 1l ); - cie.setReferenced( re1 ); - em.persist( cie ); - c_id = cie.getId(); + scope.inTransaction( em -> { + ReferencedEntity re1 = em.find( ReferencedEntity.class, re_id1 ); - em.getTransaction().commit(); + ChildIngEntity cie = new ChildIngEntity( c_id, "y", 1l ); + cie.setReferenced( re1 ); + em.persist( cie ); + c_id = cie.getId(); + } ); // Rev 3 - em.getTransaction().begin(); - - re2 = em.find( ReferencedEntity.class, re_id2 ); - cie = em.find( ChildIngEntity.class, c_id ); - - cie.setReferenced( re2 ); + scope.inTransaction( em -> { + ReferencedEntity re2 = em.find( ReferencedEntity.class, re_id2 ); + ChildIngEntity cie = em.find( ChildIngEntity.class, c_id ); - em.getTransaction().commit(); + cie.setReferenced( re2 ); + } ); } @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2, 3 ).equals( getAuditReader().getRevisions( ReferencedEntity.class, re_id1 ) ); - assert Arrays.asList( 1, 3 ).equals( getAuditReader().getRevisions( ReferencedEntity.class, re_id2 ) ); - assert Arrays.asList( 2, 3 ).equals( getAuditReader().getRevisions( ChildIngEntity.class, c_id ) ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1, 2, 3 ), auditReader.getRevisions( ReferencedEntity.class, re_id1 ) ); + assertEquals( Arrays.asList( 1, 3 ), auditReader.getRevisions( ReferencedEntity.class, re_id2 ) ); + assertEquals( Arrays.asList( 2, 3 ), auditReader.getRevisions( ChildIngEntity.class, c_id ) ); + } ); } @Test - public void testHistoryOfReferencedCollection1() { - assert getAuditReader().find( ReferencedEntity.class, re_id1, 1 ).getReferencing().size() == 0; - assert getAuditReader().find( ReferencedEntity.class, re_id1, 2 ).getReferencing().equals( - TestTools.makeSet( new ChildIngEntity( c_id, "y", 1l ) ) - ); - assert getAuditReader().find( ReferencedEntity.class, re_id1, 3 ).getReferencing().size() == 0; + public void testHistoryOfReferencedCollection1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( 0, auditReader.find( ReferencedEntity.class, re_id1, 1 ).getReferencing().size() ); + assertEquals( + TestTools.makeSet( new ChildIngEntity( c_id, "y", 1l ) ), + auditReader.find( ReferencedEntity.class, re_id1, 2 ).getReferencing() + ); + assertEquals( 0, auditReader.find( ReferencedEntity.class, re_id1, 3 ).getReferencing().size() ); + } ); } @Test - public void testHistoryOfReferencedCollection2() { - assert getAuditReader().find( ReferencedEntity.class, re_id2, 1 ).getReferencing().size() == 0; - assert getAuditReader().find( ReferencedEntity.class, re_id2, 2 ).getReferencing().size() == 0; - assert getAuditReader().find( ReferencedEntity.class, re_id2, 3 ).getReferencing().equals( - TestTools.makeSet( new ChildIngEntity( c_id, "y", 1l ) ) - ); + public void testHistoryOfReferencedCollection2(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( 0, auditReader.find( ReferencedEntity.class, re_id2, 1 ).getReferencing().size() ); + assertEquals( 0, auditReader.find( ReferencedEntity.class, re_id2, 2 ).getReferencing().size() ); + assertEquals( + TestTools.makeSet( new ChildIngEntity( c_id, "y", 1l ) ), + auditReader.find( ReferencedEntity.class, re_id2, 3 ).getReferencing() + ); + } ); } @Test - public void testChildHistory() { - assert getAuditReader().find( ChildIngEntity.class, c_id, 1 ) == null; - assert getAuditReader().find( ChildIngEntity.class, c_id, 2 ).getReferenced().equals( - new ReferencedEntity( re_id1 ) - ); - assert getAuditReader().find( ChildIngEntity.class, c_id, 3 ).getReferenced().equals( - new ReferencedEntity( re_id2 ) - ); + public void testChildHistory(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( null, auditReader.find( ChildIngEntity.class, c_id, 1 ) ); + assertEquals( + new ReferencedEntity( re_id1 ), + auditReader.find( ChildIngEntity.class, c_id, 2 ).getReferenced() + ); + assertEquals( + new ReferencedEntity( re_id2 ), + auditReader.find( ChildIngEntity.class, c_id, 3 ).getReferenced() + ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/childrelation/ReferencedEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/childrelation/ReferencedEntity.java index 0b6fe6d04adf..e607af5179ab 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/childrelation/ReferencedEntity.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/childrelation/ReferencedEntity.java @@ -56,7 +56,7 @@ public boolean equals(Object o) { ReferencedEntity that = (ReferencedEntity) o; - if ( id != null ? !id.equals( that.id ) : that.id != null ) { + if ( id != null ? !id.equals( that.getId() ) : that.getId() != null ) { return false; } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/emptychild/EmptyChildAuditing.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/emptychild/EmptyChildAuditing.java index bdc517381392..2d762ba5ffd4 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/emptychild/EmptyChildAuditing.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/emptychild/EmptyChildAuditing.java @@ -5,69 +5,73 @@ package org.hibernate.orm.test.envers.integration.inheritance.joined.emptychild; import java.util.Arrays; -import jakarta.persistence.EntityManager; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; -import org.junit.Test; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Adam Warski (adam at warski dot org) */ -public class EmptyChildAuditing extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {EmptyChildEntity.class, ParentEntity.class}) +public class EmptyChildAuditing { private Integer id1; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {EmptyChildEntity.class, ParentEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { id1 = 1; // Rev 1 - em.getTransaction().begin(); - EmptyChildEntity pe = new EmptyChildEntity( id1, "x" ); - em.persist( pe ); - em.getTransaction().commit(); + scope.inTransaction( em -> { + EmptyChildEntity pe = new EmptyChildEntity( id1, "x" ); + em.persist( pe ); + } ); // Rev 2 - em.getTransaction().begin(); - pe = em.find( EmptyChildEntity.class, id1 ); - pe.setData( "y" ); - em.getTransaction().commit(); + scope.inTransaction( em -> { + EmptyChildEntity pe = em.find( EmptyChildEntity.class, id1 ); + pe.setData( "y" ); + } ); } @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( EmptyChildEntity.class, id1 ) ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + assertEquals( Arrays.asList( 1, 2 ), AuditReaderFactory.get( em ).getRevisions( EmptyChildEntity.class, id1 ) ); + } ); } @Test - public void testHistoryOfChildId1() { + public void testHistoryOfChildId1(EntityManagerFactoryScope scope) { EmptyChildEntity ver1 = new EmptyChildEntity( id1, "x" ); EmptyChildEntity ver2 = new EmptyChildEntity( id1, "y" ); - assert getAuditReader().find( EmptyChildEntity.class, id1, 1 ).equals( ver1 ); - assert getAuditReader().find( EmptyChildEntity.class, id1, 2 ).equals( ver2 ); + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( ver1, auditReader.find( EmptyChildEntity.class, id1, 1 ) ); + assertEquals( ver2, auditReader.find( EmptyChildEntity.class, id1, 2 ) ); - assert getAuditReader().find( ParentEntity.class, id1, 1 ).equals( ver1 ); - assert getAuditReader().find( ParentEntity.class, id1, 2 ).equals( ver2 ); + assertEquals( ver1, auditReader.find( ParentEntity.class, id1, 1 ) ); + assertEquals( ver2, auditReader.find( ParentEntity.class, id1, 2 ) ); + } ); } @Test - public void testPolymorphicQuery() { + public void testPolymorphicQuery(EntityManagerFactoryScope scope) { EmptyChildEntity childVer1 = new EmptyChildEntity( id1, "x" ); - assert getAuditReader().createQuery().forEntitiesAtRevision( EmptyChildEntity.class, 1 ).getSingleResult() - .equals( childVer1 ); + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( childVer1, auditReader.createQuery().forEntitiesAtRevision( EmptyChildEntity.class, 1 ).getSingleResult() ); - assert getAuditReader().createQuery().forEntitiesAtRevision( ParentEntity.class, 1 ).getSingleResult() - .equals( childVer1 ); + assertEquals( childVer1, auditReader.createQuery().forEntitiesAtRevision( ParentEntity.class, 1 ).getSingleResult() ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/notownedrelation/NotOwnedBidirectional.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/notownedrelation/NotOwnedBidirectional.java index c186d8b97242..760feb31daaf 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/notownedrelation/NotOwnedBidirectional.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/notownedrelation/NotOwnedBidirectional.java @@ -5,93 +5,100 @@ package org.hibernate.orm.test.envers.integration.inheritance.joined.notownedrelation; import java.util.Arrays; -import jakarta.persistence.EntityManager; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.orm.test.envers.tools.TestTools; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; -import org.junit.Test; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Adam Warski (adam at warski dot org) */ -public class NotOwnedBidirectional extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {Address.class, Contact.class, PersonalContact.class}) +public class NotOwnedBidirectional { private Long pc_id; private Long a1_id; private Long a2_id; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {Address.class, Contact.class, PersonalContact.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { pc_id = 1l; a1_id = 10l; a2_id = 100l; // Rev 1 - em.getTransaction().begin(); - - PersonalContact pc = new PersonalContact( pc_id, "e", "f" ); + scope.inTransaction( em -> { + PersonalContact pc = new PersonalContact( pc_id, "e", "f" ); - Address a1 = new Address( a1_id, "a1" ); - a1.setContact( pc ); + Address a1 = new Address( a1_id, "a1" ); + a1.setContact( pc ); - em.persist( pc ); - em.persist( a1 ); - - em.getTransaction().commit(); + em.persist( pc ); + em.persist( a1 ); + } ); // Rev 2 - em.getTransaction().begin(); - - pc = em.find( PersonalContact.class, pc_id ); - - Address a2 = new Address( a2_id, "a2" ); - a2.setContact( pc ); + scope.inTransaction( em -> { + PersonalContact pc = em.find( PersonalContact.class, pc_id ); - em.persist( a2 ); + Address a2 = new Address( a2_id, "a2" ); + a2.setContact( pc ); - em.getTransaction().commit(); + em.persist( a2 ); + } ); } @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( Contact.class, pc_id ) ); - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( PersonalContact.class, pc_id ) ); - - assert Arrays.asList( 1 ).equals( getAuditReader().getRevisions( Address.class, a1_id ) ); - assert Arrays.asList( 1 ).equals( getAuditReader().getRevisions( Address.class, a1_id ) ); - - assert Arrays.asList( 2 ).equals( getAuditReader().getRevisions( Address.class, a2_id ) ); - assert Arrays.asList( 2 ).equals( getAuditReader().getRevisions( Address.class, a2_id ) ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1, 2 ), auditReader.getRevisions( Contact.class, pc_id ) ); + assertEquals( Arrays.asList( 1, 2 ), auditReader.getRevisions( PersonalContact.class, pc_id ) ); + + assertEquals( Arrays.asList( 1 ), auditReader.getRevisions( Address.class, a1_id ) ); + assertEquals( Arrays.asList( 1 ), auditReader.getRevisions( Address.class, a1_id ) ); + + assertEquals( Arrays.asList( 2 ), auditReader.getRevisions( Address.class, a2_id ) ); + assertEquals( Arrays.asList( 2 ), auditReader.getRevisions( Address.class, a2_id ) ); + } ); } @Test - public void testHistoryOfContact() { - assert getAuditReader().find( Contact.class, pc_id, 1 ).getAddresses().equals( - TestTools.makeSet( new Address( a1_id, "a1" ) ) - ); - - assert getAuditReader().find( Contact.class, pc_id, 2 ).getAddresses().equals( - TestTools.makeSet( new Address( a1_id, "a1" ), new Address( a2_id, "a2" ) ) - ); + public void testHistoryOfContact(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( + TestTools.makeSet( new Address( a1_id, "a1" ) ), + auditReader.find( Contact.class, pc_id, 1 ).getAddresses() + ); + + assertEquals( + TestTools.makeSet( new Address( a1_id, "a1" ), new Address( a2_id, "a2" ) ), + auditReader.find( Contact.class, pc_id, 2 ).getAddresses() + ); + } ); } @Test - public void testHistoryOfPersonalContact() { - assert getAuditReader().find( PersonalContact.class, pc_id, 1 ).getAddresses().equals( - TestTools.makeSet( new Address( a1_id, "a1" ) ) - ); - - assert getAuditReader().find( PersonalContact.class, pc_id, 2 ).getAddresses().equals( - TestTools.makeSet( new Address( a1_id, "a1" ), new Address( a2_id, "a2" ) ) - ); + public void testHistoryOfPersonalContact(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( + TestTools.makeSet( new Address( a1_id, "a1" ) ), + auditReader.find( PersonalContact.class, pc_id, 1 ).getAddresses() + ); + + assertEquals( + TestTools.makeSet( new Address( a1_id, "a1" ), new Address( a2_id, "a2" ) ), + auditReader.find( PersonalContact.class, pc_id, 2 ).getAddresses() + ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/primarykeyjoin/ChildPrimaryKeyJoinAuditing.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/primarykeyjoin/ChildPrimaryKeyJoinAuditing.java index 2c23eb3ab643..9f4878781422 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/primarykeyjoin/ChildPrimaryKeyJoinAuditing.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/primarykeyjoin/ChildPrimaryKeyJoinAuditing.java @@ -5,85 +5,104 @@ package org.hibernate.orm.test.envers.integration.inheritance.joined.primarykeyjoin; import java.util.Arrays; +import java.util.List; -import jakarta.persistence.EntityManager; - +import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.mapping.Column; import org.hibernate.mapping.PersistentClass; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.mapping.Selectable; import org.hibernate.orm.test.envers.integration.inheritance.joined.ParentEntity; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.DomainModel; +import org.hibernate.testing.orm.junit.DomainModelScope; +import org.hibernate.testing.orm.junit.SessionFactoryScope; +import org.hibernate.testing.orm.junit.SessionFactory; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; -import org.junit.Assert; -import org.junit.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Adam Warski (adam at warski dot org) */ -public class ChildPrimaryKeyJoinAuditing extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@DomainModel(annotatedClasses = {ChildPrimaryKeyJoinEntity.class, ParentEntity.class}) +@SessionFactory +public class ChildPrimaryKeyJoinAuditing { private Integer id1; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {ChildPrimaryKeyJoinEntity.class, ParentEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - + @BeforeClassTemplate + public void initData(SessionFactoryScope scope) { id1 = 1; // Rev 1 - em.getTransaction().begin(); - ChildPrimaryKeyJoinEntity ce = new ChildPrimaryKeyJoinEntity( id1, "x", 1l ); - em.persist( ce ); - em.getTransaction().commit(); + scope.inTransaction( session -> { + ChildPrimaryKeyJoinEntity ce = new ChildPrimaryKeyJoinEntity( id1, "x", 1l ); + session.persist( ce ); + } ); // Rev 2 - em.getTransaction().begin(); - ce = em.find( ChildPrimaryKeyJoinEntity.class, id1 ); - ce.setData( "y" ); - ce.setNumVal( 2l ); - em.getTransaction().commit(); + scope.inTransaction( session -> { + ChildPrimaryKeyJoinEntity ce = session.find( ChildPrimaryKeyJoinEntity.class, id1 ); + ce.setData( "y" ); + ce.setNumVal( 2l ); + } ); } @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( ChildPrimaryKeyJoinEntity.class, id1 ) ); + public void testRevisionsCounts(SessionFactoryScope scope) { + scope.inSession( session -> { + assertEquals( Arrays.asList( 1, 2 ), AuditReaderFactory.get( session ).getRevisions( ChildPrimaryKeyJoinEntity.class, id1 ) ); + } ); } @Test - public void testHistoryOfChildId1() { + public void testHistoryOfChildId1(SessionFactoryScope scope) { ChildPrimaryKeyJoinEntity ver1 = new ChildPrimaryKeyJoinEntity( id1, "x", 1l ); ChildPrimaryKeyJoinEntity ver2 = new ChildPrimaryKeyJoinEntity( id1, "y", 2l ); - assert getAuditReader().find( ChildPrimaryKeyJoinEntity.class, id1, 1 ).equals( ver1 ); - assert getAuditReader().find( ChildPrimaryKeyJoinEntity.class, id1, 2 ).equals( ver2 ); + scope.inSession( session -> { + final var auditReader = AuditReaderFactory.get( session ); + assertEquals( ver1, auditReader.find( ChildPrimaryKeyJoinEntity.class, id1, 1 ) ); + assertEquals( ver2, auditReader.find( ChildPrimaryKeyJoinEntity.class, id1, 2 ) ); - assert getAuditReader().find( ParentEntity.class, id1, 1 ).equals( ver1 ); - assert getAuditReader().find( ParentEntity.class, id1, 2 ).equals( ver2 ); + assertEquals( ver1, auditReader.find( ParentEntity.class, id1, 1 ) ); + assertEquals( ver2, auditReader.find( ParentEntity.class, id1, 2 ) ); + } ); } @Test - public void testPolymorphicQuery() { + public void testPolymorphicQuery(SessionFactoryScope scope) { ChildPrimaryKeyJoinEntity childVer1 = new ChildPrimaryKeyJoinEntity( id1, "x", 1l ); - assert getAuditReader().createQuery() - .forEntitiesAtRevision( ChildPrimaryKeyJoinEntity.class, 1 ) - .getSingleResult() - .equals( childVer1 ); + scope.inSession( session -> { + final var auditReader = AuditReaderFactory.get( session ); + assertEquals( childVer1, auditReader.createQuery() + .forEntitiesAtRevision( ChildPrimaryKeyJoinEntity.class, 1 ) + .getSingleResult() ); - assert getAuditReader().createQuery().forEntitiesAtRevision( ParentEntity.class, 1 ).getSingleResult() - .equals( childVer1 ); + assertEquals( childVer1, auditReader.createQuery().forEntitiesAtRevision( ParentEntity.class, 1 ).getSingleResult() ); + } ); } @Test - public void testChildIdColumnName() { + public void testChildIdColumnName(DomainModelScope scope) { // Hibernate now sorts columns that are part of the key and therefore this test needs to test // for the existence of the specific key column rather than the expectation that is exists at // a specific order in the iterator. - final PersistentClass persistentClass = metadata().getEntityBinding( ChildPrimaryKeyJoinEntity.class.getName() + "_AUD" ); - Assert.assertNotNull( getColumnFromIteratorByName( persistentClass.getKey().getSelectables(), "other_id" ) ); + final PersistentClass persistentClass = scope.getDomainModel().getEntityBinding( ChildPrimaryKeyJoinEntity.class.getName() + "_AUD" ); + Assertions.assertNotNull( getColumnFromIteratorByName( persistentClass.getKey().getSelectables(), "other_id" ) ); + } + + private static Column getColumnFromIteratorByName(List selectables, String columnName) { + for ( Selectable s : selectables ) { + Column column = (Column) s; + if ( column.getName().equals( columnName) ) { + return column; + } + } + return null; } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/relation/PolymorphicCollection.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/relation/PolymorphicCollection.java index bb663885c5a7..bf3ec9294b0c 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/relation/PolymorphicCollection.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/relation/PolymorphicCollection.java @@ -5,84 +5,84 @@ package org.hibernate.orm.test.envers.integration.inheritance.joined.relation; import java.util.Arrays; -import jakarta.persistence.EntityManager; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.orm.test.envers.tools.TestTools; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; -import org.junit.Test; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Adam Warski (adam at warski dot org) */ -public class PolymorphicCollection extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {ChildIngEntity.class, ParentIngEntity.class, ReferencedEntity.class}) +public class PolymorphicCollection { private Integer ed_id1; private Integer c_id; private Integer p_id; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {ChildIngEntity.class, ParentIngEntity.class, ReferencedEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { ed_id1 = 1; p_id = 10; c_id = 100; // Rev 1 - em.getTransaction().begin(); - - ReferencedEntity re = new ReferencedEntity( ed_id1 ); - em.persist( re ); - - em.getTransaction().commit(); + scope.inTransaction( em -> { + ReferencedEntity re = new ReferencedEntity( ed_id1 ); + em.persist( re ); + } ); // Rev 2 - em.getTransaction().begin(); - - re = em.find( ReferencedEntity.class, ed_id1 ); - - ParentIngEntity pie = new ParentIngEntity( p_id, "x" ); - pie.setReferenced( re ); - em.persist( pie ); - p_id = pie.getId(); + scope.inTransaction( em -> { + ReferencedEntity re = em.find( ReferencedEntity.class, ed_id1 ); - em.getTransaction().commit(); + ParentIngEntity pie = new ParentIngEntity( p_id, "x" ); + pie.setReferenced( re ); + em.persist( pie ); + p_id = pie.getId(); + } ); // Rev 3 - em.getTransaction().begin(); - - re = em.find( ReferencedEntity.class, ed_id1 ); - - ChildIngEntity cie = new ChildIngEntity( c_id, "y", 1l ); - cie.setReferenced( re ); - em.persist( cie ); - c_id = cie.getId(); - - em.getTransaction().commit(); + scope.inTransaction( em -> { + ReferencedEntity re = em.find( ReferencedEntity.class, ed_id1 ); + + ChildIngEntity cie = new ChildIngEntity( c_id, "y", 1l ); + cie.setReferenced( re ); + em.persist( cie ); + c_id = cie.getId(); + } ); } @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2, 3 ).equals( getAuditReader().getRevisions( ReferencedEntity.class, ed_id1 ) ); - assert Arrays.asList( 2 ).equals( getAuditReader().getRevisions( ParentIngEntity.class, p_id ) ); - assert Arrays.asList( 3 ).equals( getAuditReader().getRevisions( ChildIngEntity.class, c_id ) ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1, 2, 3 ), auditReader.getRevisions( ReferencedEntity.class, ed_id1 ) ); + assertEquals( Arrays.asList( 2 ), auditReader.getRevisions( ParentIngEntity.class, p_id ) ); + assertEquals( Arrays.asList( 3 ), auditReader.getRevisions( ChildIngEntity.class, c_id ) ); + } ); } @Test - public void testHistoryOfReferencedCollection() { - assert getAuditReader().find( ReferencedEntity.class, ed_id1, 1 ).getReferencing().size() == 0; - assert getAuditReader().find( ReferencedEntity.class, ed_id1, 2 ).getReferencing().equals( - TestTools.makeSet( new ParentIngEntity( p_id, "x" ) ) - ); - assert getAuditReader().find( ReferencedEntity.class, ed_id1, 3 ).getReferencing().equals( - TestTools.makeSet( new ParentIngEntity( p_id, "x" ), new ChildIngEntity( c_id, "y", 1l ) ) - ); + public void testHistoryOfReferencedCollection(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( 0, auditReader.find( ReferencedEntity.class, ed_id1, 1 ).getReferencing().size() ); + assertEquals( + TestTools.makeSet( new ParentIngEntity( p_id, "x" ) ), + auditReader.find( ReferencedEntity.class, ed_id1, 2 ).getReferencing() + ); + assertEquals( + TestTools.makeSet( new ParentIngEntity( p_id, "x" ), new ChildIngEntity( c_id, "y", 1l ) ), + auditReader.find( ReferencedEntity.class, ed_id1, 3 ).getReferencing() + ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/relation/unidirectional/UnidirectionalDoubleAbstract.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/relation/unidirectional/UnidirectionalDoubleAbstract.java index 26680cea6372..194b16825cb8 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/relation/unidirectional/UnidirectionalDoubleAbstract.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/joined/relation/unidirectional/UnidirectionalDoubleAbstract.java @@ -6,64 +6,67 @@ import java.util.Arrays; import java.util.Set; -import jakarta.persistence.EntityManager; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; -import org.junit.Test; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; /** * @author Adam Warski (adam at warski dot org) */ -public class UnidirectionalDoubleAbstract extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = { + AbstractContainedEntity.class, + AbstractSetEntity.class, + ContainedEntity.class, + SetEntity.class +}) +public class UnidirectionalDoubleAbstract { private Long cce1_id; private Integer cse1_id; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { - AbstractContainedEntity.class, - AbstractSetEntity.class, - ContainedEntity.class, - SetEntity.class - }; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Rev 1 - em.getTransaction().begin(); - - ContainedEntity cce1 = new ContainedEntity(); - em.persist( cce1 ); - - SetEntity cse1 = new SetEntity(); - cse1.getEntities().add( cce1 ); - em.persist( cse1 ); + scope.inTransaction( em -> { + ContainedEntity cce1 = new ContainedEntity(); + em.persist( cce1 ); - em.getTransaction().commit(); + SetEntity cse1 = new SetEntity(); + cse1.getEntities().add( cce1 ); + em.persist( cse1 ); - cce1_id = cce1.getId(); - cse1_id = cse1.getId(); + cce1_id = cce1.getId(); + cse1_id = cse1.getId(); + } ); } @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1 ).equals( getAuditReader().getRevisions( ContainedEntity.class, cce1_id ) ); - assert Arrays.asList( 1 ).equals( getAuditReader().getRevisions( SetEntity.class, cse1_id ) ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1 ), auditReader.getRevisions( ContainedEntity.class, cce1_id ) ); + assertEquals( Arrays.asList( 1 ), auditReader.getRevisions( SetEntity.class, cse1_id ) ); + } ); } @Test - public void testHistoryOfReferencedCollection() { - ContainedEntity cce1 = getEntityManager().find( ContainedEntity.class, cce1_id ); + public void testHistoryOfReferencedCollection(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + ContainedEntity cce1 = em.find( ContainedEntity.class, cce1_id ); - Set entities = getAuditReader().find( SetEntity.class, cse1_id, 1 ).getEntities(); - assert entities.size() == 1; - assert entities.iterator().next() instanceof ContainedEntity; - assert entities.contains( cce1 ); + final var auditReader = AuditReaderFactory.get( em ); + Set entities = auditReader.find( SetEntity.class, cse1_id, 1 ).getEntities(); + assertEquals( 1, entities.size() ); + assertTrue( entities.iterator().next() instanceof ContainedEntity ); + assertTrue( entities.contains( cce1 ) ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/mixed/MixedInheritanceStrategiesEntityTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/mixed/MixedInheritanceStrategiesEntityTest.java index fbc8d2b1c956..26123bcc46fe 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/mixed/MixedInheritanceStrategiesEntityTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/mixed/MixedInheritanceStrategiesEntityTest.java @@ -6,147 +6,148 @@ import java.util.Arrays; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.orm.test.envers.integration.inheritance.mixed.entities.AbstractActivity; import org.hibernate.orm.test.envers.integration.inheritance.mixed.entities.AbstractCheckActivity; import org.hibernate.orm.test.envers.integration.inheritance.mixed.entities.Activity; import org.hibernate.orm.test.envers.integration.inheritance.mixed.entities.ActivityId; import org.hibernate.orm.test.envers.integration.inheritance.mixed.entities.CheckInActivity; import org.hibernate.orm.test.envers.integration.inheritance.mixed.entities.NormalActivity; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; -import org.junit.Test; +import org.junit.jupiter.api.Test; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Michal Skowronek (mskowr at o2 pl) */ -public class MixedInheritanceStrategiesEntityTest extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = { + AbstractActivity.class, + AbstractCheckActivity.class, + CheckInActivity.class, + NormalActivity.class +}) +public class MixedInheritanceStrategiesEntityTest { private ActivityId id2; private ActivityId id1; private ActivityId id3; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { - AbstractActivity.class, - AbstractCheckActivity.class, - CheckInActivity.class, - NormalActivity.class - }; - } - - @Test - @Priority(10) - public void initData() { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { NormalActivity normalActivity = new NormalActivity(); id1 = new ActivityId( 1, 2 ); normalActivity.setId( id1 ); normalActivity.setSequenceNumber( 1 ); // Revision 1 - getEntityManager().getTransaction().begin(); - - getEntityManager().persist( normalActivity ); + scope.inTransaction( em -> { + em.persist( normalActivity ); + } ); - getEntityManager().getTransaction().commit(); // Revision 2 - getEntityManager().getTransaction().begin(); - - normalActivity = getEntityManager().find( NormalActivity.class, id1 ); - CheckInActivity checkInActivity = new CheckInActivity(); - id2 = new ActivityId( 2, 3 ); - checkInActivity.setId( id2 ); - checkInActivity.setSequenceNumber( 0 ); - checkInActivity.setDurationInMinutes( 30 ); - checkInActivity.setRelatedActivity( normalActivity ); - - getEntityManager().persist( checkInActivity ); - - getEntityManager().getTransaction().commit(); + scope.inTransaction( em -> { + NormalActivity na = em.find( NormalActivity.class, id1 ); + CheckInActivity checkInActivity = new CheckInActivity(); + id2 = new ActivityId( 2, 3 ); + checkInActivity.setId( id2 ); + checkInActivity.setSequenceNumber( 0 ); + checkInActivity.setDurationInMinutes( 30 ); + checkInActivity.setRelatedActivity( na ); + em.persist( checkInActivity ); + } ); // Revision 3 - normalActivity = new NormalActivity(); + NormalActivity normalActivity3 = new NormalActivity(); id3 = new ActivityId( 3, 4 ); - normalActivity.setId( id3 ); - normalActivity.setSequenceNumber( 2 ); - - getEntityManager().getTransaction().begin(); + normalActivity3.setId( id3 ); + normalActivity3.setSequenceNumber( 2 ); - getEntityManager().persist( normalActivity ); - - getEntityManager().getTransaction().commit(); + scope.inTransaction( em -> { + em.persist( normalActivity3 ); + } ); // Revision 4 - getEntityManager().getTransaction().begin(); - - normalActivity = getEntityManager().find( NormalActivity.class, id3 ); - checkInActivity = getEntityManager().find( CheckInActivity.class, id2 ); - checkInActivity.setRelatedActivity( normalActivity ); - - getEntityManager().merge( checkInActivity ); - - getEntityManager().getTransaction().commit(); + scope.inTransaction( em -> { + NormalActivity na = em.find( NormalActivity.class, id3 ); + CheckInActivity checkInActivity = em.find( CheckInActivity.class, id2 ); + checkInActivity.setRelatedActivity( na ); + em.merge( checkInActivity ); + } ); } @Test - public void testRevisionsCounts() { - assertEquals( Arrays.asList( 1 ), getAuditReader().getRevisions( NormalActivity.class, id1 ) ); - assertEquals( Arrays.asList( 3 ), getAuditReader().getRevisions( NormalActivity.class, id3 ) ); - assertEquals( Arrays.asList( 2, 4 ), getAuditReader().getRevisions( CheckInActivity.class, id2 ) ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1 ), auditReader.getRevisions( NormalActivity.class, id1 ) ); + assertEquals( Arrays.asList( 3 ), auditReader.getRevisions( NormalActivity.class, id3 ) ); + assertEquals( Arrays.asList( 2, 4 ), auditReader.getRevisions( CheckInActivity.class, id2 ) ); + } ); } @Test - public void testCurrentStateOfCheckInActivity() { - - final CheckInActivity checkInActivity = getEntityManager().find( CheckInActivity.class, id2 ); - final NormalActivity normalActivity = getEntityManager().find( NormalActivity.class, id3 ); - - assertEquals( id2, checkInActivity.getId() ); - assertEquals( 0, checkInActivity.getSequenceNumber().intValue() ); - assertEquals( 30, checkInActivity.getDurationInMinutes().intValue() ); - final Activity relatedActivity = checkInActivity.getRelatedActivity(); - assertEquals( normalActivity.getId(), relatedActivity.getId() ); - assertEquals( normalActivity.getSequenceNumber(), relatedActivity.getSequenceNumber() ); + public void testCurrentStateOfCheckInActivity(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final CheckInActivity checkInActivity = em.find( CheckInActivity.class, id2 ); + final NormalActivity normalActivity = em.find( NormalActivity.class, id3 ); + + assertEquals( id2, checkInActivity.getId() ); + assertEquals( 0, checkInActivity.getSequenceNumber().intValue() ); + assertEquals( 30, checkInActivity.getDurationInMinutes().intValue() ); + final Activity relatedActivity = checkInActivity.getRelatedActivity(); + assertEquals( normalActivity.getId(), relatedActivity.getId() ); + assertEquals( normalActivity.getSequenceNumber(), relatedActivity.getSequenceNumber() ); + } ); } @Test - public void testCheckCurrentStateOfNormalActivities() throws Exception { - final NormalActivity normalActivity1 = getEntityManager().find( NormalActivity.class, id1 ); - final NormalActivity normalActivity2 = getEntityManager().find( NormalActivity.class, id3 ); - - assertEquals( id1, normalActivity1.getId() ); - assertEquals( 1, normalActivity1.getSequenceNumber().intValue() ); - assertEquals( id3, normalActivity2.getId() ); - assertEquals( 2, normalActivity2.getSequenceNumber().intValue() ); + public void testCheckCurrentStateOfNormalActivities(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final NormalActivity normalActivity1 = em.find( NormalActivity.class, id1 ); + final NormalActivity normalActivity2 = em.find( NormalActivity.class, id3 ); + + assertEquals( id1, normalActivity1.getId() ); + assertEquals( 1, normalActivity1.getSequenceNumber().intValue() ); + assertEquals( id3, normalActivity2.getId() ); + assertEquals( 2, normalActivity2.getSequenceNumber().intValue() ); + } ); } @Test - public void doTestFirstRevisionOfCheckInActivity() throws Exception { - CheckInActivity checkInActivity = getAuditReader().find( CheckInActivity.class, id2, 2 ); - NormalActivity normalActivity = getAuditReader().find( NormalActivity.class, id1, 2 ); - - assertEquals( id2, checkInActivity.getId() ); - assertEquals( 0, checkInActivity.getSequenceNumber().intValue() ); - assertEquals( 30, checkInActivity.getDurationInMinutes().intValue() ); - Activity relatedActivity = checkInActivity.getRelatedActivity(); - assertEquals( normalActivity.getId(), relatedActivity.getId() ); - assertEquals( normalActivity.getSequenceNumber(), relatedActivity.getSequenceNumber() ); + public void doTestFirstRevisionOfCheckInActivity(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + var auditReader = AuditReaderFactory.get( em ); + CheckInActivity checkInActivity = auditReader.find( CheckInActivity.class, id2, 2 ); + NormalActivity normalActivity = auditReader.find( NormalActivity.class, id1, 2 ); + + assertEquals( id2, checkInActivity.getId() ); + assertEquals( 0, checkInActivity.getSequenceNumber().intValue() ); + assertEquals( 30, checkInActivity.getDurationInMinutes().intValue() ); + Activity relatedActivity = checkInActivity.getRelatedActivity(); + assertEquals( normalActivity.getId(), relatedActivity.getId() ); + assertEquals( normalActivity.getSequenceNumber(), relatedActivity.getSequenceNumber() ); + } ); } @Test - public void doTestSecondRevisionOfCheckInActivity() throws Exception { - CheckInActivity checkInActivity = getAuditReader().find( CheckInActivity.class, id2, 4 ); - NormalActivity normalActivity = getAuditReader().find( NormalActivity.class, id3, 4 ); - - assertEquals( id2, checkInActivity.getId() ); - assertEquals( 0, checkInActivity.getSequenceNumber().intValue() ); - assertEquals( 30, checkInActivity.getDurationInMinutes().intValue() ); - Activity relatedActivity = checkInActivity.getRelatedActivity(); - assertEquals( normalActivity.getId(), relatedActivity.getId() ); - assertEquals( normalActivity.getSequenceNumber(), relatedActivity.getSequenceNumber() ); + public void doTestSecondRevisionOfCheckInActivity(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + var auditReader = AuditReaderFactory.get( em ); + CheckInActivity checkInActivity = auditReader.find( CheckInActivity.class, id2, 4 ); + NormalActivity normalActivity = auditReader.find( NormalActivity.class, id3, 4 ); + + assertEquals( id2, checkInActivity.getId() ); + assertEquals( 0, checkInActivity.getSequenceNumber().intValue() ); + assertEquals( 30, checkInActivity.getDurationInMinutes().intValue() ); + Activity relatedActivity = checkInActivity.getRelatedActivity(); + assertEquals( normalActivity.getId(), relatedActivity.getId() ); + assertEquals( normalActivity.getSequenceNumber(), relatedActivity.getSequenceNumber() ); + } ); } - } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/single/ChildAuditing.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/single/ChildAuditing.java index 4ef12aaafb64..a0c43f9b76cc 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/single/ChildAuditing.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/single/ChildAuditing.java @@ -5,69 +5,75 @@ package org.hibernate.orm.test.envers.integration.inheritance.single; import java.util.Arrays; -import jakarta.persistence.EntityManager; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; -import org.junit.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Adam Warski (adam at warski dot org) */ -public class ChildAuditing extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {ChildEntity.class, ParentEntity.class}) +public class ChildAuditing { private Integer id1; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {ChildEntity.class, ParentEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Rev 1 - em.getTransaction().begin(); - ChildEntity ce = new ChildEntity( "x", 1l ); - em.persist( ce ); - id1 = ce.getId(); - em.getTransaction().commit(); + scope.inTransaction( em -> { + ChildEntity ce = new ChildEntity( "x", 1l ); + em.persist( ce ); + id1 = ce.getId(); + } ); // Rev 2 - em.getTransaction().begin(); - ce = em.find( ChildEntity.class, id1 ); - ce.setData( "y" ); - ce.setNumVal( 2l ); - em.getTransaction().commit(); + scope.inTransaction( em -> { + ChildEntity ce = em.find( ChildEntity.class, id1 ); + ce.setData( "y" ); + ce.setNumVal( 2l ); + } ); } @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( ChildEntity.class, id1 ) ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1, 2 ), auditReader.getRevisions( ChildEntity.class, id1 ) ); + } ); } @Test - public void testHistoryOfChildId1() { + public void testHistoryOfChildId1(EntityManagerFactoryScope scope) { ChildEntity ver1 = new ChildEntity( id1, "x", 1l ); ChildEntity ver2 = new ChildEntity( id1, "y", 2l ); - assert getAuditReader().find( ChildEntity.class, id1, 1 ).equals( ver1 ); - assert getAuditReader().find( ChildEntity.class, id1, 2 ).equals( ver2 ); + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( ver1, auditReader.find( ChildEntity.class, id1, 1 ) ); + assertEquals( ver2, auditReader.find( ChildEntity.class, id1, 2 ) ); - assert getAuditReader().find( ParentEntity.class, id1, 1 ).equals( ver1 ); - assert getAuditReader().find( ParentEntity.class, id1, 2 ).equals( ver2 ); + assertEquals( ver1, auditReader.find( ParentEntity.class, id1, 1 ) ); + assertEquals( ver2, auditReader.find( ParentEntity.class, id1, 2 ) ); + } ); } @Test - public void testPolymorphicQuery() { + public void testPolymorphicQuery(EntityManagerFactoryScope scope) { ChildEntity childVer1 = new ChildEntity( id1, "x", 1l ); - assert getAuditReader().createQuery().forEntitiesAtRevision( ChildEntity.class, 1 ).getSingleResult() - .equals( childVer1 ); + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( childVer1, + auditReader.createQuery().forEntitiesAtRevision( ChildEntity.class, 1 ).getSingleResult() ); - assert getAuditReader().createQuery().forEntitiesAtRevision( ParentEntity.class, 1 ).getSingleResult() - .equals( childVer1 ); + assertEquals( childVer1, + auditReader.createQuery().forEntitiesAtRevision( ParentEntity.class, 1 ).getSingleResult() ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/single/ParentAuditing.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/single/ParentAuditing.java index e16e92a5f65d..aaf4215477d8 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/single/ParentAuditing.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/single/ParentAuditing.java @@ -5,70 +5,80 @@ package org.hibernate.orm.test.envers.integration.inheritance.single; import java.util.Arrays; -import jakarta.persistence.EntityManager; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; -import org.junit.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNull; /** * @author Adam Warski (adam at warski dot org) */ -public class ParentAuditing extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {ChildEntity.class, ParentEntity.class}) +public class ParentAuditing { private Integer id1; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {ChildEntity.class, ParentEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Rev 1 - em.getTransaction().begin(); - ParentEntity pe = new ParentEntity( "x" ); - em.persist( pe ); - id1 = pe.getId(); - em.getTransaction().commit(); + scope.inTransaction( em -> { + ParentEntity pe = new ParentEntity( "x" ); + em.persist( pe ); + id1 = pe.getId(); + } ); // Rev 2 - em.getTransaction().begin(); - pe = em.find( ParentEntity.class, id1 ); - pe.setData( "y" ); - em.getTransaction().commit(); + scope.inTransaction( em -> { + ParentEntity pe = em.find( ParentEntity.class, id1 ); + pe.setData( "y" ); + } ); } @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( ParentEntity.class, id1 ) ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1, 2 ), auditReader.getRevisions( ParentEntity.class, id1 ) ); + } ); } @Test - public void testHistoryOfChildId1() { - assert getAuditReader().find( ChildEntity.class, id1, 1 ) == null; - assert getAuditReader().find( ChildEntity.class, id1, 2 ) == null; + public void testHistoryOfChildId1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertNull( auditReader.find( ChildEntity.class, id1, 1 ) ); + assertNull( auditReader.find( ChildEntity.class, id1, 2 ) ); + } ); } @Test - public void testHistoryOfParentId1() { + public void testHistoryOfParentId1(EntityManagerFactoryScope scope) { ParentEntity ver1 = new ParentEntity( id1, "x" ); ParentEntity ver2 = new ParentEntity( id1, "y" ); - assert getAuditReader().find( ParentEntity.class, id1, 1 ).equals( ver1 ); - assert getAuditReader().find( ParentEntity.class, id1, 2 ).equals( ver2 ); + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( ver1, auditReader.find( ParentEntity.class, id1, 1 ) ); + assertEquals( ver2, auditReader.find( ParentEntity.class, id1, 2 ) ); + } ); } @Test - public void testPolymorphicQuery() { + public void testPolymorphicQuery(EntityManagerFactoryScope scope) { ParentEntity parentVer1 = new ParentEntity( id1, "x" ); - assert getAuditReader().createQuery().forEntitiesAtRevision( ParentEntity.class, 1 ).getSingleResult() - .equals( parentVer1 ); - assert getAuditReader().createQuery().forEntitiesAtRevision( ChildEntity.class, 1 ) - .getResultList().size() == 0; + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( parentVer1, + auditReader.createQuery().forEntitiesAtRevision( ParentEntity.class, 1 ).getSingleResult() ); + assertEquals( 0, + auditReader.createQuery().forEntitiesAtRevision( ChildEntity.class, 1 ).getResultList().size() ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/single/childrelation/ChildReferencing.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/single/childrelation/ChildReferencing.java index afb5bf91449e..2f42dba45e69 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/single/childrelation/ChildReferencing.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/single/childrelation/ChildReferencing.java @@ -5,101 +5,109 @@ package org.hibernate.orm.test.envers.integration.inheritance.single.childrelation; import java.util.Arrays; -import jakarta.persistence.EntityManager; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.orm.test.envers.tools.TestTools; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; -import org.junit.Test; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Adam Warski (adam at warski dot org) */ -public class ChildReferencing extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {ChildIngEntity.class, ParentNotIngEntity.class, ReferencedEntity.class}) +public class ChildReferencing { private Integer re_id1; private Integer re_id2; private Integer c_id; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {ChildIngEntity.class, ParentNotIngEntity.class, ReferencedEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Rev 1 - em.getTransaction().begin(); - - ReferencedEntity re1 = new ReferencedEntity(); - em.persist( re1 ); - re_id1 = re1.getId(); + scope.inTransaction( em -> { + ReferencedEntity re1 = new ReferencedEntity(); + em.persist( re1 ); + re_id1 = re1.getId(); - ReferencedEntity re2 = new ReferencedEntity(); - em.persist( re2 ); - re_id2 = re2.getId(); - - em.getTransaction().commit(); + ReferencedEntity re2 = new ReferencedEntity(); + em.persist( re2 ); + re_id2 = re2.getId(); + } ); // Rev 2 - em.getTransaction().begin(); - - re1 = em.find( ReferencedEntity.class, re_id1 ); - - ChildIngEntity cie = new ChildIngEntity( "y", 1l ); - cie.setReferenced( re1 ); - em.persist( cie ); - c_id = cie.getId(); + scope.inTransaction( em -> { + ReferencedEntity re1 = em.find( ReferencedEntity.class, re_id1 ); - em.getTransaction().commit(); + ChildIngEntity cie = new ChildIngEntity( "y", 1l ); + cie.setReferenced( re1 ); + em.persist( cie ); + c_id = cie.getId(); + } ); // Rev 3 - em.getTransaction().begin(); - - re2 = em.find( ReferencedEntity.class, re_id2 ); - cie = em.find( ChildIngEntity.class, c_id ); - - cie.setReferenced( re2 ); + scope.inTransaction( em -> { + ReferencedEntity re2 = em.find( ReferencedEntity.class, re_id2 ); + ChildIngEntity cie = em.find( ChildIngEntity.class, c_id ); - em.getTransaction().commit(); + cie.setReferenced( re2 ); + } ); } @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2, 3 ).equals( getAuditReader().getRevisions( ReferencedEntity.class, re_id1 ) ); - assert Arrays.asList( 1, 3 ).equals( getAuditReader().getRevisions( ReferencedEntity.class, re_id2 ) ); - assert Arrays.asList( 2, 3 ).equals( getAuditReader().getRevisions( ChildIngEntity.class, c_id ) ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1, 2, 3 ), auditReader.getRevisions( ReferencedEntity.class, re_id1 ) ); + assertEquals( Arrays.asList( 1, 3 ), auditReader.getRevisions( ReferencedEntity.class, re_id2 ) ); + assertEquals( Arrays.asList( 2, 3 ), auditReader.getRevisions( ChildIngEntity.class, c_id ) ); + } ); } @Test - public void testHistoryOfReferencedCollection1() { - assert getAuditReader().find( ReferencedEntity.class, re_id1, 1 ).getReferencing().size() == 0; - assert getAuditReader().find( ReferencedEntity.class, re_id1, 2 ).getReferencing().equals( - TestTools.makeSet( new ChildIngEntity( c_id, "y", 1l ) ) - ); - assert getAuditReader().find( ReferencedEntity.class, re_id1, 3 ).getReferencing().size() == 0; + public void testHistoryOfReferencedCollection1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( 0, auditReader.find( ReferencedEntity.class, re_id1, 1 ).getReferencing().size() ); + assertEquals( + TestTools.makeSet( new ChildIngEntity( c_id, "y", 1l ) ), + auditReader.find( ReferencedEntity.class, re_id1, 2 ).getReferencing() + ); + assertEquals( 0, auditReader.find( ReferencedEntity.class, re_id1, 3 ).getReferencing().size() ); + } ); } @Test - public void testHistoryOfReferencedCollection2() { - assert getAuditReader().find( ReferencedEntity.class, re_id2, 1 ).getReferencing().size() == 0; - assert getAuditReader().find( ReferencedEntity.class, re_id2, 2 ).getReferencing().size() == 0; - assert getAuditReader().find( ReferencedEntity.class, re_id2, 3 ).getReferencing().equals( - TestTools.makeSet( new ChildIngEntity( c_id, "y", 1l ) ) - ); + public void testHistoryOfReferencedCollection2(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( 0, auditReader.find( ReferencedEntity.class, re_id2, 1 ).getReferencing().size() ); + assertEquals( 0, auditReader.find( ReferencedEntity.class, re_id2, 2 ).getReferencing().size() ); + assertEquals( + TestTools.makeSet( new ChildIngEntity( c_id, "y", 1l ) ), + auditReader.find( ReferencedEntity.class, re_id2, 3 ).getReferencing() + ); + } ); } @Test - public void testChildHistory() { - assert getAuditReader().find( ChildIngEntity.class, c_id, 1 ) == null; - assert getAuditReader().find( ChildIngEntity.class, c_id, 2 ).getReferenced().equals( - new ReferencedEntity( re_id1 ) - ); - assert getAuditReader().find( ChildIngEntity.class, c_id, 3 ).getReferenced().equals( - new ReferencedEntity( re_id2 ) - ); + public void testChildHistory(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( null, auditReader.find( ChildIngEntity.class, c_id, 1 ) ); + assertEquals( + new ReferencedEntity( re_id1 ), + auditReader.find( ChildIngEntity.class, c_id, 2 ).getReferenced() + ); + assertEquals( + new ReferencedEntity( re_id2 ), + auditReader.find( ChildIngEntity.class, c_id, 3 ).getReferenced() + ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/single/childrelation/ReferencedEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/single/childrelation/ReferencedEntity.java index b18b5c4edec4..54cfefacc9c6 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/single/childrelation/ReferencedEntity.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/single/childrelation/ReferencedEntity.java @@ -58,7 +58,7 @@ public boolean equals(Object o) { ReferencedEntity that = (ReferencedEntity) o; - if ( id != null ? !id.equals( that.id ) : that.id != null ) { + if ( id != null ? !id.equals( that.getId() ) : that.getId() != null ) { return false; } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/single/discriminatorformula/DiscriminatorFormulaTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/single/discriminatorformula/DiscriminatorFormulaTest.java index f6b5e4595271..3291ded39afc 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/single/discriminatorformula/DiscriminatorFormulaTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/single/discriminatorformula/DiscriminatorFormulaTest.java @@ -6,83 +6,78 @@ import java.util.Arrays; import java.util.List; -import jakarta.persistence.EntityManager; import org.hibernate.community.dialect.AltibaseDialect; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.mapping.Formula; -import org.hibernate.mapping.PersistentClass; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.DomainModel; +import org.hibernate.testing.orm.junit.DomainModelScope; +import org.hibernate.testing.orm.junit.SessionFactoryScope; +import org.hibernate.testing.orm.junit.SessionFactory; import org.hibernate.testing.orm.junit.SkipForDialect; -import org.junit.Assert; -import org.junit.Test; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; /** * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) */ -public class DiscriminatorFormulaTest extends BaseEnversJPAFunctionalTestCase { - private PersistentClass parentAudit = null; +@EnversTest +@DomainModel(annotatedClasses = { ClassTypeEntity.class, ParentEntity.class, ChildEntity.class }) +@SessionFactory +public class DiscriminatorFormulaTest { private ChildEntity childVer1 = null; private ChildEntity childVer2 = null; private ParentEntity parentVer1 = null; private ParentEntity parentVer2 = null; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {ClassTypeEntity.class, ParentEntity.class, ChildEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - parentAudit = metadata().getEntityBinding( - "org.hibernate.orm.test.envers.integration.inheritance.single.discriminatorformula.ParentEntity_AUD" - ); - - EntityManager em = getEntityManager(); - + @BeforeClassTemplate + public void initData(SessionFactoryScope scope) { // Child entity type - em.getTransaction().begin(); - ClassTypeEntity childType = new ClassTypeEntity(); - childType.setType( ClassTypeEntity.CHILD_TYPE ); - em.persist( childType ); - Long childTypeId = childType.getId(); - em.getTransaction().commit(); + final Long childTypeId = scope.fromTransaction( em -> { + ClassTypeEntity childType = new ClassTypeEntity(); + childType.setType( ClassTypeEntity.CHILD_TYPE ); + em.persist( childType ); + return childType.getId(); + } ); // Parent entity type - em.getTransaction().begin(); - ClassTypeEntity parentType = new ClassTypeEntity(); - parentType.setType( ClassTypeEntity.PARENT_TYPE ); - em.persist( parentType ); - Long parentTypeId = parentType.getId(); - em.getTransaction().commit(); + final Long parentTypeId = scope.fromTransaction( em -> { + ClassTypeEntity parentType = new ClassTypeEntity(); + parentType.setType( ClassTypeEntity.PARENT_TYPE ); + em.persist( parentType ); + return parentType.getId(); + } ); // Child Rev 1 - em.getTransaction().begin(); - ChildEntity child = new ChildEntity( childTypeId, "Child data", "Child specific data" ); - em.persist( child ); - Long childId = child.getId(); - em.getTransaction().commit(); + final Long childId = scope.fromTransaction( em -> { + ChildEntity child = new ChildEntity( childTypeId, "Child data", "Child specific data" ); + em.persist( child ); + return child.getId(); + } ); // Parent Rev 2 - em.getTransaction().begin(); - ParentEntity parent = new ParentEntity( parentTypeId, "Parent data" ); - em.persist( parent ); - Long parentId = parent.getId(); - em.getTransaction().commit(); + final Long parentId = scope.fromTransaction( em -> { + ParentEntity parent = new ParentEntity( parentTypeId, "Parent data" ); + em.persist( parent ); + return parent.getId(); + } ); // Child Rev 3 - em.getTransaction().begin(); - child = em.find( ChildEntity.class, childId ); - child.setData( "Child data modified" ); - em.getTransaction().commit(); + scope.inTransaction( em -> { + ChildEntity child = em.find( ChildEntity.class, childId ); + child.setData( "Child data modified" ); + } ); // Parent Rev 4 - em.getTransaction().begin(); - parent = em.find( ParentEntity.class, parentId ); - parent.setData( "Parent data modified" ); - em.getTransaction().commit(); + scope.inTransaction( em -> { + ParentEntity parent = em.find( ParentEntity.class, parentId ); + parent.setData( "Parent data modified" ); + } ); childVer1 = new ChildEntity( childId, childTypeId, "Child data", "Child specific data" ); childVer2 = new ChildEntity( childId, childTypeId, "Child data modified", "Child specific data" ); @@ -91,74 +86,85 @@ public void initData() { } @Test - public void testDiscriminatorFormulaInAuditTable() { - assert parentAudit.getDiscriminator().hasFormula(); + public void testDiscriminatorFormulaInAuditTable(DomainModelScope scope) { + final var parentAudit = scope.getDomainModel().getEntityBinding( + "org.hibernate.orm.test.envers.integration.inheritance.single.discriminatorformula.ParentEntity_AUD" + ); + assertTrue( parentAudit.getDiscriminator().hasFormula() ); + boolean found = false; for ( Object o : parentAudit.getDiscriminator().getSelectables() ) { if ( o instanceof Formula formula ) { - Assert.assertEquals( ParentEntity.DISCRIMINATOR_QUERY, formula.getText() ); - return; + assertEquals( ParentEntity.DISCRIMINATOR_QUERY, formula.getText() ); + found = true; + break; } } - assert false; + assertTrue( found ); } @Test - @SkipForDialect( dialectClass = AltibaseDialect.class, reason = "'TYPE' is not escaped even though autoQuoteKeywords is enabled") - public void testRevisionsCounts() { - Assert.assertEquals( - Arrays.asList( 1, 3 ), getAuditReader().getRevisions( - ChildEntity.class, - childVer1.getId() - ) - ); - Assert.assertEquals( - Arrays.asList( 2, 4 ), getAuditReader().getRevisions( - ParentEntity.class, - parentVer1.getId() - ) - ); + @SkipForDialect(dialectClass = AltibaseDialect.class, reason = "'TYPE' is not escaped even though autoQuoteKeywords is enabled") + public void testRevisionsCounts(SessionFactoryScope scope) { + scope.inSession( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( + Arrays.asList( 1, 3 ), + auditReader.getRevisions( ChildEntity.class, childVer1.getId() ) + ); + assertEquals( + Arrays.asList( 2, 4 ), + auditReader.getRevisions( ParentEntity.class, parentVer1.getId() ) + ); + } ); } @Test - @SkipForDialect( dialectClass = AltibaseDialect.class, reason = "'TYPE' is not escaped even though autoQuoteKeywords is enabled") - public void testHistoryOfParent() { - Assert.assertEquals( parentVer1, getAuditReader().find( ParentEntity.class, parentVer1.getId(), 2 ) ); - Assert.assertEquals( parentVer2, getAuditReader().find( ParentEntity.class, parentVer2.getId(), 4 ) ); + @SkipForDialect(dialectClass = AltibaseDialect.class, reason = "'TYPE' is not escaped even though autoQuoteKeywords is enabled") + public void testHistoryOfParent(SessionFactoryScope scope) { + scope.inSession( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( parentVer1, auditReader.find( ParentEntity.class, parentVer1.getId(), 2 ) ); + assertEquals( parentVer2, auditReader.find( ParentEntity.class, parentVer2.getId(), 4 ) ); + } ); } @Test - @SkipForDialect( dialectClass = AltibaseDialect.class, reason = "'TYPE' is not escaped even though autoQuoteKeywords is enabled") - public void testHistoryOfChild() { - Assert.assertEquals( childVer1, getAuditReader().find( ChildEntity.class, childVer1.getId(), 1 ) ); - Assert.assertEquals( childVer2, getAuditReader().find( ChildEntity.class, childVer2.getId(), 3 ) ); + @SkipForDialect(dialectClass = AltibaseDialect.class, reason = "'TYPE' is not escaped even though autoQuoteKeywords is enabled") + public void testHistoryOfChild(SessionFactoryScope scope) { + scope.inSession( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( childVer1, auditReader.find( ChildEntity.class, childVer1.getId(), 1 ) ); + assertEquals( childVer2, auditReader.find( ChildEntity.class, childVer2.getId(), 3 ) ); + } ); } @Test - @SkipForDialect( dialectClass = AltibaseDialect.class, reason = "'TYPE' is not escaped even though autoQuoteKeywords is enabled") - public void testPolymorphicQuery() { - Assert.assertEquals( - childVer1, getAuditReader().createQuery() - .forEntitiesAtRevision( ChildEntity.class, 1 ) - .getSingleResult() - ); - Assert.assertEquals( - childVer1, getAuditReader().createQuery() - .forEntitiesAtRevision( ParentEntity.class, 1 ) - .getSingleResult() - ); - - List childEntityRevisions = getAuditReader().createQuery().forRevisionsOfEntity( - ChildEntity.class, - true, - false - ).getResultList(); - Assert.assertEquals( Arrays.asList( childVer1, childVer2 ), childEntityRevisions ); - - List parentEntityRevisions = getAuditReader().createQuery().forRevisionsOfEntity( - ParentEntity.class, - true, - false - ).getResultList(); - Assert.assertEquals( Arrays.asList( childVer1, parentVer1, childVer2, parentVer2 ), parentEntityRevisions ); + @SkipForDialect(dialectClass = AltibaseDialect.class, reason = "'TYPE' is not escaped even though autoQuoteKeywords is enabled") + public void testPolymorphicQuery(SessionFactoryScope scope) { + scope.inSession( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( + childVer1, + auditReader.createQuery().forEntitiesAtRevision( ChildEntity.class, 1 ).getSingleResult() + ); + assertEquals( + childVer1, + auditReader.createQuery().forEntitiesAtRevision( ParentEntity.class, 1 ).getSingleResult() + ); + + List childEntityRevisions = auditReader.createQuery().forRevisionsOfEntity( + ChildEntity.class, + true, + false + ).getResultList(); + assertEquals( Arrays.asList( childVer1, childVer2 ), childEntityRevisions ); + + List parentEntityRevisions = auditReader.createQuery().forRevisionsOfEntity( + ParentEntity.class, + true, + false + ).getResultList(); + assertEquals( Arrays.asList( childVer1, parentVer1, childVer2, parentVer2 ), parentEntityRevisions ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/single/notownedrelation/NotOwnedBidirectional.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/single/notownedrelation/NotOwnedBidirectional.java index eb7ea3885315..d0428509e1f6 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/single/notownedrelation/NotOwnedBidirectional.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/single/notownedrelation/NotOwnedBidirectional.java @@ -5,99 +5,105 @@ package org.hibernate.orm.test.envers.integration.inheritance.single.notownedrelation; import java.util.Arrays; -import jakarta.persistence.EntityManager; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.orm.test.envers.tools.TestTools; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; -import org.junit.Test; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Adam Warski (adam at warski dot org) */ -public class NotOwnedBidirectional extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {Address.class, Contact.class, PersonalContact.class}) +public class NotOwnedBidirectional { private Long pc_id; private Long a1_id; private Long a2_id; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {Address.class, Contact.class, PersonalContact.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Rev 1 - em.getTransaction().begin(); - - PersonalContact pc = new PersonalContact(); - pc.setEmail( "e" ); - pc.setFirstname( "f" ); + scope.inTransaction( em -> { + PersonalContact pc = new PersonalContact(); + pc.setEmail( "e" ); + pc.setFirstname( "f" ); - Address a1 = new Address(); - a1.setAddress1( "a1" ); - a1.setContact( pc ); + Address a1 = new Address(); + a1.setAddress1( "a1" ); + a1.setContact( pc ); - em.persist( pc ); - em.persist( a1 ); + em.persist( pc ); + em.persist( a1 ); - em.getTransaction().commit(); + pc_id = pc.getId(); + a1_id = a1.getId(); + } ); // Rev 2 - em.getTransaction().begin(); + scope.inTransaction( em -> { + PersonalContact pc = em.find( PersonalContact.class, pc_id ); - pc = em.find( PersonalContact.class, pc.getId() ); + Address a2 = new Address(); + a2.setAddress1( "a2" ); + a2.setContact( pc ); - Address a2 = new Address(); - a2.setAddress1( "a2" ); - a2.setContact( pc ); + em.persist( a2 ); - em.persist( a2 ); - - em.getTransaction().commit(); - - // - - pc_id = pc.getId(); - a1_id = a1.getId(); - a2_id = a2.getId(); + a2_id = a2.getId(); + } ); } @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( Contact.class, pc_id ) ); - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( PersonalContact.class, pc_id ) ); - - assert Arrays.asList( 1 ).equals( getAuditReader().getRevisions( Address.class, a1_id ) ); - assert Arrays.asList( 1 ).equals( getAuditReader().getRevisions( Address.class, a1_id ) ); - - assert Arrays.asList( 2 ).equals( getAuditReader().getRevisions( Address.class, a2_id ) ); - assert Arrays.asList( 2 ).equals( getAuditReader().getRevisions( Address.class, a2_id ) ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1, 2 ), auditReader.getRevisions( Contact.class, pc_id ) ); + assertEquals( Arrays.asList( 1, 2 ), auditReader.getRevisions( PersonalContact.class, pc_id ) ); + + assertEquals( Arrays.asList( 1 ), auditReader.getRevisions( Address.class, a1_id ) ); + assertEquals( Arrays.asList( 1 ), auditReader.getRevisions( Address.class, a1_id ) ); + + assertEquals( Arrays.asList( 2 ), auditReader.getRevisions( Address.class, a2_id ) ); + assertEquals( Arrays.asList( 2 ), auditReader.getRevisions( Address.class, a2_id ) ); + } ); } @Test - public void testHistoryOfContact() { - assert getAuditReader().find( Contact.class, pc_id, 1 ).getAddresses().equals( - TestTools.makeSet( new Address( a1_id, "a1" ) ) - ); - - assert getAuditReader().find( Contact.class, pc_id, 2 ).getAddresses().equals( - TestTools.makeSet( new Address( a1_id, "a1" ), new Address( a2_id, "a2" ) ) - ); + public void testHistoryOfContact(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( + TestTools.makeSet( new Address( a1_id, "a1" ) ), + auditReader.find( Contact.class, pc_id, 1 ).getAddresses() + ); + + assertEquals( + TestTools.makeSet( new Address( a1_id, "a1" ), new Address( a2_id, "a2" ) ), + auditReader.find( Contact.class, pc_id, 2 ).getAddresses() + ); + } ); } @Test - public void testHistoryOfPersonalContact() { - assert getAuditReader().find( PersonalContact.class, pc_id, 1 ).getAddresses().equals( - TestTools.makeSet( new Address( a1_id, "a1" ) ) - ); - - assert getAuditReader().find( PersonalContact.class, pc_id, 2 ).getAddresses().equals( - TestTools.makeSet( new Address( a1_id, "a1" ), new Address( a2_id, "a2" ) ) - ); + public void testHistoryOfPersonalContact(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( + TestTools.makeSet( new Address( a1_id, "a1" ) ), + auditReader.find( PersonalContact.class, pc_id, 1 ).getAddresses() + ); + + assertEquals( + TestTools.makeSet( new Address( a1_id, "a1" ), new Address( a2_id, "a2" ) ), + auditReader.find( PersonalContact.class, pc_id, 2 ).getAddresses() + ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/single/relation/PolymorphicCollection.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/single/relation/PolymorphicCollection.java index faf27a61850f..dbb721772b8e 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/single/relation/PolymorphicCollection.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/single/relation/PolymorphicCollection.java @@ -5,81 +5,81 @@ package org.hibernate.orm.test.envers.integration.inheritance.single.relation; import java.util.Arrays; -import jakarta.persistence.EntityManager; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.orm.test.envers.tools.TestTools; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; -import org.junit.Test; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Adam Warski (adam at warski dot org) */ -public class PolymorphicCollection extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {ChildIngEntity.class, ParentIngEntity.class, ReferencedEntity.class}) +public class PolymorphicCollection { private Integer ed_id1; private Integer c_id; private Integer p_id; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {ChildIngEntity.class, ParentIngEntity.class, ReferencedEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Rev 1 - em.getTransaction().begin(); - - ReferencedEntity re = new ReferencedEntity(); - em.persist( re ); - ed_id1 = re.getId(); - - em.getTransaction().commit(); + scope.inTransaction( em -> { + ReferencedEntity re = new ReferencedEntity(); + em.persist( re ); + ed_id1 = re.getId(); + } ); // Rev 2 - em.getTransaction().begin(); - - re = em.find( ReferencedEntity.class, ed_id1 ); - - ParentIngEntity pie = new ParentIngEntity( "x" ); - pie.setReferenced( re ); - em.persist( pie ); - p_id = pie.getId(); + scope.inTransaction( em -> { + ReferencedEntity re = em.find( ReferencedEntity.class, ed_id1 ); - em.getTransaction().commit(); + ParentIngEntity pie = new ParentIngEntity( "x" ); + pie.setReferenced( re ); + em.persist( pie ); + p_id = pie.getId(); + } ); // Rev 3 - em.getTransaction().begin(); - - re = em.find( ReferencedEntity.class, ed_id1 ); - - ChildIngEntity cie = new ChildIngEntity( "y", 1l ); - cie.setReferenced( re ); - em.persist( cie ); - c_id = cie.getId(); - - em.getTransaction().commit(); + scope.inTransaction( em -> { + ReferencedEntity re = em.find( ReferencedEntity.class, ed_id1 ); + + ChildIngEntity cie = new ChildIngEntity( "y", 1l ); + cie.setReferenced( re ); + em.persist( cie ); + c_id = cie.getId(); + } ); } @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2, 3 ).equals( getAuditReader().getRevisions( ReferencedEntity.class, ed_id1 ) ); - assert Arrays.asList( 2 ).equals( getAuditReader().getRevisions( ParentIngEntity.class, p_id ) ); - assert Arrays.asList( 3 ).equals( getAuditReader().getRevisions( ChildIngEntity.class, c_id ) ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1, 2, 3 ), auditReader.getRevisions( ReferencedEntity.class, ed_id1 ) ); + assertEquals( Arrays.asList( 2 ), auditReader.getRevisions( ParentIngEntity.class, p_id ) ); + assertEquals( Arrays.asList( 3 ), auditReader.getRevisions( ChildIngEntity.class, c_id ) ); + } ); } @Test - public void testHistoryOfReferencedCollection() { - assert getAuditReader().find( ReferencedEntity.class, ed_id1, 1 ).getReferencing().size() == 0; - assert getAuditReader().find( ReferencedEntity.class, ed_id1, 2 ).getReferencing().equals( - TestTools.makeSet( new ParentIngEntity( p_id, "x" ) ) - ); - assert getAuditReader().find( ReferencedEntity.class, ed_id1, 3 ).getReferencing().equals( - TestTools.makeSet( new ParentIngEntity( p_id, "x" ), new ChildIngEntity( c_id, "y", 1l ) ) - ); + public void testHistoryOfReferencedCollection(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( 0, auditReader.find( ReferencedEntity.class, ed_id1, 1 ).getReferencing().size() ); + assertEquals( + TestTools.makeSet( new ParentIngEntity( p_id, "x" ) ), + auditReader.find( ReferencedEntity.class, ed_id1, 2 ).getReferencing() + ); + assertEquals( + TestTools.makeSet( new ParentIngEntity( p_id, "x" ), new ChildIngEntity( c_id, "y", 1l ) ), + auditReader.find( ReferencedEntity.class, ed_id1, 3 ).getReferencing() + ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/single/relation/PolymorphicRemovalTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/single/relation/PolymorphicRemovalTest.java index 826ffb3cb798..e2050113a3ce 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/single/relation/PolymorphicRemovalTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/single/relation/PolymorphicRemovalTest.java @@ -20,14 +20,17 @@ import jakarta.persistence.OneToMany; import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; -import org.hibernate.testing.transaction.TransactionUtil; -import org.junit.Test; +import org.hibernate.testing.orm.junit.Jpa; + +import org.junit.jupiter.api.Test; import static org.hibernate.testing.junit4.ExtraAssertions.assertTyping; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * Tests that after the removal of an entity that maintains a polymorphic relation that @@ -40,57 +43,63 @@ * @author Chris Cranford */ @JiraKey(value = "HHH-7249") -public class PolymorphicRemovalTest extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = { + PolymorphicRemovalTest.Employee.class, + PolymorphicRemovalTest.EmployeeType.class, + PolymorphicRemovalTest.SalaryEmployeeType.class +}) +public class PolymorphicRemovalTest { private Integer typeId; private Integer employeeId; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { Employee.class, EmployeeType.class, SalaryEmployeeType.class }; - } - - @Test - @Priority(10) - public void initData() { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // revision 1 - this.typeId = TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { + this.typeId = scope.fromTransaction( em -> { SalaryEmployeeType type = new SalaryEmployeeType(); type.setData( "salaried" ); - entityManager.persist( type ); + em.persist( type ); return type.getId(); } ); // revision 2 - this.employeeId = TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - EmployeeType type = entityManager.find( EmployeeType.class, typeId ); + this.employeeId = scope.fromTransaction( em -> { + EmployeeType type = em.find( EmployeeType.class, typeId ); Employee employee = new Employee(); employee.setType( type ); - entityManager.persist( employee ); + em.persist( employee ); return employee.getId(); } ); // revision 3 - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - Employee employee = entityManager.find( Employee.class, employeeId ); - entityManager.remove( employee ); + scope.inTransaction( em -> { + Employee employee = em.find( Employee.class, employeeId ); + em.remove( employee ); } ); } @Test - public void testRevisionCounts() { - assertEquals(Arrays.asList( 1, 2, 3 ), getAuditReader().getRevisions( EmployeeType.class, typeId ) ); - assertEquals( Arrays.asList( 2, 3 ), getAuditReader().getRevisions( Employee.class, employeeId ) ); + public void testRevisionCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1, 2, 3 ), auditReader.getRevisions( EmployeeType.class, typeId ) ); + assertEquals( Arrays.asList( 2, 3 ), auditReader.getRevisions( Employee.class, employeeId ) ); + } ); } @Test - public void testRevisionHistoryPayment() { - final EmployeeType rev1 = getAuditReader().find( EmployeeType.class, typeId, 1 ); - assertTyping( SalaryEmployeeType.class, rev1 ); - assertEquals( "SALARY", rev1.getType() ); - final EmployeeType rev2 = getAuditReader().find( EmployeeType.class, typeId, 2 ); - assertTyping( SalaryEmployeeType.class, rev2 ); - assertEquals( "SALARY", rev2.getType() ); - final EmployeeType rev3 = getAuditReader().find( EmployeeType.class, typeId, 3 ); - assertTyping( SalaryEmployeeType.class, rev3 ); - assertEquals( "SALARY", rev3.getType() ); + public void testRevisionHistoryPayment(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + final EmployeeType rev1 = auditReader.find( EmployeeType.class, typeId, 1 ); + assertTyping( SalaryEmployeeType.class, rev1 ); + assertEquals( "SALARY", rev1.getType() ); + final EmployeeType rev2 = auditReader.find( EmployeeType.class, typeId, 2 ); + assertTyping( SalaryEmployeeType.class, rev2 ); + assertEquals( "SALARY", rev2.getType() ); + final EmployeeType rev3 = auditReader.find( EmployeeType.class, typeId, 3 ); + assertTyping( SalaryEmployeeType.class, rev3 ); + assertEquals( "SALARY", rev3.getType() ); + } ); } @Entity(name = "EmployeeType") diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/tableperclass/ChildAuditing.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/tableperclass/ChildAuditing.java index 2436eb118982..c48dbd98337d 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/tableperclass/ChildAuditing.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/tableperclass/ChildAuditing.java @@ -5,70 +5,77 @@ package org.hibernate.orm.test.envers.integration.inheritance.tableperclass; import java.util.Arrays; -import jakarta.persistence.EntityManager; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; -import org.junit.Test; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Adam Warski (adam at warski dot org) */ -public class ChildAuditing extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {ChildEntity.class, ParentEntity.class}) +public class ChildAuditing { private Integer id1; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {ChildEntity.class, ParentEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { id1 = 1; // Rev 1 - em.getTransaction().begin(); - ChildEntity ce = new ChildEntity( id1, "x", 1l ); - em.persist( ce ); - em.getTransaction().commit(); + scope.inTransaction( em -> { + ChildEntity ce = new ChildEntity( id1, "x", 1l ); + em.persist( ce ); + } ); // Rev 2 - em.getTransaction().begin(); - ce = em.find( ChildEntity.class, id1 ); - ce.setData( "y" ); - ce.setNumVal( 2l ); - em.getTransaction().commit(); + scope.inTransaction( em -> { + ChildEntity ce = em.find( ChildEntity.class, id1 ); + ce.setData( "y" ); + ce.setNumVal( 2l ); + } ); } @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( ChildEntity.class, id1 ) ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1, 2 ), auditReader.getRevisions( ChildEntity.class, id1 ) ); + } ); } @Test - public void testHistoryOfChildId1() { + public void testHistoryOfChildId1(EntityManagerFactoryScope scope) { ChildEntity ver1 = new ChildEntity( id1, "x", 1l ); ChildEntity ver2 = new ChildEntity( id1, "y", 2l ); - assert getAuditReader().find( ChildEntity.class, id1, 1 ).equals( ver1 ); - assert getAuditReader().find( ChildEntity.class, id1, 2 ).equals( ver2 ); + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( ver1, auditReader.find( ChildEntity.class, id1, 1 ) ); + assertEquals( ver2, auditReader.find( ChildEntity.class, id1, 2 ) ); - assert getAuditReader().find( ParentEntity.class, id1, 1 ).equals( ver1 ); - assert getAuditReader().find( ParentEntity.class, id1, 2 ).equals( ver2 ); + assertEquals( ver1, auditReader.find( ParentEntity.class, id1, 1 ) ); + assertEquals( ver2, auditReader.find( ParentEntity.class, id1, 2 ) ); + } ); } @Test - public void testPolymorphicQuery() { + public void testPolymorphicQuery(EntityManagerFactoryScope scope) { ChildEntity childVer1 = new ChildEntity( id1, "x", 1l ); - assert getAuditReader().createQuery().forEntitiesAtRevision( ChildEntity.class, 1 ).getSingleResult() - .equals( childVer1 ); + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( childVer1, + auditReader.createQuery().forEntitiesAtRevision( ChildEntity.class, 1 ).getSingleResult() ); - assert getAuditReader().createQuery().forEntitiesAtRevision( ParentEntity.class, 1 ).getSingleResult() - .equals( childVer1 ); + assertEquals( childVer1, + auditReader.createQuery().forEntitiesAtRevision( ParentEntity.class, 1 ).getSingleResult() ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/tableperclass/ParentAuditing.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/tableperclass/ParentAuditing.java index 278464707d81..cbe40bf65b67 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/tableperclass/ParentAuditing.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/tableperclass/ParentAuditing.java @@ -5,71 +5,82 @@ package org.hibernate.orm.test.envers.integration.inheritance.tableperclass; import java.util.Arrays; -import jakarta.persistence.EntityManager; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; -import org.junit.Test; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNull; /** * @author Adam Warski (adam at warski dot org) */ -public class ParentAuditing extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {ChildEntity.class, ParentEntity.class}) +public class ParentAuditing { private Integer id1; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {ChildEntity.class, ParentEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { id1 = 1; // Rev 1 - em.getTransaction().begin(); - ParentEntity pe = new ParentEntity( id1, "x" ); - em.persist( pe ); - em.getTransaction().commit(); + scope.inTransaction( em -> { + ParentEntity pe = new ParentEntity( id1, "x" ); + em.persist( pe ); + } ); // Rev 2 - em.getTransaction().begin(); - pe = em.find( ParentEntity.class, id1 ); - pe.setData( "y" ); - em.getTransaction().commit(); + scope.inTransaction( em -> { + ParentEntity pe = em.find( ParentEntity.class, id1 ); + pe.setData( "y" ); + } ); } @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( ParentEntity.class, id1 ) ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1, 2 ), auditReader.getRevisions( ParentEntity.class, id1 ) ); + } ); } @Test - public void testHistoryOfChildId1() { - assert getAuditReader().find( ChildEntity.class, id1, 1 ) == null; - assert getAuditReader().find( ChildEntity.class, id1, 2 ) == null; + public void testHistoryOfChildId1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertNull( auditReader.find( ChildEntity.class, id1, 1 ) ); + assertNull( auditReader.find( ChildEntity.class, id1, 2 ) ); + } ); } @Test - public void testHistoryOfParentId1() { + public void testHistoryOfParentId1(EntityManagerFactoryScope scope) { ParentEntity ver1 = new ParentEntity( id1, "x" ); ParentEntity ver2 = new ParentEntity( id1, "y" ); - assert getAuditReader().find( ParentEntity.class, id1, 1 ).equals( ver1 ); - assert getAuditReader().find( ParentEntity.class, id1, 2 ).equals( ver2 ); + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( ver1, auditReader.find( ParentEntity.class, id1, 1 ) ); + assertEquals( ver2, auditReader.find( ParentEntity.class, id1, 2 ) ); + } ); } @Test - public void testPolymorphicQuery() { + public void testPolymorphicQuery(EntityManagerFactoryScope scope) { ParentEntity parentVer1 = new ParentEntity( id1, "x" ); - assert getAuditReader().createQuery().forEntitiesAtRevision( ParentEntity.class, 1 ).getSingleResult() - .equals( parentVer1 ); - assert getAuditReader().createQuery().forEntitiesAtRevision( ChildEntity.class, 1 ) - .getResultList().size() == 0; + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( parentVer1, + auditReader.createQuery().forEntitiesAtRevision( ParentEntity.class, 1 ).getSingleResult() ); + assertEquals( 0, + auditReader.createQuery().forEntitiesAtRevision( ChildEntity.class, 1 ).getResultList().size() ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/tableperclass/abstractparent/AuditedAbstractParentTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/tableperclass/abstractparent/AuditedAbstractParentTest.java index 247939faf5c0..3ba47ceddffc 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/tableperclass/abstractparent/AuditedAbstractParentTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/tableperclass/abstractparent/AuditedAbstractParentTest.java @@ -4,48 +4,45 @@ */ package org.hibernate.orm.test.envers.integration.inheritance.tableperclass.abstractparent; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; import org.hibernate.mapping.Table; - +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.DomainModel; +import org.hibernate.testing.orm.junit.DomainModelScope; import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Assert; -import org.junit.Test; +import org.hibernate.testing.orm.junit.SessionFactory; +import org.hibernate.testing.orm.junit.SessionFactoryScope; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.fail; /** * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) */ @JiraKey(value = "HHH-5910") -public class AuditedAbstractParentTest extends BaseEnversJPAFunctionalTestCase { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {AbstractEntity.class, EffectiveEntity1.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); +@EnversTest +@DomainModel(annotatedClasses = {AbstractEntity.class, EffectiveEntity1.class}) +@SessionFactory +public class AuditedAbstractParentTest { + @BeforeClassTemplate + public void initData(SessionFactoryScope scope) { // Revision 1 - em.getTransaction().begin(); - EffectiveEntity1 entity = new EffectiveEntity1( 1L, "commonField", "specificField1" ); - em.persist( entity ); - em.getTransaction().commit(); - - em.close(); + scope.inTransaction( session -> { + EffectiveEntity1 entity = new EffectiveEntity1( 1L, "commonField", "specificField1" ); + session.persist( entity ); + } ); } @Test - public void testAbstractTableExistence() { - for ( Table table : metadata().collectTableMappings() ) { + public void testAbstractTableExistence(DomainModelScope scope) { + for ( Table table : scope.getDomainModel().collectTableMappings() ) { if ( "AbstractEntity_AUD".equals( table.getName() ) ) { - Assert.assertFalse( table.isPhysicalTable() ); + assertFalse( table.isPhysicalTable() ); return; } } - Assert.fail(); + fail(); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/tableperclass/childrelation/ChildReferencing.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/tableperclass/childrelation/ChildReferencing.java index 2d3a4c5780e5..9c8aae7289c0 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/tableperclass/childrelation/ChildReferencing.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/tableperclass/childrelation/ChildReferencing.java @@ -5,103 +5,110 @@ package org.hibernate.orm.test.envers.integration.inheritance.tableperclass.childrelation; import java.util.Arrays; -import jakarta.persistence.EntityManager; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.orm.test.envers.tools.TestTools; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; -import org.junit.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Adam Warski (adam at warski dot org) */ -public class ChildReferencing extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {ChildIngEntity.class, ParentNotIngEntity.class, ReferencedEntity.class}) +public class ChildReferencing { private Integer re_id1; private Integer re_id2; private Integer c_id; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {ChildIngEntity.class, ParentNotIngEntity.class, ReferencedEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { re_id1 = 1; re_id2 = 10; c_id = 100; // Rev 1 - em.getTransaction().begin(); - - ReferencedEntity re1 = new ReferencedEntity( re_id1 ); - em.persist( re1 ); + scope.inTransaction( em -> { + ReferencedEntity re1 = new ReferencedEntity( re_id1 ); + em.persist( re1 ); - ReferencedEntity re2 = new ReferencedEntity( re_id2 ); - em.persist( re2 ); - - em.getTransaction().commit(); + ReferencedEntity re2 = new ReferencedEntity( re_id2 ); + em.persist( re2 ); + } ); // Rev 2 - em.getTransaction().begin(); - - re1 = em.find( ReferencedEntity.class, re_id1 ); - - ChildIngEntity cie = new ChildIngEntity( c_id, "y", 1l ); - cie.setReferenced( re1 ); - em.persist( cie ); - c_id = cie.getId(); + scope.inTransaction( em -> { + ReferencedEntity re1 = em.find( ReferencedEntity.class, re_id1 ); - em.getTransaction().commit(); + ChildIngEntity cie = new ChildIngEntity( c_id, "y", 1l ); + cie.setReferenced( re1 ); + em.persist( cie ); + c_id = cie.getId(); + } ); // Rev 3 - em.getTransaction().begin(); - - re2 = em.find( ReferencedEntity.class, re_id2 ); - cie = em.find( ChildIngEntity.class, c_id ); - - cie.setReferenced( re2 ); + scope.inTransaction( em -> { + ReferencedEntity re2 = em.find( ReferencedEntity.class, re_id2 ); + ChildIngEntity cie = em.find( ChildIngEntity.class, c_id ); - em.getTransaction().commit(); + cie.setReferenced( re2 ); + } ); } @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2, 3 ).equals( getAuditReader().getRevisions( ReferencedEntity.class, re_id1 ) ); - assert Arrays.asList( 1, 3 ).equals( getAuditReader().getRevisions( ReferencedEntity.class, re_id2 ) ); - assert Arrays.asList( 2, 3 ).equals( getAuditReader().getRevisions( ChildIngEntity.class, c_id ) ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1, 2, 3 ), auditReader.getRevisions( ReferencedEntity.class, re_id1 ) ); + assertEquals( Arrays.asList( 1, 3 ), auditReader.getRevisions( ReferencedEntity.class, re_id2 ) ); + assertEquals( Arrays.asList( 2, 3 ), auditReader.getRevisions( ChildIngEntity.class, c_id ) ); + } ); } @Test - public void testHistoryOfReferencedCollection1() { - assert getAuditReader().find( ReferencedEntity.class, re_id1, 1 ).getReferencing().size() == 0; - assert getAuditReader().find( ReferencedEntity.class, re_id1, 2 ).getReferencing().equals( - TestTools.makeSet( new ChildIngEntity( c_id, "y", 1l ) ) - ); - assert getAuditReader().find( ReferencedEntity.class, re_id1, 3 ).getReferencing().size() == 0; + public void testHistoryOfReferencedCollection1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( 0, auditReader.find( ReferencedEntity.class, re_id1, 1 ).getReferencing().size() ); + assertEquals( + TestTools.makeSet( new ChildIngEntity( c_id, "y", 1l ) ), + auditReader.find( ReferencedEntity.class, re_id1, 2 ).getReferencing() + ); + assertEquals( 0, auditReader.find( ReferencedEntity.class, re_id1, 3 ).getReferencing().size() ); + } ); } @Test - public void testHistoryOfReferencedCollection2() { - assert getAuditReader().find( ReferencedEntity.class, re_id2, 1 ).getReferencing().size() == 0; - assert getAuditReader().find( ReferencedEntity.class, re_id2, 2 ).getReferencing().size() == 0; - assert getAuditReader().find( ReferencedEntity.class, re_id2, 3 ).getReferencing().equals( - TestTools.makeSet( new ChildIngEntity( c_id, "y", 1l ) ) - ); + public void testHistoryOfReferencedCollection2(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( 0, auditReader.find( ReferencedEntity.class, re_id2, 1 ).getReferencing().size() ); + assertEquals( 0, auditReader.find( ReferencedEntity.class, re_id2, 2 ).getReferencing().size() ); + assertEquals( + TestTools.makeSet( new ChildIngEntity( c_id, "y", 1l ) ), + auditReader.find( ReferencedEntity.class, re_id2, 3 ).getReferencing() + ); + } ); } @Test - public void testChildHistory() { - assert getAuditReader().find( ChildIngEntity.class, c_id, 1 ) == null; - assert getAuditReader().find( ChildIngEntity.class, c_id, 2 ).getReferenced().equals( - new ReferencedEntity( re_id1 ) - ); - assert getAuditReader().find( ChildIngEntity.class, c_id, 3 ).getReferenced().equals( - new ReferencedEntity( re_id2 ) - ); + public void testChildHistory(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( null, auditReader.find( ChildIngEntity.class, c_id, 1 ) ); + assertEquals( + new ReferencedEntity( re_id1 ), + auditReader.find( ChildIngEntity.class, c_id, 2 ).getReferenced() + ); + assertEquals( + new ReferencedEntity( re_id2 ), + auditReader.find( ChildIngEntity.class, c_id, 3 ).getReferenced() + ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/tableperclass/childrelation/ReferencedEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/tableperclass/childrelation/ReferencedEntity.java index eaafd8e1f1c7..d0132bddd20a 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/tableperclass/childrelation/ReferencedEntity.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/tableperclass/childrelation/ReferencedEntity.java @@ -56,7 +56,7 @@ public boolean equals(Object o) { ReferencedEntity that = (ReferencedEntity) o; - if ( id != null ? !id.equals( that.id ) : that.id != null ) { + if ( id != null ? !id.equals( that.getId() ) : that.getId() != null ) { return false; } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/tableperclass/notownedrelation/NotOwnedBidirectional.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/tableperclass/notownedrelation/NotOwnedBidirectional.java index f1f2a5e55187..8d58189b96a7 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/tableperclass/notownedrelation/NotOwnedBidirectional.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/tableperclass/notownedrelation/NotOwnedBidirectional.java @@ -5,93 +5,99 @@ package org.hibernate.orm.test.envers.integration.inheritance.tableperclass.notownedrelation; import java.util.Arrays; -import jakarta.persistence.EntityManager; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.orm.test.envers.tools.TestTools; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; -import org.junit.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Adam Warski (adam at warski dot org) */ -public class NotOwnedBidirectional extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {Address.class, Contact.class, PersonalContact.class}) +public class NotOwnedBidirectional { private Long pc_id; private Long a1_id; private Long a2_id; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {Address.class, Contact.class, PersonalContact.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { pc_id = 1l; a1_id = 10l; a2_id = 100l; // Rev 1 - em.getTransaction().begin(); - - PersonalContact pc = new PersonalContact( pc_id, "e", "f" ); + scope.inTransaction( em -> { + PersonalContact pc = new PersonalContact( pc_id, "e", "f" ); - Address a1 = new Address( a1_id, "a1" ); - a1.setContact( pc ); + Address a1 = new Address( a1_id, "a1" ); + a1.setContact( pc ); - em.persist( pc ); - em.persist( a1 ); - - em.getTransaction().commit(); + em.persist( pc ); + em.persist( a1 ); + } ); // Rev 2 - em.getTransaction().begin(); - - pc = em.find( PersonalContact.class, pc_id ); - - Address a2 = new Address( a2_id, "a2" ); - a2.setContact( pc ); + scope.inTransaction( em -> { + PersonalContact pc = em.find( PersonalContact.class, pc_id ); - em.persist( a2 ); + Address a2 = new Address( a2_id, "a2" ); + a2.setContact( pc ); - em.getTransaction().commit(); + em.persist( a2 ); + } ); } @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( Contact.class, pc_id ) ); - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( PersonalContact.class, pc_id ) ); - - assert Arrays.asList( 1 ).equals( getAuditReader().getRevisions( Address.class, a1_id ) ); - assert Arrays.asList( 1 ).equals( getAuditReader().getRevisions( Address.class, a1_id ) ); - - assert Arrays.asList( 2 ).equals( getAuditReader().getRevisions( Address.class, a2_id ) ); - assert Arrays.asList( 2 ).equals( getAuditReader().getRevisions( Address.class, a2_id ) ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1, 2 ), auditReader.getRevisions( Contact.class, pc_id ) ); + assertEquals( Arrays.asList( 1, 2 ), auditReader.getRevisions( PersonalContact.class, pc_id ) ); + + assertEquals( Arrays.asList( 1 ), auditReader.getRevisions( Address.class, a1_id ) ); + assertEquals( Arrays.asList( 1 ), auditReader.getRevisions( Address.class, a1_id ) ); + + assertEquals( Arrays.asList( 2 ), auditReader.getRevisions( Address.class, a2_id ) ); + assertEquals( Arrays.asList( 2 ), auditReader.getRevisions( Address.class, a2_id ) ); + } ); } @Test - public void testHistoryOfContact() { - assert getAuditReader().find( Contact.class, pc_id, 1 ).getAddresses().equals( - TestTools.makeSet( new Address( a1_id, "a1" ) ) - ); - - assert getAuditReader().find( Contact.class, pc_id, 2 ).getAddresses().equals( - TestTools.makeSet( new Address( a1_id, "a1" ), new Address( a2_id, "a2" ) ) - ); + public void testHistoryOfContact(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( + TestTools.makeSet( new Address( a1_id, "a1" ) ), + auditReader.find( Contact.class, pc_id, 1 ).getAddresses() + ); + + assertEquals( + TestTools.makeSet( new Address( a1_id, "a1" ), new Address( a2_id, "a2" ) ), + auditReader.find( Contact.class, pc_id, 2 ).getAddresses() + ); + } ); } @Test - public void testHistoryOfPersonalContact() { - assert getAuditReader().find( PersonalContact.class, pc_id, 1 ).getAddresses().equals( - TestTools.makeSet( new Address( a1_id, "a1" ) ) - ); - - assert getAuditReader().find( PersonalContact.class, pc_id, 2 ).getAddresses().equals( - TestTools.makeSet( new Address( a1_id, "a1" ), new Address( a2_id, "a2" ) ) - ); + public void testHistoryOfPersonalContact(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( + TestTools.makeSet( new Address( a1_id, "a1" ) ), + auditReader.find( PersonalContact.class, pc_id, 1 ).getAddresses() + ); + + assertEquals( + TestTools.makeSet( new Address( a1_id, "a1" ), new Address( a2_id, "a2" ) ), + auditReader.find( PersonalContact.class, pc_id, 2 ).getAddresses() + ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/tableperclass/relation/PolymorphicCollection.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/tableperclass/relation/PolymorphicCollection.java index f30843c1592f..ab1f5902067f 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/tableperclass/relation/PolymorphicCollection.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/inheritance/tableperclass/relation/PolymorphicCollection.java @@ -5,84 +5,83 @@ package org.hibernate.orm.test.envers.integration.inheritance.tableperclass.relation; import java.util.Arrays; -import jakarta.persistence.EntityManager; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.orm.test.envers.tools.TestTools; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; -import org.junit.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Adam Warski (adam at warski dot org) */ -public class PolymorphicCollection extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {ChildIngEntity.class, ParentIngEntity.class, ReferencedEntity.class}) +public class PolymorphicCollection { private Integer ed_id1; private Integer c_id; private Integer p_id; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {ChildIngEntity.class, ParentIngEntity.class, ReferencedEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { ed_id1 = 1; p_id = 10; c_id = 100; // Rev 1 - em.getTransaction().begin(); - - ReferencedEntity re = new ReferencedEntity( ed_id1 ); - em.persist( re ); - - em.getTransaction().commit(); + scope.inTransaction( em -> { + ReferencedEntity re = new ReferencedEntity( ed_id1 ); + em.persist( re ); + } ); // Rev 2 - em.getTransaction().begin(); + scope.inTransaction( em -> { + ReferencedEntity re = em.find( ReferencedEntity.class, ed_id1 ); - re = em.find( ReferencedEntity.class, ed_id1 ); - - ParentIngEntity pie = new ParentIngEntity( p_id, "x" ); - pie.setReferenced( re ); - em.persist( pie ); - p_id = pie.getId(); - - em.getTransaction().commit(); + ParentIngEntity pie = new ParentIngEntity( p_id, "x" ); + pie.setReferenced( re ); + em.persist( pie ); + p_id = pie.getId(); + } ); // Rev 3 - em.getTransaction().begin(); - - re = em.find( ReferencedEntity.class, ed_id1 ); - - ChildIngEntity cie = new ChildIngEntity( c_id, "y", 1l ); - cie.setReferenced( re ); - em.persist( cie ); - c_id = cie.getId(); - - em.getTransaction().commit(); + scope.inTransaction( em -> { + ReferencedEntity re = em.find( ReferencedEntity.class, ed_id1 ); + + ChildIngEntity cie = new ChildIngEntity( c_id, "y", 1l ); + cie.setReferenced( re ); + em.persist( cie ); + c_id = cie.getId(); + } ); } @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2, 3 ).equals( getAuditReader().getRevisions( ReferencedEntity.class, ed_id1 ) ); - assert Arrays.asList( 2 ).equals( getAuditReader().getRevisions( ParentIngEntity.class, p_id ) ); - assert Arrays.asList( 3 ).equals( getAuditReader().getRevisions( ChildIngEntity.class, c_id ) ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1, 2, 3 ), auditReader.getRevisions( ReferencedEntity.class, ed_id1 ) ); + assertEquals( Arrays.asList( 2 ), auditReader.getRevisions( ParentIngEntity.class, p_id ) ); + assertEquals( Arrays.asList( 3 ), auditReader.getRevisions( ChildIngEntity.class, c_id ) ); + } ); } @Test - public void testHistoryOfReferencedCollection() { - assert getAuditReader().find( ReferencedEntity.class, ed_id1, 1 ).getReferencing().size() == 0; - assert getAuditReader().find( ReferencedEntity.class, ed_id1, 2 ).getReferencing().equals( - TestTools.makeSet( new ParentIngEntity( p_id, "x" ) ) - ); - assert getAuditReader().find( ReferencedEntity.class, ed_id1, 3 ).getReferencing().equals( - TestTools.makeSet( new ParentIngEntity( p_id, "x" ), new ChildIngEntity( c_id, "y", 1l ) ) - ); + public void testHistoryOfReferencedCollection(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( 0, auditReader.find( ReferencedEntity.class, ed_id1, 1 ).getReferencing().size() ); + assertEquals( + TestTools.makeSet( new ParentIngEntity( p_id, "x" ) ), + auditReader.find( ReferencedEntity.class, ed_id1, 2 ).getReferencing() + ); + assertEquals( + TestTools.makeSet( new ParentIngEntity( p_id, "x" ), new ChildIngEntity( c_id, "y", 1l ) ), + auditReader.find( ReferencedEntity.class, ed_id1, 3 ).getReferencing() + ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/components/InterfacesComponents.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/components/InterfacesComponents.java index 4c82b4fb1044..5c8118ace25a 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/components/InterfacesComponents.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/components/InterfacesComponents.java @@ -5,73 +5,67 @@ package org.hibernate.orm.test.envers.integration.interfaces.components; import java.util.Arrays; -import jakarta.persistence.EntityManager; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; -import org.junit.Test; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Adam Warski (adam at warski dot org) */ -public class InterfacesComponents extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {ComponentTestEntity.class}) +public class InterfacesComponents { private Integer id1; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {ComponentTestEntity.class}; - } - - @Test - @Priority(10) - public void initData() { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - - ComponentTestEntity cte1 = new ComponentTestEntity( new Component1( "a" ) ); - - em.persist( cte1 ); - - em.getTransaction().commit(); + scope.inTransaction( em -> { + ComponentTestEntity cte1 = new ComponentTestEntity( new Component1( "a" ) ); + em.persist( cte1 ); + id1 = cte1.getId(); + } ); // Revision 2 - em = getEntityManager(); - em.getTransaction().begin(); - - cte1 = em.find( ComponentTestEntity.class, cte1.getId() ); - - cte1.setComp1( new Component1( "b" ) ); - - em.getTransaction().commit(); + scope.inTransaction( em -> { + ComponentTestEntity cte1 = em.find( ComponentTestEntity.class, id1 ); + cte1.setComp1( new Component1( "b" ) ); + } ); // Revision 3 - em = getEntityManager(); - em.getTransaction().begin(); - - cte1 = em.find( ComponentTestEntity.class, cte1.getId() ); - - cte1.getComp1().setData( "c" ); - - em.getTransaction().commit(); - - id1 = cte1.getId(); + scope.inTransaction( em -> { + ComponentTestEntity cte1 = em.find( ComponentTestEntity.class, id1 ); + cte1.getComp1().setData( "c" ); + } ); } @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2, 3 ).equals( getAuditReader().getRevisions( ComponentTestEntity.class, id1 ) ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1, 2, 3 ), auditReader.getRevisions( ComponentTestEntity.class, id1 ) ); + } ); } @Test - public void testHistoryOfId1() { - ComponentTestEntity ver1 = new ComponentTestEntity( id1, new Component1( "a" ) ); - ComponentTestEntity ver2 = new ComponentTestEntity( id1, new Component1( "b" ) ); - ComponentTestEntity ver3 = new ComponentTestEntity( id1, new Component1( "c" ) ); - - assert getAuditReader().find( ComponentTestEntity.class, id1, 1 ).equals( ver1 ); - assert getAuditReader().find( ComponentTestEntity.class, id1, 2 ).equals( ver2 ); - assert getAuditReader().find( ComponentTestEntity.class, id1, 3 ).equals( ver3 ); + public void testHistoryOfId1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + + ComponentTestEntity ver1 = new ComponentTestEntity( id1, new Component1( "a" ) ); + ComponentTestEntity ver2 = new ComponentTestEntity( id1, new Component1( "b" ) ); + ComponentTestEntity ver3 = new ComponentTestEntity( id1, new Component1( "c" ) ); + + assertEquals( ver1, auditReader.find( ComponentTestEntity.class, id1, 1 ) ); + assertEquals( ver2, auditReader.find( ComponentTestEntity.class, id1, 2 ) ); + assertEquals( ver3, auditReader.find( ComponentTestEntity.class, id1, 3 ) ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/hbm/allAudited/AbstractAllAuditedTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/hbm/allAudited/AbstractAllAuditedTest.java index d15d5c3fdce2..3e2b9bc5344e 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/hbm/allAudited/AbstractAllAuditedTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/hbm/allAudited/AbstractAllAuditedTest.java @@ -5,123 +5,127 @@ package org.hibernate.orm.test.envers.integration.interfaces.hbm.allAudited; import java.util.Arrays; -import jakarta.persistence.EntityManager; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.exception.NotAuditedException; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; -import org.junit.Assert; -import org.junit.Test; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertInstanceOf; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertNull; /** - * @author Hern�n Chanfreau + * @author Hernán Chanfreau * @author Adam Warski (adam at warski dot org) */ -public abstract class AbstractAllAuditedTest extends BaseEnversJPAFunctionalTestCase { +public abstract class AbstractAllAuditedTest { private long ai_id; private long nai_id; - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - AuditedImplementor ai = new AuditedImplementor(); - ai.setData( "La data" ); - ai.setAuditedImplementorData( "audited implementor data" ); - - NonAuditedImplementor nai = new NonAuditedImplementor(); - nai.setData( "info" ); - nai.setNonAuditedImplementorData( "sttring" ); - + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Revision 1 - em.getTransaction().begin(); + scope.inTransaction( em -> { + AuditedImplementor ai = new AuditedImplementor(); + ai.setData( "La data" ); + ai.setAuditedImplementorData( "audited implementor data" ); - em.persist( ai ); + NonAuditedImplementor nai = new NonAuditedImplementor(); + nai.setData( "info" ); + nai.setNonAuditedImplementorData( "sttring" ); - em.persist( nai ); + em.persist( ai ); + em.persist( nai ); - em.getTransaction().commit(); + ai_id = ai.getId(); + nai_id = nai.getId(); + } ); // Revision 2 - em.getTransaction().begin(); + scope.inTransaction( em -> { + AuditedImplementor ai = em.find( AuditedImplementor.class, ai_id ); + NonAuditedImplementor nai = em.find( NonAuditedImplementor.class, nai_id ); - ai = em.find( AuditedImplementor.class, ai.getId() ); - nai = em.find( NonAuditedImplementor.class, nai.getId() ); + ai.setData( "La data 2" ); + ai.setAuditedImplementorData( "audited implementor data 2" ); - ai.setData( "La data 2" ); - ai.setAuditedImplementorData( "audited implementor data 2" ); - - nai.setData( "info 2" ); - nai.setNonAuditedImplementorData( "sttring 2" ); - - em.getTransaction().commit(); - - // - - ai_id = ai.getId(); - nai_id = nai.getId(); + nai.setData( "info 2" ); + nai.setNonAuditedImplementorData( "sttring 2" ); + } ); } @Test - public void testRevisions() { - Assert.assertEquals( getAuditReader().getRevisions( AuditedImplementor.class, ai_id ), Arrays.asList( 1, 2 ) ); + public void testRevisions(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1, 2 ), auditReader.getRevisions( AuditedImplementor.class, ai_id ) ); + } ); } @Test - public void testRetrieveAudited() { - // levanto las versiones actuales - AuditedImplementor ai = getEntityManager().find( AuditedImplementor.class, ai_id ); - assert ai != null; - SimpleInterface si = getEntityManager().find( SimpleInterface.class, ai_id ); - assert si != null; - - // levanto las de la revisi�n 1, ninguna debe ser null - AuditedImplementor ai_rev1 = getAuditReader().find( AuditedImplementor.class, ai_id, 1 ); - assert ai_rev1 != null; - SimpleInterface si_rev1 = getAuditReader().find( SimpleInterface.class, ai_id, 1 ); - assert si_rev1 != null; - - AuditedImplementor ai_rev2 = getAuditReader().find( AuditedImplementor.class, ai_id, 2 ); - assert ai_rev2 != null; - SimpleInterface si_rev2 = getAuditReader().find( SimpleInterface.class, ai_id, 2 ); - assert si_rev2 != null; - - // data de las actuales no debe ser null - Assert.assertEquals( ai.getData(), "La data 2" ); - Assert.assertEquals( si.getData(), "La data 2" ); - // la data de las revisiones no debe ser null - Assert.assertEquals( ai_rev1.getData(), "La data" ); - Assert.assertEquals( si_rev1.getData(), "La data" ); - - Assert.assertEquals( ai_rev2.getData(), "La data 2" ); - Assert.assertEquals( si_rev2.getData(), "La data 2" ); + public void testRetrieveAudited(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + + // levanto las versiones actuales + AuditedImplementor ai = em.find( AuditedImplementor.class, ai_id ); + assertNotNull( ai ); + SimpleInterface si = em.find( SimpleInterface.class, ai_id ); + assertNotNull( si ); + + // levanto las de la revisión 1, ninguna debe ser null + AuditedImplementor ai_rev1 = auditReader.find( AuditedImplementor.class, ai_id, 1 ); + assertNotNull( ai_rev1 ); + SimpleInterface si_rev1 = auditReader.find( SimpleInterface.class, ai_id, 1 ); + assertNotNull( si_rev1 ); + + AuditedImplementor ai_rev2 = auditReader.find( AuditedImplementor.class, ai_id, 2 ); + assertNotNull( ai_rev2 ); + SimpleInterface si_rev2 = auditReader.find( SimpleInterface.class, ai_id, 2 ); + assertNotNull( si_rev2 ); + + // data de las actuales no debe ser null + assertEquals( "La data 2", ai.getData() ); + assertEquals( "La data 2", si.getData() ); + // la data de las revisiones no debe ser null + assertEquals( "La data", ai_rev1.getData() ); + assertEquals( "La data", si_rev1.getData() ); + + assertEquals( "La data 2", ai_rev2.getData() ); + assertEquals( "La data 2", si_rev2.getData() ); + } ); } @Test - public void testRetrieveNonAudited() { - // levanto las versiones actuales - NonAuditedImplementor nai = getEntityManager().find( NonAuditedImplementor.class, nai_id ); - assert nai != null; - SimpleInterface si = getEntityManager().find( SimpleInterface.class, nai_id ); - assert si != null; - - assert si.getData().equals( nai.getData() ); - - try { - // levanto la revision - getAuditReader().find( NonAuditedImplementor.class, nai_id, 1 ); - assert false; - } - catch (Exception e) { - // no es auditable!!! - assert (e instanceof NotAuditedException); - } - - // levanto la revision que no es auditable pero con la interfaz, el resultado debe ser null - SimpleInterface si_rev1 = getAuditReader().find( SimpleInterface.class, nai_id, 1 ); - assert si_rev1 == null; - + public void testRetrieveNonAudited(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + + // levanto las versiones actuales + NonAuditedImplementor nai = em.find( NonAuditedImplementor.class, nai_id ); + assertNotNull( nai ); + SimpleInterface si = em.find( SimpleInterface.class, nai_id ); + assertNotNull( si ); + + assertEquals( nai.getData(), si.getData() ); + + try { + // levanto la revision + auditReader.find( NonAuditedImplementor.class, nai_id, 1 ); + throw new AssertionError( "Expected NotAuditedException" ); + } + catch (Exception e) { + // no es auditable!!! + assertInstanceOf( NotAuditedException.class, e ); + } + + // levanto la revision que no es auditable pero con la interfaz, el resultado debe ser null + SimpleInterface si_rev1 = auditReader.find( SimpleInterface.class, nai_id, 1 ); + assertNull( si_rev1 ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/hbm/allAudited/joined/JoinedAllAuditedTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/hbm/allAudited/joined/JoinedAllAuditedTest.java new file mode 100644 index 000000000000..0d389d384252 --- /dev/null +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/hbm/allAudited/joined/JoinedAllAuditedTest.java @@ -0,0 +1,17 @@ +/* + * SPDX-License-Identifier: Apache-2.0 + * Copyright Red Hat Inc. and Hibernate Authors + */ +package org.hibernate.orm.test.envers.integration.interfaces.hbm.allAudited.joined; + +import org.hibernate.orm.test.envers.integration.interfaces.hbm.allAudited.AbstractAllAuditedTest; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.Jpa; + +/** + * @author Hernán Chanfreau + */ +@EnversTest +@Jpa(xmlMappings = "mappings/interfaces/joinedAllAuditedMappings.hbm.xml") +public class JoinedAllAuditedTest extends AbstractAllAuditedTest { +} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/hbm/allAudited/subclass/SubclassAllAuditedTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/hbm/allAudited/subclass/SubclassAllAuditedTest.java index a18f84833cdf..12ac28ce4982 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/hbm/allAudited/subclass/SubclassAllAuditedTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/hbm/allAudited/subclass/SubclassAllAuditedTest.java @@ -5,13 +5,13 @@ package org.hibernate.orm.test.envers.integration.interfaces.hbm.allAudited.subclass; import org.hibernate.orm.test.envers.integration.interfaces.hbm.allAudited.AbstractAllAuditedTest; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.Jpa; /** - * @author Hern�n Chanfreau + * @author Hernán Chanfreau */ +@EnversTest +@Jpa(xmlMappings = "mappings/interfaces/subclassAllAuditedMappings.hbm.xml") public class SubclassAllAuditedTest extends AbstractAllAuditedTest { - @Override - protected String[] getMappings() { - return new String[] {"mappings/interfaces/subclassAllAuditedMappings.hbm.xml"}; - } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/hbm/allAudited/union/UnionAllAuditedTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/hbm/allAudited/union/UnionAllAuditedTest.java index 2f80b71a0f14..0da3e594ebf7 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/hbm/allAudited/union/UnionAllAuditedTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/hbm/allAudited/union/UnionAllAuditedTest.java @@ -5,12 +5,15 @@ package org.hibernate.orm.test.envers.integration.interfaces.hbm.allAudited.union; import org.hibernate.orm.test.envers.integration.interfaces.hbm.allAudited.AbstractAllAuditedTest; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.Jpa; /** - * @author Hern�n Chanfreau + * @author Hernán Chanfreau */ +@EnversTest +@Jpa(xmlMappings = "mappings/interfaces/unionAllAuditedMappings.hbm.xml") public class UnionAllAuditedTest extends AbstractAllAuditedTest { - @Override protected String[] getMappings() { return new String[] {"mappings/interfaces/unionAllAuditedMappings.hbm.xml"}; } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/hbm/propertiesAudited/AbstractPropertiesAuditedTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/hbm/propertiesAudited/AbstractPropertiesAuditedTest.java index e8ad979e55c6..18f268da5b7b 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/hbm/propertiesAudited/AbstractPropertiesAuditedTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/hbm/propertiesAudited/AbstractPropertiesAuditedTest.java @@ -4,121 +4,99 @@ */ package org.hibernate.orm.test.envers.integration.interfaces.hbm.propertiesAudited; -import jakarta.persistence.EntityManager; - +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.exception.NotAuditedException; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; + +import org.junit.jupiter.api.Test; -import org.junit.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertThrows; /** - * @author Hern�n Chanfreau + * @author Hernán Chanfreau */ -public abstract class AbstractPropertiesAuditedTest extends BaseEnversJPAFunctionalTestCase { +public abstract class AbstractPropertiesAuditedTest { private long ai_id; private long nai_id; private static int NUMERITO = 555; - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - AuditedImplementor ai = new AuditedImplementor(); - ai.setData( "La data" ); - ai.setAuditedImplementorData( "audited implementor data" ); - ai.setNumerito( NUMERITO ); - - NonAuditedImplementor nai = new NonAuditedImplementor(); - nai.setData( "info" ); - nai.setNonAuditedImplementorData( "sttring" ); - nai.setNumerito( NUMERITO ); - - // Revision 1 - em.getTransaction().begin(); - - em.persist( ai ); - - em.persist( nai ); - - em.getTransaction().commit(); - - // Revision 2 - - // Revision 3 - - ai_id = ai.getId(); - nai_id = nai.getId(); + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + scope.inTransaction( em -> { + AuditedImplementor ai = new AuditedImplementor(); + ai.setData( "La data" ); + ai.setAuditedImplementorData( "audited implementor data" ); + ai.setNumerito( NUMERITO ); + + NonAuditedImplementor nai = new NonAuditedImplementor(); + nai.setData( "info" ); + nai.setNonAuditedImplementorData( "sttring" ); + nai.setNumerito( NUMERITO ); + + em.persist( ai ); + em.persist( nai ); + + ai_id = ai.getId(); + nai_id = nai.getId(); + } ); } @Test - public void testRetrieveAudited() { - // levanto las versiones actuales - AuditedImplementor ai = getEntityManager().find( - AuditedImplementor.class, ai_id - ); - assert ai != null; - SimpleInterface si = getEntityManager().find( - SimpleInterface.class, - ai_id - ); - assert si != null; - - // levanto las de la revisi�n 1, ninguna debe ser null - AuditedImplementor ai_rev1 = getAuditReader().find( - AuditedImplementor.class, ai_id, 1 - ); - assert ai_rev1 != null; - SimpleInterface si_rev1 = getAuditReader().find( - SimpleInterface.class, - ai_id, 1 - ); - assert si_rev1 != null; - - // data de las actuales no debe ser null - assert ai.getData() != null; - assert si.getData() != null; - // data de las revisiones No est� auditada - assert ai_rev1.getData() == null; - assert si_rev1.getData() == null; - // numerito de las revisiones est� auditada, debe ser igual a NUMERITO - assert ai_rev1.getNumerito() == NUMERITO; - assert si_rev1.getNumerito() == NUMERITO; + public void testRetrieveAudited(EntityManagerFactoryScope scope) { + scope.inTransaction( em -> { + // levanto las versiones actuales + AuditedImplementor ai = em.find( AuditedImplementor.class, ai_id ); + assertNotNull( ai ); + SimpleInterface si = em.find( SimpleInterface.class, ai_id ); + assertNotNull( si ); + + final var auditReader = AuditReaderFactory.get( em ); + + // levanto las de la revisión 1, ninguna debe ser null + AuditedImplementor ai_rev1 = auditReader.find( AuditedImplementor.class, ai_id, 1 ); + assertNotNull( ai_rev1 ); + SimpleInterface si_rev1 = auditReader.find( SimpleInterface.class, ai_id, 1 ); + assertNotNull( si_rev1 ); + + // data de las actuales no debe ser null + assertNotNull( ai.getData() ); + assertNotNull( si.getData() ); + // data de las revisiones No está auditada + assertNull( ai_rev1.getData() ); + assertNull( si_rev1.getData() ); + // numerito de las revisiones está auditada, debe ser igual a NUMERITO + assertEquals( NUMERITO, ai_rev1.getNumerito() ); + assertEquals( NUMERITO, si_rev1.getNumerito() ); + } ); } @Test - public void testRetrieveNonAudited() { - // levanto las versiones actuales - NonAuditedImplementor nai = getEntityManager().find( - NonAuditedImplementor.class, nai_id - ); - assert nai != null; - SimpleInterface si = getEntityManager().find( - SimpleInterface.class, - nai_id - ); - assert si != null; - - assert si.getData().equals( nai.getData() ); - - try { + public void testRetrieveNonAudited(EntityManagerFactoryScope scope) { + scope.inTransaction( em -> { + // levanto las versiones actuales + NonAuditedImplementor nai = em.find( NonAuditedImplementor.class, nai_id ); + assertNotNull( nai ); + SimpleInterface si = em.find( SimpleInterface.class, nai_id ); + assertNotNull( si ); + + assertEquals( nai.getData(), si.getData() ); + + final var auditReader = AuditReaderFactory.get( em ); + // levanto la revision - getAuditReader().find( NonAuditedImplementor.class, nai_id, 1 ); - assert false; - } - catch (Exception e) { - // no es auditable!!! - assert (e instanceof NotAuditedException); - } - - // levanto la revision que no es auditable pero con la interfaz, el - // resultado debe ser null - SimpleInterface si_rev1 = getAuditReader().find( - SimpleInterface.class, - nai_id, 1 - ); - assert si_rev1 == null; + assertThrows( NotAuditedException.class, () -> { + auditReader.find( NonAuditedImplementor.class, nai_id, 1 ); + } ); + + // levanto la revision que no es auditable pero con la interfaz, el + // resultado debe ser null + SimpleInterface si_rev1 = auditReader.find( SimpleInterface.class, nai_id, 1 ); + assertNull( si_rev1 ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/hbm/propertiesAudited/joined/JoinedPropertiesAuditedTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/hbm/propertiesAudited/joined/JoinedPropertiesAuditedTest.java index 9d6756b8dfdf..6e96b30d3f36 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/hbm/propertiesAudited/joined/JoinedPropertiesAuditedTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/hbm/propertiesAudited/joined/JoinedPropertiesAuditedTest.java @@ -5,14 +5,13 @@ package org.hibernate.orm.test.envers.integration.interfaces.hbm.propertiesAudited.joined; import org.hibernate.orm.test.envers.integration.interfaces.hbm.propertiesAudited.AbstractPropertiesAuditedTest; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.Jpa; /** - * @author Hern�n Chanfreau + * @author Hernán Chanfreau */ +@EnversTest +@Jpa(xmlMappings = "mappings/interfaces/joinedPropertiesAuditedMappings.hbm.xml") public class JoinedPropertiesAuditedTest extends AbstractPropertiesAuditedTest { - - @Override - protected String[] getMappings() { - return new String[] {"mappings/interfaces/joinedPropertiesAuditedMappings.hbm.xml"}; - } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/hbm/propertiesAudited/subclass/SubclassPropertiesAuditedTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/hbm/propertiesAudited/subclass/SubclassPropertiesAuditedTest.java index 8d0031f54184..9a22065a7be5 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/hbm/propertiesAudited/subclass/SubclassPropertiesAuditedTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/hbm/propertiesAudited/subclass/SubclassPropertiesAuditedTest.java @@ -5,13 +5,13 @@ package org.hibernate.orm.test.envers.integration.interfaces.hbm.propertiesAudited.subclass; import org.hibernate.orm.test.envers.integration.interfaces.hbm.propertiesAudited.AbstractPropertiesAuditedTest; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.Jpa; /** - * @author Hern�n Chanfreau + * @author Hernán Chanfreau */ +@EnversTest +@Jpa(xmlMappings = "mappings/interfaces/subclassPropertiesAuditedMappings.hbm.xml") public class SubclassPropertiesAuditedTest extends AbstractPropertiesAuditedTest { - @Override - protected String[] getMappings() { - return new String[] {"mappings/interfaces/subclassPropertiesAuditedMappings.hbm.xml"}; - } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/hbm/propertiesAudited/union/UnionPropertiesAuditedTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/hbm/propertiesAudited/union/UnionPropertiesAuditedTest.java index 9424ff8ce0c3..4ee98ff36ca9 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/hbm/propertiesAudited/union/UnionPropertiesAuditedTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/hbm/propertiesAudited/union/UnionPropertiesAuditedTest.java @@ -5,14 +5,13 @@ package org.hibernate.orm.test.envers.integration.interfaces.hbm.propertiesAudited.union; import org.hibernate.orm.test.envers.integration.interfaces.hbm.propertiesAudited.AbstractPropertiesAuditedTest; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.Jpa; /** - * @author Hern�n Chanfreau + * @author Hernán Chanfreau */ +@EnversTest +@Jpa(xmlMappings = "mappings/interfaces/unionPropertiesAuditedMappings.hbm.xml") public class UnionPropertiesAuditedTest extends AbstractPropertiesAuditedTest { - - @Override - protected String[] getMappings() { - return new String[] {"mappings/interfaces/unionPropertiesAuditedMappings.hbm.xml"}; - } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/hbm/propertiesAudited2/AbstractPropertiesAudited2Test.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/hbm/propertiesAudited2/AbstractPropertiesAudited2Test.java index 07e4e4989dea..44432d757269 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/hbm/propertiesAudited2/AbstractPropertiesAudited2Test.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/hbm/propertiesAudited2/AbstractPropertiesAudited2Test.java @@ -4,121 +4,101 @@ */ package org.hibernate.orm.test.envers.integration.interfaces.hbm.propertiesAudited2; -import jakarta.persistence.EntityManager; - +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.exception.NotAuditedException; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; + +import org.junit.jupiter.api.Test; -import org.junit.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertThrows; /** - * @author Hern�n Chanfreau + * @author Hernán Chanfreau */ -public abstract class AbstractPropertiesAudited2Test extends BaseEnversJPAFunctionalTestCase { +public abstract class AbstractPropertiesAudited2Test { private long ai_id; private long nai_id; private static int NUMERITO = 555; - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - AuditedImplementor ai = new AuditedImplementor(); - ai.setData( "La data" ); - ai.setAuditedImplementorData( "audited implementor data" ); - ai.setNumerito( NUMERITO ); - - NonAuditedImplementor nai = new NonAuditedImplementor(); - nai.setData( "info" ); - nai.setNonAuditedImplementorData( "sttring" ); - nai.setNumerito( NUMERITO ); - - // Revision 1 - em.getTransaction().begin(); - - em.persist( ai ); - - em.persist( nai ); + protected abstract String[] getMappings(); - em.getTransaction().commit(); + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + scope.inTransaction( em -> { + AuditedImplementor ai = new AuditedImplementor(); + ai.setData( "La data" ); + ai.setAuditedImplementorData( "audited implementor data" ); + ai.setNumerito( NUMERITO ); - // Revision 2 + NonAuditedImplementor nai = new NonAuditedImplementor(); + nai.setData( "info" ); + nai.setNonAuditedImplementorData( "sttring" ); + nai.setNumerito( NUMERITO ); - // Revision 3 + em.persist( ai ); + em.persist( nai ); - ai_id = ai.getId(); - nai_id = nai.getId(); + ai_id = ai.getId(); + nai_id = nai.getId(); + } ); } @Test - public void testRetrieveAudited() { - // levanto las versiones actuales - AuditedImplementor ai = getEntityManager().find( - AuditedImplementor.class, ai_id - ); - assert ai != null; - SimpleInterface si = getEntityManager().find( - SimpleInterface.class, - ai_id - ); - assert si != null; - - // levanto las de la revisi�n 1, ninguna debe ser null - AuditedImplementor ai_rev1 = getAuditReader().find( - AuditedImplementor.class, ai_id, 1 - ); - assert ai_rev1 != null; - SimpleInterface si_rev1 = getAuditReader().find( - SimpleInterface.class, - ai_id, 1 - ); - assert si_rev1 != null; - - // data de las actuales no debe ser null - assert ai.getData() != null; - assert si.getData() != null; - // data de las revisiones est� auditada - assert ai_rev1.getData() != null; - assert si_rev1.getData() != null; - // numerito de las revisiones est� auditada, debe ser igual a NUMERITO - assert ai_rev1.getNumerito() == NUMERITO; - assert si_rev1.getNumerito() == NUMERITO; + public void testRetrieveAudited(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + + // levanto las versiones actuales + AuditedImplementor ai = em.find( AuditedImplementor.class, ai_id ); + assertNotNull( ai ); + SimpleInterface si = em.find( SimpleInterface.class, ai_id ); + assertNotNull( si ); + + // levanto las de la revisión 1, ninguna debe ser null + AuditedImplementor ai_rev1 = auditReader.find( AuditedImplementor.class, ai_id, 1 ); + assertNotNull( ai_rev1 ); + SimpleInterface si_rev1 = auditReader.find( SimpleInterface.class, ai_id, 1 ); + assertNotNull( si_rev1 ); + + // data de las actuales no debe ser null + assertNotNull( ai.getData() ); + assertNotNull( si.getData() ); + // data de las revisiones está auditada + assertNotNull( ai_rev1.getData() ); + assertNotNull( si_rev1.getData() ); + // numerito de las revisiones está auditada, debe ser igual a NUMERITO + assertEquals( NUMERITO, ai_rev1.getNumerito() ); + assertEquals( NUMERITO, si_rev1.getNumerito() ); + } ); } @Test - public void testRetrieveNonAudited() { - // levanto las versiones actuales - NonAuditedImplementor nai = getEntityManager().find( - NonAuditedImplementor.class, nai_id - ); - assert nai != null; - SimpleInterface si = getEntityManager().find( - SimpleInterface.class, - nai_id - ); - assert si != null; - - assert si.getData().equals( nai.getData() ); - - try { - // levanto la revision - getAuditReader().find( NonAuditedImplementor.class, nai_id, 1 ); - assert false; - } - catch (Exception e) { - // no es auditable!!! - assert (e instanceof NotAuditedException); - } - - // levanto la revision que no es auditable pero con la interfaz, el - // resultado debe ser null - SimpleInterface si_rev1 = getAuditReader().find( - SimpleInterface.class, - nai_id, 1 - ); - assert si_rev1 == null; + public void testRetrieveNonAudited(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + + // levanto las versiones actuales + NonAuditedImplementor nai = em.find( NonAuditedImplementor.class, nai_id ); + assertNotNull( nai ); + SimpleInterface si = em.find( SimpleInterface.class, nai_id ); + assertNotNull( si ); + + assertEquals( nai.getData(), si.getData() ); + + // levanto la revision - no es auditable!!! + assertThrows( NotAuditedException.class, () -> { + auditReader.find( NonAuditedImplementor.class, nai_id, 1 ); + } ); + + // levanto la revision que no es auditable pero con la interfaz, el + // resultado debe ser null + SimpleInterface si_rev1 = auditReader.find( SimpleInterface.class, nai_id, 1 ); + assertNull( si_rev1 ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/hbm/propertiesAudited2/joined/JoinedPropertiesAudited2Test.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/hbm/propertiesAudited2/joined/JoinedPropertiesAudited2Test.java index 19dc54ec5e35..2375dddf136f 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/hbm/propertiesAudited2/joined/JoinedPropertiesAudited2Test.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/hbm/propertiesAudited2/joined/JoinedPropertiesAudited2Test.java @@ -5,10 +5,14 @@ package org.hibernate.orm.test.envers.integration.interfaces.hbm.propertiesAudited2.joined; import org.hibernate.orm.test.envers.integration.interfaces.hbm.propertiesAudited2.AbstractPropertiesAudited2Test; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.Jpa; /** - * @author Hern�n Chanfreau + * @author Hernán Chanfreau */ +@EnversTest +@Jpa(xmlMappings = "mappings/interfaces/joinedPropertiesAudited2Mappings.hbm.xml") public class JoinedPropertiesAudited2Test extends AbstractPropertiesAudited2Test { @Override protected String[] getMappings() { diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/hbm/propertiesAudited2/subclass/SubclassPropertiesAudited2Test.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/hbm/propertiesAudited2/subclass/SubclassPropertiesAudited2Test.java index 60858a5b8278..564143eda539 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/hbm/propertiesAudited2/subclass/SubclassPropertiesAudited2Test.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/hbm/propertiesAudited2/subclass/SubclassPropertiesAudited2Test.java @@ -5,14 +5,17 @@ package org.hibernate.orm.test.envers.integration.interfaces.hbm.propertiesAudited2.subclass; import org.hibernate.orm.test.envers.integration.interfaces.hbm.propertiesAudited2.AbstractPropertiesAudited2Test; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.Jpa; /** - * @author Hern�n Chanfreau + * @author Hernán Chanfreau */ +@EnversTest +@Jpa(xmlMappings = "mappings/interfaces/subclassPropertiesAudited2Mappings.hbm.xml") public class SubclassPropertiesAudited2Test extends AbstractPropertiesAudited2Test { @Override protected String[] getMappings() { return new String[] {"mappings/interfaces/subclassPropertiesAudited2Mappings.hbm.xml"}; } - } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/hbm/propertiesAudited2/union/UnionPropertiesAudited2Test.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/hbm/propertiesAudited2/union/UnionPropertiesAudited2Test.java index 7d05823af8a9..5a0b7d09b38d 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/hbm/propertiesAudited2/union/UnionPropertiesAudited2Test.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/hbm/propertiesAudited2/union/UnionPropertiesAudited2Test.java @@ -5,10 +5,14 @@ package org.hibernate.orm.test.envers.integration.interfaces.hbm.propertiesAudited2.union; import org.hibernate.orm.test.envers.integration.interfaces.hbm.propertiesAudited2.AbstractPropertiesAudited2Test; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.Jpa; /** - * @author Hern�n Chanfreau + * @author Hernán Chanfreau */ +@EnversTest +@Jpa(xmlMappings = "mappings/interfaces/unionPropertiesAudited2Mappings.hbm.xml") public class UnionPropertiesAudited2Test extends AbstractPropertiesAudited2Test { @Override protected String[] getMappings() { diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/relation/InterfacesRelation.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/relation/InterfacesRelation.java index 7b61e395ac42..0c12f65592a0 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/relation/InterfacesRelation.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/relation/InterfacesRelation.java @@ -5,93 +5,100 @@ package org.hibernate.orm.test.envers.integration.interfaces.relation; import java.util.Arrays; -import jakarta.persistence.EntityManager; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; -import org.junit.Test; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNull; /** * @author Adam Warski (adam at warski dot org) */ -public class InterfacesRelation extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {SetRefEdEntity.class, SetRefIngEntity.class}) +public class InterfacesRelation { private Integer ed1_id; private Integer ed2_id; private Integer ing1_id; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {SetRefEdEntity.class, SetRefIngEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + SetRefEdEntity ed1 = new SetRefEdEntity( 1, "data_ed_1" ); + SetRefEdEntity ed2 = new SetRefEdEntity( 2, "data_ed_2" ); - SetRefEdEntity ed1 = new SetRefEdEntity( 1, "data_ed_1" ); - SetRefEdEntity ed2 = new SetRefEdEntity( 2, "data_ed_2" ); + SetRefIngEntity ing1 = new SetRefIngEntity( 3, "data_ing_1" ); - SetRefIngEntity ing1 = new SetRefIngEntity( 3, "data_ing_1" ); + // Revision 1 + em.getTransaction().begin(); - // Revision 1 - em.getTransaction().begin(); + em.persist( ed1 ); + em.persist( ed2 ); - em.persist( ed1 ); - em.persist( ed2 ); + em.getTransaction().commit(); - em.getTransaction().commit(); + // Revision 2 - // Revision 2 + em.getTransaction().begin(); - em.getTransaction().begin(); + ed1 = em.find( SetRefEdEntity.class, ed1.getId() ); - ed1 = em.find( SetRefEdEntity.class, ed1.getId() ); + ing1.setReference( ed1 ); + em.persist( ing1 ); - ing1.setReference( ed1 ); - em.persist( ing1 ); + em.getTransaction().commit(); - em.getTransaction().commit(); + // Revision 3 + em.getTransaction().begin(); - // Revision 3 - em.getTransaction().begin(); + ing1 = em.find( SetRefIngEntity.class, ing1.getId() ); + ed2 = em.find( SetRefEdEntity.class, ed2.getId() ); - ing1 = em.find( SetRefIngEntity.class, ing1.getId() ); - ed2 = em.find( SetRefEdEntity.class, ed2.getId() ); + ing1.setReference( ed2 ); - ing1.setReference( ed2 ); + em.getTransaction().commit(); - em.getTransaction().commit(); + // - // + ed1_id = ed1.getId(); + ed2_id = ed2.getId(); - ed1_id = ed1.getId(); - ed2_id = ed2.getId(); - - ing1_id = ing1.getId(); + ing1_id = ing1.getId(); + } ); } @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1 ).equals( getAuditReader().getRevisions( SetRefEdEntity.class, ed1_id ) ); - assert Arrays.asList( 1 ).equals( getAuditReader().getRevisions( SetRefEdEntity.class, ed2_id ) ); - - assert Arrays.asList( 2, 3 ).equals( getAuditReader().getRevisions( SetRefIngEntity.class, ing1_id ) ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1 ), auditReader.getRevisions( SetRefEdEntity.class, ed1_id ) ); + assertEquals( Arrays.asList( 1 ), auditReader.getRevisions( SetRefEdEntity.class, ed2_id ) ); + assertEquals( Arrays.asList( 2, 3 ), auditReader.getRevisions( SetRefIngEntity.class, ing1_id ) ); + } ); } @Test - public void testHistoryOfEdIng1() { - SetRefEdEntity ed1 = getEntityManager().find( SetRefEdEntity.class, ed1_id ); - SetRefEdEntity ed2 = getEntityManager().find( SetRefEdEntity.class, ed2_id ); + public void testHistoryOfEdIng1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + + SetRefEdEntity ed1 = em.find( SetRefEdEntity.class, ed1_id ); + SetRefEdEntity ed2 = em.find( SetRefEdEntity.class, ed2_id ); - SetRefIngEntity rev1 = getAuditReader().find( SetRefIngEntity.class, ing1_id, 1 ); - SetRefIngEntity rev2 = getAuditReader().find( SetRefIngEntity.class, ing1_id, 2 ); - SetRefIngEntity rev3 = getAuditReader().find( SetRefIngEntity.class, ing1_id, 3 ); + SetRefIngEntity rev1 = auditReader.find( SetRefIngEntity.class, ing1_id, 1 ); + SetRefIngEntity rev2 = auditReader.find( SetRefIngEntity.class, ing1_id, 2 ); + SetRefIngEntity rev3 = auditReader.find( SetRefIngEntity.class, ing1_id, 3 ); - assert rev1 == null; - assert rev2.getReference().equals( ed1 ); - assert rev3.getReference().equals( ed2 ); + assertNull( rev1 ); + assertEquals( ed1, rev2.getReference() ); + assertEquals( ed2, rev3.getReference() ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/relation/SetRefEdEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/relation/SetRefEdEntity.java index f4dba38413b0..7a54d360716a 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/relation/SetRefEdEntity.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/interfaces/relation/SetRefEdEntity.java @@ -60,10 +60,10 @@ public boolean equals(Object o) { SetRefEdEntity that = (SetRefEdEntity) o; - if ( data != null ? !data.equals( that.data ) : that.data != null ) { + if ( data != null ? !data.equals( that.getData() ) : that.getData() != null ) { return false; } - if ( id != null ? !id.equals( that.id ) : that.id != null ) { + if ( id != null ? !id.equals( that.getId() ) : that.getId() != null ) { return false; } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/jta/DeleteCollectionJtaSessionClosedBeforeCommitTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/jta/DeleteCollectionJtaSessionClosedBeforeCommitTest.java index 133fd61ba885..4d29f2bbc328 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/jta/DeleteCollectionJtaSessionClosedBeforeCommitTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/jta/DeleteCollectionJtaSessionClosedBeforeCommitTest.java @@ -7,51 +7,51 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; -import java.util.Map; -import jakarta.persistence.Entity; -import jakarta.persistence.EntityManager; -import jakarta.persistence.Id; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.JoinTable; -import jakarta.persistence.OneToMany; -import jakarta.persistence.Table; import org.hibernate.cfg.AvailableSettings; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.testing.orm.junit.JiraKey; +import org.hibernate.testing.envers.junit.EnversTest; import org.hibernate.testing.jta.TestingJtaBootstrap; import org.hibernate.testing.jta.TestingJtaPlatformImpl; -import org.junit.Test; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.JiraKey; +import org.hibernate.testing.orm.junit.Jpa; +import org.hibernate.testing.orm.junit.Setting; +import org.hibernate.testing.orm.junit.SettingConfiguration; +import org.junit.jupiter.api.Test; -import static org.junit.Assert.assertEquals; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.JoinTable; +import jakarta.persistence.OneToMany; +import jakarta.persistence.Table; + +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Andrea Boriero */ @JiraKey(value = "HHH-11580") -public class DeleteCollectionJtaSessionClosedBeforeCommitTest extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = { + DeleteCollectionJtaSessionClosedBeforeCommitTest.TestEntity.class, + DeleteCollectionJtaSessionClosedBeforeCommitTest.OtherTestEntity.class +}, + integrationSettings = @Setting(name = AvailableSettings.ALLOW_JTA_TRANSACTION_ACCESS, value = "true"), + settingConfigurations = @SettingConfiguration(configurer = TestingJtaBootstrap.class) +) +public class DeleteCollectionJtaSessionClosedBeforeCommitTest { private static final int ENTITY_ID = 1; private static final int OTHER_ENTITY_ID = 2; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {TestEntity.class, OtherTestEntity.class}; - } - - @Override - protected void addConfigOptions(Map options) { - TestingJtaBootstrap.prepare( options ); - options.put( AvailableSettings.ALLOW_JTA_TRANSACTION_ACCESS, "true" ); - } - - @Test - @Priority(10) - public void initData() throws Exception { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) throws Exception { TestingJtaPlatformImpl.INSTANCE.getTransactionManager().begin(); - EntityManager entityManager = getEntityManager(); + var entityManager = scope.getEntityManagerFactory().createEntityManager(); try { TestEntity entity = new TestEntity( ENTITY_ID, "Fab" ); entityManager.persist( entity ); @@ -61,14 +61,14 @@ public void initData() throws Exception { entity.addOther( other ); entityManager.persist( entity ); entityManager.persist( other ); - + entityManager.flush(); } finally { entityManager.close(); TestingJtaPlatformImpl.tryCommit(); } TestingJtaPlatformImpl.INSTANCE.getTransactionManager().begin(); - entityManager = getEntityManager(); + entityManager = scope.getEntityManagerFactory().createEntityManager(); try { TestEntity entity = entityManager.find( TestEntity.class, ENTITY_ID ); OtherTestEntity other = entityManager.find( OtherTestEntity.class, OTHER_ENTITY_ID ); @@ -76,25 +76,25 @@ public void initData() throws Exception { entityManager.remove( other ); } finally { - entityManager.close(); TestingJtaPlatformImpl.tryCommit(); + entityManager.close(); } } @Test - public void testRevisionCounts() { - assertEquals( + public void testRevisionCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( entityManager -> assertEquals( Arrays.asList( 1, 2 ), - getAuditReader().getRevisions( TestEntity.class, ENTITY_ID ) - ); + AuditReaderFactory.get( entityManager ).getRevisions( TestEntity.class, ENTITY_ID ) + ) ); } @Test - public void testRevisionHistory() { - assertEquals( + public void testRevisionHistory(EntityManagerFactoryScope scope) { + scope.inEntityManager( entityManager -> assertEquals( new TestEntity( 1, "Fab" ), - getAuditReader().find( TestEntity.class, ENTITY_ID, 1 ) - ); + AuditReaderFactory.get( entityManager ).find( TestEntity.class, ENTITY_ID, 1 ) + ) ); } @Audited diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/jta/IdentifierProxyJtaSessionClosedBeforeCommitTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/jta/IdentifierProxyJtaSessionClosedBeforeCommitTest.java index e0679123dda9..8a109d78576e 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/jta/IdentifierProxyJtaSessionClosedBeforeCommitTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/jta/IdentifierProxyJtaSessionClosedBeforeCommitTest.java @@ -7,11 +7,27 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; -import java.util.Map; + +import org.hibernate.cfg.AvailableSettings; +import org.hibernate.envers.AuditJoinTable; +import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.envers.Audited; + +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.jta.TestingJtaBootstrap; +import org.hibernate.testing.jta.TestingJtaPlatformImpl; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.DialectFeatureChecks; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.JiraKey; +import org.hibernate.testing.orm.junit.Jpa; +import org.hibernate.testing.orm.junit.RequiresDialectFeature; +import org.hibernate.testing.orm.junit.Setting; +import org.hibernate.testing.orm.junit.SettingConfiguration; +import org.junit.jupiter.api.Test; import jakarta.persistence.CascadeType; import jakarta.persistence.Entity; -import jakarta.persistence.EntityManager; import jakarta.persistence.FetchType; import jakarta.persistence.GeneratedValue; import jakarta.persistence.GenerationType; @@ -20,51 +36,35 @@ import jakarta.persistence.ManyToOne; import jakarta.persistence.OneToMany; -import org.hibernate.cfg.AvailableSettings; -import org.hibernate.envers.AuditJoinTable; -import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.junit.Test; - -import org.hibernate.testing.DialectChecks; -import org.hibernate.testing.RequiresDialectFeature; -import org.hibernate.testing.orm.junit.JiraKey; -import org.hibernate.testing.jta.TestingJtaBootstrap; -import org.hibernate.testing.jta.TestingJtaPlatformImpl; - -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Chris Cranford */ -@JiraKey(value="HHH-13191") -@RequiresDialectFeature({ DialectChecks.SupportsNoColumnInsert.class, DialectChecks.SupportsIdentityColumns.class }) -public class IdentifierProxyJtaSessionClosedBeforeCommitTest extends BaseEnversJPAFunctionalTestCase { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { AuthUser.class, AuthClient.class }; - } - - @Override - protected void addConfigOptions(Map options) { - TestingJtaBootstrap.prepare( options ); - options.put( AvailableSettings.ALLOW_JTA_TRANSACTION_ACCESS, "true" ); - - // NOTE: This option is critical in order for the problem to be reproducable. - // If this option is not set to 'true', then the failure condition does not happen. - options.put( AvailableSettings.JPA_PROXY_COMPLIANCE, "true" ); - } - +@JiraKey(value = "HHH-13191") +@RequiresDialectFeature(feature = DialectFeatureChecks.SupportsNoColumnInsert.class) +@RequiresDialectFeature(feature = DialectFeatureChecks.SupportsIdentityColumns.class) +@EnversTest +@Jpa( + annotatedClasses = { + IdentifierProxyJtaSessionClosedBeforeCommitTest.AuthUser.class, + IdentifierProxyJtaSessionClosedBeforeCommitTest.AuthClient.class + }, + integrationSettings = { + @Setting(name = AvailableSettings.ALLOW_JTA_TRANSACTION_ACCESS, value = "true"), + @Setting(name = AvailableSettings.JPA_PROXY_COMPLIANCE, value = "true") + }, + settingConfigurations = @SettingConfiguration(configurer = TestingJtaBootstrap.class) +) +public class IdentifierProxyJtaSessionClosedBeforeCommitTest { private Integer authUserId; private Integer authClientId; - @Test - @Priority(10) - public void initData() throws Exception { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) throws Exception { // Revision 1 TestingJtaPlatformImpl.INSTANCE.getTransactionManager().begin(); - EntityManager entityManager = getEntityManager(); + var entityManager = scope.getEntityManagerFactory().createEntityManager(); try { final AuthUser authUser = new AuthUser(); final AuthClient authClient = new AuthClient(); @@ -84,7 +84,7 @@ public void initData() throws Exception { // Revision 2 TestingJtaPlatformImpl.INSTANCE.getTransactionManager().begin(); - entityManager = getEntityManager(); + entityManager = scope.getEntityManagerFactory().createEntityManager(); try { final AuthUser authUser = entityManager.find( AuthUser.class, authUserId ); authUser.setSomeValue( "test" ); @@ -97,8 +97,11 @@ public void initData() throws Exception { } @Test - public void testRevisionCounts() { - assertEquals( Arrays.asList( 1, 2 ), getAuditReader().getRevisions( AuthUser.class, authUserId ) ); + public void testRevisionCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( entityManager -> assertEquals( + Arrays.asList( 1, 2 ), + AuditReaderFactory.get( entityManager ).getRevisions( AuthUser.class, authUserId ) + ) ); } @Entity(name = "AuthUser") @@ -111,7 +114,7 @@ public static class AuthUser { private String someValue; @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name="idclient", insertable=false, updatable = false) + @JoinColumn(name = "idclient", insertable = false, updatable = false) private AuthClient authClient; public AuthUser() { diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/jta/JtaExceptionListener.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/jta/JtaExceptionListener.java index ab02b325ccc9..caa8338a25a2 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/jta/JtaExceptionListener.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/jta/JtaExceptionListener.java @@ -4,65 +4,66 @@ */ package org.hibernate.orm.test.envers.integration.jta; -import java.util.Map; -import jakarta.persistence.EntityManager; -import jakarta.transaction.RollbackException; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; import org.hibernate.orm.test.envers.entities.StrTestEntity; import org.hibernate.orm.test.envers.integration.reventity.ExceptionListenerRevEntity; +import org.hibernate.testing.envers.junit.EnversTest; import org.hibernate.testing.jta.TestingJtaBootstrap; import org.hibernate.testing.jta.TestingJtaPlatformImpl; -import org.junit.Assert; -import org.junit.Test; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; +import org.hibernate.testing.orm.junit.SettingConfiguration; +import org.junit.jupiter.api.Test; + +import jakarta.transaction.RollbackException; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; /** * Same as {@link org.hibernate.orm.test.envers.integration.reventity.ExceptionListener}, but in a JTA environment. * * @author Adam Warski (adam at warski dot org) */ -public class JtaExceptionListener extends BaseEnversJPAFunctionalTestCase { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {StrTestEntity.class, ExceptionListenerRevEntity.class}; - } - - @Override - protected void addConfigOptions(Map options) { - TestingJtaBootstrap.prepare( options ); - } - - @Test(expected = RollbackException.class) - @Priority(5) // must run before testDataNotPersisted() - public void testTransactionRollback() throws Exception { - TestingJtaPlatformImpl.INSTANCE.getTransactionManager().begin(); - - try { - EntityManager em = getEntityManager(); +@EnversTest +@Jpa(annotatedClasses = { StrTestEntity.class, ExceptionListenerRevEntity.class }, + settingConfigurations = @SettingConfiguration(configurer = TestingJtaBootstrap.class)) +public class JtaExceptionListener { + @Test + public void testTransactionRollback(EntityManagerFactoryScope scope) { + final var emf = scope.getEntityManagerFactory(); + assertThrows( + RollbackException.class, () -> { + TestingJtaPlatformImpl.INSTANCE.getTransactionManager().begin(); - // Trying to persist an entity - however the listener should throw an exception, so the entity - // shouldn't be persisted - StrTestEntity te = new StrTestEntity( "x" ); - em.persist( te ); - } - finally { - TestingJtaPlatformImpl.tryCommit(); - } + var entityManager = emf.createEntityManager(); + try { + // Trying to persist an entity - however the listener should throw an exception, so the entity + // shouldn't be persisted + StrTestEntity te = new StrTestEntity( "x" ); + entityManager.persist( te ); + } + finally { + entityManager.close(); + TestingJtaPlatformImpl.tryCommit(); + } + } + ); } @Test - public void testDataNotPersisted() throws Exception { + public void testDataNotPersisted(EntityManagerFactoryScope scope) throws Exception { + final var emf = scope.getEntityManagerFactory(); TestingJtaPlatformImpl.INSTANCE.getTransactionManager().begin(); - + // Checking if the entity became persisted + var entityManager = emf.createEntityManager(); try { - // Checking if the entity became persisted - EntityManager em = getEntityManager(); - long count = em.createQuery( "from StrTestEntity s where s.str = 'x'" ).getResultList().size(); - Assert.assertEquals( 0, count ); + long count = entityManager.createQuery( "from StrTestEntity s where s.str = 'x'", StrTestEntity.class ) + .getResultList().size(); + assertEquals( 0, count ); } finally { + entityManager.close(); TestingJtaPlatformImpl.tryCommit(); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/jta/JtaSessionClosedBeforeCommitTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/jta/JtaSessionClosedBeforeCommitTest.java index df6e4b553a56..ce602b010976 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/jta/JtaSessionClosedBeforeCommitTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/jta/JtaSessionClosedBeforeCommitTest.java @@ -5,20 +5,23 @@ package org.hibernate.orm.test.envers.integration.jta; import java.util.Arrays; -import java.util.Map; - -import jakarta.persistence.EntityManager; import org.hibernate.cfg.AvailableSettings; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.orm.test.envers.entities.IntTestEntity; -import org.hibernate.testing.orm.junit.JiraKey; + +import org.hibernate.testing.envers.junit.EnversTest; import org.hibernate.testing.jta.TestingJtaBootstrap; import org.hibernate.testing.jta.TestingJtaPlatformImpl; -import org.junit.Test; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.JiraKey; +import org.hibernate.testing.orm.junit.Jpa; +import org.hibernate.testing.orm.junit.Setting; +import org.hibernate.testing.orm.junit.SettingConfiguration; +import org.junit.jupiter.api.Test; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * Simple test that checks that Envers can still perform its beforeTransactionCompletion @@ -28,25 +31,22 @@ * @author Chris Cranford */ @JiraKey(value = "HHH-11232") -public class JtaSessionClosedBeforeCommitTest extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa( + annotatedClasses = {IntTestEntity.class}, + integrationSettings = { @Setting(name = AvailableSettings.ALLOW_JTA_TRANSACTION_ACCESS, value = "true") }, + settingConfigurations = @SettingConfiguration(configurer = TestingJtaBootstrap.class) +) +public class JtaSessionClosedBeforeCommitTest { private Integer entityId; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { IntTestEntity.class }; - } - - @Override - protected void addConfigOptions(Map options) { - TestingJtaBootstrap.prepare( options ); - options.put( AvailableSettings.ALLOW_JTA_TRANSACTION_ACCESS, "true" ); - } + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) throws Exception { + // We need to do this to obtain the SessionFactoryImplementor + final var emf = scope.getEntityManagerFactory(); - @Test - @Priority(10) - public void initData() throws Exception { TestingJtaPlatformImpl.INSTANCE.getTransactionManager().begin(); - EntityManager entityManager = getEntityManager(); + var entityManager = emf.createEntityManager(); try { IntTestEntity ite = new IntTestEntity( 10 ); entityManager.persist( ite ); @@ -61,18 +61,18 @@ public void initData() throws Exception { } @Test - public void testRevisionCounts() { - assertEquals( + public void testRevisionCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( entityManager -> assertEquals( Arrays.asList( 1 ), - getAuditReader().getRevisions( IntTestEntity.class, entityId ) - ); + AuditReaderFactory.get( entityManager ).getRevisions( IntTestEntity.class, entityId ) + ) ); } @Test - public void testRevisionHistory() { - assertEquals( + public void testRevisionHistory(EntityManagerFactoryScope scope) { + scope.inEntityManager( entityManager -> assertEquals( new IntTestEntity( 10, entityId ), - getAuditReader().find( IntTestEntity.class, entityId, 1 ) - ); + AuditReaderFactory.get( entityManager ).find( IntTestEntity.class, entityId, 1 ) + ) ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/jta/JtaTransaction.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/jta/JtaTransaction.java index 996b18d03344..e19e9f985baa 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/jta/JtaTransaction.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/jta/JtaTransaction.java @@ -5,96 +5,92 @@ package org.hibernate.orm.test.envers.integration.jta; import java.util.List; -import java.util.Map; -import jakarta.persistence.EntityManager; import org.hibernate.cfg.AvailableSettings; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.orm.test.envers.entities.IntTestEntity; +import org.hibernate.testing.envers.junit.EnversTest; import org.hibernate.testing.jta.TestingJtaBootstrap; import org.hibernate.testing.jta.TestingJtaPlatformImpl; -import org.junit.Assert; -import org.junit.Test; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; +import org.hibernate.testing.orm.junit.Setting; +import org.hibernate.testing.orm.junit.SettingConfiguration; +import org.junit.jupiter.api.Test; + + +import static org.junit.jupiter.api.Assertions.assertEquals; /** * Same as {@link org.hibernate.orm.test.envers.integration.basic.Simple}, but in a JTA environment. * * @author Adam Warski (adam at warski dot org) */ -public class JtaTransaction extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa( + annotatedClasses = {IntTestEntity.class}, + integrationSettings = @Setting(name = AvailableSettings.ALLOW_JTA_TRANSACTION_ACCESS, value = "true"), + settingConfigurations = @SettingConfiguration(configurer = TestingJtaBootstrap.class) +) +public class JtaTransaction { private Integer id1; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {IntTestEntity.class}; - } + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) throws Exception { + final var emf = scope.getEntityManagerFactory(); - @Override - protected void addConfigOptions(Map options) { - TestingJtaBootstrap.prepare( options ); - options.put( AvailableSettings.ALLOW_JTA_TRANSACTION_ACCESS, "true" ); - } - - @Test - @Priority(10) - public void initData() throws Exception { TestingJtaPlatformImpl.INSTANCE.getTransactionManager().begin(); - - EntityManager em; + var entityManager = emf.createEntityManager(); IntTestEntity ite; try { - em = getEntityManager(); ite = new IntTestEntity( 10 ); - em.persist( ite ); + entityManager.persist( ite ); id1 = ite.getId(); } finally { TestingJtaPlatformImpl.tryCommit(); + entityManager.close(); } - em.close(); TestingJtaPlatformImpl.INSTANCE.getTransactionManager().begin(); + entityManager = emf.createEntityManager(); try { - em = getEntityManager(); - ite = em.find( IntTestEntity.class, id1 ); + ite = entityManager.find( IntTestEntity.class, id1 ); ite.setNumber( 20 ); } finally { TestingJtaPlatformImpl.tryCommit(); + entityManager.close(); } - em.close(); } @Test - public void testRevisionsCounts() throws Exception { - Assert.assertEquals( - 2, getAuditReader().getRevisions( - IntTestEntity.class, id1 - ).size() - ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( entityManager -> assertEquals( + 2, + AuditReaderFactory.get( entityManager ).getRevisions( IntTestEntity.class, id1 ).size() + ) ); } @Test - public void testHistoryOfId1() { + public void testHistoryOfId1(EntityManagerFactoryScope scope) { IntTestEntity ver1 = new IntTestEntity( 10, id1 ); IntTestEntity ver2 = new IntTestEntity( 20, id1 ); - List revisions = getAuditReader().getRevisions( - IntTestEntity.class, id1 - ); + scope.inEntityManager( entityManager -> { + List revisions = AuditReaderFactory.get( entityManager ).getRevisions( IntTestEntity.class, id1 ); - Assert.assertEquals( - ver1, getAuditReader().find( - IntTestEntity.class, id1, revisions.get( 0 ) - ) - ); - Assert.assertEquals( - ver2, getAuditReader().find( - IntTestEntity.class, id1, revisions.get( 1 ) - ) - ); + assertEquals( + ver1, + AuditReaderFactory.get( entityManager ).find( IntTestEntity.class, id1, revisions.get( 0 ) ) + ); + assertEquals( + ver2, + AuditReaderFactory.get( entityManager ).find( IntTestEntity.class, id1, revisions.get( 1 ) ) + ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/jta/JtaTransactionAfterCallbackTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/jta/JtaTransactionAfterCallbackTest.java index b0912c29b214..f8751315645d 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/jta/JtaTransactionAfterCallbackTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/jta/JtaTransactionAfterCallbackTest.java @@ -7,7 +7,6 @@ import java.lang.reflect.Field; import java.util.Map; -import jakarta.persistence.EntityManager; import jakarta.persistence.PersistenceException; import jakarta.transaction.RollbackException; import jakarta.transaction.Status; @@ -21,19 +20,22 @@ import org.hibernate.envers.boot.internal.EnversService; import org.hibernate.envers.internal.synchronization.AuditProcess; import org.hibernate.envers.internal.synchronization.AuditProcessManager; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; import org.hibernate.orm.test.envers.entities.IntTestEntity; -import org.junit.Test; -import org.hibernate.testing.orm.junit.JiraKey; +import org.hibernate.testing.envers.junit.EnversTest; import org.hibernate.testing.jta.TestingJtaBootstrap; import org.hibernate.testing.jta.TestingJtaPlatformImpl; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.JiraKey; +import org.hibernate.testing.orm.junit.Jpa; +import org.hibernate.testing.orm.junit.Setting; +import org.hibernate.testing.orm.junit.SettingConfiguration; +import org.junit.jupiter.api.Test; -import static org.hibernate.testing.junit4.ExtraAssertions.assertTyping; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertInstanceOf; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertTrue; /** * An envers specific quest that verifies the {@link AuditProcessManager} gets flushed. @@ -49,45 +51,42 @@ * @author Chris Cranford */ @JiraKey(value = "HHH-12448") -public class JtaTransactionAfterCallbackTest extends BaseEnversJPAFunctionalTestCase { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { IntTestEntity.class }; - } - - @Override - protected void addConfigOptions(Map options) { - TestingJtaBootstrap.prepare( options ); - options.put( AvailableSettings.TRANSACTION_COORDINATOR_STRATEGY, "jta" ); - options.put( AvailableSettings.ALLOW_JTA_TRANSACTION_ACCESS, Boolean.TRUE ); - } +@EnversTest +@Jpa( + annotatedClasses = {IntTestEntity.class}, + integrationSettings = { + @Setting(name = AvailableSettings.TRANSACTION_COORDINATOR_STRATEGY, value = "jta"), + @Setting(name = AvailableSettings.ALLOW_JTA_TRANSACTION_ACCESS, value = "true") + }, + settingConfigurations = @SettingConfiguration(configurer = TestingJtaBootstrap.class) +) +public class JtaTransactionAfterCallbackTest { @Test - @Priority(10) - public void testAuditProcessManagerFlushedOnTransactionTimeout() throws Exception { + public void testAuditProcessManagerFlushedOnTransactionTimeout(EntityManagerFactoryScope scope) throws Exception { + final var emf = scope.getEntityManagerFactory(); + // We will set the timeout to 5 seconds to allow the transaction reaper to kick in for us. TestingJtaPlatformImpl.INSTANCE.getTransactionManager().setTransactionTimeout( 5 ); // Begin the transaction and do some extensive 10s long work TestingJtaPlatformImpl.INSTANCE.getTransactionManager().begin(); - EntityManager entityManager = null; + var entityManager = emf.createEntityManager(); try { - entityManager = getEntityManager(); - IntTestEntity ite = new IntTestEntity( 10 ); entityManager.persist( ite ); // Register before completion callback // The before causes this thread to wait until the Reaper thread aborts our transaction - final SessionImplementor session = entityManager.unwrap( SessionImplementor.class ); - session.getTransactionCompletionCallbacks().registerCallback( new BeforeCallbackCompletionHandler() ); + final SessionImplementor sessionImpl = entityManager.unwrap( SessionImplementor.class ); + sessionImpl.getTransactionCompletionCallbacks().registerCallback( new BeforeCallbackCompletionHandler() ); TestingJtaPlatformImpl.transactionManager().commit(); } catch ( Exception e ) { // This is expected - assertTyping( RollbackException.class, e ); + assertInstanceOf( RollbackException.class, e ); } finally { try { @@ -101,7 +100,7 @@ public void testAuditProcessManagerFlushedOnTransactionTimeout() throws Exceptio } // test the audit process manager was flushed - assertAuditProcessManagerEmpty(); + assertAuditProcessManagerEmpty( scope ); } } @@ -120,8 +119,8 @@ public void doBeforeTransactionCompletion(SharedSessionContractImplementor sessi } } - private void assertAuditProcessManagerEmpty() throws Exception { - final SessionFactoryImplementor sf = entityManagerFactory().unwrap( SessionFactoryImplementor.class ); + private void assertAuditProcessManagerEmpty(EntityManagerFactoryScope scope) throws Exception { + final SessionFactoryImplementor sf = scope.getEntityManagerFactory().unwrap( SessionFactoryImplementor.class ); final EnversService enversService = sf.getServiceRegistry().getService( EnversService.class ); final AuditProcessManager auditProcessManager = enversService.getAuditProcessManager(); @@ -136,5 +135,4 @@ private void assertAuditProcessManagerEmpty() throws Exception { assertNotNull( values ); assertEquals( 0, values.size() ); } - } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/jta/OneToManyJtaSessionClosedBeforeCommitTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/jta/OneToManyJtaSessionClosedBeforeCommitTest.java index 260f9768fb30..618b0e03dd2c 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/jta/OneToManyJtaSessionClosedBeforeCommitTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/jta/OneToManyJtaSessionClosedBeforeCommitTest.java @@ -6,51 +6,48 @@ import java.util.Arrays; import java.util.HashSet; -import java.util.Map; import java.util.Set; -import jakarta.persistence.EntityManager; import org.hibernate.cfg.AvailableSettings; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.orm.test.envers.entities.onetomany.SetRefEdEntity; import org.hibernate.orm.test.envers.entities.onetomany.SetRefIngEntity; -import org.hibernate.testing.orm.junit.JiraKey; +import org.hibernate.testing.envers.junit.EnversTest; import org.hibernate.testing.jta.TestingJtaBootstrap; import org.hibernate.testing.jta.TestingJtaPlatformImpl; -import org.junit.Test; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.JiraKey; +import org.hibernate.testing.orm.junit.Jpa; +import org.hibernate.testing.orm.junit.Setting; +import org.hibernate.testing.orm.junit.SettingConfiguration; +import org.junit.jupiter.api.Test; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Andrea Boriero */ -@JiraKey( value = "HHH-11570") -public class OneToManyJtaSessionClosedBeforeCommitTest extends BaseEnversJPAFunctionalTestCase { - private Integer entityId; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {SetRefIngEntity.class, SetRefEdEntity.class}; - } +@JiraKey(value = "HHH-11570") +@EnversTest +@Jpa( + annotatedClasses = {SetRefIngEntity.class, SetRefEdEntity.class}, + integrationSettings = @Setting(name = AvailableSettings.ALLOW_JTA_TRANSACTION_ACCESS, value = "true"), + settingConfigurations = @SettingConfiguration(configurer = TestingJtaBootstrap.class) +) +public class OneToManyJtaSessionClosedBeforeCommitTest { + private static final Integer ENTITY_ID = 1; - @Override - protected void addConfigOptions(Map options) { - TestingJtaBootstrap.prepare( options ); - options.put( AvailableSettings.ALLOW_JTA_TRANSACTION_ACCESS, "true" ); - } - - @Test - @Priority(10) - public void initData() throws Exception { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) throws Exception { TestingJtaPlatformImpl.INSTANCE.getTransactionManager().begin(); - EntityManager entityManager = getEntityManager(); + var entityManager = scope.getEntityManagerFactory().createEntityManager(); try { SetRefEdEntity edEntity = new SetRefEdEntity( 2, "edEntity" ); entityManager.persist( edEntity ); - SetRefIngEntity ingEntity = new SetRefIngEntity( 1, "ingEntity" ); + SetRefIngEntity ingEntity = new SetRefIngEntity( ENTITY_ID, "ingEntity" ); Set sries = new HashSet<>(); sries.add( ingEntity ); @@ -58,8 +55,7 @@ public void initData() throws Exception { edEntity.setReffering( sries ); entityManager.persist( ingEntity ); - - entityId = ingEntity.getId(); + entityManager.flush(); } finally { entityManager.close(); @@ -68,18 +64,18 @@ public void initData() throws Exception { } @Test - public void testRevisionCounts() { - assertEquals( + public void testRevisionCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( entityManager -> assertEquals( Arrays.asList( 1 ), - getAuditReader().getRevisions( SetRefIngEntity.class, entityId ) - ); + AuditReaderFactory.get( entityManager ).getRevisions( SetRefIngEntity.class, ENTITY_ID ) + ) ); } @Test - public void testRevisionHistory() { - assertEquals( - new SetRefIngEntity( 1, "ingEntity" ), - getAuditReader().find( SetRefIngEntity.class, entityId, 1 ) - ); + public void testRevisionHistory(EntityManagerFactoryScope scope) { + scope.inEntityManager( entityManager -> assertEquals( + new SetRefIngEntity( ENTITY_ID, "ingEntity" ), + AuditReaderFactory.get( entityManager ).find( SetRefIngEntity.class, ENTITY_ID, 1 ) + ) ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/jta/OneToManyLazyJtaSessionClosedBeforeCommitTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/jta/OneToManyLazyJtaSessionClosedBeforeCommitTest.java index e9268a8ae1e9..1596e2ef85fb 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/jta/OneToManyLazyJtaSessionClosedBeforeCommitTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/jta/OneToManyLazyJtaSessionClosedBeforeCommitTest.java @@ -6,58 +6,57 @@ import java.util.Arrays; import java.util.HashSet; -import java.util.Map; import java.util.Set; -import jakarta.persistence.EntityManager; import org.hibernate.FlushMode; import org.hibernate.Session; import org.hibernate.cfg.AvailableSettings; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.orm.test.envers.entities.onetomany.SetRefEdEntity; import org.hibernate.orm.test.envers.entities.onetomany.SetRefIngEntity; + +import org.hibernate.testing.envers.junit.EnversTest; import org.hibernate.testing.jta.TestingJtaBootstrap; import org.hibernate.testing.jta.TestingJtaPlatformImpl; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; +import org.hibernate.testing.orm.junit.Jpa; +import org.hibernate.testing.orm.junit.Setting; +import org.hibernate.testing.orm.junit.SettingConfiguration; +import org.junit.jupiter.api.Test; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author VladoKuruc */ -@JiraKey( value = "HHH-14061") -public class OneToManyLazyJtaSessionClosedBeforeCommitTest extends BaseEnversJPAFunctionalTestCase { - private Integer parentId; - private Integer entityId; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {SetRefIngEntity.class, SetRefEdEntity.class}; - } +@JiraKey(value = "HHH-14061") +@EnversTest +@Jpa( + annotatedClasses = { SetRefIngEntity.class, SetRefEdEntity.class }, + integrationSettings = @Setting(name = AvailableSettings.ALLOW_JTA_TRANSACTION_ACCESS, value = "true"), + settingConfigurations = @SettingConfiguration(configurer = TestingJtaBootstrap.class) +) +public class OneToManyLazyJtaSessionClosedBeforeCommitTest { + private static final Integer PARENT_ID = 2; + private static final Integer ENTITY_ID = 1; - @Override - protected void addConfigOptions(Map options) { - TestingJtaBootstrap.prepare( options ); - options.put( AvailableSettings.ALLOW_JTA_TRANSACTION_ACCESS, "true" ); - } + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) throws Exception { + final var emf = scope.getEntityManagerFactory(); - @Test - @Priority(10) - public void initData() throws Exception { TestingJtaPlatformImpl.INSTANCE.getTransactionManager().begin(); - EntityManager entityManager = getEntityManager(); + var entityManager = emf.createEntityManager(); try { SetRefIngEntity refIngEntity = new SetRefIngEntity( 3, "ingEntityRef" ); entityManager.persist( refIngEntity ); - SetRefEdEntity edEntity = new SetRefEdEntity( 2, "edEntity" ); - edEntity.setRef(refIngEntity); + SetRefEdEntity edEntity = new SetRefEdEntity( PARENT_ID, "edEntity" ); + edEntity.setRef( refIngEntity ); entityManager.persist( edEntity ); - parentId = edEntity.getId(); - SetRefIngEntity ingEntity = new SetRefIngEntity( 1, "ingEntity" ); + SetRefIngEntity ingEntity = new SetRefIngEntity( ENTITY_ID, "ingEntity" ); Set sries = new HashSet<>(); sries.add( ingEntity ); @@ -65,50 +64,60 @@ public void initData() throws Exception { edEntity.setReffering( sries ); entityManager.persist( ingEntity ); - - entityId = ingEntity.getId(); + entityManager.flush(); } finally { - entityManager.close(); TestingJtaPlatformImpl.tryCommit(); + entityManager.close(); } + TestingJtaPlatformImpl.INSTANCE.getTransactionManager().begin(); - entityManager = getEntityManager(); + entityManager = emf.createEntityManager(); try { - entityManager.unwrap(Session.class).setHibernateFlushMode(FlushMode.MANUAL); - SetRefEdEntity edEntity = entityManager.find(SetRefEdEntity.class, parentId); + entityManager.unwrap( Session.class ).setHibernateFlushMode( FlushMode.MANUAL ); + SetRefEdEntity edEntity = entityManager.find( SetRefEdEntity.class, PARENT_ID ); Set reffering = edEntity.getReffering(); SetRefIngEntity ingEntity = reffering.iterator().next(); - ingEntity.setReference(null); - reffering.remove(ingEntity); - entityManager.merge(ingEntity); + ingEntity.setReference( null ); + reffering.remove( ingEntity ); + entityManager.merge( ingEntity ); entityManager.flush(); - //clear context in transaction + // clear context in transaction entityManager.clear(); - entityManager.merge(edEntity); + entityManager.merge( edEntity ); entityManager.flush(); } finally { - entityManager.close(); TestingJtaPlatformImpl.tryCommit(); + entityManager.close(); } } @Test - public void testRevisionCounts() { - assertEquals( - Arrays.asList(1, 2), - getAuditReader().getRevisions( SetRefIngEntity.class, entityId ) - ); - assertEquals( - Arrays.asList(1, 2), - getAuditReader().getRevisions( SetRefEdEntity.class, parentId ) - ); + public void testRevisionCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( entityManager -> { + assertEquals( + Arrays.asList( 1, 2 ), + AuditReaderFactory.get( entityManager ).getRevisions( SetRefIngEntity.class, ENTITY_ID ) + ); + assertEquals( + Arrays.asList( 1, 2 ), + AuditReaderFactory.get( entityManager ).getRevisions( SetRefEdEntity.class, PARENT_ID ) + ); + } ); } @Test - public void testRevisionHistory() { - assertEquals( Arrays.asList( 1, 2 ), getAuditReader().getRevisions( SetRefIngEntity.class, entityId ) ); - assertEquals( Arrays.asList( 1, 2 ), getAuditReader().getRevisions( SetRefEdEntity.class, parentId ) ); + public void testRevisionHistory(EntityManagerFactoryScope scope) { + scope.inEntityManager( entityManager -> { + assertEquals( + Arrays.asList( 1, 2 ), + AuditReaderFactory.get( entityManager ).getRevisions( SetRefIngEntity.class, ENTITY_ID ) + ); + assertEquals( + Arrays.asList( 1, 2 ), + AuditReaderFactory.get( entityManager ).getRevisions( SetRefEdEntity.class, PARENT_ID ) + ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/lazy/IsCollectionInitializedBytecodeEnhancementTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/lazy/IsCollectionInitializedBytecodeEnhancementTest.java index d1cfc189c201..46a21a8daec7 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/lazy/IsCollectionInitializedBytecodeEnhancementTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/lazy/IsCollectionInitializedBytecodeEnhancementTest.java @@ -5,94 +5,88 @@ package org.hibernate.orm.test.envers.integration.lazy; import java.util.List; -import jakarta.persistence.EntityManager; +import org.hibernate.Hibernate; import org.hibernate.community.dialect.AltibaseDialect; import org.hibernate.dialect.OracleDialect; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.query.AuditEntity; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; import org.hibernate.orm.test.envers.entities.collection.MultipleCollectionEntity; import org.hibernate.orm.test.envers.entities.collection.MultipleCollectionRefEntity1; import org.hibernate.orm.test.envers.entities.collection.MultipleCollectionRefEntity2; -import org.hibernate.testing.SkipForDialect; + +import org.hibernate.testing.bytecode.enhancement.extension.BytecodeEnhanced; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; -import org.junit.runner.RunWith; -import static org.junit.Assert.assertEquals; -import org.hibernate.Hibernate; -import org.hibernate.envers.AuditReader; -import org.hibernate.envers.AuditReaderFactory; -import org.hibernate.testing.bytecode.enhancement.BytecodeEnhancerRunner; -import org.hibernate.testing.bytecode.enhancement.EnhancementOptions; +import org.hibernate.testing.orm.junit.Jpa; +import org.hibernate.testing.orm.junit.SkipForDialect; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Fabricio Gregorio */ @JiraKey(value = "HHH-15522") -@RunWith(BytecodeEnhancerRunner.class) -@EnhancementOptions(lazyLoading = true) -@SkipForDialect(value = OracleDialect.class, comment = "Oracle does not support identity key generation") -@SkipForDialect(value = AltibaseDialect.class, comment = "Altibase does not support identity key generation") -public class IsCollectionInitializedBytecodeEnhancementTest extends BaseEnversJPAFunctionalTestCase { - +@BytecodeEnhanced +@EnversTest +@Jpa(annotatedClasses = { + MultipleCollectionEntity.class, + MultipleCollectionRefEntity1.class, + MultipleCollectionRefEntity2.class +}) +@SkipForDialect(dialectClass = OracleDialect.class, reason = "Oracle does not support identity key generation") +@SkipForDialect(dialectClass = AltibaseDialect.class, reason = "Altibase does not support identity key generation") +public class IsCollectionInitializedBytecodeEnhancementTest { private Long mce1Id = null; private Long mcre1Id = null; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[]{ - MultipleCollectionEntity.class, MultipleCollectionRefEntity1.class, MultipleCollectionRefEntity2.class - }; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - // Revision 1 - addition. - em.getTransaction().begin(); - MultipleCollectionEntity mce1 = new MultipleCollectionEntity(); - mce1.setText( "MultipleCollectionEntity-1-1" ); - em.persist( mce1 ); // Persisting entity with empty collections. - em.getTransaction().commit(); - - mce1Id = mce1.getId(); - - // Revision 2 - update. - em.getTransaction().begin(); - mce1 = em.find( MultipleCollectionEntity.class, mce1.getId() ); - MultipleCollectionRefEntity1 mcre1 = new MultipleCollectionRefEntity1(); - mcre1.setText( "MultipleCollectionRefEntity1-1-1" ); - mcre1.setMultipleCollectionEntity( mce1 ); - mce1.addRefEntity1( mcre1 ); - em.persist( mcre1 ); - mce1 = em.merge( mce1 ); - em.getTransaction().commit(); - - mcre1Id = mcre1.getId(); - - em.close(); + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + // Revision 1 - addition. + em.getTransaction().begin(); + MultipleCollectionEntity mce1 = new MultipleCollectionEntity(); + mce1.setText( "MultipleCollectionEntity-1-1" ); + em.persist( mce1 ); // Persisting entity with empty collections. + em.getTransaction().commit(); + + mce1Id = mce1.getId(); + + // Revision 2 - update. + em.getTransaction().begin(); + mce1 = em.find( MultipleCollectionEntity.class, mce1.getId() ); + MultipleCollectionRefEntity1 mcre1 = new MultipleCollectionRefEntity1(); + mcre1.setText( "MultipleCollectionRefEntity1-1-1" ); + mcre1.setMultipleCollectionEntity( mce1 ); + mce1.addRefEntity1( mcre1 ); + em.persist( mcre1 ); + mce1 = em.merge( mce1 ); + em.getTransaction().commit(); + + mcre1Id = mcre1.getId(); + } ); } @Test @SuppressWarnings("unchecked") - public void testIsInitialized() { - EntityManager em = getEntityManager(); - - AuditReader reader = AuditReaderFactory.get( em ); - List res = reader.createQuery().forEntitiesAtRevision( MultipleCollectionEntity.class, 1 ) - .add( AuditEntity.id().eq( mce1Id ) ) - .getResultList(); - - MultipleCollectionEntity ret = res.get( 0 ); + public void testIsInitialized(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + var reader = AuditReaderFactory.get( em ); + List res = reader.createQuery() + .forEntitiesAtRevision( MultipleCollectionEntity.class, 1 ) + .add( AuditEntity.id().eq( mce1Id ) ) + .getResultList(); - assertEquals( Hibernate.isInitialized( ret.getRefEntities1() ), false ); + MultipleCollectionEntity ret = res.get( 0 ); - Hibernate.initialize(ret.getRefEntities1()); + assertEquals( false, Hibernate.isInitialized( ret.getRefEntities1() ) ); - assertEquals( Hibernate.isInitialized( ret.getRefEntities1() ), true ); + Hibernate.initialize( ret.getRefEntities1() ); + assertEquals( true, Hibernate.isInitialized( ret.getRefEntities1() ) ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/lazy/IsCollectionInitializedTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/lazy/IsCollectionInitializedTest.java index 0f6d39faf6f7..6ffd4dc8e172 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/lazy/IsCollectionInitializedTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/lazy/IsCollectionInitializedTest.java @@ -5,89 +5,80 @@ package org.hibernate.orm.test.envers.integration.lazy; import java.util.List; -import jakarta.persistence.EntityManager; +import org.hibernate.Hibernate; import org.hibernate.community.dialect.AltibaseDialect; import org.hibernate.dialect.OracleDialect; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.query.AuditEntity; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; import org.hibernate.orm.test.envers.entities.collection.MultipleCollectionEntity; import org.hibernate.orm.test.envers.entities.collection.MultipleCollectionRefEntity1; import org.hibernate.orm.test.envers.entities.collection.MultipleCollectionRefEntity2; -import org.hibernate.testing.SkipForDialect; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; -import static org.junit.Assert.assertEquals; -import org.hibernate.Hibernate; -import org.hibernate.envers.AuditReader; -import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.testing.orm.junit.Jpa; +import org.hibernate.testing.orm.junit.SkipForDialect; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Fabricio Gregorio */ @JiraKey(value = "HHH-15522") -@SkipForDialect(value = OracleDialect.class, comment = "Oracle does not support identity key generation") -@SkipForDialect(value = AltibaseDialect.class, comment = "Altibase does not support identity key generation") -public class IsCollectionInitializedTest extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = { + MultipleCollectionEntity.class, MultipleCollectionRefEntity1.class, MultipleCollectionRefEntity2.class +}) +@SkipForDialect(dialectClass = OracleDialect.class, reason = "Oracle does not support identity key generation") +@SkipForDialect(dialectClass = AltibaseDialect.class, reason = "Altibase does not support identity key generation") +public class IsCollectionInitializedTest { private Long mce1Id = null; private Long mcre1Id = null; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[]{ - MultipleCollectionEntity.class, MultipleCollectionRefEntity1.class, MultipleCollectionRefEntity2.class - }; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Revision 1 - addition. - em.getTransaction().begin(); - MultipleCollectionEntity mce1 = new MultipleCollectionEntity(); - mce1.setText( "MultipleCollectionEntity-1-1" ); - em.persist( mce1 ); // Persisting entity with empty collections. - em.getTransaction().commit(); - - mce1Id = mce1.getId(); + scope.inTransaction( em -> { + MultipleCollectionEntity mce1 = new MultipleCollectionEntity(); + mce1.setText( "MultipleCollectionEntity-1-1" ); + em.persist( mce1 ); // Persisting entity with empty collections. + mce1Id = mce1.getId(); + } ); // Revision 2 - update. - em.getTransaction().begin(); - mce1 = em.find( MultipleCollectionEntity.class, mce1.getId() ); - MultipleCollectionRefEntity1 mcre1 = new MultipleCollectionRefEntity1(); - mcre1.setText( "MultipleCollectionRefEntity1-1-1" ); - mcre1.setMultipleCollectionEntity( mce1 ); - mce1.addRefEntity1( mcre1 ); - em.persist( mcre1 ); - mce1 = em.merge( mce1 ); - em.getTransaction().commit(); - - mcre1Id = mcre1.getId(); - - em.close(); + scope.inTransaction( em -> { + MultipleCollectionEntity mce1 = em.find( MultipleCollectionEntity.class, mce1Id ); + MultipleCollectionRefEntity1 mcre1 = new MultipleCollectionRefEntity1(); + mcre1.setText( "MultipleCollectionRefEntity1-1-1" ); + mcre1.setMultipleCollectionEntity( mce1 ); + mce1.addRefEntity1( mcre1 ); + em.persist( mcre1 ); + em.merge( mce1 ); + mcre1Id = mcre1.getId(); + } ); } @Test @SuppressWarnings("unchecked") - public void testIsInitialized() { - EntityManager em = getEntityManager(); - - AuditReader reader = AuditReaderFactory.get( em ); - List res = reader.createQuery().forEntitiesAtRevision( MultipleCollectionEntity.class, 1 ) - .add( AuditEntity.id().eq( mce1Id ) ) - .getResultList(); - - MultipleCollectionEntity ret = res.get( 0 ); + public void testIsInitialized(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + var reader = AuditReaderFactory.get( em ); + List res = reader.createQuery().forEntitiesAtRevision( MultipleCollectionEntity.class, 1 ) + .add( AuditEntity.id().eq( mce1Id ) ) + .getResultList(); - assertEquals( Hibernate.isInitialized( ret.getRefEntities1() ), false ); + MultipleCollectionEntity ret = res.get( 0 ); - Hibernate.initialize(ret.getRefEntities1()); + assertEquals( false, Hibernate.isInitialized( ret.getRefEntities1() ) ); - assertEquals( Hibernate.isInitialized( ret.getRefEntities1() ), true ); + Hibernate.initialize( ret.getRefEntities1() ); + assertEquals( true, Hibernate.isInitialized( ret.getRefEntities1() ) ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/lazy/LazyFieldsTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/lazy/LazyFieldsTest.java index f14cd30f373f..5b6577163a16 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/lazy/LazyFieldsTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/lazy/LazyFieldsTest.java @@ -8,6 +8,7 @@ import org.hibernate.envers.Audited; import org.hibernate.testing.bytecode.enhancement.extension.BytecodeEnhanced; +import org.hibernate.testing.envers.junit.EnversTest; import org.hibernate.testing.orm.junit.DomainModel; import org.hibernate.testing.orm.junit.JiraKey; import org.hibernate.testing.orm.junit.SessionFactory; @@ -20,7 +21,8 @@ import jakarta.persistence.FetchType; import jakarta.persistence.Id; -@JiraKey("") +@JiraKey("HHH-19220") +@EnversTest @BytecodeEnhanced @DomainModel( annotatedClasses = { diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/lob/LargeObjectMappingTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/lob/LargeObjectMappingTest.java index c8fc221f37f5..0eb9c031c4cf 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/lob/LargeObjectMappingTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/lob/LargeObjectMappingTest.java @@ -12,10 +12,13 @@ import org.hibernate.envers.Audited; import org.hibernate.mapping.PersistentClass; import org.hibernate.mapping.Property; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.DomainModel; +import org.hibernate.testing.orm.junit.DomainModelScope; import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; +import org.hibernate.testing.orm.junit.SessionFactory; +import org.junit.jupiter.api.Test; import jakarta.persistence.Entity; import jakarta.persistence.GeneratedValue; @@ -27,7 +30,10 @@ * @author Armin Krezović (armin.krezovic at ziragroup dot com) */ @JiraKey(value = "HHH-16253") -public class LargeObjectMappingTest extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@DomainModel(annotatedClasses = { LargeObjectMappingTest.LargeObjectTestEntity.class }) +@SessionFactory +public class LargeObjectMappingTest { @Entity @Audited @@ -73,14 +79,10 @@ public int hashCode() { } } - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { LargeObjectTestEntity.class }; - } - @Test - public void testLobTypeMapping() { - PersistentClass entityBinding = metadata().getEntityBinding( LargeObjectTestEntity.class.getName() + "_AUD" ); + public void testLobTypeMapping(DomainModelScope scope) { + PersistentClass entityBinding = scope.getDomainModel() + .getEntityBinding( LargeObjectTestEntity.class.getName() + "_AUD" ); Property blobProperty = entityBinding.getProperty( "blob" ); Property clobProperty = entityBinding.getProperty( "clob" ); diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/BasicList.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/BasicList.java index e5beef701729..ac62196e0363 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/BasicList.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/BasicList.java @@ -7,193 +7,186 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; -import jakarta.persistence.EntityManager; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.orm.test.envers.entities.manytomany.ListOwnedEntity; import org.hibernate.orm.test.envers.entities.manytomany.ListOwningEntity; import org.hibernate.orm.test.envers.tools.TestTools; -import org.junit.Test; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Adam Warski (adam at warski dot org) */ -public class BasicList extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {ListOwningEntity.class, ListOwnedEntity.class}) +public class BasicList { private Integer ed1_id; private Integer ed2_id; private Integer ing1_id; private Integer ing2_id; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {ListOwningEntity.class, ListOwnedEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - ListOwnedEntity ed1 = new ListOwnedEntity( 1, "data_ed_1" ); - ListOwnedEntity ed2 = new ListOwnedEntity( 2, "data_ed_2" ); - - ListOwningEntity ing1 = new ListOwningEntity( 3, "data_ing_1" ); - ListOwningEntity ing2 = new ListOwningEntity( 4, "data_ing_2" ); - + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Revision 1 - em.getTransaction().begin(); - - em.persist( ed1 ); - em.persist( ed2 ); - em.persist( ing1 ); - em.persist( ing2 ); + scope.inTransaction( em -> { + ListOwnedEntity ed1 = new ListOwnedEntity( 1, "data_ed_1" ); + ListOwnedEntity ed2 = new ListOwnedEntity( 2, "data_ed_2" ); - em.getTransaction().commit(); - - // Revision 2 + ListOwningEntity ing1 = new ListOwningEntity( 3, "data_ing_1" ); + ListOwningEntity ing2 = new ListOwningEntity( 4, "data_ing_2" ); - em.getTransaction().begin(); + em.persist( ed1 ); + em.persist( ed2 ); + em.persist( ing1 ); + em.persist( ing2 ); - ing1 = em.find( ListOwningEntity.class, ing1.getId() ); - ing2 = em.find( ListOwningEntity.class, ing2.getId() ); - ed1 = em.find( ListOwnedEntity.class, ed1.getId() ); - ed2 = em.find( ListOwnedEntity.class, ed2.getId() ); + ed1_id = ed1.getId(); + ed2_id = ed2.getId(); + ing1_id = ing1.getId(); + ing2_id = ing2.getId(); + } ); - ing1.setReferences( new ArrayList() ); - ing1.getReferences().add( ed1 ); + // Revision 2 + scope.inTransaction( em -> { + ListOwningEntity ing1 = em.find( ListOwningEntity.class, ing1_id ); + ListOwningEntity ing2 = em.find( ListOwningEntity.class, ing2_id ); + ListOwnedEntity ed1 = em.find( ListOwnedEntity.class, ed1_id ); + ListOwnedEntity ed2 = em.find( ListOwnedEntity.class, ed2_id ); - ing2.setReferences( new ArrayList() ); - ing2.getReferences().add( ed1 ); - ing2.getReferences().add( ed2 ); + ing1.setReferences( new ArrayList() ); + ing1.getReferences().add( ed1 ); - em.getTransaction().commit(); + ing2.setReferences( new ArrayList() ); + ing2.getReferences().add( ed1 ); + ing2.getReferences().add( ed2 ); + } ); // Revision 3 - em.getTransaction().begin(); - - ing1 = em.find( ListOwningEntity.class, ing1.getId() ); - ed2 = em.find( ListOwnedEntity.class, ed2.getId() ); - ed1 = em.find( ListOwnedEntity.class, ed1.getId() ); - - ing1.getReferences().add( ed2 ); + scope.inTransaction( em -> { + ListOwningEntity ing1 = em.find( ListOwningEntity.class, ing1_id ); + ListOwnedEntity ed2 = em.find( ListOwnedEntity.class, ed2_id ); - em.getTransaction().commit(); + ing1.getReferences().add( ed2 ); + } ); // Revision 4 - em.getTransaction().begin(); - - ing1 = em.find( ListOwningEntity.class, ing1.getId() ); - ed2 = em.find( ListOwnedEntity.class, ed2.getId() ); - ed1 = em.find( ListOwnedEntity.class, ed1.getId() ); - - ing1.getReferences().remove( ed1 ); + scope.inTransaction( em -> { + ListOwningEntity ing1 = em.find( ListOwningEntity.class, ing1_id ); + ListOwnedEntity ed1 = em.find( ListOwnedEntity.class, ed1_id ); - em.getTransaction().commit(); + ing1.getReferences().remove( ed1 ); + } ); // Revision 5 - em.getTransaction().begin(); - - ing1 = em.find( ListOwningEntity.class, ing1.getId() ); - - ing1.setReferences( null ); - - em.getTransaction().commit(); - - // - - ed1_id = ed1.getId(); - ed2_id = ed2.getId(); + scope.inTransaction( em -> { + ListOwningEntity ing1 = em.find( ListOwningEntity.class, ing1_id ); - ing1_id = ing1.getId(); - ing2_id = ing2.getId(); + ing1.setReferences( null ); + } ); } @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2, 4 ).equals( getAuditReader().getRevisions( ListOwnedEntity.class, ed1_id ) ); - assert Arrays.asList( 1, 2, 3, 5 ).equals( getAuditReader().getRevisions( ListOwnedEntity.class, ed2_id ) ); - - assert Arrays.asList( 1, 2, 3, 4, 5 ).equals( - getAuditReader().getRevisions( - ListOwningEntity.class, - ing1_id - ) - ); - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( ListOwningEntity.class, ing2_id ) ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1, 2, 4 ), auditReader.getRevisions( ListOwnedEntity.class, ed1_id ) ); + assertEquals( Arrays.asList( 1, 2, 3, 5 ), auditReader.getRevisions( ListOwnedEntity.class, ed2_id ) ); + + assertEquals( Arrays.asList( 1, 2, 3, 4, 5 ), + auditReader.getRevisions( ListOwningEntity.class, ing1_id ) ); + assertEquals( Arrays.asList( 1, 2 ), auditReader.getRevisions( ListOwningEntity.class, ing2_id ) ); + } ); } @Test - public void testHistoryOfEdId1() { - ListOwningEntity ing1 = getEntityManager().find( ListOwningEntity.class, ing1_id ); - ListOwningEntity ing2 = getEntityManager().find( ListOwningEntity.class, ing2_id ); - - ListOwnedEntity rev1 = getAuditReader().find( ListOwnedEntity.class, ed1_id, 1 ); - ListOwnedEntity rev2 = getAuditReader().find( ListOwnedEntity.class, ed1_id, 2 ); - ListOwnedEntity rev3 = getAuditReader().find( ListOwnedEntity.class, ed1_id, 3 ); - ListOwnedEntity rev4 = getAuditReader().find( ListOwnedEntity.class, ed1_id, 4 ); - ListOwnedEntity rev5 = getAuditReader().find( ListOwnedEntity.class, ed1_id, 5 ); - - assert rev1.getReferencing().equals( Collections.EMPTY_LIST ); - assert TestTools.checkCollection( rev2.getReferencing(), ing1, ing2 ); - assert TestTools.checkCollection( rev3.getReferencing(), ing1, ing2 ); - assert TestTools.checkCollection( rev4.getReferencing(), ing2 ); - assert TestTools.checkCollection( rev5.getReferencing(), ing2 ); + public void testHistoryOfEdId1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + ListOwningEntity ing1 = em.find( ListOwningEntity.class, ing1_id ); + ListOwningEntity ing2 = em.find( ListOwningEntity.class, ing2_id ); + + ListOwnedEntity rev1 = auditReader.find( ListOwnedEntity.class, ed1_id, 1 ); + ListOwnedEntity rev2 = auditReader.find( ListOwnedEntity.class, ed1_id, 2 ); + ListOwnedEntity rev3 = auditReader.find( ListOwnedEntity.class, ed1_id, 3 ); + ListOwnedEntity rev4 = auditReader.find( ListOwnedEntity.class, ed1_id, 4 ); + ListOwnedEntity rev5 = auditReader.find( ListOwnedEntity.class, ed1_id, 5 ); + + assertEquals( Collections.EMPTY_LIST, rev1.getReferencing() ); + assert TestTools.checkCollection( rev2.getReferencing(), ing1, ing2 ); + assert TestTools.checkCollection( rev3.getReferencing(), ing1, ing2 ); + assert TestTools.checkCollection( rev4.getReferencing(), ing2 ); + assert TestTools.checkCollection( rev5.getReferencing(), ing2 ); + } ); } @Test - public void testHistoryOfEdId2() { - ListOwningEntity ing1 = getEntityManager().find( ListOwningEntity.class, ing1_id ); - ListOwningEntity ing2 = getEntityManager().find( ListOwningEntity.class, ing2_id ); - - ListOwnedEntity rev1 = getAuditReader().find( ListOwnedEntity.class, ed2_id, 1 ); - ListOwnedEntity rev2 = getAuditReader().find( ListOwnedEntity.class, ed2_id, 2 ); - ListOwnedEntity rev3 = getAuditReader().find( ListOwnedEntity.class, ed2_id, 3 ); - ListOwnedEntity rev4 = getAuditReader().find( ListOwnedEntity.class, ed2_id, 4 ); - ListOwnedEntity rev5 = getAuditReader().find( ListOwnedEntity.class, ed2_id, 5 ); - - assert rev1.getReferencing().equals( Collections.EMPTY_LIST ); - assert TestTools.checkCollection( rev2.getReferencing(), ing2 ); - assert TestTools.checkCollection( rev3.getReferencing(), ing1, ing2 ); - assert TestTools.checkCollection( rev4.getReferencing(), ing1, ing2 ); - assert TestTools.checkCollection( rev5.getReferencing(), ing2 ); + public void testHistoryOfEdId2(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + ListOwningEntity ing1 = em.find( ListOwningEntity.class, ing1_id ); + ListOwningEntity ing2 = em.find( ListOwningEntity.class, ing2_id ); + + ListOwnedEntity rev1 = auditReader.find( ListOwnedEntity.class, ed2_id, 1 ); + ListOwnedEntity rev2 = auditReader.find( ListOwnedEntity.class, ed2_id, 2 ); + ListOwnedEntity rev3 = auditReader.find( ListOwnedEntity.class, ed2_id, 3 ); + ListOwnedEntity rev4 = auditReader.find( ListOwnedEntity.class, ed2_id, 4 ); + ListOwnedEntity rev5 = auditReader.find( ListOwnedEntity.class, ed2_id, 5 ); + + assertEquals( Collections.EMPTY_LIST, rev1.getReferencing() ); + assert TestTools.checkCollection( rev2.getReferencing(), ing2 ); + assert TestTools.checkCollection( rev3.getReferencing(), ing1, ing2 ); + assert TestTools.checkCollection( rev4.getReferencing(), ing1, ing2 ); + assert TestTools.checkCollection( rev5.getReferencing(), ing2 ); + } ); } @Test - public void testHistoryOfEdIng1() { - ListOwnedEntity ed1 = getEntityManager().find( ListOwnedEntity.class, ed1_id ); - ListOwnedEntity ed2 = getEntityManager().find( ListOwnedEntity.class, ed2_id ); - - ListOwningEntity rev1 = getAuditReader().find( ListOwningEntity.class, ing1_id, 1 ); - ListOwningEntity rev2 = getAuditReader().find( ListOwningEntity.class, ing1_id, 2 ); - ListOwningEntity rev3 = getAuditReader().find( ListOwningEntity.class, ing1_id, 3 ); - ListOwningEntity rev4 = getAuditReader().find( ListOwningEntity.class, ing1_id, 4 ); - ListOwningEntity rev5 = getAuditReader().find( ListOwningEntity.class, ing1_id, 5 ); - - assert rev1.getReferences().equals( Collections.EMPTY_LIST ); - assert TestTools.checkCollection( rev2.getReferences(), ed1 ); - assert TestTools.checkCollection( rev3.getReferences(), ed1, ed2 ); - assert TestTools.checkCollection( rev4.getReferences(), ed2 ); - assert rev5.getReferences().equals( Collections.EMPTY_LIST ); + public void testHistoryOfEdIng1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + ListOwnedEntity ed1 = em.find( ListOwnedEntity.class, ed1_id ); + ListOwnedEntity ed2 = em.find( ListOwnedEntity.class, ed2_id ); + + ListOwningEntity rev1 = auditReader.find( ListOwningEntity.class, ing1_id, 1 ); + ListOwningEntity rev2 = auditReader.find( ListOwningEntity.class, ing1_id, 2 ); + ListOwningEntity rev3 = auditReader.find( ListOwningEntity.class, ing1_id, 3 ); + ListOwningEntity rev4 = auditReader.find( ListOwningEntity.class, ing1_id, 4 ); + ListOwningEntity rev5 = auditReader.find( ListOwningEntity.class, ing1_id, 5 ); + + assertEquals( Collections.EMPTY_LIST, rev1.getReferences() ); + assert TestTools.checkCollection( rev2.getReferences(), ed1 ); + assert TestTools.checkCollection( rev3.getReferences(), ed1, ed2 ); + assert TestTools.checkCollection( rev4.getReferences(), ed2 ); + assertEquals( Collections.EMPTY_LIST, rev5.getReferences() ); + } ); } @Test - public void testHistoryOfEdIng2() { - ListOwnedEntity ed1 = getEntityManager().find( ListOwnedEntity.class, ed1_id ); - ListOwnedEntity ed2 = getEntityManager().find( ListOwnedEntity.class, ed2_id ); - - ListOwningEntity rev1 = getAuditReader().find( ListOwningEntity.class, ing2_id, 1 ); - ListOwningEntity rev2 = getAuditReader().find( ListOwningEntity.class, ing2_id, 2 ); - ListOwningEntity rev3 = getAuditReader().find( ListOwningEntity.class, ing2_id, 3 ); - ListOwningEntity rev4 = getAuditReader().find( ListOwningEntity.class, ing2_id, 4 ); - ListOwningEntity rev5 = getAuditReader().find( ListOwningEntity.class, ing2_id, 5 ); - - assert rev1.getReferences().equals( Collections.EMPTY_LIST ); - assert TestTools.checkCollection( rev2.getReferences(), ed1, ed2 ); - assert TestTools.checkCollection( rev3.getReferences(), ed1, ed2 ); - assert TestTools.checkCollection( rev4.getReferences(), ed1, ed2 ); - assert TestTools.checkCollection( rev5.getReferences(), ed1, ed2 ); + public void testHistoryOfEdIng2(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + ListOwnedEntity ed1 = em.find( ListOwnedEntity.class, ed1_id ); + ListOwnedEntity ed2 = em.find( ListOwnedEntity.class, ed2_id ); + + ListOwningEntity rev1 = auditReader.find( ListOwningEntity.class, ing2_id, 1 ); + ListOwningEntity rev2 = auditReader.find( ListOwningEntity.class, ing2_id, 2 ); + ListOwningEntity rev3 = auditReader.find( ListOwningEntity.class, ing2_id, 3 ); + ListOwningEntity rev4 = auditReader.find( ListOwningEntity.class, ing2_id, 4 ); + ListOwningEntity rev5 = auditReader.find( ListOwningEntity.class, ing2_id, 5 ); + + assertEquals( Collections.EMPTY_LIST, rev1.getReferences() ); + assert TestTools.checkCollection( rev2.getReferences(), ed1, ed2 ); + assert TestTools.checkCollection( rev3.getReferences(), ed1, ed2 ); + assert TestTools.checkCollection( rev4.getReferences(), ed1, ed2 ); + assert TestTools.checkCollection( rev5.getReferences(), ed1, ed2 ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/BasicMap.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/BasicMap.java index 7422cc2e6fb8..41a142266d5b 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/BasicMap.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/BasicMap.java @@ -7,162 +7,165 @@ import java.util.Arrays; import java.util.Collections; import java.util.HashMap; -import jakarta.persistence.EntityManager; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.orm.test.envers.entities.manytomany.MapOwnedEntity; import org.hibernate.orm.test.envers.entities.manytomany.MapOwningEntity; import org.hibernate.orm.test.envers.tools.TestTools; -import org.junit.Test; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Adam Warski (adam at warski dot org) */ -public class BasicMap extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {MapOwningEntity.class, MapOwnedEntity.class}) +public class BasicMap { private Integer ed1_id; private Integer ed2_id; private Integer ing1_id; private Integer ing2_id; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {MapOwningEntity.class, MapOwnedEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - MapOwnedEntity ed1 = new MapOwnedEntity( 1, "data_ed_1" ); - MapOwnedEntity ed2 = new MapOwnedEntity( 2, "data_ed_2" ); - - MapOwningEntity ing1 = new MapOwningEntity( 3, "data_ing_1" ); - MapOwningEntity ing2 = new MapOwningEntity( 4, "data_ing_2" ); - + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Revision 1 (ing1: initialy empty, ing2: one mapping) - em.getTransaction().begin(); + scope.inTransaction( em -> { + MapOwnedEntity ed1 = new MapOwnedEntity( 1, "data_ed_1" ); + MapOwnedEntity ed2 = new MapOwnedEntity( 2, "data_ed_2" ); - ing2.getReferences().put( "2", ed2 ); + MapOwningEntity ing1 = new MapOwningEntity( 3, "data_ing_1" ); + MapOwningEntity ing2 = new MapOwningEntity( 4, "data_ing_2" ); - em.persist( ed1 ); - em.persist( ed2 ); - em.persist( ing1 ); - em.persist( ing2 ); + ing2.getReferences().put( "2", ed2 ); - em.getTransaction().commit(); + em.persist( ed1 ); + em.persist( ed2 ); + em.persist( ing1 ); + em.persist( ing2 ); - // Revision 2 (ing1: adding two mappings, ing2: replacing an existing mapping) - - em.getTransaction().begin(); + ed1_id = ed1.getId(); + ed2_id = ed2.getId(); + ing1_id = ing1.getId(); + ing2_id = ing2.getId(); + } ); - ing1 = em.find( MapOwningEntity.class, ing1.getId() ); - ing2 = em.find( MapOwningEntity.class, ing2.getId() ); - ed1 = em.find( MapOwnedEntity.class, ed1.getId() ); - ed2 = em.find( MapOwnedEntity.class, ed2.getId() ); - - ing1.getReferences().put( "1", ed1 ); - ing1.getReferences().put( "2", ed1 ); + // Revision 2 (ing1: adding two mappings, ing2: replacing an existing mapping) + scope.inTransaction( em -> { + MapOwningEntity ing1 = em.find( MapOwningEntity.class, ing1_id ); + MapOwningEntity ing2 = em.find( MapOwningEntity.class, ing2_id ); + MapOwnedEntity ed1 = em.find( MapOwnedEntity.class, ed1_id ); - ing2.getReferences().put( "2", ed1 ); + ing1.getReferences().put( "1", ed1 ); + ing1.getReferences().put( "2", ed1 ); - em.getTransaction().commit(); + ing2.getReferences().put( "2", ed1 ); + } ); // No revision (ing1: adding an existing mapping, ing2: removing a non existing mapping) - em.getTransaction().begin(); + scope.inTransaction( em -> { + MapOwningEntity ing1 = em.find( MapOwningEntity.class, ing1_id ); + MapOwningEntity ing2 = em.find( MapOwningEntity.class, ing2_id ); + MapOwnedEntity ed1 = em.find( MapOwnedEntity.class, ed1_id ); - ing1 = em.find( MapOwningEntity.class, ing1.getId() ); - ing2 = em.find( MapOwningEntity.class, ing2.getId() ); + ing1.getReferences().put( "1", ed1 ); - ing1.getReferences().put( "1", ed1 ); - - ing2.getReferences().remove( "3" ); - - em.getTransaction().commit(); + ing2.getReferences().remove( "3" ); + } ); // Revision 3 (ing1: clearing, ing2: replacing with a new map) - em.getTransaction().begin(); - - ing1 = em.find( MapOwningEntity.class, ing1.getId() ); - ed1 = em.find( MapOwnedEntity.class, ed1.getId() ); - - ing1.getReferences().clear(); - ing2.setReferences( new HashMap() ); - ing2.getReferences().put( "1", ed2 ); - - em.getTransaction().commit(); - // - - ed1_id = ed1.getId(); - ed2_id = ed2.getId(); - - ing1_id = ing1.getId(); - ing2_id = ing2.getId(); + scope.inTransaction( em -> { + MapOwningEntity ing1 = em.find( MapOwningEntity.class, ing1_id ); + MapOwningEntity ing2 = em.find( MapOwningEntity.class, ing2_id ); + MapOwnedEntity ed2 = em.find( MapOwnedEntity.class, ed2_id ); + + ing1.getReferences().clear(); + ing2.setReferences( new HashMap() ); + ing2.getReferences().put( "1", ed2 ); + } ); } @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2, 3 ).equals( getAuditReader().getRevisions( MapOwnedEntity.class, ed1_id ) ); - assert Arrays.asList( 1, 2, 3 ).equals( getAuditReader().getRevisions( MapOwnedEntity.class, ed2_id ) ); - - assert Arrays.asList( 1, 2, 3 ).equals( getAuditReader().getRevisions( MapOwningEntity.class, ing1_id ) ); - assert Arrays.asList( 1, 2, 3 ).equals( getAuditReader().getRevisions( MapOwningEntity.class, ing2_id ) ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1, 2, 3 ), auditReader.getRevisions( MapOwnedEntity.class, ed1_id ) ); + assertEquals( Arrays.asList( 1, 2, 3 ), auditReader.getRevisions( MapOwnedEntity.class, ed2_id ) ); + + assertEquals( Arrays.asList( 1, 2, 3 ), auditReader.getRevisions( MapOwningEntity.class, ing1_id ) ); + assertEquals( Arrays.asList( 1, 2, 3 ), auditReader.getRevisions( MapOwningEntity.class, ing2_id ) ); + } ); } @Test - public void testHistoryOfEdId1() { - MapOwningEntity ing1 = getEntityManager().find( MapOwningEntity.class, ing1_id ); - MapOwningEntity ing2 = getEntityManager().find( MapOwningEntity.class, ing2_id ); - - MapOwnedEntity rev1 = getAuditReader().find( MapOwnedEntity.class, ed1_id, 1 ); - MapOwnedEntity rev2 = getAuditReader().find( MapOwnedEntity.class, ed1_id, 2 ); - MapOwnedEntity rev3 = getAuditReader().find( MapOwnedEntity.class, ed1_id, 3 ); - - assert rev1.getReferencing().equals( Collections.EMPTY_SET ); - assert rev2.getReferencing().equals( TestTools.makeSet( ing1, ing2 ) ); - assert rev3.getReferencing().equals( Collections.EMPTY_SET ); + public void testHistoryOfEdId1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + MapOwningEntity ing1 = em.find( MapOwningEntity.class, ing1_id ); + MapOwningEntity ing2 = em.find( MapOwningEntity.class, ing2_id ); + + MapOwnedEntity rev1 = auditReader.find( MapOwnedEntity.class, ed1_id, 1 ); + MapOwnedEntity rev2 = auditReader.find( MapOwnedEntity.class, ed1_id, 2 ); + MapOwnedEntity rev3 = auditReader.find( MapOwnedEntity.class, ed1_id, 3 ); + + assertEquals( Collections.EMPTY_SET, rev1.getReferencing() ); + assertEquals( TestTools.makeSet( ing1, ing2 ), rev2.getReferencing() ); + assertEquals( Collections.EMPTY_SET, rev3.getReferencing() ); + } ); } @Test - public void testHistoryOfEdId2() { - MapOwningEntity ing2 = getEntityManager().find( MapOwningEntity.class, ing2_id ); - - MapOwnedEntity rev1 = getAuditReader().find( MapOwnedEntity.class, ed2_id, 1 ); - MapOwnedEntity rev2 = getAuditReader().find( MapOwnedEntity.class, ed2_id, 2 ); - MapOwnedEntity rev3 = getAuditReader().find( MapOwnedEntity.class, ed2_id, 3 ); - - assert rev1.getReferencing().equals( TestTools.makeSet( ing2 ) ); - assert rev2.getReferencing().equals( Collections.EMPTY_SET ); - assert rev3.getReferencing().equals( TestTools.makeSet( ing2 ) ); + public void testHistoryOfEdId2(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + MapOwningEntity ing2 = em.find( MapOwningEntity.class, ing2_id ); + + MapOwnedEntity rev1 = auditReader.find( MapOwnedEntity.class, ed2_id, 1 ); + MapOwnedEntity rev2 = auditReader.find( MapOwnedEntity.class, ed2_id, 2 ); + MapOwnedEntity rev3 = auditReader.find( MapOwnedEntity.class, ed2_id, 3 ); + + assertEquals( TestTools.makeSet( ing2 ), rev1.getReferencing() ); + assertEquals( Collections.EMPTY_SET, rev2.getReferencing() ); + assertEquals( TestTools.makeSet( ing2 ), rev3.getReferencing() ); + } ); } @Test - public void testHistoryOfEdIng1() { - MapOwnedEntity ed1 = getEntityManager().find( MapOwnedEntity.class, ed1_id ); - - MapOwningEntity rev1 = getAuditReader().find( MapOwningEntity.class, ing1_id, 1 ); - MapOwningEntity rev2 = getAuditReader().find( MapOwningEntity.class, ing1_id, 2 ); - MapOwningEntity rev3 = getAuditReader().find( MapOwningEntity.class, ing1_id, 3 ); - - assert rev1.getReferences().equals( Collections.EMPTY_MAP ); - assert rev2.getReferences().equals( TestTools.makeMap( "1", ed1, "2", ed1 ) ); - assert rev3.getReferences().equals( Collections.EMPTY_MAP ); + public void testHistoryOfEdIng1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + MapOwnedEntity ed1 = em.find( MapOwnedEntity.class, ed1_id ); + + MapOwningEntity rev1 = auditReader.find( MapOwningEntity.class, ing1_id, 1 ); + MapOwningEntity rev2 = auditReader.find( MapOwningEntity.class, ing1_id, 2 ); + MapOwningEntity rev3 = auditReader.find( MapOwningEntity.class, ing1_id, 3 ); + + assertEquals( Collections.EMPTY_MAP, rev1.getReferences() ); + assertEquals( TestTools.makeMap( "1", ed1, "2", ed1 ), rev2.getReferences() ); + assertEquals( Collections.EMPTY_MAP, rev3.getReferences() ); + } ); } @Test - public void testHistoryOfEdIng2() { - MapOwnedEntity ed1 = getEntityManager().find( MapOwnedEntity.class, ed1_id ); - MapOwnedEntity ed2 = getEntityManager().find( MapOwnedEntity.class, ed2_id ); - - MapOwningEntity rev1 = getAuditReader().find( MapOwningEntity.class, ing2_id, 1 ); - MapOwningEntity rev2 = getAuditReader().find( MapOwningEntity.class, ing2_id, 2 ); - MapOwningEntity rev3 = getAuditReader().find( MapOwningEntity.class, ing2_id, 3 ); - - assert rev1.getReferences().equals( TestTools.makeMap( "2", ed2 ) ); - assert rev2.getReferences().equals( TestTools.makeMap( "2", ed1 ) ); - assert rev3.getReferences().equals( TestTools.makeMap( "1", ed2 ) ); + public void testHistoryOfEdIng2(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + MapOwnedEntity ed1 = em.find( MapOwnedEntity.class, ed1_id ); + MapOwnedEntity ed2 = em.find( MapOwnedEntity.class, ed2_id ); + + MapOwningEntity rev1 = auditReader.find( MapOwningEntity.class, ing2_id, 1 ); + MapOwningEntity rev2 = auditReader.find( MapOwningEntity.class, ing2_id, 2 ); + MapOwningEntity rev3 = auditReader.find( MapOwningEntity.class, ing2_id, 3 ); + + assertEquals( TestTools.makeMap( "2", ed2 ), rev1.getReferences() ); + assertEquals( TestTools.makeMap( "2", ed1 ), rev2.getReferences() ); + assertEquals( TestTools.makeMap( "1", ed2 ), rev3.getReferences() ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/BasicSet.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/BasicSet.java index 5d4fa7b166af..24335611bdf7 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/BasicSet.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/BasicSet.java @@ -7,188 +7,185 @@ import java.util.Arrays; import java.util.Collections; import java.util.HashSet; -import jakarta.persistence.EntityManager; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.orm.test.envers.entities.manytomany.SetOwnedEntity; import org.hibernate.orm.test.envers.entities.manytomany.SetOwningEntity; import org.hibernate.orm.test.envers.tools.TestTools; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; -import org.junit.Test; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Adam Warski (adam at warski dot org) */ -public class BasicSet extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {SetOwningEntity.class, SetOwnedEntity.class}) +public class BasicSet { private Integer ed1_id; private Integer ed2_id; private Integer ing1_id; private Integer ing2_id; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {SetOwningEntity.class, SetOwnedEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - SetOwnedEntity ed1 = new SetOwnedEntity( 1, "data_ed_1" ); - SetOwnedEntity ed2 = new SetOwnedEntity( 2, "data_ed_2" ); - - SetOwningEntity ing1 = new SetOwningEntity( 3, "data_ing_1" ); - SetOwningEntity ing2 = new SetOwningEntity( 4, "data_ing_2" ); - + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Revision 1 - em.getTransaction().begin(); - - em.persist( ed1 ); - em.persist( ed2 ); - em.persist( ing1 ); - em.persist( ing2 ); + scope.inTransaction( em -> { + SetOwnedEntity ed1 = new SetOwnedEntity( 1, "data_ed_1" ); + SetOwnedEntity ed2 = new SetOwnedEntity( 2, "data_ed_2" ); - em.getTransaction().commit(); + SetOwningEntity ing1 = new SetOwningEntity( 3, "data_ing_1" ); + SetOwningEntity ing2 = new SetOwningEntity( 4, "data_ing_2" ); - // Revision 2 + em.persist( ed1 ); + em.persist( ed2 ); + em.persist( ing1 ); + em.persist( ing2 ); - em.getTransaction().begin(); + ed1_id = ed1.getId(); + ed2_id = ed2.getId(); + ing1_id = ing1.getId(); + ing2_id = ing2.getId(); + } ); - ing1 = em.find( SetOwningEntity.class, ing1.getId() ); - ing2 = em.find( SetOwningEntity.class, ing2.getId() ); - ed1 = em.find( SetOwnedEntity.class, ed1.getId() ); - ed2 = em.find( SetOwnedEntity.class, ed2.getId() ); - - ing1.setReferences( new HashSet() ); - ing1.getReferences().add( ed1 ); + // Revision 2 + scope.inTransaction( em -> { + SetOwningEntity ing1 = em.find( SetOwningEntity.class, ing1_id ); + SetOwningEntity ing2 = em.find( SetOwningEntity.class, ing2_id ); + SetOwnedEntity ed1 = em.find( SetOwnedEntity.class, ed1_id ); + SetOwnedEntity ed2 = em.find( SetOwnedEntity.class, ed2_id ); - ing2.setReferences( new HashSet() ); - ing2.getReferences().add( ed1 ); - ing2.getReferences().add( ed2 ); + ing1.setReferences( new HashSet() ); + ing1.getReferences().add( ed1 ); - em.getTransaction().commit(); + ing2.setReferences( new HashSet() ); + ing2.getReferences().add( ed1 ); + ing2.getReferences().add( ed2 ); + } ); // Revision 3 - em.getTransaction().begin(); + scope.inTransaction( em -> { + SetOwningEntity ing1 = em.find( SetOwningEntity.class, ing1_id ); + SetOwnedEntity ed2 = em.find( SetOwnedEntity.class, ed2_id ); - ing1 = em.find( SetOwningEntity.class, ing1.getId() ); - ed2 = em.find( SetOwnedEntity.class, ed2.getId() ); - ed1 = em.find( SetOwnedEntity.class, ed1.getId() ); - - ing1.getReferences().add( ed2 ); - - em.getTransaction().commit(); + ing1.getReferences().add( ed2 ); + } ); // Revision 4 - em.getTransaction().begin(); - - ing1 = em.find( SetOwningEntity.class, ing1.getId() ); - ed2 = em.find( SetOwnedEntity.class, ed2.getId() ); - ed1 = em.find( SetOwnedEntity.class, ed1.getId() ); + scope.inTransaction( em -> { + SetOwningEntity ing1 = em.find( SetOwningEntity.class, ing1_id ); + SetOwnedEntity ed1 = em.find( SetOwnedEntity.class, ed1_id ); - ing1.getReferences().remove( ed1 ); - - em.getTransaction().commit(); + ing1.getReferences().remove( ed1 ); + } ); // Revision 5 - em.getTransaction().begin(); - - ing1 = em.find( SetOwningEntity.class, ing1.getId() ); + scope.inTransaction( em -> { + SetOwningEntity ing1 = em.find( SetOwningEntity.class, ing1_id ); - ing1.setReferences( null ); - - em.getTransaction().commit(); - - // - - ed1_id = ed1.getId(); - ed2_id = ed2.getId(); - - ing1_id = ing1.getId(); - ing2_id = ing2.getId(); + ing1.setReferences( null ); + } ); } @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2, 4 ).equals( getAuditReader().getRevisions( SetOwnedEntity.class, ed1_id ) ); - assert Arrays.asList( 1, 2, 3, 5 ).equals( getAuditReader().getRevisions( SetOwnedEntity.class, ed2_id ) ); - - assert Arrays.asList( 1, 2, 3, 4, 5 ).equals( getAuditReader().getRevisions( SetOwningEntity.class, ing1_id ) ); - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( SetOwningEntity.class, ing2_id ) ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1, 2, 4 ), auditReader.getRevisions( SetOwnedEntity.class, ed1_id ) ); + assertEquals( Arrays.asList( 1, 2, 3, 5 ), auditReader.getRevisions( SetOwnedEntity.class, ed2_id ) ); + + assertEquals( Arrays.asList( 1, 2, 3, 4, 5 ), auditReader.getRevisions( SetOwningEntity.class, ing1_id ) ); + assertEquals( Arrays.asList( 1, 2 ), auditReader.getRevisions( SetOwningEntity.class, ing2_id ) ); + } ); } @Test - public void testHistoryOfEdId1() { - SetOwningEntity ing1 = getEntityManager().find( SetOwningEntity.class, ing1_id ); - SetOwningEntity ing2 = getEntityManager().find( SetOwningEntity.class, ing2_id ); - - SetOwnedEntity rev1 = getAuditReader().find( SetOwnedEntity.class, ed1_id, 1 ); - SetOwnedEntity rev2 = getAuditReader().find( SetOwnedEntity.class, ed1_id, 2 ); - SetOwnedEntity rev3 = getAuditReader().find( SetOwnedEntity.class, ed1_id, 3 ); - SetOwnedEntity rev4 = getAuditReader().find( SetOwnedEntity.class, ed1_id, 4 ); - SetOwnedEntity rev5 = getAuditReader().find( SetOwnedEntity.class, ed1_id, 5 ); - - assert rev1.getReferencing().equals( Collections.EMPTY_SET ); - assert rev2.getReferencing().equals( TestTools.makeSet( ing1, ing2 ) ); - assert rev3.getReferencing().equals( TestTools.makeSet( ing1, ing2 ) ); - assert rev4.getReferencing().equals( TestTools.makeSet( ing2 ) ); - assert rev5.getReferencing().equals( TestTools.makeSet( ing2 ) ); + public void testHistoryOfEdId1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + SetOwningEntity ing1 = em.find( SetOwningEntity.class, ing1_id ); + SetOwningEntity ing2 = em.find( SetOwningEntity.class, ing2_id ); + + SetOwnedEntity rev1 = auditReader.find( SetOwnedEntity.class, ed1_id, 1 ); + SetOwnedEntity rev2 = auditReader.find( SetOwnedEntity.class, ed1_id, 2 ); + SetOwnedEntity rev3 = auditReader.find( SetOwnedEntity.class, ed1_id, 3 ); + SetOwnedEntity rev4 = auditReader.find( SetOwnedEntity.class, ed1_id, 4 ); + SetOwnedEntity rev5 = auditReader.find( SetOwnedEntity.class, ed1_id, 5 ); + + assertEquals( Collections.EMPTY_SET, rev1.getReferencing() ); + assertEquals( TestTools.makeSet( ing1, ing2 ), rev2.getReferencing() ); + assertEquals( TestTools.makeSet( ing1, ing2 ), rev3.getReferencing() ); + assertEquals( TestTools.makeSet( ing2 ), rev4.getReferencing() ); + assertEquals( TestTools.makeSet( ing2 ), rev5.getReferencing() ); + } ); } @Test - public void testHistoryOfEdId2() { - SetOwningEntity ing1 = getEntityManager().find( SetOwningEntity.class, ing1_id ); - SetOwningEntity ing2 = getEntityManager().find( SetOwningEntity.class, ing2_id ); - - SetOwnedEntity rev1 = getAuditReader().find( SetOwnedEntity.class, ed2_id, 1 ); - SetOwnedEntity rev2 = getAuditReader().find( SetOwnedEntity.class, ed2_id, 2 ); - SetOwnedEntity rev3 = getAuditReader().find( SetOwnedEntity.class, ed2_id, 3 ); - SetOwnedEntity rev4 = getAuditReader().find( SetOwnedEntity.class, ed2_id, 4 ); - SetOwnedEntity rev5 = getAuditReader().find( SetOwnedEntity.class, ed2_id, 5 ); - - assert rev1.getReferencing().equals( Collections.EMPTY_SET ); - assert rev2.getReferencing().equals( TestTools.makeSet( ing2 ) ); - assert rev3.getReferencing().equals( TestTools.makeSet( ing1, ing2 ) ); - assert rev4.getReferencing().equals( TestTools.makeSet( ing1, ing2 ) ); - assert rev5.getReferencing().equals( TestTools.makeSet( ing2 ) ); + public void testHistoryOfEdId2(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + SetOwningEntity ing1 = em.find( SetOwningEntity.class, ing1_id ); + SetOwningEntity ing2 = em.find( SetOwningEntity.class, ing2_id ); + + SetOwnedEntity rev1 = auditReader.find( SetOwnedEntity.class, ed2_id, 1 ); + SetOwnedEntity rev2 = auditReader.find( SetOwnedEntity.class, ed2_id, 2 ); + SetOwnedEntity rev3 = auditReader.find( SetOwnedEntity.class, ed2_id, 3 ); + SetOwnedEntity rev4 = auditReader.find( SetOwnedEntity.class, ed2_id, 4 ); + SetOwnedEntity rev5 = auditReader.find( SetOwnedEntity.class, ed2_id, 5 ); + + assertEquals( Collections.EMPTY_SET, rev1.getReferencing() ); + assertEquals( TestTools.makeSet( ing2 ), rev2.getReferencing() ); + assertEquals( TestTools.makeSet( ing1, ing2 ), rev3.getReferencing() ); + assertEquals( TestTools.makeSet( ing1, ing2 ), rev4.getReferencing() ); + assertEquals( TestTools.makeSet( ing2 ), rev5.getReferencing() ); + } ); } @Test - public void testHistoryOfEdIng1() { - SetOwnedEntity ed1 = getEntityManager().find( SetOwnedEntity.class, ed1_id ); - SetOwnedEntity ed2 = getEntityManager().find( SetOwnedEntity.class, ed2_id ); - - SetOwningEntity rev1 = getAuditReader().find( SetOwningEntity.class, ing1_id, 1 ); - SetOwningEntity rev2 = getAuditReader().find( SetOwningEntity.class, ing1_id, 2 ); - SetOwningEntity rev3 = getAuditReader().find( SetOwningEntity.class, ing1_id, 3 ); - SetOwningEntity rev4 = getAuditReader().find( SetOwningEntity.class, ing1_id, 4 ); - SetOwningEntity rev5 = getAuditReader().find( SetOwningEntity.class, ing1_id, 5 ); - - assert rev1.getReferences().equals( Collections.EMPTY_SET ); - assert rev2.getReferences().equals( TestTools.makeSet( ed1 ) ); - assert rev3.getReferences().equals( TestTools.makeSet( ed1, ed2 ) ); - assert rev4.getReferences().equals( TestTools.makeSet( ed2 ) ); - assert rev5.getReferences().equals( Collections.EMPTY_SET ); + public void testHistoryOfEdIng1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + SetOwnedEntity ed1 = em.find( SetOwnedEntity.class, ed1_id ); + SetOwnedEntity ed2 = em.find( SetOwnedEntity.class, ed2_id ); + + SetOwningEntity rev1 = auditReader.find( SetOwningEntity.class, ing1_id, 1 ); + SetOwningEntity rev2 = auditReader.find( SetOwningEntity.class, ing1_id, 2 ); + SetOwningEntity rev3 = auditReader.find( SetOwningEntity.class, ing1_id, 3 ); + SetOwningEntity rev4 = auditReader.find( SetOwningEntity.class, ing1_id, 4 ); + SetOwningEntity rev5 = auditReader.find( SetOwningEntity.class, ing1_id, 5 ); + + assertEquals( Collections.EMPTY_SET, rev1.getReferences() ); + assertEquals( TestTools.makeSet( ed1 ), rev2.getReferences() ); + assertEquals( TestTools.makeSet( ed1, ed2 ), rev3.getReferences() ); + assertEquals( TestTools.makeSet( ed2 ), rev4.getReferences() ); + assertEquals( Collections.EMPTY_SET, rev5.getReferences() ); + } ); } @Test - public void testHistoryOfEdIng2() { - SetOwnedEntity ed1 = getEntityManager().find( SetOwnedEntity.class, ed1_id ); - SetOwnedEntity ed2 = getEntityManager().find( SetOwnedEntity.class, ed2_id ); - - SetOwningEntity rev1 = getAuditReader().find( SetOwningEntity.class, ing2_id, 1 ); - SetOwningEntity rev2 = getAuditReader().find( SetOwningEntity.class, ing2_id, 2 ); - SetOwningEntity rev3 = getAuditReader().find( SetOwningEntity.class, ing2_id, 3 ); - SetOwningEntity rev4 = getAuditReader().find( SetOwningEntity.class, ing2_id, 4 ); - SetOwningEntity rev5 = getAuditReader().find( SetOwningEntity.class, ing2_id, 5 ); - - assert rev1.getReferences().equals( Collections.EMPTY_SET ); - assert rev2.getReferences().equals( TestTools.makeSet( ed1, ed2 ) ); - assert rev3.getReferences().equals( TestTools.makeSet( ed1, ed2 ) ); - assert rev4.getReferences().equals( TestTools.makeSet( ed1, ed2 ) ); - assert rev5.getReferences().equals( TestTools.makeSet( ed1, ed2 ) ); + public void testHistoryOfEdIng2(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + SetOwnedEntity ed1 = em.find( SetOwnedEntity.class, ed1_id ); + SetOwnedEntity ed2 = em.find( SetOwnedEntity.class, ed2_id ); + + SetOwningEntity rev1 = auditReader.find( SetOwningEntity.class, ing2_id, 1 ); + SetOwningEntity rev2 = auditReader.find( SetOwningEntity.class, ing2_id, 2 ); + SetOwningEntity rev3 = auditReader.find( SetOwningEntity.class, ing2_id, 3 ); + SetOwningEntity rev4 = auditReader.find( SetOwningEntity.class, ing2_id, 4 ); + SetOwningEntity rev5 = auditReader.find( SetOwningEntity.class, ing2_id, 5 ); + + assertEquals( Collections.EMPTY_SET, rev1.getReferences() ); + assertEquals( TestTools.makeSet( ed1, ed2 ), rev2.getReferences() ); + assertEquals( TestTools.makeSet( ed1, ed2 ), rev3.getReferences() ); + assertEquals( TestTools.makeSet( ed1, ed2 ), rev4.getReferences() ); + assertEquals( TestTools.makeSet( ed1, ed2 ), rev5.getReferences() ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/BasicWhereJoinTable.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/BasicWhereJoinTable.java new file mode 100644 index 000000000000..053f11fa7efa --- /dev/null +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/BasicWhereJoinTable.java @@ -0,0 +1,165 @@ +/* + * SPDX-License-Identifier: Apache-2.0 + * Copyright Red Hat Inc. and Hibernate Authors + */ +package org.hibernate.orm.test.envers.integration.manytomany; + +import java.util.Arrays; + +import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.orm.test.envers.entities.IntNoAutoIdTestEntity; +import org.hibernate.orm.test.envers.entities.manytomany.WhereJoinTableEntity; +import org.hibernate.orm.test.envers.tools.TestTools; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; + +/** + * @author Adam Warski (adam at warski dot org) + */ +@EnversTest +@Jpa(annotatedClasses = {WhereJoinTableEntity.class, IntNoAutoIdTestEntity.class}) +public class BasicWhereJoinTable { + private Integer ite1_1_id; + private Integer ite1_2_id; + private Integer ite2_1_id; + private Integer ite2_2_id; + + private Integer wjte1_id; + private Integer wjte2_id; + + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + // Revision 1 + scope.inTransaction( em -> { + IntNoAutoIdTestEntity ite1_1 = new IntNoAutoIdTestEntity( 1, 10 ); + IntNoAutoIdTestEntity ite1_2 = new IntNoAutoIdTestEntity( 1, 11 ); + IntNoAutoIdTestEntity ite2_1 = new IntNoAutoIdTestEntity( 2, 20 ); + IntNoAutoIdTestEntity ite2_2 = new IntNoAutoIdTestEntity( 2, 21 ); + + WhereJoinTableEntity wjte1 = new WhereJoinTableEntity(); + wjte1.setData( "wjte1" ); + + WhereJoinTableEntity wjte2 = new WhereJoinTableEntity(); + wjte2.setData( "wjte2" ); + + em.persist( ite1_1 ); + em.persist( ite1_2 ); + em.persist( ite2_1 ); + em.persist( ite2_2 ); + em.persist( wjte1 ); + em.persist( wjte2 ); + + ite1_1_id = ite1_1.getId(); + ite1_2_id = ite1_2.getId(); + ite2_1_id = ite2_1.getId(); + ite2_2_id = ite2_2.getId(); + wjte1_id = wjte1.getId(); + wjte2_id = wjte2.getId(); + } ); + + // Revision 2 (wjte1: 1_1, 2_1) + scope.inTransaction( em -> { + WhereJoinTableEntity wjte1 = em.find( WhereJoinTableEntity.class, wjte1_id ); + IntNoAutoIdTestEntity ite1_1 = em.find( IntNoAutoIdTestEntity.class, ite1_1_id ); + IntNoAutoIdTestEntity ite2_1 = em.find( IntNoAutoIdTestEntity.class, ite2_1_id ); + + wjte1.getReferences1().add( ite1_1 ); + wjte1.getReferences2().add( ite2_1 ); + } ); + + // Revision 3 (wjte1: 1_1, 2_1; wjte2: 1_1, 1_2) + scope.inTransaction( em -> { + WhereJoinTableEntity wjte2 = em.find( WhereJoinTableEntity.class, wjte2_id ); + IntNoAutoIdTestEntity ite1_1 = em.find( IntNoAutoIdTestEntity.class, ite1_1_id ); + IntNoAutoIdTestEntity ite1_2 = em.find( IntNoAutoIdTestEntity.class, ite1_2_id ); + + wjte2.getReferences1().add( ite1_1 ); + wjte2.getReferences1().add( ite1_2 ); + } ); + + // Revision 4 (wjte1: 2_1; wjte2: 1_1, 1_2, 2_2) + scope.inTransaction( em -> { + WhereJoinTableEntity wjte1 = em.find( WhereJoinTableEntity.class, wjte1_id ); + WhereJoinTableEntity wjte2 = em.find( WhereJoinTableEntity.class, wjte2_id ); + IntNoAutoIdTestEntity ite1_1 = em.find( IntNoAutoIdTestEntity.class, ite1_1_id ); + IntNoAutoIdTestEntity ite2_2 = em.find( IntNoAutoIdTestEntity.class, ite2_2_id ); + + wjte1.getReferences1().remove( ite1_1 ); + wjte2.getReferences2().add( ite2_2 ); + } ); + } + + @Test + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1, 2, 4 ), auditReader.getRevisions( WhereJoinTableEntity.class, wjte1_id ) ); + assertEquals( Arrays.asList( 1, 3, 4 ), auditReader.getRevisions( WhereJoinTableEntity.class, wjte2_id ) ); + + assertEquals( Arrays.asList( 1 ), auditReader.getRevisions( IntNoAutoIdTestEntity.class, ite1_1_id ) ); + assertEquals( Arrays.asList( 1 ), auditReader.getRevisions( IntNoAutoIdTestEntity.class, ite1_2_id ) ); + assertEquals( Arrays.asList( 1 ), auditReader.getRevisions( IntNoAutoIdTestEntity.class, ite2_1_id ) ); + assertEquals( Arrays.asList( 1 ), auditReader.getRevisions( IntNoAutoIdTestEntity.class, ite2_2_id ) ); + } ); + } + + @Test + public void testHistoryOfWjte1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + IntNoAutoIdTestEntity ite1_1 = em.find( IntNoAutoIdTestEntity.class, ite1_1_id ); + IntNoAutoIdTestEntity ite2_1 = em.find( IntNoAutoIdTestEntity.class, ite2_1_id ); + + WhereJoinTableEntity rev1 = auditReader.find( WhereJoinTableEntity.class, wjte1_id, 1 ); + WhereJoinTableEntity rev2 = auditReader.find( WhereJoinTableEntity.class, wjte1_id, 2 ); + WhereJoinTableEntity rev3 = auditReader.find( WhereJoinTableEntity.class, wjte1_id, 3 ); + WhereJoinTableEntity rev4 = auditReader.find( WhereJoinTableEntity.class, wjte1_id, 4 ); + + // Checking 1st list + assertTrue( TestTools.checkCollection( rev1.getReferences1() ) ); + assertTrue( TestTools.checkCollection( rev2.getReferences1(), ite1_1 ) ); + assertTrue( TestTools.checkCollection( rev3.getReferences1(), ite1_1 ) ); + assertTrue( TestTools.checkCollection( rev4.getReferences1() ) ); + + // Checking 2nd list + assertTrue( TestTools.checkCollection( rev1.getReferences2() ) ); + assertTrue( TestTools.checkCollection( rev2.getReferences2(), ite2_1 ) ); + assertTrue( TestTools.checkCollection( rev3.getReferences2(), ite2_1 ) ); + assertTrue( TestTools.checkCollection( rev4.getReferences2(), ite2_1 ) ); + } ); + } + + @Test + public void testHistoryOfWjte2(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + IntNoAutoIdTestEntity ite1_1 = em.find( IntNoAutoIdTestEntity.class, ite1_1_id ); + IntNoAutoIdTestEntity ite1_2 = em.find( IntNoAutoIdTestEntity.class, ite1_2_id ); + IntNoAutoIdTestEntity ite2_2 = em.find( IntNoAutoIdTestEntity.class, ite2_2_id ); + + WhereJoinTableEntity rev1 = auditReader.find( WhereJoinTableEntity.class, wjte2_id, 1 ); + WhereJoinTableEntity rev2 = auditReader.find( WhereJoinTableEntity.class, wjte2_id, 2 ); + WhereJoinTableEntity rev3 = auditReader.find( WhereJoinTableEntity.class, wjte2_id, 3 ); + WhereJoinTableEntity rev4 = auditReader.find( WhereJoinTableEntity.class, wjte2_id, 4 ); + + // Checking 1st list + assertTrue( TestTools.checkCollection( rev1.getReferences1() ) ); + assertTrue( TestTools.checkCollection( rev2.getReferences1() ) ); + assertTrue( TestTools.checkCollection( rev3.getReferences1(), ite1_1, ite1_2 ) ); + assertTrue( TestTools.checkCollection( rev4.getReferences1(), ite1_1, ite1_2 ) ); + + // Checking 2nd list + assertTrue( TestTools.checkCollection( rev1.getReferences2() ) ); + assertTrue( TestTools.checkCollection( rev2.getReferences2() ) ); + assertTrue( TestTools.checkCollection( rev3.getReferences2() ) ); + assertTrue( TestTools.checkCollection( rev4.getReferences2(), ite2_2 ) ); + } ); + } +} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/BasicWhereTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/BasicWhereTest.java index b4e93a65ca36..5e6ab9ca9448 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/BasicWhereTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/BasicWhereTest.java @@ -9,15 +9,17 @@ import org.hibernate.annotations.SQLRestriction; import org.hibernate.community.dialect.AltibaseDialect; import org.hibernate.envers.AuditJoinTable; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.Audited; import org.hibernate.envers.RelationTargetAuditMode; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; +import org.hibernate.testing.orm.junit.Jpa; import org.hibernate.testing.orm.junit.SkipForDialect; -import org.hibernate.testing.transaction.TransactionUtil; -import org.junit.Test; +import org.junit.jupiter.api.Test; import jakarta.persistence.DiscriminatorColumn; import jakarta.persistence.DiscriminatorType; @@ -30,7 +32,7 @@ import jakarta.persistence.ManyToMany; import jakarta.persistence.Table; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * Provides test cases for the following {@link ManyToMany} mapping with {@linkplain SQLRestriction} @@ -39,33 +41,29 @@ */ @JiraKey("HHH-9432") @SkipForDialect( dialectClass = AltibaseDialect.class, reason = "'TYPE' is not escaped even though autoQuoteKeywords is enabled") -public class BasicWhereTest extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = { + BasicWhereTest.EntityA.class, + BasicWhereTest.EntityB.class, + BasicWhereTest.EntityC.class, + BasicWhereTest.EntityX.class, + BasicWhereTest.EntityY.class, + BasicWhereTest.EntityZ.class +}) +public class BasicWhereTest { private Integer aId; private Integer xId; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { - EntityA.class, - EntityB.class, - EntityC.class, - EntityX.class, - EntityY.class, - EntityZ.class - }; - } - - @Test - @Priority(10) - public void initData() { - aId = TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + aId = scope.fromTransaction( entityManager -> { final EntityA a = new EntityA(); a.setName( "a" ); entityManager.persist( a ); return a.getId(); } ); - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { + scope.inTransaction( entityManager -> { final EntityA a = entityManager.find( EntityA.class, aId ); final EntityC c = new EntityC(); c.setName( "c" ); @@ -74,14 +72,14 @@ public void initData() { entityManager.merge( a ); } ); - xId = TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { + xId = scope.fromTransaction( entityManager -> { final EntityX x = new EntityX(); x.setName( "x" ); entityManager.persist( x ); return x.getId(); } ); - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { + scope.inTransaction( entityManager -> { final EntityX x = entityManager.find( EntityX.class, xId ); final EntityZ z = new EntityZ(); z.setName( "z" ); @@ -92,15 +90,21 @@ public void initData() { } @Test - public void testWherePredicateWithAuditJoinTable() { - final EntityA a = getAuditReader().find( EntityA.class, aId, 2 ); - assertEquals( 1, a.getAllMyC().size() ); + public void testWherePredicateWithAuditJoinTable(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + final EntityA a = auditReader.find( EntityA.class, aId, 2 ); + assertEquals( 1, a.getAllMyC().size() ); + } ); } @Test - public void testWherePredicateWithoutAuditJoinTable() { - final EntityX x = getAuditReader().find( EntityX.class, xId, 4 ); - assertEquals( 1, x.getAllMyZ().size() ); + public void testWherePredicateWithoutAuditJoinTable(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + final EntityX x = auditReader.find( EntityX.class, xId, 4 ); + assertEquals( 1, x.getAllMyZ().size() ); + } ); } @Audited diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/CustomComparatorEntityTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/CustomComparatorEntityTest.java index 9aa1e52a5f31..65b0340d7cab 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/CustomComparatorEntityTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/CustomComparatorEntityTest.java @@ -9,136 +9,125 @@ import java.util.Map; import java.util.SortedMap; import java.util.SortedSet; -import jakarta.persistence.EntityManager; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.orm.test.envers.entities.StrTestEntity; import org.hibernate.orm.test.envers.entities.StrTestEntityComparator; import org.hibernate.orm.test.envers.entities.manytomany.SortedSetEntity; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; -import org.junit.Test; +import org.junit.jupiter.api.Test; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Michal Skowronek (mskowr at o2 pl) */ -public class CustomComparatorEntityTest extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {StrTestEntity.class, SortedSetEntity.class}) +public class CustomComparatorEntityTest { private Integer id1; private Integer id2; private Integer id3; private Integer id4; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {StrTestEntity.class, SortedSetEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - SortedSetEntity entity1 = new SortedSetEntity( 1, "sortedEntity1" ); - + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Revision 1 - em.getTransaction().begin(); - - em.persist( entity1 ); - - em.getTransaction().commit(); + scope.inTransaction( em -> { + SortedSetEntity entity1 = new SortedSetEntity( 1, "sortedEntity1" ); + em.persist( entity1 ); + } ); // Revision 2 - - em.getTransaction().begin(); - - entity1 = em.find( SortedSetEntity.class, 1 ); - final StrTestEntity strTestEntity1 = new StrTestEntity( "abc" ); - em.persist( strTestEntity1 ); - id1 = strTestEntity1.getId(); - entity1.getSortedSet().add( strTestEntity1 ); - entity1.getSortedMap().put( strTestEntity1, "abc" ); - - em.getTransaction().commit(); + scope.inTransaction( em -> { + SortedSetEntity entity1 = em.find( SortedSetEntity.class, 1 ); + final StrTestEntity strTestEntity1 = new StrTestEntity( "abc" ); + em.persist( strTestEntity1 ); + id1 = strTestEntity1.getId(); + entity1.getSortedSet().add( strTestEntity1 ); + entity1.getSortedMap().put( strTestEntity1, "abc" ); + } ); // Revision 3 - em.getTransaction().begin(); - - entity1 = em.find( SortedSetEntity.class, 1 ); - final StrTestEntity strTestEntity2 = new StrTestEntity( "aaa" ); - em.persist( strTestEntity2 ); - id2 = strTestEntity2.getId(); - entity1.getSortedSet().add( strTestEntity2 ); - entity1.getSortedMap().put( strTestEntity2, "aaa" ); - - em.getTransaction().commit(); + scope.inTransaction( em -> { + SortedSetEntity entity1 = em.find( SortedSetEntity.class, 1 ); + final StrTestEntity strTestEntity2 = new StrTestEntity( "aaa" ); + em.persist( strTestEntity2 ); + id2 = strTestEntity2.getId(); + entity1.getSortedSet().add( strTestEntity2 ); + entity1.getSortedMap().put( strTestEntity2, "aaa" ); + } ); // Revision 4 - em.getTransaction().begin(); - - entity1 = em.find( SortedSetEntity.class, 1 ); - final StrTestEntity strTestEntity3 = new StrTestEntity( "aba" ); - em.persist( strTestEntity3 ); - id3 = strTestEntity3.getId(); - entity1.getSortedSet().add( strTestEntity3 ); - entity1.getSortedMap().put( strTestEntity3, "aba" ); - - em.getTransaction().commit(); + scope.inTransaction( em -> { + SortedSetEntity entity1 = em.find( SortedSetEntity.class, 1 ); + final StrTestEntity strTestEntity3 = new StrTestEntity( "aba" ); + em.persist( strTestEntity3 ); + id3 = strTestEntity3.getId(); + entity1.getSortedSet().add( strTestEntity3 ); + entity1.getSortedMap().put( strTestEntity3, "aba" ); + } ); // Revision 5 - em.getTransaction().begin(); - - entity1 = em.find( SortedSetEntity.class, 1 ); - final StrTestEntity strTestEntity4 = new StrTestEntity( "aac" ); - em.persist( strTestEntity4 ); - id4 = strTestEntity4.getId(); - entity1.getSortedSet().add( strTestEntity4 ); - entity1.getSortedMap().put( strTestEntity4, "aac" ); - - em.getTransaction().commit(); + scope.inTransaction( em -> { + SortedSetEntity entity1 = em.find( SortedSetEntity.class, 1 ); + final StrTestEntity strTestEntity4 = new StrTestEntity( "aac" ); + em.persist( strTestEntity4 ); + id4 = strTestEntity4.getId(); + entity1.getSortedSet().add( strTestEntity4 ); + entity1.getSortedMap().put( strTestEntity4, "aac" ); + } ); } @Test - public void testRevisionsCounts() { - assertEquals( Arrays.asList( 1, 2, 3, 4, 5 ), getAuditReader().getRevisions( SortedSetEntity.class, 1 ) ); - assertEquals( Arrays.asList( 2 ), getAuditReader().getRevisions( StrTestEntity.class, id1 ) ); - assertEquals( Arrays.asList( 3 ), getAuditReader().getRevisions( StrTestEntity.class, id2 ) ); - assertEquals( Arrays.asList( 4 ), getAuditReader().getRevisions( StrTestEntity.class, id3 ) ); - assertEquals( Arrays.asList( 5 ), getAuditReader().getRevisions( StrTestEntity.class, id4 ) ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1, 2, 3, 4, 5 ), auditReader.getRevisions( SortedSetEntity.class, 1 ) ); + assertEquals( Arrays.asList( 2 ), auditReader.getRevisions( StrTestEntity.class, id1 ) ); + assertEquals( Arrays.asList( 3 ), auditReader.getRevisions( StrTestEntity.class, id2 ) ); + assertEquals( Arrays.asList( 4 ), auditReader.getRevisions( StrTestEntity.class, id3 ) ); + assertEquals( Arrays.asList( 5 ), auditReader.getRevisions( StrTestEntity.class, id4 ) ); + } ); } @Test - public void testCurrentStateOfEntity1() { - final SortedSetEntity entity1 = getEntityManager().find( SortedSetEntity.class, 1 ); - - assertEquals( "sortedEntity1", entity1.getData() ); - assertEquals( Integer.valueOf( 1 ), entity1.getId() ); - - final SortedSet sortedSet = entity1.getSortedSet(); - assertEquals( StrTestEntityComparator.class, sortedSet.comparator().getClass() ); - assertEquals( 4, sortedSet.size() ); - final Iterator iterator = sortedSet.iterator(); - checkStrTestEntity( iterator.next(), id2, "aaa" ); - checkStrTestEntity( iterator.next(), id4, "aac" ); - checkStrTestEntity( iterator.next(), id3, "aba" ); - checkStrTestEntity( iterator.next(), id1, "abc" ); - - final SortedMap sortedMap = entity1.getSortedMap(); - assertEquals( StrTestEntityComparator.class, sortedMap.comparator().getClass() ); - assertEquals( 4, sortedMap.size() ); - Iterator> mapIterator = sortedMap.entrySet().iterator(); - checkStrTestEntity( mapIterator.next().getKey(), id2, "aaa" ); - checkStrTestEntity( mapIterator.next().getKey(), id4, "aac" ); - checkStrTestEntity( mapIterator.next().getKey(), id3, "aba" ); - checkStrTestEntity( mapIterator.next().getKey(), id1, "abc" ); - - mapIterator = sortedMap.entrySet().iterator(); - assertEquals( mapIterator.next().getValue(), "aaa" ); - assertEquals( mapIterator.next().getValue(), "aac" ); - assertEquals( mapIterator.next().getValue(), "aba" ); - assertEquals( mapIterator.next().getValue(), "abc" ); + public void testCurrentStateOfEntity1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final SortedSetEntity entity1 = em.find( SortedSetEntity.class, 1 ); + + assertEquals( "sortedEntity1", entity1.getData() ); + assertEquals( Integer.valueOf( 1 ), entity1.getId() ); + + final SortedSet sortedSet = entity1.getSortedSet(); + assertEquals( StrTestEntityComparator.class, sortedSet.comparator().getClass() ); + assertEquals( 4, sortedSet.size() ); + final Iterator iterator = sortedSet.iterator(); + checkStrTestEntity( iterator.next(), id2, "aaa" ); + checkStrTestEntity( iterator.next(), id4, "aac" ); + checkStrTestEntity( iterator.next(), id3, "aba" ); + checkStrTestEntity( iterator.next(), id1, "abc" ); + + final SortedMap sortedMap = entity1.getSortedMap(); + assertEquals( StrTestEntityComparator.class, sortedMap.comparator().getClass() ); + assertEquals( 4, sortedMap.size() ); + Iterator> mapIterator = sortedMap.entrySet().iterator(); + checkStrTestEntity( mapIterator.next().getKey(), id2, "aaa" ); + checkStrTestEntity( mapIterator.next().getKey(), id4, "aac" ); + checkStrTestEntity( mapIterator.next().getKey(), id3, "aba" ); + checkStrTestEntity( mapIterator.next().getKey(), id1, "abc" ); + + mapIterator = sortedMap.entrySet().iterator(); + assertEquals( mapIterator.next().getValue(), "aaa" ); + assertEquals( mapIterator.next().getValue(), "aac" ); + assertEquals( mapIterator.next().getValue(), "aba" ); + assertEquals( mapIterator.next().getValue(), "abc" ); + } ); } private void checkStrTestEntity(StrTestEntity entity, Integer id, String sortKey) { @@ -147,117 +136,121 @@ private void checkStrTestEntity(StrTestEntity entity, Integer id, String sortKey } @Test - public void testHistoryOfEntity1() throws Exception { - SortedSetEntity entity1 = getAuditReader().find( SortedSetEntity.class, 1, 1 ); - - assertEquals( "sortedEntity1", entity1.getData() ); - assertEquals( Integer.valueOf( 1 ), entity1.getId() ); - - SortedSet sortedSet = entity1.getSortedSet(); - assertEquals( StrTestEntityComparator.class, sortedSet.comparator().getClass() ); - assertEquals( 0, sortedSet.size() ); - - SortedMap sortedMap = entity1.getSortedMap(); - assertEquals( StrTestEntityComparator.class, sortedMap.comparator().getClass() ); - assertEquals( 0, sortedMap.size() ); - - entity1 = getAuditReader().find( SortedSetEntity.class, 1, 2 ); - - assertEquals( "sortedEntity1", entity1.getData() ); - assertEquals( Integer.valueOf( 1 ), entity1.getId() ); - - sortedSet = entity1.getSortedSet(); - assertEquals( StrTestEntityComparator.class, sortedSet.comparator().getClass() ); - assertEquals( 1, sortedSet.size() ); - Iterator iterator = sortedSet.iterator(); - checkStrTestEntity( iterator.next(), id1, "abc" ); - - sortedMap = entity1.getSortedMap(); - assertEquals( StrTestEntityComparator.class, sortedMap.comparator().getClass() ); - assertEquals( 1, sortedMap.size() ); - Iterator> mapIterator = sortedMap.entrySet().iterator(); - checkStrTestEntity( mapIterator.next().getKey(), id1, "abc" ); - - mapIterator = sortedMap.entrySet().iterator(); - assertEquals( mapIterator.next().getValue(), "abc" ); - - entity1 = getAuditReader().find( SortedSetEntity.class, 1, 3 ); - - assertEquals( "sortedEntity1", entity1.getData() ); - assertEquals( Integer.valueOf( 1 ), entity1.getId() ); - - sortedSet = entity1.getSortedSet(); - assertEquals( StrTestEntityComparator.class, sortedSet.comparator().getClass() ); - assertEquals( 2, sortedSet.size() ); - iterator = sortedSet.iterator(); - checkStrTestEntity( iterator.next(), id2, "aaa" ); - checkStrTestEntity( iterator.next(), id1, "abc" ); - - sortedMap = entity1.getSortedMap(); - assertEquals( StrTestEntityComparator.class, sortedMap.comparator().getClass() ); - assertEquals( 2, sortedMap.size() ); - mapIterator = sortedMap.entrySet().iterator(); - checkStrTestEntity( mapIterator.next().getKey(), id2, "aaa" ); - checkStrTestEntity( mapIterator.next().getKey(), id1, "abc" ); - - mapIterator = sortedMap.entrySet().iterator(); - assertEquals( mapIterator.next().getValue(), "aaa" ); - assertEquals( mapIterator.next().getValue(), "abc" ); - - entity1 = getAuditReader().find( SortedSetEntity.class, 1, 4 ); - - assertEquals( "sortedEntity1", entity1.getData() ); - assertEquals( Integer.valueOf( 1 ), entity1.getId() ); - - sortedSet = entity1.getSortedSet(); - assertEquals( StrTestEntityComparator.class, sortedSet.comparator().getClass() ); - assertEquals( 3, sortedSet.size() ); - iterator = sortedSet.iterator(); - checkStrTestEntity( iterator.next(), id2, "aaa" ); - checkStrTestEntity( iterator.next(), id3, "aba" ); - checkStrTestEntity( iterator.next(), id1, "abc" ); - - sortedMap = entity1.getSortedMap(); - assertEquals( StrTestEntityComparator.class, sortedMap.comparator().getClass() ); - assertEquals( 3, sortedMap.size() ); - mapIterator = sortedMap.entrySet().iterator(); - checkStrTestEntity( mapIterator.next().getKey(), id2, "aaa" ); - checkStrTestEntity( mapIterator.next().getKey(), id3, "aba" ); - checkStrTestEntity( mapIterator.next().getKey(), id1, "abc" ); - - mapIterator = sortedMap.entrySet().iterator(); - assertEquals( mapIterator.next().getValue(), "aaa" ); - assertEquals( mapIterator.next().getValue(), "aba" ); - assertEquals( mapIterator.next().getValue(), "abc" ); - - entity1 = getAuditReader().find( SortedSetEntity.class, 1, 5 ); - - assertEquals( "sortedEntity1", entity1.getData() ); - assertEquals( Integer.valueOf( 1 ), entity1.getId() ); - - sortedSet = entity1.getSortedSet(); - assertEquals( StrTestEntityComparator.class, sortedSet.comparator().getClass() ); - assertEquals( 4, sortedSet.size() ); - iterator = sortedSet.iterator(); - checkStrTestEntity( iterator.next(), id2, "aaa" ); - checkStrTestEntity( iterator.next(), id4, "aac" ); - checkStrTestEntity( iterator.next(), id3, "aba" ); - checkStrTestEntity( iterator.next(), id1, "abc" ); - - sortedMap = entity1.getSortedMap(); - assertEquals( StrTestEntityComparator.class, sortedMap.comparator().getClass() ); - assertEquals( 4, sortedMap.size() ); - mapIterator = sortedMap.entrySet().iterator(); - checkStrTestEntity( mapIterator.next().getKey(), id2, "aaa" ); - checkStrTestEntity( mapIterator.next().getKey(), id4, "aac" ); - checkStrTestEntity( mapIterator.next().getKey(), id3, "aba" ); - checkStrTestEntity( mapIterator.next().getKey(), id1, "abc" ); - - mapIterator = sortedMap.entrySet().iterator(); - assertEquals( mapIterator.next().getValue(), "aaa" ); - assertEquals( mapIterator.next().getValue(), "aac" ); - assertEquals( mapIterator.next().getValue(), "aba" ); - assertEquals( mapIterator.next().getValue(), "abc" ); + public void testHistoryOfEntity1(EntityManagerFactoryScope scope) throws Exception { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + + SortedSetEntity entity1 = auditReader.find( SortedSetEntity.class, 1, 1 ); + + assertEquals( "sortedEntity1", entity1.getData() ); + assertEquals( Integer.valueOf( 1 ), entity1.getId() ); + + SortedSet sortedSet = entity1.getSortedSet(); + assertEquals( StrTestEntityComparator.class, sortedSet.comparator().getClass() ); + assertEquals( 0, sortedSet.size() ); + + SortedMap sortedMap = entity1.getSortedMap(); + assertEquals( StrTestEntityComparator.class, sortedMap.comparator().getClass() ); + assertEquals( 0, sortedMap.size() ); + + entity1 = auditReader.find( SortedSetEntity.class, 1, 2 ); + + assertEquals( "sortedEntity1", entity1.getData() ); + assertEquals( Integer.valueOf( 1 ), entity1.getId() ); + + sortedSet = entity1.getSortedSet(); + assertEquals( StrTestEntityComparator.class, sortedSet.comparator().getClass() ); + assertEquals( 1, sortedSet.size() ); + Iterator iterator = sortedSet.iterator(); + checkStrTestEntity( iterator.next(), id1, "abc" ); + + sortedMap = entity1.getSortedMap(); + assertEquals( StrTestEntityComparator.class, sortedMap.comparator().getClass() ); + assertEquals( 1, sortedMap.size() ); + Iterator> mapIterator = sortedMap.entrySet().iterator(); + checkStrTestEntity( mapIterator.next().getKey(), id1, "abc" ); + + mapIterator = sortedMap.entrySet().iterator(); + assertEquals( mapIterator.next().getValue(), "abc" ); + + entity1 = auditReader.find( SortedSetEntity.class, 1, 3 ); + + assertEquals( "sortedEntity1", entity1.getData() ); + assertEquals( Integer.valueOf( 1 ), entity1.getId() ); + + sortedSet = entity1.getSortedSet(); + assertEquals( StrTestEntityComparator.class, sortedSet.comparator().getClass() ); + assertEquals( 2, sortedSet.size() ); + iterator = sortedSet.iterator(); + checkStrTestEntity( iterator.next(), id2, "aaa" ); + checkStrTestEntity( iterator.next(), id1, "abc" ); + + sortedMap = entity1.getSortedMap(); + assertEquals( StrTestEntityComparator.class, sortedMap.comparator().getClass() ); + assertEquals( 2, sortedMap.size() ); + mapIterator = sortedMap.entrySet().iterator(); + checkStrTestEntity( mapIterator.next().getKey(), id2, "aaa" ); + checkStrTestEntity( mapIterator.next().getKey(), id1, "abc" ); + + mapIterator = sortedMap.entrySet().iterator(); + assertEquals( mapIterator.next().getValue(), "aaa" ); + assertEquals( mapIterator.next().getValue(), "abc" ); + + entity1 = auditReader.find( SortedSetEntity.class, 1, 4 ); + + assertEquals( "sortedEntity1", entity1.getData() ); + assertEquals( Integer.valueOf( 1 ), entity1.getId() ); + + sortedSet = entity1.getSortedSet(); + assertEquals( StrTestEntityComparator.class, sortedSet.comparator().getClass() ); + assertEquals( 3, sortedSet.size() ); + iterator = sortedSet.iterator(); + checkStrTestEntity( iterator.next(), id2, "aaa" ); + checkStrTestEntity( iterator.next(), id3, "aba" ); + checkStrTestEntity( iterator.next(), id1, "abc" ); + + sortedMap = entity1.getSortedMap(); + assertEquals( StrTestEntityComparator.class, sortedMap.comparator().getClass() ); + assertEquals( 3, sortedMap.size() ); + mapIterator = sortedMap.entrySet().iterator(); + checkStrTestEntity( mapIterator.next().getKey(), id2, "aaa" ); + checkStrTestEntity( mapIterator.next().getKey(), id3, "aba" ); + checkStrTestEntity( mapIterator.next().getKey(), id1, "abc" ); + + mapIterator = sortedMap.entrySet().iterator(); + assertEquals( mapIterator.next().getValue(), "aaa" ); + assertEquals( mapIterator.next().getValue(), "aba" ); + assertEquals( mapIterator.next().getValue(), "abc" ); + + entity1 = auditReader.find( SortedSetEntity.class, 1, 5 ); + + assertEquals( "sortedEntity1", entity1.getData() ); + assertEquals( Integer.valueOf( 1 ), entity1.getId() ); + + sortedSet = entity1.getSortedSet(); + assertEquals( StrTestEntityComparator.class, sortedSet.comparator().getClass() ); + assertEquals( 4, sortedSet.size() ); + iterator = sortedSet.iterator(); + checkStrTestEntity( iterator.next(), id2, "aaa" ); + checkStrTestEntity( iterator.next(), id4, "aac" ); + checkStrTestEntity( iterator.next(), id3, "aba" ); + checkStrTestEntity( iterator.next(), id1, "abc" ); + + sortedMap = entity1.getSortedMap(); + assertEquals( StrTestEntityComparator.class, sortedMap.comparator().getClass() ); + assertEquals( 4, sortedMap.size() ); + mapIterator = sortedMap.entrySet().iterator(); + checkStrTestEntity( mapIterator.next().getKey(), id2, "aaa" ); + checkStrTestEntity( mapIterator.next().getKey(), id4, "aac" ); + checkStrTestEntity( mapIterator.next().getKey(), id3, "aba" ); + checkStrTestEntity( mapIterator.next().getKey(), id1, "abc" ); + + mapIterator = sortedMap.entrySet().iterator(); + assertEquals( mapIterator.next().getValue(), "aaa" ); + assertEquals( mapIterator.next().getValue(), "aac" ); + assertEquals( mapIterator.next().getValue(), "aba" ); + assertEquals( mapIterator.next().getValue(), "abc" ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/IndexColumnListTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/IndexColumnListTest.java index 6c54621d6494..ddbf4a55c142 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/IndexColumnListTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/IndexColumnListTest.java @@ -12,31 +12,29 @@ import jakarta.persistence.ManyToMany; import jakarta.persistence.OrderColumn; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; - +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; -import org.hibernate.testing.transaction.TransactionUtil; -import org.junit.Test; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Chris Cranford */ @JiraKey(value = "HHH-7940") -public class IndexColumnListTest extends BaseEnversJPAFunctionalTestCase { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { Parent.class, Child.class }; - } +@EnversTest +@Jpa(annotatedClasses = {IndexColumnListTest.Parent.class, IndexColumnListTest.Child.class}) +public class IndexColumnListTest { - @Test - @Priority(10) - public void initData() { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Revision 1 - Create indexed entries. - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { + scope.inTransaction( entityManager -> { Parent p = new Parent( 1 ); p.addChild( new Child( 1, "child1" ) ); p.addChild( new Child( 2, "child2" ) ); @@ -45,7 +43,7 @@ public void initData() { } ); // Revision 2 - remove an indexed entry, resetting positions. - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { + scope.inTransaction( entityManager -> { final Parent p = entityManager.find( Parent.class, 1 ); // should remove child with id 1 p.removeChild( p.getChildren().get( 0 ) ); @@ -53,7 +51,7 @@ public void initData() { } ); // Revision 3 - add new indexed entity to reset positions - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { + scope.inTransaction( entityManager -> { final Parent p = entityManager.find( Parent.class, 1 ); // add child with id 3 final Child child = new Child( 3, "child3" ); @@ -64,7 +62,7 @@ public void initData() { } ); // Revision 4 - remove all children - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { + scope.inTransaction( entityManager -> { final Parent p = entityManager.find( Parent.class, 1 ); while ( !p.getChildren().isEmpty() ) { Child child = p.getChildren().get( 0 ); @@ -76,40 +74,55 @@ public void initData() { } @Test - public void testRevisionCounts() { - assertEquals( Arrays.asList( 1, 2, 3, 4 ), getAuditReader().getRevisions( Parent.class, 1 ) ); - assertEquals( Arrays.asList( 1, 2 ), getAuditReader().getRevisions( Child.class, 1 ) ); - assertEquals( Arrays.asList( 1, 2, 3, 4 ), getAuditReader().getRevisions( Child.class, 2 ) ); - assertEquals( Arrays.asList( 3, 4 ), getAuditReader().getRevisions( Child.class, 3 ) ); + public void testRevisionCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1, 2, 3, 4 ), auditReader.getRevisions( Parent.class, 1 ) ); + assertEquals( Arrays.asList( 1, 2 ), auditReader.getRevisions( Child.class, 1 ) ); + assertEquals( Arrays.asList( 1, 2, 3, 4 ), auditReader.getRevisions( Child.class, 2 ) ); + assertEquals( Arrays.asList( 3, 4 ), auditReader.getRevisions( Child.class, 3 ) ); + } ); } @Test - public void testIndexedCollectionRev1() { - final Parent p = getAuditReader().find( Parent.class, 1, 1 ); - assertEquals( 2, p.getChildren().size() ); - assertEquals( new Child( 1, "child1", p ), p.getChildren().get( 0 ) ); - assertEquals( new Child( 2, "child2", p ), p.getChildren().get( 1 ) ); + public void testIndexedCollectionRev1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + final Parent p = auditReader.find( Parent.class, 1, 1 ); + assertEquals( 2, p.getChildren().size() ); + assertEquals( new Child( 1, "child1", p ), p.getChildren().get( 0 ) ); + assertEquals( new Child( 2, "child2", p ), p.getChildren().get( 1 ) ); + } ); } @Test - public void testIndexedCollectionRev2() { - final Parent p = getAuditReader().find( Parent.class, 1, 2 ); - assertEquals( 1, p.getChildren().size() ); - assertEquals( new Child( 2, "child2", p ), p.getChildren().get( 0 ) ); + public void testIndexedCollectionRev2(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + final Parent p = auditReader.find( Parent.class, 1, 2 ); + assertEquals( 1, p.getChildren().size() ); + assertEquals( new Child( 2, "child2", p ), p.getChildren().get( 0 ) ); + } ); } @Test - public void testIndexedCollectionRev3() { - final Parent p = getAuditReader().find( Parent.class, 1, 3 ); - assertEquals( 2, p.getChildren().size() ); - assertEquals( new Child( 3, "child3", p ), p.getChildren().get( 0 ) ); - assertEquals( new Child( 2, "child2", p ), p.getChildren().get( 1 ) ); + public void testIndexedCollectionRev3(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + final Parent p = auditReader.find( Parent.class, 1, 3 ); + assertEquals( 2, p.getChildren().size() ); + assertEquals( new Child( 3, "child3", p ), p.getChildren().get( 0 ) ); + assertEquals( new Child( 2, "child2", p ), p.getChildren().get( 1 ) ); + } ); } @Test - public void testIndexedCollectionRev4() { - final Parent p = getAuditReader().find( Parent.class, 1, 4 ); - assertEquals( 0, p.getChildren().size() ); + public void testIndexedCollectionRev4(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + final Parent p = auditReader.find( Parent.class, 1, 4 ); + assertEquals( 0, p.getChildren().size() ); + } ); } @Audited @@ -233,7 +246,7 @@ public List getParents() { return parents; } - public void setParent(List parent) { + public void setParent(List parents) { this.parents = parents; } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/MappedByEmbeddableAttributeTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/MappedByEmbeddableAttributeTest.java index 0e0b952c5477..a92858b868ec 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/MappedByEmbeddableAttributeTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/MappedByEmbeddableAttributeTest.java @@ -18,23 +18,26 @@ import org.hamcrest.BaseMatcher; import org.hamcrest.Description; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.junit.Test; - +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; import static org.hamcrest.CoreMatchers.hasItem; -import static org.hibernate.testing.transaction.TransactionUtil.doInJPA; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertThat; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Chris Cranford */ @JiraKey(value = "HHH-12240") -public class MappedByEmbeddableAttributeTest extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {MappedByEmbeddableAttributeTest.EntityA.class, MappedByEmbeddableAttributeTest.EntityB.class}) +public class MappedByEmbeddableAttributeTest { @Audited @Entity(name = "EntityA") @@ -163,29 +166,23 @@ public void describeTo(Description description) { } } - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { EntityA.class, EntityB.class }; - } - private Integer aId; private Integer bId1; private Integer bId2; - @Test - @Priority(10) - public void initData() { - doInJPA( this::entityManagerFactory, entityManager -> { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + aId = scope.fromTransaction( entityManager -> { final EntityA a = new EntityA( "A" ); final EntityB b = new EntityB( "B", a ); entityManager.persist( a ); entityManager.persist( b ); - this.aId = a.getId(); this.bId1 = b.getId(); + return a.getId(); } ); - doInJPA( this::entityManagerFactory, entityManager -> { + scope.inTransaction( entityManager -> { final EntityA a = entityManager.find( EntityA.class, this.aId ); for ( EntityB b : a.getContainer().getbList() ) { b.setName( b.getName() + "-Updated" ); @@ -193,7 +190,7 @@ public void initData() { } } ); - doInJPA( this::entityManagerFactory, entityManager -> { + scope.inTransaction( entityManager -> { final EntityA a = entityManager.find( EntityA.class, this.aId ); final EntityB b = new EntityB( "B2", a ); entityManager.persist( b ); @@ -204,42 +201,47 @@ public void initData() { } @Test - public void testRevisionHistoryEntityA() { - List aRevisions = getAuditReader().getRevisions( EntityA.class, this.aId ); - assertEquals( Arrays.asList( 1, 3 ), aRevisions ); - - EntityA rev1 = getAuditReader().find( EntityA.class, this.aId, 1 ); - assertEquals( 1, rev1.getContainer().getbList().size() ); - assertEquals( "B", rev1.getContainer().getbList().get( 0 ).getName() ); - - EntityA rev3 = getAuditReader().find( EntityA.class, this.aId, 3 ); - assertEquals( 2, rev3.getContainer().getbList().size() ); - assertThat( rev3.getContainer().getbList(), hasItem( new EntityBNameMatcher( "B-Updated" ) ) ); - assertThat( rev3.getContainer().getbList(), hasItem( new EntityBNameMatcher( "B2" ) ) ); - + public void testRevisionHistoryEntityA(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + List aRevisions = auditReader.getRevisions( EntityA.class, this.aId ); + assertEquals( Arrays.asList( 1, 3 ), aRevisions ); + + EntityA rev1 = auditReader.find( EntityA.class, this.aId, 1 ); + assertEquals( 1, rev1.getContainer().getbList().size() ); + assertEquals( "B", rev1.getContainer().getbList().get( 0 ).getName() ); + + EntityA rev3 = auditReader.find( EntityA.class, this.aId, 3 ); + assertEquals( 2, rev3.getContainer().getbList().size() ); + assertThat( rev3.getContainer().getbList(), hasItem( new EntityBNameMatcher( "B-Updated" ) ) ); + assertThat( rev3.getContainer().getbList(), hasItem( new EntityBNameMatcher( "B2" ) ) ); + } ); } @Test - public void testRevisionHistoryEntityB() { - List b1Revisions = getAuditReader().getRevisions( EntityB.class, this.bId1 ); - assertEquals( Arrays.asList( 1, 2 ), b1Revisions ); - - EntityB b1Rev1 = getAuditReader().find( EntityB.class, this.bId1, 1 ); - assertEquals( "B", b1Rev1.getName() ); - assertEquals( 1, b1Rev1.getaList().size() ); - assertEquals( this.aId, b1Rev1.getaList().get( 0 ).getId() ); - - EntityB b1Rev2 = getAuditReader().find( EntityB.class, this.bId1, 2 ); - assertEquals( "B-Updated", b1Rev2.getName() ); - assertEquals( 1, b1Rev1.getaList().size() ); - assertEquals( this.aId, b1Rev1.getaList().get( 0 ).getId() ); - - List b2Revisions = getAuditReader().getRevisions( EntityB.class, this.bId2 ); - assertEquals( Arrays.asList( 3 ), b2Revisions ); - - EntityB b2Rev3 = getAuditReader().find( EntityB.class, this.bId2, 3 ); - assertEquals( "B2", b2Rev3.getName() ); - assertEquals( 1, b2Rev3.getaList().size() ); - assertEquals( this.aId, b2Rev3.getaList().get( 0 ).getId() ); + public void testRevisionHistoryEntityB(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + List b1Revisions = auditReader.getRevisions( EntityB.class, this.bId1 ); + assertEquals( Arrays.asList( 1, 2 ), b1Revisions ); + + EntityB b1Rev1 = auditReader.find( EntityB.class, this.bId1, 1 ); + assertEquals( "B", b1Rev1.getName() ); + assertEquals( 1, b1Rev1.getaList().size() ); + assertEquals( this.aId, b1Rev1.getaList().get( 0 ).getId() ); + + EntityB b1Rev2 = auditReader.find( EntityB.class, this.bId1, 2 ); + assertEquals( "B-Updated", b1Rev2.getName() ); + assertEquals( 1, b1Rev1.getaList().size() ); + assertEquals( this.aId, b1Rev1.getaList().get( 0 ).getId() ); + + List b2Revisions = auditReader.getRevisions( EntityB.class, this.bId2 ); + assertEquals( Arrays.asList( 3 ), b2Revisions ); + + EntityB b2Rev3 = auditReader.find( EntityB.class, this.bId2, 3 ); + assertEquals( "B2", b2Rev3.getName() ); + assertEquals( 1, b2Rev3.getaList().size() ); + assertEquals( this.aId, b2Rev3.getaList().get( 0 ).getId() ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/OrderColumnListTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/OrderColumnListTest.java index 87d1a35c00d2..fce1e08137c0 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/OrderColumnListTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/OrderColumnListTest.java @@ -13,30 +13,29 @@ import jakarta.persistence.ManyToMany; import jakarta.persistence.OrderColumn; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; -import org.hibernate.testing.transaction.TransactionUtil; -import org.junit.Test; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Chris Cranford */ @JiraKey(value = "HHH-7940") -public class OrderColumnListTest extends BaseEnversJPAFunctionalTestCase { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { Parent.class, Child.class }; - } +@EnversTest +@Jpa(annotatedClasses = {OrderColumnListTest.Parent.class, OrderColumnListTest.Child.class}) +public class OrderColumnListTest { - @Test - @Priority(10) - public void initData() { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Revision 1 - Create indexed entries. - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { + scope.inTransaction( entityManager -> { Parent p = new Parent( 1 ); p.addChild( new Child( 1, "child1" ) ); p.addChild( new Child( 2, "child2" ) ); @@ -45,7 +44,7 @@ public void initData() { } ); // Revision 2 - remove an indexed entry, resetting positions. - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { + scope.inTransaction( entityManager -> { final Parent p = entityManager.find( Parent.class, 1 ); // should remove child with id 1 p.removeChild( p.getChildren().get( 0 ) ); @@ -53,7 +52,7 @@ public void initData() { } ); // Revision 3 - add new indexed entity to reset positions - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { + scope.inTransaction( entityManager -> { final Parent p = entityManager.find( Parent.class, 1 ); // add child with id 3 final Child child = new Child( 3, "child3" ); @@ -64,7 +63,7 @@ public void initData() { } ); // Revision 4 - remove all children - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { + scope.inTransaction( entityManager -> { final Parent p = entityManager.find( Parent.class, 1 ); while ( !p.getChildren().isEmpty() ) { Child child = p.getChildren().get( 0 ); @@ -76,40 +75,55 @@ public void initData() { } @Test - public void testRevisionCounts() { - assertEquals( Arrays.asList( 1, 2, 3, 4 ), getAuditReader().getRevisions( Parent.class, 1 ) ); - assertEquals( Arrays.asList( 1, 2 ), getAuditReader().getRevisions( Child.class, 1 ) ); - assertEquals( Arrays.asList( 1, 2, 3, 4 ), getAuditReader().getRevisions( Child.class, 2 ) ); - assertEquals( Arrays.asList( 3, 4 ), getAuditReader().getRevisions( Child.class, 3 ) ); + public void testRevisionCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1, 2, 3, 4 ), auditReader.getRevisions( Parent.class, 1 ) ); + assertEquals( Arrays.asList( 1, 2 ), auditReader.getRevisions( Child.class, 1 ) ); + assertEquals( Arrays.asList( 1, 2, 3, 4 ), auditReader.getRevisions( Child.class, 2 ) ); + assertEquals( Arrays.asList( 3, 4 ), auditReader.getRevisions( Child.class, 3 ) ); + } ); } @Test - public void testIndexedCollectionRev1() { - final Parent p = getAuditReader().find( Parent.class, 1, 1 ); - assertEquals( 2, p.getChildren().size() ); - assertEquals( new Child( 1, "child1", p ), p.getChildren().get( 0 ) ); - assertEquals( new Child( 2, "child2", p ), p.getChildren().get( 1 ) ); + public void testIndexedCollectionRev1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + final Parent p = auditReader.find( Parent.class, 1, 1 ); + assertEquals( 2, p.getChildren().size() ); + assertEquals( new Child( 1, "child1", p ), p.getChildren().get( 0 ) ); + assertEquals( new Child( 2, "child2", p ), p.getChildren().get( 1 ) ); + } ); } @Test - public void testIndexedCollectionRev2() { - final Parent p = getAuditReader().find( Parent.class, 1, 2 ); - assertEquals( 1, p.getChildren().size() ); - assertEquals( new Child( 2, "child2", p ), p.getChildren().get( 0 ) ); + public void testIndexedCollectionRev2(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + final Parent p = auditReader.find( Parent.class, 1, 2 ); + assertEquals( 1, p.getChildren().size() ); + assertEquals( new Child( 2, "child2", p ), p.getChildren().get( 0 ) ); + } ); } @Test - public void testIndexedCollectionRev3() { - final Parent p = getAuditReader().find( Parent.class, 1, 3 ); - assertEquals( 2, p.getChildren().size() ); - assertEquals( new Child( 3, "child3", p ), p.getChildren().get( 0 ) ); - assertEquals( new Child( 2, "child2", p ), p.getChildren().get( 1 ) ); + public void testIndexedCollectionRev3(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + final Parent p = auditReader.find( Parent.class, 1, 3 ); + assertEquals( 2, p.getChildren().size() ); + assertEquals( new Child( 3, "child3", p ), p.getChildren().get( 0 ) ); + assertEquals( new Child( 2, "child2", p ), p.getChildren().get( 1 ) ); + } ); } @Test - public void testIndexedCollectionRev4() { - final Parent p = getAuditReader().find( Parent.class, 1, 4 ); - assertEquals( 0, p.getChildren().size() ); + public void testIndexedCollectionRev4(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + final Parent p = auditReader.find( Parent.class, 1, 4 ); + assertEquals( 0, p.getChildren().size() ); + } ); } @Audited @@ -233,7 +247,7 @@ public List getParents() { return parents; } - public void setParent(List parent) { + public void setParent(List parents) { this.parents = parents; } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/biowned/BasicBiowned.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/biowned/BasicBiowned.java index bb946e819095..4af652db1fc3 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/biowned/BasicBiowned.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/biowned/BasicBiowned.java @@ -5,203 +5,195 @@ package org.hibernate.orm.test.envers.integration.manytomany.biowned; import java.util.Arrays; -import jakarta.persistence.EntityManager; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.orm.test.envers.entities.manytomany.biowned.ListBiowning1Entity; import org.hibernate.orm.test.envers.entities.manytomany.biowned.ListBiowning2Entity; import org.hibernate.orm.test.envers.tools.TestTools; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; -import org.junit.Test; +import org.junit.jupiter.api.Test; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Adam Warski (adam at warski dot org) */ -public class BasicBiowned extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {ListBiowning1Entity.class, ListBiowning2Entity.class}) +public class BasicBiowned { private Integer o1_1_id; private Integer o1_2_id; private Integer o2_1_id; private Integer o2_2_id; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {ListBiowning1Entity.class, ListBiowning2Entity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - ListBiowning1Entity o1_1 = new ListBiowning1Entity( "o1_1" ); - ListBiowning1Entity o1_2 = new ListBiowning1Entity( "o1_2" ); - ListBiowning2Entity o2_1 = new ListBiowning2Entity( "o2_1" ); - ListBiowning2Entity o2_2 = new ListBiowning2Entity( "o2_2" ); - - // Revision 1 - em.getTransaction().begin(); - - em.persist( o1_1 ); - em.persist( o1_2 ); - em.persist( o2_1 ); - em.persist( o2_2 ); - - em.getTransaction().commit(); - em.clear(); + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + scope.inTransaction( em -> { + ListBiowning1Entity o1_1 = new ListBiowning1Entity( "o1_1" ); + ListBiowning1Entity o1_2 = new ListBiowning1Entity( "o1_2" ); + ListBiowning2Entity o2_1 = new ListBiowning2Entity( "o2_1" ); + ListBiowning2Entity o2_2 = new ListBiowning2Entity( "o2_2" ); + + // Revision 1 + em.persist( o1_1 ); + em.persist( o1_2 ); + em.persist( o2_1 ); + em.persist( o2_2 ); + + o1_1_id = o1_1.getId(); + o1_2_id = o1_2.getId(); + o2_1_id = o2_1.getId(); + o2_2_id = o2_2.getId(); + } ); // Revision 2 (1_1 <-> 2_1; 1_2 <-> 2_2) + scope.inTransaction( em -> { + ListBiowning1Entity o1_1 = em.find( ListBiowning1Entity.class, o1_1_id ); + ListBiowning1Entity o1_2 = em.find( ListBiowning1Entity.class, o1_2_id ); + ListBiowning2Entity o2_1 = em.find( ListBiowning2Entity.class, o2_1_id ); + ListBiowning2Entity o2_2 = em.find( ListBiowning2Entity.class, o2_2_id ); - em.getTransaction().begin(); - - o1_1 = em.find( ListBiowning1Entity.class, o1_1.getId() ); - o1_2 = em.find( ListBiowning1Entity.class, o1_2.getId() ); - o2_1 = em.find( ListBiowning2Entity.class, o2_1.getId() ); - o2_2 = em.find( ListBiowning2Entity.class, o2_2.getId() ); - - o1_1.getReferences().add( o2_1 ); - o1_2.getReferences().add( o2_2 ); - - em.getTransaction().commit(); - em.clear(); + o1_1.getReferences().add( o2_1 ); + o1_2.getReferences().add( o2_2 ); + } ); // Revision 3 (1_1 <-> 2_1, 2_2; 1_2 <-> 2_2) - em.getTransaction().begin(); + scope.inTransaction( em -> { + ListBiowning1Entity o1_1 = em.find( ListBiowning1Entity.class, o1_1_id ); + ListBiowning2Entity o2_2 = em.find( ListBiowning2Entity.class, o2_2_id ); - o1_1 = em.find( ListBiowning1Entity.class, o1_1.getId() ); - o2_2 = em.find( ListBiowning2Entity.class, o2_2.getId() ); - - o1_1.getReferences().add( o2_2 ); - - em.getTransaction().commit(); - em.clear(); + o1_1.getReferences().add( o2_2 ); + } ); // Revision 4 (1_2 <-> 2_1, 2_2) - em.getTransaction().begin(); - - o1_1 = em.find( ListBiowning1Entity.class, o1_1.getId() ); - o1_2 = em.find( ListBiowning1Entity.class, o1_2.getId() ); - o2_1 = em.find( ListBiowning2Entity.class, o2_1.getId() ); - o2_2 = em.find( ListBiowning2Entity.class, o2_2.getId() ); + scope.inTransaction( em -> { + ListBiowning1Entity o1_1 = em.find( ListBiowning1Entity.class, o1_1_id ); + ListBiowning1Entity o1_2 = em.find( ListBiowning1Entity.class, o1_2_id ); + ListBiowning2Entity o2_1 = em.find( ListBiowning2Entity.class, o2_1_id ); + ListBiowning2Entity o2_2 = em.find( ListBiowning2Entity.class, o2_2_id ); - o2_2.getReferences().remove( o1_1 ); - o2_1.getReferences().remove( o1_1 ); - o2_1.getReferences().add( o1_2 ); - - em.getTransaction().commit(); - em.clear(); + o2_2.getReferences().remove( o1_1 ); + o2_1.getReferences().remove( o1_1 ); + o2_1.getReferences().add( o1_2 ); + } ); // Revision 5 (1_1 <-> 2_2, 1_2 <-> 2_2) - em.getTransaction().begin(); - - o1_1 = em.find( ListBiowning1Entity.class, o1_1.getId() ); - o1_2 = em.find( ListBiowning1Entity.class, o1_2.getId() ); - o2_1 = em.find( ListBiowning2Entity.class, o2_1.getId() ); - o2_2 = em.find( ListBiowning2Entity.class, o2_2.getId() ); - - o1_2.getReferences().remove( o2_1 ); - o1_1.getReferences().add( o2_2 ); - - em.getTransaction().commit(); - em.clear(); - - // - - o1_1_id = o1_1.getId(); - o1_2_id = o1_2.getId(); - o2_1_id = o2_1.getId(); - o2_2_id = o2_2.getId(); + scope.inTransaction( em -> { + ListBiowning1Entity o1_1 = em.find( ListBiowning1Entity.class, o1_1_id ); + ListBiowning1Entity o1_2 = em.find( ListBiowning1Entity.class, o1_2_id ); + ListBiowning2Entity o2_1 = em.find( ListBiowning2Entity.class, o2_1_id ); + ListBiowning2Entity o2_2 = em.find( ListBiowning2Entity.class, o2_2_id ); + + o1_2.getReferences().remove( o2_1 ); + o1_1.getReferences().add( o2_2 ); + } ); } @Test - public void testRevisionsCounts() { - // Although it would seem that when modifying references both entities should be marked as modified, because - // ownly the owning side is notified (because of the bi-owning mapping), a revision is created only for - // the entity where the collection was directly modified. - - assertEquals( - Arrays.asList( 1, 2, 3, 5 ), getAuditReader().getRevisions( - ListBiowning1Entity.class, - o1_1_id - ) - ); - assertEquals( Arrays.asList( 1, 2, 5 ), getAuditReader().getRevisions( ListBiowning1Entity.class, o1_2_id ) ); - - assertEquals( Arrays.asList( 1, 4 ), getAuditReader().getRevisions( ListBiowning2Entity.class, o2_1_id ) ); - assertEquals( Arrays.asList( 1, 4 ), getAuditReader().getRevisions( ListBiowning2Entity.class, o2_2_id ) ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + // Although it would seem that when modifying references both entities should be marked as modified, because + // ownly the owning side is notified (because of the bi-owning mapping), a revision is created only for + // the entity where the collection was directly modified. + + assertEquals( + Arrays.asList( 1, 2, 3, 5 ), AuditReaderFactory.get( em ).getRevisions( + ListBiowning1Entity.class, + o1_1_id + ) + ); + assertEquals( Arrays.asList( 1, 2, 5 ), AuditReaderFactory.get( em ).getRevisions( ListBiowning1Entity.class, o1_2_id ) ); + + assertEquals( Arrays.asList( 1, 4 ), AuditReaderFactory.get( em ).getRevisions( ListBiowning2Entity.class, o2_1_id ) ); + assertEquals( Arrays.asList( 1, 4 ), AuditReaderFactory.get( em ).getRevisions( ListBiowning2Entity.class, o2_2_id ) ); + } ); } @Test - public void testHistoryOfO1_1() { - ListBiowning2Entity o2_1 = getEntityManager().find( ListBiowning2Entity.class, o2_1_id ); - ListBiowning2Entity o2_2 = getEntityManager().find( ListBiowning2Entity.class, o2_2_id ); - - ListBiowning1Entity rev1 = getAuditReader().find( ListBiowning1Entity.class, o1_1_id, 1 ); - ListBiowning1Entity rev2 = getAuditReader().find( ListBiowning1Entity.class, o1_1_id, 2 ); - ListBiowning1Entity rev3 = getAuditReader().find( ListBiowning1Entity.class, o1_1_id, 3 ); - ListBiowning1Entity rev4 = getAuditReader().find( ListBiowning1Entity.class, o1_1_id, 4 ); - ListBiowning1Entity rev5 = getAuditReader().find( ListBiowning1Entity.class, o1_1_id, 5 ); - - assert TestTools.checkCollection( rev1.getReferences() ); - assert TestTools.checkCollection( rev2.getReferences(), o2_1 ); - assert TestTools.checkCollection( rev3.getReferences(), o2_1, o2_2 ); - assert TestTools.checkCollection( rev4.getReferences() ); - assert TestTools.checkCollection( rev5.getReferences(), o2_2 ); + public void testHistoryOfO1_1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + ListBiowning2Entity o2_1 = em.find( ListBiowning2Entity.class, o2_1_id ); + ListBiowning2Entity o2_2 = em.find( ListBiowning2Entity.class, o2_2_id ); + + var auditReader = AuditReaderFactory.get( em ); + ListBiowning1Entity rev1 = auditReader.find( ListBiowning1Entity.class, o1_1_id, 1 ); + ListBiowning1Entity rev2 = auditReader.find( ListBiowning1Entity.class, o1_1_id, 2 ); + ListBiowning1Entity rev3 = auditReader.find( ListBiowning1Entity.class, o1_1_id, 3 ); + ListBiowning1Entity rev4 = auditReader.find( ListBiowning1Entity.class, o1_1_id, 4 ); + ListBiowning1Entity rev5 = auditReader.find( ListBiowning1Entity.class, o1_1_id, 5 ); + + assert TestTools.checkCollection( rev1.getReferences() ); + assert TestTools.checkCollection( rev2.getReferences(), o2_1 ); + assert TestTools.checkCollection( rev3.getReferences(), o2_1, o2_2 ); + assert TestTools.checkCollection( rev4.getReferences() ); + assert TestTools.checkCollection( rev5.getReferences(), o2_2 ); + } ); } @Test - public void testHistoryOfO1_2() { - ListBiowning2Entity o2_1 = getEntityManager().find( ListBiowning2Entity.class, o2_1_id ); - ListBiowning2Entity o2_2 = getEntityManager().find( ListBiowning2Entity.class, o2_2_id ); - - ListBiowning1Entity rev1 = getAuditReader().find( ListBiowning1Entity.class, o1_2_id, 1 ); - ListBiowning1Entity rev2 = getAuditReader().find( ListBiowning1Entity.class, o1_2_id, 2 ); - ListBiowning1Entity rev3 = getAuditReader().find( ListBiowning1Entity.class, o1_2_id, 3 ); - ListBiowning1Entity rev4 = getAuditReader().find( ListBiowning1Entity.class, o1_2_id, 4 ); - ListBiowning1Entity rev5 = getAuditReader().find( ListBiowning1Entity.class, o1_2_id, 5 ); - - assert TestTools.checkCollection( rev1.getReferences() ); - assert TestTools.checkCollection( rev2.getReferences(), o2_2 ); - assert TestTools.checkCollection( rev3.getReferences(), o2_2 ); - assert TestTools.checkCollection( rev4.getReferences(), o2_1, o2_2 ); - assert TestTools.checkCollection( rev5.getReferences(), o2_2 ); + public void testHistoryOfO1_2(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + ListBiowning2Entity o2_1 = em.find( ListBiowning2Entity.class, o2_1_id ); + ListBiowning2Entity o2_2 = em.find( ListBiowning2Entity.class, o2_2_id ); + + var auditReader = AuditReaderFactory.get( em ); + ListBiowning1Entity rev1 = auditReader.find( ListBiowning1Entity.class, o1_2_id, 1 ); + ListBiowning1Entity rev2 = auditReader.find( ListBiowning1Entity.class, o1_2_id, 2 ); + ListBiowning1Entity rev3 = auditReader.find( ListBiowning1Entity.class, o1_2_id, 3 ); + ListBiowning1Entity rev4 = auditReader.find( ListBiowning1Entity.class, o1_2_id, 4 ); + ListBiowning1Entity rev5 = auditReader.find( ListBiowning1Entity.class, o1_2_id, 5 ); + + assert TestTools.checkCollection( rev1.getReferences() ); + assert TestTools.checkCollection( rev2.getReferences(), o2_2 ); + assert TestTools.checkCollection( rev3.getReferences(), o2_2 ); + assert TestTools.checkCollection( rev4.getReferences(), o2_1, o2_2 ); + assert TestTools.checkCollection( rev5.getReferences(), o2_2 ); + } ); } @Test - public void testHistoryOfO2_1() { - ListBiowning1Entity o1_1 = getEntityManager().find( ListBiowning1Entity.class, o1_1_id ); - ListBiowning1Entity o1_2 = getEntityManager().find( ListBiowning1Entity.class, o1_2_id ); - - ListBiowning2Entity rev1 = getAuditReader().find( ListBiowning2Entity.class, o2_1_id, 1 ); - ListBiowning2Entity rev2 = getAuditReader().find( ListBiowning2Entity.class, o2_1_id, 2 ); - ListBiowning2Entity rev3 = getAuditReader().find( ListBiowning2Entity.class, o2_1_id, 3 ); - ListBiowning2Entity rev4 = getAuditReader().find( ListBiowning2Entity.class, o2_1_id, 4 ); - ListBiowning2Entity rev5 = getAuditReader().find( ListBiowning2Entity.class, o2_1_id, 5 ); - - assert TestTools.checkCollection( rev1.getReferences() ); - assert TestTools.checkCollection( rev2.getReferences(), o1_1 ); - assert TestTools.checkCollection( rev3.getReferences(), o1_1 ); - assert TestTools.checkCollection( rev4.getReferences(), o1_2 ); - assert TestTools.checkCollection( rev5.getReferences() ); + public void testHistoryOfO2_1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + ListBiowning1Entity o1_1 = em.find( ListBiowning1Entity.class, o1_1_id ); + ListBiowning1Entity o1_2 = em.find( ListBiowning1Entity.class, o1_2_id ); + + var auditReader = AuditReaderFactory.get( em ); + ListBiowning2Entity rev1 = auditReader.find( ListBiowning2Entity.class, o2_1_id, 1 ); + ListBiowning2Entity rev2 = auditReader.find( ListBiowning2Entity.class, o2_1_id, 2 ); + ListBiowning2Entity rev3 = auditReader.find( ListBiowning2Entity.class, o2_1_id, 3 ); + ListBiowning2Entity rev4 = auditReader.find( ListBiowning2Entity.class, o2_1_id, 4 ); + ListBiowning2Entity rev5 = auditReader.find( ListBiowning2Entity.class, o2_1_id, 5 ); + + assert TestTools.checkCollection( rev1.getReferences() ); + assert TestTools.checkCollection( rev2.getReferences(), o1_1 ); + assert TestTools.checkCollection( rev3.getReferences(), o1_1 ); + assert TestTools.checkCollection( rev4.getReferences(), o1_2 ); + assert TestTools.checkCollection( rev5.getReferences() ); + } ); } @Test - public void testHistoryOfO2_2() { - ListBiowning1Entity o1_1 = getEntityManager().find( ListBiowning1Entity.class, o1_1_id ); - ListBiowning1Entity o1_2 = getEntityManager().find( ListBiowning1Entity.class, o1_2_id ); - - ListBiowning2Entity rev1 = getAuditReader().find( ListBiowning2Entity.class, o2_2_id, 1 ); - ListBiowning2Entity rev2 = getAuditReader().find( ListBiowning2Entity.class, o2_2_id, 2 ); - ListBiowning2Entity rev3 = getAuditReader().find( ListBiowning2Entity.class, o2_2_id, 3 ); - ListBiowning2Entity rev4 = getAuditReader().find( ListBiowning2Entity.class, o2_2_id, 4 ); - ListBiowning2Entity rev5 = getAuditReader().find( ListBiowning2Entity.class, o2_2_id, 5 ); - - assert TestTools.checkCollection( rev1.getReferences() ); - assert TestTools.checkCollection( rev2.getReferences(), o1_2 ); - assert TestTools.checkCollection( rev3.getReferences(), o1_1, o1_2 ); - assert TestTools.checkCollection( rev4.getReferences(), o1_2 ); - assert TestTools.checkCollection( rev5.getReferences(), o1_1, o1_2 ); + public void testHistoryOfO2_2(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + ListBiowning1Entity o1_1 = em.find( ListBiowning1Entity.class, o1_1_id ); + ListBiowning1Entity o1_2 = em.find( ListBiowning1Entity.class, o1_2_id ); + + var auditReader = AuditReaderFactory.get( em ); + ListBiowning2Entity rev1 = auditReader.find( ListBiowning2Entity.class, o2_2_id, 1 ); + ListBiowning2Entity rev2 = auditReader.find( ListBiowning2Entity.class, o2_2_id, 2 ); + ListBiowning2Entity rev3 = auditReader.find( ListBiowning2Entity.class, o2_2_id, 3 ); + ListBiowning2Entity rev4 = auditReader.find( ListBiowning2Entity.class, o2_2_id, 4 ); + ListBiowning2Entity rev5 = auditReader.find( ListBiowning2Entity.class, o2_2_id, 5 ); + + assert TestTools.checkCollection( rev1.getReferences() ); + assert TestTools.checkCollection( rev2.getReferences(), o1_2 ); + assert TestTools.checkCollection( rev3.getReferences(), o1_1, o1_2 ); + assert TestTools.checkCollection( rev4.getReferences(), o1_2 ); + assert TestTools.checkCollection( rev5.getReferences(), o1_1, o1_2 ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/inverseToSuperclass/ManyToManyInverseToSuperclassTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/inverseToSuperclass/ManyToManyInverseToSuperclassTest.java index d5df09f4f76d..727bf49c6f65 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/inverseToSuperclass/ManyToManyInverseToSuperclassTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/inverseToSuperclass/ManyToManyInverseToSuperclassTest.java @@ -5,60 +5,59 @@ package org.hibernate.orm.test.envers.integration.manytomany.inverseToSuperclass; import java.util.ArrayList; -import jakarta.persistence.EntityManager; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; -import org.junit.Test; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertNotNull; /** * @author Hern�n Chanfreau */ -public class ManyToManyInverseToSuperclassTest extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(xmlMappings = "mappings/manyToMany/inverseToSuperclass/mappings.hbm.xml") +public class ManyToManyInverseToSuperclassTest { private long m1_id; - @Override - protected String[] getMappings() { - return new String[] {"mappings/manyToMany/inverseToSuperclass/mappings.hbm.xml"}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - Root m1 = new Root(); - DetailSubclass det1 = new DetailSubclass2(); - - // Revision 1 - em.getTransaction().begin(); + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + scope.inTransaction( em -> { + Root m1 = new Root(); + DetailSubclass det1 = new DetailSubclass2(); - det1.setStr2( "detail 1" ); + // Revision 1 + det1.setStr2( "detail 1" ); - m1.setStr( "root" ); - m1.setItems( new ArrayList() ); - m1.getItems().add( det1 ); + m1.setStr( "root" ); + m1.setItems( new ArrayList() ); + m1.getItems().add( det1 ); - det1.setRoots( new ArrayList() ); - det1.getRoots().add( m1 ); + det1.setRoots( new ArrayList() ); + det1.getRoots().add( m1 ); - em.persist( m1 ); - em.getTransaction().commit(); - m1_id = m1.getId(); + em.persist( m1 ); + m1_id = m1.getId(); + } ); } @Test - public void testHistoryExists() { - Root rev1_1 = getAuditReader().find( Root.class, m1_id, 1 ); - Root rev1_2 = getAuditReader().find( Root.class, m1_id, 2 ); - Root rev1_3 = getAuditReader().find( Root.class, m1_id, 3 ); - Root rev1_4 = getAuditReader().find( Root.class, m1_id, 4 ); - - assert (rev1_1 != null); - assert (rev1_2 != null); - assert (rev1_3 != null); - assert (rev1_4 != null); + public void testHistoryExists(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + var auditReader = AuditReaderFactory.get( em ); + Root rev1_1 = auditReader.find( Root.class, m1_id, 1 ); + Root rev1_2 = auditReader.find( Root.class, m1_id, 2 ); + Root rev1_3 = auditReader.find( Root.class, m1_id, 3 ); + Root rev1_4 = auditReader.find( Root.class, m1_id, 4 ); + + assertNotNull( rev1_1 ); + assertNotNull( rev1_2 ); + assertNotNull( rev1_3 ); + assertNotNull( rev1_4 ); + } ); } - } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/sametable/BasicSametable.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/sametable/BasicSametable.java index b2aafaebffeb..c61cdbd33474 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/sametable/BasicSametable.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/sametable/BasicSametable.java @@ -6,27 +6,32 @@ import java.sql.Types; import java.util.Arrays; -import jakarta.persistence.EntityManager; import org.hibernate.Session; import org.hibernate.engine.spi.SessionImplementor; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.orm.test.envers.entities.manytomany.sametable.Child1Entity; import org.hibernate.orm.test.envers.entities.manytomany.sametable.Child2Entity; import org.hibernate.orm.test.envers.entities.manytomany.sametable.ParentEntity; import org.hibernate.orm.test.envers.tools.TestTools; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; import org.hibernate.type.descriptor.sql.spi.DdlTypeRegistry; -import org.junit.Assert; -import org.junit.Test; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; /** * Test which checks that auditing entities which contain multiple mappings to same tables work. * * @author Adam Warski (adam at warski dot org) */ -public class BasicSametable extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {ParentEntity.class, Child1Entity.class, Child2Entity.class}) +public class BasicSametable { private Integer p1_id; private Integer p2_id; private Integer c1_1_id; @@ -34,44 +39,34 @@ public class BasicSametable extends BaseEnversJPAFunctionalTestCase { private Integer c2_1_id; private Integer c2_2_id; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {ParentEntity.class, Child1Entity.class, Child2Entity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - DdlTypeRegistry ddlTypeRegistry = em.unwrap( SessionImplementor.class ).getTypeConfiguration() - .getDdlTypeRegistry(); - - em.getTransaction().begin(); - Session session = (Session) em.getDelegate(); - session.createNativeQuery( "DROP TABLE children" ).executeUpdate(); - session.createNativeQuery( "DROP TABLE children_AUD" ).executeUpdate(); - em.getTransaction().commit(); - em.clear(); + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + scope.inTransaction( em -> { + Session session = em.unwrap( Session.class ); + session.createNativeQuery( "DROP TABLE children" ).executeUpdate(); + session.createNativeQuery( "DROP TABLE children_AUD" ).executeUpdate(); + } ); // We need first to modify the columns in the middle (join table) to allow null values. Hbm2ddl doesn't seem // to allow this. - em.getTransaction().begin(); - session = (Session) em.getDelegate(); - session.createNativeQuery( - "CREATE TABLE children ( parent_id " + ddlTypeRegistry.getTypeName( Types.INTEGER, getDialect() ) + - ", child1_id " + ddlTypeRegistry.getTypeName( Types.INTEGER, getDialect() ) + getDialect().getNullColumnString() + - ", child2_id " + ddlTypeRegistry.getTypeName( Types.INTEGER, getDialect() ) + getDialect().getNullColumnString() + " )" - ).executeUpdate(); - session.createNativeQuery( - "CREATE TABLE children_AUD ( REV " + ddlTypeRegistry.getTypeName( Types.INTEGER, getDialect() ) + " NOT NULL" + - ", REVEND " + ddlTypeRegistry.getTypeName( Types.INTEGER, getDialect() ) + - ", REVTYPE " + ddlTypeRegistry.getTypeName( Types.TINYINT, getDialect() ) + - ", parent_id " + ddlTypeRegistry.getTypeName( Types.INTEGER, getDialect() ) + - ", child1_id " + ddlTypeRegistry.getTypeName( Types.INTEGER, getDialect() ) + getDialect().getNullColumnString() + - ", child2_id " + ddlTypeRegistry.getTypeName( Types.INTEGER, getDialect() ) + getDialect().getNullColumnString() + " )" - ).executeUpdate(); - em.getTransaction().commit(); - em.clear(); + scope.inTransaction( em -> { + DdlTypeRegistry ddlTypeRegistry = em.unwrap( SessionImplementor.class ).getTypeConfiguration() + .getDdlTypeRegistry(); + Session session = em.unwrap( Session.class ); + session.createNativeQuery( + "CREATE TABLE children ( parent_id " + ddlTypeRegistry.getTypeName( Types.INTEGER, scope.getDialect() ) + + ", child1_id " + ddlTypeRegistry.getTypeName( Types.INTEGER, scope.getDialect() ) + scope.getDialect().getNullColumnString() + + ", child2_id " + ddlTypeRegistry.getTypeName( Types.INTEGER, scope.getDialect() ) + scope.getDialect().getNullColumnString() + " )" + ).executeUpdate(); + session.createNativeQuery( + "CREATE TABLE children_AUD ( REV " + ddlTypeRegistry.getTypeName( Types.INTEGER, scope.getDialect() ) + " NOT NULL" + + ", REVEND " + ddlTypeRegistry.getTypeName( Types.INTEGER, scope.getDialect() ) + + ", REVTYPE " + ddlTypeRegistry.getTypeName( Types.TINYINT, scope.getDialect() ) + + ", parent_id " + ddlTypeRegistry.getTypeName( Types.INTEGER, scope.getDialect() ) + + ", child1_id " + ddlTypeRegistry.getTypeName( Types.INTEGER, scope.getDialect() ) + scope.getDialect().getNullColumnString() + + ", child2_id " + ddlTypeRegistry.getTypeName( Types.INTEGER, scope.getDialect() ) + scope.getDialect().getNullColumnString() + " )" + ).executeUpdate(); + } ); ParentEntity p1 = new ParentEntity( "parent_1" ); ParentEntity p2 = new ParentEntity( "parent_2" ); @@ -83,79 +78,61 @@ public void initData() { Child2Entity c2_2 = new Child2Entity( "child2_2" ); // Revision 1 - em.getTransaction().begin(); - - em.persist( p1 ); - em.persist( p2 ); - em.persist( c1_1 ); - em.persist( c1_2 ); - em.persist( c2_1 ); - em.persist( c2_2 ); - - em.getTransaction().commit(); - em.clear(); + scope.inTransaction( em -> { + em.persist( p1 ); + em.persist( p2 ); + em.persist( c1_1 ); + em.persist( c1_2 ); + em.persist( c2_1 ); + em.persist( c2_2 ); + } ); // Revision 2 - (p1: c1_1, p2: c2_1) + scope.inTransaction( em -> { + ParentEntity p1Ref = em.find( ParentEntity.class, p1.getId() ); + ParentEntity p2Ref = em.find( ParentEntity.class, p2.getId() ); + Child1Entity c1_1Ref = em.find( Child1Entity.class, c1_1.getId() ); + Child2Entity c2_1Ref = em.find( Child2Entity.class, c2_1.getId() ); - em.getTransaction().begin(); - - p1 = em.find( ParentEntity.class, p1.getId() ); - p2 = em.find( ParentEntity.class, p2.getId() ); - c1_1 = em.find( Child1Entity.class, c1_1.getId() ); - c2_1 = em.find( Child2Entity.class, c2_1.getId() ); - - p1.getChildren1().add( c1_1 ); - p2.getChildren2().add( c2_1 ); - - em.getTransaction().commit(); - em.clear(); + p1Ref.getChildren1().add( c1_1Ref ); + p2Ref.getChildren2().add( c2_1Ref ); + } ); // Revision 3 - (p1: c1_1, c1_2, c2_2, p2: c1_1, c2_1) - em.getTransaction().begin(); + scope.inTransaction( em -> { + ParentEntity p1Ref = em.find( ParentEntity.class, p1.getId() ); + ParentEntity p2Ref = em.find( ParentEntity.class, p2.getId() ); + Child1Entity c1_1Ref = em.find( Child1Entity.class, c1_1.getId() ); + Child1Entity c1_2Ref = em.find( Child1Entity.class, c1_2.getId() ); + Child2Entity c2_2Ref = em.find( Child2Entity.class, c2_2.getId() ); - p1 = em.find( ParentEntity.class, p1.getId() ); - p2 = em.find( ParentEntity.class, p2.getId() ); - c1_1 = em.find( Child1Entity.class, c1_1.getId() ); - c1_2 = em.find( Child1Entity.class, c1_2.getId() ); - c2_2 = em.find( Child2Entity.class, c2_2.getId() ); + p1Ref.getChildren1().add( c1_2Ref ); + p1Ref.getChildren2().add( c2_2Ref ); - p1.getChildren1().add( c1_2 ); - p1.getChildren2().add( c2_2 ); - - p2.getChildren1().add( c1_1 ); - - em.getTransaction().commit(); - em.clear(); + p2Ref.getChildren1().add( c1_1Ref ); + } ); // Revision 4 - (p1: c1_2, c2_2, p2: c1_1, c2_1, c2_2) - em.getTransaction().begin(); - - p1 = em.find( ParentEntity.class, p1.getId() ); - p2 = em.find( ParentEntity.class, p2.getId() ); - c1_1 = em.find( Child1Entity.class, c1_1.getId() ); - c2_2 = em.find( Child2Entity.class, c2_2.getId() ); + scope.inTransaction( em -> { + ParentEntity p1Ref = em.find( ParentEntity.class, p1.getId() ); + ParentEntity p2Ref = em.find( ParentEntity.class, p2.getId() ); + Child1Entity c1_1Ref = em.find( Child1Entity.class, c1_1.getId() ); + Child2Entity c2_2Ref = em.find( Child2Entity.class, c2_2.getId() ); - p1.getChildren1().remove( c1_1 ); - p2.getChildren2().add( c2_2 ); - - em.getTransaction().commit(); - em.clear(); + p1Ref.getChildren1().remove( c1_1Ref ); + p2Ref.getChildren2().add( c2_2Ref ); + } ); // Revision 5 - (p1: c2_2, p2: c1_1, c2_1) - em.getTransaction().begin(); - - p1 = em.find( ParentEntity.class, p1.getId() ); - p2 = em.find( ParentEntity.class, p2.getId() ); - c1_2 = em.find( Child1Entity.class, c1_2.getId() ); - c2_2 = em.find( Child2Entity.class, c2_2.getId() ); + scope.inTransaction( em -> { + ParentEntity p1Ref = em.find( ParentEntity.class, p1.getId() ); + ParentEntity p2Ref = em.find( ParentEntity.class, p2.getId() ); + Child1Entity c1_2Ref = em.find( Child1Entity.class, c1_2.getId() ); + Child2Entity c2_2Ref = em.find( Child2Entity.class, c2_2.getId() ); - c2_2.getParents().remove( p2 ); - c1_2.getParents().remove( p1 ); - - em.getTransaction().commit(); - em.clear(); - - // + c2_2Ref.getParents().remove( p2Ref ); + c1_2Ref.getParents().remove( p1Ref ); + } ); p1_id = p1.getId(); p2_id = p2.getId(); @@ -166,135 +143,155 @@ public void initData() { } @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2, 3, 4 ).equals( getAuditReader().getRevisions( ParentEntity.class, p1_id ) ); - assert Arrays.asList( 1, 2, 3, 4 ).equals( getAuditReader().getRevisions( ParentEntity.class, p2_id ) ); - - assert Arrays.asList( 1 ).equals( getAuditReader().getRevisions( Child1Entity.class, c1_1_id ) ); - assert Arrays.asList( 1, 5 ).equals( getAuditReader().getRevisions( Child1Entity.class, c1_2_id ) ); - - Assert.assertEquals( Arrays.asList( 1 ), getAuditReader().getRevisions( Child2Entity.class, c2_1_id ) ); - Assert.assertEquals( Arrays.asList( 1, 5 ), getAuditReader().getRevisions( Child2Entity.class, c2_2_id ) ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1, 2, 3, 4 ), auditReader.getRevisions( ParentEntity.class, p1_id ) ); + assertEquals( Arrays.asList( 1, 2, 3, 4 ), auditReader.getRevisions( ParentEntity.class, p2_id ) ); + + assertEquals( Arrays.asList( 1 ), auditReader.getRevisions( Child1Entity.class, c1_1_id ) ); + assertEquals( Arrays.asList( 1, 5 ), auditReader.getRevisions( Child1Entity.class, c1_2_id ) ); + + assertEquals( Arrays.asList( 1 ), auditReader.getRevisions( Child2Entity.class, c2_1_id ) ); + assertEquals( Arrays.asList( 1, 5 ), auditReader.getRevisions( Child2Entity.class, c2_2_id ) ); + } ); } @Test - public void testHistoryOfParent1() { - Child1Entity c1_1 = getEntityManager().find( Child1Entity.class, c1_1_id ); - Child1Entity c1_2 = getEntityManager().find( Child1Entity.class, c1_2_id ); - Child2Entity c2_2 = getEntityManager().find( Child2Entity.class, c2_2_id ); - - ParentEntity rev1 = getAuditReader().find( ParentEntity.class, p1_id, 1 ); - ParentEntity rev2 = getAuditReader().find( ParentEntity.class, p1_id, 2 ); - ParentEntity rev3 = getAuditReader().find( ParentEntity.class, p1_id, 3 ); - ParentEntity rev4 = getAuditReader().find( ParentEntity.class, p1_id, 4 ); - ParentEntity rev5 = getAuditReader().find( ParentEntity.class, p1_id, 5 ); - - assert TestTools.checkCollection( rev1.getChildren1() ); - assert TestTools.checkCollection( rev2.getChildren1(), c1_1 ); - assert TestTools.checkCollection( rev3.getChildren1(), c1_1, c1_2 ); - assert TestTools.checkCollection( rev4.getChildren1(), c1_2 ); - assert TestTools.checkCollection( rev5.getChildren1() ); - - assert TestTools.checkCollection( rev1.getChildren2() ); - assert TestTools.checkCollection( rev2.getChildren2() ); - assert TestTools.checkCollection( rev3.getChildren2(), c2_2 ); - assert TestTools.checkCollection( rev4.getChildren2(), c2_2 ); - assert TestTools.checkCollection( rev5.getChildren2(), c2_2 ); + public void testHistoryOfParent1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + Child1Entity c1_1 = em.find( Child1Entity.class, c1_1_id ); + Child1Entity c1_2 = em.find( Child1Entity.class, c1_2_id ); + Child2Entity c2_2 = em.find( Child2Entity.class, c2_2_id ); + + ParentEntity rev1 = auditReader.find( ParentEntity.class, p1_id, 1 ); + ParentEntity rev2 = auditReader.find( ParentEntity.class, p1_id, 2 ); + ParentEntity rev3 = auditReader.find( ParentEntity.class, p1_id, 3 ); + ParentEntity rev4 = auditReader.find( ParentEntity.class, p1_id, 4 ); + ParentEntity rev5 = auditReader.find( ParentEntity.class, p1_id, 5 ); + + assert TestTools.checkCollection( rev1.getChildren1() ); + assert TestTools.checkCollection( rev2.getChildren1(), c1_1 ); + assert TestTools.checkCollection( rev3.getChildren1(), c1_1, c1_2 ); + assert TestTools.checkCollection( rev4.getChildren1(), c1_2 ); + assert TestTools.checkCollection( rev5.getChildren1() ); + + assert TestTools.checkCollection( rev1.getChildren2() ); + assert TestTools.checkCollection( rev2.getChildren2() ); + assert TestTools.checkCollection( rev3.getChildren2(), c2_2 ); + assert TestTools.checkCollection( rev4.getChildren2(), c2_2 ); + assert TestTools.checkCollection( rev5.getChildren2(), c2_2 ); + } ); } @Test - public void testHistoryOfParent2() { - Child1Entity c1_1 = getEntityManager().find( Child1Entity.class, c1_1_id ); - Child2Entity c2_1 = getEntityManager().find( Child2Entity.class, c2_1_id ); - Child2Entity c2_2 = getEntityManager().find( Child2Entity.class, c2_2_id ); - - ParentEntity rev1 = getAuditReader().find( ParentEntity.class, p2_id, 1 ); - ParentEntity rev2 = getAuditReader().find( ParentEntity.class, p2_id, 2 ); - ParentEntity rev3 = getAuditReader().find( ParentEntity.class, p2_id, 3 ); - ParentEntity rev4 = getAuditReader().find( ParentEntity.class, p2_id, 4 ); - ParentEntity rev5 = getAuditReader().find( ParentEntity.class, p2_id, 5 ); - - assert TestTools.checkCollection( rev1.getChildren1() ); - assert TestTools.checkCollection( rev2.getChildren1() ); - assert TestTools.checkCollection( rev3.getChildren1(), c1_1 ); - assert TestTools.checkCollection( rev4.getChildren1(), c1_1 ); - assert TestTools.checkCollection( rev5.getChildren1(), c1_1 ); - - assert TestTools.checkCollection( rev1.getChildren2() ); - assert TestTools.checkCollection( rev2.getChildren2(), c2_1 ); - assert TestTools.checkCollection( rev3.getChildren2(), c2_1 ); - assert TestTools.checkCollection( rev4.getChildren2(), c2_1, c2_2 ); - assert TestTools.checkCollection( rev5.getChildren2(), c2_1 ); + public void testHistoryOfParent2(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + Child1Entity c1_1 = em.find( Child1Entity.class, c1_1_id ); + Child2Entity c2_1 = em.find( Child2Entity.class, c2_1_id ); + Child2Entity c2_2 = em.find( Child2Entity.class, c2_2_id ); + + ParentEntity rev1 = auditReader.find( ParentEntity.class, p2_id, 1 ); + ParentEntity rev2 = auditReader.find( ParentEntity.class, p2_id, 2 ); + ParentEntity rev3 = auditReader.find( ParentEntity.class, p2_id, 3 ); + ParentEntity rev4 = auditReader.find( ParentEntity.class, p2_id, 4 ); + ParentEntity rev5 = auditReader.find( ParentEntity.class, p2_id, 5 ); + + assert TestTools.checkCollection( rev1.getChildren1() ); + assert TestTools.checkCollection( rev2.getChildren1() ); + assert TestTools.checkCollection( rev3.getChildren1(), c1_1 ); + assert TestTools.checkCollection( rev4.getChildren1(), c1_1 ); + assert TestTools.checkCollection( rev5.getChildren1(), c1_1 ); + + assert TestTools.checkCollection( rev1.getChildren2() ); + assert TestTools.checkCollection( rev2.getChildren2(), c2_1 ); + assert TestTools.checkCollection( rev3.getChildren2(), c2_1 ); + assert TestTools.checkCollection( rev4.getChildren2(), c2_1, c2_2 ); + assert TestTools.checkCollection( rev5.getChildren2(), c2_1 ); + } ); } @Test - public void testHistoryOfChild1_1() { - ParentEntity p1 = getEntityManager().find( ParentEntity.class, p1_id ); - ParentEntity p2 = getEntityManager().find( ParentEntity.class, p2_id ); - - Child1Entity rev1 = getAuditReader().find( Child1Entity.class, c1_1_id, 1 ); - Child1Entity rev2 = getAuditReader().find( Child1Entity.class, c1_1_id, 2 ); - Child1Entity rev3 = getAuditReader().find( Child1Entity.class, c1_1_id, 3 ); - Child1Entity rev4 = getAuditReader().find( Child1Entity.class, c1_1_id, 4 ); - Child1Entity rev5 = getAuditReader().find( Child1Entity.class, c1_1_id, 5 ); - - assert TestTools.checkCollection( rev1.getParents() ); - assert TestTools.checkCollection( rev2.getParents(), p1 ); - assert TestTools.checkCollection( rev3.getParents(), p1, p2 ); - assert TestTools.checkCollection( rev4.getParents(), p2 ); - assert TestTools.checkCollection( rev5.getParents(), p2 ); + public void testHistoryOfChild1_1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + ParentEntity p1 = em.find( ParentEntity.class, p1_id ); + ParentEntity p2 = em.find( ParentEntity.class, p2_id ); + + Child1Entity rev1 = auditReader.find( Child1Entity.class, c1_1_id, 1 ); + Child1Entity rev2 = auditReader.find( Child1Entity.class, c1_1_id, 2 ); + Child1Entity rev3 = auditReader.find( Child1Entity.class, c1_1_id, 3 ); + Child1Entity rev4 = auditReader.find( Child1Entity.class, c1_1_id, 4 ); + Child1Entity rev5 = auditReader.find( Child1Entity.class, c1_1_id, 5 ); + + assert TestTools.checkCollection( rev1.getParents() ); + assert TestTools.checkCollection( rev2.getParents(), p1 ); + assert TestTools.checkCollection( rev3.getParents(), p1, p2 ); + assert TestTools.checkCollection( rev4.getParents(), p2 ); + assert TestTools.checkCollection( rev5.getParents(), p2 ); + } ); } - // TODO: was disabled? @Test - public void testHistoryOfChild1_2() { - ParentEntity p1 = getEntityManager().find( ParentEntity.class, p1_id ); - - Child1Entity rev1 = getAuditReader().find( Child1Entity.class, c1_2_id, 1 ); - Child1Entity rev2 = getAuditReader().find( Child1Entity.class, c1_2_id, 2 ); - Child1Entity rev3 = getAuditReader().find( Child1Entity.class, c1_2_id, 3 ); - Child1Entity rev4 = getAuditReader().find( Child1Entity.class, c1_2_id, 4 ); - Child1Entity rev5 = getAuditReader().find( Child1Entity.class, c1_2_id, 5 ); - - assert TestTools.checkCollection( rev1.getParents() ); - assert TestTools.checkCollection( rev2.getParents() ); - assert TestTools.checkCollection( rev3.getParents(), p1 ); - assert TestTools.checkCollection( rev4.getParents(), p1 ); - assert TestTools.checkCollection( rev5.getParents() ); + public void testHistoryOfChild1_2(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + ParentEntity p1 = em.find( ParentEntity.class, p1_id ); + + Child1Entity rev1 = auditReader.find( Child1Entity.class, c1_2_id, 1 ); + Child1Entity rev2 = auditReader.find( Child1Entity.class, c1_2_id, 2 ); + Child1Entity rev3 = auditReader.find( Child1Entity.class, c1_2_id, 3 ); + Child1Entity rev4 = auditReader.find( Child1Entity.class, c1_2_id, 4 ); + Child1Entity rev5 = auditReader.find( Child1Entity.class, c1_2_id, 5 ); + + assert TestTools.checkCollection( rev1.getParents() ); + assert TestTools.checkCollection( rev2.getParents() ); + assert TestTools.checkCollection( rev3.getParents(), p1 ); + assert TestTools.checkCollection( rev4.getParents(), p1 ); + assert TestTools.checkCollection( rev5.getParents() ); + } ); } @Test - public void testHistoryOfChild2_1() { - ParentEntity p2 = getEntityManager().find( ParentEntity.class, p2_id ); - - Child2Entity rev1 = getAuditReader().find( Child2Entity.class, c2_1_id, 1 ); - Child2Entity rev2 = getAuditReader().find( Child2Entity.class, c2_1_id, 2 ); - Child2Entity rev3 = getAuditReader().find( Child2Entity.class, c2_1_id, 3 ); - Child2Entity rev4 = getAuditReader().find( Child2Entity.class, c2_1_id, 4 ); - Child2Entity rev5 = getAuditReader().find( Child2Entity.class, c2_1_id, 5 ); - - assert TestTools.checkCollection( rev1.getParents() ); - assert TestTools.checkCollection( rev2.getParents(), p2 ); - assert TestTools.checkCollection( rev3.getParents(), p2 ); - assert TestTools.checkCollection( rev4.getParents(), p2 ); - assert TestTools.checkCollection( rev5.getParents(), p2 ); + public void testHistoryOfChild2_1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + ParentEntity p2 = em.find( ParentEntity.class, p2_id ); + + Child2Entity rev1 = auditReader.find( Child2Entity.class, c2_1_id, 1 ); + Child2Entity rev2 = auditReader.find( Child2Entity.class, c2_1_id, 2 ); + Child2Entity rev3 = auditReader.find( Child2Entity.class, c2_1_id, 3 ); + Child2Entity rev4 = auditReader.find( Child2Entity.class, c2_1_id, 4 ); + Child2Entity rev5 = auditReader.find( Child2Entity.class, c2_1_id, 5 ); + + assert TestTools.checkCollection( rev1.getParents() ); + assert TestTools.checkCollection( rev2.getParents(), p2 ); + assert TestTools.checkCollection( rev3.getParents(), p2 ); + assert TestTools.checkCollection( rev4.getParents(), p2 ); + assert TestTools.checkCollection( rev5.getParents(), p2 ); + } ); } @Test - public void testHistoryOfChild2_2() { - ParentEntity p1 = getEntityManager().find( ParentEntity.class, p1_id ); - ParentEntity p2 = getEntityManager().find( ParentEntity.class, p2_id ); - - Child2Entity rev1 = getAuditReader().find( Child2Entity.class, c2_2_id, 1 ); - Child2Entity rev2 = getAuditReader().find( Child2Entity.class, c2_2_id, 2 ); - Child2Entity rev3 = getAuditReader().find( Child2Entity.class, c2_2_id, 3 ); - Child2Entity rev4 = getAuditReader().find( Child2Entity.class, c2_2_id, 4 ); - Child2Entity rev5 = getAuditReader().find( Child2Entity.class, c2_2_id, 5 ); - - assert TestTools.checkCollection( rev1.getParents() ); - assert TestTools.checkCollection( rev2.getParents() ); - assert TestTools.checkCollection( rev3.getParents(), p1 ); - assert TestTools.checkCollection( rev4.getParents(), p1, p2 ); - assert TestTools.checkCollection( rev5.getParents(), p1 ); + public void testHistoryOfChild2_2(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + ParentEntity p1 = em.find( ParentEntity.class, p1_id ); + ParentEntity p2 = em.find( ParentEntity.class, p2_id ); + + Child2Entity rev1 = auditReader.find( Child2Entity.class, c2_2_id, 1 ); + Child2Entity rev2 = auditReader.find( Child2Entity.class, c2_2_id, 2 ); + Child2Entity rev3 = auditReader.find( Child2Entity.class, c2_2_id, 3 ); + Child2Entity rev4 = auditReader.find( Child2Entity.class, c2_2_id, 4 ); + Child2Entity rev5 = auditReader.find( Child2Entity.class, c2_2_id, 5 ); + + assert TestTools.checkCollection( rev1.getParents() ); + assert TestTools.checkCollection( rev2.getParents() ); + assert TestTools.checkCollection( rev3.getParents(), p1 ); + assert TestTools.checkCollection( rev4.getParents(), p1, p2 ); + assert TestTools.checkCollection( rev5.getParents(), p1 ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/ternary/TernaryMap.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/ternary/TernaryMap.java index 5bd3ca527445..eac54516133a 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/ternary/TernaryMap.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/ternary/TernaryMap.java @@ -5,23 +5,28 @@ package org.hibernate.orm.test.envers.integration.manytomany.ternary; import java.util.Arrays; -import jakarta.persistence.EntityManager; import org.hibernate.dialect.HSQLDialect; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.orm.test.envers.entities.IntTestPrivSeqEntity; import org.hibernate.orm.test.envers.entities.StrTestPrivSeqEntity; import org.hibernate.orm.test.envers.tools.TestTools; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; +import org.hibernate.testing.orm.junit.SkipForDialect; -import org.hibernate.testing.SkipForDialect; -import org.junit.Assert; -import org.junit.Test; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Adam Warski (adam at warski dot org) */ -public class TernaryMap extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {TernaryMapEntity.class, StrTestPrivSeqEntity.class, IntTestPrivSeqEntity.class}) +public class TernaryMap { private Integer str1_id; private Integer str2_id; @@ -31,16 +36,8 @@ public class TernaryMap extends BaseEnversJPAFunctionalTestCase { private Integer map1_id; private Integer map2_id; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {TernaryMapEntity.class, StrTestPrivSeqEntity.class, IntTestPrivSeqEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { StrTestPrivSeqEntity str1 = new StrTestPrivSeqEntity( "a" ); StrTestPrivSeqEntity str2 = new StrTestPrivSeqEntity( "b" ); @@ -51,75 +48,65 @@ public void initData() { TernaryMapEntity map2 = new TernaryMapEntity(); // Revision 1 (map1: initialy one mapping int1 -> str1, map2: empty) - em.getTransaction().begin(); - - em.persist( str1 ); - em.persist( str2 ); - em.persist( int1 ); - em.persist( int2 ); + scope.inTransaction( em -> { + em.persist( str1 ); + em.persist( str2 ); + em.persist( int1 ); + em.persist( int2 ); - map1.getMap().put( int1, str1 ); + map1.getMap().put( int1, str1 ); - em.persist( map1 ); - em.persist( map2 ); - - em.getTransaction().commit(); + em.persist( map1 ); + em.persist( map2 ); + } ); // Revision 2 (map1: replacing the mapping, map2: adding two mappings) + scope.inTransaction( em -> { + TernaryMapEntity map1Ref = em.find( TernaryMapEntity.class, map1.getId() ); + TernaryMapEntity map2Ref = em.find( TernaryMapEntity.class, map2.getId() ); - em.getTransaction().begin(); - - map1 = em.find( TernaryMapEntity.class, map1.getId() ); - map2 = em.find( TernaryMapEntity.class, map2.getId() ); + StrTestPrivSeqEntity str1Ref = em.find( StrTestPrivSeqEntity.class, str1.getId() ); + StrTestPrivSeqEntity str2Ref = em.find( StrTestPrivSeqEntity.class, str2.getId() ); - str1 = em.find( StrTestPrivSeqEntity.class, str1.getId() ); - str2 = em.find( StrTestPrivSeqEntity.class, str2.getId() ); + IntTestPrivSeqEntity int1Ref = em.find( IntTestPrivSeqEntity.class, int1.getId() ); + IntTestPrivSeqEntity int2Ref = em.find( IntTestPrivSeqEntity.class, int2.getId() ); - int1 = em.find( IntTestPrivSeqEntity.class, int1.getId() ); - int2 = em.find( IntTestPrivSeqEntity.class, int2.getId() ); + map1Ref.getMap().put( int1Ref, str2Ref ); - map1.getMap().put( int1, str2 ); - - map2.getMap().put( int1, str1 ); - map2.getMap().put( int2, str1 ); - - em.getTransaction().commit(); + map2Ref.getMap().put( int1Ref, str1Ref ); + map2Ref.getMap().put( int2Ref, str1Ref ); + } ); // Revision 3 (map1: removing a non-existing mapping, adding an existing mapping - no changes, map2: removing a mapping) - em.getTransaction().begin(); - - map1 = em.find( TernaryMapEntity.class, map1.getId() ); - map2 = em.find( TernaryMapEntity.class, map2.getId() ); - - str2 = em.find( StrTestPrivSeqEntity.class, str2.getId() ); + scope.inTransaction( em -> { + TernaryMapEntity map1Ref = em.find( TernaryMapEntity.class, map1.getId() ); + TernaryMapEntity map2Ref = em.find( TernaryMapEntity.class, map2.getId() ); - int1 = em.find( IntTestPrivSeqEntity.class, int1.getId() ); - int2 = em.find( IntTestPrivSeqEntity.class, int2.getId() ); + StrTestPrivSeqEntity str2Ref = em.find( StrTestPrivSeqEntity.class, str2.getId() ); - map1.getMap().remove( int2 ); - map1.getMap().put( int1, str2 ); + IntTestPrivSeqEntity int1Ref = em.find( IntTestPrivSeqEntity.class, int1.getId() ); + IntTestPrivSeqEntity int2Ref = em.find( IntTestPrivSeqEntity.class, int2.getId() ); - map2.getMap().remove( int1 ); + map1Ref.getMap().remove( int2Ref ); + map1Ref.getMap().put( int1Ref, str2Ref ); - em.getTransaction().commit(); + map2Ref.getMap().remove( int1Ref ); + } ); // Revision 4 (map1: adding a mapping, map2: adding a mapping) - em.getTransaction().begin(); + scope.inTransaction( em -> { + TernaryMapEntity map1Ref = em.find( TernaryMapEntity.class, map1.getId() ); + TernaryMapEntity map2Ref = em.find( TernaryMapEntity.class, map2.getId() ); - map1 = em.find( TernaryMapEntity.class, map1.getId() ); - map2 = em.find( TernaryMapEntity.class, map2.getId() ); + StrTestPrivSeqEntity str2Ref = em.find( StrTestPrivSeqEntity.class, str2.getId() ); - str2 = em.find( StrTestPrivSeqEntity.class, str2.getId() ); + IntTestPrivSeqEntity int1Ref = em.find( IntTestPrivSeqEntity.class, int1.getId() ); + IntTestPrivSeqEntity int2Ref = em.find( IntTestPrivSeqEntity.class, int2.getId() ); - int1 = em.find( IntTestPrivSeqEntity.class, int1.getId() ); - int2 = em.find( IntTestPrivSeqEntity.class, int2.getId() ); + map1Ref.getMap().put( int2Ref, str2Ref ); - map1.getMap().put( int2, str2 ); - - map2.getMap().put( int1, str2 ); - - em.getTransaction().commit(); - // + map2Ref.getMap().put( int1Ref, str2Ref ); + } ); map1_id = map1.getId(); map2_id = map2.getId(); @@ -132,54 +119,63 @@ public void initData() { } @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2, 4 ).equals( getAuditReader().getRevisions( TernaryMapEntity.class, map1_id ) ); - assert Arrays.asList( 1, 2, 3, 4 ).equals( getAuditReader().getRevisions( TernaryMapEntity.class, map2_id ) ); - - assert Arrays.asList( 1 ).equals( getAuditReader().getRevisions( StrTestPrivSeqEntity.class, str1_id ) ); - assert Arrays.asList( 1 ).equals( getAuditReader().getRevisions( StrTestPrivSeqEntity.class, str2_id ) ); - - assert Arrays.asList( 1 ).equals( getAuditReader().getRevisions( IntTestPrivSeqEntity.class, int1_id ) ); - assert Arrays.asList( 1 ).equals( getAuditReader().getRevisions( IntTestPrivSeqEntity.class, int2_id ) ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1, 2, 4 ), auditReader.getRevisions( TernaryMapEntity.class, map1_id ) ); + assertEquals( Arrays.asList( 1, 2, 3, 4 ), auditReader.getRevisions( TernaryMapEntity.class, map2_id ) ); + + assertEquals( Arrays.asList( 1 ), auditReader.getRevisions( StrTestPrivSeqEntity.class, str1_id ) ); + assertEquals( Arrays.asList( 1 ), auditReader.getRevisions( StrTestPrivSeqEntity.class, str2_id ) ); + + assertEquals( Arrays.asList( 1 ), auditReader.getRevisions( IntTestPrivSeqEntity.class, int1_id ) ); + assertEquals( Arrays.asList( 1 ), auditReader.getRevisions( IntTestPrivSeqEntity.class, int2_id ) ); + } ); } @Test - @SkipForDialect(value = HSQLDialect.class, comment = "No idea why this fails. Looks like a HSQLDB bug") - public void testHistoryOfMap1() { - StrTestPrivSeqEntity str1 = getEntityManager().find( StrTestPrivSeqEntity.class, str1_id ); - StrTestPrivSeqEntity str2 = getEntityManager().find( StrTestPrivSeqEntity.class, str2_id ); - - IntTestPrivSeqEntity int1 = getEntityManager().find( IntTestPrivSeqEntity.class, int1_id ); - IntTestPrivSeqEntity int2 = getEntityManager().find( IntTestPrivSeqEntity.class, int2_id ); - - TernaryMapEntity rev1 = getAuditReader().find( TernaryMapEntity.class, map1_id, 1 ); - TernaryMapEntity rev2 = getAuditReader().find( TernaryMapEntity.class, map1_id, 2 ); - TernaryMapEntity rev3 = getAuditReader().find( TernaryMapEntity.class, map1_id, 3 ); - TernaryMapEntity rev4 = getAuditReader().find( TernaryMapEntity.class, map1_id, 4 ); - - Assert.assertEquals( TestTools.makeMap( int1, str1 ), rev1.getMap() ); - Assert.assertEquals( TestTools.makeMap( int1, str2 ), rev2.getMap() ); - Assert.assertEquals( TestTools.makeMap( int1, str2 ), rev3.getMap() ); - Assert.assertEquals( TestTools.makeMap( int1, str2, int2, str2 ), rev4.getMap() ); + @SkipForDialect(dialectClass = HSQLDialect.class, reason = "No idea why this fails. Looks like a HSQLDB bug") + public void testHistoryOfMap1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + StrTestPrivSeqEntity str1 = em.find( StrTestPrivSeqEntity.class, str1_id ); + StrTestPrivSeqEntity str2 = em.find( StrTestPrivSeqEntity.class, str2_id ); + + IntTestPrivSeqEntity int1 = em.find( IntTestPrivSeqEntity.class, int1_id ); + IntTestPrivSeqEntity int2 = em.find( IntTestPrivSeqEntity.class, int2_id ); + + TernaryMapEntity rev1 = auditReader.find( TernaryMapEntity.class, map1_id, 1 ); + TernaryMapEntity rev2 = auditReader.find( TernaryMapEntity.class, map1_id, 2 ); + TernaryMapEntity rev3 = auditReader.find( TernaryMapEntity.class, map1_id, 3 ); + TernaryMapEntity rev4 = auditReader.find( TernaryMapEntity.class, map1_id, 4 ); + + assertEquals( TestTools.makeMap( int1, str1 ), rev1.getMap() ); + assertEquals( TestTools.makeMap( int1, str2 ), rev2.getMap() ); + assertEquals( TestTools.makeMap( int1, str2 ), rev3.getMap() ); + assertEquals( TestTools.makeMap( int1, str2, int2, str2 ), rev4.getMap() ); + } ); } @Test - @SkipForDialect(value = HSQLDialect.class, comment = "No idea why this fails. Looks like a HSQLDB bug") - public void testHistoryOfMap2() { - StrTestPrivSeqEntity str1 = getEntityManager().find( StrTestPrivSeqEntity.class, str1_id ); - StrTestPrivSeqEntity str2 = getEntityManager().find( StrTestPrivSeqEntity.class, str2_id ); - - IntTestPrivSeqEntity int1 = getEntityManager().find( IntTestPrivSeqEntity.class, int1_id ); - IntTestPrivSeqEntity int2 = getEntityManager().find( IntTestPrivSeqEntity.class, int2_id ); - - TernaryMapEntity rev1 = getAuditReader().find( TernaryMapEntity.class, map2_id, 1 ); - TernaryMapEntity rev2 = getAuditReader().find( TernaryMapEntity.class, map2_id, 2 ); - TernaryMapEntity rev3 = getAuditReader().find( TernaryMapEntity.class, map2_id, 3 ); - TernaryMapEntity rev4 = getAuditReader().find( TernaryMapEntity.class, map2_id, 4 ); - - assert rev1.getMap().equals( TestTools.makeMap() ); - assert rev2.getMap().equals( TestTools.makeMap( int1, str1, int2, str1 ) ); - assert rev3.getMap().equals( TestTools.makeMap( int2, str1 ) ); - assert rev4.getMap().equals( TestTools.makeMap( int1, str2, int2, str1 ) ); + @SkipForDialect(dialectClass = HSQLDialect.class, reason = "No idea why this fails. Looks like a HSQLDB bug") + public void testHistoryOfMap2(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + StrTestPrivSeqEntity str1 = em.find( StrTestPrivSeqEntity.class, str1_id ); + StrTestPrivSeqEntity str2 = em.find( StrTestPrivSeqEntity.class, str2_id ); + + IntTestPrivSeqEntity int1 = em.find( IntTestPrivSeqEntity.class, int1_id ); + IntTestPrivSeqEntity int2 = em.find( IntTestPrivSeqEntity.class, int2_id ); + + TernaryMapEntity rev1 = auditReader.find( TernaryMapEntity.class, map2_id, 1 ); + TernaryMapEntity rev2 = auditReader.find( TernaryMapEntity.class, map2_id, 2 ); + TernaryMapEntity rev3 = auditReader.find( TernaryMapEntity.class, map2_id, 3 ); + TernaryMapEntity rev4 = auditReader.find( TernaryMapEntity.class, map2_id, 4 ); + + assert rev1.getMap().equals( TestTools.makeMap() ); + assert rev2.getMap().equals( TestTools.makeMap( int1, str1, int2, str1 ) ); + assert rev3.getMap().equals( TestTools.makeMap( int2, str1 ) ); + assert rev4.getMap().equals( TestTools.makeMap( int1, str2, int2, str1 ) ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/ternary/TernaryMapFlush.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/ternary/TernaryMapFlush.java index d71e8c5c7b15..2e2a95a1c4ba 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/ternary/TernaryMapFlush.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/ternary/TernaryMapFlush.java @@ -6,40 +6,36 @@ import java.util.Arrays; import java.util.HashMap; -import jakarta.persistence.EntityManager; import org.hibernate.dialect.HSQLDialect; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.orm.test.envers.entities.IntTestPrivSeqEntity; import org.hibernate.orm.test.envers.entities.StrTestPrivSeqEntity; import org.hibernate.orm.test.envers.tools.TestTools; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; +import org.hibernate.testing.orm.junit.SkipForDialect; -import org.hibernate.testing.SkipForDialect; -import org.junit.Test; +import org.junit.jupiter.api.Test; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Adam Warski (adam at warski dot org) */ -public class TernaryMapFlush extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {TernaryMapEntity.class, StrTestPrivSeqEntity.class, IntTestPrivSeqEntity.class}) +public class TernaryMapFlush { private Integer str1_id; private Integer str2_id; private Integer int1_id; private Integer int2_id; private Integer map1_id; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {TernaryMapEntity.class, StrTestPrivSeqEntity.class, IntTestPrivSeqEntity.class}; - } - - @Test - @Priority(10) - public void createData() { - EntityManager em = getEntityManager(); - + @BeforeClassTemplate + public void createData(EntityManagerFactoryScope scope) { StrTestPrivSeqEntity str1 = new StrTestPrivSeqEntity( "a" ); StrTestPrivSeqEntity str2 = new StrTestPrivSeqEntity( "b" ); IntTestPrivSeqEntity int1 = new IntTestPrivSeqEntity( 1 ); @@ -47,53 +43,43 @@ public void createData() { TernaryMapEntity map1 = new TernaryMapEntity(); // Revision 1 (int1 -> str1) - em.getTransaction().begin(); + scope.inTransaction( em -> { + em.persist( str1 ); + em.persist( str2 ); + em.persist( int1 ); + em.persist( int2 ); - em.persist( str1 ); - em.persist( str2 ); - em.persist( int1 ); - em.persist( int2 ); + map1.getMap().put( int1, str1 ); - map1.getMap().put( int1, str1 ); - - em.persist( map1 ); - - em.getTransaction().commit(); + em.persist( map1 ); + } ); // Revision 2 (removing int1->str1, flushing, adding int1->str1 again and a new int2->str2 mapping to force a change) + scope.inTransaction( em -> { + TernaryMapEntity map1Ref = em.find( TernaryMapEntity.class, map1.getId() ); + StrTestPrivSeqEntity str1Ref = em.find( StrTestPrivSeqEntity.class, str1.getId() ); + IntTestPrivSeqEntity int1Ref = em.find( IntTestPrivSeqEntity.class, int1.getId() ); - em.getTransaction().begin(); - - map1 = em.find( TernaryMapEntity.class, map1.getId() ); - str1 = em.find( StrTestPrivSeqEntity.class, str1.getId() ); - int1 = em.find( IntTestPrivSeqEntity.class, int1.getId() ); + map1Ref.setMap( new HashMap() ); - map1.setMap( new HashMap() ); + em.flush(); - em.flush(); - - map1.getMap().put( int1, str1 ); - map1.getMap().put( int2, str2 ); - - em.getTransaction().commit(); + map1Ref.getMap().put( int1Ref, str1Ref ); + map1Ref.getMap().put( int2, str2 ); + } ); // Revision 3 (removing int1->str1, flushing, overwriting int2->str1) + scope.inTransaction( em -> { + TernaryMapEntity map1Ref = em.find( TernaryMapEntity.class, map1.getId() ); + StrTestPrivSeqEntity str1Ref = em.find( StrTestPrivSeqEntity.class, str1.getId() ); + IntTestPrivSeqEntity int1Ref = em.find( IntTestPrivSeqEntity.class, int1.getId() ); - em.getTransaction().begin(); - - map1 = em.find( TernaryMapEntity.class, map1.getId() ); - str1 = em.find( StrTestPrivSeqEntity.class, str1.getId() ); - int1 = em.find( IntTestPrivSeqEntity.class, int1.getId() ); - - map1.getMap().remove( int1 ); - - em.flush(); - - map1.getMap().put( int2, str1 ); + map1Ref.getMap().remove( int1Ref ); - em.getTransaction().commit(); + em.flush(); - // + map1Ref.getMap().put( int2, str1Ref ); + } ); map1_id = map1.getId(); str1_id = str1.getId(); @@ -103,28 +89,34 @@ public void createData() { } @Test - public void testRevisionsCounts() { - assertEquals( Arrays.asList( 1, 2, 3 ), getAuditReader().getRevisions( TernaryMapEntity.class, map1_id ) ); - assertEquals( Arrays.asList( 1 ), getAuditReader().getRevisions( StrTestPrivSeqEntity.class, str1_id ) ); - assertEquals( Arrays.asList( 1 ), getAuditReader().getRevisions( StrTestPrivSeqEntity.class, str2_id ) ); - assertEquals( Arrays.asList( 1 ), getAuditReader().getRevisions( IntTestPrivSeqEntity.class, int1_id ) ); - assertEquals( Arrays.asList( 1 ), getAuditReader().getRevisions( IntTestPrivSeqEntity.class, int2_id ) ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1, 2, 3 ), auditReader.getRevisions( TernaryMapEntity.class, map1_id ) ); + assertEquals( Arrays.asList( 1 ), auditReader.getRevisions( StrTestPrivSeqEntity.class, str1_id ) ); + assertEquals( Arrays.asList( 1 ), auditReader.getRevisions( StrTestPrivSeqEntity.class, str2_id ) ); + assertEquals( Arrays.asList( 1 ), auditReader.getRevisions( IntTestPrivSeqEntity.class, int1_id ) ); + assertEquals( Arrays.asList( 1 ), auditReader.getRevisions( IntTestPrivSeqEntity.class, int2_id ) ); + } ); } @Test - @SkipForDialect(value = HSQLDialect.class, comment = "No idea why this fails. Looks like a HSQLDB bug") - public void testHistoryOfMap1() { - StrTestPrivSeqEntity str1 = getEntityManager().find( StrTestPrivSeqEntity.class, str1_id ); - StrTestPrivSeqEntity str2 = getEntityManager().find( StrTestPrivSeqEntity.class, str2_id ); - IntTestPrivSeqEntity int1 = getEntityManager().find( IntTestPrivSeqEntity.class, int1_id ); - IntTestPrivSeqEntity int2 = getEntityManager().find( IntTestPrivSeqEntity.class, int2_id ); - - TernaryMapEntity rev1 = getAuditReader().find( TernaryMapEntity.class, map1_id, 1 ); - TernaryMapEntity rev2 = getAuditReader().find( TernaryMapEntity.class, map1_id, 2 ); - TernaryMapEntity rev3 = getAuditReader().find( TernaryMapEntity.class, map1_id, 3 ); - - assertEquals( rev1.getMap(), TestTools.makeMap( int1, str1 ) ); - assertEquals( rev2.getMap(), TestTools.makeMap( int1, str1, int2, str2 ) ); - assertEquals( rev3.getMap(), TestTools.makeMap( int2, str1 ) ); + @SkipForDialect(dialectClass = HSQLDialect.class, reason = "No idea why this fails. Looks like a HSQLDB bug") + public void testHistoryOfMap1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + StrTestPrivSeqEntity str1 = em.find( StrTestPrivSeqEntity.class, str1_id ); + StrTestPrivSeqEntity str2 = em.find( StrTestPrivSeqEntity.class, str2_id ); + IntTestPrivSeqEntity int1 = em.find( IntTestPrivSeqEntity.class, int1_id ); + IntTestPrivSeqEntity int2 = em.find( IntTestPrivSeqEntity.class, int2_id ); + + TernaryMapEntity rev1 = auditReader.find( TernaryMapEntity.class, map1_id, 1 ); + TernaryMapEntity rev2 = auditReader.find( TernaryMapEntity.class, map1_id, 2 ); + TernaryMapEntity rev3 = auditReader.find( TernaryMapEntity.class, map1_id, 3 ); + + assertEquals( rev1.getMap(), TestTools.makeMap( int1, str1 ) ); + assertEquals( rev2.getMap(), TestTools.makeMap( int1, str1, int2, str2 ) ); + assertEquals( rev3.getMap(), TestTools.makeMap( int2, str1 ) ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/unidirectional/BasicUniList.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/unidirectional/BasicUniList.java index 0376981a95b5..b85cf6f25ad5 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/unidirectional/BasicUniList.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/unidirectional/BasicUniList.java @@ -7,36 +7,34 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; -import jakarta.persistence.EntityManager; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.orm.test.envers.entities.StrTestEntity; import org.hibernate.orm.test.envers.entities.manytomany.unidirectional.ListUniEntity; import org.hibernate.orm.test.envers.tools.TestTools; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; -import org.junit.Test; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Adam Warski (adam at warski dot org) */ -public class BasicUniList extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {ListUniEntity.class, StrTestEntity.class}) +public class BasicUniList { private Integer ed1_id; private Integer ed2_id; private Integer ing1_id; private Integer ing2_id; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {ListUniEntity.class, StrTestEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { StrTestEntity ed1 = new StrTestEntity( "data_ed_1" ); StrTestEntity ed2 = new StrTestEntity( "data_ed_2" ); @@ -44,65 +42,50 @@ public void initData() { ListUniEntity ing2 = new ListUniEntity( 4, "data_ing_2" ); // Revision 1 - em.getTransaction().begin(); - - em.persist( ed1 ); - em.persist( ed2 ); - em.persist( ing1 ); - em.persist( ing2 ); - - em.getTransaction().commit(); + scope.inTransaction( em -> { + em.persist( ed1 ); + em.persist( ed2 ); + em.persist( ing1 ); + em.persist( ing2 ); + } ); // Revision 2 + scope.inTransaction( em -> { + ListUniEntity ing1Ref = em.find( ListUniEntity.class, ing1.getId() ); + ListUniEntity ing2Ref = em.find( ListUniEntity.class, ing2.getId() ); + StrTestEntity ed1Ref = em.find( StrTestEntity.class, ed1.getId() ); + StrTestEntity ed2Ref = em.find( StrTestEntity.class, ed2.getId() ); - em.getTransaction().begin(); - - ing1 = em.find( ListUniEntity.class, ing1.getId() ); - ing2 = em.find( ListUniEntity.class, ing2.getId() ); - ed1 = em.find( StrTestEntity.class, ed1.getId() ); - ed2 = em.find( StrTestEntity.class, ed2.getId() ); - - ing1.setReferences( new ArrayList() ); - ing1.getReferences().add( ed1 ); + ing1Ref.setReferences( new ArrayList() ); + ing1Ref.getReferences().add( ed1Ref ); - ing2.setReferences( new ArrayList() ); - ing2.getReferences().add( ed1 ); - ing2.getReferences().add( ed2 ); - - em.getTransaction().commit(); + ing2Ref.setReferences( new ArrayList() ); + ing2Ref.getReferences().add( ed1Ref ); + ing2Ref.getReferences().add( ed2Ref ); + } ); // Revision 3 - em.getTransaction().begin(); - - ing1 = em.find( ListUniEntity.class, ing1.getId() ); - ed2 = em.find( StrTestEntity.class, ed2.getId() ); - ed1 = em.find( StrTestEntity.class, ed1.getId() ); - - ing1.getReferences().add( ed2 ); + scope.inTransaction( em -> { + ListUniEntity ing1Ref = em.find( ListUniEntity.class, ing1.getId() ); + StrTestEntity ed2Ref = em.find( StrTestEntity.class, ed2.getId() ); - em.getTransaction().commit(); + ing1Ref.getReferences().add( ed2Ref ); + } ); // Revision 4 - em.getTransaction().begin(); - - ing1 = em.find( ListUniEntity.class, ing1.getId() ); - ed2 = em.find( StrTestEntity.class, ed2.getId() ); - ed1 = em.find( StrTestEntity.class, ed1.getId() ); - - ing1.getReferences().remove( ed1 ); + scope.inTransaction( em -> { + ListUniEntity ing1Ref = em.find( ListUniEntity.class, ing1.getId() ); + StrTestEntity ed1Ref = em.find( StrTestEntity.class, ed1.getId() ); - em.getTransaction().commit(); + ing1Ref.getReferences().remove( ed1Ref ); + } ); // Revision 5 - em.getTransaction().begin(); + scope.inTransaction( em -> { + ListUniEntity ing1Ref = em.find( ListUniEntity.class, ing1.getId() ); - ing1 = em.find( ListUniEntity.class, ing1.getId() ); - - ing1.setReferences( null ); - - em.getTransaction().commit(); - - // + ing1Ref.setReferences( null ); + } ); ed1_id = ed1.getId(); ed2_id = ed2.getId(); @@ -112,47 +95,56 @@ public void initData() { } @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1 ).equals( getAuditReader().getRevisions( StrTestEntity.class, ed1_id ) ); - assert Arrays.asList( 1 ).equals( getAuditReader().getRevisions( StrTestEntity.class, ed2_id ) ); - - assert Arrays.asList( 1, 2, 3, 4, 5 ).equals( getAuditReader().getRevisions( ListUniEntity.class, ing1_id ) ); - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( ListUniEntity.class, ing2_id ) ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1 ), auditReader.getRevisions( StrTestEntity.class, ed1_id ) ); + assertEquals( Arrays.asList( 1 ), auditReader.getRevisions( StrTestEntity.class, ed2_id ) ); + + assertEquals( Arrays.asList( 1, 2, 3, 4, 5 ), auditReader.getRevisions( ListUniEntity.class, ing1_id ) ); + assertEquals( Arrays.asList( 1, 2 ), auditReader.getRevisions( ListUniEntity.class, ing2_id ) ); + } ); } @Test - public void testHistoryOfEdIng1() { - StrTestEntity ed1 = getEntityManager().find( StrTestEntity.class, ed1_id ); - StrTestEntity ed2 = getEntityManager().find( StrTestEntity.class, ed2_id ); - - ListUniEntity rev1 = getAuditReader().find( ListUniEntity.class, ing1_id, 1 ); - ListUniEntity rev2 = getAuditReader().find( ListUniEntity.class, ing1_id, 2 ); - ListUniEntity rev3 = getAuditReader().find( ListUniEntity.class, ing1_id, 3 ); - ListUniEntity rev4 = getAuditReader().find( ListUniEntity.class, ing1_id, 4 ); - ListUniEntity rev5 = getAuditReader().find( ListUniEntity.class, ing1_id, 5 ); - - assert rev1.getReferences().equals( Collections.EMPTY_LIST ); - assert TestTools.checkCollection( rev2.getReferences(), ed1 ); - assert TestTools.checkCollection( rev3.getReferences(), ed1, ed2 ); - assert TestTools.checkCollection( rev4.getReferences(), ed2 ); - assert rev5.getReferences().equals( Collections.EMPTY_LIST ); + public void testHistoryOfEdIng1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + StrTestEntity ed1 = em.find( StrTestEntity.class, ed1_id ); + StrTestEntity ed2 = em.find( StrTestEntity.class, ed2_id ); + + ListUniEntity rev1 = auditReader.find( ListUniEntity.class, ing1_id, 1 ); + ListUniEntity rev2 = auditReader.find( ListUniEntity.class, ing1_id, 2 ); + ListUniEntity rev3 = auditReader.find( ListUniEntity.class, ing1_id, 3 ); + ListUniEntity rev4 = auditReader.find( ListUniEntity.class, ing1_id, 4 ); + ListUniEntity rev5 = auditReader.find( ListUniEntity.class, ing1_id, 5 ); + + assert rev1.getReferences().equals( Collections.EMPTY_LIST ); + assert TestTools.checkCollection( rev2.getReferences(), ed1 ); + assert TestTools.checkCollection( rev3.getReferences(), ed1, ed2 ); + assert TestTools.checkCollection( rev4.getReferences(), ed2 ); + assert rev5.getReferences().equals( Collections.EMPTY_LIST ); + } ); } @Test - public void testHistoryOfEdIng2() { - StrTestEntity ed1 = getEntityManager().find( StrTestEntity.class, ed1_id ); - StrTestEntity ed2 = getEntityManager().find( StrTestEntity.class, ed2_id ); - - ListUniEntity rev1 = getAuditReader().find( ListUniEntity.class, ing2_id, 1 ); - ListUniEntity rev2 = getAuditReader().find( ListUniEntity.class, ing2_id, 2 ); - ListUniEntity rev3 = getAuditReader().find( ListUniEntity.class, ing2_id, 3 ); - ListUniEntity rev4 = getAuditReader().find( ListUniEntity.class, ing2_id, 4 ); - ListUniEntity rev5 = getAuditReader().find( ListUniEntity.class, ing2_id, 5 ); - - assert rev1.getReferences().equals( Collections.EMPTY_LIST ); - assert TestTools.checkCollection( rev2.getReferences(), ed1, ed2 ); - assert TestTools.checkCollection( rev3.getReferences(), ed1, ed2 ); - assert TestTools.checkCollection( rev4.getReferences(), ed1, ed2 ); - assert TestTools.checkCollection( rev5.getReferences(), ed1, ed2 ); + public void testHistoryOfEdIng2(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + StrTestEntity ed1 = em.find( StrTestEntity.class, ed1_id ); + StrTestEntity ed2 = em.find( StrTestEntity.class, ed2_id ); + + ListUniEntity rev1 = auditReader.find( ListUniEntity.class, ing2_id, 1 ); + ListUniEntity rev2 = auditReader.find( ListUniEntity.class, ing2_id, 2 ); + ListUniEntity rev3 = auditReader.find( ListUniEntity.class, ing2_id, 3 ); + ListUniEntity rev4 = auditReader.find( ListUniEntity.class, ing2_id, 4 ); + ListUniEntity rev5 = auditReader.find( ListUniEntity.class, ing2_id, 5 ); + + assert rev1.getReferences().equals( Collections.EMPTY_LIST ); + assert TestTools.checkCollection( rev2.getReferences(), ed1, ed2 ); + assert TestTools.checkCollection( rev3.getReferences(), ed1, ed2 ); + assert TestTools.checkCollection( rev4.getReferences(), ed1, ed2 ); + assert TestTools.checkCollection( rev5.getReferences(), ed1, ed2 ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/unidirectional/BasicUniMap.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/unidirectional/BasicUniMap.java index 0df9713919cd..28c3f2b36cee 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/unidirectional/BasicUniMap.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/unidirectional/BasicUniMap.java @@ -6,82 +6,70 @@ import java.util.Arrays; import java.util.HashMap; -import jakarta.persistence.EntityManager; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.orm.test.envers.entities.StrTestEntity; import org.hibernate.orm.test.envers.entities.manytomany.unidirectional.MapUniEntity; import org.hibernate.orm.test.envers.tools.TestTools; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; -import org.junit.Test; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Adam Warski (adam at warski dot org) */ -public class BasicUniMap extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {StrTestEntity.class, MapUniEntity.class}) +public class BasicUniMap { private Integer str1_id; private Integer str2_id; private Integer coll1_id; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {StrTestEntity.class, MapUniEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { StrTestEntity str1 = new StrTestEntity( "str1" ); StrTestEntity str2 = new StrTestEntity( "str2" ); MapUniEntity coll1 = new MapUniEntity( 3, "coll1" ); // Revision 1 (coll1: initialy one mapping) - em.getTransaction().begin(); - - em.persist( str1 ); - em.persist( str2 ); + scope.inTransaction( em -> { + em.persist( str1 ); + em.persist( str2 ); - coll1.setMap( new HashMap() ); - coll1.getMap().put( "1", str1 ); - em.persist( coll1 ); - - em.getTransaction().commit(); + coll1.setMap( new HashMap() ); + coll1.getMap().put( "1", str1 ); + em.persist( coll1 ); + } ); // Revision 2 (coll1: adding one mapping) - em.getTransaction().begin(); - - str2 = em.find( StrTestEntity.class, str2.getId() ); - coll1 = em.find( MapUniEntity.class, coll1.getId() ); + scope.inTransaction( em -> { + StrTestEntity str2Ref = em.find( StrTestEntity.class, str2.getId() ); + MapUniEntity coll1Ref = em.find( MapUniEntity.class, coll1.getId() ); - coll1.getMap().put( "2", str2 ); - - em.getTransaction().commit(); + coll1Ref.getMap().put( "2", str2Ref ); + } ); // Revision 3 (coll1: replacing one mapping) - em.getTransaction().begin(); - - str1 = em.find( StrTestEntity.class, str1.getId() ); - coll1 = em.find( MapUniEntity.class, coll1.getId() ); + scope.inTransaction( em -> { + StrTestEntity str1Ref = em.find( StrTestEntity.class, str1.getId() ); + MapUniEntity coll1Ref = em.find( MapUniEntity.class, coll1.getId() ); - coll1.getMap().put( "2", str1 ); - - em.getTransaction().commit(); + coll1Ref.getMap().put( "2", str1Ref ); + } ); // Revision 4 (coll1: removing one mapping) - em.getTransaction().begin(); - - coll1 = em.find( MapUniEntity.class, coll1.getId() ); + scope.inTransaction( em -> { + MapUniEntity coll1Ref = em.find( MapUniEntity.class, coll1.getId() ); - coll1.getMap().remove( "1" ); - - em.getTransaction().commit(); - - // + coll1Ref.getMap().remove( "1" ); + } ); str1_id = str1.getId(); str2_id = str2.getId(); @@ -90,31 +78,37 @@ public void initData() { } @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2, 3, 4 ).equals( getAuditReader().getRevisions( MapUniEntity.class, coll1_id ) ); - - assert Arrays.asList( 1 ).equals( getAuditReader().getRevisions( StrTestEntity.class, str1_id ) ); - assert Arrays.asList( 1 ).equals( getAuditReader().getRevisions( StrTestEntity.class, str2_id ) ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1, 2, 3, 4 ), auditReader.getRevisions( MapUniEntity.class, coll1_id ) ); + + assertEquals( Arrays.asList( 1 ), auditReader.getRevisions( StrTestEntity.class, str1_id ) ); + assertEquals( Arrays.asList( 1 ), auditReader.getRevisions( StrTestEntity.class, str2_id ) ); + } ); } @Test - public void testHistoryOfColl1() { - StrTestEntity str1 = getEntityManager().find( StrTestEntity.class, str1_id ); - StrTestEntity str2 = getEntityManager().find( StrTestEntity.class, str2_id ); - - MapUniEntity rev1 = getAuditReader().find( MapUniEntity.class, coll1_id, 1 ); - MapUniEntity rev2 = getAuditReader().find( MapUniEntity.class, coll1_id, 2 ); - MapUniEntity rev3 = getAuditReader().find( MapUniEntity.class, coll1_id, 3 ); - MapUniEntity rev4 = getAuditReader().find( MapUniEntity.class, coll1_id, 4 ); - - assert rev1.getMap().equals( TestTools.makeMap( "1", str1 ) ); - assert rev2.getMap().equals( TestTools.makeMap( "1", str1, "2", str2 ) ); - assert rev3.getMap().equals( TestTools.makeMap( "1", str1, "2", str1 ) ); - assert rev4.getMap().equals( TestTools.makeMap( "2", str1 ) ); - - assert "coll1".equals( rev1.getData() ); - assert "coll1".equals( rev2.getData() ); - assert "coll1".equals( rev3.getData() ); - assert "coll1".equals( rev4.getData() ); + public void testHistoryOfColl1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + StrTestEntity str1 = em.find( StrTestEntity.class, str1_id ); + StrTestEntity str2 = em.find( StrTestEntity.class, str2_id ); + + MapUniEntity rev1 = auditReader.find( MapUniEntity.class, coll1_id, 1 ); + MapUniEntity rev2 = auditReader.find( MapUniEntity.class, coll1_id, 2 ); + MapUniEntity rev3 = auditReader.find( MapUniEntity.class, coll1_id, 3 ); + MapUniEntity rev4 = auditReader.find( MapUniEntity.class, coll1_id, 4 ); + + assert rev1.getMap().equals( TestTools.makeMap( "1", str1 ) ); + assert rev2.getMap().equals( TestTools.makeMap( "1", str1, "2", str2 ) ); + assert rev3.getMap().equals( TestTools.makeMap( "1", str1, "2", str1 ) ); + assert rev4.getMap().equals( TestTools.makeMap( "2", str1 ) ); + + assert "coll1".equals( rev1.getData() ); + assert "coll1".equals( rev2.getData() ); + assert "coll1".equals( rev3.getData() ); + assert "coll1".equals( rev4.getData() ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/unidirectional/BasicUniSet.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/unidirectional/BasicUniSet.java index b9448d9ca91a..15388060aeef 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/unidirectional/BasicUniSet.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/unidirectional/BasicUniSet.java @@ -7,152 +7,143 @@ import java.util.Arrays; import java.util.Collections; import java.util.HashSet; -import jakarta.persistence.EntityManager; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.orm.test.envers.entities.StrTestEntity; import org.hibernate.orm.test.envers.entities.manytomany.unidirectional.SetUniEntity; import org.hibernate.orm.test.envers.tools.TestTools; -import org.junit.Test; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Adam Warski (adam at warski dot org) */ -public class BasicUniSet extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {SetUniEntity.class, StrTestEntity.class}) +public class BasicUniSet { private Integer ed1_id; private Integer ed2_id; private Integer ing1_id; private Integer ing2_id; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {SetUniEntity.class, StrTestEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - StrTestEntity ed1 = new StrTestEntity( "data_ed_1" ); - StrTestEntity ed2 = new StrTestEntity( "data_ed_2" ); - - SetUniEntity ing1 = new SetUniEntity( 3, "data_ing_1" ); - SetUniEntity ing2 = new SetUniEntity( 4, "data_ing_2" ); - + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Revision 1 - em.getTransaction().begin(); - - em.persist( ed1 ); - em.persist( ed2 ); - em.persist( ing1 ); - em.persist( ing2 ); + scope.inTransaction( em -> { + StrTestEntity ed1 = new StrTestEntity( "data_ed_1" ); + StrTestEntity ed2 = new StrTestEntity( "data_ed_2" ); - em.getTransaction().commit(); + SetUniEntity ing1 = new SetUniEntity( 3, "data_ing_1" ); + SetUniEntity ing2 = new SetUniEntity( 4, "data_ing_2" ); - // Revision 2 + em.persist( ed1 ); + em.persist( ed2 ); + em.persist( ing1 ); + em.persist( ing2 ); - em.getTransaction().begin(); + ed1_id = ed1.getId(); + ed2_id = ed2.getId(); + ing1_id = ing1.getId(); + ing2_id = ing2.getId(); + } ); - ing1 = em.find( SetUniEntity.class, ing1.getId() ); - ing2 = em.find( SetUniEntity.class, ing2.getId() ); - ed1 = em.find( StrTestEntity.class, ed1.getId() ); - ed2 = em.find( StrTestEntity.class, ed2.getId() ); - - ing1.setReferences( new HashSet() ); - ing1.getReferences().add( ed1 ); + // Revision 2 + scope.inTransaction( em -> { + SetUniEntity ing1 = em.find( SetUniEntity.class, ing1_id ); + SetUniEntity ing2 = em.find( SetUniEntity.class, ing2_id ); + StrTestEntity ed1 = em.find( StrTestEntity.class, ed1_id ); + StrTestEntity ed2 = em.find( StrTestEntity.class, ed2_id ); - ing2.setReferences( new HashSet() ); - ing2.getReferences().add( ed1 ); - ing2.getReferences().add( ed2 ); + ing1.setReferences( new HashSet() ); + ing1.getReferences().add( ed1 ); - em.getTransaction().commit(); + ing2.setReferences( new HashSet() ); + ing2.getReferences().add( ed1 ); + ing2.getReferences().add( ed2 ); + } ); // Revision 3 - em.getTransaction().begin(); + scope.inTransaction( em -> { + SetUniEntity ing1 = em.find( SetUniEntity.class, ing1_id ); + StrTestEntity ed2 = em.find( StrTestEntity.class, ed2_id ); - ing1 = em.find( SetUniEntity.class, ing1.getId() ); - ed2 = em.find( StrTestEntity.class, ed2.getId() ); - ed1 = em.find( StrTestEntity.class, ed1.getId() ); - - ing1.getReferences().add( ed2 ); - - em.getTransaction().commit(); + ing1.getReferences().add( ed2 ); + } ); // Revision 4 - em.getTransaction().begin(); - - ing1 = em.find( SetUniEntity.class, ing1.getId() ); - ed2 = em.find( StrTestEntity.class, ed2.getId() ); - ed1 = em.find( StrTestEntity.class, ed1.getId() ); + scope.inTransaction( em -> { + SetUniEntity ing1 = em.find( SetUniEntity.class, ing1_id ); + StrTestEntity ed1 = em.find( StrTestEntity.class, ed1_id ); - ing1.getReferences().remove( ed1 ); - - em.getTransaction().commit(); + ing1.getReferences().remove( ed1 ); + } ); // Revision 5 - em.getTransaction().begin(); - - ing1 = em.find( SetUniEntity.class, ing1.getId() ); + scope.inTransaction( em -> { + SetUniEntity ing1 = em.find( SetUniEntity.class, ing1_id ); - ing1.setReferences( null ); - - em.getTransaction().commit(); - - // - - ed1_id = ed1.getId(); - ed2_id = ed2.getId(); - - ing1_id = ing1.getId(); - ing2_id = ing2.getId(); + ing1.setReferences( null ); + } ); } @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1 ).equals( getAuditReader().getRevisions( StrTestEntity.class, ed1_id ) ); - assert Arrays.asList( 1 ).equals( getAuditReader().getRevisions( StrTestEntity.class, ed2_id ) ); - - assert Arrays.asList( 1, 2, 3, 4, 5 ).equals( getAuditReader().getRevisions( SetUniEntity.class, ing1_id ) ); - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( SetUniEntity.class, ing2_id ) ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1 ), auditReader.getRevisions( StrTestEntity.class, ed1_id ) ); + assertEquals( Arrays.asList( 1 ), auditReader.getRevisions( StrTestEntity.class, ed2_id ) ); + + assertEquals( Arrays.asList( 1, 2, 3, 4, 5 ), auditReader.getRevisions( SetUniEntity.class, ing1_id ) ); + assertEquals( Arrays.asList( 1, 2 ), auditReader.getRevisions( SetUniEntity.class, ing2_id ) ); + } ); } @Test - public void testHistoryOfEdIng1() { - StrTestEntity ed1 = getEntityManager().find( StrTestEntity.class, ed1_id ); - StrTestEntity ed2 = getEntityManager().find( StrTestEntity.class, ed2_id ); - - SetUniEntity rev1 = getAuditReader().find( SetUniEntity.class, ing1_id, 1 ); - SetUniEntity rev2 = getAuditReader().find( SetUniEntity.class, ing1_id, 2 ); - SetUniEntity rev3 = getAuditReader().find( SetUniEntity.class, ing1_id, 3 ); - SetUniEntity rev4 = getAuditReader().find( SetUniEntity.class, ing1_id, 4 ); - SetUniEntity rev5 = getAuditReader().find( SetUniEntity.class, ing1_id, 5 ); - - assert rev1.getReferences().equals( Collections.EMPTY_SET ); - assert rev2.getReferences().equals( TestTools.makeSet( ed1 ) ); - assert rev3.getReferences().equals( TestTools.makeSet( ed1, ed2 ) ); - assert rev4.getReferences().equals( TestTools.makeSet( ed2 ) ); - assert rev5.getReferences().equals( Collections.EMPTY_SET ); + public void testHistoryOfEdIng1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + StrTestEntity ed1 = em.find( StrTestEntity.class, ed1_id ); + StrTestEntity ed2 = em.find( StrTestEntity.class, ed2_id ); + + SetUniEntity rev1 = auditReader.find( SetUniEntity.class, ing1_id, 1 ); + SetUniEntity rev2 = auditReader.find( SetUniEntity.class, ing1_id, 2 ); + SetUniEntity rev3 = auditReader.find( SetUniEntity.class, ing1_id, 3 ); + SetUniEntity rev4 = auditReader.find( SetUniEntity.class, ing1_id, 4 ); + SetUniEntity rev5 = auditReader.find( SetUniEntity.class, ing1_id, 5 ); + + assertEquals( Collections.EMPTY_SET, rev1.getReferences() ); + assertEquals( TestTools.makeSet( ed1 ), rev2.getReferences() ); + assertEquals( TestTools.makeSet( ed1, ed2 ), rev3.getReferences() ); + assertEquals( TestTools.makeSet( ed2 ), rev4.getReferences() ); + assertEquals( Collections.EMPTY_SET, rev5.getReferences() ); + } ); } @Test - public void testHistoryOfEdIng2() { - StrTestEntity ed1 = getEntityManager().find( StrTestEntity.class, ed1_id ); - StrTestEntity ed2 = getEntityManager().find( StrTestEntity.class, ed2_id ); - - SetUniEntity rev1 = getAuditReader().find( SetUniEntity.class, ing2_id, 1 ); - SetUniEntity rev2 = getAuditReader().find( SetUniEntity.class, ing2_id, 2 ); - SetUniEntity rev3 = getAuditReader().find( SetUniEntity.class, ing2_id, 3 ); - SetUniEntity rev4 = getAuditReader().find( SetUniEntity.class, ing2_id, 4 ); - SetUniEntity rev5 = getAuditReader().find( SetUniEntity.class, ing2_id, 5 ); - - assert rev1.getReferences().equals( Collections.EMPTY_SET ); - assert rev2.getReferences().equals( TestTools.makeSet( ed1, ed2 ) ); - assert rev3.getReferences().equals( TestTools.makeSet( ed1, ed2 ) ); - assert rev4.getReferences().equals( TestTools.makeSet( ed1, ed2 ) ); - assert rev5.getReferences().equals( TestTools.makeSet( ed1, ed2 ) ); + public void testHistoryOfEdIng2(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + StrTestEntity ed1 = em.find( StrTestEntity.class, ed1_id ); + StrTestEntity ed2 = em.find( StrTestEntity.class, ed2_id ); + + SetUniEntity rev1 = auditReader.find( SetUniEntity.class, ing2_id, 1 ); + SetUniEntity rev2 = auditReader.find( SetUniEntity.class, ing2_id, 2 ); + SetUniEntity rev3 = auditReader.find( SetUniEntity.class, ing2_id, 3 ); + SetUniEntity rev4 = auditReader.find( SetUniEntity.class, ing2_id, 4 ); + SetUniEntity rev5 = auditReader.find( SetUniEntity.class, ing2_id, 5 ); + + assertEquals( Collections.EMPTY_SET, rev1.getReferences() ); + assertEquals( TestTools.makeSet( ed1, ed2 ), rev2.getReferences() ); + assertEquals( TestTools.makeSet( ed1, ed2 ), rev3.getReferences() ); + assertEquals( TestTools.makeSet( ed1, ed2 ), rev4.getReferences() ); + assertEquals( TestTools.makeSet( ed1, ed2 ), rev5.getReferences() ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/unidirectional/JoinTableDetachedTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/unidirectional/JoinTableDetachedTest.java index 009f101f6fc2..ff82935fcc8c 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/unidirectional/JoinTableDetachedTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/unidirectional/JoinTableDetachedTest.java @@ -7,141 +7,127 @@ import java.util.Arrays; import java.util.HashSet; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.orm.test.envers.entities.StrTestEntity; import org.hibernate.orm.test.envers.entities.manytomany.unidirectional.JoinTableEntity; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Assert; -import org.junit.Test; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; -import jakarta.persistence.EntityManager; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) */ @JiraKey(value = "HHH-8087") -public class JoinTableDetachedTest extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {JoinTableEntity.class, StrTestEntity.class}) +public class JoinTableDetachedTest { private Long collectionEntityId = null; private Integer element1Id = null; private Integer element2Id = null; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {JoinTableEntity.class, StrTestEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Revision 1 - addition - em.getTransaction().begin(); - JoinTableEntity collectionEntity = new JoinTableEntity( "some data" ); - StrTestEntity element1 = new StrTestEntity( "str1" ); - StrTestEntity element2 = new StrTestEntity( "str2" ); - collectionEntity.getReferences().add( element1 ); - collectionEntity.getReferences().add( element2 ); - em.persist( element1 ); - em.persist( element2 ); - em.persist( collectionEntity ); - em.getTransaction().commit(); - - collectionEntityId = collectionEntity.getId(); - element1Id = element1.getId(); - element2Id = element2.getId(); - - em.close(); - em = getEntityManager(); + scope.inTransaction( em -> { + JoinTableEntity collectionEntity = new JoinTableEntity( "some data" ); + StrTestEntity element1 = new StrTestEntity( "str1" ); + StrTestEntity element2 = new StrTestEntity( "str2" ); + collectionEntity.getReferences().add( element1 ); + collectionEntity.getReferences().add( element2 ); + em.persist( element1 ); + em.persist( element2 ); + em.persist( collectionEntity ); + + collectionEntityId = collectionEntity.getId(); + element1Id = element1.getId(); + element2Id = element2.getId(); + } ); // Revision 2 - simple modification - em.getTransaction().begin(); - collectionEntity = em.find( JoinTableEntity.class, collectionEntity.getId() ); - collectionEntity.setData( "some other data" ); - collectionEntity = em.merge( collectionEntity ); - em.getTransaction().commit(); - - em.close(); - em = getEntityManager(); + scope.inTransaction( em -> { + JoinTableEntity collectionEntity = em.find( JoinTableEntity.class, collectionEntityId ); + collectionEntity.setData( "some other data" ); + em.merge( collectionEntity ); + } ); // Revision 3 - remove detached object from collection - em.getTransaction().begin(); - collectionEntity = em.find( JoinTableEntity.class, collectionEntity.getId() ); - collectionEntity.getReferences().remove( element1 ); - collectionEntity = em.merge( collectionEntity ); - em.getTransaction().commit(); - - em.close(); - em = getEntityManager(); + final StrTestEntity element1 = new StrTestEntity( "str1", element1Id ); + scope.inTransaction( em -> { + JoinTableEntity collectionEntity = em.find( JoinTableEntity.class, collectionEntityId ); + collectionEntity.getReferences().remove( element1 ); + em.merge( collectionEntity ); + } ); // Revision 4 - replace the collection - em.getTransaction().begin(); - collectionEntity = em.find( JoinTableEntity.class, collectionEntity.getId() ); - collectionEntity.setReferences( new HashSet() ); - collectionEntity = em.merge( collectionEntity ); - em.getTransaction().commit(); - - em.close(); - em = getEntityManager(); + scope.inTransaction( em -> { + JoinTableEntity collectionEntity = em.find( JoinTableEntity.class, collectionEntityId ); + collectionEntity.setReferences( new HashSet() ); + em.merge( collectionEntity ); + } ); // Revision 5 - add to collection - em.getTransaction().begin(); - collectionEntity = em.find( JoinTableEntity.class, collectionEntity.getId() ); - collectionEntity.getReferences().add( element1 ); - collectionEntity = em.merge( collectionEntity ); - em.getTransaction().commit(); - - em.close(); + scope.inTransaction( em -> { + JoinTableEntity collectionEntity = em.find( JoinTableEntity.class, collectionEntityId ); + collectionEntity.getReferences().add( element1 ); + em.merge( collectionEntity ); + } ); } @Test - public void testRevisionsCounts() { - Assert.assertEquals( - Arrays.asList( 1, 2, 3, 4, 5 ), getAuditReader().getRevisions( - JoinTableEntity.class, - collectionEntityId - ) - ); - Assert.assertEquals( Arrays.asList( 1 ), getAuditReader().getRevisions( StrTestEntity.class, element1Id ) ); - Assert.assertEquals( Arrays.asList( 1 ), getAuditReader().getRevisions( StrTestEntity.class, element2Id ) ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1, 2, 3, 4, 5 ), + auditReader.getRevisions( JoinTableEntity.class, collectionEntityId ) ); + assertEquals( Arrays.asList( 1 ), auditReader.getRevisions( StrTestEntity.class, element1Id ) ); + assertEquals( Arrays.asList( 1 ), auditReader.getRevisions( StrTestEntity.class, element2Id ) ); + } ); } @Test - public void testHistoryOfCollectionEntity() { - // Revision 1 - JoinTableEntity collectionEntity = new JoinTableEntity( collectionEntityId, "some data" ); - StrTestEntity element1 = new StrTestEntity( "str1", element1Id ); - StrTestEntity element2 = new StrTestEntity( "str2", element2Id ); - collectionEntity.getReferences().add( element1 ); - collectionEntity.getReferences().add( element2 ); - JoinTableEntity ver1 = getAuditReader().find( JoinTableEntity.class, collectionEntityId, 1 ); - Assert.assertEquals( collectionEntity, ver1 ); - Assert.assertEquals( collectionEntity.getReferences(), ver1.getReferences() ); - - // Revision 2 - collectionEntity.setData( "some other data" ); - JoinTableEntity ver2 = getAuditReader().find( JoinTableEntity.class, collectionEntityId, 2 ); - Assert.assertEquals( collectionEntity, ver2 ); - Assert.assertEquals( collectionEntity.getReferences(), ver2.getReferences() ); - - // Revision 3 - collectionEntity.getReferences().remove( element1 ); - JoinTableEntity ver3 = getAuditReader().find( JoinTableEntity.class, collectionEntityId, 3 ); - Assert.assertEquals( collectionEntity, ver3 ); - Assert.assertEquals( collectionEntity.getReferences(), ver3.getReferences() ); - - // Revision 4 - collectionEntity.setReferences( new HashSet() ); - JoinTableEntity ver4 = getAuditReader().find( JoinTableEntity.class, collectionEntityId, 4 ); - Assert.assertEquals( collectionEntity, ver4 ); - Assert.assertEquals( collectionEntity.getReferences(), ver4.getReferences() ); - - // Revision 5 - collectionEntity.getReferences().add( element1 ); - JoinTableEntity ver5 = getAuditReader().find( JoinTableEntity.class, collectionEntityId, 5 ); - Assert.assertEquals( collectionEntity, ver5 ); - Assert.assertEquals( collectionEntity.getReferences(), ver5.getReferences() ); + public void testHistoryOfCollectionEntity(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + + // Revision 1 + JoinTableEntity collectionEntity = new JoinTableEntity( collectionEntityId, "some data" ); + StrTestEntity element1 = new StrTestEntity( "str1", element1Id ); + StrTestEntity element2 = new StrTestEntity( "str2", element2Id ); + collectionEntity.getReferences().add( element1 ); + collectionEntity.getReferences().add( element2 ); + JoinTableEntity ver1 = auditReader.find( JoinTableEntity.class, collectionEntityId, 1 ); + assertEquals( collectionEntity, ver1 ); + assertEquals( collectionEntity.getReferences(), ver1.getReferences() ); + + // Revision 2 + collectionEntity.setData( "some other data" ); + JoinTableEntity ver2 = auditReader.find( JoinTableEntity.class, collectionEntityId, 2 ); + assertEquals( collectionEntity, ver2 ); + assertEquals( collectionEntity.getReferences(), ver2.getReferences() ); + + // Revision 3 + collectionEntity.getReferences().remove( element1 ); + JoinTableEntity ver3 = auditReader.find( JoinTableEntity.class, collectionEntityId, 3 ); + assertEquals( collectionEntity, ver3 ); + assertEquals( collectionEntity.getReferences(), ver3.getReferences() ); + + // Revision 4 + collectionEntity.setReferences( new HashSet() ); + JoinTableEntity ver4 = auditReader.find( JoinTableEntity.class, collectionEntityId, 4 ); + assertEquals( collectionEntity, ver4 ); + assertEquals( collectionEntity.getReferences(), ver4.getReferences() ); + + // Revision 5 + collectionEntity.getReferences().add( element1 ); + JoinTableEntity ver5 = auditReader.find( JoinTableEntity.class, collectionEntityId, 5 ); + assertEquals( collectionEntity, ver5 ); + assertEquals( collectionEntity.getReferences(), ver5.getReferences() ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/unidirectional/M2MIndexedListNotAuditedTarget.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/unidirectional/M2MIndexedListNotAuditedTarget.java index 182653fede4d..20437ad4d63f 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/unidirectional/M2MIndexedListNotAuditedTarget.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/unidirectional/M2MIndexedListNotAuditedTarget.java @@ -6,19 +6,21 @@ import java.util.Arrays; import java.util.List; -import jakarta.persistence.EntityManager; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.orm.test.envers.entities.UnversionedStrTestEntity; import org.hibernate.orm.test.envers.entities.manytomany.unidirectional.M2MIndexedListTargetNotAuditedEntity; -import org.junit.Test; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; import static org.hibernate.orm.test.envers.tools.TestTools.checkCollection; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertTrue; /** * A test for auditing a many-to-many indexed list where the target entity is not audited. @@ -26,123 +28,127 @@ * @author Vladimir Klyushnikov * @author Adam Warski */ -public class M2MIndexedListNotAuditedTarget extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {UnversionedStrTestEntity.class, M2MIndexedListTargetNotAuditedEntity.class}) +public class M2MIndexedListNotAuditedTarget { private Integer itnae1_id; private Integer itnae2_id; private UnversionedStrTestEntity uste1; private UnversionedStrTestEntity uste2; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {UnversionedStrTestEntity.class, M2MIndexedListTargetNotAuditedEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - uste1 = new UnversionedStrTestEntity( "str1" ); - uste2 = new UnversionedStrTestEntity( "str2" ); - + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // No revision - em.getTransaction().begin(); - - em.persist( uste1 ); - em.persist( uste2 ); + scope.inTransaction( em -> { + uste1 = new UnversionedStrTestEntity( "str1" ); + uste2 = new UnversionedStrTestEntity( "str2" ); - em.getTransaction().commit(); + em.persist( uste1 ); + em.persist( uste2 ); + } ); // Revision 1 - em.getTransaction().begin(); + scope.inTransaction( em -> { + uste1 = em.find( UnversionedStrTestEntity.class, uste1.getId() ); + uste2 = em.find( UnversionedStrTestEntity.class, uste2.getId() ); - uste1 = em.find( UnversionedStrTestEntity.class, uste1.getId() ); - uste2 = em.find( UnversionedStrTestEntity.class, uste2.getId() ); + M2MIndexedListTargetNotAuditedEntity itnae1 = new M2MIndexedListTargetNotAuditedEntity( 1, "tnae1" ); - M2MIndexedListTargetNotAuditedEntity itnae1 = new M2MIndexedListTargetNotAuditedEntity( 1, "tnae1" ); + itnae1.getReferences().add( uste1 ); + itnae1.getReferences().add( uste2 ); - itnae1.getReferences().add( uste1 ); - itnae1.getReferences().add( uste2 ); + em.persist( itnae1 ); - em.persist( itnae1 ); - - em.getTransaction().commit(); + itnae1_id = itnae1.getId(); + } ); // Revision 2 - em.getTransaction().begin(); - - M2MIndexedListTargetNotAuditedEntity itnae2 = new M2MIndexedListTargetNotAuditedEntity( 2, "tnae2" ); + scope.inTransaction( em -> { + M2MIndexedListTargetNotAuditedEntity itnae2 = new M2MIndexedListTargetNotAuditedEntity( 2, "tnae2" ); - itnae2.getReferences().add( uste2 ); + itnae2.getReferences().add( uste2 ); - em.persist( itnae2 ); + em.persist( itnae2 ); - em.getTransaction().commit(); + itnae2_id = itnae2.getId(); + } ); // 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(); + scope.inTransaction( em -> { + M2MIndexedListTargetNotAuditedEntity itnae1 = em.find( + M2MIndexedListTargetNotAuditedEntity.class, + itnae1_id + ); + + itnae1.getReferences().set( 0, uste2 ); + itnae1.getReferences().set( 1, uste1 ); + } ); } @Test - public void testRevisionsCounts() { - List 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 ) ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + List revisions = auditReader.getRevisions( M2MIndexedListTargetNotAuditedEntity.class, itnae1_id ); + assertEquals( revisions, Arrays.asList( 1, 3 ) ); + + revisions = auditReader.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( checkCollection( rev1.getReferences(), uste1, uste2 ) ); - assertTrue( checkCollection( rev2.getReferences(), uste1, uste2 ) ); - assertTrue( checkCollection( rev3.getReferences(), uste2, uste1 ) ); + public void testHistory1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + + M2MIndexedListTargetNotAuditedEntity rev1 = auditReader.find( + M2MIndexedListTargetNotAuditedEntity.class, + itnae1_id, + 1 + ); + M2MIndexedListTargetNotAuditedEntity rev2 = auditReader.find( + M2MIndexedListTargetNotAuditedEntity.class, + itnae1_id, + 2 + ); + M2MIndexedListTargetNotAuditedEntity rev3 = auditReader.find( + M2MIndexedListTargetNotAuditedEntity.class, + itnae1_id, + 3 + ); + + assertTrue( checkCollection( rev1.getReferences(), uste1, uste2 ) ); + assertTrue( checkCollection( rev2.getReferences(), uste1, uste2 ) ); + assertTrue( checkCollection( 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( checkCollection( rev2.getReferences(), uste2 ) ); - assertTrue( checkCollection( rev3.getReferences(), uste2 ) ); + public void testHistory2(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + + M2MIndexedListTargetNotAuditedEntity rev1 = auditReader.find( + M2MIndexedListTargetNotAuditedEntity.class, + itnae2_id, + 1 + ); + M2MIndexedListTargetNotAuditedEntity rev2 = auditReader.find( + M2MIndexedListTargetNotAuditedEntity.class, + itnae2_id, + 2 + ); + M2MIndexedListTargetNotAuditedEntity rev3 = auditReader.find( + M2MIndexedListTargetNotAuditedEntity.class, + itnae2_id, + 3 + ); + + assertNull( rev1 ); + assertTrue( checkCollection( rev2.getReferences(), uste2 ) ); + assertTrue( checkCollection( rev3.getReferences(), uste2 ) ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/unidirectional/M2MRelationNotAuditedTarget.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/unidirectional/M2MRelationNotAuditedTarget.java index d05c7c8b824a..7101ac4eb641 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/unidirectional/M2MRelationNotAuditedTarget.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytomany/unidirectional/M2MRelationNotAuditedTarget.java @@ -7,152 +7,153 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; -import jakarta.persistence.EntityManager; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.orm.test.envers.entities.UnversionedStrTestEntity; import org.hibernate.orm.test.envers.entities.manytomany.unidirectional.M2MTargetNotAuditedEntity; -import org.junit.Test; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; import static org.hibernate.orm.test.envers.tools.TestTools.checkCollection; -import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; /** * A test for auditing a many-to-many relation where the target entity is not audited. * * @author Adam Warski */ -public class M2MRelationNotAuditedTarget extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {M2MTargetNotAuditedEntity.class, UnversionedStrTestEntity.class}) +public class M2MRelationNotAuditedTarget { private Integer tnae1_id; private Integer tnae2_id; private Integer uste1_id; private Integer uste2_id; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {M2MTargetNotAuditedEntity.class, UnversionedStrTestEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - UnversionedStrTestEntity uste1 = new UnversionedStrTestEntity( "str1" ); - UnversionedStrTestEntity uste2 = new UnversionedStrTestEntity( "str2" ); - + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // No revision - em.getTransaction().begin(); + scope.inTransaction( em -> { + UnversionedStrTestEntity uste1 = new UnversionedStrTestEntity( "str1" ); + UnversionedStrTestEntity uste2 = new UnversionedStrTestEntity( "str2" ); - em.persist( uste1 ); - em.persist( uste2 ); + em.persist( uste1 ); + em.persist( uste2 ); - em.getTransaction().commit(); + uste1_id = uste1.getId(); + uste2_id = uste2.getId(); + } ); // Revision 1 - em.getTransaction().begin(); - - uste1 = em.find( UnversionedStrTestEntity.class, uste1.getId() ); - uste2 = em.find( UnversionedStrTestEntity.class, uste2.getId() ); - - M2MTargetNotAuditedEntity tnae1 = new M2MTargetNotAuditedEntity( - 1, - "tnae1", - new ArrayList() - ); - M2MTargetNotAuditedEntity tnae2 = new M2MTargetNotAuditedEntity( - 2, - "tnae2", - new ArrayList() - ); - tnae2.getReferences().add( uste1 ); - tnae2.getReferences().add( uste2 ); - em.persist( tnae1 ); - em.persist( tnae2 ); - - em.getTransaction().commit(); + scope.inTransaction( em -> { + UnversionedStrTestEntity uste1 = em.find( UnversionedStrTestEntity.class, uste1_id ); + UnversionedStrTestEntity uste2 = em.find( UnversionedStrTestEntity.class, uste2_id ); + + M2MTargetNotAuditedEntity tnae1 = new M2MTargetNotAuditedEntity( + 1, + "tnae1", + new ArrayList() + ); + M2MTargetNotAuditedEntity tnae2 = new M2MTargetNotAuditedEntity( + 2, + "tnae2", + new ArrayList() + ); + tnae2.getReferences().add( uste1 ); + tnae2.getReferences().add( uste2 ); + em.persist( tnae1 ); + em.persist( tnae2 ); + + tnae1_id = tnae1.getId(); + tnae2_id = tnae2.getId(); + } ); // Revision 2 - em.getTransaction().begin(); - - tnae1 = em.find( M2MTargetNotAuditedEntity.class, tnae1.getId() ); - tnae2 = em.find( M2MTargetNotAuditedEntity.class, tnae2.getId() ); - - tnae1.getReferences().add( uste1 ); - tnae2.getReferences().remove( uste1 ); + scope.inTransaction( em -> { + M2MTargetNotAuditedEntity tnae1 = em.find( M2MTargetNotAuditedEntity.class, tnae1_id ); + M2MTargetNotAuditedEntity tnae2 = em.find( M2MTargetNotAuditedEntity.class, tnae2_id ); + UnversionedStrTestEntity uste1 = em.find( UnversionedStrTestEntity.class, uste1_id ); - em.getTransaction().commit(); + tnae1.getReferences().add( uste1 ); + tnae2.getReferences().remove( uste1 ); + } ); // Revision 3 - em.getTransaction().begin(); + scope.inTransaction( em -> { + M2MTargetNotAuditedEntity tnae1 = em.find( M2MTargetNotAuditedEntity.class, tnae1_id ); + M2MTargetNotAuditedEntity tnae2 = em.find( M2MTargetNotAuditedEntity.class, tnae2_id ); + UnversionedStrTestEntity uste1 = em.find( UnversionedStrTestEntity.class, uste1_id ); + UnversionedStrTestEntity uste2 = em.find( UnversionedStrTestEntity.class, uste2_id ); - tnae1 = em.find( M2MTargetNotAuditedEntity.class, tnae1.getId() ); - tnae2 = em.find( M2MTargetNotAuditedEntity.class, tnae2.getId() ); - - //field not changed!!! - tnae1.getReferences().add( uste1 ); - tnae2.getReferences().remove( uste2 ); - - em.getTransaction().commit(); + //field not changed!!! + tnae1.getReferences().add( uste1 ); + tnae2.getReferences().remove( uste2 ); + } ); // Revision 4 - em.getTransaction().begin(); - - tnae1 = em.find( M2MTargetNotAuditedEntity.class, tnae1.getId() ); - tnae2 = em.find( M2MTargetNotAuditedEntity.class, tnae2.getId() ); - - tnae1.getReferences().add( uste2 ); - tnae2.getReferences().add( uste1 ); - - em.getTransaction().commit(); - - // - tnae1_id = tnae1.getId(); - tnae2_id = tnae2.getId(); - uste1_id = uste1.getId(); - uste2_id = uste2.getId(); + scope.inTransaction( em -> { + M2MTargetNotAuditedEntity tnae1 = em.find( M2MTargetNotAuditedEntity.class, tnae1_id ); + M2MTargetNotAuditedEntity tnae2 = em.find( M2MTargetNotAuditedEntity.class, tnae2_id ); + UnversionedStrTestEntity uste1 = em.find( UnversionedStrTestEntity.class, uste1_id ); + UnversionedStrTestEntity uste2 = em.find( UnversionedStrTestEntity.class, uste2_id ); + + tnae1.getReferences().add( uste2 ); + tnae2.getReferences().add( uste1 ); + } ); } @Test - public void testRevisionsCounts() { - List revisions = getAuditReader().getRevisions( M2MTargetNotAuditedEntity.class, tnae1_id ); - assert Arrays.asList( 1, 2, 4 ).equals( revisions ); - revisions = getAuditReader().getRevisions( M2MTargetNotAuditedEntity.class, tnae2_id ); - assert Arrays.asList( 1, 2, 3, 4 ).equals( revisions ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + List revisions = auditReader.getRevisions( M2MTargetNotAuditedEntity.class, tnae1_id ); + assertEquals( Arrays.asList( 1, 2, 4 ), revisions ); + revisions = auditReader.getRevisions( M2MTargetNotAuditedEntity.class, tnae2_id ); + assertEquals( Arrays.asList( 1, 2, 3, 4 ), revisions ); + } ); } @Test - public void testHistoryOfTnae1_id() { - UnversionedStrTestEntity uste1 = getEntityManager().find( UnversionedStrTestEntity.class, uste1_id ); - UnversionedStrTestEntity uste2 = getEntityManager().find( UnversionedStrTestEntity.class, uste2_id ); - - M2MTargetNotAuditedEntity rev1 = getAuditReader().find( M2MTargetNotAuditedEntity.class, tnae1_id, 1 ); - M2MTargetNotAuditedEntity rev2 = getAuditReader().find( M2MTargetNotAuditedEntity.class, tnae1_id, 2 ); - M2MTargetNotAuditedEntity rev3 = getAuditReader().find( M2MTargetNotAuditedEntity.class, tnae1_id, 3 ); - M2MTargetNotAuditedEntity rev4 = getAuditReader().find( M2MTargetNotAuditedEntity.class, tnae1_id, 4 ); - - assertTrue( checkCollection( rev1.getReferences() ) ); - assertTrue( checkCollection( rev2.getReferences(), uste1 ) ); - assertTrue( checkCollection( rev3.getReferences(), uste1 ) ); - assertTrue( checkCollection( rev4.getReferences(), uste1, uste2 ) ); + public void testHistoryOfTnae1_id(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + UnversionedStrTestEntity uste1 = em.find( UnversionedStrTestEntity.class, uste1_id ); + UnversionedStrTestEntity uste2 = em.find( UnversionedStrTestEntity.class, uste2_id ); + + M2MTargetNotAuditedEntity rev1 = auditReader.find( M2MTargetNotAuditedEntity.class, tnae1_id, 1 ); + M2MTargetNotAuditedEntity rev2 = auditReader.find( M2MTargetNotAuditedEntity.class, tnae1_id, 2 ); + M2MTargetNotAuditedEntity rev3 = auditReader.find( M2MTargetNotAuditedEntity.class, tnae1_id, 3 ); + M2MTargetNotAuditedEntity rev4 = auditReader.find( M2MTargetNotAuditedEntity.class, tnae1_id, 4 ); + + assertTrue( checkCollection( rev1.getReferences() ) ); + assertTrue( checkCollection( rev2.getReferences(), uste1 ) ); + assertTrue( checkCollection( rev3.getReferences(), uste1 ) ); + assertTrue( checkCollection( rev4.getReferences(), uste1, uste2 ) ); + } ); } @Test - public void testHistoryOfTnae2_id() { - UnversionedStrTestEntity uste1 = getEntityManager().find( UnversionedStrTestEntity.class, uste1_id ); - UnversionedStrTestEntity uste2 = getEntityManager().find( UnversionedStrTestEntity.class, uste2_id ); - - M2MTargetNotAuditedEntity rev1 = getAuditReader().find( M2MTargetNotAuditedEntity.class, tnae2_id, 1 ); - M2MTargetNotAuditedEntity rev2 = getAuditReader().find( M2MTargetNotAuditedEntity.class, tnae2_id, 2 ); - M2MTargetNotAuditedEntity rev3 = getAuditReader().find( M2MTargetNotAuditedEntity.class, tnae2_id, 3 ); - M2MTargetNotAuditedEntity rev4 = getAuditReader().find( M2MTargetNotAuditedEntity.class, tnae2_id, 4 ); - - assertTrue( checkCollection( rev1.getReferences(), uste1, uste2 ) ); - assertTrue( checkCollection( rev2.getReferences(), uste2 ) ); - assertTrue( checkCollection( rev3.getReferences() ) ); - assertTrue( checkCollection( rev4.getReferences(), uste1 ) ); + public void testHistoryOfTnae2_id(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + UnversionedStrTestEntity uste1 = em.find( UnversionedStrTestEntity.class, uste1_id ); + UnversionedStrTestEntity uste2 = em.find( UnversionedStrTestEntity.class, uste2_id ); + + M2MTargetNotAuditedEntity rev1 = auditReader.find( M2MTargetNotAuditedEntity.class, tnae2_id, 1 ); + M2MTargetNotAuditedEntity rev2 = auditReader.find( M2MTargetNotAuditedEntity.class, tnae2_id, 2 ); + M2MTargetNotAuditedEntity rev3 = auditReader.find( M2MTargetNotAuditedEntity.class, tnae2_id, 3 ); + M2MTargetNotAuditedEntity rev4 = auditReader.find( M2MTargetNotAuditedEntity.class, tnae2_id, 4 ); + + assertTrue( checkCollection( rev1.getReferences(), uste1, uste2 ) ); + assertTrue( checkCollection( rev2.getReferences(), uste2 ) ); + assertTrue( checkCollection( rev3.getReferences() ) ); + assertTrue( checkCollection( rev4.getReferences(), uste1 ) ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytoone/DetachedUpdateTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytoone/DetachedUpdateTest.java index 2ae7dd6a437e..c98b801c8bdd 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytoone/DetachedUpdateTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytoone/DetachedUpdateTest.java @@ -14,15 +14,17 @@ import jakarta.persistence.JoinColumn; import jakarta.persistence.ManyToOne; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.BaseEnversFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.junit.Test; - +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; +import org.hibernate.testing.orm.junit.Jpa; + +import org.junit.jupiter.api.Test; -import static org.hibernate.testing.transaction.TransactionUtil.doInHibernate; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * Test updating a detached audited entity using native Session API @@ -31,70 +33,72 @@ * @author Chris Cranford */ @JiraKey("HHH-11859") -public class DetachedUpdateTest extends BaseEnversFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {DetachedUpdateTest.Bank.class, DetachedUpdateTest.BankContact.class}) +public class DetachedUpdateTest { private Bank bank1; private Bank bank2; private BankContact contact; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { Bank.class, BankContact.class }; - } - - @Test - @Priority(10) - public void initData() { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Revision 1 - doInHibernate( this::sessionFactory, session -> { + scope.inTransaction( em -> { bank1 = new Bank(); bank1.setDescription( "Bank of Italy" ); - session.persist( bank1 ); + em.persist( bank1 ); bank2 = new Bank(); bank2.setDescription( "Bradesco Bank" ); - session.persist( bank2 ); + em.persist( bank2 ); contact = new BankContact(); contact.setBank( bank1 ); contact.setPhoneNumber( "1234" ); contact.setName( "Test" ); - session.persist( contact ); + em.persist( contact ); } ); // Revision 2 - doInHibernate( this::sessionFactory, session -> { + scope.inTransaction( em -> { contact.setName( "Other" ); contact.setBank( bank2 ); - session.merge( contact ); + em.merge( contact ); } ); // Revision 3 // Test changing the detached entity reference to Bank and delete the prior reference // within the same transaction to make sure the audit history flushes properly. - doInHibernate( this::sessionFactory, session -> { + scope.inTransaction( em -> { contact.setBank( bank1 ); - session.remove( bank2 ); - session.merge( contact ); + em.remove( em.merge( bank2 ) ); + em.merge( contact ); } ); } @Test - public void testRevisionCounts() { - assertEquals( Collections.singletonList( 1 ), getAuditReader().getRevisions( Bank.class, bank1.getId() ) ); - assertEquals( Arrays.asList( 1, 3 ), getAuditReader().getRevisions( Bank.class, bank2.getId() ) ); - assertEquals( Arrays.asList( 1, 2, 3 ), getAuditReader().getRevisions( BankContact.class, contact.getId() ) ); + public void testRevisionCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Collections.singletonList( 1 ), auditReader.getRevisions( Bank.class, bank1.getId() ) ); + assertEquals( Arrays.asList( 1, 3 ), auditReader.getRevisions( Bank.class, bank2.getId() ) ); + assertEquals( Arrays.asList( 1, 2, 3 ), auditReader.getRevisions( BankContact.class, contact.getId() ) ); + } ); } @Test - public void testRevisionHistory() { - final BankContact rev1 = getAuditReader().find( BankContact.class, contact.getId(), 1 ); - assertEquals( rev1.getBank(), bank1 ); + public void testRevisionHistory(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + final BankContact rev1 = auditReader.find( BankContact.class, contact.getId(), 1 ); + assertEquals( rev1.getBank(), bank1 ); - final BankContact rev2 = getAuditReader().find( BankContact.class, contact.getId(), 2 ); - assertEquals( rev2.getBank(), bank2 ); + final BankContact rev2 = auditReader.find( BankContact.class, contact.getId(), 2 ); + assertEquals( rev2.getBank(), bank2 ); - final BankContact rev3 = getAuditReader().find( BankContact.class, contact.getId(), 3 ); - assertEquals( rev3.getBank(), bank1 ); + final BankContact rev3 = auditReader.find( BankContact.class, contact.getId(), 3 ); + assertEquals( rev3.getBank(), bank1 ); + } ); } @Entity(name="Bank") diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytoone/EmbeddedIdManyToOneForeignKeyTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytoone/EmbeddedIdManyToOneForeignKeyTest.java index 1cd3d7555344..775a6e26b120 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytoone/EmbeddedIdManyToOneForeignKeyTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytoone/EmbeddedIdManyToOneForeignKeyTest.java @@ -21,28 +21,33 @@ import org.hibernate.envers.AuditJoinTable; import org.hibernate.envers.Audited; import org.hibernate.envers.RelationTargetAuditMode; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; import org.hibernate.mapping.Table; -import org.junit.Test; - +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.DomainModel; +import org.hibernate.testing.orm.junit.DomainModelScope; import org.hibernate.testing.orm.junit.JiraKey; +import org.hibernate.testing.orm.junit.SessionFactory; + +import org.junit.jupiter.api.Test; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Chris Cranford */ @JiraKey(value = "HHH-11463") -public class EmbeddedIdManyToOneForeignKeyTest extends BaseEnversJPAFunctionalTestCase { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { Customer.class, CustomerAddress.class, Address.class }; - } - +@EnversTest +@DomainModel(annotatedClasses = { + EmbeddedIdManyToOneForeignKeyTest.Customer.class, + EmbeddedIdManyToOneForeignKeyTest.CustomerAddress.class, + EmbeddedIdManyToOneForeignKeyTest.Address.class +}) +@SessionFactory +public class EmbeddedIdManyToOneForeignKeyTest { @Test - public void testJoinTableForeignKeyToNonAuditTables() { + public void testJoinTableForeignKeyToNonAuditTables(DomainModelScope scope) { // there should only be references to REVINFO and not to the Customer or Address tables - for ( Table table : metadata().getDatabase().getDefaultNamespace().getTables() ) { + for ( Table table : scope.getDomainModel().getDatabase().getDefaultNamespace().getTables() ) { if ( table.getName().equals( "CustomerAddress_AUD" ) ) { for ( var foreignKey : table.getForeignKeyCollection() ) { assertEquals( "REVINFO", foreignKey.getReferencedTable().getName() ); diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytoone/bidirectional/BidirectionalManyToOneOptionalTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytoone/bidirectional/BidirectionalManyToOneOptionalTest.java index 19fc0da2a54f..4c956a0b89db 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytoone/bidirectional/BidirectionalManyToOneOptionalTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytoone/bidirectional/BidirectionalManyToOneOptionalTest.java @@ -4,82 +4,79 @@ */ package org.hibernate.orm.test.envers.integration.manytoone.bidirectional; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertNull; /** * @author Chris Cranford */ @JiraKey(value = "HHH-8305") -public class BidirectionalManyToOneOptionalTest extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = { + BiRefingOptionalEntity.class, + BiRefedOptionalEntity.class +}) +public class BidirectionalManyToOneOptionalTest { private Integer refingWithNoRefedId; private Integer refingId; private Integer refedId; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { - BiRefingOptionalEntity.class, - BiRefedOptionalEntity.class - }; - } - - @Test - @Priority(10) - public void initData() { - EntityManager entityManager = getEntityManager(); - try { - // Revision 1 - entityManager.getTransaction().begin(); - + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + scope.inTransaction( em -> { // store refing with null refed entity BiRefingOptionalEntity refingWithNoRefed = new BiRefingOptionalEntity(); refingWithNoRefed.setReference( null ); - entityManager.persist( refingWithNoRefed ); + em.persist( refingWithNoRefed ); // store refing with non-null refed entity BiRefingOptionalEntity refing = new BiRefingOptionalEntity(); BiRefedOptionalEntity refed = new BiRefedOptionalEntity(); refed.getReferences().add( refing ); refing.setReference( refed ); - entityManager.persist( refing ); - entityManager.persist( refed ); - - entityManager.getTransaction().commit(); + em.persist( refing ); + em.persist( refed ); this.refingId = refing.getId(); this.refedId = refed.getId(); this.refingWithNoRefedId = refingWithNoRefed.getId(); - } - finally { - entityManager.close(); - } + } ); } @Test - public void testRevisionCounts() { - assertEquals( 1, getAuditReader().getRevisions( BiRefingOptionalEntity.class, refingId ).size() ); - assertEquals( 1, getAuditReader().getRevisions( BiRefingOptionalEntity.class, refingWithNoRefedId ).size() ); - assertEquals( 1, getAuditReader().getRevisions( BiRefedOptionalEntity.class, refedId ).size() ); + public void testRevisionCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( 1, auditReader.getRevisions( BiRefingOptionalEntity.class, refingId ).size() ); + assertEquals( 1, auditReader.getRevisions( BiRefingOptionalEntity.class, refingWithNoRefedId ).size() ); + assertEquals( 1, auditReader.getRevisions( BiRefedOptionalEntity.class, refedId ).size() ); + } ); } @Test - public void testRevisionHistoryNullReference() { - BiRefingOptionalEntity rev1 = getAuditReader().find( BiRefingOptionalEntity.class, refingWithNoRefedId, 1 ); - assertNull( rev1.getReference() ); + public void testRevisionHistoryNullReference(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + BiRefingOptionalEntity rev1 = auditReader.find( BiRefingOptionalEntity.class, refingWithNoRefedId, 1 ); + assertNull( rev1.getReference() ); + } ); } @Test - public void testRevisionHistoryWithNonNullReference() { - assertNotNull( getAuditReader().find( BiRefingOptionalEntity.class, refingId, 1).getReference() ); - assertEquals( 1, getAuditReader().find( BiRefedOptionalEntity.class, refedId, 1 ).getReferences().size() ); + public void testRevisionHistoryWithNonNullReference(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertNotNull( auditReader.find( BiRefingOptionalEntity.class, refingId, 1 ).getReference() ); + assertEquals( 1, auditReader.find( BiRefedOptionalEntity.class, refedId, 1 ).getReferences().size() ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytoone/bidirectional/ImplicitMappedByTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytoone/bidirectional/ImplicitMappedByTest.java index 1a9ee2b5bf20..1f8c95b77565 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytoone/bidirectional/ImplicitMappedByTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytoone/bidirectional/ImplicitMappedByTest.java @@ -7,35 +7,31 @@ import java.util.Arrays; import java.util.HashSet; import java.util.Set; -import jakarta.persistence.EntityManager; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.orm.test.envers.tools.TestTools; - +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Assert; -import org.junit.Test; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) */ @JiraKey(value = "HHH-4962") -public class ImplicitMappedByTest extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = { OneToManyOwned.class, ManyToOneOwning.class }) +public class ImplicitMappedByTest { private Long ownedId = null; private Long owning1Id = null; private Long owning2Id = null; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {OneToManyOwned.class, ManyToOneOwning.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { OneToManyOwned owned = new OneToManyOwned( "data", null ); Set referencing = new HashSet(); ManyToOneOwning owning1 = new ManyToOneOwning( "data1", owned ); @@ -45,70 +41,82 @@ public void initData() { owned.setReferencing( referencing ); // Revision 1 - em.getTransaction().begin(); - em.persist( owned ); - em.persist( owning1 ); - em.persist( owning2 ); - em.getTransaction().commit(); + scope.inTransaction( em -> { + em.persist( owned ); + em.persist( owning1 ); + em.persist( owning2 ); + } ); ownedId = owned.getId(); owning1Id = owning1.getId(); owning2Id = owning2.getId(); // Revision 2 - em.getTransaction().begin(); - owning1 = em.find( ManyToOneOwning.class, owning1.getId() ); - em.remove( owning1 ); - em.getTransaction().commit(); + scope.inTransaction( em -> { + ManyToOneOwning o1 = em.find( ManyToOneOwning.class, owning1.getId() ); + em.remove( o1 ); + } ); // Revision 3 - em.getTransaction().begin(); - owning2 = em.find( ManyToOneOwning.class, owning2.getId() ); - owning2.setData( "data2modified" ); - em.merge( owning2 ); - em.getTransaction().commit(); + scope.inTransaction( em -> { + ManyToOneOwning o2 = em.find( ManyToOneOwning.class, owning2.getId() ); + o2.setData( "data2modified" ); + em.merge( o2 ); + } ); } @Test - public void testRevisionsCounts() { - Assert.assertEquals( Arrays.asList( 1, 2 ), getAuditReader().getRevisions( OneToManyOwned.class, ownedId ) ); - Assert.assertEquals( Arrays.asList( 1, 2 ), getAuditReader().getRevisions( ManyToOneOwning.class, owning1Id ) ); - Assert.assertEquals( Arrays.asList( 1, 3 ), getAuditReader().getRevisions( ManyToOneOwning.class, owning2Id ) ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1, 2 ), auditReader.getRevisions( OneToManyOwned.class, ownedId ) ); + assertEquals( Arrays.asList( 1, 2 ), auditReader.getRevisions( ManyToOneOwning.class, owning1Id ) ); + assertEquals( Arrays.asList( 1, 3 ), auditReader.getRevisions( ManyToOneOwning.class, owning2Id ) ); + } ); } @Test - public void testHistoryOfOwned() { - OneToManyOwned owned = new OneToManyOwned( "data", null, ownedId ); - ManyToOneOwning owning1 = new ManyToOneOwning( "data1", owned, owning1Id ); - ManyToOneOwning owning2 = new ManyToOneOwning( "data2", owned, owning2Id ); - - OneToManyOwned ver1 = getAuditReader().find( OneToManyOwned.class, ownedId, 1 ); - Assert.assertEquals( owned, ver1 ); - Assert.assertEquals( TestTools.makeSet( owning1, owning2 ), ver1.getReferencing() ); - - OneToManyOwned ver2 = getAuditReader().find( OneToManyOwned.class, ownedId, 2 ); - Assert.assertEquals( owned, ver2 ); - Assert.assertEquals( TestTools.makeSet( owning2 ), ver2.getReferencing() ); + public void testHistoryOfOwned(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + OneToManyOwned owned = new OneToManyOwned( "data", null, ownedId ); + ManyToOneOwning owning1 = new ManyToOneOwning( "data1", owned, owning1Id ); + ManyToOneOwning owning2 = new ManyToOneOwning( "data2", owned, owning2Id ); + + OneToManyOwned ver1 = auditReader.find( OneToManyOwned.class, ownedId, 1 ); + assertEquals( owned, ver1 ); + assertEquals( TestTools.makeSet( owning1, owning2 ), ver1.getReferencing() ); + + OneToManyOwned ver2 = auditReader.find( OneToManyOwned.class, ownedId, 2 ); + assertEquals( owned, ver2 ); + assertEquals( TestTools.makeSet( owning2 ), ver2.getReferencing() ); + } ); } @Test - public void testHistoryOfOwning1() { - ManyToOneOwning ver1 = new ManyToOneOwning( "data1", null, owning1Id ); - Assert.assertEquals( ver1, getAuditReader().find( ManyToOneOwning.class, owning1Id, 1 ) ); + public void testHistoryOfOwning1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + ManyToOneOwning ver1 = new ManyToOneOwning( "data1", null, owning1Id ); + assertEquals( ver1, auditReader.find( ManyToOneOwning.class, owning1Id, 1 ) ); + } ); } @Test - public void testHistoryOfOwning2() { - OneToManyOwned owned = new OneToManyOwned( "data", null, ownedId ); - ManyToOneOwning owning1 = new ManyToOneOwning( "data2", owned, owning2Id ); - ManyToOneOwning owning3 = new ManyToOneOwning( "data2modified", owned, owning2Id ); - - ManyToOneOwning ver1 = getAuditReader().find( ManyToOneOwning.class, owning2Id, 1 ); - ManyToOneOwning ver3 = getAuditReader().find( ManyToOneOwning.class, owning2Id, 3 ); - - Assert.assertEquals( owning1, ver1 ); - Assert.assertEquals( owned.getId(), ver1.getReferences().getId() ); - Assert.assertEquals( owning3, ver3 ); - Assert.assertEquals( owned.getId(), ver3.getReferences().getId() ); + public void testHistoryOfOwning2(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + OneToManyOwned owned = new OneToManyOwned( "data", null, ownedId ); + ManyToOneOwning owning1 = new ManyToOneOwning( "data2", owned, owning2Id ); + ManyToOneOwning owning3 = new ManyToOneOwning( "data2modified", owned, owning2Id ); + + ManyToOneOwning ver1 = auditReader.find( ManyToOneOwning.class, owning2Id, 1 ); + ManyToOneOwning ver3 = auditReader.find( ManyToOneOwning.class, owning2Id, 3 ); + + assertEquals( owning1, ver1 ); + assertEquals( owned.getId(), ver1.getReferences().getId() ); + assertEquals( owning3, ver3 ); + assertEquals( owned.getId(), ver3.getReferences().getId() ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytoone/bidirectional/ManyToOneCustomRevisionListenerTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytoone/bidirectional/ManyToOneCustomRevisionListenerTest.java index c3c89fd49d96..64d249ff74b7 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytoone/bidirectional/ManyToOneCustomRevisionListenerTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytoone/bidirectional/ManyToOneCustomRevisionListenerTest.java @@ -6,7 +6,6 @@ import jakarta.persistence.CascadeType; import jakarta.persistence.Entity; -import jakarta.persistence.EntityManager; import jakarta.persistence.FetchType; import jakarta.persistence.GeneratedValue; import jakarta.persistence.Id; @@ -14,6 +13,7 @@ import jakarta.persistence.ManyToOne; import jakarta.persistence.OneToMany; import org.hibernate.envers.AuditReader; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.Audited; import org.hibernate.envers.EntityTrackingRevisionListener; import org.hibernate.envers.RevisionEntity; @@ -21,10 +21,12 @@ import org.hibernate.envers.RevisionNumber; import org.hibernate.envers.RevisionTimestamp; import org.hibernate.envers.RevisionType; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.Jira; -import org.junit.Test; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; import java.util.ArrayList; import java.util.List; @@ -32,51 +34,48 @@ import static org.assertj.core.api.Assertions.assertThat; @Jira( "https://hibernate.atlassian.net/browse/HHH-17652" ) -public class ManyToOneCustomRevisionListenerTest extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = { + ManyToOneCustomRevisionListenerTest.Document.class, + ManyToOneCustomRevisionListenerTest.DocumentAuthorEmployee.class, + ManyToOneCustomRevisionListenerTest.Employee.class, + ManyToOneCustomRevisionListenerTest.CustomRevisionEntity.class, +}) +public class ManyToOneCustomRevisionListenerTest { private static final ThreadLocal auditReader = ThreadLocal.withInitial( () -> null ); - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { - Document.class, - DocumentAuthorEmployee.class, - Employee.class, - CustomRevisionEntity.class, - }; + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + scope.inTransaction( em -> { + // store in thread-local to use it in custom revision listener + auditReader.set( AuditReaderFactory.get( em ) ); + + final Employee bilbo = new Employee( "Bilbo Baggins" ); + em.persist( bilbo ); + final Employee frodo = new Employee( "Frodo Baggins" ); + em.persist( frodo ); + } ); + + scope.inTransaction( em -> { + auditReader.set( AuditReaderFactory.get( em ) ); + + final Employee bilbo = em.createQuery( "from Employee where name = 'Bilbo Baggins'", Employee.class ).getSingleResult(); + final Employee frodo = em.createQuery( "from Employee where name = 'Frodo Baggins'", Employee.class ).getSingleResult(); + + final Document document = new Document( "The Hobbit" ); + document.getAuthors().add( new DocumentAuthorEmployee( 1L, document, bilbo ) ); + document.getAuthors().add( new DocumentAuthorEmployee( 2L, document, frodo ) ); + em.persist( document ); + } ); } @Test - @Priority(10) - public void initData() { - // store in thread-local to use it in custom revision listener - auditReader.set( getAuditReader() ); - - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - - final Employee bilbo = new Employee( "Bilbo Baggins" ); - em.persist( bilbo ); - final Employee frodo = new Employee( "Frodo Baggins" ); - em.persist( frodo ); - - em.getTransaction().commit(); - - em.getTransaction().begin(); - - final Document document = new Document( "The Hobbit" ); - document.getAuthors().add( new DocumentAuthorEmployee( 1L, document, bilbo ) ); - document.getAuthors().add( new DocumentAuthorEmployee( 2L, document, frodo ) ); - em.persist( document ); - - em.getTransaction().commit(); - } - - @Test - public void testDocumentAuthorEmployeeRevisions() { - final AuditReader reader = getAuditReader(); - assertLastRevision( reader, 1L, "Bilbo Baggins" ); - assertLastRevision( reader, 2L, "Frodo Baggins" ); - getEntityManager().close(); + public void testDocumentAuthorEmployeeRevisions(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final AuditReader reader = AuditReaderFactory.get( em ); + assertLastRevision( reader, 1L, "Bilbo Baggins" ); + assertLastRevision( reader, 2L, "Frodo Baggins" ); + } ); } private static void assertLastRevision(AuditReader reader, Long id, String employee) { diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytoone/foreignkey/ForeignKeyExclusionTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytoone/foreignkey/ForeignKeyExclusionTest.java index 9464498d23e0..295832138faa 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytoone/foreignkey/ForeignKeyExclusionTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytoone/foreignkey/ForeignKeyExclusionTest.java @@ -7,12 +7,11 @@ import java.time.LocalDate; import java.util.ArrayList; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.junit.Test; - +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; - -import static org.hibernate.testing.transaction.TransactionUtil.doInJPA; +import org.hibernate.testing.orm.junit.Jpa; /** * Tests that no foreign key should be generated from audit schema to main schema. @@ -20,19 +19,16 @@ * @author Chris Cranford */ @JiraKey(value = "HHH-12965") -public class ForeignKeyExclusionTest extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = { RootLayer.class, MiddleLayer.class, LeafLayer.class }) +public class ForeignKeyExclusionTest { - private RootLayer rootLayer; - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { RootLayer.class, MiddleLayer.class, LeafLayer.class }; - } + private Long rootLayerId; - @Test - public void testRemovingAuditedEntityWithIdClassAndManyToOneForeignKeyConstraint() { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Revision 1 - Add Root/Middle/Leaf layers - this.rootLayer = doInJPA( this::entityManagerFactory, entityManager -> { + scope.inTransaction( em -> { final RootLayer rootLayer = new RootLayer(); rootLayer.setMiddleLayers( new ArrayList<>() ); @@ -46,15 +42,15 @@ public void testRemovingAuditedEntityWithIdClassAndManyToOneForeignKeyConstraint leafLayer.setMiddleLayer( middleLayer ); middleLayer.getLeafLayers().add( leafLayer ); - entityManager.persist( rootLayer ); - return rootLayer; + em.persist( rootLayer ); + this.rootLayerId = rootLayer.getId(); } ); // Revision 2 - Delete Root/Middle/Leaf layers // This causes FK violation - doInJPA( this::entityManagerFactory, entityManager -> { - final RootLayer rootLayer = entityManager.find( RootLayer.class, this.rootLayer.getId() ); - entityManager.remove( rootLayer ); + scope.inTransaction( em -> { + final RootLayer rootLayer = em.find( RootLayer.class, this.rootLayerId ); + em.remove( rootLayer ); } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/manytoone/lazy/Address.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytoone/lazy/Address.java similarity index 94% rename from hibernate-envers/src/test/java/org/hibernate/envers/test/integration/manytoone/lazy/Address.java rename to hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytoone/lazy/Address.java index 2b09d27a2f52..a0c4fe9d757d 100644 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/manytoone/lazy/Address.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytoone/lazy/Address.java @@ -2,7 +2,7 @@ * SPDX-License-Identifier: Apache-2.0 * Copyright Red Hat Inc. and Hibernate Authors */ -package org.hibernate.envers.test.integration.manytoone.lazy; +package org.hibernate.orm.test.envers.integration.manytoone.lazy; import java.time.Instant; import java.util.Collection; diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/manytoone/lazy/AddressVersion.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytoone/lazy/AddressVersion.java similarity index 95% rename from hibernate-envers/src/test/java/org/hibernate/envers/test/integration/manytoone/lazy/AddressVersion.java rename to hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytoone/lazy/AddressVersion.java index 9b45e47a4d65..d70e818a7156 100644 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/manytoone/lazy/AddressVersion.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytoone/lazy/AddressVersion.java @@ -2,7 +2,7 @@ * SPDX-License-Identifier: Apache-2.0 * Copyright Red Hat Inc. and Hibernate Authors */ -package org.hibernate.envers.test.integration.manytoone.lazy; +package org.hibernate.orm.test.envers.integration.manytoone.lazy; import java.time.Instant; import java.util.Objects; diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/manytoone/lazy/Base.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytoone/lazy/Base.java similarity index 82% rename from hibernate-envers/src/test/java/org/hibernate/envers/test/integration/manytoone/lazy/Base.java rename to hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytoone/lazy/Base.java index c8eb36cfd257..cc37b206bbd6 100644 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/manytoone/lazy/Base.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytoone/lazy/Base.java @@ -2,7 +2,7 @@ * SPDX-License-Identifier: Apache-2.0 * Copyright Red Hat Inc. and Hibernate Authors */ -package org.hibernate.envers.test.integration.manytoone.lazy; +package org.hibernate.orm.test.envers.integration.manytoone.lazy; import jakarta.persistence.Access; import jakarta.persistence.AccessType; diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/manytoone/lazy/BaseDomainEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytoone/lazy/BaseDomainEntity.java similarity index 94% rename from hibernate-envers/src/test/java/org/hibernate/envers/test/integration/manytoone/lazy/BaseDomainEntity.java rename to hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytoone/lazy/BaseDomainEntity.java index 478dbf386fa8..c9907caa4737 100644 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/manytoone/lazy/BaseDomainEntity.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytoone/lazy/BaseDomainEntity.java @@ -2,7 +2,7 @@ * SPDX-License-Identifier: Apache-2.0 * Copyright Red Hat Inc. and Hibernate Authors */ -package org.hibernate.envers.test.integration.manytoone.lazy; +package org.hibernate.orm.test.envers.integration.manytoone.lazy; import java.time.Instant; import java.util.Objects; diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/manytoone/lazy/BaseDomainEntityMetadata.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytoone/lazy/BaseDomainEntityMetadata.java similarity index 94% rename from hibernate-envers/src/test/java/org/hibernate/envers/test/integration/manytoone/lazy/BaseDomainEntityMetadata.java rename to hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytoone/lazy/BaseDomainEntityMetadata.java index e415641a4e4f..2688a123eeda 100644 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/manytoone/lazy/BaseDomainEntityMetadata.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytoone/lazy/BaseDomainEntityMetadata.java @@ -2,7 +2,7 @@ * SPDX-License-Identifier: Apache-2.0 * Copyright Red Hat Inc. and Hibernate Authors */ -package org.hibernate.envers.test.integration.manytoone.lazy; +package org.hibernate.orm.test.envers.integration.manytoone.lazy; import java.io.Serializable; import java.time.Instant; diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/manytoone/lazy/BaseDomainEntityVersion.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytoone/lazy/BaseDomainEntityVersion.java similarity index 94% rename from hibernate-envers/src/test/java/org/hibernate/envers/test/integration/manytoone/lazy/BaseDomainEntityVersion.java rename to hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytoone/lazy/BaseDomainEntityVersion.java index 45961a42b061..a1f725a4c420 100644 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/manytoone/lazy/BaseDomainEntityVersion.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytoone/lazy/BaseDomainEntityVersion.java @@ -2,7 +2,7 @@ * SPDX-License-Identifier: Apache-2.0 * Copyright Red Hat Inc. and Hibernate Authors */ -package org.hibernate.envers.test.integration.manytoone.lazy; +package org.hibernate.orm.test.envers.integration.manytoone.lazy; import java.util.Objects; diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/manytoone/lazy/ChildUser.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytoone/lazy/ChildUser.java similarity index 89% rename from hibernate-envers/src/test/java/org/hibernate/envers/test/integration/manytoone/lazy/ChildUser.java rename to hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytoone/lazy/ChildUser.java index f350fedcc2a7..d2689ef6f58f 100644 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/manytoone/lazy/ChildUser.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytoone/lazy/ChildUser.java @@ -2,7 +2,7 @@ * SPDX-License-Identifier: Apache-2.0 * Copyright Red Hat Inc. and Hibernate Authors */ -package org.hibernate.envers.test.integration.manytoone.lazy; +package org.hibernate.orm.test.envers.integration.manytoone.lazy; import org.hibernate.envers.NotAudited; diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/manytoone/lazy/ManyToOneLazyDeleteTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytoone/lazy/ManyToOneLazyDeleteTest.java similarity index 53% rename from hibernate-envers/src/test/java/org/hibernate/envers/test/integration/manytoone/lazy/ManyToOneLazyDeleteTest.java rename to hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytoone/lazy/ManyToOneLazyDeleteTest.java index a4a156421c31..d374df6716c5 100644 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/manytoone/lazy/ManyToOneLazyDeleteTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytoone/lazy/ManyToOneLazyDeleteTest.java @@ -2,21 +2,23 @@ * SPDX-License-Identifier: Apache-2.0 * Copyright Red Hat Inc. and Hibernate Authors */ -package org.hibernate.envers.test.integration.manytoone.lazy; - -import org.hibernate.envers.configuration.EnversSettings; -import org.hibernate.orm.test.envers.BaseEnversFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.testing.orm.junit.JiraKey; -import org.hibernate.testing.DialectChecks; -import org.hibernate.testing.RequiresDialectFeature; -import org.junit.Test; +package org.hibernate.orm.test.envers.integration.manytoone.lazy; import java.time.Duration; import java.time.Instant; -import java.util.Map; -import static org.hibernate.testing.transaction.TransactionUtil.doInHibernate; +import org.hibernate.envers.configuration.EnversSettings; + +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.DialectFeatureChecks; +import org.hibernate.testing.orm.junit.DomainModel; +import org.hibernate.testing.orm.junit.JiraKey; +import org.hibernate.testing.orm.junit.RequiresDialectFeature; +import org.hibernate.testing.orm.junit.ServiceRegistry; +import org.hibernate.testing.orm.junit.SessionFactory; +import org.hibernate.testing.orm.junit.SessionFactoryScope; +import org.hibernate.testing.orm.junit.Setting; /** * Tests that proxies can still be resolved correctly in ToOneIdMapper even the object is already deleted and can't @@ -26,22 +28,26 @@ * @author Luke Chen */ @JiraKey(value = "HHH-13945") -@RequiresDialectFeature(DialectChecks.SupportsIdentityColumns.class) -public class ManyToOneLazyDeleteTest extends BaseEnversFunctionalTestCase { +@RequiresDialectFeature(feature = DialectFeatureChecks.SupportsIdentityColumns.class) +@EnversTest +@DomainModel(annotatedClasses = { Shipment.class, Address.class, AddressVersion.class, User.class, ChildUser.class }) +@ServiceRegistry(settings = @Setting(name = EnversSettings.STORE_DATA_AT_DELETE, value = "true")) +@SessionFactory +public class ManyToOneLazyDeleteTest { private Long shipmentId; - private User user; + private Long userId; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { Shipment.class, Address.class, AddressVersion.class, User.class, ChildUser.class }; - } - - @Test - @Priority(10) - public void initData() { - - this.shipmentId = doInHibernate( this::sessionFactory, session -> { - final Shipment shipment = new Shipment( Instant.now(), "system", Instant.now().plus( Duration.ofDays( 3 ) ), "abcd123", null, null ); + @BeforeClassTemplate + public void initData(SessionFactoryScope scope) { + this.shipmentId = scope.fromTransaction( session -> { + final Shipment shipment = new Shipment( + Instant.now(), + "system", + Instant.now().plus( Duration.ofDays( 3 ) ), + "abcd123", + null, + null + ); session.persist( shipment ); session.flush(); @@ -49,7 +55,7 @@ public void initData() { final Address destination = new Address( Instant.now(), "system", "Madrid#3" ); final AddressVersion originVersion0 = origin.addInitialVersion( "Poligono Manises" ); final AddressVersion destinationVersion0 = destination.addInitialVersion( "Poligono Alcobendas" ); - user = new ChildUser(); + User user = new ChildUser(); session.persist( origin ); session.persist( destination ); session.persist( user ); @@ -62,25 +68,19 @@ public void initData() { session.merge( shipment ); session.flush(); + this.userId = user.getId(); return shipment.getId(); } ); - doInHibernate( this::sessionFactory, session -> { + scope.inTransaction( session -> { final Shipment shipment = session.get( Shipment.class, shipmentId ); - session.remove(shipment); + session.remove( shipment ); // Cast the User instance to the ChildUser, and delete the child one, so the cache for // the User instance will not be there, and entityNotFound exception will be thrown while envers processing it - ChildUser childUser = session.get(ChildUser.class, user.getId()); - session.remove(childUser); + ChildUser childUser = session.get( ChildUser.class, userId ); + session.remove( childUser ); session.flush(); } ); } - - @Override - protected void addSettings(Map settings) { - super.addSettings( settings ); - - settings.put(EnversSettings.STORE_DATA_AT_DELETE, "true"); - } } diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/manytoone/lazy/ManyToOneLazyFetchTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytoone/lazy/ManyToOneLazyFetchTest.java similarity index 53% rename from hibernate-envers/src/test/java/org/hibernate/envers/test/integration/manytoone/lazy/ManyToOneLazyFetchTest.java rename to hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytoone/lazy/ManyToOneLazyFetchTest.java index 588bee6faa42..5372c176720e 100644 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/manytoone/lazy/ManyToOneLazyFetchTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytoone/lazy/ManyToOneLazyFetchTest.java @@ -2,44 +2,43 @@ * SPDX-License-Identifier: Apache-2.0 * Copyright Red Hat Inc. and Hibernate Authors */ -package org.hibernate.envers.test.integration.manytoone.lazy; +package org.hibernate.orm.test.envers.integration.manytoone.lazy; import java.time.Duration; import java.time.Instant; import java.util.Arrays; import org.hibernate.Hibernate; -import org.hibernate.orm.test.envers.BaseEnversFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.junit.Test; - -import org.hibernate.testing.DialectChecks; -import org.hibernate.testing.RequiresDialectFeature; +import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.DialectFeatureChecks; +import org.hibernate.testing.orm.junit.DomainModel; import org.hibernate.testing.orm.junit.JiraKey; +import org.hibernate.testing.orm.junit.RequiresDialectFeature; +import org.hibernate.testing.orm.junit.SessionFactory; +import org.hibernate.testing.orm.junit.SessionFactoryScope; +import org.junit.jupiter.api.Test; -import static org.hibernate.testing.transaction.TransactionUtil.doInHibernate; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * Tests that proxies are resolved correctly by the ToOneIdMapper such that when the values - * are inserted for the join columns, they're resolved correclty avoiding ClassCastException + * are inserted for the join columns, they're resolved correctly avoiding ClassCastException * * @author Chris Cranford */ @JiraKey(value = "HHH-13760") -@RequiresDialectFeature(DialectChecks.SupportsIdentityColumns.class) -public class ManyToOneLazyFetchTest extends BaseEnversFunctionalTestCase { +@RequiresDialectFeature(feature = DialectFeatureChecks.SupportsIdentityColumns.class) +@EnversTest +@DomainModel(annotatedClasses = { Shipment.class, Address.class, AddressVersion.class, User.class, ChildUser.class }) +@SessionFactory +public class ManyToOneLazyFetchTest { private Long shipmentId; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { Shipment.class, Address.class, AddressVersion.class, User.class, ChildUser.class }; - } - - @Test - @Priority(10) - public void initData() { - this.shipmentId = doInHibernate( this::sessionFactory, session -> { + @BeforeClassTemplate + public void initData(SessionFactoryScope scope) { + this.shipmentId = scope.fromTransaction( session -> { final Shipment shipment = new Shipment( Instant.now(), "system", Instant.now().plus( Duration.ofDays( 3 ) ), "abcd123", null, null ); session.persist( shipment ); session.flush(); @@ -60,7 +59,7 @@ public void initData() { return shipment.getId(); } ); - doInHibernate( this::sessionFactory, session -> { + scope.inTransaction( session -> { final Shipment shipment = session.get( Shipment.class, shipmentId ); Hibernate.initialize( shipment.getOrigin() ); @@ -73,7 +72,10 @@ public void initData() { } @Test - public void testRevisionHistory() { - assertEquals( Arrays.asList( 1, 2 ), getAuditReader().getRevisions( Shipment.class, shipmentId ) ); + public void testRevisionHistory(SessionFactoryScope scope) { + scope.inSession( session -> { + final var auditReader = AuditReaderFactory.get( session ); + assertEquals( Arrays.asList( 1, 2 ), auditReader.getRevisions( Shipment.class, shipmentId ) ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/manytoone/lazy/ManyToOneLazyProxyTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytoone/lazy/ManyToOneLazyProxyTest.java similarity index 96% rename from hibernate-envers/src/test/java/org/hibernate/envers/test/integration/manytoone/lazy/ManyToOneLazyProxyTest.java rename to hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytoone/lazy/ManyToOneLazyProxyTest.java index c5582139103d..408adc63e052 100644 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/manytoone/lazy/ManyToOneLazyProxyTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytoone/lazy/ManyToOneLazyProxyTest.java @@ -2,13 +2,14 @@ * SPDX-License-Identifier: Apache-2.0 * Copyright Red Hat Inc. and Hibernate Authors */ -package org.hibernate.envers.test.integration.manytoone.lazy; +package org.hibernate.orm.test.envers.integration.manytoone.lazy; import jakarta.persistence.Column; import org.hibernate.cfg.AvailableSettings; import org.hibernate.envers.AuditTable; import org.hibernate.envers.Audited; +import org.hibernate.testing.envers.junit.EnversTest; import org.hibernate.testing.jdbc.SQLStatementInspector; import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; @@ -28,6 +29,7 @@ /** * @author Jan Schatteman */ +@EnversTest @Jpa ( annotatedClasses = { ManyToOneLazyProxyTest.OtherEntity.class, ManyToOneLazyProxyTest.MyEntity.class diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/manytoone/lazy/Shipment.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytoone/lazy/Shipment.java similarity index 97% rename from hibernate-envers/src/test/java/org/hibernate/envers/test/integration/manytoone/lazy/Shipment.java rename to hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytoone/lazy/Shipment.java index 0c342440a65b..4c649741de82 100644 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/manytoone/lazy/Shipment.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytoone/lazy/Shipment.java @@ -2,7 +2,7 @@ * SPDX-License-Identifier: Apache-2.0 * Copyright Red Hat Inc. and Hibernate Authors */ -package org.hibernate.envers.test.integration.manytoone.lazy; +package org.hibernate.orm.test.envers.integration.manytoone.lazy; import java.time.Instant; import java.util.Objects; diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/manytoone/lazy/User.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytoone/lazy/User.java similarity index 92% rename from hibernate-envers/src/test/java/org/hibernate/envers/test/integration/manytoone/lazy/User.java rename to hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytoone/lazy/User.java index b56585c3da13..672160502ab0 100644 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/manytoone/lazy/User.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytoone/lazy/User.java @@ -2,7 +2,7 @@ * SPDX-License-Identifier: Apache-2.0 * Copyright Red Hat Inc. and Hibernate Authors */ -package org.hibernate.envers.test.integration.manytoone.lazy; +package org.hibernate.orm.test.envers.integration.manytoone.lazy; import org.hibernate.envers.NotAudited; diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytoone/unidirectional/RelationNotAuditedTarget.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytoone/unidirectional/RelationNotAuditedTarget.java index ca357a6e63c5..44230d265a02 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytoone/unidirectional/RelationNotAuditedTarget.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/manytoone/unidirectional/RelationNotAuditedTarget.java @@ -6,110 +6,105 @@ import java.util.Arrays; import java.util.List; -import jakarta.persistence.EntityManager; import org.hibernate.Hibernate; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.orm.test.envers.entities.UnversionedStrTestEntity; import org.hibernate.orm.test.envers.entities.manytoone.unidirectional.TargetNotAuditedEntity; import org.hibernate.proxy.HibernateProxy; - import org.hibernate.proxy.LazyInitializer; -import org.junit.Test; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; + +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; /** * @author Tomasz Bech */ -public class RelationNotAuditedTarget extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {TargetNotAuditedEntity.class, UnversionedStrTestEntity.class}) +public class RelationNotAuditedTarget { private Integer tnae1_id; private Integer tnae2_id; private Integer uste1_id; private Integer uste2_id; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {TargetNotAuditedEntity.class, UnversionedStrTestEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - UnversionedStrTestEntity uste1 = new UnversionedStrTestEntity( "str1" ); - UnversionedStrTestEntity uste2 = new UnversionedStrTestEntity( "str2" ); - + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // No revision - em.getTransaction().begin(); + scope.inTransaction( em -> { + UnversionedStrTestEntity uste1 = new UnversionedStrTestEntity( "str1" ); + UnversionedStrTestEntity uste2 = new UnversionedStrTestEntity( "str2" ); - em.persist( uste1 ); - em.persist( uste2 ); + em.persist( uste1 ); + em.persist( uste2 ); - em.getTransaction().commit(); + uste1_id = uste1.getId(); + uste2_id = uste2.getId(); + } ); // Revision 1 - em.getTransaction().begin(); - - uste1 = em.find( UnversionedStrTestEntity.class, uste1.getId() ); - uste2 = em.find( UnversionedStrTestEntity.class, uste2.getId() ); + scope.inTransaction( em -> { + UnversionedStrTestEntity uste1 = em.find( UnversionedStrTestEntity.class, uste1_id ); + UnversionedStrTestEntity uste2 = em.find( UnversionedStrTestEntity.class, uste2_id ); - TargetNotAuditedEntity tnae1 = new TargetNotAuditedEntity( 1, "tnae1", uste1 ); - TargetNotAuditedEntity tnae2 = new TargetNotAuditedEntity( 2, "tnae2", uste2 ); - em.persist( tnae1 ); - em.persist( tnae2 ); + TargetNotAuditedEntity tnae1 = new TargetNotAuditedEntity( 1, "tnae1", uste1 ); + TargetNotAuditedEntity tnae2 = new TargetNotAuditedEntity( 2, "tnae2", uste2 ); + em.persist( tnae1 ); + em.persist( tnae2 ); - em.getTransaction().commit(); + tnae1_id = tnae1.getId(); + tnae2_id = tnae2.getId(); + } ); // Revision 2 - em.getTransaction().begin(); + scope.inTransaction( em -> { + TargetNotAuditedEntity tnae1 = em.find( TargetNotAuditedEntity.class, tnae1_id ); + TargetNotAuditedEntity tnae2 = em.find( TargetNotAuditedEntity.class, tnae2_id ); + UnversionedStrTestEntity uste1 = em.find( UnversionedStrTestEntity.class, uste1_id ); + UnversionedStrTestEntity uste2 = em.find( UnversionedStrTestEntity.class, uste2_id ); - tnae1 = em.find( TargetNotAuditedEntity.class, tnae1.getId() ); - tnae2 = em.find( TargetNotAuditedEntity.class, tnae2.getId() ); - - tnae1.setReference( uste2 ); - tnae2.setReference( uste1 ); - - em.getTransaction().commit(); + tnae1.setReference( uste2 ); + tnae2.setReference( uste1 ); + } ); // Revision 3 - em.getTransaction().begin(); - - tnae1 = em.find( TargetNotAuditedEntity.class, tnae1.getId() ); - tnae2 = em.find( TargetNotAuditedEntity.class, tnae2.getId() ); - - //field not changed!!! - tnae1.setReference( uste2 ); - tnae2.setReference( uste2 ); + scope.inTransaction( em -> { + TargetNotAuditedEntity tnae1 = em.find( TargetNotAuditedEntity.class, tnae1_id ); + TargetNotAuditedEntity tnae2 = em.find( TargetNotAuditedEntity.class, tnae2_id ); + UnversionedStrTestEntity uste2 = em.find( UnversionedStrTestEntity.class, uste2_id ); - em.getTransaction().commit(); + //field not changed!!! + tnae1.setReference( uste2 ); + tnae2.setReference( uste2 ); + } ); // Revision 4 - em.getTransaction().begin(); - - tnae1 = em.find( TargetNotAuditedEntity.class, tnae1.getId() ); - tnae2 = em.find( TargetNotAuditedEntity.class, tnae2.getId() ); - - tnae1.setReference( uste1 ); - tnae2.setReference( uste1 ); - - em.getTransaction().commit(); - - // - tnae1_id = tnae1.getId(); - tnae2_id = tnae2.getId(); - uste1_id = uste1.getId(); - uste2_id = uste2.getId(); + scope.inTransaction( em -> { + TargetNotAuditedEntity tnae1 = em.find( TargetNotAuditedEntity.class, tnae1_id ); + TargetNotAuditedEntity tnae2 = em.find( TargetNotAuditedEntity.class, tnae2_id ); + UnversionedStrTestEntity uste1 = em.find( UnversionedStrTestEntity.class, uste1_id ); + + tnae1.setReference( uste1 ); + tnae2.setReference( uste1 ); + } ); } @Test - public void testRevisionsCounts() { - List revisions = getAuditReader().getRevisions( TargetNotAuditedEntity.class, tnae1_id ); - assert Arrays.asList( 1, 2, 4 ).equals( revisions ); - revisions = getAuditReader().getRevisions( TargetNotAuditedEntity.class, tnae2_id ); - assert Arrays.asList( 1, 2, 3, 4 ).equals( revisions ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + List revisions = auditReader.getRevisions( TargetNotAuditedEntity.class, tnae1_id ); + assertEquals( Arrays.asList( 1, 2, 4 ), revisions ); + revisions = auditReader.getRevisions( TargetNotAuditedEntity.class, tnae2_id ); + assertEquals( Arrays.asList( 1, 2, 3, 4 ), revisions ); + } ); } static Class getClassWithoutInitializingProxy(Object object) { @@ -123,42 +118,48 @@ static Class getClassWithoutInitializingProxy(Object object) { } @Test - public void testHistoryOfTnae1_id() { - // load original "tnae1" TargetNotAuditedEntity to force load "str1" UnversionedStrTestEntity as Proxy - TargetNotAuditedEntity original = getEntityManager().find( TargetNotAuditedEntity.class, tnae1_id ); - - UnversionedStrTestEntity uste1 = getEntityManager().find( UnversionedStrTestEntity.class, uste1_id ); - UnversionedStrTestEntity uste2 = getEntityManager().find( UnversionedStrTestEntity.class, uste2_id ); - - TargetNotAuditedEntity rev1 = getAuditReader().find( TargetNotAuditedEntity.class, tnae1_id, 1 ); - TargetNotAuditedEntity rev2 = getAuditReader().find( TargetNotAuditedEntity.class, tnae1_id, 2 ); - TargetNotAuditedEntity rev3 = getAuditReader().find( TargetNotAuditedEntity.class, tnae1_id, 3 ); - TargetNotAuditedEntity rev4 = getAuditReader().find( TargetNotAuditedEntity.class, tnae1_id, 4 ); - - assert rev1.getReference().equals( uste1 ); - assert rev2.getReference().equals( uste2 ); - assert rev3.getReference().equals( uste2 ); - assert rev4.getReference().equals( uste1 ); - - assert original.getReference() instanceof HibernateProxy; - assert UnversionedStrTestEntity.class.equals( Hibernate.getClass( original.getReference() ) ); - assert UnversionedStrTestEntity.class.equals( getClassWithoutInitializingProxy( rev1.getReference() ) ); - assert UnversionedStrTestEntity.class.equals( Hibernate.getClass( rev1.getReference() ) ); + public void testHistoryOfTnae1_id(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + // load original "tnae1" TargetNotAuditedEntity to force load "str1" UnversionedStrTestEntity as Proxy + TargetNotAuditedEntity original = em.find( TargetNotAuditedEntity.class, tnae1_id ); + + UnversionedStrTestEntity uste1 = em.find( UnversionedStrTestEntity.class, uste1_id ); + UnversionedStrTestEntity uste2 = em.find( UnversionedStrTestEntity.class, uste2_id ); + + TargetNotAuditedEntity rev1 = auditReader.find( TargetNotAuditedEntity.class, tnae1_id, 1 ); + TargetNotAuditedEntity rev2 = auditReader.find( TargetNotAuditedEntity.class, tnae1_id, 2 ); + TargetNotAuditedEntity rev3 = auditReader.find( TargetNotAuditedEntity.class, tnae1_id, 3 ); + TargetNotAuditedEntity rev4 = auditReader.find( TargetNotAuditedEntity.class, tnae1_id, 4 ); + + assertEquals( uste1, rev1.getReference() ); + assertEquals( uste2, rev2.getReference() ); + assertEquals( uste2, rev3.getReference() ); + assertEquals( uste1, rev4.getReference() ); + + assertTrue( original.getReference() instanceof HibernateProxy ); + assertEquals( UnversionedStrTestEntity.class, Hibernate.getClass( original.getReference() ) ); + assertEquals( UnversionedStrTestEntity.class, getClassWithoutInitializingProxy( rev1.getReference() ) ); + assertEquals( UnversionedStrTestEntity.class, Hibernate.getClass( rev1.getReference() ) ); + } ); } @Test - public void testHistoryOfTnae2_id() { - UnversionedStrTestEntity uste1 = getEntityManager().find( UnversionedStrTestEntity.class, uste1_id ); - UnversionedStrTestEntity uste2 = getEntityManager().find( UnversionedStrTestEntity.class, uste2_id ); - - TargetNotAuditedEntity rev1 = getAuditReader().find( TargetNotAuditedEntity.class, tnae2_id, 1 ); - TargetNotAuditedEntity rev2 = getAuditReader().find( TargetNotAuditedEntity.class, tnae2_id, 2 ); - TargetNotAuditedEntity rev3 = getAuditReader().find( TargetNotAuditedEntity.class, tnae2_id, 3 ); - TargetNotAuditedEntity rev4 = getAuditReader().find( TargetNotAuditedEntity.class, tnae2_id, 4 ); - - assert rev1.getReference().equals( uste2 ); - assert rev2.getReference().equals( uste1 ); - assert rev3.getReference().equals( uste2 ); - assert rev4.getReference().equals( uste1 ); + public void testHistoryOfTnae2_id(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + UnversionedStrTestEntity uste1 = em.find( UnversionedStrTestEntity.class, uste1_id ); + UnversionedStrTestEntity uste2 = em.find( UnversionedStrTestEntity.class, uste2_id ); + + TargetNotAuditedEntity rev1 = auditReader.find( TargetNotAuditedEntity.class, tnae2_id, 1 ); + TargetNotAuditedEntity rev2 = auditReader.find( TargetNotAuditedEntity.class, tnae2_id, 2 ); + TargetNotAuditedEntity rev3 = auditReader.find( TargetNotAuditedEntity.class, tnae2_id, 3 ); + TargetNotAuditedEntity rev4 = auditReader.find( TargetNotAuditedEntity.class, tnae2_id, 4 ); + + assertEquals( uste2, rev1.getReference() ); + assertEquals( uste1, rev2.getReference() ); + assertEquals( uste2, rev3.getReference() ); + assertEquals( uste1, rev4.getReference() ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/merge/AddDelTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/merge/AddDelTest.java index 20371622a5b3..82354f980cbb 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/merge/AddDelTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/merge/AddDelTest.java @@ -6,69 +6,68 @@ import java.util.Arrays; -import org.hibernate.Session; -import org.hibernate.orm.test.envers.BaseEnversFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.orm.test.envers.entities.StrTestEntity; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Assert; -import org.junit.Test; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) */ @JiraKey(value = "HHH-6753") -public class AddDelTest extends BaseEnversFunctionalTestCase { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {StrTestEntity.class, GivenIdStrEntity.class}; - } +@EnversTest +@Jpa(annotatedClasses = {StrTestEntity.class, GivenIdStrEntity.class}) +public class AddDelTest { - @Test - @Priority(10) - public void initData() { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Revision 1 - Session session = openSession(); - session.getTransaction().begin(); - GivenIdStrEntity entity = new GivenIdStrEntity( 1, "data" ); - session.persist( entity ); - session.getTransaction().commit(); + scope.inTransaction( em -> { + GivenIdStrEntity entity = new GivenIdStrEntity( 1, "data" ); + em.persist( entity ); + } ); // Revision 2 - session.getTransaction().begin(); - session.persist( new StrTestEntity( "another data" ) ); // Just to create second revision. - entity = session.get( GivenIdStrEntity.class, 1 ); - session.remove( entity ); // First try to remove the entity. - session.persist( entity ); // Then save it. - session.getTransaction().commit(); + scope.inTransaction( em -> { + em.persist( new StrTestEntity( "another data" ) ); // Just to create second revision. + GivenIdStrEntity entity = em.find( GivenIdStrEntity.class, 1 ); + em.remove( entity ); // First try to remove the entity. + em.persist( entity ); // Then save it. + } ); // Revision 3 - session.getTransaction().begin(); - entity = session.get( GivenIdStrEntity.class, 1 ); - session.remove( entity ); // First try to remove the entity. - entity.setData( "modified data" ); // Then change it's state. - session.persist( entity ); // Finally save it. - session.getTransaction().commit(); - - session.close(); + scope.inTransaction( em -> { + GivenIdStrEntity entity = em.find( GivenIdStrEntity.class, 1 ); + em.remove( entity ); // First try to remove the entity. + entity.setData( "modified data" ); // Then change it's state. + em.persist( entity ); // Finally save it. + } ); } @Test - public void testRevisionsCountOfGivenIdStrEntity() { - // Revision 2 has not changed entity's state. - Assert.assertEquals( Arrays.asList( 1, 3 ), getAuditReader().getRevisions( GivenIdStrEntity.class, 1 ) ); + public void testRevisionsCountOfGivenIdStrEntity(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + // Revision 2 has not changed entity's state. + assertEquals( Arrays.asList( 1, 3 ), AuditReaderFactory.get( em ).getRevisions( GivenIdStrEntity.class, 1 ) ); + } ); } @Test - public void testHistoryOfGivenIdStrEntity() { - Assert.assertEquals( new GivenIdStrEntity( 1, "data" ), getAuditReader().find( GivenIdStrEntity.class, 1, 1 ) ); - Assert.assertEquals( - new GivenIdStrEntity( 1, "modified data" ), getAuditReader().find( - GivenIdStrEntity.class, - 1, - 3 - ) - ); + public void testHistoryOfGivenIdStrEntity(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( new GivenIdStrEntity( 1, "data" ), auditReader.find( GivenIdStrEntity.class, 1, 1 ) ); + assertEquals( + new GivenIdStrEntity( 1, "modified data" ), + auditReader.find( GivenIdStrEntity.class, 1, 3 ) + ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/AbstractModifiedFlagsEntityTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/AbstractModifiedFlagsEntityTest.java index d2eb0aa64c34..d6cc63297c24 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/AbstractModifiedFlagsEntityTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/AbstractModifiedFlagsEntityTest.java @@ -5,64 +5,53 @@ package org.hibernate.orm.test.envers.integration.modifiedflags; import java.util.List; -import java.util.Map; -import org.hibernate.envers.configuration.EnversSettings; +import org.hibernate.envers.AuditReader; import org.hibernate.envers.query.AuditEntity; import org.hibernate.envers.query.AuditQuery; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; +import org.hibernate.testing.envers.junit.EnversTest; /** - * Base test for modified flags feature + * Base utility for modified flags feature tests * * @author Michal Skowronek (mskowr at o2 dot pl) */ -public abstract class AbstractModifiedFlagsEntityTest extends BaseEnversJPAFunctionalTestCase { - @Override - protected void addConfigOptions(Map options) { - super.addConfigOptions( options ); - if ( forceModifiedFlags() ) { - options.put( EnversSettings.GLOBAL_WITH_MODIFIED_FLAG, "true" ); - } - } - - public boolean forceModifiedFlags() { - return true; - } +@EnversTest +public abstract class AbstractModifiedFlagsEntityTest { - protected List queryForPropertyHasChanged( - Class clazz, Object id, + protected static List queryForPropertyHasChanged( + AuditReader auditReader, Class clazz, Object id, String... propertyNames) { - AuditQuery query = createForRevisionsQuery( clazz, id, false ); + AuditQuery query = createForRevisionsQuery( auditReader, clazz, id, false ); addHasChangedProperties( query, propertyNames ); return query.getResultList(); } - protected List queryForPropertyHasChangedWithDeleted( - Class clazz, Object id, + protected static List queryForPropertyHasChangedWithDeleted( + AuditReader auditReader, Class clazz, Object id, String... propertyNames) { - AuditQuery query = createForRevisionsQuery( clazz, id, true ); + AuditQuery query = createForRevisionsQuery( auditReader, clazz, id, true ); addHasChangedProperties( query, propertyNames ); return query.getResultList(); } - protected List queryForPropertyHasNotChanged( - Class clazz, Object id, + protected static List queryForPropertyHasNotChanged( + AuditReader auditReader, Class clazz, Object id, String... propertyNames) { - AuditQuery query = createForRevisionsQuery( clazz, id, false ); + AuditQuery query = createForRevisionsQuery( auditReader, clazz, id, false ); addHasNotChangedProperties( query, propertyNames ); return query.getResultList(); } - protected List queryForPropertyHasNotChangedWithDeleted( - Class clazz, Object id, + protected static List queryForPropertyHasNotChangedWithDeleted( + AuditReader auditReader, Class clazz, Object id, String... propertyNames) { - AuditQuery query = createForRevisionsQuery( clazz, id, true ); + AuditQuery query = createForRevisionsQuery( auditReader, clazz, id, true ); addHasNotChangedProperties( query, propertyNames ); return query.getResultList(); } - private void addHasChangedProperties( + private static void addHasChangedProperties( AuditQuery query, String[] propertyNames) { for ( String propertyName : propertyNames ) { @@ -70,7 +59,7 @@ private void addHasChangedProperties( } } - private void addHasNotChangedProperties( + private static void addHasNotChangedProperties( AuditQuery query, String[] propertyNames) { for ( String propertyName : propertyNames ) { @@ -78,8 +67,8 @@ private void addHasNotChangedProperties( } } - private AuditQuery createForRevisionsQuery(Class clazz, Object id, boolean withDeleted) { - return getAuditReader().createQuery() + private static AuditQuery createForRevisionsQuery(AuditReader auditReader, Class clazz, Object id, boolean withDeleted) { + return auditReader.createQuery() .forRevisionsOfEntity( clazz, false, withDeleted ) .add( AuditEntity.id().eq( id ) ); } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/AbstractModifiedFlagsOneSessionTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/AbstractModifiedFlagsOneSessionTest.java index d3d5bd0c33b9..6d5f66e00920 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/AbstractModifiedFlagsOneSessionTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/AbstractModifiedFlagsOneSessionTest.java @@ -13,6 +13,7 @@ * * @author Michal Skowronek (mskowr at o2 dot pl) */ +// todo (envers-junit): migrate this after AbstractOneSessionTest public abstract class AbstractModifiedFlagsOneSessionTest extends AbstractOneSessionTest { diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/DetachedEntityTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/DetachedEntityTest.java index 99a77838cfa0..18dc051af8aa 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/DetachedEntityTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/DetachedEntityTest.java @@ -10,16 +10,17 @@ import jakarta.persistence.Entity; import jakarta.persistence.Id; -import org.hibernate.Session; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.Audited; import org.hibernate.envers.query.AuditEntity; -import org.hibernate.orm.test.envers.BaseEnversFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.junit.Test; - +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * Test that an updated detached entity will still properly track {@code withModifiedFlag} @@ -29,84 +30,80 @@ * @author Chris Cranford */ @JiraKey("HHH-8973") -public class DetachedEntityTest extends BaseEnversFunctionalTestCase { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { Project.class }; - } +@EnversTest +@Jpa(annotatedClasses = { DetachedEntityTest.Project.class }) +public class DetachedEntityTest { - @Test - @Priority(10) - public void initData() { - final Session s = openSession(); - try { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + scope.inTransaction( em -> { // revision 1 - persist the project entity - s.getTransaction().begin(); final Project project = new Project( 1, "fooName" ); - s.persist( project ); - s.getTransaction().commit(); - - // detach the project entity - s.clear(); - - // revision 2 to 6 - update the detached project entity. - for( int i = 0; i < 5; ++i ) { - s.getTransaction().begin(); - project.setName( "fooName" + ( i + 2 ) ); - s.merge( project ); - s.getTransaction().commit(); - s.clear(); - } - } - catch ( Throwable t ) { - if ( s.getTransaction().isActive() ) { - s.getTransaction().rollback(); - } - throw t; - } - finally { - s.close(); + em.persist( project ); + } ); + + // revision 2 to 6 - update the detached project entity. + for ( int i = 0; i < 5; ++i ) { + final int index = i; + scope.inTransaction( em -> { + final Project project = em.find( Project.class, 1 ); + em.detach( project ); + project.setName( "fooName" + ( index + 2 ) ); + em.merge( project ); + } ); } } @Test - public void testRevisionCounts() { - assertEquals( Arrays.asList( 1, 2, 3, 4, 5, 6 ), getAuditReader().getRevisions( Project.class, 1 ) ); + public void testRevisionCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1, 2, 3, 4, 5, 6 ), auditReader.getRevisions( Project.class, 1 ) ); + } ); } @Test - public void testRevisionHistory() { - for ( Integer revision : Arrays.asList( 1, 2, 3, 4, 5, 6 ) ) { - final Project project = getAuditReader().find( Project.class, 1, revision ); - if ( revision == 1 ) { - assertEquals( new Project( 1, "fooName" ), project ); + public void testRevisionHistory(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + for ( Integer revision : Arrays.asList( 1, 2, 3, 4, 5, 6 ) ) { + final Project project = auditReader.find( Project.class, 1, revision ); + if ( revision == 1 ) { + assertEquals( new Project( 1, "fooName" ), project ); + } + else { + assertEquals( new Project( 1, "fooName" + revision ), project ); + } } - else { - assertEquals( new Project( 1, "fooName" + revision ), project ); - } - } + } ); } @Test - public void testModifiedFlagChangesForProjectType() { - final List results = getAuditReader().createQuery() - .forRevisionsOfEntity( Project.class, false, true ) - .add( AuditEntity.property( "type" ).hasChanged() ) - .addProjection( AuditEntity.revisionNumber() ) - .addOrder( AuditEntity.revisionNumber().asc() ) - .getResultList(); - assertEquals( Arrays.asList( 1 ), results ); + public void testModifiedFlagChangesForProjectType(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + final List results = auditReader.createQuery() + .forRevisionsOfEntity( Project.class, false, true ) + .add( AuditEntity.property( "type" ).hasChanged() ) + .addProjection( AuditEntity.revisionNumber() ) + .addOrder( AuditEntity.revisionNumber().asc() ) + .getResultList(); + assertEquals( Arrays.asList( 1 ), results ); + } ); } @Test - public void testModifiedFlagChangesForProjectName() { - final List results = getAuditReader().createQuery() - .forRevisionsOfEntity( Project.class, false, true ) - .add( AuditEntity.property( "name" ).hasChanged() ) - .addProjection( AuditEntity.revisionNumber() ) - .addOrder( AuditEntity.revisionNumber().asc() ) - .getResultList(); - assertEquals( Arrays.asList( 1, 2, 3, 4, 5, 6 ), results ); + public void testModifiedFlagChangesForProjectName(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + final List results = auditReader.createQuery() + .forRevisionsOfEntity( Project.class, false, true ) + .add( AuditEntity.property( "name" ).hasChanged() ) + .addProjection( AuditEntity.revisionNumber() ) + .addOrder( AuditEntity.revisionNumber().asc() ) + .getResultList(); + assertEquals( Arrays.asList( 1, 2, 3, 4, 5, 6 ), results ); + } ); } @Entity(name = "Project") diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedAPITest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedAPITest.java index a4ed91b518ad..5d433f698488 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedAPITest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedAPITest.java @@ -4,22 +4,22 @@ */ package org.hibernate.orm.test.envers.integration.modifiedflags; -import java.util.List; -import jakarta.persistence.EntityManager; - +import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.envers.configuration.EnversSettings; import org.hibernate.envers.query.AuditEntity; -import org.hibernate.orm.test.envers.Priority; import org.hibernate.orm.test.envers.integration.auditReader.AuditedTestEntity; import org.hibernate.orm.test.envers.integration.auditReader.NotAuditedTestEntity; - import org.hibernate.orm.test.envers.integration.modifiedflags.entities.EnumEntity; import org.hibernate.orm.test.envers.integration.modifiedflags.entities.EnumOption; -import org.junit.Test; - +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; +import org.hibernate.testing.orm.junit.Jpa; +import org.hibernate.testing.orm.junit.Setting; +import org.junit.jupiter.api.Test; -import static junit.framework.Assert.assertEquals; -import static junit.framework.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; /** * A test which checks the correct behavior of AuditReader.isEntityClassAudited(Class entityClass). @@ -27,63 +27,68 @@ * @author Hernan Chanfreau * @author Michal Skowronek (mskowr at o2 dot pl) */ +@Jpa(integrationSettings = @Setting(name = EnversSettings.GLOBAL_WITH_MODIFIED_FLAG, value = "true"), + annotatedClasses = {AuditedTestEntity.class, NotAuditedTestEntity.class, EnumEntity.class}) public class HasChangedAPITest extends AbstractModifiedFlagsEntityTest { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {AuditedTestEntity.class, NotAuditedTestEntity.class, EnumEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - AuditedTestEntity ent1 = new AuditedTestEntity( 1, "str1" ); - NotAuditedTestEntity ent2 = new NotAuditedTestEntity( 1, "str1" ); - EnumEntity ent3 = new EnumEntity( 1, EnumOption.A ); - - - em.persist( ent1 ); - em.persist( ent2 ); - em.persist( ent3 ); - em.getTransaction().commit(); - em.getTransaction().begin(); - - ent1 = em.find( AuditedTestEntity.class, 1 ); - ent2 = em.find( NotAuditedTestEntity.class, 1 ); - ent3 = em.find( EnumEntity.class, 1 ); - ent1.setStr1( "str2" ); - ent2.setStr1( "str2" ); - ent3.setOption( EnumOption.B ); - em.getTransaction().commit(); + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + em.getTransaction().begin(); + AuditedTestEntity ent1 = new AuditedTestEntity( 1, "str1" ); + NotAuditedTestEntity ent2 = new NotAuditedTestEntity( 1, "str1" ); + EnumEntity ent3 = new EnumEntity( 1, EnumOption.A ); + + + em.persist( ent1 ); + em.persist( ent2 ); + em.persist( ent3 ); + em.getTransaction().commit(); + + em.getTransaction().begin(); + + ent1 = em.find( AuditedTestEntity.class, 1 ); + ent2 = em.find( NotAuditedTestEntity.class, 1 ); + ent3 = em.find( EnumEntity.class, 1 ); + ent1.setStr1( "str2" ); + ent2.setStr1( "str2" ); + ent3.setOption( EnumOption.B ); + em.getTransaction().commit(); + } ); } @Test - public void testHasChangedHasNotChangedCriteria() throws Exception { - List list = getAuditReader().createQuery().forRevisionsOfEntity( AuditedTestEntity.class, true, true ) - .add( AuditEntity.property( "str1" ).hasChanged() ).getResultList(); - assertEquals( 2, list.size() ); - assertEquals( "str1", ((AuditedTestEntity) list.get( 0 )).getStr1() ); - assertEquals( "str2", ((AuditedTestEntity) list.get( 1 )).getStr1() ); + public void testHasChangedHasNotChangedCriteria(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + var list = auditReader.createQuery().forRevisionsOfEntity( AuditedTestEntity.class, true, true ) + .add( AuditEntity.property( "str1" ).hasChanged() ).getResultList(); + assertEquals( 2, list.size() ); + assertEquals( "str1", ((AuditedTestEntity) list.get( 0 )).getStr1() ); + assertEquals( "str2", ((AuditedTestEntity) list.get( 1 )).getStr1() ); + + list = auditReader.createQuery().forRevisionsOfEntity( AuditedTestEntity.class, true, true ) + .add( AuditEntity.property( "str1" ).hasNotChanged() ).getResultList(); + assertTrue( list.isEmpty() ); + } ); - list = getAuditReader().createQuery().forRevisionsOfEntity( AuditedTestEntity.class, true, true ) - .add( AuditEntity.property( "str1" ).hasNotChanged() ).getResultList(); - assertTrue( list.isEmpty() ); } @Test @JiraKey(value = "HHH-13770") - public void testHasChangedHasNotChangedEnum() { - List list = getAuditReader().createQuery().forRevisionsOfEntity( EnumEntity.class, true, true ) - .add( AuditEntity.property( "option" ).hasChanged() ).getResultList(); - assertEquals( 2, list.size() ); - assertEquals( EnumOption.A, ( (EnumEntity) list.get( 0 ) ).getOption() ); - assertEquals( EnumOption.B, ( (EnumEntity) list.get( 1 ) ).getOption() ); - - list = getAuditReader().createQuery().forRevisionsOfEntity( EnumEntity.class, true, true ) - .add( AuditEntity.property( "option" ).hasNotChanged() ).getResultList(); - assertTrue( list.isEmpty() ); + public void testHasChangedHasNotChangedEnum(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + var list = auditReader.createQuery().forRevisionsOfEntity( EnumEntity.class, true, true ) + .add( AuditEntity.property( "option" ).hasChanged() ).getResultList(); + assertEquals( 2, list.size() ); + assertEquals( EnumOption.A, ((EnumEntity) list.get( 0 )).getOption() ); + assertEquals( EnumOption.B, ((EnumEntity) list.get( 1 )).getOption() ); + + list = auditReader.createQuery().forRevisionsOfEntity( EnumEntity.class, true, true ) + .add( AuditEntity.property( "option" ).hasNotChanged() ).getResultList(); + assertTrue( list.isEmpty() ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedAuditedManyToManyRemovalTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedAuditedManyToManyRemovalTest.java index 43070f1ce89e..60d289cd129a 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedAuditedManyToManyRemovalTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedAuditedManyToManyRemovalTest.java @@ -4,66 +4,49 @@ */ package org.hibernate.orm.test.envers.integration.modifiedflags; -import java.util.Map; - -import jakarta.persistence.EntityManager; - import org.hibernate.envers.configuration.EnversSettings; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; import org.hibernate.orm.test.envers.integration.modifiedflags.entities.Professor; import org.hibernate.orm.test.envers.integration.modifiedflags.entities.Student; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; +import org.hibernate.testing.orm.junit.Jpa; +import org.hibernate.testing.orm.junit.Setting; /** * @author Chris Cranford */ @JiraKey(value = "HHH-7510") -public class HasChangedAuditedManyToManyRemovalTest extends BaseEnversJPAFunctionalTestCase { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { - Student.class, - Professor.class - }; - } - - @Override - protected void addConfigOptions(Map options) { - super.addConfigOptions( options ); - options.put( EnversSettings.STORE_DATA_AT_DELETE, "true" ); - options.put( EnversSettings.GLOBAL_WITH_MODIFIED_FLAG, "true" ); - } +@EnversTest +@Jpa( + annotatedClasses = { Student.class, Professor.class }, + integrationSettings = { + @Setting(name = EnversSettings.STORE_DATA_AT_DELETE, value = "true"), + @Setting(name = EnversSettings.GLOBAL_WITH_MODIFIED_FLAG, value = "true") + } +) +public class HasChangedAuditedManyToManyRemovalTest { - @Test - @Priority(10) - public void initData() { - EntityManager entityManager = getEntityManager(); - try { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + scope.inTransaction( em -> { // Revision 1 - insertion Professor professor = new Professor(); Student student = new Student(); professor.getStudents().add( student ); student.getProfessors().add( professor ); - entityManager.getTransaction().begin(); - entityManager.persist( professor ); - entityManager.persist( student ); - entityManager.getTransaction().commit(); - entityManager.clear(); + em.persist( professor ); + em.persist( student ); + } ); + scope.inTransaction( em -> { // Revision 2 - deletion - entityManager.getTransaction().begin(); - professor = entityManager.find( Professor.class, professor.getId() ); - student = entityManager.find( Student.class, student.getId() ); - entityManager.remove( professor ); - entityManager.remove( student ); + Professor professor = em.createQuery( "from Professor", Professor.class ).getSingleResult(); + Student student = em.createQuery( "from Student", Student.class ).getSingleResult(); + em.remove( professor ); + em.remove( student ); // the issue is student.getProfessors() throws a LazyInitializationException. - entityManager.getTransaction().commit(); - } - finally { - entityManager.close(); - } + } ); } - } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedAuditedManyToManyTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedAuditedManyToManyTest.java index 0f61796abeaa..e44a37585c97 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedAuditedManyToManyTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedAuditedManyToManyTest.java @@ -29,6 +29,7 @@ * @author Michal Skowronek (mskowr at o2 dot pl) */ @RequiresDialect(H2Dialect.class) +// todo (envers-junit): migrate this after AbstractModifiedFlagsOneSessionTest public class HasChangedAuditedManyToManyTest extends AbstractModifiedFlagsOneSessionTest { private long id_car1; diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedBidirectional2.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedBidirectional2.java index f021e758f434..be86c48d5244 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedBidirectional2.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedBidirectional2.java @@ -5,15 +5,19 @@ package org.hibernate.orm.test.envers.integration.modifiedflags; import java.util.List; -import jakarta.persistence.EntityManager; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.envers.configuration.EnversSettings; import org.hibernate.orm.test.envers.integration.onetoone.bidirectional.BiRefEdEntity; import org.hibernate.orm.test.envers.integration.onetoone.bidirectional.BiRefIngEntity; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; +import org.hibernate.testing.orm.junit.Setting; -import org.junit.Test; +import org.junit.jupiter.api.Test; -import static junit.framework.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; import static org.hibernate.orm.test.envers.tools.TestTools.extractRevisionNumbers; import static org.hibernate.orm.test.envers.tools.TestTools.makeList; @@ -21,18 +25,14 @@ * @author Adam Warski (adam at warski dot org) * @author Michal Skowronek (mskowr at o2 dot pl) */ +@Jpa(integrationSettings = @Setting(name = EnversSettings.GLOBAL_WITH_MODIFIED_FLAG, value = "true"), + annotatedClasses = {BiRefEdEntity.class, BiRefIngEntity.class}) public class HasChangedBidirectional2 extends AbstractModifiedFlagsEntityTest { private Integer ed1_id; private Integer ed2_id; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {BiRefEdEntity.class, BiRefIngEntity.class}; - } - - @Test - @Priority(10) - public void initData() { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { BiRefEdEntity ed1 = new BiRefEdEntity( 1, "data_ed_1" ); BiRefEdEntity ed2 = new BiRefEdEntity( 2, "data_ed_2" ); @@ -40,71 +40,78 @@ public void initData() { BiRefIngEntity ing2 = new BiRefIngEntity( 4, "data_ing_2" ); // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); + scope.inEntityManager( em -> { + em.getTransaction().begin(); - em.persist( ed1 ); - em.persist( ed2 ); + em.persist( ed1 ); + em.persist( ed2 ); - em.getTransaction().commit(); + em.getTransaction().commit(); + } ); // Revision 2 - em.getTransaction().begin(); + scope.inEntityManager( em -> { + em.getTransaction().begin(); - ed1 = em.find( BiRefEdEntity.class, ed1.getId() ); + BiRefEdEntity ed1Ref = em.find( BiRefEdEntity.class, ed1.getId() ); - ing1.setReference( ed1 ); + ing1.setReference( ed1Ref ); - em.persist( ing1 ); - em.persist( ing2 ); + em.persist( ing1 ); + em.persist( ing2 ); - em.getTransaction().commit(); + em.getTransaction().commit(); + } ); // Revision 3 - em.getTransaction().begin(); + scope.inEntityManager( em -> { + em.getTransaction().begin(); - ed1 = em.find( BiRefEdEntity.class, ed1.getId() ); - ing1 = em.find( BiRefIngEntity.class, ing1.getId() ); - ing2 = em.find( BiRefIngEntity.class, ing2.getId() ); + BiRefEdEntity ed1Ref = em.find( BiRefEdEntity.class, ed1.getId() ); + BiRefIngEntity ing1Ref = em.find( BiRefIngEntity.class, ing1.getId() ); + BiRefIngEntity ing2Ref = em.find( BiRefIngEntity.class, ing2.getId() ); - ing1.setReference( null ); - ing2.setReference( ed1 ); + ing1Ref.setReference( null ); + ing2Ref.setReference( ed1Ref ); - em.getTransaction().commit(); + em.getTransaction().commit(); + } ); // Revision 4 - em.getTransaction().begin(); + scope.inEntityManager( em -> { + em.getTransaction().begin(); - ed2 = em.find( BiRefEdEntity.class, ed2.getId() ); - ing1 = em.find( BiRefIngEntity.class, ing1.getId() ); - ing2 = em.find( BiRefIngEntity.class, ing2.getId() ); + BiRefEdEntity ed2Ref = em.find( BiRefEdEntity.class, ed2.getId() ); + BiRefIngEntity ing1Ref = em.find( BiRefIngEntity.class, ing1.getId() ); + BiRefIngEntity ing2Ref = em.find( BiRefIngEntity.class, ing2.getId() ); - ing1.setReference( ed2 ); - ing2.setReference( null ); + ing1Ref.setReference( ed2Ref ); + ing2Ref.setReference( null ); - em.getTransaction().commit(); - - // + em.getTransaction().commit(); + } ); ed1_id = ed1.getId(); ed2_id = ed2.getId(); - } @Test - public void testHasChanged() throws Exception { - List list = queryForPropertyHasChanged( - BiRefEdEntity.class, ed1_id, - "referencing" - ); - assertEquals( 3, list.size() ); - assertEquals( makeList( 2, 3, 4 ), extractRevisionNumbers( list ) ); - - list = queryForPropertyHasChanged( - BiRefEdEntity.class, ed2_id, - "referencing" - ); - assertEquals( 1, list.size() ); - assertEquals( makeList( 4 ), extractRevisionNumbers( list ) ); + public void testHasChanged(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + List list = queryForPropertyHasChanged( + auditReader, BiRefEdEntity.class, ed1_id, + "referencing" + ); + assertEquals( 3, list.size() ); + assertEquals( makeList( 2, 3, 4 ), extractRevisionNumbers( list ) ); + + list = queryForPropertyHasChanged( + auditReader, BiRefEdEntity.class, ed2_id, + "referencing" + ); + assertEquals( 1, list.size() ); + assertEquals( makeList( 4 ), extractRevisionNumbers( list ) ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedBidirectionalTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedBidirectionalTest.java index e68d569f2e61..0361f7fd20e3 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedBidirectionalTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedBidirectionalTest.java @@ -14,94 +14,116 @@ import jakarta.persistence.OneToMany; import jakarta.persistence.Table; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.configuration.EnversSettings; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; -import org.hibernate.testing.transaction.TransactionUtil; -import org.junit.Test; +import org.hibernate.testing.orm.junit.Jpa; +import org.hibernate.testing.orm.junit.Setting; +import org.junit.jupiter.api.Test; import static org.hibernate.orm.test.envers.tools.TestTools.extractRevisionNumbers; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Chris Cranford */ @JiraKey(value = "HHH-7949") +@Jpa(integrationSettings = @Setting(name = EnversSettings.GLOBAL_WITH_MODIFIED_FLAG, value = "true"), + annotatedClasses = {HasChangedBidirectionalTest.Ticket.class, HasChangedBidirectionalTest.Comment.class}) public class HasChangedBidirectionalTest extends AbstractModifiedFlagsEntityTest { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { Ticket.class, Comment.class }; - } - @Test - @Priority(10) - public void initData() throws Exception { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Revision 1 | Create ticket with comments - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { + scope.inEntityManager( entityManager -> { + entityManager.getTransaction().begin(); final Ticket ticket = new Ticket( 1, "data-t1" ); final Comment comment = new Comment( 1, "Initial comment-t1" ); ticket.addComment( comment ); entityManager.persist( comment ); entityManager.persist( ticket ); + entityManager.getTransaction().commit(); } ); // Revision 2 | Create ticket without comments - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { + scope.inEntityManager( entityManager -> { + entityManager.getTransaction().begin(); final Ticket ticket = new Ticket( 2, "data-t2" ); entityManager.persist( ticket ); + entityManager.getTransaction().commit(); } ); // Revision 3 | Update ticket with comments - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { + scope.inEntityManager( entityManager -> { + entityManager.getTransaction().begin(); final Ticket ticket = entityManager.find( Ticket.class, 1 ); ticket.setData( "data-changed-t1" ); entityManager.merge( ticket ); + entityManager.getTransaction().commit(); } ); // Revision 4 | Update ticket without comments - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { + scope.inEntityManager( entityManager -> { + entityManager.getTransaction().begin(); final Ticket ticket = entityManager.find( Ticket.class, 2 ); ticket.setData( "data-changed-t2" ); entityManager.merge( ticket ); + entityManager.getTransaction().commit(); } ); // Revision 5 | Update ticket and comment - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { + scope.inEntityManager( entityManager -> { + entityManager.getTransaction().begin(); final Ticket ticket = entityManager.find( Ticket.class, 1 ); ticket.setData( "data-changed-twice" ); ticket.getComments().get( 0 ).setText( "comment-modified" ); ticket.getComments().forEach( entityManager::merge ); entityManager.merge( ticket ); + entityManager.getTransaction().commit(); } ); // Revision 6 | Update ticket and comment collection - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { + scope.inEntityManager( entityManager -> { + entityManager.getTransaction().begin(); final Ticket ticket = entityManager.find( Ticket.class, 1 ); final Comment comment = new Comment( 2, "Comment2" ); ticket.addComment( comment ); entityManager.merge( comment ); entityManager.merge( ticket ); + entityManager.getTransaction().commit(); } ); } @Test - public void testRevisionCounts() { - assertEquals( Arrays.asList( 1, 3, 5, 6 ), getAuditReader().getRevisions( Ticket.class, 1 ) ); - assertEquals( Arrays.asList( 2, 4 ), getAuditReader().getRevisions( Ticket.class, 2 ) ); - assertEquals( Arrays.asList( 1, 5 ), getAuditReader().getRevisions( Comment.class, 1 ) ); - assertEquals( Arrays.asList( 6 ), getAuditReader().getRevisions( Comment.class, 2 ) ); + public void testRevisionCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1, 3, 5, 6 ), auditReader.getRevisions( Ticket.class, 1 ) ); + assertEquals( Arrays.asList( 2, 4 ), auditReader.getRevisions( Ticket.class, 2 ) ); + assertEquals( Arrays.asList( 1, 5 ), auditReader.getRevisions( Comment.class, 1 ) ); + assertEquals( Arrays.asList( 6 ), auditReader.getRevisions( Comment.class, 2 ) ); + } ); } @Test - public void testHasChanged() { - assertEquals( Arrays.asList( 1, 6 ), extractRevisionNumbers( queryForPropertyHasChanged( Ticket.class, 1, "comments" ) ) ); - assertEquals( Arrays.asList( 2 ), extractRevisionNumbers( queryForPropertyHasChanged( Ticket.class, 2, "comments" ) ) ); + public void testHasChanged(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1, 6 ), extractRevisionNumbers( queryForPropertyHasChanged( auditReader, Ticket.class, 1, "comments" ) ) ); + assertEquals( Arrays.asList( 2 ), extractRevisionNumbers( queryForPropertyHasChanged( auditReader, Ticket.class, 2, "comments" ) ) ); + } ); } @Test - public void testHasNotChanged() { - assertEquals( Arrays.asList( 3, 5 ), extractRevisionNumbers( queryForPropertyHasNotChanged( Ticket.class, 1, "comments" ) ) ); - assertEquals( Arrays.asList( 4 ), extractRevisionNumbers( queryForPropertyHasNotChanged( Ticket.class, 2, "comments" ) ) ); + public void testHasNotChanged(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 3, 5 ), extractRevisionNumbers( queryForPropertyHasNotChanged( auditReader, Ticket.class, 1, "comments" ) ) ); + assertEquals( Arrays.asList( 4 ), extractRevisionNumbers( queryForPropertyHasNotChanged( auditReader, Ticket.class, 2, "comments" ) ) ); + } ); } @Entity(name = "Ticket") diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedChildAuditing.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedChildAuditing.java new file mode 100644 index 000000000000..9cfe94e0b0fb --- /dev/null +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedChildAuditing.java @@ -0,0 +1,87 @@ +/* + * SPDX-License-Identifier: Apache-2.0 + * Copyright Red Hat Inc. and Hibernate Authors + */ +package org.hibernate.orm.test.envers.integration.modifiedflags; + +import java.util.List; + +import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.envers.configuration.EnversSettings; +import org.hibernate.orm.test.envers.integration.inheritance.joined.ChildEntity; +import org.hibernate.orm.test.envers.integration.inheritance.joined.ParentEntity; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; +import org.hibernate.testing.orm.junit.Setting; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.hibernate.orm.test.envers.tools.TestTools.extractRevisionNumbers; +import static org.hibernate.orm.test.envers.tools.TestTools.makeList; + +/** + * @author Adam Warski (adam at warski dot org) + * @author Michal Skowronek (mskowr at o2 dot pl) + */ +@Jpa(integrationSettings = @Setting(name = EnversSettings.GLOBAL_WITH_MODIFIED_FLAG, value = "true"), + annotatedClasses = {ChildEntity.class, ParentEntity.class}) +public class HasChangedChildAuditing extends AbstractModifiedFlagsEntityTest { + private Integer id1; + + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + id1 = 1; + + // Rev 1 + scope.inEntityManager( em -> { + em.getTransaction().begin(); + ChildEntity ce = new ChildEntity( id1, "x", 1l ); + em.persist( ce ); + em.getTransaction().commit(); + } ); + + // Rev 2 + scope.inEntityManager( em -> { + em.getTransaction().begin(); + ChildEntity ce = em.find( ChildEntity.class, id1 ); + ce.setData( "y" ); + ce.setNumVal( 2l ); + em.getTransaction().commit(); + } ); + } + + @Test + public void testChildHasChanged(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + List list = queryForPropertyHasChanged( auditReader, ChildEntity.class, id1, "data" ); + assertEquals( 2, list.size() ); + assertEquals( makeList( 1, 2 ), extractRevisionNumbers( list ) ); + + list = queryForPropertyHasChanged( auditReader, ChildEntity.class, id1, "numVal" ); + assertEquals( 2, list.size() ); + assertEquals( makeList( 1, 2 ), extractRevisionNumbers( list ) ); + + list = queryForPropertyHasNotChanged( auditReader, ChildEntity.class, id1, "data" ); + assertEquals( 0, list.size() ); + + list = queryForPropertyHasNotChanged( auditReader, ChildEntity.class, id1, "numVal" ); + assertEquals( 0, list.size() ); + } ); + } + + @Test + public void testParentHasChanged(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + List list = queryForPropertyHasChanged( auditReader, ParentEntity.class, id1, "data" ); + assertEquals( 2, list.size() ); + assertEquals( makeList( 1, 2 ), extractRevisionNumbers( list ) ); + + list = queryForPropertyHasNotChanged( auditReader, ParentEntity.class, id1, "data" ); + assertEquals( 0, list.size() ); + } ); + } +} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedChildReferencing.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedChildReferencing.java new file mode 100644 index 000000000000..2b034b4a90a2 --- /dev/null +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedChildReferencing.java @@ -0,0 +1,99 @@ +/* + * SPDX-License-Identifier: Apache-2.0 + * Copyright Red Hat Inc. and Hibernate Authors + */ +package org.hibernate.orm.test.envers.integration.modifiedflags; + +import java.util.List; + +import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.envers.configuration.EnversSettings; +import org.hibernate.orm.test.envers.integration.inheritance.joined.childrelation.ChildIngEntity; +import org.hibernate.orm.test.envers.integration.inheritance.joined.childrelation.ParentNotIngEntity; +import org.hibernate.orm.test.envers.integration.inheritance.joined.childrelation.ReferencedEntity; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; +import org.hibernate.testing.orm.junit.Setting; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.hibernate.orm.test.envers.tools.TestTools.extractRevisionNumbers; +import static org.hibernate.orm.test.envers.tools.TestTools.makeList; + +/** + * @author Adam Warski (adam at warski dot org) + * @author Michal Skowronek (mskowr at o2 dot pl) + */ +@Jpa(integrationSettings = @Setting(name = EnversSettings.GLOBAL_WITH_MODIFIED_FLAG, value = "true"), + annotatedClasses = {ChildIngEntity.class, ParentNotIngEntity.class, ReferencedEntity.class}) +public class HasChangedChildReferencing extends AbstractModifiedFlagsEntityTest { + private Integer re_id1; + private Integer re_id2; + private Integer c_id; + + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + re_id1 = 1; + re_id2 = 10; + c_id = 100; + + // Rev 1 + scope.inEntityManager( em -> { + em.getTransaction().begin(); + + ReferencedEntity re1 = new ReferencedEntity( re_id1 ); + em.persist( re1 ); + + ReferencedEntity re2 = new ReferencedEntity( re_id2 ); + em.persist( re2 ); + + em.getTransaction().commit(); + } ); + + // Rev 2 + scope.inEntityManager( em -> { + em.getTransaction().begin(); + + ReferencedEntity re1 = em.find( ReferencedEntity.class, re_id1 ); + + ChildIngEntity cie = new ChildIngEntity( c_id, "y", 1l ); + cie.setReferenced( re1 ); + em.persist( cie ); + + em.getTransaction().commit(); + } ); + + // Rev 3 + scope.inEntityManager( em -> { + em.getTransaction().begin(); + + ReferencedEntity re2 = em.find( ReferencedEntity.class, re_id2 ); + ChildIngEntity cie = em.find( ChildIngEntity.class, c_id ); + + cie.setReferenced( re2 ); + + em.getTransaction().commit(); + } ); + } + + @Test + public void testReferencedEntityHasChanged(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + List list = queryForPropertyHasChanged( auditReader, ReferencedEntity.class, re_id1, "referencing" ); + assertEquals( 2, list.size() ); + assertEquals( makeList( 2, 3 ), extractRevisionNumbers( list ) ); + + list = queryForPropertyHasNotChanged( auditReader, ReferencedEntity.class, re_id1, "referencing" ); + assertEquals( 1, list.size() ); // initially referencing collection is null + assertEquals( makeList( 1 ), extractRevisionNumbers( list ) ); + + list = queryForPropertyHasChanged( auditReader, ReferencedEntity.class, re_id2, "referencing" ); + assertEquals( 1, list.size() ); + assertEquals( makeList( 3 ), extractRevisionNumbers( list ) ); + } ); + } + +} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedComponentCollection.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedComponentCollection.java index 64f06d36d2b7..0be7125e34ad 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedComponentCollection.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedComponentCollection.java @@ -5,24 +5,29 @@ package org.hibernate.orm.test.envers.integration.modifiedflags; import java.util.List; -import jakarta.persistence.EntityManager; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.envers.configuration.EnversSettings; import org.hibernate.orm.test.envers.entities.collection.EmbeddableListEntity1; import org.hibernate.orm.test.envers.entities.components.Component3; import org.hibernate.orm.test.envers.entities.components.Component4; - +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; +import org.hibernate.testing.orm.junit.Jpa; +import org.hibernate.testing.orm.junit.Setting; +import org.junit.jupiter.api.Test; import static org.hibernate.orm.test.envers.tools.TestTools.extractRevisionNumbers; import static org.hibernate.orm.test.envers.tools.TestTools.makeList; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) */ @JiraKey(value = "HHH-6613") +@Jpa(integrationSettings = @Setting(name = EnversSettings.GLOBAL_WITH_MODIFIED_FLAG, value = "true"), + annotatedClasses = {EmbeddableListEntity1.class}) public class HasChangedComponentCollection extends AbstractModifiedFlagsEntityTest { private Integer ele1_id = null; @@ -31,76 +36,82 @@ public class HasChangedComponentCollection extends AbstractModifiedFlagsEntityTe private final Component3 c3_1 = new Component3( "c31", c4_1, c4_2 ); private final Component3 c3_2 = new Component3( "c32", c4_1, c4_2 ); - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {EmbeddableListEntity1.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Revision 1 (ele1: initially 1 element in both collections) - em.getTransaction().begin(); - EmbeddableListEntity1 ele1 = new EmbeddableListEntity1(); - ele1.setOtherData( "data" ); - ele1.getComponentList().add( c3_1 ); - em.persist( ele1 ); - em.getTransaction().commit(); + scope.inEntityManager( em -> { + em.getTransaction().begin(); + EmbeddableListEntity1 ele1 = new EmbeddableListEntity1(); + ele1.setOtherData( "data" ); + ele1.getComponentList().add( c3_1 ); + em.persist( ele1 ); + em.getTransaction().commit(); + ele1_id = ele1.getId(); + } ); // Revision (still 1) (ele1: removing non-existing element) - em.getTransaction().begin(); - ele1 = em.find( EmbeddableListEntity1.class, ele1.getId() ); - ele1.getComponentList().remove( c3_2 ); - em.getTransaction().commit(); + scope.inEntityManager( em -> { + em.getTransaction().begin(); + EmbeddableListEntity1 ele1 = em.find( EmbeddableListEntity1.class, ele1_id ); + ele1.getComponentList().remove( c3_2 ); + em.getTransaction().commit(); + } ); // Revision 2 (ele1: updating singular property and removing non-existing element) - em.getTransaction().begin(); - ele1 = em.find( EmbeddableListEntity1.class, ele1.getId() ); - ele1.setOtherData( "modified" ); - ele1.getComponentList().remove( c3_2 ); - ele1 = em.merge( ele1 ); - em.getTransaction().commit(); + scope.inEntityManager( em -> { + em.getTransaction().begin(); + EmbeddableListEntity1 ele1 = em.find( EmbeddableListEntity1.class, ele1_id ); + ele1.setOtherData( "modified" ); + ele1.getComponentList().remove( c3_2 ); + ele1 = em.merge( ele1 ); + em.getTransaction().commit(); + } ); // Revision 3 (ele1: adding one element) - em.getTransaction().begin(); - ele1 = em.find( EmbeddableListEntity1.class, ele1.getId() ); - ele1.getComponentList().add( c3_2 ); - em.getTransaction().commit(); + scope.inEntityManager( em -> { + em.getTransaction().begin(); + EmbeddableListEntity1 ele1 = em.find( EmbeddableListEntity1.class, ele1_id ); + ele1.getComponentList().add( c3_2 ); + em.getTransaction().commit(); + } ); // Revision 4 (ele1: adding one existing element) - em.getTransaction().begin(); - ele1 = em.find( EmbeddableListEntity1.class, ele1.getId() ); - ele1.getComponentList().add( c3_1 ); - em.getTransaction().commit(); + scope.inEntityManager( em -> { + em.getTransaction().begin(); + EmbeddableListEntity1 ele1 = em.find( EmbeddableListEntity1.class, ele1_id ); + ele1.getComponentList().add( c3_1 ); + em.getTransaction().commit(); + } ); // Revision 5 (ele1: removing one existing element) - em.getTransaction().begin(); - ele1 = em.find( EmbeddableListEntity1.class, ele1.getId() ); - ele1.getComponentList().remove( c3_2 ); - em.getTransaction().commit(); + scope.inEntityManager( em -> { + em.getTransaction().begin(); + EmbeddableListEntity1 ele1 = em.find( EmbeddableListEntity1.class, ele1_id ); + ele1.getComponentList().remove( c3_2 ); + em.getTransaction().commit(); + } ); // Revision 6 (ele1: changing singular property only) - em.getTransaction().begin(); - ele1 = em.find( EmbeddableListEntity1.class, ele1.getId() ); - ele1.setOtherData( "another modification" ); - ele1 = em.merge( ele1 ); - em.getTransaction().commit(); - - ele1_id = ele1.getId(); - - em.close(); + scope.inEntityManager( em -> { + em.getTransaction().begin(); + EmbeddableListEntity1 ele1 = em.find( EmbeddableListEntity1.class, ele1_id ); + ele1.setOtherData( "another modification" ); + ele1 = em.merge( ele1 ); + em.getTransaction().commit(); + } ); } @Test - public void testHasChangedEle() { - List list = queryForPropertyHasChanged( EmbeddableListEntity1.class, ele1_id, "componentList" ); - assertEquals( 4, list.size() ); - assertEquals( makeList( 1, 3, 4, 5 ), extractRevisionNumbers( list ) ); - - list = queryForPropertyHasChanged( EmbeddableListEntity1.class, ele1_id, "otherData" ); - assertEquals( 3, list.size() ); - assertEquals( makeList( 1, 2, 6 ), extractRevisionNumbers( list ) ); + public void testHasChangedEle(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + List list = queryForPropertyHasChanged( auditReader, EmbeddableListEntity1.class, ele1_id, "componentList" ); + assertEquals( 4, list.size() ); + assertEquals( makeList( 1, 3, 4, 5 ), extractRevisionNumbers( list ) ); + + list = queryForPropertyHasChanged( auditReader, EmbeddableListEntity1.class, ele1_id, "otherData" ); + assertEquals( 3, list.size() ); + assertEquals( makeList( 1, 2, 6 ), extractRevisionNumbers( list ) ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedComponentMapKey.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedComponentMapKey.java index ae09fba4b398..6c508eed22a4 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedComponentMapKey.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedComponentMapKey.java @@ -5,118 +5,124 @@ package org.hibernate.orm.test.envers.integration.modifiedflags; import java.util.List; -import jakarta.persistence.EntityManager; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.envers.configuration.EnversSettings; import org.hibernate.orm.test.envers.entities.components.Component1; import org.hibernate.orm.test.envers.entities.components.Component2; import org.hibernate.orm.test.envers.entities.components.ComponentTestEntity; import org.hibernate.orm.test.envers.integration.collection.mapkey.ComponentMapKeyEntity; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; +import org.hibernate.testing.orm.junit.Setting; -import org.junit.Test; +import org.junit.jupiter.api.Test; -import static junit.framework.Assert.assertEquals; import static org.hibernate.orm.test.envers.tools.TestTools.extractRevisionNumbers; import static org.hibernate.orm.test.envers.tools.TestTools.makeList; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Adam Warski (adam at warski dot org) * @author Michal Skowronek (mskowr at o2 dot pl) */ +@Jpa(integrationSettings = @Setting(name = EnversSettings.GLOBAL_WITH_MODIFIED_FLAG, value = "true"), + annotatedClasses = {ComponentMapKeyEntity.class, ComponentTestEntity.class}) public class HasChangedComponentMapKey extends AbstractModifiedFlagsEntityTest { private Integer cmke_id; private Integer cte1_id; private Integer cte2_id; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {ComponentMapKeyEntity.class, ComponentTestEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - ComponentMapKeyEntity imke = new ComponentMapKeyEntity(); - - // Revision 1 (intialy 1 mapping) - em.getTransaction().begin(); - - ComponentTestEntity cte1 = new ComponentTestEntity( - new Component1( "x1", "y2" ), new Component2( - "a1", - "b2" - ) - ); - ComponentTestEntity cte2 = new ComponentTestEntity( - new Component1( "x1", "y2" ), new Component2( - "a1", - "b2" - ) - ); + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + ComponentMapKeyEntity imke = new ComponentMapKeyEntity(); - em.persist( cte1 ); - em.persist( cte2 ); + // Revision 1 (initially 1 mapping) + em.getTransaction().begin(); - imke.getIdmap().put( cte1.getComp1(), cte1 ); + ComponentTestEntity cte1 = new ComponentTestEntity( + new Component1( "x1", "y2" ), new Component2( + "a1", + "b2" + ) + ); + ComponentTestEntity cte2 = new ComponentTestEntity( + new Component1( "x1", "y2" ), new Component2( + "a1", + "b2" + ) + ); - em.persist( imke ); + em.persist( cte1 ); + em.persist( cte2 ); - em.getTransaction().commit(); + imke.getIdmap().put( cte1.getComp1(), cte1 ); - // Revision 2 (sse1: adding 1 mapping) - em.getTransaction().begin(); + em.persist( imke ); - cte2 = em.find( ComponentTestEntity.class, cte2.getId() ); - imke = em.find( ComponentMapKeyEntity.class, imke.getId() ); + em.getTransaction().commit(); - imke.getIdmap().put( cte2.getComp1(), cte2 ); + // Revision 2 (sse1: adding 1 mapping) + em.getTransaction().begin(); - em.getTransaction().commit(); + ComponentTestEntity cte2Loaded = em.find( ComponentTestEntity.class, cte2.getId() ); + ComponentMapKeyEntity imkeLoaded = em.find( ComponentMapKeyEntity.class, imke.getId() ); - // + imkeLoaded.getIdmap().put( cte2Loaded.getComp1(), cte2Loaded ); - cmke_id = imke.getId(); + em.getTransaction().commit(); - cte1_id = cte1.getId(); - cte2_id = cte2.getId(); + cmke_id = imke.getId(); + cte1_id = cte1.getId(); + cte2_id = cte2.getId(); + } ); } @Test - public void testHasChangedMapEntity() throws Exception { - List list = queryForPropertyHasChanged( ComponentMapKeyEntity.class, cmke_id, "idmap" ); - assertEquals( 2, list.size() ); - assertEquals( makeList( 1, 2 ), extractRevisionNumbers( list ) ); - - list = queryForPropertyHasNotChanged( - ComponentMapKeyEntity.class, - cmke_id, "idmap" - ); - assertEquals( 0, list.size() ); + public void testHasChangedMapEntity(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + List list = queryForPropertyHasChanged( auditReader, ComponentMapKeyEntity.class, cmke_id, "idmap" ); + assertEquals( 2, list.size() ); + assertEquals( makeList( 1, 2 ), extractRevisionNumbers( list ) ); + + list = queryForPropertyHasNotChanged( + auditReader, + ComponentMapKeyEntity.class, + cmke_id, "idmap" + ); + assertEquals( 0, list.size() ); + } ); } @Test - public void testHasChangedComponentEntity() throws Exception { - List list = queryForPropertyHasChanged( - ComponentTestEntity.class, - cte1_id, "comp1" - ); - assertEquals( 1, list.size() ); - assertEquals( makeList( 1 ), extractRevisionNumbers( list ) ); - - list = queryForPropertyHasNotChanged( - ComponentTestEntity.class, cte1_id, - "comp1" - ); - assertEquals( 0, list.size() ); - - list = queryForPropertyHasChanged( ComponentTestEntity.class, cte2_id, "comp1" ); - assertEquals( 1, list.size() ); - assertEquals( makeList( 1 ), extractRevisionNumbers( list ) ); - - list = queryForPropertyHasNotChanged( ComponentTestEntity.class, cte2_id, "comp1" ); - assertEquals( 0, list.size() ); + public void testHasChangedComponentEntity(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + List list = queryForPropertyHasChanged( + auditReader, + ComponentTestEntity.class, + cte1_id, "comp1" + ); + assertEquals( 1, list.size() ); + assertEquals( makeList( 1 ), extractRevisionNumbers( list ) ); + + list = queryForPropertyHasNotChanged( + auditReader, + ComponentTestEntity.class, cte1_id, + "comp1" + ); + assertEquals( 0, list.size() ); + + list = queryForPropertyHasChanged( auditReader, ComponentTestEntity.class, cte2_id, "comp1" ); + assertEquals( 1, list.size() ); + assertEquals( makeList( 1 ), extractRevisionNumbers( list ) ); + + list = queryForPropertyHasNotChanged( auditReader, ComponentTestEntity.class, cte2_id, "comp1" ); + assertEquals( 0, list.size() ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedComponents.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedComponents.java index e1f76658a19b..b32a129c562c 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedComponents.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedComponents.java @@ -5,169 +5,190 @@ package org.hibernate.orm.test.envers.integration.modifiedflags; import java.util.List; -import jakarta.persistence.EntityManager; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.envers.configuration.EnversSettings; import org.hibernate.orm.test.envers.entities.components.Component1; import org.hibernate.orm.test.envers.entities.components.Component2; import org.hibernate.orm.test.envers.entities.components.ComponentTestEntity; import org.hibernate.orm.test.envers.tools.TestTools; -import org.junit.Test; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.DomainModel; +import org.hibernate.testing.orm.junit.DomainModelScope; +import org.hibernate.testing.orm.junit.SessionFactoryScope; +import org.hibernate.testing.orm.junit.ServiceRegistry; +import org.hibernate.testing.orm.junit.SessionFactory; +import org.hibernate.testing.orm.junit.Setting; + +import org.junit.jupiter.api.Test; -import static junit.framework.Assert.assertEquals; import static org.hibernate.orm.test.envers.tools.TestTools.extractRevisionNumbers; import static org.hibernate.orm.test.envers.tools.TestTools.makeList; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; /** * @author Adam Warski (adam at warski dot org) * @author Michal Skowronek (mskowr at o2 dot pl) */ +@DomainModel(annotatedClasses = {ComponentTestEntity.class}) +@ServiceRegistry(settings = @Setting(name = EnversSettings.GLOBAL_WITH_MODIFIED_FLAG, value = "true")) +@SessionFactory public class HasChangedComponents extends AbstractModifiedFlagsEntityTest { private Integer id1; private Integer id2; private Integer id3; private Integer id4; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {ComponentTestEntity.class}; + @BeforeClassTemplate + public void initData(SessionFactoryScope scope) { + scope.inSession( em -> { + // Revision 1 + em.getTransaction().begin(); + + ComponentTestEntity cte1 = new ComponentTestEntity( new Component1( "a", "b" ), new Component2( "x", "y" ) ); + ComponentTestEntity cte2 = new ComponentTestEntity( + new Component1( "a2", "b2" ), new Component2( + "x2", + "y2" + ) + ); + ComponentTestEntity cte3 = new ComponentTestEntity( + new Component1( "a3", "b3" ), new Component2( + "x3", + "y3" + ) + ); + ComponentTestEntity cte4 = new ComponentTestEntity( null, null ); + + em.persist( cte1 ); + em.persist( cte2 ); + em.persist( cte3 ); + em.persist( cte4 ); + + em.getTransaction().commit(); + + // Revision 2 + em.getTransaction().begin(); + + ComponentTestEntity cte1Loaded = em.find( ComponentTestEntity.class, cte1.getId() ); + ComponentTestEntity cte2Loaded = em.find( ComponentTestEntity.class, cte2.getId() ); + ComponentTestEntity cte3Loaded = em.find( ComponentTestEntity.class, cte3.getId() ); + ComponentTestEntity cte4Loaded = em.find( ComponentTestEntity.class, cte4.getId() ); + + cte1Loaded.setComp1( new Component1( "a'", "b'" ) ); + cte2Loaded.getComp1().setStr1( "a2'" ); + cte3Loaded.getComp2().setStr6( "y3'" ); + cte4Loaded.setComp1( new Component1() ); + cte4Loaded.getComp1().setStr1( "n" ); + cte4Loaded.setComp2( new Component2() ); + cte4Loaded.getComp2().setStr5( "m" ); + + em.getTransaction().commit(); + + // Revision 3 + em.getTransaction().begin(); + + cte1Loaded = em.find( ComponentTestEntity.class, cte1.getId() ); + cte2Loaded = em.find( ComponentTestEntity.class, cte2.getId() ); + cte3Loaded = em.find( ComponentTestEntity.class, cte3.getId() ); + cte4Loaded = em.find( ComponentTestEntity.class, cte4.getId() ); + + cte1Loaded.setComp2( new Component2( "x'", "y'" ) ); + cte3Loaded.getComp1().setStr2( "b3'" ); + cte4Loaded.setComp1( null ); + cte4Loaded.setComp2( null ); + + em.getTransaction().commit(); + + // Revision 4 + em.getTransaction().begin(); + + cte2Loaded = em.find( ComponentTestEntity.class, cte2.getId() ); + + em.remove( cte2Loaded ); + + em.getTransaction().commit(); + + id1 = cte1.getId(); + id2 = cte2.getId(); + id3 = cte3.getId(); + id4 = cte4.getId(); + } ); } @Test - @Priority(10) - public void initData() { - // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - - ComponentTestEntity cte1 = new ComponentTestEntity( new Component1( "a", "b" ), new Component2( "x", "y" ) ); - ComponentTestEntity cte2 = new ComponentTestEntity( - new Component1( "a2", "b2" ), new Component2( - "x2", - "y2" - ) - ); - ComponentTestEntity cte3 = new ComponentTestEntity( - new Component1( "a3", "b3" ), new Component2( - "x3", - "y3" - ) - ); - ComponentTestEntity cte4 = new ComponentTestEntity( null, null ); - - em.persist( cte1 ); - em.persist( cte2 ); - em.persist( cte3 ); - em.persist( cte4 ); - - em.getTransaction().commit(); - - // Revision 2 - em = getEntityManager(); - em.getTransaction().begin(); - - cte1 = em.find( ComponentTestEntity.class, cte1.getId() ); - cte2 = em.find( ComponentTestEntity.class, cte2.getId() ); - cte3 = em.find( ComponentTestEntity.class, cte3.getId() ); - cte4 = em.find( ComponentTestEntity.class, cte4.getId() ); - - cte1.setComp1( new Component1( "a'", "b'" ) ); - cte2.getComp1().setStr1( "a2'" ); - cte3.getComp2().setStr6( "y3'" ); - cte4.setComp1( new Component1() ); - cte4.getComp1().setStr1( "n" ); - cte4.setComp2( new Component2() ); - cte4.getComp2().setStr5( "m" ); - - em.getTransaction().commit(); - - // Revision 3 - em = getEntityManager(); - em.getTransaction().begin(); - - cte1 = em.find( ComponentTestEntity.class, cte1.getId() ); - cte2 = em.find( ComponentTestEntity.class, cte2.getId() ); - cte3 = em.find( ComponentTestEntity.class, cte3.getId() ); - cte4 = em.find( ComponentTestEntity.class, cte4.getId() ); - - cte1.setComp2( new Component2( "x'", "y'" ) ); - cte3.getComp1().setStr2( "b3'" ); - cte4.setComp1( null ); - cte4.setComp2( null ); - - em.getTransaction().commit(); - - // Revision 4 - em = getEntityManager(); - em.getTransaction().begin(); - - cte2 = em.find( ComponentTestEntity.class, cte2.getId() ); - - em.remove( cte2 ); - - em.getTransaction().commit(); - - id1 = cte1.getId(); - id2 = cte2.getId(); - id3 = cte3.getId(); - id4 = cte4.getId(); - } - - @Test - public void testModFlagProperties() { + public void testModFlagProperties(DomainModelScope scope) { assertEquals( TestTools.makeSet( "comp1_MOD" ), TestTools.extractModProperties( - metadata().getEntityBinding( + scope.getDomainModel().getEntityBinding( "org.hibernate.orm.test.envers.entities.components.ComponentTestEntity_AUD" ) ) ); } - @Test(expected = IllegalArgumentException.class) - public void testHasChangedNotAudited() throws Exception { - queryForPropertyHasChanged( ComponentTestEntity.class, id1, "comp2" ); + @Test + public void testHasChangedNotAudited(SessionFactoryScope scope) { + scope.inSession( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertThrows( IllegalArgumentException.class, () -> + queryForPropertyHasChanged( auditReader, ComponentTestEntity.class, id1, "comp2" ) + ); + } ); } @Test - public void testHasChangedId1() throws Exception { - List list = queryForPropertyHasChanged( ComponentTestEntity.class, id1, "comp1" ); - assertEquals( 2, list.size() ); - assertEquals( makeList( 1, 2 ), extractRevisionNumbers( list ) ); - - list = queryForPropertyHasNotChanged( ComponentTestEntity.class, id1, "comp1" ); - assertEquals( 0, list.size() ); + public void testHasChangedId1(SessionFactoryScope scope) { + scope.inSession( em -> { + final var auditReader = AuditReaderFactory.get( em ); + List list = queryForPropertyHasChanged( auditReader, ComponentTestEntity.class, id1, "comp1" ); + assertEquals( 2, list.size() ); + assertEquals( makeList( 1, 2 ), extractRevisionNumbers( list ) ); + + list = queryForPropertyHasNotChanged( auditReader, ComponentTestEntity.class, id1, "comp1" ); + assertEquals( 0, list.size() ); + } ); } @Test - public void testHasChangedId2() throws Exception { - List list = queryForPropertyHasChangedWithDeleted( ComponentTestEntity.class, id2, "comp1" ); - assertEquals( 3, list.size() ); - assertEquals( makeList( 1, 2, 4 ), extractRevisionNumbers( list ) ); - - list = queryForPropertyHasNotChangedWithDeleted( ComponentTestEntity.class, id2, "comp1" ); - assertEquals( 0, list.size() ); + public void testHasChangedId2(SessionFactoryScope scope) { + scope.inSession( em -> { + final var auditReader = AuditReaderFactory.get( em ); + List list = queryForPropertyHasChangedWithDeleted( auditReader, ComponentTestEntity.class, id2, "comp1" ); + assertEquals( 3, list.size() ); + assertEquals( makeList( 1, 2, 4 ), extractRevisionNumbers( list ) ); + + list = queryForPropertyHasNotChangedWithDeleted( auditReader, ComponentTestEntity.class, id2, "comp1" ); + assertEquals( 0, list.size() ); + } ); } @Test - public void testHasChangedId3() throws Exception { - List list = queryForPropertyHasChangedWithDeleted( ComponentTestEntity.class, id3, "comp1" ); - assertEquals( 2, list.size() ); - assertEquals( makeList( 1, 3 ), extractRevisionNumbers( list ) ); - - list = queryForPropertyHasNotChangedWithDeleted( ComponentTestEntity.class, id3, "comp1" ); - assertEquals( 0, list.size() ); + public void testHasChangedId3(SessionFactoryScope scope) { + scope.inSession( em -> { + final var auditReader = AuditReaderFactory.get( em ); + List list = queryForPropertyHasChangedWithDeleted( auditReader, ComponentTestEntity.class, id3, "comp1" ); + assertEquals( 2, list.size() ); + assertEquals( makeList( 1, 3 ), extractRevisionNumbers( list ) ); + + list = queryForPropertyHasNotChangedWithDeleted( auditReader, ComponentTestEntity.class, id3, "comp1" ); + assertEquals( 0, list.size() ); + } ); } @Test - public void testHasChangedId4() throws Exception { - List list = queryForPropertyHasChangedWithDeleted( ComponentTestEntity.class, id4, "comp1" ); - assertEquals( 2, list.size() ); - assertEquals( makeList( 2, 3 ), extractRevisionNumbers( list ) ); - - list = queryForPropertyHasNotChangedWithDeleted( ComponentTestEntity.class, id4, "comp1" ); - assertEquals( 1, list.size() ); - assertEquals( makeList( 1 ), extractRevisionNumbers( list ) ); + public void testHasChangedId4(SessionFactoryScope scope) { + scope.inSession( em -> { + final var auditReader = AuditReaderFactory.get( em ); + List list = queryForPropertyHasChangedWithDeleted( auditReader, ComponentTestEntity.class, id4, "comp1" ); + assertEquals( 2, list.size() ); + assertEquals( makeList( 2, 3 ), extractRevisionNumbers( list ) ); + + list = queryForPropertyHasNotChangedWithDeleted( auditReader, ComponentTestEntity.class, id4, "comp1" ); + assertEquals( 1, list.size() ); + assertEquals( makeList( 1 ), extractRevisionNumbers( list ) ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedDetachedMultipleCollection.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedDetachedMultipleCollection.java index 90030f2c1dce..235a958f176f 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedDetachedMultipleCollection.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedDetachedMultipleCollection.java @@ -6,152 +6,154 @@ import java.util.ArrayList; import java.util.List; -import jakarta.persistence.EntityManager; import org.hibernate.community.dialect.AltibaseDialect; import org.hibernate.dialect.OracleDialect; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.envers.configuration.EnversSettings; import org.hibernate.orm.test.envers.entities.collection.MultipleCollectionEntity; import org.hibernate.orm.test.envers.entities.collection.MultipleCollectionRefEntity1; import org.hibernate.orm.test.envers.entities.collection.MultipleCollectionRefEntity2; - -import org.hibernate.testing.SkipForDialect; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; +import org.hibernate.testing.orm.junit.Jpa; +import org.hibernate.testing.orm.junit.Setting; +import org.hibernate.testing.orm.junit.SkipForDialect; + +import org.junit.jupiter.api.Test; +import static org.hibernate.orm.test.envers.integration.modifiedflags.AbstractModifiedFlagsEntityTest.queryForPropertyHasChanged; import static org.hibernate.orm.test.envers.tools.TestTools.extractRevisionNumbers; import static org.hibernate.orm.test.envers.tools.TestTools.makeList; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) */ @JiraKey(value = "HHH-7437") -@SkipForDialect(value = OracleDialect.class, - comment = "Oracle does not support identity key generation") -@SkipForDialect(value = AltibaseDialect.class, - comment = "Altibase does not support identity key generation") +@SkipForDialect(dialectClass = OracleDialect.class, + reason = "Oracle does not support identity key generation") +@SkipForDialect(dialectClass = AltibaseDialect.class, + reason = "Altibase does not support identity key generation") +@EnversTest +@Jpa(integrationSettings = @Setting(name = EnversSettings.GLOBAL_WITH_MODIFIED_FLAG, value = "true"), + annotatedClasses = {MultipleCollectionEntity.class, MultipleCollectionRefEntity1.class, MultipleCollectionRefEntity2.class}) public class HasChangedDetachedMultipleCollection extends AbstractModifiedFlagsEntityTest { private Long mce1Id = null; private Long mce2Id = null; private Long mcre1Id = null; private Long mcre2Id = null; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { - MultipleCollectionEntity.class, MultipleCollectionRefEntity1.class, MultipleCollectionRefEntity2.class - }; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - // Revision 1 - addition. - em.getTransaction().begin(); - MultipleCollectionEntity mce1 = new MultipleCollectionEntity(); - mce1.setText( "MultipleCollectionEntity-1-1" ); - em.persist( mce1 ); // Persisting entity with empty collections. - em.getTransaction().commit(); - - mce1Id = mce1.getId(); - - // Revision 2 - update. - em.getTransaction().begin(); - mce1 = em.find( MultipleCollectionEntity.class, mce1.getId() ); - MultipleCollectionRefEntity1 mcre1 = new MultipleCollectionRefEntity1(); - mcre1.setText( "MultipleCollectionRefEntity1-1-1" ); - mcre1.setMultipleCollectionEntity( mce1 ); - mce1.addRefEntity1( mcre1 ); - em.persist( mcre1 ); - mce1 = em.merge( mce1 ); - em.getTransaction().commit(); - - mcre1Id = mcre1.getId(); - - // No changes. - em.getTransaction().begin(); - mce1 = em.find( MultipleCollectionEntity.class, mce1.getId() ); - mce1 = em.merge( mce1 ); - em.getTransaction().commit(); - - em.close(); - em = getEntityManager(); - - // Revision 3 - updating detached collection. - em.getTransaction().begin(); - mce1.removeRefEntity1( mcre1 ); - mce1 = em.merge( mce1 ); - em.getTransaction().commit(); - - em.close(); - em = getEntityManager(); - - // Revision 4 - updating detached entity, no changes to collection attributes. - em.getTransaction().begin(); - mce1.setRefEntities1( new ArrayList() ); - mce1.setRefEntities2( new ArrayList() ); - mce1.setText( "MultipleCollectionEntity-1-2" ); - mce1 = em.merge( mce1 ); - em.getTransaction().commit(); - - em.close(); - em = getEntityManager(); - - // No changes to detached entity (collections were empty before). - em.getTransaction().begin(); - mce1.setRefEntities1( new ArrayList() ); - mce1.setRefEntities2( new ArrayList() ); - mce1 = em.merge( mce1 ); - em.getTransaction().commit(); - - // Revision 5 - addition. - em.getTransaction().begin(); - MultipleCollectionEntity mce2 = new MultipleCollectionEntity(); - mce2.setText( "MultipleCollectionEntity-2-1" ); - MultipleCollectionRefEntity2 mcre2 = new MultipleCollectionRefEntity2(); - mcre2.setText( "MultipleCollectionRefEntity2-1-1" ); - mcre2.setMultipleCollectionEntity( mce2 ); - mce2.addRefEntity2( mcre2 ); - em.persist( mce2 ); // Cascade persisting related entity. - em.getTransaction().commit(); - - mce2Id = mce2.getId(); - mcre2Id = mcre2.getId(); - - em.close(); + MultipleCollectionEntity mce1; + MultipleCollectionRefEntity1 mcre1; + + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + // Revision 1 - addition. + em.getTransaction().begin(); + mce1 = new MultipleCollectionEntity(); + mce1.setText( "MultipleCollectionEntity-1-1" ); + em.persist( mce1 ); // Persisting entity with empty collections. + em.getTransaction().commit(); + + mce1Id = mce1.getId(); + + // Revision 2 - update. + em.getTransaction().begin(); + mce1 = em.find( MultipleCollectionEntity.class, mce1.getId() ); + mcre1 = new MultipleCollectionRefEntity1(); + mcre1.setText( "MultipleCollectionRefEntity1-1-1" ); + mcre1.setMultipleCollectionEntity( mce1 ); + mce1.addRefEntity1( mcre1 ); + em.persist( mcre1 ); + mce1 = em.merge( mce1 ); + em.getTransaction().commit(); + + mcre1Id = mcre1.getId(); + + // No changes. + em.getTransaction().begin(); + mce1 = em.find( MultipleCollectionEntity.class, mce1.getId() ); + mce1 = em.merge( mce1 ); + em.getTransaction().commit(); + } ); + + scope.inEntityManager( em -> { + // Revision 3 - updating detached collection. + em.getTransaction().begin(); + mce1.removeRefEntity1( mcre1 ); + mce1 = em.merge( mce1 ); + em.getTransaction().commit(); + } ); + + scope.inEntityManager( em -> { + // Revision 4 - updating detached entity, no changes to collection attributes. + em.getTransaction().begin(); + mce1.setRefEntities1( new ArrayList<>() ); + mce1.setRefEntities2( new ArrayList<>() ); + mce1.setText( "MultipleCollectionEntity-1-2" ); + mce1 = em.merge( mce1 ); + em.getTransaction().commit(); + } ); + + scope.inEntityManager( em -> { + // No changes to detached entity (collections were empty before). + em.getTransaction().begin(); + mce1.setRefEntities1( new ArrayList<>() ); + mce1.setRefEntities2( new ArrayList<>() ); + mce1 = em.merge( mce1 ); + em.getTransaction().commit(); + + // Revision 5 - addition. + em.getTransaction().begin(); + MultipleCollectionEntity mce2 = new MultipleCollectionEntity(); + mce2.setText( "MultipleCollectionEntity-2-1" ); + MultipleCollectionRefEntity2 mcre2 = new MultipleCollectionRefEntity2(); + mcre2.setText( "MultipleCollectionRefEntity2-1-1" ); + mcre2.setMultipleCollectionEntity( mce2 ); + mce2.addRefEntity2( mcre2 ); + em.persist( mce2 ); // Cascade persisting related entity. + em.getTransaction().commit(); + + mce2Id = mce2.getId(); + mcre2Id = mcre2.getId(); + } ); } @Test - public void testHasChanged() { - List list = queryForPropertyHasChanged( MultipleCollectionEntity.class, mce1Id, "text" ); - assertEquals( 2, list.size() ); - assertEquals( makeList( 1, 4 ), extractRevisionNumbers( list ) ); - - list = queryForPropertyHasChanged( MultipleCollectionEntity.class, mce1Id, "refEntities1" ); - assertEquals( 3, list.size() ); - assertEquals( makeList( 1, 2, 3 ), extractRevisionNumbers( list ) ); - - list = queryForPropertyHasChanged( MultipleCollectionEntity.class, mce1Id, "refEntities2" ); - assertEquals( 1, list.size() ); - assertEquals( makeList( 1 ), extractRevisionNumbers( list ) ); - - list = queryForPropertyHasChanged( MultipleCollectionRefEntity1.class, mcre1Id, "text" ); - assertEquals( 1, list.size() ); - assertEquals( makeList( 2 ), extractRevisionNumbers( list ) ); - - list = queryForPropertyHasChanged( MultipleCollectionEntity.class, mce2Id, "text" ); - assertEquals( 1, list.size() ); - assertEquals( makeList( 5 ), extractRevisionNumbers( list ) ); - - list = queryForPropertyHasChanged( MultipleCollectionEntity.class, mce2Id, "refEntities2" ); - assertEquals( 1, list.size() ); - assertEquals( makeList( 5 ), extractRevisionNumbers( list ) ); - - list = queryForPropertyHasChanged( MultipleCollectionRefEntity2.class, mcre2Id, "text" ); - assertEquals( 1, list.size() ); - assertEquals( makeList( 5 ), extractRevisionNumbers( list ) ); + public void testHasChanged(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + List list = queryForPropertyHasChanged( auditReader, MultipleCollectionEntity.class, mce1Id, "text" ); + assertEquals( 2, list.size() ); + assertEquals( makeList( 1, 4 ), extractRevisionNumbers( list ) ); + + list = queryForPropertyHasChanged( auditReader, MultipleCollectionEntity.class, mce1Id, "refEntities1" ); + assertEquals( 3, list.size() ); + assertEquals( makeList( 1, 2, 3 ), extractRevisionNumbers( list ) ); + + list = queryForPropertyHasChanged( auditReader, MultipleCollectionEntity.class, mce1Id, "refEntities2" ); + assertEquals( 1, list.size() ); + assertEquals( makeList( 1 ), extractRevisionNumbers( list ) ); + + list = queryForPropertyHasChanged( auditReader, MultipleCollectionRefEntity1.class, mcre1Id, "text" ); + assertEquals( 1, list.size() ); + assertEquals( makeList( 2 ), extractRevisionNumbers( list ) ); + + list = queryForPropertyHasChanged( auditReader, MultipleCollectionEntity.class, mce2Id, "text" ); + assertEquals( 1, list.size() ); + assertEquals( makeList( 5 ), extractRevisionNumbers( list ) ); + + list = queryForPropertyHasChanged( auditReader, MultipleCollectionEntity.class, mce2Id, "refEntities2" ); + assertEquals( 1, list.size() ); + assertEquals( makeList( 5 ), extractRevisionNumbers( list ) ); + + list = queryForPropertyHasChanged( auditReader, MultipleCollectionRefEntity2.class, mcre2Id, "text" ); + assertEquals( 1, list.size() ); + assertEquals( makeList( 5 ), extractRevisionNumbers( list ) ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedDoubleJoinColumnBidirectionalList.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedDoubleJoinColumnBidirectionalList.java index 94759c3f3b7b..69f901db0e52 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedDoubleJoinColumnBidirectionalList.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedDoubleJoinColumnBidirectionalList.java @@ -5,18 +5,24 @@ package org.hibernate.orm.test.envers.integration.modifiedflags; import java.util.List; -import jakarta.persistence.EntityManager; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.envers.configuration.EnversSettings; import org.hibernate.orm.test.envers.entities.onetomany.detached.DoubleListJoinColumnBidirectionalRefEdEntity1; import org.hibernate.orm.test.envers.entities.onetomany.detached.DoubleListJoinColumnBidirectionalRefEdEntity2; import org.hibernate.orm.test.envers.entities.onetomany.detached.DoubleListJoinColumnBidirectionalRefIngEntity; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; +import org.hibernate.testing.orm.junit.Setting; -import org.junit.Test; +import org.junit.jupiter.api.Test; -import static junit.framework.Assert.assertEquals; +import static org.hibernate.orm.test.envers.integration.modifiedflags.AbstractModifiedFlagsEntityTest.queryForPropertyHasChanged; +import static org.hibernate.orm.test.envers.integration.modifiedflags.AbstractModifiedFlagsEntityTest.queryForPropertyHasNotChanged; import static org.hibernate.orm.test.envers.tools.TestTools.extractRevisionNumbers; import static org.hibernate.orm.test.envers.tools.TestTools.makeList; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * Test for a double "fake" bidirectional mapping where one side uses @OneToMany+@JoinColumn @@ -25,6 +31,12 @@ * @author Adam Warski (adam at warski dot org) * @author Michal Skowronek (mskowr at o2 dot pl) */ +@Jpa(integrationSettings = @Setting(name = EnversSettings.GLOBAL_WITH_MODIFIED_FLAG, value = "true"), + annotatedClasses = { + DoubleListJoinColumnBidirectionalRefIngEntity.class, + DoubleListJoinColumnBidirectionalRefEdEntity1.class, + DoubleListJoinColumnBidirectionalRefEdEntity2.class + }) public class HasChangedDoubleJoinColumnBidirectionalList extends AbstractModifiedFlagsEntityTest { private Integer ed1_1_id; private Integer ed2_1_id; @@ -34,240 +46,256 @@ public class HasChangedDoubleJoinColumnBidirectionalList extends AbstractModifie private Integer ing1_id; private Integer ing2_id; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { - DoubleListJoinColumnBidirectionalRefIngEntity.class, - DoubleListJoinColumnBidirectionalRefEdEntity1.class, - DoubleListJoinColumnBidirectionalRefEdEntity2.class - }; - } - - @Test - @Priority(10) - public void createData() { - EntityManager em = getEntityManager(); - - DoubleListJoinColumnBidirectionalRefEdEntity1 ed1_1 = new DoubleListJoinColumnBidirectionalRefEdEntity1( - "ed1_1", - null - ); - DoubleListJoinColumnBidirectionalRefEdEntity1 ed1_2 = new DoubleListJoinColumnBidirectionalRefEdEntity1( - "ed1_2", - null - ); - - DoubleListJoinColumnBidirectionalRefEdEntity2 ed2_1 = new DoubleListJoinColumnBidirectionalRefEdEntity2( - "ed2_1", - null - ); - DoubleListJoinColumnBidirectionalRefEdEntity2 ed2_2 = new DoubleListJoinColumnBidirectionalRefEdEntity2( - "ed2_2", - null - ); - - DoubleListJoinColumnBidirectionalRefIngEntity ing1 = new DoubleListJoinColumnBidirectionalRefIngEntity( "coll1" ); - DoubleListJoinColumnBidirectionalRefIngEntity ing2 = new DoubleListJoinColumnBidirectionalRefIngEntity( "coll2" ); - - // Revision 1 (ing1: ed1_1, ed2_1, ing2: ed1_2, ed2_2) - em.getTransaction().begin(); - - ing1.getReferences1().add( ed1_1 ); - ing1.getReferences2().add( ed2_1 ); - - ing2.getReferences1().add( ed1_2 ); - ing2.getReferences2().add( ed2_2 ); - - em.persist( ed1_1 ); - em.persist( ed1_2 ); - em.persist( ed2_1 ); - em.persist( ed2_2 ); - em.persist( ing1 ); - em.persist( ing2 ); - - em.getTransaction().commit(); - - // Revision 2 (ing1: ed1_1, ed1_2, ed2_1, ed2_2) - em.getTransaction().begin(); - - ing1 = em.find( DoubleListJoinColumnBidirectionalRefIngEntity.class, ing1.getId() ); - ing2 = em.find( DoubleListJoinColumnBidirectionalRefIngEntity.class, ing2.getId() ); - ed1_1 = em.find( DoubleListJoinColumnBidirectionalRefEdEntity1.class, ed1_1.getId() ); - ed1_2 = em.find( DoubleListJoinColumnBidirectionalRefEdEntity1.class, ed1_2.getId() ); - ed2_1 = em.find( DoubleListJoinColumnBidirectionalRefEdEntity2.class, ed2_1.getId() ); - ed2_2 = em.find( DoubleListJoinColumnBidirectionalRefEdEntity2.class, ed2_2.getId() ); - - ing2.getReferences1().clear(); - ing2.getReferences2().clear(); - - ing1.getReferences1().add( ed1_2 ); - ing1.getReferences2().add( ed2_2 ); - - em.getTransaction().commit(); - em.clear(); - - // Revision 3 (ing1: ed1_1, ed1_2, ed2_1, ed2_2) - em.getTransaction().begin(); - - ing1 = em.find( DoubleListJoinColumnBidirectionalRefIngEntity.class, ing1.getId() ); - ing2 = em.find( DoubleListJoinColumnBidirectionalRefIngEntity.class, ing2.getId() ); - ed1_1 = em.find( DoubleListJoinColumnBidirectionalRefEdEntity1.class, ed1_1.getId() ); - ed1_2 = em.find( DoubleListJoinColumnBidirectionalRefEdEntity1.class, ed1_2.getId() ); - ed2_1 = em.find( DoubleListJoinColumnBidirectionalRefEdEntity2.class, ed2_1.getId() ); - ed2_2 = em.find( DoubleListJoinColumnBidirectionalRefEdEntity2.class, ed2_2.getId() ); - - ed1_1.setData( "ed1_1 bis" ); - ed2_2.setData( "ed2_2 bis" ); - - em.getTransaction().commit(); - em.clear(); - - // Revision 4 (ing1: ed2_2, ing2: ed2_1, ed1_1, ed1_2) - em.getTransaction().begin(); - - ing1 = em.find( DoubleListJoinColumnBidirectionalRefIngEntity.class, ing1.getId() ); - ing2 = em.find( DoubleListJoinColumnBidirectionalRefIngEntity.class, ing2.getId() ); - ed1_1 = em.find( DoubleListJoinColumnBidirectionalRefEdEntity1.class, ed1_1.getId() ); - ed1_2 = em.find( DoubleListJoinColumnBidirectionalRefEdEntity1.class, ed1_2.getId() ); - ed2_1 = em.find( DoubleListJoinColumnBidirectionalRefEdEntity2.class, ed2_1.getId() ); - ed2_2 = em.find( DoubleListJoinColumnBidirectionalRefEdEntity2.class, ed2_2.getId() ); - - ing1.getReferences1().clear(); - ing2.getReferences1().add( ed1_1 ); - ing2.getReferences1().add( ed1_2 ); - - ing1.getReferences2().remove( ed2_1 ); - ing2.getReferences2().add( ed2_1 ); - - em.getTransaction().commit(); - em.clear(); - - // - - ing1_id = ing1.getId(); - ing2_id = ing2.getId(); - - ed1_1_id = ed1_1.getId(); - ed1_2_id = ed1_2.getId(); - ed2_1_id = ed2_1.getId(); - ed2_2_id = ed2_2.getId(); + @BeforeClassTemplate + public void createData(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + DoubleListJoinColumnBidirectionalRefEdEntity1 ed1_1 = new DoubleListJoinColumnBidirectionalRefEdEntity1( + "ed1_1", + null + ); + DoubleListJoinColumnBidirectionalRefEdEntity1 ed1_2 = new DoubleListJoinColumnBidirectionalRefEdEntity1( + "ed1_2", + null + ); + + DoubleListJoinColumnBidirectionalRefEdEntity2 ed2_1 = new DoubleListJoinColumnBidirectionalRefEdEntity2( + "ed2_1", + null + ); + DoubleListJoinColumnBidirectionalRefEdEntity2 ed2_2 = new DoubleListJoinColumnBidirectionalRefEdEntity2( + "ed2_2", + null + ); + + DoubleListJoinColumnBidirectionalRefIngEntity ing1 = new DoubleListJoinColumnBidirectionalRefIngEntity( "coll1" ); + DoubleListJoinColumnBidirectionalRefIngEntity ing2 = new DoubleListJoinColumnBidirectionalRefIngEntity( "coll2" ); + + // Revision 1 (ing1: ed1_1, ed2_1, ing2: ed1_2, ed2_2) + em.getTransaction().begin(); + + ing1.getReferences1().add( ed1_1 ); + ing1.getReferences2().add( ed2_1 ); + + ing2.getReferences1().add( ed1_2 ); + ing2.getReferences2().add( ed2_2 ); + + em.persist( ed1_1 ); + em.persist( ed1_2 ); + em.persist( ed2_1 ); + em.persist( ed2_2 ); + em.persist( ing1 ); + em.persist( ing2 ); + + em.getTransaction().commit(); + + // Revision 2 (ing1: ed1_1, ed1_2, ed2_1, ed2_2) + em.getTransaction().begin(); + + DoubleListJoinColumnBidirectionalRefIngEntity ing1Loaded = em.find( DoubleListJoinColumnBidirectionalRefIngEntity.class, ing1.getId() ); + DoubleListJoinColumnBidirectionalRefIngEntity ing2Loaded = em.find( DoubleListJoinColumnBidirectionalRefIngEntity.class, ing2.getId() ); + DoubleListJoinColumnBidirectionalRefEdEntity1 ed1_1Loaded = em.find( DoubleListJoinColumnBidirectionalRefEdEntity1.class, ed1_1.getId() ); + DoubleListJoinColumnBidirectionalRefEdEntity1 ed1_2Loaded = em.find( DoubleListJoinColumnBidirectionalRefEdEntity1.class, ed1_2.getId() ); + DoubleListJoinColumnBidirectionalRefEdEntity2 ed2_1Loaded = em.find( DoubleListJoinColumnBidirectionalRefEdEntity2.class, ed2_1.getId() ); + DoubleListJoinColumnBidirectionalRefEdEntity2 ed2_2Loaded = em.find( DoubleListJoinColumnBidirectionalRefEdEntity2.class, ed2_2.getId() ); + + ing2Loaded.getReferences1().clear(); + ing2Loaded.getReferences2().clear(); + + ing1Loaded.getReferences1().add( ed1_2Loaded ); + ing1Loaded.getReferences2().add( ed2_2Loaded ); + + em.getTransaction().commit(); + em.clear(); + + // Revision 3 (ing1: ed1_1, ed1_2, ed2_1, ed2_2) + em.getTransaction().begin(); + + ing1Loaded = em.find( DoubleListJoinColumnBidirectionalRefIngEntity.class, ing1.getId() ); + ing2Loaded = em.find( DoubleListJoinColumnBidirectionalRefIngEntity.class, ing2.getId() ); + ed1_1Loaded = em.find( DoubleListJoinColumnBidirectionalRefEdEntity1.class, ed1_1.getId() ); + ed1_2Loaded = em.find( DoubleListJoinColumnBidirectionalRefEdEntity1.class, ed1_2.getId() ); + ed2_1Loaded = em.find( DoubleListJoinColumnBidirectionalRefEdEntity2.class, ed2_1.getId() ); + ed2_2Loaded = em.find( DoubleListJoinColumnBidirectionalRefEdEntity2.class, ed2_2.getId() ); + + ed1_1Loaded.setData( "ed1_1 bis" ); + ed2_2Loaded.setData( "ed2_2 bis" ); + + em.getTransaction().commit(); + em.clear(); + + // Revision 4 (ing1: ed2_2, ing2: ed2_1, ed1_1, ed1_2) + em.getTransaction().begin(); + + ing1Loaded = em.find( DoubleListJoinColumnBidirectionalRefIngEntity.class, ing1.getId() ); + ing2Loaded = em.find( DoubleListJoinColumnBidirectionalRefIngEntity.class, ing2.getId() ); + ed1_1Loaded = em.find( DoubleListJoinColumnBidirectionalRefEdEntity1.class, ed1_1.getId() ); + ed1_2Loaded = em.find( DoubleListJoinColumnBidirectionalRefEdEntity1.class, ed1_2.getId() ); + ed2_1Loaded = em.find( DoubleListJoinColumnBidirectionalRefEdEntity2.class, ed2_1.getId() ); + ed2_2Loaded = em.find( DoubleListJoinColumnBidirectionalRefEdEntity2.class, ed2_2.getId() ); + + ing1Loaded.getReferences1().clear(); + ing2Loaded.getReferences1().add( ed1_1Loaded ); + ing2Loaded.getReferences1().add( ed1_2Loaded ); + + ing1Loaded.getReferences2().remove( ed2_1Loaded ); + ing2Loaded.getReferences2().add( ed2_1Loaded ); + + em.getTransaction().commit(); + em.clear(); + + ing1_id = ing1.getId(); + ing2_id = ing2.getId(); + + ed1_1_id = ed1_1.getId(); + ed1_2_id = ed1_2.getId(); + ed2_1_id = ed2_1.getId(); + ed2_2_id = ed2_2.getId(); + } ); } @Test - public void testOwnerHasChanged() throws Exception { - List list = queryForPropertyHasChanged( - DoubleListJoinColumnBidirectionalRefEdEntity1.class, ed1_1_id, - "owner" - ); - assertEquals( 2, list.size() ); - assertEquals( makeList( 1, 4 ), extractRevisionNumbers( list ) ); - - list = queryForPropertyHasNotChanged( - DoubleListJoinColumnBidirectionalRefEdEntity1.class, ed1_1_id, - "owner" - ); - assertEquals( 1, list.size() ); - assertEquals( makeList( 3 ), extractRevisionNumbers( list ) ); - - list = queryForPropertyHasChanged( - DoubleListJoinColumnBidirectionalRefEdEntity1.class, ed1_2_id, - "owner" - ); - assertEquals( 3, list.size() ); - assertEquals( makeList( 1, 2, 4 ), extractRevisionNumbers( list ) ); - - list = queryForPropertyHasNotChanged( - DoubleListJoinColumnBidirectionalRefEdEntity1.class, ed1_2_id, - "owner" - ); - assertEquals( 0, list.size() ); + public void testOwnerHasChanged(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + List list = queryForPropertyHasChanged( + auditReader, + DoubleListJoinColumnBidirectionalRefEdEntity1.class, ed1_1_id, + "owner" + ); + assertEquals( 2, list.size() ); + assertEquals( makeList( 1, 4 ), extractRevisionNumbers( list ) ); + + list = queryForPropertyHasNotChanged( + auditReader, + DoubleListJoinColumnBidirectionalRefEdEntity1.class, ed1_1_id, + "owner" + ); + assertEquals( 1, list.size() ); + assertEquals( makeList( 3 ), extractRevisionNumbers( list ) ); + + list = queryForPropertyHasChanged( + auditReader, + DoubleListJoinColumnBidirectionalRefEdEntity1.class, ed1_2_id, + "owner" + ); + assertEquals( 3, list.size() ); + assertEquals( makeList( 1, 2, 4 ), extractRevisionNumbers( list ) ); + + list = queryForPropertyHasNotChanged( + auditReader, + DoubleListJoinColumnBidirectionalRefEdEntity1.class, ed1_2_id, + "owner" + ); + assertEquals( 0, list.size() ); + } ); } @Test - public void testOwnerSecEntityHasChanged() throws Exception { - List list = queryForPropertyHasChanged( - DoubleListJoinColumnBidirectionalRefEdEntity2.class, ed2_1_id, - "owner" - ); - assertEquals( 2, list.size() ); - assertEquals( makeList( 1, 4 ), extractRevisionNumbers( list ) ); - - list = queryForPropertyHasNotChanged( - DoubleListJoinColumnBidirectionalRefEdEntity2.class, ed2_1_id, - "owner" - ); - assertEquals( 0, list.size() ); - - list = queryForPropertyHasChanged( - DoubleListJoinColumnBidirectionalRefEdEntity2.class, ed2_2_id, - "owner" - ); - assertEquals( 2, list.size() ); - assertEquals( makeList( 1, 2 ), extractRevisionNumbers( list ) ); - - list = queryForPropertyHasNotChanged( - DoubleListJoinColumnBidirectionalRefEdEntity2.class, ed2_2_id, - "owner" - ); - assertEquals( 1, list.size() ); - assertEquals( makeList( 3 ), extractRevisionNumbers( list ) ); + public void testOwnerSecEntityHasChanged(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + List list = queryForPropertyHasChanged( + auditReader, + DoubleListJoinColumnBidirectionalRefEdEntity2.class, ed2_1_id, + "owner" + ); + assertEquals( 2, list.size() ); + assertEquals( makeList( 1, 4 ), extractRevisionNumbers( list ) ); + + list = queryForPropertyHasNotChanged( + auditReader, + DoubleListJoinColumnBidirectionalRefEdEntity2.class, ed2_1_id, + "owner" + ); + assertEquals( 0, list.size() ); + + list = queryForPropertyHasChanged( + auditReader, + DoubleListJoinColumnBidirectionalRefEdEntity2.class, ed2_2_id, + "owner" + ); + assertEquals( 2, list.size() ); + assertEquals( makeList( 1, 2 ), extractRevisionNumbers( list ) ); + + list = queryForPropertyHasNotChanged( + auditReader, + DoubleListJoinColumnBidirectionalRefEdEntity2.class, ed2_2_id, + "owner" + ); + assertEquals( 1, list.size() ); + assertEquals( makeList( 3 ), extractRevisionNumbers( list ) ); + } ); } @Test - public void testReferences1HasChanged() throws Exception { - List list = queryForPropertyHasChanged( - DoubleListJoinColumnBidirectionalRefIngEntity.class, ing1_id, - "references1" - ); - assertEquals( 3, list.size() ); - assertEquals( makeList( 1, 2, 4 ), extractRevisionNumbers( list ) ); - - list = queryForPropertyHasChanged( - DoubleListJoinColumnBidirectionalRefIngEntity.class, ing2_id, - "references1" - ); - assertEquals( 3, list.size() ); - assertEquals( makeList( 1, 2, 4 ), extractRevisionNumbers( list ) ); - - list = queryForPropertyHasNotChanged( - DoubleListJoinColumnBidirectionalRefIngEntity.class, ing1_id, - "references1" - ); - assertEquals( 0, list.size() ); - - list = queryForPropertyHasNotChanged( - DoubleListJoinColumnBidirectionalRefIngEntity.class, ing2_id, - "references1" - ); - assertEquals( 0, list.size() ); + public void testReferences1HasChanged(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + List list = queryForPropertyHasChanged( + auditReader, + DoubleListJoinColumnBidirectionalRefIngEntity.class, ing1_id, + "references1" + ); + assertEquals( 3, list.size() ); + assertEquals( makeList( 1, 2, 4 ), extractRevisionNumbers( list ) ); + + list = queryForPropertyHasChanged( + auditReader, + DoubleListJoinColumnBidirectionalRefIngEntity.class, ing2_id, + "references1" + ); + assertEquals( 3, list.size() ); + assertEquals( makeList( 1, 2, 4 ), extractRevisionNumbers( list ) ); + + list = queryForPropertyHasNotChanged( + auditReader, + DoubleListJoinColumnBidirectionalRefIngEntity.class, ing1_id, + "references1" + ); + assertEquals( 0, list.size() ); + + list = queryForPropertyHasNotChanged( + auditReader, + DoubleListJoinColumnBidirectionalRefIngEntity.class, ing2_id, + "references1" + ); + assertEquals( 0, list.size() ); + } ); } @Test - public void testReferences2HasChanged() throws Exception { - List list = queryForPropertyHasChanged( - DoubleListJoinColumnBidirectionalRefIngEntity.class, ing1_id, - "references2" - ); - assertEquals( 3, list.size() ); - assertEquals( makeList( 1, 2, 4 ), extractRevisionNumbers( list ) ); - - list = queryForPropertyHasChanged( - DoubleListJoinColumnBidirectionalRefIngEntity.class, ing2_id, - "references2" - ); - assertEquals( 3, list.size() ); - assertEquals( makeList( 1, 2, 4 ), extractRevisionNumbers( list ) ); - - list = queryForPropertyHasNotChanged( - DoubleListJoinColumnBidirectionalRefIngEntity.class, ing1_id, - "references2" - ); - assertEquals( 0, list.size() ); - - list = queryForPropertyHasNotChanged( - DoubleListJoinColumnBidirectionalRefIngEntity.class, ing2_id, - "references2" - ); - assertEquals( 0, list.size() ); + public void testReferences2HasChanged(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + List list = queryForPropertyHasChanged( + auditReader, + DoubleListJoinColumnBidirectionalRefIngEntity.class, ing1_id, + "references2" + ); + assertEquals( 3, list.size() ); + assertEquals( makeList( 1, 2, 4 ), extractRevisionNumbers( list ) ); + + list = queryForPropertyHasChanged( + auditReader, + DoubleListJoinColumnBidirectionalRefIngEntity.class, ing2_id, + "references2" + ); + assertEquals( 3, list.size() ); + assertEquals( makeList( 1, 2, 4 ), extractRevisionNumbers( list ) ); + + list = queryForPropertyHasNotChanged( + auditReader, + DoubleListJoinColumnBidirectionalRefIngEntity.class, ing1_id, + "references2" + ); + assertEquals( 0, list.size() ); + + list = queryForPropertyHasNotChanged( + auditReader, + DoubleListJoinColumnBidirectionalRefIngEntity.class, ing2_id, + "references2" + ); + assertEquals( 0, list.size() ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedEnumSet.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedEnumSet.java index 4f193252335f..3f169404bc8a 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedEnumSet.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedEnumSet.java @@ -5,100 +5,107 @@ package org.hibernate.orm.test.envers.integration.modifiedflags; import java.util.List; -import jakarta.persistence.EntityManager; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.envers.configuration.EnversSettings; import org.hibernate.orm.test.envers.entities.collection.EnumSetEntity; import org.hibernate.orm.test.envers.entities.collection.EnumSetEntity.E1; import org.hibernate.orm.test.envers.entities.collection.EnumSetEntity.E2; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; +import org.hibernate.testing.orm.junit.Setting; -import org.junit.Test; +import org.junit.jupiter.api.Test; -import static junit.framework.Assert.assertEquals; +import static org.hibernate.orm.test.envers.integration.modifiedflags.AbstractModifiedFlagsEntityTest.queryForPropertyHasChanged; +import static org.hibernate.orm.test.envers.integration.modifiedflags.AbstractModifiedFlagsEntityTest.queryForPropertyHasNotChanged; import static org.hibernate.orm.test.envers.tools.TestTools.extractRevisionNumbers; import static org.hibernate.orm.test.envers.tools.TestTools.makeList; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Adam Warski (adam at warski dot org) * @author Michal Skowronek (mskowr at o2 dot pl) */ +@Jpa(integrationSettings = @Setting(name = EnversSettings.GLOBAL_WITH_MODIFIED_FLAG, value = "true"), + annotatedClasses = {EnumSetEntity.class}) public class HasChangedEnumSet extends AbstractModifiedFlagsEntityTest { private Integer sse1_id; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {EnumSetEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - EnumSetEntity sse1 = new EnumSetEntity(); - - // Revision 1 (sse1: initialy 1 element) - em.getTransaction().begin(); + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + EnumSetEntity sse1 = new EnumSetEntity(); - sse1.getEnums1().add( E1.X ); - sse1.getEnums2().add( E2.A ); + // Revision 1 (sse1: initially 1 element) + em.getTransaction().begin(); - em.persist( sse1 ); + sse1.getEnums1().add( E1.X ); + sse1.getEnums2().add( E2.A ); - em.getTransaction().commit(); + em.persist( sse1 ); - // Revision 2 (sse1: adding 1 element/removing a non-existing element) - em.getTransaction().begin(); + em.getTransaction().commit(); - sse1 = em.find( EnumSetEntity.class, sse1.getId() ); + // Revision 2 (sse1: adding 1 element/removing a non-existing element) + em.getTransaction().begin(); - sse1.getEnums1().add( E1.Y ); - sse1.getEnums2().remove( E2.B ); + EnumSetEntity sse1Loaded = em.find( EnumSetEntity.class, sse1.getId() ); - em.getTransaction().commit(); + sse1Loaded.getEnums1().add( E1.Y ); + sse1Loaded.getEnums2().remove( E2.B ); - // Revision 3 (sse1: removing 1 element/adding an exisiting element) - em.getTransaction().begin(); + em.getTransaction().commit(); - sse1 = em.find( EnumSetEntity.class, sse1.getId() ); + // Revision 3 (sse1: removing 1 element/adding an existing element) + em.getTransaction().begin(); - sse1.getEnums1().remove( E1.X ); - sse1.getEnums2().add( E2.A ); + sse1Loaded = em.find( EnumSetEntity.class, sse1.getId() ); - em.getTransaction().commit(); + sse1Loaded.getEnums1().remove( E1.X ); + sse1Loaded.getEnums2().add( E2.A ); - // + em.getTransaction().commit(); - sse1_id = sse1.getId(); + sse1_id = sse1.getId(); + } ); } @Test - public void testHasChanged() throws Exception { - List list = queryForPropertyHasChanged( - EnumSetEntity.class, sse1_id, - "enums1" - ); - assertEquals( 3, list.size() ); - assertEquals( makeList( 1, 2, 3 ), extractRevisionNumbers( list ) ); - - list = queryForPropertyHasChanged( - EnumSetEntity.class, sse1_id, - "enums2" - ); - assertEquals( 1, list.size() ); - assertEquals( makeList( 1 ), extractRevisionNumbers( list ) ); - - list = queryForPropertyHasNotChanged( - EnumSetEntity.class, sse1_id, - "enums1" - ); - assertEquals( 0, list.size() ); - - list = queryForPropertyHasNotChanged( - EnumSetEntity.class, sse1_id, - "enums2" - ); - assertEquals( 2, list.size() ); - assertEquals( makeList( 2, 3 ), extractRevisionNumbers( list ) ); + public void testHasChanged(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + List list = queryForPropertyHasChanged( + auditReader, + EnumSetEntity.class, sse1_id, + "enums1" + ); + assertEquals( 3, list.size() ); + assertEquals( makeList( 1, 2, 3 ), extractRevisionNumbers( list ) ); + + list = queryForPropertyHasChanged( + auditReader, + EnumSetEntity.class, sse1_id, + "enums2" + ); + assertEquals( 1, list.size() ); + assertEquals( makeList( 1 ), extractRevisionNumbers( list ) ); + + list = queryForPropertyHasNotChanged( + auditReader, + EnumSetEntity.class, sse1_id, + "enums1" + ); + assertEquals( 0, list.size() ); + + list = queryForPropertyHasNotChanged( + auditReader, + EnumSetEntity.class, sse1_id, + "enums2" + ); + assertEquals( 2, list.size() ); + assertEquals( makeList( 2, 3 ), extractRevisionNumbers( list ) ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedForDefaultNotUsing.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedForDefaultNotUsing.java index 769e159fca31..d090dd541d63 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedForDefaultNotUsing.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedForDefaultNotUsing.java @@ -4,273 +4,269 @@ */ package org.hibernate.orm.test.envers.integration.modifiedflags; -import java.util.Arrays; -import java.util.List; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.envers.configuration.EnversSettings; import org.hibernate.orm.test.envers.entities.StrTestEntity; import org.hibernate.orm.test.envers.entities.components.Component1; import org.hibernate.orm.test.envers.entities.components.Component2; import org.hibernate.orm.test.envers.integration.modifiedflags.entities.PartialModifiedFlagsEntity; import org.hibernate.orm.test.envers.integration.modifiedflags.entities.WithModifiedFlagReferencingEntity; -import org.junit.Test; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; +import org.hibernate.testing.orm.junit.Setting; +import org.junit.jupiter.api.Test; + +import java.util.Arrays; +import java.util.List; -import static junit.framework.Assert.assertEquals; import static org.hibernate.orm.test.envers.tools.TestTools.extractRevisionNumbers; import static org.hibernate.orm.test.envers.tools.TestTools.makeList; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; /** * @author Michal Skowronek (mskowr at o2 dot pl) */ +@Jpa(integrationSettings = @Setting(name = EnversSettings.GLOBAL_WITH_MODIFIED_FLAG, value = "false"), + annotatedClasses = {PartialModifiedFlagsEntity.class, WithModifiedFlagReferencingEntity.class, StrTestEntity.class}) public class HasChangedForDefaultNotUsing extends AbstractModifiedFlagsEntityTest { private static final int entityId = 1; private static final int refEntityId = 1; - @Override - public boolean forceModifiedFlags() { - return false; - } + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + PartialModifiedFlagsEntity entity = new PartialModifiedFlagsEntity( entityId ); - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { - PartialModifiedFlagsEntity.class, - WithModifiedFlagReferencingEntity.class, - StrTestEntity.class - }; - } + // Revision 1 + em.getTransaction().begin(); - @Test - @Priority(10) - public void initData() { - - PartialModifiedFlagsEntity entity = - new PartialModifiedFlagsEntity( entityId ); - - // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - - em.persist( entity ); + em.persist( entity ); - em.getTransaction().commit(); + em.getTransaction().commit(); - // Revision 2 - em.getTransaction().begin(); + // Revision 2 + em.getTransaction().begin(); - entity.setData( "data1" ); - entity = em.merge( entity ); + entity.setData( "data1" ); + entity = em.merge( entity ); - em.getTransaction().commit(); + em.getTransaction().commit(); - // Revision 3 - em.getTransaction().begin(); + // Revision 3 + em.getTransaction().begin(); - entity.setComp1( new Component1( "str1", "str2" ) ); - entity = em.merge( entity ); + entity.setComp1( new Component1( "str1", "str2" ) ); + entity = em.merge( entity ); - em.getTransaction().commit(); + em.getTransaction().commit(); - // Revision 4 - em.getTransaction().begin(); + // Revision 4 + em.getTransaction().begin(); - entity.setComp2( new Component2( "str1", "str2" ) ); - entity = em.merge( entity ); + entity.setComp2( new Component2( "str1", "str2" ) ); + entity = em.merge( entity ); - em.getTransaction().commit(); + em.getTransaction().commit(); - // Revision 5 - em.getTransaction().begin(); + // Revision 5 + em.getTransaction().begin(); - WithModifiedFlagReferencingEntity withModifiedFlagReferencingEntity = new WithModifiedFlagReferencingEntity( - refEntityId, - "first" - ); - withModifiedFlagReferencingEntity.setReference( entity ); - em.persist( withModifiedFlagReferencingEntity ); + WithModifiedFlagReferencingEntity withModifiedFlagReferencingEntity = new WithModifiedFlagReferencingEntity( + refEntityId, "first" ); + withModifiedFlagReferencingEntity.setReference( entity ); + em.persist( withModifiedFlagReferencingEntity ); - em.getTransaction().commit(); + em.getTransaction().commit(); - // Revision 6 - em.getTransaction().begin(); + // Revision 6 + em.getTransaction().begin(); - withModifiedFlagReferencingEntity = em.find( WithModifiedFlagReferencingEntity.class, refEntityId ); - withModifiedFlagReferencingEntity.setReference( null ); - withModifiedFlagReferencingEntity.setSecondReference( entity ); - em.merge( withModifiedFlagReferencingEntity ); + withModifiedFlagReferencingEntity = em.find( WithModifiedFlagReferencingEntity.class, refEntityId ); + withModifiedFlagReferencingEntity.setReference( null ); + withModifiedFlagReferencingEntity.setSecondReference( entity ); + em.merge( withModifiedFlagReferencingEntity ); - em.getTransaction().commit(); + em.getTransaction().commit(); - // Revision 7 - em.getTransaction().begin(); + // Revision 7 + em.getTransaction().begin(); - entity.getStringSet().add( "firstElement" ); - entity.getStringSet().add( "secondElement" ); - entity = em.merge( entity ); + entity.getStringSet().add( "firstElement" ); + entity.getStringSet().add( "secondElement" ); + entity = em.merge( entity ); - em.getTransaction().commit(); + em.getTransaction().commit(); - // Revision 8 - em.getTransaction().begin(); + // Revision 8 + em.getTransaction().begin(); - entity.getStringSet().remove( "secondElement" ); - entity.getStringMap().put( "someKey", "someValue" ); - entity = em.merge( entity ); + entity.getStringSet().remove( "secondElement" ); + entity.getStringMap().put( "someKey", "someValue" ); + entity = em.merge( entity ); - em.getTransaction().commit(); + em.getTransaction().commit(); - // Revision 9 - main entity doesn't change - em.getTransaction().begin(); + // Revision 9 - main entity doesn't change + em.getTransaction().begin(); - StrTestEntity strTestEntity = new StrTestEntity( "first" ); - em.persist( strTestEntity ); + StrTestEntity strTestEntity = new StrTestEntity( "first" ); + em.persist( strTestEntity ); - em.getTransaction().commit(); + em.getTransaction().commit(); - // Revision 10 - em.getTransaction().begin(); + // Revision 10 + em.getTransaction().begin(); - entity.getEntitiesSet().add( strTestEntity ); - entity = em.merge( entity ); + entity.getEntitiesSet().add( strTestEntity ); + entity = em.merge( entity ); - em.getTransaction().commit(); + em.getTransaction().commit(); - // Revision 11 - em.getTransaction().begin(); + // Revision 11 + em.getTransaction().begin(); - entity.getEntitiesSet().remove( strTestEntity ); - entity.getEntitiesMap().put( "someKey", strTestEntity ); - em.merge( entity ); + entity.getEntitiesSet().remove( strTestEntity ); + entity.getEntitiesMap().put( "someKey", strTestEntity ); + em.merge( entity ); - em.getTransaction().commit(); + em.getTransaction().commit(); - // Revision 12 - main entity doesn't change - em.getTransaction().begin(); + // Revision 12 - main entity doesn't change + em.getTransaction().begin(); - strTestEntity.setStr( "second" ); - em.merge( strTestEntity ); - - em.getTransaction().commit(); + strTestEntity.setStr( "second" ); + em.merge( strTestEntity ); + em.getTransaction().commit(); + } ); } @Test - public void testRevisionsCounts() { - assertEquals( - Arrays.asList( (Number) 1, 2, 3, 4, 5, 6, 7, 8, 10, 11 ), - getAuditReader() - .getRevisions( - PartialModifiedFlagsEntity.class, - entityId - ) - ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1, 2, 3, 4, 5, 6, 7, 8, 10, 11 ), + auditReader.getRevisions( PartialModifiedFlagsEntity.class, entityId ) ); + } ); } @Test - public void testHasChangedData() throws Exception { - List list = queryForPropertyHasChanged( - PartialModifiedFlagsEntity.class, - entityId, "data" - ); - assertEquals( 1, list.size() ); - assertEquals( makeList( 2 ), extractRevisionNumbers( list ) ); + public void testHasChangedData(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + List list = queryForPropertyHasChanged( auditReader, PartialModifiedFlagsEntity.class, entityId, "data" ); + assertEquals( 1, list.size() ); + assertEquals( makeList( 2 ), extractRevisionNumbers( list ) ); + } ); } @Test - public void testHasChangedComp1() throws Exception { - List list = queryForPropertyHasChanged( - PartialModifiedFlagsEntity.class, - entityId, "comp1" - ); - assertEquals( 1, list.size() ); - assertEquals( makeList( 3 ), extractRevisionNumbers( list ) ); + public void testHasChangedComp1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + List list = queryForPropertyHasChanged( auditReader, PartialModifiedFlagsEntity.class, entityId, "comp1" ); + assertEquals( 1, list.size() ); + assertEquals( makeList( 3 ), extractRevisionNumbers( list ) ); + } ); } - @Test(expected = IllegalArgumentException.class) - public void testHasChangedComp2() throws Exception { - queryForPropertyHasChanged( - PartialModifiedFlagsEntity.class, - entityId, "comp2" - ); + @Test + public void testHasChangedComp2(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertThrows( IllegalArgumentException.class, + () -> queryForPropertyHasChanged( auditReader, PartialModifiedFlagsEntity.class, entityId, + "comp2" ) ); + } ); } @Test - public void testHasChangedReferencing() throws Exception { - List list = queryForPropertyHasChanged( - PartialModifiedFlagsEntity.class, - entityId, "referencing" - ); - assertEquals( 2, list.size() ); - assertEquals( makeList( 5, 6 ), extractRevisionNumbers( list ) ); + public void testHasChangedReferencing(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + List list = queryForPropertyHasChanged( auditReader, PartialModifiedFlagsEntity.class, entityId, + "referencing" ); + assertEquals( 2, list.size() ); + assertEquals( makeList( 5, 6 ), extractRevisionNumbers( list ) ); + } ); } - @Test(expected = IllegalArgumentException.class) - public void testHasChangedReferencing2() throws Exception { - queryForPropertyHasChanged( - PartialModifiedFlagsEntity.class, - entityId, "referencing2" - ); + @Test + public void testHasChangedReferencing2(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertThrows( IllegalArgumentException.class, + () -> queryForPropertyHasChanged( auditReader, PartialModifiedFlagsEntity.class, entityId, + "referencing2" ) ); + } ); } @Test - public void testHasChangedStringSet() throws Exception { - List list = queryForPropertyHasChanged( - PartialModifiedFlagsEntity.class, - entityId, "stringSet" - ); - assertEquals( 3, list.size() ); - assertEquals( makeList( 1, 7, 8 ), extractRevisionNumbers( list ) ); + public void testHasChangedStringSet(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + List list = queryForPropertyHasChanged( auditReader, PartialModifiedFlagsEntity.class, entityId, + "stringSet" ); + assertEquals( 3, list.size() ); + assertEquals( makeList( 1, 7, 8 ), extractRevisionNumbers( list ) ); + } ); } @Test - public void testHasChangedStringMap() throws Exception { - List list = queryForPropertyHasChanged( - PartialModifiedFlagsEntity.class, - entityId, "stringMap" - ); - assertEquals( 2, list.size() ); - assertEquals( makeList( 1, 8 ), extractRevisionNumbers( list ) ); + public void testHasChangedStringMap(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + List list = queryForPropertyHasChanged( auditReader, PartialModifiedFlagsEntity.class, entityId, + "stringMap" ); + assertEquals( 2, list.size() ); + assertEquals( makeList( 1, 8 ), extractRevisionNumbers( list ) ); + } ); } @Test - public void testHasChangedStringSetAndMap() throws Exception { - List list = queryForPropertyHasChanged( - PartialModifiedFlagsEntity.class, - entityId, "stringSet", "stringMap" - ); - assertEquals( 2, list.size() ); - assertEquals( makeList( 1, 8 ), extractRevisionNumbers( list ) ); + public void testHasChangedStringSetAndMap(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + List list = queryForPropertyHasChanged( auditReader, PartialModifiedFlagsEntity.class, entityId, + "stringSet", "stringMap" ); + assertEquals( 2, list.size() ); + assertEquals( makeList( 1, 8 ), extractRevisionNumbers( list ) ); + } ); } @Test - public void testHasChangedEntitiesSet() throws Exception { - List list = queryForPropertyHasChanged( - PartialModifiedFlagsEntity.class, - entityId, "entitiesSet" - ); - assertEquals( 3, list.size() ); - assertEquals( makeList( 1, 10, 11 ), extractRevisionNumbers( list ) ); + public void testHasChangedEntitiesSet(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + List list = queryForPropertyHasChanged( auditReader, PartialModifiedFlagsEntity.class, entityId, + "entitiesSet" ); + assertEquals( 3, list.size() ); + assertEquals( makeList( 1, 10, 11 ), extractRevisionNumbers( list ) ); + } ); } @Test - public void testHasChangedEntitiesMap() throws Exception { - List list = queryForPropertyHasChanged( - PartialModifiedFlagsEntity.class, - entityId, "entitiesMap" - ); - assertEquals( 2, list.size() ); - assertEquals( makeList( 1, 11 ), extractRevisionNumbers( list ) ); + public void testHasChangedEntitiesMap(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + List list = queryForPropertyHasChanged( auditReader, PartialModifiedFlagsEntity.class, entityId, + "entitiesMap" ); + assertEquals( 2, list.size() ); + assertEquals( makeList( 1, 11 ), extractRevisionNumbers( list ) ); + } ); } @Test - public void testHasChangedEntitiesSetAndMap() throws Exception { - List list = queryForPropertyHasChanged( - PartialModifiedFlagsEntity.class, - entityId, "entitiesSet", "entitiesMap" - ); - assertEquals( 2, list.size() ); - assertEquals( makeList( 1, 11 ), extractRevisionNumbers( list ) ); + public void testHasChangedEntitiesSetAndMap(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + List list = queryForPropertyHasChanged( auditReader, PartialModifiedFlagsEntity.class, entityId, + "entitiesSet", "entitiesMap" ); + assertEquals( 2, list.size() ); + assertEquals( makeList( 1, 11 ), extractRevisionNumbers( list ) ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedIdMapKey.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedIdMapKey.java index f15dec4c219d..c38b8fd88e1c 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedIdMapKey.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedIdMapKey.java @@ -5,81 +5,85 @@ package org.hibernate.orm.test.envers.integration.modifiedflags; import java.util.List; -import jakarta.persistence.EntityManager; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.envers.configuration.EnversSettings; import org.hibernate.orm.test.envers.entities.StrTestEntity; import org.hibernate.orm.test.envers.integration.collection.mapkey.IdMapKeyEntity; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; +import org.hibernate.testing.orm.junit.Setting; -import org.junit.Test; +import org.junit.jupiter.api.Test; -import static junit.framework.Assert.assertEquals; import static org.hibernate.orm.test.envers.tools.TestTools.extractRevisionNumbers; import static org.hibernate.orm.test.envers.tools.TestTools.makeList; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Adam Warski (adam at warski dot org) * @author Michal Skowronek (mskowr at o2 dot pl) */ +@Jpa(integrationSettings = @Setting(name = EnversSettings.GLOBAL_WITH_MODIFIED_FLAG, value = "true"), + annotatedClasses = {IdMapKeyEntity.class, StrTestEntity.class}) public class HasChangedIdMapKey extends AbstractModifiedFlagsEntityTest { private Integer imke_id; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {IdMapKeyEntity.class, StrTestEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - IdMapKeyEntity imke = new IdMapKeyEntity(); - - // Revision 1 (intialy 1 mapping) - em.getTransaction().begin(); - - StrTestEntity ste1 = new StrTestEntity( "x" ); - StrTestEntity ste2 = new StrTestEntity( "y" ); + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + IdMapKeyEntity imke = new IdMapKeyEntity(); - em.persist( ste1 ); - em.persist( ste2 ); + // Revision 1 (intialy 1 mapping) + em.getTransaction().begin(); - imke.getIdmap().put( ste1.getId(), ste1 ); + StrTestEntity ste1 = new StrTestEntity( "x" ); + StrTestEntity ste2 = new StrTestEntity( "y" ); - em.persist( imke ); + em.persist( ste1 ); + em.persist( ste2 ); - em.getTransaction().commit(); + imke.getIdmap().put( ste1.getId(), ste1 ); - // Revision 2 (sse1: adding 1 mapping) - em.getTransaction().begin(); + em.persist( imke ); - ste2 = em.find( StrTestEntity.class, ste2.getId() ); - imke = em.find( IdMapKeyEntity.class, imke.getId() ); + em.getTransaction().commit(); - imke.getIdmap().put( ste2.getId(), ste2 ); + // Revision 2 (sse1: adding 1 mapping) + em.getTransaction().begin(); - em.getTransaction().commit(); + StrTestEntity ste2Ref = em.find( StrTestEntity.class, ste2.getId() ); + IdMapKeyEntity imkeRef = em.find( IdMapKeyEntity.class, imke.getId() ); - // + imkeRef.getIdmap().put( ste2Ref.getId(), ste2Ref ); - imke_id = imke.getId(); + em.getTransaction().commit(); + imke_id = imke.getId(); + } ); } @Test - public void testHasChanged() throws Exception { - List list = queryForPropertyHasChanged( - IdMapKeyEntity.class, imke_id, - "idmap" - ); - assertEquals( 2, list.size() ); - assertEquals( makeList( 1, 2 ), extractRevisionNumbers( list ) ); - - list = queryForPropertyHasNotChanged( - IdMapKeyEntity.class, imke_id, - "idmap" - ); - assertEquals( 0, list.size() ); + public void testHasChanged(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + List list = AbstractModifiedFlagsEntityTest.queryForPropertyHasChanged( + auditReader, + IdMapKeyEntity.class, + imke_id, + "idmap" + ); + assertEquals( 2, list.size() ); + assertEquals( makeList( 1, 2 ), extractRevisionNumbers( list ) ); + + list = AbstractModifiedFlagsEntityTest.queryForPropertyHasNotChanged( + auditReader, + IdMapKeyEntity.class, + imke_id, + "idmap" + ); + assertEquals( 0, list.size() ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedInsertUpdateSameTransactionTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedInsertUpdateSameTransactionTest.java index 456b7f7b1190..4d21296bd3a6 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedInsertUpdateSameTransactionTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedInsertUpdateSameTransactionTest.java @@ -6,48 +6,50 @@ import java.util.List; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.envers.configuration.EnversSettings; import org.hibernate.orm.test.envers.integration.basic.BasicTestEntity1; -import org.junit.Test; - +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; +import org.hibernate.testing.orm.junit.Jpa; +import org.hibernate.testing.orm.junit.Setting; +import org.junit.jupiter.api.Test; -import static org.junit.Assert.assertEquals; +import static org.hibernate.orm.test.envers.integration.modifiedflags.AbstractModifiedFlagsEntityTest.queryForPropertyHasChanged; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Chris Cranford */ @JiraKey(value = "HHH-11582") +@EnversTest +@Jpa( + integrationSettings = @Setting(name = EnversSettings.GLOBAL_WITH_MODIFIED_FLAG, value = "true"), + annotatedClasses = {BasicTestEntity1.class} +) public class HasChangedInsertUpdateSameTransactionTest extends AbstractModifiedFlagsEntityTest { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { BasicTestEntity1.class }; - } - @Test - @Priority(10) - public void initData() { - EntityManager entityManager = getEntityManager(); - try { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { // Revision 1 - entityManager.getTransaction().begin(); + em.getTransaction().begin(); BasicTestEntity1 entity = new BasicTestEntity1( "str1", 1 ); - entityManager.persist( entity ); + em.persist( entity ); entity.setStr1( "str2" ); - entityManager.merge( entity ); - entityManager.getTransaction().commit(); - } - finally { - entityManager.close(); - } + em.merge( entity ); + em.getTransaction().commit(); + } ); } @Test - public void testPropertyChangedInsrtUpdateSameTransaction() { - // this was only flagged as changed as part of the persist - List list = queryForPropertyHasChanged( BasicTestEntity1.class, 1, "long1" ); - assertEquals( 1, list.size() ); + public void testPropertyChangedInsrtUpdateSameTransaction(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + // this was only flagged as changed as part of the persist + List list = queryForPropertyHasChanged( AuditReaderFactory.get( em ), BasicTestEntity1.class, 1, "long1" ); + assertEquals( 1, list.size() ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedManualFlush.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedManualFlush.java index 5b1b736113f7..a8b2741e6992 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedManualFlush.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedManualFlush.java @@ -5,65 +5,68 @@ package org.hibernate.orm.test.envers.integration.modifiedflags; import java.util.List; -import jakarta.persistence.EntityManager; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.envers.configuration.EnversSettings; import org.hibernate.orm.test.envers.integration.basic.BasicTestEntity1; - +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; +import org.hibernate.testing.orm.junit.Jpa; +import org.hibernate.testing.orm.junit.Setting; +import org.junit.jupiter.api.Test; +import static org.hibernate.orm.test.envers.integration.modifiedflags.AbstractModifiedFlagsEntityTest.queryForPropertyHasChanged; import static org.hibernate.orm.test.envers.tools.TestTools.extractRevisionNumbers; import static org.hibernate.orm.test.envers.tools.TestTools.makeList; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) */ @JiraKey(value = "HHH-7918") +@Jpa( + integrationSettings = @Setting(name = EnversSettings.GLOBAL_WITH_MODIFIED_FLAG, value = "true"), + annotatedClasses = {BasicTestEntity1.class} +) public class HasChangedManualFlush extends AbstractModifiedFlagsEntityTest { private Integer id = null; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {BasicTestEntity1.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - // Revision 1 - em.getTransaction().begin(); - BasicTestEntity1 entity = new BasicTestEntity1( "str1", 1 ); - em.persist( entity ); - em.getTransaction().commit(); - - id = entity.getId(); + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + // Revision 1 + em.getTransaction().begin(); + BasicTestEntity1 entity = new BasicTestEntity1( "str1", 1 ); + em.persist( entity ); + em.getTransaction().commit(); - // Revision 2 - both properties (str1 and long1) should be marked as modified. - em.getTransaction().begin(); - entity = em.find( BasicTestEntity1.class, entity.getId() ); - entity.setStr1( "str2" ); - entity = em.merge( entity ); - em.flush(); - entity.setLong1( 2 ); - entity = em.merge( entity ); - em.flush(); - em.getTransaction().commit(); + id = entity.getId(); - em.close(); + // Revision 2 - both properties (str1 and long1) should be marked as modified. + em.getTransaction().begin(); + BasicTestEntity1 entity2 = em.find( BasicTestEntity1.class, entity.getId() ); + entity2.setStr1( "str2" ); + entity2 = em.merge( entity2 ); + em.flush(); + entity2.setLong1( 2 ); + entity2 = em.merge( entity2 ); + em.flush(); + em.getTransaction().commit(); + } ); } @Test - public void testHasChangedOnDoubleFlush() { - List list = queryForPropertyHasChanged( BasicTestEntity1.class, id, "str1" ); - assertEquals( 2, list.size() ); - assertEquals( makeList( 1, 2 ), extractRevisionNumbers( list ) ); + public void testHasChangedOnDoubleFlush(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + List list = queryForPropertyHasChanged( auditReader, BasicTestEntity1.class, id, "str1" ); + assertEquals( 2, list.size() ); + assertEquals( makeList( 1, 2 ), extractRevisionNumbers( list ) ); - list = queryForPropertyHasChanged( BasicTestEntity1.class, id, "long1" ); - assertEquals( 2, list.size() ); - assertEquals( makeList( 1, 2 ), extractRevisionNumbers( list ) ); + list = queryForPropertyHasChanged( auditReader, BasicTestEntity1.class, id, "long1" ); + assertEquals( 2, list.size() ); + assertEquals( makeList( 1, 2 ), extractRevisionNumbers( list ) ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedManyToOneInComponent.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedManyToOneInComponent.java index 8146b9b57784..9d8a4cc03bc9 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedManyToOneInComponent.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedManyToOneInComponent.java @@ -5,90 +5,100 @@ package org.hibernate.orm.test.envers.integration.modifiedflags; import java.util.List; -import jakarta.persistence.EntityManager; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.envers.configuration.EnversSettings; import org.hibernate.orm.test.envers.entities.StrTestEntity; import org.hibernate.orm.test.envers.entities.components.relations.ManyToOneComponent; import org.hibernate.orm.test.envers.entities.components.relations.ManyToOneComponentTestEntity; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; +import org.hibernate.testing.orm.junit.Setting; +import org.junit.jupiter.api.Test; -import org.junit.Test; - -import static junit.framework.Assert.assertEquals; import static org.hibernate.orm.test.envers.tools.TestTools.extractRevisionNumbers; import static org.hibernate.orm.test.envers.tools.TestTools.makeList; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Adam Warski (adam at warski dot org) * @author Michal Skowronek (mskowr at o2 dot pl) */ +@Jpa(integrationSettings = @Setting(name = EnversSettings.GLOBAL_WITH_MODIFIED_FLAG, value = "true"), + annotatedClasses = {ManyToOneComponentTestEntity.class, StrTestEntity.class}) public class HasChangedManyToOneInComponent extends AbstractModifiedFlagsEntityTest { private Integer mtocte_id1; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {ManyToOneComponentTestEntity.class, StrTestEntity.class}; - } - - @Test - @Priority(10) - public void initData() { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); + scope.inEntityManager( em -> { + em.getTransaction().begin(); - StrTestEntity ste1 = new StrTestEntity(); - ste1.setStr( "str1" ); + StrTestEntity ste1 = new StrTestEntity(); + ste1.setStr( "str1" ); - StrTestEntity ste2 = new StrTestEntity(); - ste2.setStr( "str2" ); + StrTestEntity ste2 = new StrTestEntity(); + ste2.setStr( "str2" ); - em.persist( ste1 ); - em.persist( ste2 ); + em.persist( ste1 ); + em.persist( ste2 ); - em.getTransaction().commit(); + em.getTransaction().commit(); + } ); // Revision 2 - em = getEntityManager(); - em.getTransaction().begin(); + scope.inEntityManager( em -> { + em.getTransaction().begin(); - ManyToOneComponentTestEntity mtocte1 = new ManyToOneComponentTestEntity( - new ManyToOneComponent( - ste1, - "data1" - ) - ); + StrTestEntity ste1 = em.createQuery( "from StrTestEntity where str = 'str1'", StrTestEntity.class ) + .getSingleResult(); + ManyToOneComponentTestEntity mtocte1 = new ManyToOneComponentTestEntity( + new ManyToOneComponent( + ste1, + "data1" + ) + ); - em.persist( mtocte1 ); + em.persist( mtocte1 ); + mtocte_id1 = mtocte1.getId(); - em.getTransaction().commit(); + em.getTransaction().commit(); + } ); // Revision 3 - em = getEntityManager(); - em.getTransaction().begin(); - - mtocte1 = em.find( ManyToOneComponentTestEntity.class, mtocte1.getId() ); - mtocte1.getComp1().setEntity( ste2 ); + scope.inEntityManager( em -> { + em.getTransaction().begin(); - em.getTransaction().commit(); + ManyToOneComponentTestEntity mtocte1 = em.find( ManyToOneComponentTestEntity.class, mtocte_id1 ); + StrTestEntity ste2 = em.createQuery( "from StrTestEntity where str = 'str2'", StrTestEntity.class ) + .getSingleResult(); + mtocte1.getComp1().setEntity( ste2 ); - mtocte_id1 = mtocte1.getId(); + em.getTransaction().commit(); + } ); } @Test - public void testHasChangedId1() throws Exception { - List list = queryForPropertyHasChanged( - ManyToOneComponentTestEntity.class, - mtocte_id1, "comp1" - ); - assertEquals( 2, list.size() ); - assertEquals( makeList( 2, 3 ), extractRevisionNumbers( list ) ); - - list = queryForPropertyHasNotChanged( - ManyToOneComponentTestEntity.class, - mtocte_id1, "comp1" - ); - assertEquals( 0, list.size() ); + public void testHasChangedId1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + List list = queryForPropertyHasChanged( + auditReader, + ManyToOneComponentTestEntity.class, + mtocte_id1, "comp1" + ); + assertEquals( 2, list.size() ); + assertEquals( makeList( 2, 3 ), extractRevisionNumbers( list ) ); + + list = queryForPropertyHasNotChanged( + auditReader, + ManyToOneComponentTestEntity.class, + mtocte_id1, "comp1" + ); + assertEquals( 0, list.size() ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedMergeTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedMergeTest.java index 0ad16a0d53ce..737fce88e9c2 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedMergeTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedMergeTest.java @@ -6,22 +6,27 @@ import java.util.ArrayList; import java.util.List; -import jakarta.persistence.EntityManager; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.envers.configuration.EnversSettings; import org.hibernate.orm.test.envers.entities.onetomany.ListRefEdEntity; import org.hibernate.orm.test.envers.entities.onetomany.ListRefIngEntity; - +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; +import org.hibernate.testing.orm.junit.Jpa; +import org.hibernate.testing.orm.junit.Setting; +import org.junit.jupiter.api.Test; import static org.hibernate.orm.test.envers.tools.TestTools.extractRevisionNumbers; import static org.hibernate.orm.test.envers.tools.TestTools.makeList; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) */ +@Jpa(integrationSettings = @Setting(name = EnversSettings.GLOBAL_WITH_MODIFIED_FLAG, value = "true"), + annotatedClasses = {ListRefEdEntity.class, ListRefIngEntity.class}) public class HasChangedMergeTest extends AbstractModifiedFlagsEntityTest { private Integer parent1Id = null; private Integer child1Id = null; @@ -29,83 +34,83 @@ public class HasChangedMergeTest extends AbstractModifiedFlagsEntityTest { private Integer parent2Id = null; private Integer child2Id = null; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {ListRefEdEntity.class, ListRefIngEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Revision 1 - data preparation - em.getTransaction().begin(); - ListRefEdEntity parent1 = new ListRefEdEntity( 1, "initial data" ); - parent1.setReffering( new ArrayList() ); // Empty collection is not the same as null reference. - ListRefEdEntity parent2 = new ListRefEdEntity( 2, "initial data" ); - parent2.setReffering( new ArrayList() ); - em.persist( parent1 ); - em.persist( parent2 ); - em.getTransaction().commit(); + scope.inEntityManager( em -> { + em.getTransaction().begin(); + ListRefEdEntity parent1 = new ListRefEdEntity( 1, "initial data" ); + parent1.setReffering( new ArrayList<>() ); // Empty collection is not the same as null reference. + ListRefEdEntity parent2 = new ListRefEdEntity( 2, "initial data" ); + parent2.setReffering( new ArrayList<>() ); + em.persist( parent1 ); + em.persist( parent2 ); + parent1Id = parent1.getId(); + parent2Id = parent2.getId(); + em.getTransaction().commit(); + } ); // Revision 2 - inserting new child entity and updating parent - em.getTransaction().begin(); - parent1 = em.find( ListRefEdEntity.class, parent1.getId() ); - ListRefIngEntity child1 = new ListRefIngEntity( 1, "initial data", parent1 ); - em.persist( child1 ); - parent1.setData( "updated data" ); - parent1 = em.merge( parent1 ); - em.getTransaction().commit(); + scope.inEntityManager( em -> { + em.getTransaction().begin(); + ListRefEdEntity parent1 = em.find( ListRefEdEntity.class, parent1Id ); + ListRefIngEntity child1 = new ListRefIngEntity( 1, "initial data", parent1 ); + em.persist( child1 ); + parent1.setData( "updated data" ); + em.merge( parent1 ); + child1Id = child1.getId(); + em.getTransaction().commit(); + } ); // Revision 3 - updating parent, flushing and adding new child - em.getTransaction().begin(); - parent2 = em.find( ListRefEdEntity.class, parent2.getId() ); - parent2.setData( "updated data" ); - parent2 = em.merge( parent2 ); - em.flush(); - ListRefIngEntity child2 = new ListRefIngEntity( 2, "initial data", parent2 ); - em.persist( child2 ); - em.getTransaction().commit(); - - parent1Id = parent1.getId(); - child1Id = child1.getId(); - - parent2Id = parent2.getId(); - child2Id = child2.getId(); - - em.close(); + scope.inEntityManager( em -> { + em.getTransaction().begin(); + ListRefEdEntity parent2 = em.find( ListRefEdEntity.class, parent2Id ); + parent2.setData( "updated data" ); + em.merge( parent2 ); + em.flush(); + ListRefIngEntity child2 = new ListRefIngEntity( 2, "initial data", parent2 ); + em.persist( child2 ); + child2Id = child2.getId(); + em.getTransaction().commit(); + } ); } @Test @JiraKey(value = "HHH-7948") - public void testOneToManyInsertChildUpdateParent() { - List list = queryForPropertyHasChanged( ListRefEdEntity.class, parent1Id, "data" ); - assertEquals( 2, list.size() ); - assertEquals( makeList( 1, 2 ), extractRevisionNumbers( list ) ); - - list = queryForPropertyHasChanged( ListRefEdEntity.class, parent1Id, "reffering" ); - assertEquals( 2, list.size() ); - assertEquals( makeList( 1, 2 ), extractRevisionNumbers( list ) ); - - list = queryForPropertyHasChanged( ListRefIngEntity.class, child1Id, "reference" ); - assertEquals( 1, list.size() ); - assertEquals( makeList( 2 ), extractRevisionNumbers( list ) ); + public void testOneToManyInsertChildUpdateParent(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + List list = queryForPropertyHasChanged( auditReader, ListRefEdEntity.class, parent1Id, "data" ); + assertEquals( 2, list.size() ); + assertEquals( makeList( 1, 2 ), extractRevisionNumbers( list ) ); + + list = queryForPropertyHasChanged( auditReader, ListRefEdEntity.class, parent1Id, "reffering" ); + assertEquals( 2, list.size() ); + assertEquals( makeList( 1, 2 ), extractRevisionNumbers( list ) ); + + list = queryForPropertyHasChanged( auditReader, ListRefIngEntity.class, child1Id, "reference" ); + assertEquals( 1, list.size() ); + assertEquals( makeList( 2 ), extractRevisionNumbers( list ) ); + } ); } @Test @JiraKey(value = "HHH-7948") - public void testOneToManyUpdateParentInsertChild() { - List list = queryForPropertyHasChanged( ListRefEdEntity.class, parent2Id, "data" ); - assertEquals( 2, list.size() ); - assertEquals( makeList( 1, 3 ), extractRevisionNumbers( list ) ); - - list = queryForPropertyHasChanged( ListRefEdEntity.class, parent2Id, "reffering" ); - assertEquals( 2, list.size() ); - assertEquals( makeList( 1, 3 ), extractRevisionNumbers( list ) ); - - list = queryForPropertyHasChanged( ListRefIngEntity.class, child2Id, "reference" ); - assertEquals( 1, list.size() ); - assertEquals( makeList( 3 ), extractRevisionNumbers( list ) ); + public void testOneToManyUpdateParentInsertChild(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + List list = queryForPropertyHasChanged( auditReader, ListRefEdEntity.class, parent2Id, "data" ); + assertEquals( 2, list.size() ); + assertEquals( makeList( 1, 3 ), extractRevisionNumbers( list ) ); + + list = queryForPropertyHasChanged( auditReader, ListRefEdEntity.class, parent2Id, "reffering" ); + assertEquals( 2, list.size() ); + assertEquals( makeList( 1, 3 ), extractRevisionNumbers( list ) ); + + list = queryForPropertyHasChanged( auditReader, ListRefIngEntity.class, child2Id, "reference" ); + assertEquals( 1, list.size() ); + assertEquals( makeList( 3 ), extractRevisionNumbers( list ) ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedNotOwnedBidirectional.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedNotOwnedBidirectional.java new file mode 100644 index 000000000000..11704e2664b7 --- /dev/null +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedNotOwnedBidirectional.java @@ -0,0 +1,92 @@ +/* + * SPDX-License-Identifier: Apache-2.0 + * Copyright Red Hat Inc. and Hibernate Authors + */ +package org.hibernate.orm.test.envers.integration.modifiedflags; + +import java.util.List; + +import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.envers.configuration.EnversSettings; +import org.hibernate.orm.test.envers.integration.inheritance.joined.notownedrelation.Address; +import org.hibernate.orm.test.envers.integration.inheritance.joined.notownedrelation.Contact; +import org.hibernate.orm.test.envers.integration.inheritance.joined.notownedrelation.PersonalContact; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; +import org.hibernate.testing.orm.junit.Setting; + +import org.junit.jupiter.api.Test; + +import static org.hibernate.orm.test.envers.tools.TestTools.extractRevisionNumbers; +import static org.hibernate.orm.test.envers.tools.TestTools.makeList; +import static org.junit.jupiter.api.Assertions.assertEquals; + +/** + * @author Adam Warski (adam at warski dot org) + * @author Michal Skowronek (mskowr at o2 dot pl) + */ +@Jpa(integrationSettings = @Setting(name = EnversSettings.GLOBAL_WITH_MODIFIED_FLAG, value = "true"), + annotatedClasses = {Address.class, Contact.class, PersonalContact.class}) +public class HasChangedNotOwnedBidirectional extends AbstractModifiedFlagsEntityTest { + private Long pc_id; + private Long a1_id; + private Long a2_id; + + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + pc_id = 1L; + a1_id = 10L; + a2_id = 100L; + + // Rev 1 + em.getTransaction().begin(); + + PersonalContact pc = new PersonalContact( pc_id, "e", "f" ); + + Address a1 = new Address( a1_id, "a1" ); + a1.setContact( pc ); + + em.persist( pc ); + em.persist( a1 ); + + em.getTransaction().commit(); + + // Rev 2 + em.getTransaction().begin(); + + PersonalContact pcRef = em.find( PersonalContact.class, pc_id ); + + Address a2 = new Address( a2_id, "a2" ); + a2.setContact( pcRef ); + + em.persist( a2 ); + + em.getTransaction().commit(); + } ); + } + + @Test + public void testReferencedEntityHasChanged(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + List list = AbstractModifiedFlagsEntityTest.queryForPropertyHasChanged( + auditReader, + PersonalContact.class, + pc_id, + "addresses" + ); + assertEquals( 2, list.size() ); + assertEquals( makeList( 1, 2 ), extractRevisionNumbers( list ) ); + + list = AbstractModifiedFlagsEntityTest.queryForPropertyHasChanged( auditReader, Address.class, a1_id, "contact" ); + assertEquals( 1, list.size() ); + assertEquals( makeList( 1 ), extractRevisionNumbers( list ) ); + + list = AbstractModifiedFlagsEntityTest.queryForPropertyHasChanged( auditReader, Address.class, a2_id, "contact" ); + assertEquals( 1, list.size() ); + assertEquals( makeList( 2 ), extractRevisionNumbers( list ) ); + } ); + } +} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedNullProperties.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedNullProperties.java index ed4459c41531..e993711173fe 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedNullProperties.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedNullProperties.java @@ -5,96 +5,114 @@ package org.hibernate.orm.test.envers.integration.modifiedflags; import java.util.List; -import jakarta.persistence.EntityManager; +import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.envers.configuration.EnversSettings; import org.hibernate.envers.query.AuditEntity; -import org.hibernate.orm.test.envers.Priority; import org.hibernate.orm.test.envers.integration.basic.BasicTestEntity1; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; +import org.hibernate.testing.orm.junit.Setting; -import org.junit.Test; +import org.junit.jupiter.api.Test; -import static junit.framework.Assert.assertEquals; import static org.hibernate.orm.test.envers.tools.TestTools.extractRevisionNumbers; import static org.hibernate.orm.test.envers.tools.TestTools.makeList; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Adam Warski (adam at warski dot org) * @author Michal Skowronek (mskowr at o2 dot pl) */ +@Jpa(integrationSettings = @Setting(name = EnversSettings.GLOBAL_WITH_MODIFIED_FLAG, value = "true"), + annotatedClasses = {BasicTestEntity1.class}) public class HasChangedNullProperties extends AbstractModifiedFlagsEntityTest { private Integer id1; private Integer id2; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {BasicTestEntity1.class}; - } - - private Integer addNewEntity(String str, long lng) { - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - BasicTestEntity1 bte1 = new BasicTestEntity1( str, lng ); - em.persist( bte1 ); - em.getTransaction().commit(); - - return bte1.getId(); - } - - private void modifyEntity(Integer id, String str, long lng) { - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - BasicTestEntity1 bte1 = em.find( BasicTestEntity1.class, id ); - bte1.setLong1( lng ); - bte1.setStr1( str ); - em.getTransaction().commit(); + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + em.getTransaction().begin(); + BasicTestEntity1 bte1 = new BasicTestEntity1( "x", 1 ); + em.persist( bte1 ); + em.getTransaction().commit(); + id1 = bte1.getId(); + } ); + + scope.inEntityManager( em -> { + em.getTransaction().begin(); + BasicTestEntity1 bte2 = new BasicTestEntity1( null, 20 ); + em.persist( bte2 ); + em.getTransaction().commit(); + id2 = bte2.getId(); + } ); + + scope.inEntityManager( em -> { + em.getTransaction().begin(); + BasicTestEntity1 bte1 = em.find( BasicTestEntity1.class, id1 ); + bte1.setLong1( 1 ); + bte1.setStr1( null ); + em.getTransaction().commit(); + } ); + + scope.inEntityManager( em -> { + em.getTransaction().begin(); + BasicTestEntity1 bte2 = em.find( BasicTestEntity1.class, id2 ); + bte2.setLong1( 20 ); + bte2.setStr1( "y2" ); + em.getTransaction().commit(); + } ); } @Test - @Priority(10) - public void initData() { - id1 = addNewEntity( "x", 1 ); // rev 1 - id2 = addNewEntity( null, 20 ); // rev 2 - - modifyEntity( id1, null, 1 ); // rev 3 - modifyEntity( id2, "y2", 20 ); // rev 4 - } - - @Test - public void testHasChanged() throws Exception { - List list = queryForPropertyHasChangedWithDeleted( - BasicTestEntity1.class, - id1, "str1" - ); - assertEquals( 2, list.size() ); - assertEquals( makeList( 1, 3 ), extractRevisionNumbers( list ) ); - - list = queryForPropertyHasChangedWithDeleted( - BasicTestEntity1.class, - id1, "long1" - ); - assertEquals( 1, list.size() ); - assertEquals( makeList( 1 ), extractRevisionNumbers( list ) ); - - list = queryForPropertyHasChangedWithDeleted( - BasicTestEntity1.class, - id2, "str1" - ); - // str1 property was null before insert and after insert so in a way it didn't change - is it a good way to go? - assertEquals( 1, list.size() ); - assertEquals( makeList( 4 ), extractRevisionNumbers( list ) ); - - list = queryForPropertyHasChangedWithDeleted( - BasicTestEntity1.class, - id2, "long1" - ); - assertEquals( 1, list.size() ); - assertEquals( makeList( 2 ), extractRevisionNumbers( list ) ); - - list = getAuditReader().createQuery().forRevisionsOfEntity( BasicTestEntity1.class, false, true ) - .add( AuditEntity.property( "str1" ).hasChanged() ) - .add( AuditEntity.property( "long1" ).hasChanged() ) - .getResultList(); - assertEquals( 1, list.size() ); - assertEquals( makeList( 1 ), extractRevisionNumbers( list ) ); + public void testHasChanged(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + List list = AbstractModifiedFlagsEntityTest.queryForPropertyHasChangedWithDeleted( + auditReader, + BasicTestEntity1.class, + id1, + "str1" + ); + assertEquals( 2, list.size() ); + assertEquals( makeList( 1, 3 ), extractRevisionNumbers( list ) ); + + list = AbstractModifiedFlagsEntityTest.queryForPropertyHasChangedWithDeleted( + auditReader, + BasicTestEntity1.class, + id1, + "long1" + ); + assertEquals( 1, list.size() ); + assertEquals( makeList( 1 ), extractRevisionNumbers( list ) ); + + list = AbstractModifiedFlagsEntityTest.queryForPropertyHasChangedWithDeleted( + auditReader, + BasicTestEntity1.class, + id2, + "str1" + ); + // str1 property was null before insert and after insert so in a way it didn't change - is it a good way to go? + assertEquals( 1, list.size() ); + assertEquals( makeList( 4 ), extractRevisionNumbers( list ) ); + + list = AbstractModifiedFlagsEntityTest.queryForPropertyHasChangedWithDeleted( + auditReader, + BasicTestEntity1.class, + id2, + "long1" + ); + assertEquals( 1, list.size() ); + assertEquals( makeList( 2 ), extractRevisionNumbers( list ) ); + + list = auditReader.createQuery().forRevisionsOfEntity( BasicTestEntity1.class, false, true ) + .add( AuditEntity.property( "str1" ).hasChanged() ) + .add( AuditEntity.property( "long1" ).hasChanged() ) + .getResultList(); + assertEquals( 1, list.size() ); + assertEquals( makeList( 1 ), extractRevisionNumbers( list ) ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedOneToManyInComponent.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedOneToManyInComponent.java index 94f7223eb5f6..161f9ca453c7 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedOneToManyInComponent.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedOneToManyInComponent.java @@ -5,86 +5,91 @@ package org.hibernate.orm.test.envers.integration.modifiedflags; import java.util.List; -import jakarta.persistence.EntityManager; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.envers.configuration.EnversSettings; import org.hibernate.orm.test.envers.entities.StrTestEntity; import org.hibernate.orm.test.envers.entities.components.relations.OneToManyComponent; import org.hibernate.orm.test.envers.entities.components.relations.OneToManyComponentTestEntity; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; +import org.hibernate.testing.orm.junit.Setting; -import org.junit.Test; +import org.junit.jupiter.api.Test; -import static junit.framework.Assert.assertEquals; import static org.hibernate.orm.test.envers.tools.TestTools.extractRevisionNumbers; import static org.hibernate.orm.test.envers.tools.TestTools.makeList; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Adam Warski (adam at warski dot org) * @author Michal Skowronek (mskowr at o2 dot pl) */ +@Jpa(integrationSettings = @Setting(name = EnversSettings.GLOBAL_WITH_MODIFIED_FLAG, value = "true"), + annotatedClasses = {OneToManyComponentTestEntity.class, StrTestEntity.class}) public class HasChangedOneToManyInComponent extends AbstractModifiedFlagsEntityTest { private Integer otmcte_id1; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {OneToManyComponentTestEntity.class, StrTestEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + // Revision 1 + em.getTransaction().begin(); - StrTestEntity ste1 = new StrTestEntity(); - ste1.setStr( "str1" ); + StrTestEntity ste1 = new StrTestEntity(); + ste1.setStr( "str1" ); - StrTestEntity ste2 = new StrTestEntity(); - ste2.setStr( "str2" ); + StrTestEntity ste2 = new StrTestEntity(); + ste2.setStr( "str2" ); - em.persist( ste1 ); - em.persist( ste2 ); + em.persist( ste1 ); + em.persist( ste2 ); - em.getTransaction().commit(); + em.getTransaction().commit(); - // Revision 2 - em = getEntityManager(); - em.getTransaction().begin(); + // Revision 2 + em.getTransaction().begin(); - OneToManyComponentTestEntity otmcte1 = new OneToManyComponentTestEntity( new OneToManyComponent( "data1" ) ); - otmcte1.getComp1().getEntities().add( ste1 ); + OneToManyComponentTestEntity otmcte1 = new OneToManyComponentTestEntity( new OneToManyComponent( "data1" ) ); + otmcte1.getComp1().getEntities().add( ste1 ); - em.persist( otmcte1 ); + em.persist( otmcte1 ); - em.getTransaction().commit(); + em.getTransaction().commit(); - // Revision 3 - em = getEntityManager(); - em.getTransaction().begin(); + // Revision 3 + em.getTransaction().begin(); - otmcte1 = em.find( OneToManyComponentTestEntity.class, otmcte1.getId() ); - otmcte1.getComp1().getEntities().add( ste2 ); + OneToManyComponentTestEntity otmcte1Ref = em.find( OneToManyComponentTestEntity.class, otmcte1.getId() ); + otmcte1Ref.getComp1().getEntities().add( ste2 ); - em.getTransaction().commit(); + em.getTransaction().commit(); - otmcte_id1 = otmcte1.getId(); + otmcte_id1 = otmcte1.getId(); + } ); } @Test - public void testHasChangedId1() throws Exception { - List list = - queryForPropertyHasChanged( - OneToManyComponentTestEntity.class, - otmcte_id1, "comp1" - ); - assertEquals( 2, list.size() ); - assertEquals( makeList( 2, 3 ), extractRevisionNumbers( list ) ); - - list = queryForPropertyHasNotChanged( - OneToManyComponentTestEntity.class, - otmcte_id1, "comp1" - ); - assertEquals( 0, list.size() ); + public void testHasChangedId1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + List list = AbstractModifiedFlagsEntityTest.queryForPropertyHasChanged( + auditReader, + OneToManyComponentTestEntity.class, + otmcte_id1, + "comp1" + ); + assertEquals( 2, list.size() ); + assertEquals( makeList( 2, 3 ), extractRevisionNumbers( list ) ); + + list = AbstractModifiedFlagsEntityTest.queryForPropertyHasNotChanged( + auditReader, + OneToManyComponentTestEntity.class, + otmcte_id1, + "comp1" + ); + assertEquals( 0, list.size() ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedStringMap.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedStringMap.java index a1f1b2626569..abd9f734b2f3 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedStringMap.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedStringMap.java @@ -5,113 +5,121 @@ package org.hibernate.orm.test.envers.integration.modifiedflags; import java.util.List; -import jakarta.persistence.EntityManager; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.envers.configuration.EnversSettings; import org.hibernate.orm.test.envers.entities.collection.StringMapEntity; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; +import org.hibernate.testing.orm.junit.Setting; +import org.junit.jupiter.api.Test; -import org.junit.Test; - -import static junit.framework.Assert.assertEquals; import static org.hibernate.orm.test.envers.tools.TestTools.extractRevisionNumbers; import static org.hibernate.orm.test.envers.tools.TestTools.makeList; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Adam Warski (adam at warski dot org) * @author Michal Skowronek (mskowr at o2 dot pl) */ +@Jpa(integrationSettings = @Setting(name = EnversSettings.GLOBAL_WITH_MODIFIED_FLAG, value = "true"), + annotatedClasses = {StringMapEntity.class}) public class HasChangedStringMap extends AbstractModifiedFlagsEntityTest { private Integer sme1_id; private Integer sme2_id; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {StringMapEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { StringMapEntity sme1 = new StringMapEntity(); StringMapEntity sme2 = new StringMapEntity(); // Revision 1 (sme1: initialy empty, sme2: initialy 1 mapping) - em.getTransaction().begin(); + scope.inEntityManager( em -> { + em.getTransaction().begin(); - sme2.getStrings().put( "1", "a" ); + sme2.getStrings().put( "1", "a" ); - em.persist( sme1 ); - em.persist( sme2 ); + em.persist( sme1 ); + em.persist( sme2 ); + sme1_id = sme1.getId(); + sme2_id = sme2.getId(); - em.getTransaction().commit(); + em.getTransaction().commit(); + } ); // Revision 2 (sme1: adding 2 mappings, sme2: no changes) - em.getTransaction().begin(); + scope.inEntityManager( em -> { + em.getTransaction().begin(); - sme1 = em.find( StringMapEntity.class, sme1.getId() ); - sme2 = em.find( StringMapEntity.class, sme2.getId() ); + StringMapEntity sme1Loaded = em.find( StringMapEntity.class, sme1_id ); - sme1.getStrings().put( "1", "a" ); - sme1.getStrings().put( "2", "b" ); + sme1Loaded.getStrings().put( "1", "a" ); + sme1Loaded.getStrings().put( "2", "b" ); - em.getTransaction().commit(); + em.getTransaction().commit(); + } ); // Revision 3 (sme1: removing an existing mapping, sme2: replacing a value) - em.getTransaction().begin(); + scope.inEntityManager( em -> { + em.getTransaction().begin(); - sme1 = em.find( StringMapEntity.class, sme1.getId() ); - sme2 = em.find( StringMapEntity.class, sme2.getId() ); + StringMapEntity sme1Loaded = em.find( StringMapEntity.class, sme1_id ); + StringMapEntity sme2Loaded = em.find( StringMapEntity.class, sme2_id ); - sme1.getStrings().remove( "1" ); - sme2.getStrings().put( "1", "b" ); + sme1Loaded.getStrings().remove( "1" ); + sme2Loaded.getStrings().put( "1", "b" ); - em.getTransaction().commit(); + em.getTransaction().commit(); + } ); // No revision (sme1: removing a non-existing mapping, sme2: replacing with the same value) - em.getTransaction().begin(); - - sme1 = em.find( StringMapEntity.class, sme1.getId() ); - sme2 = em.find( StringMapEntity.class, sme2.getId() ); - - sme1.getStrings().remove( "3" ); - sme2.getStrings().put( "1", "b" ); + scope.inEntityManager( em -> { + em.getTransaction().begin(); - em.getTransaction().commit(); + StringMapEntity sme1Loaded = em.find( StringMapEntity.class, sme1_id ); + StringMapEntity sme2Loaded = em.find( StringMapEntity.class, sme2_id ); - // + sme1Loaded.getStrings().remove( "3" ); + sme2Loaded.getStrings().put( "1", "b" ); - sme1_id = sme1.getId(); - sme2_id = sme2.getId(); + em.getTransaction().commit(); + } ); } @Test - public void testHasChanged() throws Exception { - List list = queryForPropertyHasChanged( - StringMapEntity.class, sme1_id, - "strings" - ); - assertEquals( 3, list.size() ); - assertEquals( makeList( 1, 2, 3 ), extractRevisionNumbers( list ) ); - - list = queryForPropertyHasChanged( - StringMapEntity.class, sme2_id, - "strings" - ); - assertEquals( 2, list.size() ); - assertEquals( makeList( 1, 3 ), extractRevisionNumbers( list ) ); - - list = queryForPropertyHasNotChanged( - StringMapEntity.class, sme1_id, - "strings" - ); - assertEquals( 0, list.size() ); - - list = queryForPropertyHasNotChanged( - StringMapEntity.class, sme2_id, - "strings" - ); - assertEquals( 0, list.size() ); // in rev 2 there was no version generated for sme2_id + public void testHasChanged(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + List list = queryForPropertyHasChanged( + auditReader, + StringMapEntity.class, sme1_id, + "strings" + ); + assertEquals( 3, list.size() ); + assertEquals( makeList( 1, 2, 3 ), extractRevisionNumbers( list ) ); + + list = queryForPropertyHasChanged( + auditReader, + StringMapEntity.class, sme2_id, + "strings" + ); + assertEquals( 2, list.size() ); + assertEquals( makeList( 1, 3 ), extractRevisionNumbers( list ) ); + + list = queryForPropertyHasNotChanged( + auditReader, + StringMapEntity.class, sme1_id, + "strings" + ); + assertEquals( 0, list.size() ); + + list = queryForPropertyHasNotChanged( + auditReader, + StringMapEntity.class, sme2_id, + "strings" + ); + assertEquals( 0, list.size() ); // in rev 2 there was no version generated for sme2_id + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedStringSet.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedStringSet.java index 98bbf66c5515..600c89f25abf 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedStringSet.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedStringSet.java @@ -5,105 +5,112 @@ package org.hibernate.orm.test.envers.integration.modifiedflags; import java.util.List; -import jakarta.persistence.EntityManager; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.envers.configuration.EnversSettings; import org.hibernate.orm.test.envers.entities.collection.StringSetEntity; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; +import org.hibernate.testing.orm.junit.Setting; +import org.junit.jupiter.api.Test; -import org.junit.Test; - -import static junit.framework.Assert.assertEquals; import static org.hibernate.orm.test.envers.tools.TestTools.extractRevisionNumbers; import static org.hibernate.orm.test.envers.tools.TestTools.makeList; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Adam Warski (adam at warski dot org) * @author Michal Skowronek (mskowr at o2 dot pl) */ +@Jpa(integrationSettings = @Setting(name = EnversSettings.GLOBAL_WITH_MODIFIED_FLAG, value = "true"), + annotatedClasses = {StringSetEntity.class}) public class HasChangedStringSet extends AbstractModifiedFlagsEntityTest { private Integer sse1_id; private Integer sse2_id; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {StringSetEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { StringSetEntity sse1 = new StringSetEntity(); StringSetEntity sse2 = new StringSetEntity(); // Revision 1 (sse1: initialy empty, sse2: initialy 2 elements) - em.getTransaction().begin(); + scope.inEntityManager( em -> { + em.getTransaction().begin(); - sse2.getStrings().add( "sse2_string1" ); - sse2.getStrings().add( "sse2_string2" ); + sse2.getStrings().add( "sse2_string1" ); + sse2.getStrings().add( "sse2_string2" ); - em.persist( sse1 ); - em.persist( sse2 ); + em.persist( sse1 ); + em.persist( sse2 ); + sse1_id = sse1.getId(); + sse2_id = sse2.getId(); - em.getTransaction().commit(); + em.getTransaction().commit(); + } ); // Revision 2 (sse1: adding 2 elements, sse2: adding an existing element) - em.getTransaction().begin(); + scope.inEntityManager( em -> { + em.getTransaction().begin(); - sse1 = em.find( StringSetEntity.class, sse1.getId() ); - sse2 = em.find( StringSetEntity.class, sse2.getId() ); + StringSetEntity sse1Loaded = em.find( StringSetEntity.class, sse1_id ); + StringSetEntity sse2Loaded = em.find( StringSetEntity.class, sse2_id ); - sse1.getStrings().add( "sse1_string1" ); - sse1.getStrings().add( "sse1_string2" ); + sse1Loaded.getStrings().add( "sse1_string1" ); + sse1Loaded.getStrings().add( "sse1_string2" ); - sse2.getStrings().add( "sse2_string1" ); + sse2Loaded.getStrings().add( "sse2_string1" ); - em.getTransaction().commit(); + em.getTransaction().commit(); + } ); // Revision 3 (sse1: removing a non-existing element, sse2: removing one element) - em.getTransaction().begin(); - - sse1 = em.find( StringSetEntity.class, sse1.getId() ); - sse2 = em.find( StringSetEntity.class, sse2.getId() ); - - sse1.getStrings().remove( "sse1_string3" ); - sse2.getStrings().remove( "sse2_string1" ); + scope.inEntityManager( em -> { + em.getTransaction().begin(); - em.getTransaction().commit(); + StringSetEntity sse1Loaded = em.find( StringSetEntity.class, sse1_id ); + StringSetEntity sse2Loaded = em.find( StringSetEntity.class, sse2_id ); - // + sse1Loaded.getStrings().remove( "sse1_string3" ); + sse2Loaded.getStrings().remove( "sse2_string1" ); - sse1_id = sse1.getId(); - sse2_id = sse2.getId(); + em.getTransaction().commit(); + } ); } @Test - public void testHasChanged() throws Exception { - List list = queryForPropertyHasChanged( - StringSetEntity.class, sse1_id, - "strings" - ); - assertEquals( 2, list.size() ); - assertEquals( makeList( 1, 2 ), extractRevisionNumbers( list ) ); - - list = queryForPropertyHasChanged( - StringSetEntity.class, sse2_id, - "strings" - ); - assertEquals( 2, list.size() ); - assertEquals( makeList( 1, 3 ), extractRevisionNumbers( list ) ); - - list = queryForPropertyHasNotChanged( - StringSetEntity.class, sse1_id, - "strings" - ); - assertEquals( 0, list.size() ); - - list = queryForPropertyHasNotChanged( - StringSetEntity.class, sse2_id, - "strings" - ); - assertEquals( 0, list.size() ); + public void testHasChanged(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + List list = queryForPropertyHasChanged( + auditReader, + StringSetEntity.class, sse1_id, + "strings" + ); + assertEquals( 2, list.size() ); + assertEquals( makeList( 1, 2 ), extractRevisionNumbers( list ) ); + + list = queryForPropertyHasChanged( + auditReader, + StringSetEntity.class, sse2_id, + "strings" + ); + assertEquals( 2, list.size() ); + assertEquals( makeList( 1, 3 ), extractRevisionNumbers( list ) ); + + list = queryForPropertyHasNotChanged( + auditReader, + StringSetEntity.class, sse1_id, + "strings" + ); + assertEquals( 0, list.size() ); + + list = queryForPropertyHasNotChanged( + auditReader, + StringSetEntity.class, sse2_id, + "strings" + ); + assertEquals( 0, list.size() ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedUnversionedProperties.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedUnversionedProperties.java index e3fcb10281b9..051445a2eabf 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedUnversionedProperties.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/HasChangedUnversionedProperties.java @@ -5,71 +5,93 @@ package org.hibernate.orm.test.envers.integration.modifiedflags; import java.util.List; -import jakarta.persistence.EntityManager; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.envers.configuration.EnversSettings; import org.hibernate.orm.test.envers.integration.basic.BasicTestEntity2; -import org.junit.Test; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; +import org.hibernate.testing.orm.junit.Setting; + +import org.junit.jupiter.api.Test; -import static junit.framework.Assert.assertEquals; import static org.hibernate.orm.test.envers.tools.TestTools.extractRevisionNumbers; import static org.hibernate.orm.test.envers.tools.TestTools.makeList; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; /** * @author Adam Warski (adam at warski dot org) * @author Michal Skowronek (mskowr at o2 dot pl) */ +@Jpa(integrationSettings = @Setting(name = EnversSettings.GLOBAL_WITH_MODIFIED_FLAG, value = "true"), + annotatedClasses = {BasicTestEntity2.class}) public class HasChangedUnversionedProperties extends AbstractModifiedFlagsEntityTest { private Integer id1; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {BasicTestEntity2.class}; - } + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + em.getTransaction().begin(); + BasicTestEntity2 bte2 = new BasicTestEntity2( "x", "a" ); + em.persist( bte2 ); + em.getTransaction().commit(); + id1 = bte2.getId(); + } ); - private Integer addNewEntity(String str1, String str2) { - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - BasicTestEntity2 bte2 = new BasicTestEntity2( str1, str2 ); - em.persist( bte2 ); - em.getTransaction().commit(); + scope.inEntityManager( em -> { + em.getTransaction().begin(); + BasicTestEntity2 bte2 = em.find( BasicTestEntity2.class, id1 ); + bte2.setStr1( "x" ); + bte2.setStr2( "a" ); + em.getTransaction().commit(); + } ); - return bte2.getId(); - } + scope.inEntityManager( em -> { + em.getTransaction().begin(); + BasicTestEntity2 bte2 = em.find( BasicTestEntity2.class, id1 ); + bte2.setStr1( "y" ); + bte2.setStr2( "b" ); + em.getTransaction().commit(); + } ); - private void modifyEntity(Integer id, String str1, String str2) { - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - BasicTestEntity2 bte2 = em.find( BasicTestEntity2.class, id ); - bte2.setStr1( str1 ); - bte2.setStr2( str2 ); - em.getTransaction().commit(); + scope.inEntityManager( em -> { + em.getTransaction().begin(); + BasicTestEntity2 bte2 = em.find( BasicTestEntity2.class, id1 ); + bte2.setStr1( "y" ); + bte2.setStr2( "c" ); + em.getTransaction().commit(); + } ); } @Test - @Priority(10) - public void initData() { - id1 = addNewEntity( "x", "a" ); // rev 1 - modifyEntity( id1, "x", "a" ); // no rev - modifyEntity( id1, "y", "b" ); // rev 2 - modifyEntity( id1, "y", "c" ); // no rev + public void testHasChangedQuery(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + List list = AbstractModifiedFlagsEntityTest.queryForPropertyHasChanged( + auditReader, + BasicTestEntity2.class, + id1, + "str1" + ); + assertEquals( 2, list.size() ); + assertEquals( makeList( 1, 2 ), extractRevisionNumbers( list ) ); + } ); } @Test - public void testHasChangedQuery() throws Exception { - List list = queryForPropertyHasChanged( - BasicTestEntity2.class, - id1, "str1" - ); - assertEquals( 2, list.size() ); - assertEquals( makeList( 1, 2 ), extractRevisionNumbers( list ) ); - } - - @Test(expected = IllegalArgumentException.class) - public void testExceptionOnHasChangedQuery() throws Exception { - queryForPropertyHasChangedWithDeleted( - BasicTestEntity2.class, - id1, "str2" - ); + public void testExceptionOnHasChangedQuery(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertThrows( IllegalArgumentException.class, () -> + AbstractModifiedFlagsEntityTest.queryForPropertyHasChangedWithDeleted( + auditReader, + BasicTestEntity2.class, + id1, + "str2" + ) + ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/ModifiedFlagSuffix.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/ModifiedFlagSuffix.java index 8a2f6b0e8b15..0930899b0b54 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/ModifiedFlagSuffix.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/ModifiedFlagSuffix.java @@ -4,90 +4,88 @@ */ package org.hibernate.orm.test.envers.integration.modifiedflags; -import java.util.List; -import java.util.Map; -import jakarta.persistence.EntityManager; - +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.configuration.EnversSettings; import org.hibernate.envers.query.AuditEntity; -import org.hibernate.orm.test.envers.Priority; import org.hibernate.orm.test.envers.integration.basic.BasicTestEntity1; import org.hibernate.orm.test.envers.tools.TestTools; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.DomainModel; +import org.hibernate.testing.orm.junit.DomainModelScope; +import org.hibernate.testing.orm.junit.ServiceRegistry; +import org.hibernate.testing.orm.junit.SessionFactory; +import org.hibernate.testing.orm.junit.SessionFactoryScope; +import org.hibernate.testing.orm.junit.Setting; +import org.junit.jupiter.api.Test; -import org.junit.Test; +import java.util.List; -import static junit.framework.Assert.assertEquals; import static org.hibernate.orm.test.envers.tools.TestTools.extractRevisionNumbers; import static org.hibernate.orm.test.envers.tools.TestTools.makeList; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Adam Warski (adam at warski dot org) * @author Michal Skowronek (mskowr at o2 dot pl) */ +@DomainModel(annotatedClasses = {BasicTestEntity1.class}) +@ServiceRegistry(settings = { + @Setting(name = EnversSettings.GLOBAL_WITH_MODIFIED_FLAG, value = "true"), + @Setting(name = EnversSettings.MODIFIED_FLAG_SUFFIX, value = "_CHANGED") +}) +@SessionFactory public class ModifiedFlagSuffix extends AbstractModifiedFlagsEntityTest { private Integer id1; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {BasicTestEntity1.class}; - } - - @Override - protected void addConfigOptions(Map options) { - super.addConfigOptions( options ); - options.put( EnversSettings.MODIFIED_FLAG_SUFFIX, "_CHANGED" ); - } - - private Integer addNewEntity(String str, long lng) { - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - BasicTestEntity1 bte1 = new BasicTestEntity1( str, lng ); - em.persist( bte1 ); - em.getTransaction().commit(); - - return bte1.getId(); - } + @BeforeClassTemplate + public void initData(SessionFactoryScope scope) { + scope.inSession( em -> { + em.getTransaction().begin(); + BasicTestEntity1 bte1 = new BasicTestEntity1( "x", 1 ); + em.persist( bte1 ); + em.getTransaction().commit(); - @Test - @Priority(10) - public void initData() { - id1 = addNewEntity( "x", 1 ); // rev 1 + id1 = bte1.getId(); + } ); } @Test - public void testModFlagProperties() { + public void testModFlagProperties(DomainModelScope scope) { assertEquals( TestTools.makeSet( "str1_CHANGED", "long1_CHANGED" ), TestTools.extractModProperties( - metadata().getEntityBinding( - "org.hibernate.orm.test.envers.integration.basic.BasicTestEntity1_AUD" - ), + scope.getDomainModel().getEntityBinding( BasicTestEntity1.class.getName() + "_AUD" ), "_CHANGED" ) ); } @Test - public void testHasChanged() throws Exception { - List list = queryForPropertyHasChangedWithDeleted( - BasicTestEntity1.class, - id1, "str1" - ); - assertEquals( 1, list.size() ); - assertEquals( makeList( 1 ), extractRevisionNumbers( list ) ); + public void testHasChanged(SessionFactoryScope scope) { + scope.inSession( em -> { + final var auditReader = AuditReaderFactory.get( em ); + List list = queryForPropertyHasChangedWithDeleted( + auditReader, + BasicTestEntity1.class, + id1, "str1" + ); + assertEquals( 1, list.size() ); + assertEquals( makeList( 1 ), extractRevisionNumbers( list ) ); - list = queryForPropertyHasChangedWithDeleted( - BasicTestEntity1.class, - id1, "long1" - ); - assertEquals( 1, list.size() ); - assertEquals( makeList( 1 ), extractRevisionNumbers( list ) ); + list = queryForPropertyHasChangedWithDeleted( + auditReader, + BasicTestEntity1.class, + id1, "long1" + ); + assertEquals( 1, list.size() ); + assertEquals( makeList( 1 ), extractRevisionNumbers( list ) ); - list = getAuditReader().createQuery().forRevisionsOfEntity( BasicTestEntity1.class, false, true ) - .add( AuditEntity.property( "str1" ).hasChanged() ) - .add( AuditEntity.property( "long1" ).hasChanged() ) - .getResultList(); - assertEquals( 1, list.size() ); - assertEquals( makeList( 1 ), extractRevisionNumbers( list ) ); + list = auditReader.createQuery().forRevisionsOfEntity( BasicTestEntity1.class, false, true ) + .add( AuditEntity.property( "str1" ).hasChanged() ) + .add( AuditEntity.property( "long1" ).hasChanged() ) + .getResultList(); + assertEquals( 1, list.size() ); + assertEquals( makeList( 1 ), extractRevisionNumbers( list ) ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/naming/ImprovedColumnNamingStrategyTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/naming/ImprovedColumnNamingStrategyTest.java index 74a2d1d14566..7b6bf617ccfd 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/naming/ImprovedColumnNamingStrategyTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/naming/ImprovedColumnNamingStrategyTest.java @@ -4,36 +4,34 @@ */ package org.hibernate.orm.test.envers.integration.modifiedflags.naming; -import java.util.Map; - import org.hibernate.envers.configuration.EnversSettings; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; import org.hibernate.mapping.Column; import org.hibernate.mapping.Table; -import org.junit.Test; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.DomainModel; +import org.hibernate.testing.orm.junit.DomainModelScope; +import org.hibernate.testing.orm.junit.ServiceRegistry; +import org.hibernate.testing.orm.junit.SessionFactory; +import org.hibernate.testing.orm.junit.Setting; +import org.junit.jupiter.api.Test; -import static org.junit.Assert.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertNotNull; /** * @author Chris Cranford */ -public class ImprovedColumnNamingStrategyTest extends BaseEnversJPAFunctionalTestCase { - @Override - protected void addConfigOptions(Map options) { - super.addConfigOptions( options ); - - options.put( EnversSettings.MODIFIED_COLUMN_NAMING_STRATEGY, "improved" ); - } - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { TestEntity.class, OtherEntity.class, SingleIdEntity.class }; - } +@EnversTest +@DomainModel(annotatedClasses = {TestEntity.class, OtherEntity.class, SingleIdEntity.class}) +@ServiceRegistry(settings = @Setting(name = EnversSettings.MODIFIED_COLUMN_NAMING_STRATEGY, value = "improved")) +@SessionFactory +public class ImprovedColumnNamingStrategyTest { @Test - public void testModifiedColumns() { - final Table table1 = metadata().getEntityBinding( TestEntity.class.getName() + "_AUD" ).getTable(); - assertNotNull( table1.getColumn( new Column( "data1_MOD") ) ); + public void testModifiedColumns(DomainModelScope scope) { + final Table table1 = scope.getDomainModel() + .getEntityBinding( TestEntity.class.getName() + "_AUD" ) + .getTable(); + assertNotNull( table1.getColumn( new Column( "data1_MOD" ) ) ); assertNotNull( table1.getColumn( new Column( "mydata_MOD" ) ) ); assertNotNull( table1.getColumn( new Column( "data_3" ) ) ); assertNotNull( table1.getColumn( new Column( "the_data_mod" ) ) ); @@ -45,8 +43,9 @@ public void testModifiedColumns() { assertNotNull( table1.getColumn( new Column( "client_option_MOD" ) ) ); assertNotNull( table1.getColumn( new Column( "cop_mod" ) ) ); - final Table table2 = metadata().getEntityBinding( OtherEntity.class.getName() + "_AUD" ).getTable(); + final Table table2 = scope.getDomainModel() + .getEntityBinding( OtherEntity.class.getName() + "_AUD" ) + .getTable(); assertNotNull( table2.getColumn( new Column( "d_MOD" ) ) ); } - } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/naming/LegacyColumnNamingStrategyTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/naming/LegacyColumnNamingStrategyTest.java index 86f5f0f3981b..2928ad356be5 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/naming/LegacyColumnNamingStrategyTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/modifiedflags/naming/LegacyColumnNamingStrategyTest.java @@ -4,25 +4,29 @@ */ package org.hibernate.orm.test.envers.integration.modifiedflags.naming; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; import org.hibernate.mapping.Column; import org.hibernate.mapping.Table; -import org.junit.Test; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.DomainModel; +import org.hibernate.testing.orm.junit.DomainModelScope; +import org.hibernate.testing.orm.junit.SessionFactory; +import org.junit.jupiter.api.Test; -import static org.junit.Assert.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertNotNull; /** * @author Chris Cranford */ -public class LegacyColumnNamingStrategyTest extends BaseEnversJPAFunctionalTestCase { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { TestEntity.class, OtherEntity.class, SingleIdEntity.class }; - } +@EnversTest +@DomainModel(annotatedClasses = { TestEntity.class, OtherEntity.class, SingleIdEntity.class }) +@SessionFactory +public class LegacyColumnNamingStrategyTest { @Test - public void testModifiedColumns() { - final Table table1 = metadata().getEntityBinding( TestEntity.class.getName() + "_AUD" ).getTable(); + public void testModifiedColumns(DomainModelScope scope) { + final Table table1 = scope.getDomainModel() + .getEntityBinding( TestEntity.class.getName() + "_AUD" ) + .getTable(); assertNotNull( table1.getColumn( new Column( "data1_MOD") ) ); assertNotNull( table1.getColumn( new Column( "data2_MOD" ) ) ); assertNotNull( table1.getColumn( new Column( "data_3" ) ) ); @@ -35,8 +39,9 @@ public void testModifiedColumns() { assertNotNull( table1.getColumn( new Column( "clientOption_MOD" ) ) ); assertNotNull( table1.getColumn( new Column( "cop_mod" ) ) ); - final Table table2 = metadata().getEntityBinding( OtherEntity.class.getName() + "_AUD" ).getTable(); + final Table table2 = scope.getDomainModel() + .getEntityBinding( OtherEntity.class.getName() + "_AUD" ) + .getTable(); assertNotNull( table2.getColumn( new Column( "data_MOD" ) ) ); } - } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/multiplerelations/GroupMemberTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/multiplerelations/GroupMemberTest.java index cebe3a86a76c..effb3bb4bbd7 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/multiplerelations/GroupMemberTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/multiplerelations/GroupMemberTest.java @@ -17,75 +17,74 @@ import jakarta.persistence.ManyToOne; import jakarta.persistence.OneToMany; import jakarta.persistence.OrderColumn; -import jakarta.persistence.Query; -import org.hibernate.Session; import org.hibernate.envers.AuditMappedBy; import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.JiraKey; +import org.hibernate.testing.orm.junit.Jpa; import org.hibernate.type.StandardBasicTypes; -import org.hibernate.testing.orm.junit.JiraKey; -import org.hibernate.testing.transaction.TransactionUtil; -import org.junit.Test; +import org.junit.jupiter.api.Test; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; /** * @author Chris Cranford */ @JiraKey(value = "HHH-7681") -public class GroupMemberTest extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = { + GroupMemberTest.GroupMember.class, + GroupMemberTest.MultiGroup.class, + GroupMemberTest.UniqueGroup.class +}) +public class GroupMemberTest { private Integer uniqueGroupId; private Integer groupMemberId; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { GroupMember.class, MultiGroup.class, UniqueGroup.class }; - } - - @Test - @Priority(10) - public void initData() { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Revision 1 - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { + scope.inTransaction( em -> { final UniqueGroup uniqueGroup = new UniqueGroup(); final GroupMember groupMember = new GroupMember(); uniqueGroup.addMember( groupMember ); - entityManager.persist( uniqueGroup ); - entityManager.persist( groupMember ); + em.persist( uniqueGroup ); + em.persist( groupMember ); uniqueGroupId = uniqueGroup.getId(); groupMemberId = groupMember.getId(); } ); // Revision 2 - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - final GroupMember groupMember = entityManager.find( GroupMember.class, groupMemberId ); + scope.inTransaction( em -> { + final GroupMember groupMember = em.find( GroupMember.class, groupMemberId ); final MultiGroup multiGroup = new MultiGroup(); groupMember.addMultiGroup( multiGroup ); - entityManager.persist( multiGroup ); + em.persist( multiGroup ); } ); } @Test - public void testUniqueGroupFound() { - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - final GroupMember groupMember = entityManager.find( GroupMember.class, groupMemberId ); + public void testUniqueGroupFound(EntityManagerFactoryScope scope) { + scope.inTransaction( em -> { + final GroupMember groupMember = em.find( GroupMember.class, groupMemberId ); assertNotNull( groupMember ); assertNotNull( groupMember.getUniqueGroup() ); } ); } @Test - public void testUniqueGroupFromAuditHistory() { - assertEquals( uniqueGroupId, getCurrentAuditUniqueGroupId() ); + public void testUniqueGroupFromAuditHistory(EntityManagerFactoryScope scope) { + assertEquals( uniqueGroupId, getCurrentAuditUniqueGroupId( scope ) ); } - private Integer getCurrentAuditUniqueGroupId() { - return TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - final Session session = entityManager.unwrap( Session.class ); - final Query query = session.createNativeQuery( + private Integer getCurrentAuditUniqueGroupId(EntityManagerFactoryScope scope) { + return scope.fromTransaction( em -> { + final var session = em.unwrap( org.hibernate.Session.class ); + final var query = session.createNativeQuery( "SELECT unique_group_id FROM GroupMember_AUD ORDER BY REV DESC" ) .addScalar( "unique_group_id", StandardBasicTypes.INTEGER ) diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/multiplerelations/MultipleAssociationsTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/multiplerelations/MultipleAssociationsTest.java index 6e29dd24c676..d834c41c16c8 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/multiplerelations/MultipleAssociationsTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/multiplerelations/MultipleAssociationsTest.java @@ -5,193 +5,203 @@ package org.hibernate.orm.test.envers.integration.multiplerelations; import java.util.Arrays; -import jakarta.persistence.EntityManager; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.orm.test.envers.tools.TestTools; - +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Assert; -import org.junit.Test; +import org.hibernate.testing.orm.junit.Jpa; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) */ @JiraKey(value = "HHH-7073") -public class MultipleAssociationsTest extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {Person.class, Address.class}) +public class MultipleAssociationsTest { private long lukaszId = 0; private long kingaId = 0; private long warsawId = 0; private long cracowId = 0; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {Person.class, Address.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Revision 1 - em.getTransaction().begin(); - Person lukasz = new Person( "Lukasz" ); - Person kinga = new Person( "Kinga" ); - Address warsaw = new Address( "Warsaw" ); - warsaw.getTenants().add( lukasz ); - warsaw.setLandlord( lukasz ); - warsaw.getTenants().add( kinga ); - lukasz.getAddresses().add( warsaw ); - lukasz.getOwnedAddresses().add( warsaw ); - kinga.getAddresses().add( warsaw ); - em.persist( lukasz ); - em.persist( kinga ); - em.persist( warsaw ); - em.getTransaction().commit(); - - lukaszId = lukasz.getId(); - kingaId = kinga.getId(); - warsawId = warsaw.getId(); + scope.inTransaction( em -> { + Person lukasz = new Person( "Lukasz" ); + Person kinga = new Person( "Kinga" ); + Address warsaw = new Address( "Warsaw" ); + warsaw.getTenants().add( lukasz ); + warsaw.setLandlord( lukasz ); + warsaw.getTenants().add( kinga ); + lukasz.getAddresses().add( warsaw ); + lukasz.getOwnedAddresses().add( warsaw ); + kinga.getAddresses().add( warsaw ); + em.persist( lukasz ); + em.persist( kinga ); + em.persist( warsaw ); + lukaszId = lukasz.getId(); + kingaId = kinga.getId(); + warsawId = warsaw.getId(); + } ); // Revision 2 - em.getTransaction().begin(); - kinga = em.find( Person.class, kinga.getId() ); - Address cracow = new Address( "Cracow" ); - kinga.getAddresses().add( cracow ); - cracow.getTenants().add( kinga ); - cracow.setLandlord( kinga ); - em.persist( cracow ); - em.getTransaction().commit(); - - cracowId = cracow.getId(); + scope.inTransaction( em -> { + Person kinga = em.find( Person.class, kingaId ); + Address cracow = new Address( "Cracow" ); + kinga.getAddresses().add( cracow ); + cracow.getTenants().add( kinga ); + cracow.setLandlord( kinga ); + em.persist( cracow ); + cracowId = cracow.getId(); + } ); // Revision 3 - em.getTransaction().begin(); - cracow = em.find( Address.class, cracow.getId() ); - cracow.setCity( "Krakow" ); - em.merge( cracow ); - em.getTransaction().commit(); + scope.inTransaction( em -> { + Address cracow = em.find( Address.class, cracowId ); + cracow.setCity( "Krakow" ); + em.merge( cracow ); + } ); // Revision 4 - em.getTransaction().begin(); - lukasz = em.find( Person.class, lukasz.getId() ); - lukasz.setName( "Lucas" ); - em.merge( lukasz ); - em.getTransaction().commit(); + scope.inTransaction( em -> { + Person lukasz = em.find( Person.class, lukaszId ); + lukasz.setName( "Lucas" ); + em.merge( lukasz ); + } ); // Revision 5 - em.getTransaction().begin(); - warsaw = em.find( Address.class, warsaw.getId() ); - lukasz = em.find( Person.class, lukasz.getId() ); - kinga = em.find( Person.class, kinga.getId() ); - warsaw.setLandlord( kinga ); - kinga.getOwnedAddresses().add( warsaw ); - lukasz.getOwnedAddresses().remove( warsaw ); - em.merge( warsaw ); - em.merge( lukasz ); - em.merge( kinga ); - em.getTransaction().commit(); + scope.inTransaction( em -> { + Address warsaw = em.find( Address.class, warsawId ); + Person lukasz = em.find( Person.class, lukaszId ); + Person kinga = em.find( Person.class, kingaId ); + warsaw.setLandlord( kinga ); + kinga.getOwnedAddresses().add( warsaw ); + lukasz.getOwnedAddresses().remove( warsaw ); + em.merge( warsaw ); + em.merge( lukasz ); + em.merge( kinga ); + } ); } @Test - public void testRevisionsCounts() { - Assert.assertEquals( Arrays.asList( 1, 4, 5 ), getAuditReader().getRevisions( Person.class, lukaszId ) ); - Assert.assertEquals( Arrays.asList( 1, 2, 5 ), getAuditReader().getRevisions( Person.class, kingaId ) ); - Assert.assertEquals( Arrays.asList( 1, 5 ), getAuditReader().getRevisions( Address.class, warsawId ) ); - Assert.assertEquals( Arrays.asList( 2, 3 ), getAuditReader().getRevisions( Address.class, cracowId ) ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1, 4, 5 ), auditReader.getRevisions( Person.class, lukaszId ) ); + assertEquals( Arrays.asList( 1, 2, 5 ), auditReader.getRevisions( Person.class, kingaId ) ); + assertEquals( Arrays.asList( 1, 5 ), auditReader.getRevisions( Address.class, warsawId ) ); + assertEquals( Arrays.asList( 2, 3 ), auditReader.getRevisions( Address.class, cracowId ) ); + } ); } @Test - public void testHistoryOfLukasz() { - Person lukasz = new Person( "Lukasz", lukaszId ); - Address warsaw = new Address( "Warsaw", warsawId ); - lukasz.getAddresses().add( warsaw ); - lukasz.getOwnedAddresses().add( warsaw ); + public void testHistoryOfLukasz(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + Person lukasz = new Person( "Lukasz", lukaszId ); + Address warsaw = new Address( "Warsaw", warsawId ); + lukasz.getAddresses().add( warsaw ); + lukasz.getOwnedAddresses().add( warsaw ); - Person ver1 = getAuditReader().find( Person.class, lukaszId, 1 ); - Assert.assertEquals( lukasz, ver1 ); - Assert.assertEquals( lukasz.getAddresses(), ver1.getAddresses() ); - Assert.assertEquals( lukasz.getOwnedAddresses(), ver1.getOwnedAddresses() ); + Person ver1 = auditReader.find( Person.class, lukaszId, 1 ); + assertEquals( lukasz, ver1 ); + assertEquals( lukasz.getAddresses(), ver1.getAddresses() ); + assertEquals( lukasz.getOwnedAddresses(), ver1.getOwnedAddresses() ); - lukasz.setName( "Lucas" ); + lukasz.setName( "Lucas" ); - Person ver4 = getAuditReader().find( Person.class, lukaszId, 4 ); - Assert.assertEquals( lukasz, ver4 ); + Person ver4 = auditReader.find( Person.class, lukaszId, 4 ); + assertEquals( lukasz, ver4 ); - lukasz.getOwnedAddresses().remove( warsaw ); + lukasz.getOwnedAddresses().remove( warsaw ); - Person ver5 = getAuditReader().find( Person.class, lukaszId, 5 ); - Assert.assertEquals( lukasz.getOwnedAddresses(), ver5.getOwnedAddresses() ); + Person ver5 = auditReader.find( Person.class, lukaszId, 5 ); + assertEquals( lukasz.getOwnedAddresses(), ver5.getOwnedAddresses() ); + } ); } @Test - public void testHistoryOfKinga() { - Person kinga = new Person( "Kinga", kingaId ); - Address warsaw = new Address( "Warsaw", warsawId ); - kinga.getAddresses().add( warsaw ); - - Person ver1 = getAuditReader().find( Person.class, kingaId, 1 ); - Assert.assertEquals( kinga, ver1 ); - Assert.assertEquals( kinga.getAddresses(), ver1.getAddresses() ); - Assert.assertEquals( kinga.getOwnedAddresses(), ver1.getOwnedAddresses() ); - - Address cracow = new Address( "Cracow", cracowId ); - kinga.getOwnedAddresses().add( cracow ); - kinga.getAddresses().add( cracow ); - - Person ver2 = getAuditReader().find( Person.class, kingaId, 2 ); - Assert.assertEquals( kinga, ver2 ); - Assert.assertEquals( kinga.getAddresses(), ver2.getAddresses() ); - Assert.assertEquals( kinga.getOwnedAddresses(), ver2.getOwnedAddresses() ); - - kinga.getOwnedAddresses().add( warsaw ); - cracow.setCity( "Krakow" ); - - Person ver5 = getAuditReader().find( Person.class, kingaId, 5 ); - Assert.assertEquals( TestTools.makeSet( kinga.getAddresses() ), TestTools.makeSet( ver5.getAddresses() ) ); - Assert.assertEquals( - TestTools.makeSet( kinga.getOwnedAddresses() ), - TestTools.makeSet( ver5.getOwnedAddresses() ) - ); + public void testHistoryOfKinga(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + Person kinga = new Person( "Kinga", kingaId ); + Address warsaw = new Address( "Warsaw", warsawId ); + kinga.getAddresses().add( warsaw ); + + Person ver1 = auditReader.find( Person.class, kingaId, 1 ); + assertEquals( kinga, ver1 ); + assertEquals( kinga.getAddresses(), ver1.getAddresses() ); + assertEquals( kinga.getOwnedAddresses(), ver1.getOwnedAddresses() ); + + Address cracow = new Address( "Cracow", cracowId ); + kinga.getOwnedAddresses().add( cracow ); + kinga.getAddresses().add( cracow ); + + Person ver2 = auditReader.find( Person.class, kingaId, 2 ); + assertEquals( kinga, ver2 ); + assertEquals( kinga.getAddresses(), ver2.getAddresses() ); + assertEquals( kinga.getOwnedAddresses(), ver2.getOwnedAddresses() ); + + kinga.getOwnedAddresses().add( warsaw ); + cracow.setCity( "Krakow" ); + + Person ver5 = auditReader.find( Person.class, kingaId, 5 ); + assertEquals( TestTools.makeSet( kinga.getAddresses() ), TestTools.makeSet( ver5.getAddresses() ) ); + assertEquals( + TestTools.makeSet( kinga.getOwnedAddresses() ), + TestTools.makeSet( ver5.getOwnedAddresses() ) + ); + } ); } @Test - public void testHistoryOfCracow() { - Address cracow = new Address( "Cracow", cracowId ); - Person kinga = new Person( "Kinga", kingaId ); - cracow.getTenants().add( kinga ); - cracow.setLandlord( kinga ); - - Address ver2 = getAuditReader().find( Address.class, cracowId, 2 ); - Assert.assertEquals( cracow, ver2 ); - Assert.assertEquals( cracow.getTenants(), ver2.getTenants() ); - Assert.assertEquals( cracow.getLandlord().getId(), ver2.getLandlord().getId() ); - - cracow.setCity( "Krakow" ); - - Address ver3 = getAuditReader().find( Address.class, cracowId, 3 ); - Assert.assertEquals( cracow, ver3 ); + public void testHistoryOfCracow(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + Address cracow = new Address( "Cracow", cracowId ); + Person kinga = new Person( "Kinga", kingaId ); + cracow.getTenants().add( kinga ); + cracow.setLandlord( kinga ); + + Address ver2 = auditReader.find( Address.class, cracowId, 2 ); + assertEquals( cracow, ver2 ); + assertEquals( cracow.getTenants(), ver2.getTenants() ); + assertEquals( cracow.getLandlord().getId(), ver2.getLandlord().getId() ); + + cracow.setCity( "Krakow" ); + + Address ver3 = auditReader.find( Address.class, cracowId, 3 ); + assertEquals( cracow, ver3 ); + } ); } @Test - public void testHistoryOfWarsaw() { - Address warsaw = new Address( "Warsaw", warsawId ); - Person kinga = new Person( "Kinga", kingaId ); - Person lukasz = new Person( "Lukasz", lukaszId ); - warsaw.getTenants().add( lukasz ); - warsaw.getTenants().add( kinga ); - warsaw.setLandlord( lukasz ); - - Address ver1 = getAuditReader().find( Address.class, warsawId, 1 ); - Assert.assertEquals( warsaw, ver1 ); - Assert.assertEquals( warsaw.getTenants(), ver1.getTenants() ); - Assert.assertEquals( warsaw.getLandlord().getId(), ver1.getLandlord().getId() ); - - warsaw.setLandlord( kinga ); - - Address ver5 = getAuditReader().find( Address.class, warsawId, 5 ); - Assert.assertEquals( warsaw.getLandlord().getId(), ver5.getLandlord().getId() ); + public void testHistoryOfWarsaw(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + Address warsaw = new Address( "Warsaw", warsawId ); + Person kinga = new Person( "Kinga", kingaId ); + Person lukasz = new Person( "Lukasz", lukaszId ); + warsaw.getTenants().add( lukasz ); + warsaw.getTenants().add( kinga ); + warsaw.setLandlord( lukasz ); + + Address ver1 = auditReader.find( Address.class, warsawId, 1 ); + assertEquals( warsaw, ver1 ); + assertEquals( warsaw.getTenants(), ver1.getTenants() ); + assertEquals( warsaw.getLandlord().getId(), ver1.getLandlord().getId() ); + + warsaw.setLandlord( kinga ); + + Address ver5 = auditReader.find( Address.class, warsawId, 5 ); + assertEquals( warsaw.getLandlord().getId(), ver5.getLandlord().getId() ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/BasicNaming.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/BasicNaming.java index b99877b1e6a3..1d9cee61f7b4 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/BasicNaming.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/BasicNaming.java @@ -4,94 +4,93 @@ */ package org.hibernate.orm.test.envers.integration.naming; -import java.util.Arrays; -import jakarta.persistence.EntityManager; +import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.DomainModel; +import org.hibernate.testing.orm.junit.DomainModelScope; +import org.hibernate.testing.orm.junit.SessionFactory; +import org.hibernate.testing.orm.junit.SessionFactoryScope; +import org.junit.jupiter.api.Test; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import java.util.Arrays; -import org.junit.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Adam Warski (adam at warski dot org) */ -public class BasicNaming extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@DomainModel(annotatedClasses = {NamingTestEntity1.class}) +@SessionFactory +public class BasicNaming { private Integer id1; private Integer id2; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {NamingTestEntity1.class}; - } - - @Test - @Priority(10) - public void initData() { - NamingTestEntity1 nte1 = new NamingTestEntity1( "data1" ); - NamingTestEntity1 nte2 = new NamingTestEntity1( "data2" ); - + @BeforeClassTemplate + public void initData(SessionFactoryScope scope) { // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - - em.persist( nte1 ); - em.persist( nte2 ); - - em.getTransaction().commit(); + scope.inTransaction( em -> { + NamingTestEntity1 nte1 = new NamingTestEntity1( "data1" ); + NamingTestEntity1 nte2 = new NamingTestEntity1( "data2" ); + em.persist( nte1 ); + em.persist( nte2 ); + id1 = nte1.getId(); + id2 = nte2.getId(); + } ); // Revision 2 - em.getTransaction().begin(); - - nte1 = em.find( NamingTestEntity1.class, nte1.getId() ); - nte1.setData( "data1'" ); - - em.getTransaction().commit(); + scope.inTransaction( em -> { + NamingTestEntity1 nte1 = em.find( NamingTestEntity1.class, id1 ); + nte1.setData( "data1'" ); + } ); // Revision 3 - em.getTransaction().begin(); - - nte2 = em.find( NamingTestEntity1.class, nte2.getId() ); - nte2.setData( "data2'" ); - - em.getTransaction().commit(); - - // - - id1 = nte1.getId(); - id2 = nte2.getId(); + scope.inTransaction( em -> { + NamingTestEntity1 nte2 = em.find( NamingTestEntity1.class, id2 ); + nte2.setData( "data2'" ); + } ); } @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( NamingTestEntity1.class, id1 ) ); - - assert Arrays.asList( 1, 3 ).equals( getAuditReader().getRevisions( NamingTestEntity1.class, id2 ) ); + public void testRevisionsCounts(SessionFactoryScope scope) { + scope.inSession( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1, 2 ), auditReader.getRevisions( NamingTestEntity1.class, id1 ) ); + assertEquals( Arrays.asList( 1, 3 ), auditReader.getRevisions( NamingTestEntity1.class, id2 ) ); + } ); } @Test - public void testHistoryOfId1() { - NamingTestEntity1 ver1 = new NamingTestEntity1( id1, "data1" ); - NamingTestEntity1 ver2 = new NamingTestEntity1( id1, "data1'" ); - - assert getAuditReader().find( NamingTestEntity1.class, id1, 1 ).equals( ver1 ); - assert getAuditReader().find( NamingTestEntity1.class, id1, 2 ).equals( ver2 ); - assert getAuditReader().find( NamingTestEntity1.class, id1, 3 ).equals( ver2 ); + public void testHistoryOfId1(SessionFactoryScope scope) { + scope.inSession( em -> { + final var auditReader = AuditReaderFactory.get( em ); + NamingTestEntity1 ver1 = new NamingTestEntity1( id1, "data1" ); + NamingTestEntity1 ver2 = new NamingTestEntity1( id1, "data1'" ); + + assertEquals( ver1, auditReader.find( NamingTestEntity1.class, id1, 1 ) ); + assertEquals( ver2, auditReader.find( NamingTestEntity1.class, id1, 2 ) ); + assertEquals( ver2, auditReader.find( NamingTestEntity1.class, id1, 3 ) ); + } ); } @Test - public void testHistoryOfId2() { - NamingTestEntity1 ver1 = new NamingTestEntity1( id2, "data2" ); - NamingTestEntity1 ver2 = new NamingTestEntity1( id2, "data2'" ); - - assert getAuditReader().find( NamingTestEntity1.class, id2, 1 ).equals( ver1 ); - assert getAuditReader().find( NamingTestEntity1.class, id2, 2 ).equals( ver1 ); - assert getAuditReader().find( NamingTestEntity1.class, id2, 3 ).equals( ver2 ); + public void testHistoryOfId2(SessionFactoryScope scope) { + scope.inSession( em -> { + final var auditReader = AuditReaderFactory.get( em ); + NamingTestEntity1 ver1 = new NamingTestEntity1( id2, "data2" ); + NamingTestEntity1 ver2 = new NamingTestEntity1( id2, "data2'" ); + + assertEquals( ver1, auditReader.find( NamingTestEntity1.class, id2, 1 ) ); + assertEquals( ver1, auditReader.find( NamingTestEntity1.class, id2, 2 ) ); + assertEquals( ver2, auditReader.find( NamingTestEntity1.class, id2, 3 ) ); + } ); } @Test - public void testTableName() { - assert "naming_test_entity_1_versions".equals( - metadata().getEntityBinding( "org.hibernate.orm.test.envers.integration.naming.NamingTestEntity1_AUD" ).getTable().getName() - ); + public void testTableName(DomainModelScope scope) { + assertEquals( "naming_test_entity_1_versions", scope.getDomainModel() + .getEntityBinding( "org.hibernate.orm.test.envers.integration.naming.NamingTestEntity1_AUD" ).getTable() + .getName() ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/EstonianTableAlias.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/EstonianTableAlias.java index 6041c14d7e95..e9487a03b42c 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/EstonianTableAlias.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/EstonianTableAlias.java @@ -4,58 +4,56 @@ */ package org.hibernate.orm.test.envers.integration.naming; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.orm.test.envers.integration.naming.entities.Child; +import org.hibernate.orm.test.envers.integration.naming.entities.Parent; import org.hibernate.orm.test.envers.tools.TestTools; - +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.DomainModel; import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Assert; -import org.junit.Test; +import org.hibernate.testing.orm.junit.SessionFactory; +import org.hibernate.testing.orm.junit.SessionFactoryScope; +import org.junit.jupiter.api.Test; -import ee.estonia.entities.Child; -import ee.estonia.entities.Parent; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) */ @JiraKey(value = "HHH-6738") -public class EstonianTableAlias extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@DomainModel(annotatedClasses = {Parent.class, Child.class}) +@SessionFactory +public class EstonianTableAlias { private Long parentId = null; private Long childId = null; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {Parent.class, Child.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - + @BeforeClassTemplate + public void initData(SessionFactoryScope scope) { // Revision 1 - em.getTransaction().begin(); - Parent parent = new Parent( "parent" ); - Child child = new Child( "child" ); - parent.getCollection().add( child ); - em.persist( child ); - em.persist( parent ); - em.getTransaction().commit(); - - parentId = parent.getId(); - childId = child.getId(); + scope.inTransaction( em -> { + Parent parent = new Parent( "parent" ); + Child child = new Child( "child" ); + parent.getCollection().add( child ); + em.persist( child ); + em.persist( parent ); + parentId = parent.getId(); + childId = child.getId(); + } ); } @Test - public void testAuditChildTableAlias() { + public void testAuditChildTableAlias(SessionFactoryScope scope) { Parent parent = new Parent( "parent", parentId ); Child child = new Child( "child", childId ); - Parent ver1 = getAuditReader().find( Parent.class, parentId, 1 ); + scope.inSession( em -> { + final var auditReader = AuditReaderFactory.get( em ); + Parent ver1 = auditReader.find( Parent.class, parentId, 1 ); - Assert.assertEquals( parent, ver1 ); - Assert.assertEquals( TestTools.makeSet( child ), ver1.getCollection() ); + assertEquals( parent, ver1 ); + assertEquals( TestTools.makeSet( child ), ver1.getCollection() ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/JoinNaming.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/JoinNaming.java index 53045bcc1626..862171c4edb7 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/JoinNaming.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/JoinNaming.java @@ -6,110 +6,114 @@ import java.util.Arrays; import java.util.Iterator; -import jakarta.persistence.EntityManager; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.mapping.Selectable; - -import org.junit.Test; - -import static junit.framework.Assert.assertEquals; -import static junit.framework.Assert.assertFalse; -import static junit.framework.Assert.assertTrue; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.DomainModel; +import org.hibernate.testing.orm.junit.DomainModelScope; +import org.hibernate.testing.orm.junit.SessionFactory; +import org.hibernate.testing.orm.junit.SessionFactoryScope; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; /** * @author Adam Warski (adam at warski dot org) */ -public class JoinNaming extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@DomainModel(annotatedClasses = {JoinNamingRefEdEntity.class, JoinNamingRefIngEntity.class}) +@SessionFactory +public class JoinNaming { private Integer ed_id1; private Integer ed_id2; private Integer ing_id1; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {JoinNamingRefEdEntity.class, JoinNamingRefIngEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - JoinNamingRefEdEntity ed1 = new JoinNamingRefEdEntity( "data1" ); - JoinNamingRefEdEntity ed2 = new JoinNamingRefEdEntity( "data2" ); - - JoinNamingRefIngEntity ing1 = new JoinNamingRefIngEntity( "x", ed1 ); - + @BeforeClassTemplate + public void initData(SessionFactoryScope scope) { // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); + scope.inTransaction( em -> { + JoinNamingRefEdEntity ed1 = new JoinNamingRefEdEntity( "data1" ); + JoinNamingRefEdEntity ed2 = new JoinNamingRefEdEntity( "data2" ); + JoinNamingRefIngEntity ing1 = new JoinNamingRefIngEntity( "x", ed1 ); - em.persist( ed1 ); - em.persist( ed2 ); - em.persist( ing1 ); + em.persist( ed1 ); + em.persist( ed2 ); + em.persist( ing1 ); - em.getTransaction().commit(); + ed_id1 = ed1.getId(); + ed_id2 = ed2.getId(); + ing_id1 = ing1.getId(); + } ); // Revision 2 - em.getTransaction().begin(); - - ed2 = em.find( JoinNamingRefEdEntity.class, ed2.getId() ); - - ing1 = em.find( JoinNamingRefIngEntity.class, ing1.getId() ); - ing1.setData( "y" ); - ing1.setReference( ed2 ); - - em.getTransaction().commit(); - - // - - ed_id1 = ed1.getId(); - ed_id2 = ed2.getId(); - ing_id1 = ing1.getId(); + scope.inTransaction( em -> { + JoinNamingRefEdEntity ed2 = em.find( JoinNamingRefEdEntity.class, ed_id2 ); + JoinNamingRefIngEntity ing1 = em.find( JoinNamingRefIngEntity.class, ing_id1 ); + ing1.setData( "y" ); + ing1.setReference( ed2 ); + } ); } @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( JoinNamingRefEdEntity.class, ed_id1 ) ); - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( JoinNamingRefEdEntity.class, ed_id2 ) ); - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( JoinNamingRefIngEntity.class, ing_id1 ) ); + public void testRevisionsCounts(SessionFactoryScope scope) { + scope.inSession( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1, 2 ), auditReader.getRevisions( JoinNamingRefEdEntity.class, ed_id1 ) ); + assertEquals( Arrays.asList( 1, 2 ), auditReader.getRevisions( JoinNamingRefEdEntity.class, ed_id2 ) ); + assertEquals( Arrays.asList( 1, 2 ), auditReader.getRevisions( JoinNamingRefIngEntity.class, ing_id1 ) ); + } ); } @Test - public void testHistoryOfEdId1() { - JoinNamingRefEdEntity ver1 = new JoinNamingRefEdEntity( ed_id1, "data1" ); - - assert getAuditReader().find( JoinNamingRefEdEntity.class, ed_id1, 1 ).equals( ver1 ); - assert getAuditReader().find( JoinNamingRefEdEntity.class, ed_id1, 2 ).equals( ver1 ); + public void testHistoryOfEdId1(SessionFactoryScope scope) { + scope.inSession( em -> { + final var auditReader = AuditReaderFactory.get( em ); + JoinNamingRefEdEntity ver1 = new JoinNamingRefEdEntity( ed_id1, "data1" ); + + assertEquals( ver1, auditReader.find( JoinNamingRefEdEntity.class, ed_id1, 1 ) ); + assertEquals( ver1, auditReader.find( JoinNamingRefEdEntity.class, ed_id1, 2 ) ); + } ); } @Test - public void testHistoryOfEdId2() { - JoinNamingRefEdEntity ver1 = new JoinNamingRefEdEntity( ed_id2, "data2" ); - - assert getAuditReader().find( JoinNamingRefEdEntity.class, ed_id2, 1 ).equals( ver1 ); - assert getAuditReader().find( JoinNamingRefEdEntity.class, ed_id2, 2 ).equals( ver1 ); + public void testHistoryOfEdId2(SessionFactoryScope scope) { + scope.inSession( em -> { + final var auditReader = AuditReaderFactory.get( em ); + JoinNamingRefEdEntity ver1 = new JoinNamingRefEdEntity( ed_id2, "data2" ); + + assertEquals( ver1, auditReader.find( JoinNamingRefEdEntity.class, ed_id2, 1 ) ); + assertEquals( ver1, auditReader.find( JoinNamingRefEdEntity.class, ed_id2, 2 ) ); + } ); } @Test - public void testHistoryOfIngId1() { - JoinNamingRefIngEntity ver1 = new JoinNamingRefIngEntity( ing_id1, "x", null ); - JoinNamingRefIngEntity ver2 = new JoinNamingRefIngEntity( ing_id1, "y", null ); - - assert getAuditReader().find( JoinNamingRefIngEntity.class, ing_id1, 1 ).equals( ver1 ); - assert getAuditReader().find( JoinNamingRefIngEntity.class, ing_id1, 2 ).equals( ver2 ); - - assert getAuditReader().find( JoinNamingRefIngEntity.class, ing_id1, 1 ).getReference().equals( - new JoinNamingRefEdEntity( ed_id1, "data1" ) - ); - assert getAuditReader().find( JoinNamingRefIngEntity.class, ing_id1, 2 ).getReference().equals( - new JoinNamingRefEdEntity( ed_id2, "data2" ) - ); + public void testHistoryOfIngId1(SessionFactoryScope scope) { + scope.inSession( em -> { + final var auditReader = AuditReaderFactory.get( em ); + JoinNamingRefIngEntity ver1 = new JoinNamingRefIngEntity( ing_id1, "x", null ); + JoinNamingRefIngEntity ver2 = new JoinNamingRefIngEntity( ing_id1, "y", null ); + + assertEquals( ver1, auditReader.find( JoinNamingRefIngEntity.class, ing_id1, 1 ) ); + assertEquals( ver2, auditReader.find( JoinNamingRefIngEntity.class, ing_id1, 2 ) ); + + assertEquals( + new JoinNamingRefEdEntity( ed_id1, "data1" ), + auditReader.find( JoinNamingRefIngEntity.class, ing_id1, 1 ).getReference() + ); + assertEquals( + new JoinNamingRefEdEntity( ed_id2, "data2" ), + auditReader.find( JoinNamingRefIngEntity.class, ing_id1, 2 ).getReference() + ); + } ); } - @SuppressWarnings("unchecked") @Test - public void testJoinColumnName() { - Iterator columns = metadata().getEntityBinding( + public void testJoinColumnName(DomainModelScope scope) { + Iterator columns = scope.getDomainModel().getEntityBinding( "org.hibernate.orm.test.envers.integration.naming.JoinNamingRefIngEntity_AUD" ).getProperty( "reference_id" ).getSelectables().iterator(); assertTrue( columns.hasNext() ); diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/JoinNamingRefEdEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/JoinNamingRefEdEntity.java index e1e70565552b..0fd3d1b64bf9 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/JoinNamingRefEdEntity.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/JoinNamingRefEdEntity.java @@ -78,10 +78,10 @@ public boolean equals(Object o) { JoinNamingRefEdEntity that = (JoinNamingRefEdEntity) o; - if ( data != null ? !data.equals( that.data ) : that.data != null ) { + if ( data != null ? !data.equals( that.getData() ) : that.getData() != null ) { return false; } - if ( id != null ? !id.equals( that.id ) : that.id != null ) { + if ( id != null ? !id.equals( that.getId() ) : that.getId() != null ) { return false; } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/OneToManyUnidirectionalNaming.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/OneToManyUnidirectionalNaming.java index bb8f1a2ede83..8347a9ad8ca6 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/OneToManyUnidirectionalNaming.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/OneToManyUnidirectionalNaming.java @@ -7,93 +7,98 @@ import java.util.Arrays; import java.util.HashSet; import java.util.Iterator; -import jakarta.persistence.EntityManager; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.mapping.Column; import org.hibernate.orm.test.envers.entities.StrTestEntity; import org.hibernate.orm.test.envers.tools.TestTools; -import org.hibernate.mapping.Column; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.DomainModel; +import org.hibernate.testing.orm.junit.DomainModelScope; +import org.hibernate.testing.orm.junit.SessionFactory; +import org.hibernate.testing.orm.junit.SessionFactoryScope; +import org.junit.jupiter.api.Test; -import org.junit.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; /** * @author Adam Warski (adam at warski dot org) */ -public class OneToManyUnidirectionalNaming extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@DomainModel(annotatedClasses = {DetachedNamingTestEntity.class, StrTestEntity.class}) +@SessionFactory +public class OneToManyUnidirectionalNaming { private Integer uni1_id; private Integer str1_id; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {DetachedNamingTestEntity.class, StrTestEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - DetachedNamingTestEntity uni1 = new DetachedNamingTestEntity( 1, "data1" ); - StrTestEntity str1 = new StrTestEntity( "str1" ); + private static final String MIDDLE_VERSIONS_ENTITY_NAME = "UNI_NAMING_TEST_AUD"; + @BeforeClassTemplate + public void initData(SessionFactoryScope scope) { // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); + scope.inTransaction( em -> { + DetachedNamingTestEntity uni1 = new DetachedNamingTestEntity( 1, "data1" ); + StrTestEntity str1 = new StrTestEntity( "str1" ); - uni1.setCollection( new HashSet() ); - em.persist( uni1 ); - em.persist( str1 ); + uni1.setCollection( new HashSet<>() ); + em.persist( uni1 ); + em.persist( str1 ); - em.getTransaction().commit(); + uni1_id = uni1.getId(); + str1_id = str1.getId(); + } ); // Revision 2 - em.getTransaction().begin(); - - uni1 = em.find( DetachedNamingTestEntity.class, uni1.getId() ); - str1 = em.find( StrTestEntity.class, str1.getId() ); - uni1.getCollection().add( str1 ); - - em.getTransaction().commit(); - - // - - uni1_id = uni1.getId(); - str1_id = str1.getId(); + scope.inTransaction( em -> { + DetachedNamingTestEntity uni1 = em.find( DetachedNamingTestEntity.class, uni1_id ); + StrTestEntity str1 = em.find( StrTestEntity.class, str1_id ); + uni1.getCollection().add( str1 ); + } ); } @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( DetachedNamingTestEntity.class, uni1_id ) ); - assert Arrays.asList( 1 ).equals( getAuditReader().getRevisions( StrTestEntity.class, str1_id ) ); + public void testRevisionsCounts(SessionFactoryScope scope) { + scope.inSession( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1, 2 ), auditReader.getRevisions( DetachedNamingTestEntity.class, uni1_id ) ); + assertEquals( Arrays.asList( 1 ), auditReader.getRevisions( StrTestEntity.class, str1_id ) ); + } ); } @Test - public void testHistoryOfUniId1() { - StrTestEntity str1 = getEntityManager().find( StrTestEntity.class, str1_id ); + public void testHistoryOfUniId1(SessionFactoryScope scope) { + scope.inSession( em -> { + final var auditReader = AuditReaderFactory.get( em ); + StrTestEntity str1 = em.find( StrTestEntity.class, str1_id ); - DetachedNamingTestEntity rev1 = getAuditReader().find( DetachedNamingTestEntity.class, uni1_id, 1 ); - DetachedNamingTestEntity rev2 = getAuditReader().find( DetachedNamingTestEntity.class, uni1_id, 2 ); + DetachedNamingTestEntity rev1 = auditReader.find( DetachedNamingTestEntity.class, uni1_id, 1 ); + DetachedNamingTestEntity rev2 = auditReader.find( DetachedNamingTestEntity.class, uni1_id, 2 ); - assert rev1.getCollection().equals( TestTools.makeSet() ); - assert rev2.getCollection().equals( TestTools.makeSet( str1 ) ); + assertEquals( TestTools.makeSet(), rev1.getCollection() ); + assertEquals( TestTools.makeSet( str1 ), rev2.getCollection() ); - assert "data1".equals( rev1.getData() ); - assert "data1".equals( rev2.getData() ); + assertEquals( "data1", rev1.getData() ); + assertEquals( "data1", rev2.getData() ); + } ); } - private final static String MIDDLE_VERSIONS_ENTITY_NAME = "UNI_NAMING_TEST_AUD"; - @Test - public void testTableName() { - assert MIDDLE_VERSIONS_ENTITY_NAME.equals( - metadata().getEntityBinding( MIDDLE_VERSIONS_ENTITY_NAME ).getTable().getName() + public void testTableName(DomainModelScope scope) { + assertEquals( + MIDDLE_VERSIONS_ENTITY_NAME, + scope.getDomainModel().getEntityBinding( MIDDLE_VERSIONS_ENTITY_NAME ).getTable().getName() ); } - @SuppressWarnings("unchecked") @Test - public void testJoinColumnName() { - Iterator columns = - metadata().getEntityBinding( MIDDLE_VERSIONS_ENTITY_NAME ).getTable().getColumns().iterator(); + public void testJoinColumnName(DomainModelScope scope) { + Iterator columns = scope.getDomainModel() + .getEntityBinding( MIDDLE_VERSIONS_ENTITY_NAME ) + .getTable() + .getColumns() + .iterator(); boolean id1Found = false; boolean id2Found = false; @@ -103,12 +108,11 @@ public void testJoinColumnName() { if ( "ID_1".equals( column.getName() ) ) { id1Found = true; } - if ( "ID_2".equals( column.getName() ) ) { id2Found = true; } } - assert id1Found && id2Found; + assertTrue( id1Found && id2Found ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/VersionsJoinTableNaming.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/VersionsJoinTableNaming.java index 0d3e1879a988..c8dfe81ad2ef 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/VersionsJoinTableNaming.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/VersionsJoinTableNaming.java @@ -7,98 +7,98 @@ import java.util.Arrays; import java.util.HashSet; import java.util.Iterator; -import jakarta.persistence.EntityManager; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.mapping.Column; import org.hibernate.orm.test.envers.entities.StrTestEntity; import org.hibernate.orm.test.envers.tools.TestTools; -import org.hibernate.mapping.Column; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.DomainModel; +import org.hibernate.testing.orm.junit.DomainModelScope; +import org.hibernate.testing.orm.junit.SessionFactory; +import org.hibernate.testing.orm.junit.SessionFactoryScope; +import org.junit.jupiter.api.Test; -import org.junit.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; /** * @author Adam Warski (adam at warski dot org) */ -public class VersionsJoinTableNaming extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@DomainModel(annotatedClasses = {VersionsJoinTableTestEntity.class, StrTestEntity.class}) +@SessionFactory +public class VersionsJoinTableNaming { private Integer uni1_id; private Integer str1_id; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {VersionsJoinTableTestEntity.class, StrTestEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - VersionsJoinTableTestEntity uni1 = new VersionsJoinTableTestEntity( 1, "data1" ); - StrTestEntity str1 = new StrTestEntity( "str1" ); + private static final String MIDDLE_VERSIONS_ENTITY_NAME = "VERSIONS_JOIN_TABLE_TEST"; + @BeforeClassTemplate + public void initData(SessionFactoryScope scope) { // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); + scope.inTransaction( em -> { + VersionsJoinTableTestEntity uni1 = new VersionsJoinTableTestEntity( 1, "data1" ); + StrTestEntity str1 = new StrTestEntity( "str1" ); - uni1.setCollection( new HashSet() ); - em.persist( uni1 ); - em.persist( str1 ); + uni1.setCollection( new HashSet<>() ); + em.persist( uni1 ); + em.persist( str1 ); - em.getTransaction().commit(); + uni1_id = uni1.getId(); + str1_id = str1.getId(); + } ); // Revision 2 - em.getTransaction().begin(); - - uni1 = em.find( VersionsJoinTableTestEntity.class, uni1.getId() ); - str1 = em.find( StrTestEntity.class, str1.getId() ); - uni1.getCollection().add( str1 ); - - em.getTransaction().commit(); - - // - - uni1_id = uni1.getId(); - str1_id = str1.getId(); + scope.inTransaction( em -> { + VersionsJoinTableTestEntity uni1 = em.find( VersionsJoinTableTestEntity.class, uni1_id ); + StrTestEntity str1 = em.find( StrTestEntity.class, str1_id ); + uni1.getCollection().add( str1 ); + } ); } @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( - getAuditReader().getRevisions( - VersionsJoinTableTestEntity.class, - uni1_id - ) - ); - assert Arrays.asList( 1 ).equals( getAuditReader().getRevisions( StrTestEntity.class, str1_id ) ); + public void testRevisionsCounts(SessionFactoryScope scope) { + scope.inSession( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1, 2 ), auditReader.getRevisions( VersionsJoinTableTestEntity.class, uni1_id ) ); + assertEquals( Arrays.asList( 1 ), auditReader.getRevisions( StrTestEntity.class, str1_id ) ); + } ); } @Test - public void testHistoryOfUniId1() { - StrTestEntity str1 = getEntityManager().find( StrTestEntity.class, str1_id ); + public void testHistoryOfUniId1(SessionFactoryScope scope) { + scope.inSession( em -> { + final var auditReader = AuditReaderFactory.get( em ); + StrTestEntity str1 = em.find( StrTestEntity.class, str1_id ); - VersionsJoinTableTestEntity rev1 = getAuditReader().find( VersionsJoinTableTestEntity.class, uni1_id, 1 ); - VersionsJoinTableTestEntity rev2 = getAuditReader().find( VersionsJoinTableTestEntity.class, uni1_id, 2 ); + VersionsJoinTableTestEntity rev1 = auditReader.find( VersionsJoinTableTestEntity.class, uni1_id, 1 ); + VersionsJoinTableTestEntity rev2 = auditReader.find( VersionsJoinTableTestEntity.class, uni1_id, 2 ); - assert rev1.getCollection().equals( TestTools.makeSet() ); - assert rev2.getCollection().equals( TestTools.makeSet( str1 ) ); + assertEquals( TestTools.makeSet(), rev1.getCollection() ); + assertEquals( TestTools.makeSet( str1 ), rev2.getCollection() ); - assert "data1".equals( rev1.getData() ); - assert "data1".equals( rev2.getData() ); + assertEquals( "data1", rev1.getData() ); + assertEquals( "data1", rev2.getData() ); + } ); } - private final static String MIDDLE_VERSIONS_ENTITY_NAME = "VERSIONS_JOIN_TABLE_TEST"; - @Test - public void testTableName() { - assert MIDDLE_VERSIONS_ENTITY_NAME.equals( - metadata().getEntityBinding( MIDDLE_VERSIONS_ENTITY_NAME ).getTable().getName() + public void testTableName(DomainModelScope scope) { + assertEquals( + MIDDLE_VERSIONS_ENTITY_NAME, + scope.getDomainModel().getEntityBinding( MIDDLE_VERSIONS_ENTITY_NAME ).getTable().getName() ); } - @SuppressWarnings("unchecked") @Test - public void testJoinColumnName() { - Iterator columns = - metadata().getEntityBinding( MIDDLE_VERSIONS_ENTITY_NAME ).getTable().getColumns().iterator(); + public void testJoinColumnName(DomainModelScope scope) { + Iterator columns = scope.getDomainModel() + .getEntityBinding( MIDDLE_VERSIONS_ENTITY_NAME ) + .getTable() + .getColumns() + .iterator(); boolean id1Found = false; boolean id2Found = false; @@ -108,12 +108,11 @@ public void testJoinColumnName() { if ( "VJT_ID".equals( column.getName() ) ) { id1Found = true; } - if ( "STR_ID".equals( column.getName() ) ) { id2Found = true; } } - assert id1Found && id2Found; + assertTrue( id1Found && id2Found ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/VersionsJoinTableRangeComponentNamingTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/VersionsJoinTableRangeComponentNamingTest.java new file mode 100644 index 000000000000..6fccebda7474 --- /dev/null +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/VersionsJoinTableRangeComponentNamingTest.java @@ -0,0 +1,279 @@ +/* + * SPDX-License-Identifier: Apache-2.0 + * Copyright Red Hat Inc. and Hibernate Authors + */ +package org.hibernate.orm.test.envers.integration.naming; + +import java.util.Arrays; +import java.util.Iterator; +import java.util.List; + +import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.mapping.Column; +import org.hibernate.mapping.PersistentClass; +import org.hibernate.orm.test.envers.entities.components.Component1; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.DomainModel; +import org.hibernate.testing.orm.junit.DomainModelScope; +import org.hibernate.testing.orm.junit.SessionFactory; +import org.hibernate.testing.orm.junit.SessionFactoryScope; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertTrue; + +/** + * Test class for {@link VersionsJoinTableRangeComponentTestEntity}, to test + * various {@link org.hibernate.envers.AuditOverride} annotations. + * + * @author Erik-Berndt Scheper + */ +@EnversTest +@DomainModel(annotatedClasses = { + VersionsJoinTableRangeComponentTestEntity.class, + VersionsJoinTableRangeTestEntitySuperClass.class, + VersionsJoinTableRangeTestEntity.class, + VersionsJoinTableRangeTestAlternateEntity.class +}) +@SessionFactory +public class VersionsJoinTableRangeComponentNamingTest { + private Integer vjrcte_id; + private Integer vjtrte_id; + private Integer vjtrtae_id1; + + /* The Audit join tables we expect */ + private static final String COMPONENT_1_AUDIT_JOIN_TABLE_NAME = "JOIN_TABLE_COMPONENT_1_AUD"; + private static final String COMPONENT_2_AUDIT_JOIN_TABLE_NAME = "JOIN_TABLE_COMPONENT_2_AUD"; + + /* The Audit join tables that should NOT be there */ + private static final String UNMODIFIED_COMPONENT_1_AUDIT_JOIN_TABLE_NAME = "VersionsJoinTableRangeComponentTestEntity_VersionsJoinTableRangeTestEntity_AUD"; + private static final String UNMODIFIED_COMPONENT_2_AUDIT_JOIN_TABLE_NAME = "VersionsJoinTableRangeComponentTestEntity_VersionsJoinTableRangeTestAlternateEntity_AUD"; + + @BeforeClassTemplate + public void initData(SessionFactoryScope scope) { + // Revision 1 + scope.inTransaction( em -> { + VersionsJoinTableRangeComponentTestEntity vjrcte = new VersionsJoinTableRangeComponentTestEntity(); + em.persist( vjrcte ); + vjrcte_id = vjrcte.getId(); + } ); + + // Revision 2 + scope.inTransaction( em -> { + VersionsJoinTableRangeComponentTestEntity vjrcte = em.find( + VersionsJoinTableRangeComponentTestEntity.class, + vjrcte_id + ); + + VersionsJoinTableRangeTestEntity vjtrte = new VersionsJoinTableRangeTestEntity(); + vjtrte.setGenericValue( "generic1" ); + vjtrte.setValue( "value1" ); + vjrcte.getComponent1().getRange().add( vjtrte ); + + VersionsJoinTableRangeTestAlternateEntity vjtrtae1 = new VersionsJoinTableRangeTestAlternateEntity(); + vjtrtae1.setGenericValue( "generic2" ); + vjtrtae1.setAlternateValue( "alternateValue2" ); + vjrcte.getComponent2().getRange().add( vjtrtae1 ); + + Component1 simpleComponent = new Component1( "string1", "string2" ); + vjrcte.setComponent3( simpleComponent ); + + em.persist( vjtrte ); + em.persist( vjtrtae1 ); + em.persist( vjrcte ); + + vjtrte_id = vjtrte.getId(); + vjtrtae_id1 = vjtrtae1.getId(); + } ); + + // Revision 3 - verify data + scope.inTransaction( em -> { + VersionsJoinTableRangeComponentTestEntity vjrcte = em.find( + VersionsJoinTableRangeComponentTestEntity.class, + vjrcte_id + ); + VersionsJoinTableRangeTestEntity vjtrte = em.find( + VersionsJoinTableRangeTestEntity.class, + vjtrte_id + ); + VersionsJoinTableRangeTestAlternateEntity vjtrtae1 = em.find( + VersionsJoinTableRangeTestAlternateEntity.class, + vjtrtae_id1 + ); + + assertNotNull( vjrcte ); + assertNotNull( vjtrte ); + assertNotNull( vjtrtae1 ); + + List ent1List = vjrcte.getComponent1().getRange(); + assertEquals( 1, ent1List.size() ); + assertEquals( vjtrte, ent1List.get( 0 ) ); + + List ent2List = vjrcte.getComponent2().getRange(); + assertEquals( 1, ent2List.size() ); + assertEquals( vjtrtae1, ent2List.get( 0 ) ); + } ); + } + + @Test + public void testRevisionsCounts(SessionFactoryScope scope) { + scope.inSession( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( + Arrays.asList( 1, 2 ), + auditReader.getRevisions( VersionsJoinTableRangeComponentTestEntity.class, vjrcte_id ) + ); + assertEquals( + Arrays.asList( 2 ), + auditReader.getRevisions( VersionsJoinTableRangeTestEntity.class, vjtrte_id ) + ); + assertEquals( + Arrays.asList( 2 ), + auditReader.getRevisions( VersionsJoinTableRangeTestAlternateEntity.class, vjtrtae_id1 ) + ); + } ); + } + + @Test + public void testHistoryOfUniId1(SessionFactoryScope scope) { + scope.inSession( em -> { + final var auditReader = AuditReaderFactory.get( em ); + VersionsJoinTableRangeTestEntity vjtrte = em.find( + VersionsJoinTableRangeTestEntity.class, + vjtrte_id + ); + VersionsJoinTableRangeTestAlternateEntity vjtrtae = em.find( + VersionsJoinTableRangeTestAlternateEntity.class, + vjtrtae_id1 + ); + + VersionsJoinTableRangeComponentTestEntity rev1 = auditReader.find( + VersionsJoinTableRangeComponentTestEntity.class, + vjrcte_id, + 1 + ); + VersionsJoinTableRangeComponentTestEntity rev2 = auditReader.find( + VersionsJoinTableRangeComponentTestEntity.class, + vjrcte_id, + 2 + ); + + assertEquals( 0, rev1.getComponent1().getRange().size() ); + assertEquals( 0, rev1.getComponent2().getRange().size() ); + + assertEquals( 1, rev2.getComponent1().getRange().size() ); + assertEquals( vjtrte, rev2.getComponent1().getRange().get( 0 ) ); + assertEquals( 1, rev2.getComponent2().getRange().size() ); + assertEquals( vjtrtae, rev2.getComponent2().getRange().get( 0 ) ); + } ); + } + + @Test + public void testExpectedTableNameComponent1(DomainModelScope scope) { + PersistentClass auditClass = scope.getDomainModel().getEntityBinding( COMPONENT_1_AUDIT_JOIN_TABLE_NAME ); + assertNotNull( auditClass ); + assertEquals( COMPONENT_1_AUDIT_JOIN_TABLE_NAME, auditClass.getTable().getName() ); + } + + @Test + public void testExpectedTableNameComponent2(DomainModelScope scope) { + PersistentClass auditClass = scope.getDomainModel().getEntityBinding( COMPONENT_2_AUDIT_JOIN_TABLE_NAME ); + assertNotNull( auditClass ); + assertEquals( COMPONENT_2_AUDIT_JOIN_TABLE_NAME, auditClass.getTable().getName() ); + } + + @Test + public void testWrongTableNameComponent1(DomainModelScope scope) { + PersistentClass auditClass = scope.getDomainModel().getEntityBinding( + UNMODIFIED_COMPONENT_1_AUDIT_JOIN_TABLE_NAME + ); + assertNull( auditClass ); + } + + @Test + public void testWrongTableNameComponent2(DomainModelScope scope) { + PersistentClass auditClass = scope.getDomainModel().getEntityBinding( + UNMODIFIED_COMPONENT_2_AUDIT_JOIN_TABLE_NAME + ); + assertNull( auditClass ); + } + + @Test + public void testJoinColumnNamesComponent1(DomainModelScope scope) { + PersistentClass auditClass = scope.getDomainModel().getEntityBinding( COMPONENT_1_AUDIT_JOIN_TABLE_NAME ); + assertNotNull( auditClass ); + + Iterator columns = auditClass.getTable().getColumns().iterator(); + + boolean id1Found = false; + boolean id2Found = false; + + while ( columns.hasNext() ) { + Column column = columns.next(); + if ( "VJTRCTE1_ID".equals( column.getName() ) ) { + id1Found = true; + } + if ( "VJTRTE_ID".equals( column.getName() ) ) { + id2Found = true; + } + } + + assertTrue( id1Found && id2Found ); + } + + @Test + public void testJoinColumnNamesComponent2(DomainModelScope scope) { + PersistentClass auditClass = scope.getDomainModel().getEntityBinding( COMPONENT_2_AUDIT_JOIN_TABLE_NAME ); + assertNotNull( auditClass ); + + Iterator columns = auditClass.getTable().getColumns().iterator(); + + boolean id1Found = false; + boolean id2Found = false; + + while ( columns.hasNext() ) { + Column column = columns.next(); + if ( "VJTRCTE2_ID".equals( column.getName() ) ) { + id1Found = true; + } + if ( "VJTRTAE_ID".equals( column.getName() ) ) { + id2Found = true; + } + } + + assertTrue( id1Found && id2Found ); + } + + /** + * Verify that + * {@link VersionsJoinTableRangeComponentTestEntity#getComponent3()} is + * partially audited. + */ + @Test + public void testOverrideNotAudited(DomainModelScope scope) { + PersistentClass auditClass = scope.getDomainModel().getEntityBinding( + VersionsJoinTableRangeComponentTestEntity.class.getName() + "_AUD" + ); + assertNotNull( auditClass ); + + Iterator columns = auditClass.getTable().getColumns().iterator(); + + boolean auditColumn1Found = false; + boolean auditColumn2Found = false; + + while ( columns.hasNext() ) { + Column column = columns.next(); + if ( "STR1".equals( column.getName() ) ) { + auditColumn1Found = true; + } + if ( "STR2".equals( column.getName() ) ) { + auditColumn2Found = true; + } + } + + assertTrue( auditColumn1Found && !auditColumn2Found ); + } +} diff --git a/hibernate-envers/src/test/java/ee/estonia/entities/Child.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/entities/Child.java similarity index 95% rename from hibernate-envers/src/test/java/ee/estonia/entities/Child.java rename to hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/entities/Child.java index 2c1eae04637b..9fd3ce13b741 100644 --- a/hibernate-envers/src/test/java/ee/estonia/entities/Child.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/entities/Child.java @@ -2,7 +2,7 @@ * SPDX-License-Identifier: Apache-2.0 * Copyright Red Hat Inc. and Hibernate Authors */ -package ee.estonia.entities; +package org.hibernate.orm.test.envers.integration.naming.entities; import java.io.Serializable; import jakarta.persistence.Entity; diff --git a/hibernate-envers/src/test/java/ee/estonia/entities/Parent.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/entities/Parent.java similarity index 96% rename from hibernate-envers/src/test/java/ee/estonia/entities/Parent.java rename to hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/entities/Parent.java index 5d8f5f66656c..b8f5f5c0a93f 100644 --- a/hibernate-envers/src/test/java/ee/estonia/entities/Parent.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/entities/Parent.java @@ -2,7 +2,7 @@ * SPDX-License-Identifier: Apache-2.0 * Copyright Red Hat Inc. and Hibernate Authors */ -package ee.estonia.entities; +package org.hibernate.orm.test.envers.integration.naming.entities; import java.io.Serializable; import java.util.HashSet; diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/ids/JoinEmbIdNaming.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/ids/JoinEmbIdNaming.java index 0574a62c5d0d..860ce5b635a0 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/ids/JoinEmbIdNaming.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/ids/JoinEmbIdNaming.java @@ -6,123 +6,115 @@ import java.util.Arrays; import java.util.Iterator; -import jakarta.persistence.EntityManager; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.mapping.Selectable; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.DomainModel; +import org.hibernate.testing.orm.junit.DomainModelScope; +import org.hibernate.testing.orm.junit.SessionFactoryScope; -import org.junit.Test; +import org.hibernate.testing.orm.junit.SessionFactory; +import org.junit.jupiter.api.Test; -import static junit.framework.Assert.assertEquals; -import static junit.framework.Assert.assertFalse; -import static junit.framework.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; /** * @author Adam Warski (adam at warski dot org) */ -public class JoinEmbIdNaming extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@DomainModel(annotatedClasses = {JoinEmbIdNamingRefEdEntity.class, JoinEmbIdNamingRefIngEntity.class}) +@SessionFactory +public class JoinEmbIdNaming { private EmbIdNaming ed_id1; private EmbIdNaming ed_id2; private EmbIdNaming ing_id1; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {JoinEmbIdNamingRefEdEntity.class, JoinEmbIdNamingRefIngEntity.class}; - } - - @Test - @Priority(10) - public void initData() { + @BeforeClassTemplate + public void initData(SessionFactoryScope scope) { ed_id1 = new EmbIdNaming( 10, 20 ); ed_id2 = new EmbIdNaming( 11, 21 ); ing_id1 = new EmbIdNaming( 12, 22 ); - JoinEmbIdNamingRefEdEntity ed1 = new JoinEmbIdNamingRefEdEntity( ed_id1, "data1" ); - JoinEmbIdNamingRefEdEntity ed2 = new JoinEmbIdNamingRefEdEntity( ed_id2, "data2" ); - - JoinEmbIdNamingRefIngEntity ing1 = new JoinEmbIdNamingRefIngEntity( ing_id1, "x", ed1 ); - // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - - em.persist( ed1 ); - em.persist( ed2 ); - em.persist( ing1 ); + scope.inTransaction( em -> { + JoinEmbIdNamingRefEdEntity ed1 = new JoinEmbIdNamingRefEdEntity( ed_id1, "data1" ); + JoinEmbIdNamingRefEdEntity ed2 = new JoinEmbIdNamingRefEdEntity( ed_id2, "data2" ); + JoinEmbIdNamingRefIngEntity ing1 = new JoinEmbIdNamingRefIngEntity( ing_id1, "x", ed1 ); - em.getTransaction().commit(); + em.persist( ed1 ); + em.persist( ed2 ); + em.persist( ing1 ); + } ); // Revision 2 - em.getTransaction().begin(); - - ed2 = em.find( JoinEmbIdNamingRefEdEntity.class, ed2.getId() ); - - ing1 = em.find( JoinEmbIdNamingRefIngEntity.class, ing1.getId() ); - ing1.setData( "y" ); - ing1.setReference( ed2 ); - - em.getTransaction().commit(); + scope.inTransaction( em -> { + JoinEmbIdNamingRefEdEntity ed2 = em.find( JoinEmbIdNamingRefEdEntity.class, ed_id2 ); + JoinEmbIdNamingRefIngEntity ing1 = em.find( JoinEmbIdNamingRefIngEntity.class, ing_id1 ); + ing1.setData( "y" ); + ing1.setReference( ed2 ); + } ); } @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( - getAuditReader().getRevisions( - JoinEmbIdNamingRefEdEntity.class, - ed_id1 - ) - ); - assert Arrays.asList( 1, 2 ).equals( - getAuditReader().getRevisions( - JoinEmbIdNamingRefEdEntity.class, - ed_id2 - ) - ); - assert Arrays.asList( 1, 2 ).equals( - getAuditReader().getRevisions( - JoinEmbIdNamingRefIngEntity.class, - ing_id1 - ) - ); + public void testRevisionsCounts(SessionFactoryScope scope) { + scope.inSession( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1, 2 ), + auditReader.getRevisions( JoinEmbIdNamingRefEdEntity.class, ed_id1 ) ); + assertEquals( Arrays.asList( 1, 2 ), + auditReader.getRevisions( JoinEmbIdNamingRefEdEntity.class, ed_id2 ) ); + assertEquals( Arrays.asList( 1, 2 ), + auditReader.getRevisions( JoinEmbIdNamingRefIngEntity.class, ing_id1 ) ); + } ); } @Test - public void testHistoryOfEdId1() { - JoinEmbIdNamingRefEdEntity ver1 = new JoinEmbIdNamingRefEdEntity( ed_id1, "data1" ); - - assert getAuditReader().find( JoinEmbIdNamingRefEdEntity.class, ed_id1, 1 ).equals( ver1 ); - assert getAuditReader().find( JoinEmbIdNamingRefEdEntity.class, ed_id1, 2 ).equals( ver1 ); + public void testHistoryOfEdId1(SessionFactoryScope scope) { + scope.inSession( em -> { + final var auditReader = AuditReaderFactory.get( em ); + JoinEmbIdNamingRefEdEntity ver1 = new JoinEmbIdNamingRefEdEntity( ed_id1, "data1" ); + + assertEquals( ver1, auditReader.find( JoinEmbIdNamingRefEdEntity.class, ed_id1, 1 ) ); + assertEquals( ver1, auditReader.find( JoinEmbIdNamingRefEdEntity.class, ed_id1, 2 ) ); + } ); } @Test - public void testHistoryOfEdId2() { - JoinEmbIdNamingRefEdEntity ver1 = new JoinEmbIdNamingRefEdEntity( ed_id2, "data2" ); - - assert getAuditReader().find( JoinEmbIdNamingRefEdEntity.class, ed_id2, 1 ).equals( ver1 ); - assert getAuditReader().find( JoinEmbIdNamingRefEdEntity.class, ed_id2, 2 ).equals( ver1 ); + public void testHistoryOfEdId2(SessionFactoryScope scope) { + scope.inSession( em -> { + final var auditReader = AuditReaderFactory.get( em ); + JoinEmbIdNamingRefEdEntity ver1 = new JoinEmbIdNamingRefEdEntity( ed_id2, "data2" ); + + assertEquals( ver1, auditReader.find( JoinEmbIdNamingRefEdEntity.class, ed_id2, 1 ) ); + assertEquals( ver1, auditReader.find( JoinEmbIdNamingRefEdEntity.class, ed_id2, 2 ) ); + } ); } @Test - public void testHistoryOfIngId1() { - JoinEmbIdNamingRefIngEntity ver1 = new JoinEmbIdNamingRefIngEntity( ing_id1, "x", null ); - JoinEmbIdNamingRefIngEntity ver2 = new JoinEmbIdNamingRefIngEntity( ing_id1, "y", null ); - - assert getAuditReader().find( JoinEmbIdNamingRefIngEntity.class, ing_id1, 1 ).equals( ver1 ); - assert getAuditReader().find( JoinEmbIdNamingRefIngEntity.class, ing_id1, 2 ).equals( ver2 ); - - assert getAuditReader().find( JoinEmbIdNamingRefIngEntity.class, ing_id1, 1 ).getReference().equals( - new JoinEmbIdNamingRefEdEntity( ed_id1, "data1" ) - ); - assert getAuditReader().find( JoinEmbIdNamingRefIngEntity.class, ing_id1, 2 ).getReference().equals( - new JoinEmbIdNamingRefEdEntity( ed_id2, "data2" ) - ); + public void testHistoryOfIngId1(SessionFactoryScope scope) { + scope.inSession( em -> { + final var auditReader = AuditReaderFactory.get( em ); + JoinEmbIdNamingRefIngEntity ver1 = new JoinEmbIdNamingRefIngEntity( ing_id1, "x", null ); + JoinEmbIdNamingRefIngEntity ver2 = new JoinEmbIdNamingRefIngEntity( ing_id1, "y", null ); + + assertEquals( ver1, auditReader.find( JoinEmbIdNamingRefIngEntity.class, ing_id1, 1 ) ); + assertEquals( ver2, auditReader.find( JoinEmbIdNamingRefIngEntity.class, ing_id1, 2 ) ); + + assertEquals( new JoinEmbIdNamingRefEdEntity( ed_id1, "data1" ), + auditReader.find( JoinEmbIdNamingRefIngEntity.class, ing_id1, 1 ).getReference() ); + assertEquals( new JoinEmbIdNamingRefEdEntity( ed_id2, "data2" ), + auditReader.find( JoinEmbIdNamingRefIngEntity.class, ing_id1, 2 ).getReference() ); + } ); } @SuppressWarnings("unchecked") @Test - public void testJoinColumnNames() { - Iterator columns = metadata().getEntityBinding( + public void testJoinColumnNames(DomainModelScope scope) { + Iterator columns = scope.getDomainModel().getEntityBinding( "org.hibernate.orm.test.envers.integration.naming.ids.JoinEmbIdNamingRefIngEntity_AUD" ).getProperty( "reference_x" ).getSelectables().iterator(); @@ -130,7 +122,7 @@ public void testJoinColumnNames() { assertEquals( "XX_reference", columns.next().getText() ); assertFalse( columns.hasNext() ); - columns = metadata().getEntityBinding( + columns = scope.getDomainModel().getEntityBinding( "org.hibernate.orm.test.envers.integration.naming.ids.JoinEmbIdNamingRefIngEntity_AUD" ).getProperty( "reference_y" ).getSelectables().iterator(); diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/ids/JoinEmbIdNamingRefEdEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/ids/JoinEmbIdNamingRefEdEntity.java index 2ca6477880d3..5193512238e1 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/ids/JoinEmbIdNamingRefEdEntity.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/ids/JoinEmbIdNamingRefEdEntity.java @@ -76,10 +76,10 @@ public boolean equals(Object o) { JoinEmbIdNamingRefEdEntity that = (JoinEmbIdNamingRefEdEntity) o; - if ( data != null ? !data.equals( that.data ) : that.data != null ) { + if ( data != null ? !data.equals( that.getData() ) : that.getData() != null ) { return false; } - if ( id != null ? !id.equals( that.id ) : that.id != null ) { + if ( id != null ? !id.equals( that.getId() ) : that.getId() != null ) { return false; } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/ids/JoinEmbIdNamingRefIngEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/ids/JoinEmbIdNamingRefIngEntity.java index 8a6c7274f5da..7cefa2ce39d2 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/ids/JoinEmbIdNamingRefIngEntity.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/ids/JoinEmbIdNamingRefIngEntity.java @@ -83,10 +83,10 @@ public boolean equals(Object o) { JoinEmbIdNamingRefIngEntity that = (JoinEmbIdNamingRefIngEntity) o; - if ( data != null ? !data.equals( that.data ) : that.data != null ) { + if ( data != null ? !data.equals( that.getData() ) : that.getData() != null ) { return false; } - if ( id != null ? !id.equals( that.id ) : that.id != null ) { + if ( id != null ? !id.equals( that.getId() ) : that.getId() != null ) { return false; } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/ids/JoinMulIdNaming.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/ids/JoinMulIdNaming.java index b4ee8c5fb3f9..a6229d8e53d2 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/ids/JoinMulIdNaming.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/ids/JoinMulIdNaming.java @@ -6,123 +6,115 @@ import java.util.Arrays; import java.util.Iterator; -import jakarta.persistence.EntityManager; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.mapping.Selectable; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.DomainModel; +import org.hibernate.testing.orm.junit.DomainModelScope; +import org.hibernate.testing.orm.junit.SessionFactoryScope; -import org.junit.Test; +import org.hibernate.testing.orm.junit.SessionFactory; +import org.junit.jupiter.api.Test; -import static junit.framework.Assert.assertEquals; -import static junit.framework.Assert.assertFalse; -import static junit.framework.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; /** * @author Adam Warski (adam at warski dot org) */ -public class JoinMulIdNaming extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@DomainModel(annotatedClasses = {JoinMulIdNamingRefEdEntity.class, JoinMulIdNamingRefIngEntity.class}) +@SessionFactory +public class JoinMulIdNaming { private MulIdNaming ed_id1; private MulIdNaming ed_id2; private MulIdNaming ing_id1; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {JoinMulIdNamingRefEdEntity.class, JoinMulIdNamingRefIngEntity.class}; - } - - @Test - @Priority(10) - public void initData() { + @BeforeClassTemplate + public void initData(SessionFactoryScope scope) { ed_id1 = new MulIdNaming( 10, 20 ); ed_id2 = new MulIdNaming( 11, 21 ); ing_id1 = new MulIdNaming( 12, 22 ); - JoinMulIdNamingRefEdEntity ed1 = new JoinMulIdNamingRefEdEntity( ed_id1, "data1" ); - JoinMulIdNamingRefEdEntity ed2 = new JoinMulIdNamingRefEdEntity( ed_id2, "data2" ); - - JoinMulIdNamingRefIngEntity ing1 = new JoinMulIdNamingRefIngEntity( ing_id1, "x", ed1 ); - // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - - em.persist( ed1 ); - em.persist( ed2 ); - em.persist( ing1 ); + scope.inTransaction( em -> { + JoinMulIdNamingRefEdEntity ed1 = new JoinMulIdNamingRefEdEntity( ed_id1, "data1" ); + JoinMulIdNamingRefEdEntity ed2 = new JoinMulIdNamingRefEdEntity( ed_id2, "data2" ); + JoinMulIdNamingRefIngEntity ing1 = new JoinMulIdNamingRefIngEntity( ing_id1, "x", ed1 ); - em.getTransaction().commit(); + em.persist( ed1 ); + em.persist( ed2 ); + em.persist( ing1 ); + } ); // Revision 2 - em.getTransaction().begin(); - - ed2 = em.find( JoinMulIdNamingRefEdEntity.class, ed_id2 ); - - ing1 = em.find( JoinMulIdNamingRefIngEntity.class, ing_id1 ); - ing1.setData( "y" ); - ing1.setReference( ed2 ); - - em.getTransaction().commit(); + scope.inTransaction( em -> { + JoinMulIdNamingRefEdEntity ed2 = em.find( JoinMulIdNamingRefEdEntity.class, ed_id2 ); + JoinMulIdNamingRefIngEntity ing1 = em.find( JoinMulIdNamingRefIngEntity.class, ing_id1 ); + ing1.setData( "y" ); + ing1.setReference( ed2 ); + } ); } @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( - getAuditReader().getRevisions( - JoinMulIdNamingRefEdEntity.class, - ed_id1 - ) - ); - assert Arrays.asList( 1, 2 ).equals( - getAuditReader().getRevisions( - JoinMulIdNamingRefEdEntity.class, - ed_id2 - ) - ); - assert Arrays.asList( 1, 2 ).equals( - getAuditReader().getRevisions( - JoinMulIdNamingRefIngEntity.class, - ing_id1 - ) - ); + public void testRevisionsCounts(SessionFactoryScope scope) { + scope.inSession( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1, 2 ), + auditReader.getRevisions( JoinMulIdNamingRefEdEntity.class, ed_id1 ) ); + assertEquals( Arrays.asList( 1, 2 ), + auditReader.getRevisions( JoinMulIdNamingRefEdEntity.class, ed_id2 ) ); + assertEquals( Arrays.asList( 1, 2 ), + auditReader.getRevisions( JoinMulIdNamingRefIngEntity.class, ing_id1 ) ); + } ); } @Test - public void testHistoryOfEdId1() { - JoinMulIdNamingRefEdEntity ver1 = new JoinMulIdNamingRefEdEntity( ed_id1, "data1" ); - - assert getAuditReader().find( JoinMulIdNamingRefEdEntity.class, ed_id1, 1 ).equals( ver1 ); - assert getAuditReader().find( JoinMulIdNamingRefEdEntity.class, ed_id1, 2 ).equals( ver1 ); + public void testHistoryOfEdId1(SessionFactoryScope scope) { + scope.inSession( em -> { + final var auditReader = AuditReaderFactory.get( em ); + JoinMulIdNamingRefEdEntity ver1 = new JoinMulIdNamingRefEdEntity( ed_id1, "data1" ); + + assertEquals( ver1, auditReader.find( JoinMulIdNamingRefEdEntity.class, ed_id1, 1 ) ); + assertEquals( ver1, auditReader.find( JoinMulIdNamingRefEdEntity.class, ed_id1, 2 ) ); + } ); } @Test - public void testHistoryOfEdId2() { - JoinMulIdNamingRefEdEntity ver1 = new JoinMulIdNamingRefEdEntity( ed_id2, "data2" ); - - assert getAuditReader().find( JoinMulIdNamingRefEdEntity.class, ed_id2, 1 ).equals( ver1 ); - assert getAuditReader().find( JoinMulIdNamingRefEdEntity.class, ed_id2, 2 ).equals( ver1 ); + public void testHistoryOfEdId2(SessionFactoryScope scope) { + scope.inSession( em -> { + final var auditReader = AuditReaderFactory.get( em ); + JoinMulIdNamingRefEdEntity ver1 = new JoinMulIdNamingRefEdEntity( ed_id2, "data2" ); + + assertEquals( ver1, auditReader.find( JoinMulIdNamingRefEdEntity.class, ed_id2, 1 ) ); + assertEquals( ver1, auditReader.find( JoinMulIdNamingRefEdEntity.class, ed_id2, 2 ) ); + } ); } @Test - public void testHistoryOfIngId1() { - JoinMulIdNamingRefIngEntity ver1 = new JoinMulIdNamingRefIngEntity( ing_id1, "x", null ); - JoinMulIdNamingRefIngEntity ver2 = new JoinMulIdNamingRefIngEntity( ing_id1, "y", null ); - - assert getAuditReader().find( JoinMulIdNamingRefIngEntity.class, ing_id1, 1 ).equals( ver1 ); - assert getAuditReader().find( JoinMulIdNamingRefIngEntity.class, ing_id1, 2 ).equals( ver2 ); - - assert getAuditReader().find( JoinMulIdNamingRefIngEntity.class, ing_id1, 1 ).getReference().equals( - new JoinMulIdNamingRefEdEntity( ed_id1, "data1" ) - ); - assert getAuditReader().find( JoinMulIdNamingRefIngEntity.class, ing_id1, 2 ).getReference().equals( - new JoinMulIdNamingRefEdEntity( ed_id2, "data2" ) - ); + public void testHistoryOfIngId1(SessionFactoryScope scope) { + scope.inSession( em -> { + final var auditReader = AuditReaderFactory.get( em ); + JoinMulIdNamingRefIngEntity ver1 = new JoinMulIdNamingRefIngEntity( ing_id1, "x", null ); + JoinMulIdNamingRefIngEntity ver2 = new JoinMulIdNamingRefIngEntity( ing_id1, "y", null ); + + assertEquals( ver1, auditReader.find( JoinMulIdNamingRefIngEntity.class, ing_id1, 1 ) ); + assertEquals( ver2, auditReader.find( JoinMulIdNamingRefIngEntity.class, ing_id1, 2 ) ); + + assertEquals( new JoinMulIdNamingRefEdEntity( ed_id1, "data1" ), + auditReader.find( JoinMulIdNamingRefIngEntity.class, ing_id1, 1 ).getReference() ); + assertEquals( new JoinMulIdNamingRefEdEntity( ed_id2, "data2" ), + auditReader.find( JoinMulIdNamingRefIngEntity.class, ing_id1, 2 ).getReference() ); + } ); } @SuppressWarnings("unchecked") @Test - public void testJoinColumnNames() { - Iterator columns = metadata().getEntityBinding( + public void testJoinColumnNames(DomainModelScope scope) { + Iterator columns = scope.getDomainModel().getEntityBinding( "org.hibernate.orm.test.envers.integration.naming.ids.JoinMulIdNamingRefIngEntity_AUD" ).getProperty( "reference_id1" ).getSelectables().iterator(); @@ -130,7 +122,7 @@ public void testJoinColumnNames() { assertEquals( "ID1_reference", columns.next().getText() ); assertFalse( columns.hasNext() ); - columns = metadata().getEntityBinding( + columns = scope.getDomainModel().getEntityBinding( "org.hibernate.orm.test.envers.integration.naming.ids.JoinMulIdNamingRefIngEntity_AUD" ).getProperty( "reference_id2" ).getSelectables().iterator(); diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/ids/JoinMulIdNamingRefEdEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/ids/JoinMulIdNamingRefEdEntity.java index a50f2a6e830f..6b7071cd80fc 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/ids/JoinMulIdNamingRefEdEntity.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/ids/JoinMulIdNamingRefEdEntity.java @@ -90,13 +90,13 @@ public boolean equals(Object o) { JoinMulIdNamingRefEdEntity that = (JoinMulIdNamingRefEdEntity) o; - if ( data != null ? !data.equals( that.data ) : that.data != null ) { + if ( data != null ? !data.equals( that.getData() ) : that.getData() != null ) { return false; } - if ( id1 != null ? !id1.equals( that.id1 ) : that.id1 != null ) { + if ( id1 != null ? !id1.equals( that.getId1() ) : that.getId1() != null ) { return false; } - if ( id2 != null ? !id2.equals( that.id2 ) : that.id2 != null ) { + if ( id2 != null ? !id2.equals( that.getId2() ) : that.getId2() != null ) { return false; } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/quotation/QuotedFieldsTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/quotation/QuotedFieldsTest.java index 7225c09bb941..5c75fff40bc1 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/quotation/QuotedFieldsTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naming/quotation/QuotedFieldsTest.java @@ -4,98 +4,110 @@ */ package org.hibernate.orm.test.envers.integration.naming.quotation; -import java.util.Arrays; -import java.util.Collection; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.mapping.Column; import org.hibernate.mapping.Table; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.DomainModel; +import org.hibernate.testing.orm.junit.DomainModelScope; +import org.hibernate.testing.orm.junit.SessionFactoryScope; +import org.hibernate.testing.orm.junit.SessionFactory; +import org.junit.jupiter.api.Test; + +import java.util.Arrays; +import java.util.Collection; -import org.junit.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertTrue; /** * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) */ -public class QuotedFieldsTest extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@DomainModel(annotatedClasses = {QuotedFieldsEntity.class}) +@SessionFactory +public class QuotedFieldsTest { private Long qfeId1 = null; private Long qfeId2 = null; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {QuotedFieldsEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - QuotedFieldsEntity qfe1 = new QuotedFieldsEntity( "data1", 1 ); - QuotedFieldsEntity qfe2 = new QuotedFieldsEntity( "data2", 2 ); - + @BeforeClassTemplate + public void initData(SessionFactoryScope scope) { // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - em.persist( qfe1 ); - em.persist( qfe2 ); - em.getTransaction().commit(); + scope.inTransaction( em -> { + QuotedFieldsEntity qfe1 = new QuotedFieldsEntity( "data1", 1 ); + QuotedFieldsEntity qfe2 = new QuotedFieldsEntity( "data2", 2 ); + em.persist( qfe1 ); + em.persist( qfe2 ); + qfeId1 = qfe1.getId(); + qfeId2 = qfe2.getId(); + } ); // Revision 2 - em.getTransaction().begin(); - qfe1 = em.find( QuotedFieldsEntity.class, qfe1.getId() ); - qfe1.setData1( "data1 changed" ); - em.getTransaction().commit(); + scope.inTransaction( em -> { + QuotedFieldsEntity qfe1 = em.find( QuotedFieldsEntity.class, qfeId1 ); + qfe1.setData1( "data1 changed" ); + } ); // Revision 3 - em.getTransaction().begin(); - qfe2 = em.find( QuotedFieldsEntity.class, qfe2.getId() ); - qfe2.setData2( 3 ); - em.getTransaction().commit(); - - qfeId1 = qfe1.getId(); - qfeId2 = qfe2.getId(); + scope.inTransaction( em -> { + QuotedFieldsEntity qfe2 = em.find( QuotedFieldsEntity.class, qfeId2 ); + qfe2.setData2( 3 ); + } ); } @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( QuotedFieldsEntity.class, qfeId1 ) ); - assert Arrays.asList( 1, 3 ).equals( getAuditReader().getRevisions( QuotedFieldsEntity.class, qfeId2 ) ); + public void testRevisionsCounts(SessionFactoryScope scope) { + scope.inSession( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1, 2 ), auditReader.getRevisions( QuotedFieldsEntity.class, qfeId1 ) ); + assertEquals( Arrays.asList( 1, 3 ), auditReader.getRevisions( QuotedFieldsEntity.class, qfeId2 ) ); + } ); } @Test - public void testHistoryOfId1() { - QuotedFieldsEntity ver1 = new QuotedFieldsEntity( qfeId1, "data1", 1 ); - QuotedFieldsEntity ver2 = new QuotedFieldsEntity( qfeId1, "data1 changed", 1 ); - - assert getAuditReader().find( QuotedFieldsEntity.class, qfeId1, 1 ).equals( ver1 ); - assert getAuditReader().find( QuotedFieldsEntity.class, qfeId1, 2 ).equals( ver2 ); - assert getAuditReader().find( QuotedFieldsEntity.class, qfeId1, 3 ).equals( ver2 ); + public void testHistoryOfId1(SessionFactoryScope scope) { + scope.inSession( em -> { + final var auditReader = AuditReaderFactory.get( em ); + QuotedFieldsEntity ver1 = new QuotedFieldsEntity( qfeId1, "data1", 1 ); + QuotedFieldsEntity ver2 = new QuotedFieldsEntity( qfeId1, "data1 changed", 1 ); + + assertEquals( ver1, auditReader.find( QuotedFieldsEntity.class, qfeId1, 1 ) ); + assertEquals( ver2, auditReader.find( QuotedFieldsEntity.class, qfeId1, 2 ) ); + assertEquals( ver2, auditReader.find( QuotedFieldsEntity.class, qfeId1, 3 ) ); + } ); } @Test - public void testHistoryOfId2() { - QuotedFieldsEntity ver1 = new QuotedFieldsEntity( qfeId2, "data2", 2 ); - QuotedFieldsEntity ver2 = new QuotedFieldsEntity( qfeId2, "data2", 3 ); - - assert getAuditReader().find( QuotedFieldsEntity.class, qfeId2, 1 ).equals( ver1 ); - assert getAuditReader().find( QuotedFieldsEntity.class, qfeId2, 2 ).equals( ver1 ); - assert getAuditReader().find( QuotedFieldsEntity.class, qfeId2, 3 ).equals( ver2 ); + public void testHistoryOfId2(SessionFactoryScope scope) { + scope.inSession( em -> { + final var auditReader = AuditReaderFactory.get( em ); + QuotedFieldsEntity ver1 = new QuotedFieldsEntity( qfeId2, "data2", 2 ); + QuotedFieldsEntity ver2 = new QuotedFieldsEntity( qfeId2, "data2", 3 ); + + assertEquals( ver1, auditReader.find( QuotedFieldsEntity.class, qfeId2, 1 ) ); + assertEquals( ver1, auditReader.find( QuotedFieldsEntity.class, qfeId2, 2 ) ); + assertEquals( ver2, auditReader.find( QuotedFieldsEntity.class, qfeId2, 3 ) ); + } ); } @Test - public void testEscapeEntityField() { - Table table = metadata().getEntityBinding( - "org.hibernate.orm.test.envers.integration.naming.quotation.QuotedFieldsEntity_AUD" - ).getTable(); + public void testEscapeEntityField(DomainModelScope scope) { + Table table = scope.getDomainModel() + .getEntityBinding( "org.hibernate.orm.test.envers.integration.naming.quotation.QuotedFieldsEntity_AUD" ) + .getTable(); + Column column1 = getColumnByName( table, "id" ); Column column2 = getColumnByName( table, "data1" ); Column column3 = getColumnByName( table, "data2" ); - assert column1 != null; - assert column2 != null; - assert column3 != null; - assert column1.isQuoted(); - assert column2.isQuoted(); - assert column3.isQuoted(); + + assertNotNull( column1 ); + assertNotNull( column2 ); + assertNotNull( column3 ); + assertTrue( column1.isQuoted() ); + assertTrue( column2.isQuoted() ); + assertTrue( column3.isQuoted() ); } private Column getColumnByName(Table table, String columnName) { diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/nativequery/EntityResultNativeQueryTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/nativequery/EntityResultNativeQueryTest.java index 70fdd905c5b6..c864966299ed 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/nativequery/EntityResultNativeQueryTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/nativequery/EntityResultNativeQueryTest.java @@ -7,43 +7,37 @@ import java.util.List; import jakarta.persistence.Query; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; - +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; -import static org.hamcrest.core.Is.is; -import static org.hibernate.testing.transaction.TransactionUtil.doInJPA; -import static org.junit.Assert.assertThat; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Andrea Boriero */ -public class EntityResultNativeQueryTest extends BaseEnversJPAFunctionalTestCase { - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { SimpleEntity.class, SecondSimpleEntity.class }; - } - - @Test - @Priority(10) - public void initData() { - doInJPA( this::entityManagerFactory, entityManager -> { - entityManager.persist( new SimpleEntity( "Hibernate" ) ); +@JiraKey(value = "HHH-12776") +@EnversTest +@Jpa(annotatedClasses = {SimpleEntity.class, SecondSimpleEntity.class}) +public class EntityResultNativeQueryTest { + + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + scope.inTransaction( em -> { + em.persist( new SimpleEntity( "Hibernate" ) ); } ); } @Test - @JiraKey(value = "HHH-12776") - public void testNativeQueryResultHandling() { - doInJPA( this::entityManagerFactory, entityManager -> { - Query query = entityManager.createNativeQuery( "select * from SimpleEntity", SimpleEntity.class ); + public void testNativeQueryResultHandling(EntityManagerFactoryScope scope) { + scope.inTransaction( em -> { + Query query = em.createNativeQuery( "select * from SimpleEntity", SimpleEntity.class ); List results = query.getResultList(); SimpleEntity result = (SimpleEntity) results.get( 0 ); - assertThat( result.getStringField(), is( "Hibernate" ) ); + assertEquals( "Hibernate", result.getStringField() ); } ); } - } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naturalid/JoinColumnNaturalIdTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naturalid/JoinColumnNaturalIdTest.java index b2326526fb5f..6ef8acf93312 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naturalid/JoinColumnNaturalIdTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/naturalid/JoinColumnNaturalIdTest.java @@ -4,89 +4,87 @@ */ package org.hibernate.orm.test.envers.integration.naturalid; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Chris Cranford */ @JiraKey(value = "HHH-10246") -public class JoinColumnNaturalIdTest extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {Account.class, Customer.class, Device.class}) +public class JoinColumnNaturalIdTest { private Integer customerId; private Integer deviceId; private Integer accountId; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { - Account.class, - Customer.class, - Device.class - }; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getOrCreateEntityManager(); - try { - // Revision 1 - em.getTransaction().begin(); + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + // Revision 1 + scope.inTransaction( em -> { Customer customer = new Customer(); customer.setCustomerNumber( "1234567" ); customer.setName( "ACME" ); em.persist( customer ); - em.getTransaction().commit(); customerId = customer.getId(); - // Revision 2 - em.getTransaction().begin(); + } ); + + // Revision 2 + scope.inTransaction( em -> { + Customer customer = em.find( Customer.class, customerId ); Device device = new Device(); device.setCustomer( customer ); Account account = new Account(); account.setCustomer( customer ); em.persist( account ); em.persist( device ); - em.getTransaction().commit(); accountId = account.getId(); deviceId = device.getId(); - // Revision 3 - em.getTransaction().begin(); + } ); + + // Revision 3 + scope.inTransaction( em -> { + Account account = em.find( Account.class, accountId ); em.remove( account ); - em.getTransaction().commit(); - } - finally { - em.close(); - } + } ); } @Test - public void testRevisionCounts() { - assertEquals( 3, getAuditReader().getRevisions( Customer.class, customerId ).size() ); - assertEquals( 2, getAuditReader().getRevisions( Account.class, accountId ).size() ); - assertEquals( 1, getAuditReader().getRevisions( Device.class, deviceId ).size() ); + public void testRevisionCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( 3, auditReader.getRevisions( Customer.class, customerId ).size() ); + assertEquals( 2, auditReader.getRevisions( Account.class, accountId ).size() ); + assertEquals( 1, auditReader.getRevisions( Device.class, deviceId ).size() ); + } ); } @Test - public void testRevisionHistoryOfCustomer() { - final Customer customer = new Customer( customerId, "1234567", "ACME" ); - Customer rev1 = getAuditReader().find( Customer.class, customerId, 1 ); - assertEquals( customer, rev1 ); + public void testRevisionHistoryOfCustomer(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + + final Customer customer = new Customer( customerId, "1234567", "ACME" ); + Customer rev1 = auditReader.find( Customer.class, customerId, 1 ); + assertEquals( customer, rev1 ); - final Account account = new Account( accountId, customer ); - final Device device = new Device( deviceId, customer ); - customer.getAccounts().add( account ); - customer.getDevices().add( device ); - Customer rev2 = getAuditReader().find( Customer.class, customerId, 2 ); - assertEquals( customer, rev2 ); + final Account account = new Account( accountId, customer ); + final Device device = new Device( deviceId, customer ); + customer.getAccounts().add( account ); + customer.getDevices().add( device ); + Customer rev2 = auditReader.find( Customer.class, customerId, 2 ); + assertEquals( customer, rev2 ); - customer.getAccounts().clear(); - Customer rev3 = getAuditReader().find( Customer.class, customerId, 3 ); - assertEquals( customer, rev3 ); + customer.getAccounts().clear(); + Customer rev3 = auditReader.find( Customer.class, customerId, 3 ); + assertEquals( customer, rev3 ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/notinsertable/NotInsertable.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/notinsertable/NotInsertable.java index 8eb6273e47f1..e1af27f11d9e 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/notinsertable/NotInsertable.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/notinsertable/NotInsertable.java @@ -5,51 +5,56 @@ package org.hibernate.orm.test.envers.integration.notinsertable; import java.util.Arrays; -import jakarta.persistence.EntityManager; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; -import org.junit.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Adam Warski (adam at warski dot org) */ -public class NotInsertable extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {NotInsertableTestEntity.class}) +public class NotInsertable { private Integer id1; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {NotInsertableTestEntity.class}; + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + scope.inTransaction( em -> { + NotInsertableTestEntity dte = new NotInsertableTestEntity( "data1" ); + em.persist( dte ); + id1 = dte.getId(); + } ); + + scope.inTransaction( em -> { + NotInsertableTestEntity dte = em.find( NotInsertableTestEntity.class, id1 ); + dte.setData( "data2" ); + } ); } @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - NotInsertableTestEntity dte = new NotInsertableTestEntity( "data1" ); - em.persist( dte ); - id1 = dte.getId(); - em.getTransaction().commit(); - - em.getTransaction().begin(); - dte = em.find( NotInsertableTestEntity.class, id1 ); - dte.setData( "data2" ); - em.getTransaction().commit(); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1, 2 ), auditReader.getRevisions( NotInsertableTestEntity.class, id1 ) ); + } ); } @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( NotInsertableTestEntity.class, id1 ) ); - } + public void testHistoryOfId1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); - @Test - public void testHistoryOfId1() { - NotInsertableTestEntity ver1 = new NotInsertableTestEntity( id1, "data1", "data1" ); - NotInsertableTestEntity ver2 = new NotInsertableTestEntity( id1, "data2", "data2" ); + NotInsertableTestEntity ver1 = new NotInsertableTestEntity( id1, "data1", "data1" ); + NotInsertableTestEntity ver2 = new NotInsertableTestEntity( id1, "data2", "data2" ); - assert getAuditReader().find( NotInsertableTestEntity.class, id1, 1 ).equals( ver1 ); - assert getAuditReader().find( NotInsertableTestEntity.class, id1, 2 ).equals( ver2 ); + assertEquals( ver1, auditReader.find( NotInsertableTestEntity.class, id1, 1 ) ); + assertEquals( ver2, auditReader.find( NotInsertableTestEntity.class, id1, 2 ) ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/notinsertable/manytoone/ManyToOneNotInsertable.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/notinsertable/manytoone/ManyToOneNotInsertable.java index 6e2f181eee77..dc94aed2dd11 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/notinsertable/manytoone/ManyToOneNotInsertable.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/notinsertable/manytoone/ManyToOneNotInsertable.java @@ -4,86 +4,87 @@ */ package org.hibernate.orm.test.envers.integration.notinsertable.manytoone; -import java.util.Arrays; -import jakarta.persistence.EntityManager; +import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import java.util.Arrays; -import org.junit.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; -public class ManyToOneNotInsertable extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {ManyToOneNotInsertableEntity.class, NotInsertableEntityType.class}) +public class ManyToOneNotInsertable { private Integer mto_id1; private Integer type_id1; private Integer type_id2; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {ManyToOneNotInsertableEntity.class, NotInsertableEntityType.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { mto_id1 = 1; type_id1 = 2; type_id2 = 3; - // Rev 1 - // Preparing the types - em.getTransaction().begin(); + scope.inEntityManager( em -> { + // Rev 1 + // Preparing the types + em.getTransaction().begin(); - NotInsertableEntityType type1 = new NotInsertableEntityType( type_id1, "type1" ); - NotInsertableEntityType type2 = new NotInsertableEntityType( type_id2, "type2" ); + NotInsertableEntityType type1 = new NotInsertableEntityType( type_id1, "type1" ); + NotInsertableEntityType type2 = new NotInsertableEntityType( type_id2, "type2" ); - em.persist( type1 ); - em.persist( type2 ); + em.persist( type1 ); + em.persist( type2 ); - em.getTransaction().commit(); + em.getTransaction().commit(); - // Rev 2 - em.getTransaction().begin(); + // Rev 2 + em.getTransaction().begin(); - ManyToOneNotInsertableEntity entity = new ManyToOneNotInsertableEntity( mto_id1, type_id1, type1 ); - em.persist( entity ); + ManyToOneNotInsertableEntity entity = new ManyToOneNotInsertableEntity( mto_id1, type_id1, type1 ); + em.persist( entity ); - em.getTransaction().commit(); + em.getTransaction().commit(); - // Rev 2 - em.getTransaction().begin(); + // Rev 2 + em.getTransaction().begin(); - entity = em.find( ManyToOneNotInsertableEntity.class, mto_id1 ); - entity.setNumber( type_id2 ); + entity = em.find( ManyToOneNotInsertableEntity.class, mto_id1 ); + entity.setNumber( type_id2 ); - em.getTransaction().commit(); + em.getTransaction().commit(); + } ); } @Test - public void testRevisionCounts() { - assert Arrays.asList( 1 ).equals( getAuditReader().getRevisions( NotInsertableEntityType.class, type_id1 ) ); - assert Arrays.asList( 1 ).equals( getAuditReader().getRevisions( NotInsertableEntityType.class, type_id2 ) ); - - assert Arrays.asList( 2, 3 ).equals( - getAuditReader().getRevisions( - ManyToOneNotInsertableEntity.class, - mto_id1 - ) - ); + public void testRevisionCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1 ), auditReader.getRevisions( NotInsertableEntityType.class, type_id1 ) ); + assertEquals( Arrays.asList( 1 ), auditReader.getRevisions( NotInsertableEntityType.class, type_id2 ) ); + assertEquals( Arrays.asList( 2, 3 ), + auditReader.getRevisions( ManyToOneNotInsertableEntity.class, mto_id1 ) ); + } ); } @Test - public void testNotInsertableEntity() { - ManyToOneNotInsertableEntity ver1 = getAuditReader().find( ManyToOneNotInsertableEntity.class, mto_id1, 1 ); - ManyToOneNotInsertableEntity ver2 = getAuditReader().find( ManyToOneNotInsertableEntity.class, mto_id1, 2 ); - ManyToOneNotInsertableEntity ver3 = getAuditReader().find( ManyToOneNotInsertableEntity.class, mto_id1, 3 ); + public void testNotInsertableEntity(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + + ManyToOneNotInsertableEntity ver1 = auditReader.find( ManyToOneNotInsertableEntity.class, mto_id1, 1 ); + ManyToOneNotInsertableEntity ver2 = auditReader.find( ManyToOneNotInsertableEntity.class, mto_id1, 2 ); + ManyToOneNotInsertableEntity ver3 = auditReader.find( ManyToOneNotInsertableEntity.class, mto_id1, 3 ); - NotInsertableEntityType type1 = getEntityManager().find( NotInsertableEntityType.class, type_id1 ); - NotInsertableEntityType type2 = getEntityManager().find( NotInsertableEntityType.class, type_id2 ); + NotInsertableEntityType type1 = em.find( NotInsertableEntityType.class, type_id1 ); + NotInsertableEntityType type2 = em.find( NotInsertableEntityType.class, type_id2 ); - assert ver1 == null; - assert ver2.getType().equals( type1 ); - assert ver3.getType().equals( type2 ); + assertEquals( null, ver1 ); + assertEquals( type1, ver2.getType() ); + assertEquals( type2, ver3.getType() ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/notinsertable/manytoone/NotInsertableEntityType.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/notinsertable/manytoone/NotInsertableEntityType.java index ba5ae7ce8b27..4f1d654d5cc8 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/notinsertable/manytoone/NotInsertableEntityType.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/notinsertable/manytoone/NotInsertableEntityType.java @@ -48,16 +48,14 @@ public boolean equals(Object o) { if ( this == o ) { return true; } - if ( o == null || getClass() != o.getClass() ) { + if ( !(o instanceof NotInsertableEntityType that) ) { return false; } - NotInsertableEntityType that = (NotInsertableEntityType) o; - - if ( type != null ? !type.equals( that.type ) : that.type != null ) { + if ( type != null ? !type.equals( that.getType() ) : that.getType() != null ) { return false; } - if ( typeId != null ? !typeId.equals( that.typeId ) : that.typeId != null ) { + if ( typeId != null ? !typeId.equals( that.getTypeId() ) : that.getTypeId() != null ) { return false; } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/notupdatable/PropertyNotUpdatableTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/notupdatable/PropertyNotUpdatableTest.java index a2cf06be1b0a..e0410a3facde 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/notupdatable/PropertyNotUpdatableTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/notupdatable/PropertyNotUpdatableTest.java @@ -6,126 +6,122 @@ import java.util.Arrays; import java.util.List; -import java.util.Map; -import jakarta.persistence.EntityManager; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.configuration.EnversSettings; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; - +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; -import junit.framework.Assert; +import org.hibernate.testing.orm.junit.Jpa; +import org.hibernate.testing.orm.junit.Setting; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) */ @JiraKey(value = "HHH-5411") -public class PropertyNotUpdatableTest extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {PropertyNotUpdatableEntity.class}, + integrationSettings = @Setting(name = EnversSettings.STORE_DATA_AT_DELETE, value = "true")) +public class PropertyNotUpdatableTest { private Long id = null; - @Override - protected void addConfigOptions(Map options) { - options.put( EnversSettings.STORE_DATA_AT_DELETE, "true" ); - } - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {PropertyNotUpdatableEntity.class}; - } - - @Test - @Priority(10) - public void initData() { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - PropertyNotUpdatableEntity entity = new PropertyNotUpdatableEntity( - "data", - "constant data 1", - "constant data 2" - ); - em.persist( entity ); - em.getTransaction().commit(); - - id = entity.getId(); + scope.inTransaction( em -> { + PropertyNotUpdatableEntity entity = new PropertyNotUpdatableEntity( + "data", + "constant data 1", + "constant data 2" + ); + em.persist( entity ); + id = entity.getId(); + } ); // Revision 2 - em.getTransaction().begin(); - entity = em.find( PropertyNotUpdatableEntity.class, entity.getId() ); - entity.setData( "modified data" ); - entity.setConstantData1( null ); - em.merge( entity ); - em.getTransaction().commit(); - - em.close(); - em = getEntityManager(); // Re-opening entity manager to re-initialize non-updatable fields - // with database values. Otherwise PostUpdateEvent#getOldState() returns previous - // memory state. This can be achieved using EntityManager#refresh(Object) method as well. + scope.inTransaction( em -> { + PropertyNotUpdatableEntity entity = em.find( PropertyNotUpdatableEntity.class, id ); + entity.setData( "modified data" ); + entity.setConstantData1( null ); + em.merge( entity ); + } ); // Revision 3 - em.getTransaction().begin(); - entity = em.find( PropertyNotUpdatableEntity.class, entity.getId() ); - entity.setData( "another modified data" ); - entity.setConstantData2( "invalid data" ); - em.merge( entity ); - em.getTransaction().commit(); + scope.inTransaction( em -> { + PropertyNotUpdatableEntity entity = em.find( PropertyNotUpdatableEntity.class, id ); + entity.setData( "another modified data" ); + entity.setConstantData2( "invalid data" ); + em.merge( entity ); + } ); // Revision 4 - em.getTransaction().begin(); - em.refresh( entity ); - em.remove( entity ); - em.getTransaction().commit(); + scope.inTransaction( em -> { + PropertyNotUpdatableEntity entity = em.find( PropertyNotUpdatableEntity.class, id ); + em.refresh( entity ); + em.remove( entity ); + } ); } @Test - public void testRevisionsCounts() { - Assert.assertEquals( - Arrays.asList( 1, 2, 3, 4 ), - getAuditReader().getRevisions( PropertyNotUpdatableEntity.class, id ) - ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1, 2, 3, 4 ), auditReader.getRevisions( PropertyNotUpdatableEntity.class, id ) ); + } ); } @Test - public void testHistoryOfId() { - PropertyNotUpdatableEntity ver1 = new PropertyNotUpdatableEntity( - "data", - "constant data 1", - "constant data 2", - id - ); - Assert.assertEquals( ver1, getAuditReader().find( PropertyNotUpdatableEntity.class, id, 1 ) ); - - PropertyNotUpdatableEntity ver2 = new PropertyNotUpdatableEntity( - "modified data", - "constant data 1", - "constant data 2", - id - ); - Assert.assertEquals( ver2, getAuditReader().find( PropertyNotUpdatableEntity.class, id, 2 ) ); - - PropertyNotUpdatableEntity ver3 = new PropertyNotUpdatableEntity( - "another modified data", - "constant data 1", - "constant data 2", - id - ); - Assert.assertEquals( ver3, getAuditReader().find( PropertyNotUpdatableEntity.class, id, 3 ) ); + public void testHistoryOfId(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + + PropertyNotUpdatableEntity ver1 = new PropertyNotUpdatableEntity( + "data", + "constant data 1", + "constant data 2", + id + ); + assertEquals( ver1, auditReader.find( PropertyNotUpdatableEntity.class, id, 1 ) ); + + PropertyNotUpdatableEntity ver2 = new PropertyNotUpdatableEntity( + "modified data", + "constant data 1", + "constant data 2", + id + ); + assertEquals( ver2, auditReader.find( PropertyNotUpdatableEntity.class, id, 2 ) ); + + PropertyNotUpdatableEntity ver3 = new PropertyNotUpdatableEntity( + "another modified data", + "constant data 1", + "constant data 2", + id + ); + assertEquals( ver3, auditReader.find( PropertyNotUpdatableEntity.class, id, 3 ) ); + } ); } @Test - public void testDeleteState() { - PropertyNotUpdatableEntity delete = new PropertyNotUpdatableEntity( - "another modified data", - "constant data 1", - "constant data 2", - id - ); - List results = getAuditReader().createQuery().forRevisionsOfEntity( - PropertyNotUpdatableEntity.class, - true, - true - ).getResultList(); - Assert.assertEquals( delete, results.get( 3 ) ); + public void testDeleteState(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + + PropertyNotUpdatableEntity delete = new PropertyNotUpdatableEntity( + "another modified data", + "constant data 1", + "constant data 2", + id + ); + List results = auditReader.createQuery().forRevisionsOfEntity( + PropertyNotUpdatableEntity.class, + true, + true + ).getResultList(); + assertEquals( delete, results.get( 3 ) ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/BasicCollection.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/BasicCollection.java index 75c5cd5423b6..7290186aeccd 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/BasicCollection.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/BasicCollection.java @@ -8,88 +8,81 @@ import java.util.Collections; import java.util.HashSet; import java.util.Set; -import jakarta.persistence.EntityManager; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.orm.test.envers.entities.onetomany.CollectionRefEdEntity; import org.hibernate.orm.test.envers.entities.onetomany.CollectionRefIngEntity; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; -import org.junit.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; /** * @author Adam Warski (adam at warski dot org) */ -public class BasicCollection extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {CollectionRefEdEntity.class, CollectionRefIngEntity.class}) +public class BasicCollection { private Integer ed1_id; private Integer ed2_id; private Integer ing1_id; private Integer ing2_id; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {CollectionRefEdEntity.class, CollectionRefIngEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - CollectionRefEdEntity ed1 = new CollectionRefEdEntity( 1, "data_ed_1" ); - CollectionRefEdEntity ed2 = new CollectionRefEdEntity( 2, "data_ed_2" ); - - CollectionRefIngEntity ing1 = new CollectionRefIngEntity( 3, "data_ing_1", ed1 ); - CollectionRefIngEntity ing2 = new CollectionRefIngEntity( 4, "data_ing_2", ed1 ); - - // Revision 1 - em.getTransaction().begin(); - - em.persist( ed1 ); - em.persist( ed2 ); - - em.persist( ing1 ); - em.persist( ing2 ); - - em.getTransaction().commit(); + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + scope.inTransaction( em -> { + // Revision 1 + CollectionRefEdEntity ed1 = new CollectionRefEdEntity( 1, "data_ed_1" ); + CollectionRefEdEntity ed2 = new CollectionRefEdEntity( 2, "data_ed_2" ); - // Revision 2 - em.getTransaction().begin(); + CollectionRefIngEntity ing1 = new CollectionRefIngEntity( 3, "data_ing_1", ed1 ); + CollectionRefIngEntity ing2 = new CollectionRefIngEntity( 4, "data_ing_2", ed1 ); - ing1 = em.find( CollectionRefIngEntity.class, ing1.getId() ); - ed2 = em.find( CollectionRefEdEntity.class, ed2.getId() ); + em.persist( ed1 ); + em.persist( ed2 ); - ing1.setReference( ed2 ); + em.persist( ing1 ); + em.persist( ing2 ); - em.getTransaction().commit(); + ed1_id = ed1.getId(); + ed2_id = ed2.getId(); - // Revision 3 - em.getTransaction().begin(); + ing1_id = ing1.getId(); + ing2_id = ing2.getId(); + } ); - ing2 = em.find( CollectionRefIngEntity.class, ing2.getId() ); - ed2 = em.find( CollectionRefEdEntity.class, ed2.getId() ); + scope.inTransaction( em -> { + // Revision 2 + CollectionRefIngEntity ing1 = em.find( CollectionRefIngEntity.class, ing1_id ); + CollectionRefEdEntity ed2 = em.find( CollectionRefEdEntity.class, ed2_id ); - ing2.setReference( ed2 ); + ing1.setReference( ed2 ); + } ); - em.getTransaction().commit(); + scope.inTransaction( em -> { + // Revision 3 + CollectionRefIngEntity ing2 = em.find( CollectionRefIngEntity.class, ing2_id ); + CollectionRefEdEntity ed2 = em.find( CollectionRefEdEntity.class, ed2_id ); - // - - ed1_id = ed1.getId(); - ed2_id = ed2.getId(); - - ing1_id = ing1.getId(); - ing2_id = ing2.getId(); + ing2.setReference( ed2 ); + } ); } @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2, 3 ).equals( getAuditReader().getRevisions( CollectionRefEdEntity.class, ed1_id ) ); - assert Arrays.asList( 1, 2, 3 ).equals( getAuditReader().getRevisions( CollectionRefEdEntity.class, ed2_id ) ); - - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( CollectionRefIngEntity.class, ing1_id ) ); - assert Arrays.asList( 1, 3 ).equals( getAuditReader().getRevisions( CollectionRefIngEntity.class, ing2_id ) ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1, 2, 3 ), auditReader.getRevisions( CollectionRefEdEntity.class, ed1_id ) ); + assertEquals( Arrays.asList( 1, 2, 3 ), auditReader.getRevisions( CollectionRefEdEntity.class, ed2_id ) ); + + assertEquals( Arrays.asList( 1, 2 ), auditReader.getRevisions( CollectionRefIngEntity.class, ing1_id ) ); + assertEquals( Arrays.asList( 1, 3 ), auditReader.getRevisions( CollectionRefIngEntity.class, ing2_id ) ); + } ); } private Set makeSet(T... objects) { @@ -102,69 +95,80 @@ private Set makeSet(T... objects) { } @Test - public void testHistoryOfEdId1() { - CollectionRefIngEntity ing1 = getEntityManager().find( CollectionRefIngEntity.class, ing1_id ); - CollectionRefIngEntity ing2 = getEntityManager().find( CollectionRefIngEntity.class, ing2_id ); + public void testHistoryOfEdId1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + CollectionRefIngEntity ing1 = em.find( CollectionRefIngEntity.class, ing1_id ); + CollectionRefIngEntity ing2 = em.find( CollectionRefIngEntity.class, ing2_id ); - CollectionRefEdEntity rev1 = getAuditReader().find( CollectionRefEdEntity.class, ed1_id, 1 ); - CollectionRefEdEntity rev2 = getAuditReader().find( CollectionRefEdEntity.class, ed1_id, 2 ); - CollectionRefEdEntity rev3 = getAuditReader().find( CollectionRefEdEntity.class, ed1_id, 3 ); + CollectionRefEdEntity rev1 = auditReader.find( CollectionRefEdEntity.class, ed1_id, 1 ); + CollectionRefEdEntity rev2 = auditReader.find( CollectionRefEdEntity.class, ed1_id, 2 ); + CollectionRefEdEntity rev3 = auditReader.find( CollectionRefEdEntity.class, ed1_id, 3 ); - assert rev1.getReffering().containsAll( makeSet( ing1, ing2 ) ); - assert rev1.getReffering().size() == 2; + assertTrue( rev1.getReffering().containsAll( makeSet( ing1, ing2 ) ) ); + assertEquals( 2, rev1.getReffering().size() ); - assert rev2.getReffering().containsAll( makeSet( ing2 ) ); - assert rev2.getReffering().size() == 1; + assertTrue( rev2.getReffering().containsAll( makeSet( ing2 ) ) ); + assertEquals( 1, rev2.getReffering().size() ); - assert rev3.getReffering().containsAll( Collections.EMPTY_SET ); - assert rev3.getReffering().size() == 0; + assertTrue( rev3.getReffering().containsAll( Collections.EMPTY_SET ) ); + assertEquals( 0, rev3.getReffering().size() ); + } ); } @Test - public void testHistoryOfEdId2() { - CollectionRefIngEntity ing1 = getEntityManager().find( CollectionRefIngEntity.class, ing1_id ); - CollectionRefIngEntity ing2 = getEntityManager().find( CollectionRefIngEntity.class, ing2_id ); - - CollectionRefEdEntity rev1 = getAuditReader().find( CollectionRefEdEntity.class, ed2_id, 1 ); - CollectionRefEdEntity rev2 = getAuditReader().find( CollectionRefEdEntity.class, ed2_id, 2 ); - CollectionRefEdEntity rev3 = getAuditReader().find( CollectionRefEdEntity.class, ed2_id, 3 ); + public void testHistoryOfEdId2(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + CollectionRefIngEntity ing1 = em.find( CollectionRefIngEntity.class, ing1_id ); + CollectionRefIngEntity ing2 = em.find( CollectionRefIngEntity.class, ing2_id ); - assert rev1.getReffering().containsAll( Collections.EMPTY_SET ); - assert rev1.getReffering().size() == 0; + CollectionRefEdEntity rev1 = auditReader.find( CollectionRefEdEntity.class, ed2_id, 1 ); + CollectionRefEdEntity rev2 = auditReader.find( CollectionRefEdEntity.class, ed2_id, 2 ); + CollectionRefEdEntity rev3 = auditReader.find( CollectionRefEdEntity.class, ed2_id, 3 ); - assert rev2.getReffering().containsAll( makeSet( ing1 ) ); - assert rev2.getReffering().size() == 1; + assertTrue( rev1.getReffering().containsAll( Collections.EMPTY_SET ) ); + assertEquals( 0, rev1.getReffering().size() ); - assert rev3.getReffering().containsAll( makeSet( ing1, ing2 ) ); - assert rev3.getReffering().size() == 2; + assertTrue( rev2.getReffering().containsAll( makeSet( ing1 ) ) ); + assertEquals( 1, rev2.getReffering().size() ); + assertTrue( rev3.getReffering().containsAll( makeSet( ing1, ing2 ) ) ); + assertEquals( 2, rev3.getReffering().size() ); + } ); } @Test - public void testHistoryOfEdIng1() { - CollectionRefEdEntity ed1 = getEntityManager().find( CollectionRefEdEntity.class, ed1_id ); - CollectionRefEdEntity ed2 = getEntityManager().find( CollectionRefEdEntity.class, ed2_id ); - - CollectionRefIngEntity rev1 = getAuditReader().find( CollectionRefIngEntity.class, ing1_id, 1 ); - CollectionRefIngEntity rev2 = getAuditReader().find( CollectionRefIngEntity.class, ing1_id, 2 ); - CollectionRefIngEntity rev3 = getAuditReader().find( CollectionRefIngEntity.class, ing1_id, 3 ); - - assert rev1.getReference().equals( ed1 ); - assert rev2.getReference().equals( ed2 ); - assert rev3.getReference().equals( ed2 ); + public void testHistoryOfEdIng1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + CollectionRefEdEntity ed1 = em.find( CollectionRefEdEntity.class, ed1_id ); + CollectionRefEdEntity ed2 = em.find( CollectionRefEdEntity.class, ed2_id ); + + CollectionRefIngEntity rev1 = auditReader.find( CollectionRefIngEntity.class, ing1_id, 1 ); + CollectionRefIngEntity rev2 = auditReader.find( CollectionRefIngEntity.class, ing1_id, 2 ); + CollectionRefIngEntity rev3 = auditReader.find( CollectionRefIngEntity.class, ing1_id, 3 ); + + assertEquals( ed1, rev1.getReference() ); + assertEquals( ed2, rev2.getReference() ); + assertEquals( ed2, rev3.getReference() ); + } ); } @Test - public void testHistoryOfEdIng2() { - CollectionRefEdEntity ed1 = getEntityManager().find( CollectionRefEdEntity.class, ed1_id ); - CollectionRefEdEntity ed2 = getEntityManager().find( CollectionRefEdEntity.class, ed2_id ); - - CollectionRefIngEntity rev1 = getAuditReader().find( CollectionRefIngEntity.class, ing2_id, 1 ); - CollectionRefIngEntity rev2 = getAuditReader().find( CollectionRefIngEntity.class, ing2_id, 2 ); - CollectionRefIngEntity rev3 = getAuditReader().find( CollectionRefIngEntity.class, ing2_id, 3 ); - - assert rev1.getReference().equals( ed1 ); - assert rev2.getReference().equals( ed1 ); - assert rev3.getReference().equals( ed2 ); + public void testHistoryOfEdIng2(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + CollectionRefEdEntity ed1 = em.find( CollectionRefEdEntity.class, ed1_id ); + CollectionRefEdEntity ed2 = em.find( CollectionRefEdEntity.class, ed2_id ); + + CollectionRefIngEntity rev1 = auditReader.find( CollectionRefIngEntity.class, ing2_id, 1 ); + CollectionRefIngEntity rev2 = auditReader.find( CollectionRefIngEntity.class, ing2_id, 2 ); + CollectionRefIngEntity rev3 = auditReader.find( CollectionRefIngEntity.class, ing2_id, 3 ); + + assertEquals( ed1, rev1.getReference() ); + assertEquals( ed1, rev2.getReference() ); + assertEquals( ed2, rev3.getReference() ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/BasicList.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/BasicList.java index 8ee8f5f165e5..f3208f261ef1 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/BasicList.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/BasicList.java @@ -5,144 +5,149 @@ package org.hibernate.orm.test.envers.integration.onetomany; import java.util.Arrays; -import jakarta.persistence.EntityManager; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.orm.test.envers.entities.onetomany.ListRefEdEntity; import org.hibernate.orm.test.envers.entities.onetomany.ListRefIngEntity; import org.hibernate.orm.test.envers.tools.TestTools; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; -import org.junit.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; /** * @author Adam Warski (adam at warski dot org) */ -public class BasicList extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {ListRefEdEntity.class, ListRefIngEntity.class}) +public class BasicList { private Integer ed1_id; private Integer ed2_id; private Integer ing1_id; private Integer ing2_id; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {ListRefEdEntity.class, ListRefIngEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - ListRefEdEntity ed1 = new ListRefEdEntity( 1, "data_ed_1" ); - ListRefEdEntity ed2 = new ListRefEdEntity( 2, "data_ed_2" ); - - ListRefIngEntity ing1 = new ListRefIngEntity( 3, "data_ing_1", ed1 ); - ListRefIngEntity ing2 = new ListRefIngEntity( 4, "data_ing_2", ed1 ); - - // Revision 1 - em.getTransaction().begin(); - - em.persist( ed1 ); - em.persist( ed2 ); - - em.persist( ing1 ); - em.persist( ing2 ); - - em.getTransaction().commit(); - - // Revision 2 - em.getTransaction().begin(); + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + scope.inTransaction( em -> { + // Revision 1 + ListRefEdEntity ed1 = new ListRefEdEntity( 1, "data_ed_1" ); + ListRefEdEntity ed2 = new ListRefEdEntity( 2, "data_ed_2" ); - ing1 = em.find( ListRefIngEntity.class, ing1.getId() ); - ed2 = em.find( ListRefEdEntity.class, ed2.getId() ); + ListRefIngEntity ing1 = new ListRefIngEntity( 3, "data_ing_1", ed1 ); + ListRefIngEntity ing2 = new ListRefIngEntity( 4, "data_ing_2", ed1 ); - ing1.setReference( ed2 ); + em.persist( ed1 ); + em.persist( ed2 ); - em.getTransaction().commit(); + em.persist( ing1 ); + em.persist( ing2 ); - // Revision 3 - em.getTransaction().begin(); + ed1_id = ed1.getId(); + ed2_id = ed2.getId(); - ing2 = em.find( ListRefIngEntity.class, ing2.getId() ); - ed2 = em.find( ListRefEdEntity.class, ed2.getId() ); + ing1_id = ing1.getId(); + ing2_id = ing2.getId(); + } ); - ing2.setReference( ed2 ); + scope.inTransaction( em -> { + // Revision 2 + ListRefIngEntity ing1 = em.find( ListRefIngEntity.class, ing1_id ); + ListRefEdEntity ed2 = em.find( ListRefEdEntity.class, ed2_id ); - em.getTransaction().commit(); + ing1.setReference( ed2 ); + } ); - // + scope.inTransaction( em -> { + // Revision 3 + ListRefIngEntity ing2 = em.find( ListRefIngEntity.class, ing2_id ); + ListRefEdEntity ed2 = em.find( ListRefEdEntity.class, ed2_id ); - ed1_id = ed1.getId(); - ed2_id = ed2.getId(); - - ing1_id = ing1.getId(); - ing2_id = ing2.getId(); + ing2.setReference( ed2 ); + } ); } @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2, 3 ).equals( getAuditReader().getRevisions( ListRefEdEntity.class, ed1_id ) ); - assert Arrays.asList( 1, 2, 3 ).equals( getAuditReader().getRevisions( ListRefEdEntity.class, ed2_id ) ); - - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( ListRefIngEntity.class, ing1_id ) ); - assert Arrays.asList( 1, 3 ).equals( getAuditReader().getRevisions( ListRefIngEntity.class, ing2_id ) ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1, 2, 3 ), auditReader.getRevisions( ListRefEdEntity.class, ed1_id ) ); + assertEquals( Arrays.asList( 1, 2, 3 ), auditReader.getRevisions( ListRefEdEntity.class, ed2_id ) ); + + assertEquals( Arrays.asList( 1, 2 ), auditReader.getRevisions( ListRefIngEntity.class, ing1_id ) ); + assertEquals( Arrays.asList( 1, 3 ), auditReader.getRevisions( ListRefIngEntity.class, ing2_id ) ); + } ); } @Test - public void testHistoryOfEdId1() { - ListRefIngEntity ing1 = getEntityManager().find( ListRefIngEntity.class, ing1_id ); - ListRefIngEntity ing2 = getEntityManager().find( ListRefIngEntity.class, ing2_id ); - - ListRefEdEntity rev1 = getAuditReader().find( ListRefEdEntity.class, ed1_id, 1 ); - ListRefEdEntity rev2 = getAuditReader().find( ListRefEdEntity.class, ed1_id, 2 ); - ListRefEdEntity rev3 = getAuditReader().find( ListRefEdEntity.class, ed1_id, 3 ); - - assert TestTools.checkCollection( rev1.getReffering(), ing1, ing2 ); - assert TestTools.checkCollection( rev2.getReffering(), ing2 ); - assert TestTools.checkCollection( rev3.getReffering() ); + public void testHistoryOfEdId1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + ListRefIngEntity ing1 = em.find( ListRefIngEntity.class, ing1_id ); + ListRefIngEntity ing2 = em.find( ListRefIngEntity.class, ing2_id ); + + ListRefEdEntity rev1 = auditReader.find( ListRefEdEntity.class, ed1_id, 1 ); + ListRefEdEntity rev2 = auditReader.find( ListRefEdEntity.class, ed1_id, 2 ); + ListRefEdEntity rev3 = auditReader.find( ListRefEdEntity.class, ed1_id, 3 ); + + assertTrue( TestTools.checkCollection( rev1.getReffering(), ing1, ing2 ) ); + assertTrue( TestTools.checkCollection( rev2.getReffering(), ing2 ) ); + assertTrue( TestTools.checkCollection( rev3.getReffering() ) ); + } ); } @Test - public void testHistoryOfEdId2() { - ListRefIngEntity ing1 = getEntityManager().find( ListRefIngEntity.class, ing1_id ); - ListRefIngEntity ing2 = getEntityManager().find( ListRefIngEntity.class, ing2_id ); - - ListRefEdEntity rev1 = getAuditReader().find( ListRefEdEntity.class, ed2_id, 1 ); - ListRefEdEntity rev2 = getAuditReader().find( ListRefEdEntity.class, ed2_id, 2 ); - ListRefEdEntity rev3 = getAuditReader().find( ListRefEdEntity.class, ed2_id, 3 ); - - assert TestTools.checkCollection( rev1.getReffering() ); - assert TestTools.checkCollection( rev2.getReffering(), ing1 ); - assert TestTools.checkCollection( rev3.getReffering(), ing1, ing2 ); + public void testHistoryOfEdId2(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + ListRefIngEntity ing1 = em.find( ListRefIngEntity.class, ing1_id ); + ListRefIngEntity ing2 = em.find( ListRefIngEntity.class, ing2_id ); + + ListRefEdEntity rev1 = auditReader.find( ListRefEdEntity.class, ed2_id, 1 ); + ListRefEdEntity rev2 = auditReader.find( ListRefEdEntity.class, ed2_id, 2 ); + ListRefEdEntity rev3 = auditReader.find( ListRefEdEntity.class, ed2_id, 3 ); + + assertTrue( TestTools.checkCollection( rev1.getReffering() ) ); + assertTrue( TestTools.checkCollection( rev2.getReffering(), ing1 ) ); + assertTrue( TestTools.checkCollection( rev3.getReffering(), ing1, ing2 ) ); + } ); } @Test - public void testHistoryOfEdIng1() { - ListRefEdEntity ed1 = getEntityManager().find( ListRefEdEntity.class, ed1_id ); - ListRefEdEntity ed2 = getEntityManager().find( ListRefEdEntity.class, ed2_id ); - - ListRefIngEntity rev1 = getAuditReader().find( ListRefIngEntity.class, ing1_id, 1 ); - ListRefIngEntity rev2 = getAuditReader().find( ListRefIngEntity.class, ing1_id, 2 ); - ListRefIngEntity rev3 = getAuditReader().find( ListRefIngEntity.class, ing1_id, 3 ); - - assert rev1.getReference().equals( ed1 ); - assert rev2.getReference().equals( ed2 ); - assert rev3.getReference().equals( ed2 ); + public void testHistoryOfEdIng1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + ListRefEdEntity ed1 = em.find( ListRefEdEntity.class, ed1_id ); + ListRefEdEntity ed2 = em.find( ListRefEdEntity.class, ed2_id ); + + ListRefIngEntity rev1 = auditReader.find( ListRefIngEntity.class, ing1_id, 1 ); + ListRefIngEntity rev2 = auditReader.find( ListRefIngEntity.class, ing1_id, 2 ); + ListRefIngEntity rev3 = auditReader.find( ListRefIngEntity.class, ing1_id, 3 ); + + assertEquals( ed1, rev1.getReference() ); + assertEquals( ed2, rev2.getReference() ); + assertEquals( ed2, rev3.getReference() ); + } ); } @Test - public void testHistoryOfEdIng2() { - ListRefEdEntity ed1 = getEntityManager().find( ListRefEdEntity.class, ed1_id ); - ListRefEdEntity ed2 = getEntityManager().find( ListRefEdEntity.class, ed2_id ); - - ListRefIngEntity rev1 = getAuditReader().find( ListRefIngEntity.class, ing2_id, 1 ); - ListRefIngEntity rev2 = getAuditReader().find( ListRefIngEntity.class, ing2_id, 2 ); - ListRefIngEntity rev3 = getAuditReader().find( ListRefIngEntity.class, ing2_id, 3 ); - - assert rev1.getReference().equals( ed1 ); - assert rev2.getReference().equals( ed1 ); - assert rev3.getReference().equals( ed2 ); + public void testHistoryOfEdIng2(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + ListRefEdEntity ed1 = em.find( ListRefEdEntity.class, ed1_id ); + ListRefEdEntity ed2 = em.find( ListRefEdEntity.class, ed2_id ); + + ListRefIngEntity rev1 = auditReader.find( ListRefIngEntity.class, ing2_id, 1 ); + ListRefIngEntity rev2 = auditReader.find( ListRefIngEntity.class, ing2_id, 2 ); + ListRefIngEntity rev3 = auditReader.find( ListRefIngEntity.class, ing2_id, 3 ); + + assertEquals( ed1, rev1.getReference() ); + assertEquals( ed1, rev2.getReference() ); + assertEquals( ed2, rev3.getReference() ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/BasicSet.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/BasicSet.java index 024a65ec0962..84264064c750 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/BasicSet.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/BasicSet.java @@ -6,163 +6,162 @@ import java.util.Arrays; import java.util.Collections; -import jakarta.persistence.EntityManager; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.orm.test.envers.entities.onetomany.SetRefEdEntity; import org.hibernate.orm.test.envers.entities.onetomany.SetRefIngEntity; import org.hibernate.orm.test.envers.tools.TestTools; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; -import org.junit.Test; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNull; /** * @author Adam Warski (adam at warski dot org) */ -public class BasicSet extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {SetRefEdEntity.class, SetRefIngEntity.class}) +public class BasicSet { private Integer ed1_id; private Integer ed2_id; private Integer ing1_id; private Integer ing2_id; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {SetRefEdEntity.class, SetRefIngEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - SetRefEdEntity ed1 = new SetRefEdEntity( 1, "data_ed_1" ); - SetRefEdEntity ed2 = new SetRefEdEntity( 2, "data_ed_2" ); - - SetRefIngEntity ing1 = new SetRefIngEntity( 3, "data_ing_1" ); - SetRefIngEntity ing2 = new SetRefIngEntity( 4, "data_ing_2" ); - - // Revision 1 - em.getTransaction().begin(); - - em.persist( ed1 ); - em.persist( ed2 ); + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + scope.inTransaction( em -> { + SetRefEdEntity ed1 = new SetRefEdEntity( 1, "data_ed_1" ); + SetRefEdEntity ed2 = new SetRefEdEntity( 2, "data_ed_2" ); - em.getTransaction().commit(); + em.persist( ed1 ); + em.persist( ed2 ); - // Revision 2 + ed1_id = ed1.getId(); + ed2_id = ed2.getId(); + } ); - em.getTransaction().begin(); + scope.inTransaction( em -> { + SetRefEdEntity ed1 = em.find( SetRefEdEntity.class, ed1_id ); - ed1 = em.find( SetRefEdEntity.class, ed1.getId() ); + SetRefIngEntity ing1 = new SetRefIngEntity( 3, "data_ing_1" ); + SetRefIngEntity ing2 = new SetRefIngEntity( 4, "data_ing_2" ); - ing1.setReference( ed1 ); - ing2.setReference( ed1 ); + ing1.setReference( ed1 ); + ing2.setReference( ed1 ); - em.persist( ing1 ); - em.persist( ing2 ); + em.persist( ing1 ); + em.persist( ing2 ); - em.getTransaction().commit(); + ing1_id = ing1.getId(); + ing2_id = ing2.getId(); + } ); - // Revision 3 - em.getTransaction().begin(); + scope.inTransaction( em -> { + SetRefIngEntity ing1 = em.find( SetRefIngEntity.class, ing1_id ); + SetRefEdEntity ed2 = em.find( SetRefEdEntity.class, ed2_id ); - ing1 = em.find( SetRefIngEntity.class, ing1.getId() ); - ed2 = em.find( SetRefEdEntity.class, ed2.getId() ); + ing1.setReference( ed2 ); + } ); - ing1.setReference( ed2 ); + scope.inTransaction( em -> { + SetRefIngEntity ing2 = em.find( SetRefIngEntity.class, ing2_id ); + SetRefEdEntity ed2 = em.find( SetRefEdEntity.class, ed2_id ); - em.getTransaction().commit(); - - // Revision 4 - em.getTransaction().begin(); - - ing2 = em.find( SetRefIngEntity.class, ing2.getId() ); - ed2 = em.find( SetRefEdEntity.class, ed2.getId() ); - - ing2.setReference( ed2 ); - - em.getTransaction().commit(); - - // - - ed1_id = ed1.getId(); - ed2_id = ed2.getId(); - - ing1_id = ing1.getId(); - ing2_id = ing2.getId(); + ing2.setReference( ed2 ); + } ); } @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2, 3, 4 ).equals( getAuditReader().getRevisions( SetRefEdEntity.class, ed1_id ) ); - assert Arrays.asList( 1, 3, 4 ).equals( getAuditReader().getRevisions( SetRefEdEntity.class, ed2_id ) ); - - assert Arrays.asList( 2, 3 ).equals( getAuditReader().getRevisions( SetRefIngEntity.class, ing1_id ) ); - assert Arrays.asList( 2, 4 ).equals( getAuditReader().getRevisions( SetRefIngEntity.class, ing2_id ) ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1, 2, 3, 4 ), auditReader.getRevisions( SetRefEdEntity.class, ed1_id ) ); + assertEquals( Arrays.asList( 1, 3, 4 ), auditReader.getRevisions( SetRefEdEntity.class, ed2_id ) ); + + assertEquals( Arrays.asList( 2, 3 ), auditReader.getRevisions( SetRefIngEntity.class, ing1_id ) ); + assertEquals( Arrays.asList( 2, 4 ), auditReader.getRevisions( SetRefIngEntity.class, ing2_id ) ); + } ); } @Test - public void testHistoryOfEdId1() { - SetRefIngEntity ing1 = getEntityManager().find( SetRefIngEntity.class, ing1_id ); - SetRefIngEntity ing2 = getEntityManager().find( SetRefIngEntity.class, ing2_id ); - - SetRefEdEntity rev1 = getAuditReader().find( SetRefEdEntity.class, ed1_id, 1 ); - SetRefEdEntity rev2 = getAuditReader().find( SetRefEdEntity.class, ed1_id, 2 ); - SetRefEdEntity rev3 = getAuditReader().find( SetRefEdEntity.class, ed1_id, 3 ); - SetRefEdEntity rev4 = getAuditReader().find( SetRefEdEntity.class, ed1_id, 4 ); - - assert rev1.getReffering().equals( Collections.EMPTY_SET ); - assert rev2.getReffering().equals( TestTools.makeSet( ing1, ing2 ) ); - assert rev3.getReffering().equals( TestTools.makeSet( ing2 ) ); - assert rev4.getReffering().equals( Collections.EMPTY_SET ); + public void testHistoryOfEdId1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + SetRefIngEntity ing1 = em.find( SetRefIngEntity.class, ing1_id ); + SetRefIngEntity ing2 = em.find( SetRefIngEntity.class, ing2_id ); + + SetRefEdEntity rev1 = auditReader.find( SetRefEdEntity.class, ed1_id, 1 ); + SetRefEdEntity rev2 = auditReader.find( SetRefEdEntity.class, ed1_id, 2 ); + SetRefEdEntity rev3 = auditReader.find( SetRefEdEntity.class, ed1_id, 3 ); + SetRefEdEntity rev4 = auditReader.find( SetRefEdEntity.class, ed1_id, 4 ); + + assertEquals( Collections.EMPTY_SET, rev1.getReffering() ); + assertEquals( TestTools.makeSet( ing1, ing2 ), rev2.getReffering() ); + assertEquals( TestTools.makeSet( ing2 ), rev3.getReffering() ); + assertEquals( Collections.EMPTY_SET, rev4.getReffering() ); + } ); } @Test - public void testHistoryOfEdId2() { - SetRefIngEntity ing1 = getEntityManager().find( SetRefIngEntity.class, ing1_id ); - SetRefIngEntity ing2 = getEntityManager().find( SetRefIngEntity.class, ing2_id ); - - SetRefEdEntity rev1 = getAuditReader().find( SetRefEdEntity.class, ed2_id, 1 ); - SetRefEdEntity rev2 = getAuditReader().find( SetRefEdEntity.class, ed2_id, 2 ); - SetRefEdEntity rev3 = getAuditReader().find( SetRefEdEntity.class, ed2_id, 3 ); - SetRefEdEntity rev4 = getAuditReader().find( SetRefEdEntity.class, ed2_id, 4 ); - - assert rev1.getReffering().equals( Collections.EMPTY_SET ); - assert rev2.getReffering().equals( Collections.EMPTY_SET ); - assert rev3.getReffering().equals( TestTools.makeSet( ing1 ) ); - assert rev4.getReffering().equals( TestTools.makeSet( ing1, ing2 ) ); + public void testHistoryOfEdId2(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + SetRefIngEntity ing1 = em.find( SetRefIngEntity.class, ing1_id ); + SetRefIngEntity ing2 = em.find( SetRefIngEntity.class, ing2_id ); + + SetRefEdEntity rev1 = auditReader.find( SetRefEdEntity.class, ed2_id, 1 ); + SetRefEdEntity rev2 = auditReader.find( SetRefEdEntity.class, ed2_id, 2 ); + SetRefEdEntity rev3 = auditReader.find( SetRefEdEntity.class, ed2_id, 3 ); + SetRefEdEntity rev4 = auditReader.find( SetRefEdEntity.class, ed2_id, 4 ); + + assertEquals( Collections.EMPTY_SET, rev1.getReffering() ); + assertEquals( Collections.EMPTY_SET, rev2.getReffering() ); + assertEquals( TestTools.makeSet( ing1 ), rev3.getReffering() ); + assertEquals( TestTools.makeSet( ing1, ing2 ), rev4.getReffering() ); + } ); } @Test - public void testHistoryOfEdIng1() { - SetRefEdEntity ed1 = getEntityManager().find( SetRefEdEntity.class, ed1_id ); - SetRefEdEntity ed2 = getEntityManager().find( SetRefEdEntity.class, ed2_id ); - - SetRefIngEntity rev1 = getAuditReader().find( SetRefIngEntity.class, ing1_id, 1 ); - SetRefIngEntity rev2 = getAuditReader().find( SetRefIngEntity.class, ing1_id, 2 ); - SetRefIngEntity rev3 = getAuditReader().find( SetRefIngEntity.class, ing1_id, 3 ); - SetRefIngEntity rev4 = getAuditReader().find( SetRefIngEntity.class, ing1_id, 4 ); - - assert rev1 == null; - assert rev2.getReference().equals( ed1 ); - assert rev3.getReference().equals( ed2 ); - assert rev4.getReference().equals( ed2 ); + public void testHistoryOfEdIng1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + SetRefEdEntity ed1 = em.find( SetRefEdEntity.class, ed1_id ); + SetRefEdEntity ed2 = em.find( SetRefEdEntity.class, ed2_id ); + + SetRefIngEntity rev1 = auditReader.find( SetRefIngEntity.class, ing1_id, 1 ); + SetRefIngEntity rev2 = auditReader.find( SetRefIngEntity.class, ing1_id, 2 ); + SetRefIngEntity rev3 = auditReader.find( SetRefIngEntity.class, ing1_id, 3 ); + SetRefIngEntity rev4 = auditReader.find( SetRefIngEntity.class, ing1_id, 4 ); + + assertNull( rev1 ); + assertEquals( ed1, rev2.getReference() ); + assertEquals( ed2, rev3.getReference() ); + assertEquals( ed2, rev4.getReference() ); + } ); } @Test - public void testHistoryOfEdIng2() { - SetRefEdEntity ed1 = getEntityManager().find( SetRefEdEntity.class, ed1_id ); - SetRefEdEntity ed2 = getEntityManager().find( SetRefEdEntity.class, ed2_id ); - - SetRefIngEntity rev1 = getAuditReader().find( SetRefIngEntity.class, ing2_id, 1 ); - SetRefIngEntity rev2 = getAuditReader().find( SetRefIngEntity.class, ing2_id, 2 ); - SetRefIngEntity rev3 = getAuditReader().find( SetRefIngEntity.class, ing2_id, 3 ); - SetRefIngEntity rev4 = getAuditReader().find( SetRefIngEntity.class, ing2_id, 4 ); - - assert rev1 == null; - assert rev2.getReference().equals( ed1 ); - assert rev3.getReference().equals( ed1 ); - assert rev4.getReference().equals( ed2 ); + public void testHistoryOfEdIng2(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + SetRefEdEntity ed1 = em.find( SetRefEdEntity.class, ed1_id ); + SetRefEdEntity ed2 = em.find( SetRefEdEntity.class, ed2_id ); + + SetRefIngEntity rev1 = auditReader.find( SetRefIngEntity.class, ing2_id, 1 ); + SetRefIngEntity rev2 = auditReader.find( SetRefIngEntity.class, ing2_id, 2 ); + SetRefIngEntity rev3 = auditReader.find( SetRefIngEntity.class, ing2_id, 3 ); + SetRefIngEntity rev4 = auditReader.find( SetRefIngEntity.class, ing2_id, 4 ); + + assertNull( rev1 ); + assertEquals( ed1, rev2.getReference() ); + assertEquals( ed1, rev3.getReference() ); + assertEquals( ed2, rev4.getReference() ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/BasicSetWithEmbId.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/BasicSetWithEmbId.java index 90666b3657a2..d2723f60218e 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/BasicSetWithEmbId.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/BasicSetWithEmbId.java @@ -8,87 +8,79 @@ import java.util.Collections; import java.util.HashSet; import java.util.Set; -import jakarta.persistence.EntityManager; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.orm.test.envers.entities.ids.EmbId; import org.hibernate.orm.test.envers.entities.onetomany.ids.SetRefEdEmbIdEntity; import org.hibernate.orm.test.envers.entities.onetomany.ids.SetRefIngEmbIdEntity; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; -import org.junit.Test; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Adam Warski (adam at warski dot org) */ -public class BasicSetWithEmbId extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {SetRefEdEmbIdEntity.class, SetRefIngEmbIdEntity.class}) +public class BasicSetWithEmbId { private EmbId ed1_id; private EmbId ed2_id; private EmbId ing1_id; private EmbId ing2_id; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {SetRefEdEmbIdEntity.class, SetRefIngEmbIdEntity.class}; - } - - @Test - @Priority(10) - public void initData() { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { ed1_id = new EmbId( 0, 1 ); ed2_id = new EmbId( 2, 3 ); ing2_id = new EmbId( 4, 5 ); ing1_id = new EmbId( 6, 7 ); - EntityManager em = getEntityManager(); - - SetRefEdEmbIdEntity ed1 = new SetRefEdEmbIdEntity( ed1_id, "data_ed_1" ); - SetRefEdEmbIdEntity ed2 = new SetRefEdEmbIdEntity( ed2_id, "data_ed_2" ); - - SetRefIngEmbIdEntity ing1 = new SetRefIngEmbIdEntity( ing1_id, "data_ing_1", ed1 ); - SetRefIngEmbIdEntity ing2 = new SetRefIngEmbIdEntity( ing2_id, "data_ing_2", ed1 ); - - // Revision 1 - em.getTransaction().begin(); - - em.persist( ed1 ); - em.persist( ed2 ); - - em.persist( ing1 ); - em.persist( ing2 ); - - em.getTransaction().commit(); + scope.inTransaction( em -> { + SetRefEdEmbIdEntity ed1 = new SetRefEdEmbIdEntity( ed1_id, "data_ed_1" ); + SetRefEdEmbIdEntity ed2 = new SetRefEdEmbIdEntity( ed2_id, "data_ed_2" ); - // Revision 2 - em.getTransaction().begin(); + SetRefIngEmbIdEntity ing1 = new SetRefIngEmbIdEntity( ing1_id, "data_ing_1", ed1 ); + SetRefIngEmbIdEntity ing2 = new SetRefIngEmbIdEntity( ing2_id, "data_ing_2", ed1 ); - ing1 = em.find( SetRefIngEmbIdEntity.class, ing1.getId() ); - ed2 = em.find( SetRefEdEmbIdEntity.class, ed2.getId() ); + em.persist( ed1 ); + em.persist( ed2 ); - ing1.setReference( ed2 ); + em.persist( ing1 ); + em.persist( ing2 ); + } ); - em.getTransaction().commit(); + scope.inTransaction( em -> { + SetRefIngEmbIdEntity ing1 = em.find( SetRefIngEmbIdEntity.class, ing1_id ); + SetRefEdEmbIdEntity ed2 = em.find( SetRefEdEmbIdEntity.class, ed2_id ); - // Revision 3 - em.getTransaction().begin(); + ing1.setReference( ed2 ); + } ); - ing2 = em.find( SetRefIngEmbIdEntity.class, ing2.getId() ); - ed2 = em.find( SetRefEdEmbIdEntity.class, ed2.getId() ); + scope.inTransaction( em -> { + SetRefIngEmbIdEntity ing2 = em.find( SetRefIngEmbIdEntity.class, ing2_id ); + SetRefEdEmbIdEntity ed2 = em.find( SetRefEdEmbIdEntity.class, ed2_id ); - ing2.setReference( ed2 ); - - em.getTransaction().commit(); + ing2.setReference( ed2 ); + } ); } @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2, 3 ).equals( getAuditReader().getRevisions( SetRefEdEmbIdEntity.class, ed1_id ) ); - assert Arrays.asList( 1, 2, 3 ).equals( getAuditReader().getRevisions( SetRefEdEmbIdEntity.class, ed2_id ) ); - - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( SetRefIngEmbIdEntity.class, ing1_id ) ); - assert Arrays.asList( 1, 3 ).equals( getAuditReader().getRevisions( SetRefIngEmbIdEntity.class, ing2_id ) ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1, 2, 3 ), auditReader.getRevisions( SetRefEdEmbIdEntity.class, ed1_id ) ); + assertEquals( Arrays.asList( 1, 2, 3 ), auditReader.getRevisions( SetRefEdEmbIdEntity.class, ed2_id ) ); + + assertEquals( Arrays.asList( 1, 2 ), auditReader.getRevisions( SetRefIngEmbIdEntity.class, ing1_id ) ); + assertEquals( Arrays.asList( 1, 3 ), auditReader.getRevisions( SetRefIngEmbIdEntity.class, ing2_id ) ); + } ); } private Set makeSet(T... objects) { @@ -101,58 +93,70 @@ private Set makeSet(T... objects) { } @Test - public void testHistoryOfEdId1() { - SetRefIngEmbIdEntity ing1 = getEntityManager().find( SetRefIngEmbIdEntity.class, ing1_id ); - SetRefIngEmbIdEntity ing2 = getEntityManager().find( SetRefIngEmbIdEntity.class, ing2_id ); - - SetRefEdEmbIdEntity rev1 = getAuditReader().find( SetRefEdEmbIdEntity.class, ed1_id, 1 ); - SetRefEdEmbIdEntity rev2 = getAuditReader().find( SetRefEdEmbIdEntity.class, ed1_id, 2 ); - SetRefEdEmbIdEntity rev3 = getAuditReader().find( SetRefEdEmbIdEntity.class, ed1_id, 3 ); - - assert rev1.getReffering().equals( makeSet( ing1, ing2 ) ); - assert rev2.getReffering().equals( makeSet( ing2 ) ); - assert rev3.getReffering().equals( Collections.EMPTY_SET ); + public void testHistoryOfEdId1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + SetRefIngEmbIdEntity ing1 = em.find( SetRefIngEmbIdEntity.class, ing1_id ); + SetRefIngEmbIdEntity ing2 = em.find( SetRefIngEmbIdEntity.class, ing2_id ); + + SetRefEdEmbIdEntity rev1 = auditReader.find( SetRefEdEmbIdEntity.class, ed1_id, 1 ); + SetRefEdEmbIdEntity rev2 = auditReader.find( SetRefEdEmbIdEntity.class, ed1_id, 2 ); + SetRefEdEmbIdEntity rev3 = auditReader.find( SetRefEdEmbIdEntity.class, ed1_id, 3 ); + + assertEquals( makeSet( ing1, ing2 ), rev1.getReffering() ); + assertEquals( makeSet( ing2 ), rev2.getReffering() ); + assertEquals( Collections.EMPTY_SET, rev3.getReffering() ); + } ); } @Test - public void testHistoryOfEdId2() { - SetRefIngEmbIdEntity ing1 = getEntityManager().find( SetRefIngEmbIdEntity.class, ing1_id ); - SetRefIngEmbIdEntity ing2 = getEntityManager().find( SetRefIngEmbIdEntity.class, ing2_id ); - - SetRefEdEmbIdEntity rev1 = getAuditReader().find( SetRefEdEmbIdEntity.class, ed2_id, 1 ); - SetRefEdEmbIdEntity rev2 = getAuditReader().find( SetRefEdEmbIdEntity.class, ed2_id, 2 ); - SetRefEdEmbIdEntity rev3 = getAuditReader().find( SetRefEdEmbIdEntity.class, ed2_id, 3 ); - - assert rev1.getReffering().equals( Collections.EMPTY_SET ); - assert rev2.getReffering().equals( makeSet( ing1 ) ); - assert rev3.getReffering().equals( makeSet( ing1, ing2 ) ); + public void testHistoryOfEdId2(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + SetRefIngEmbIdEntity ing1 = em.find( SetRefIngEmbIdEntity.class, ing1_id ); + SetRefIngEmbIdEntity ing2 = em.find( SetRefIngEmbIdEntity.class, ing2_id ); + + SetRefEdEmbIdEntity rev1 = auditReader.find( SetRefEdEmbIdEntity.class, ed2_id, 1 ); + SetRefEdEmbIdEntity rev2 = auditReader.find( SetRefEdEmbIdEntity.class, ed2_id, 2 ); + SetRefEdEmbIdEntity rev3 = auditReader.find( SetRefEdEmbIdEntity.class, ed2_id, 3 ); + + assertEquals( Collections.EMPTY_SET, rev1.getReffering() ); + assertEquals( makeSet( ing1 ), rev2.getReffering() ); + assertEquals( makeSet( ing1, ing2 ), rev3.getReffering() ); + } ); } @Test - public void testHistoryOfEdIng1() { - SetRefEdEmbIdEntity ed1 = getEntityManager().find( SetRefEdEmbIdEntity.class, ed1_id ); - SetRefEdEmbIdEntity ed2 = getEntityManager().find( SetRefEdEmbIdEntity.class, ed2_id ); - - SetRefIngEmbIdEntity rev1 = getAuditReader().find( SetRefIngEmbIdEntity.class, ing1_id, 1 ); - SetRefIngEmbIdEntity rev2 = getAuditReader().find( SetRefIngEmbIdEntity.class, ing1_id, 2 ); - SetRefIngEmbIdEntity rev3 = getAuditReader().find( SetRefIngEmbIdEntity.class, ing1_id, 3 ); - - assert rev1.getReference().equals( ed1 ); - assert rev2.getReference().equals( ed2 ); - assert rev3.getReference().equals( ed2 ); + public void testHistoryOfEdIng1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + SetRefEdEmbIdEntity ed1 = em.find( SetRefEdEmbIdEntity.class, ed1_id ); + SetRefEdEmbIdEntity ed2 = em.find( SetRefEdEmbIdEntity.class, ed2_id ); + + SetRefIngEmbIdEntity rev1 = auditReader.find( SetRefIngEmbIdEntity.class, ing1_id, 1 ); + SetRefIngEmbIdEntity rev2 = auditReader.find( SetRefIngEmbIdEntity.class, ing1_id, 2 ); + SetRefIngEmbIdEntity rev3 = auditReader.find( SetRefIngEmbIdEntity.class, ing1_id, 3 ); + + assertEquals( ed1, rev1.getReference() ); + assertEquals( ed2, rev2.getReference() ); + assertEquals( ed2, rev3.getReference() ); + } ); } @Test - public void testHistoryOfEdIng2() { - SetRefEdEmbIdEntity ed1 = getEntityManager().find( SetRefEdEmbIdEntity.class, ed1_id ); - SetRefEdEmbIdEntity ed2 = getEntityManager().find( SetRefEdEmbIdEntity.class, ed2_id ); - - SetRefIngEmbIdEntity rev1 = getAuditReader().find( SetRefIngEmbIdEntity.class, ing2_id, 1 ); - SetRefIngEmbIdEntity rev2 = getAuditReader().find( SetRefIngEmbIdEntity.class, ing2_id, 2 ); - SetRefIngEmbIdEntity rev3 = getAuditReader().find( SetRefIngEmbIdEntity.class, ing2_id, 3 ); - - assert rev1.getReference().equals( ed1 ); - assert rev2.getReference().equals( ed1 ); - assert rev3.getReference().equals( ed2 ); + public void testHistoryOfEdIng2(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + SetRefEdEmbIdEntity ed1 = em.find( SetRefEdEmbIdEntity.class, ed1_id ); + SetRefEdEmbIdEntity ed2 = em.find( SetRefEdEmbIdEntity.class, ed2_id ); + + SetRefIngEmbIdEntity rev1 = auditReader.find( SetRefIngEmbIdEntity.class, ing2_id, 1 ); + SetRefIngEmbIdEntity rev2 = auditReader.find( SetRefIngEmbIdEntity.class, ing2_id, 2 ); + SetRefIngEmbIdEntity rev3 = auditReader.find( SetRefIngEmbIdEntity.class, ing2_id, 3 ); + + assertEquals( ed1, rev1.getReference() ); + assertEquals( ed1, rev2.getReference() ); + assertEquals( ed2, rev3.getReference() ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/BasicSetWithMulId.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/BasicSetWithMulId.java index d977019aba23..5a10b54e3fad 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/BasicSetWithMulId.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/BasicSetWithMulId.java @@ -8,87 +8,79 @@ import java.util.Collections; import java.util.HashSet; import java.util.Set; -import jakarta.persistence.EntityManager; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.orm.test.envers.entities.ids.MulId; import org.hibernate.orm.test.envers.entities.onetomany.ids.SetRefEdMulIdEntity; import org.hibernate.orm.test.envers.entities.onetomany.ids.SetRefIngMulIdEntity; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; -import org.junit.Test; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Adam Warski (adam at warski dot org) */ -public class BasicSetWithMulId extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {SetRefEdMulIdEntity.class, SetRefIngMulIdEntity.class}) +public class BasicSetWithMulId { private MulId ed1_id; private MulId ed2_id; private MulId ing1_id; private MulId ing2_id; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {SetRefEdMulIdEntity.class, SetRefIngMulIdEntity.class}; - } - - @Test - @Priority(10) - public void initData() { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { ed1_id = new MulId( 0, 1 ); ed2_id = new MulId( 2, 3 ); ing2_id = new MulId( 4, 5 ); ing1_id = new MulId( 6, 7 ); - EntityManager em = getEntityManager(); - - SetRefEdMulIdEntity ed1 = new SetRefEdMulIdEntity( ed1_id.getId1(), ed1_id.getId2(), "data_ed_1" ); - SetRefEdMulIdEntity ed2 = new SetRefEdMulIdEntity( ed2_id.getId1(), ed2_id.getId2(), "data_ed_2" ); - - SetRefIngMulIdEntity ing1 = new SetRefIngMulIdEntity( ing1_id.getId1(), ing1_id.getId2(), "data_ing_1", ed1 ); - SetRefIngMulIdEntity ing2 = new SetRefIngMulIdEntity( ing2_id.getId1(), ing2_id.getId2(), "data_ing_2", ed1 ); - - // Revision 1 - em.getTransaction().begin(); - - em.persist( ed1 ); - em.persist( ed2 ); - - em.persist( ing1 ); - em.persist( ing2 ); - - em.getTransaction().commit(); + scope.inTransaction( em -> { + SetRefEdMulIdEntity ed1 = new SetRefEdMulIdEntity( ed1_id.getId1(), ed1_id.getId2(), "data_ed_1" ); + SetRefEdMulIdEntity ed2 = new SetRefEdMulIdEntity( ed2_id.getId1(), ed2_id.getId2(), "data_ed_2" ); - // Revision 2 - em.getTransaction().begin(); + SetRefIngMulIdEntity ing1 = new SetRefIngMulIdEntity( ing1_id.getId1(), ing1_id.getId2(), "data_ing_1", ed1 ); + SetRefIngMulIdEntity ing2 = new SetRefIngMulIdEntity( ing2_id.getId1(), ing2_id.getId2(), "data_ing_2", ed1 ); - ing1 = em.find( SetRefIngMulIdEntity.class, ing1_id ); - ed2 = em.find( SetRefEdMulIdEntity.class, ed2_id ); + em.persist( ed1 ); + em.persist( ed2 ); - ing1.setReference( ed2 ); + em.persist( ing1 ); + em.persist( ing2 ); + } ); - em.getTransaction().commit(); + scope.inTransaction( em -> { + SetRefIngMulIdEntity ing1 = em.find( SetRefIngMulIdEntity.class, ing1_id ); + SetRefEdMulIdEntity ed2 = em.find( SetRefEdMulIdEntity.class, ed2_id ); - // Revision 3 - em.getTransaction().begin(); + ing1.setReference( ed2 ); + } ); - ing2 = em.find( SetRefIngMulIdEntity.class, ing2_id ); - ed2 = em.find( SetRefEdMulIdEntity.class, ed2_id ); + scope.inTransaction( em -> { + SetRefIngMulIdEntity ing2 = em.find( SetRefIngMulIdEntity.class, ing2_id ); + SetRefEdMulIdEntity ed2 = em.find( SetRefEdMulIdEntity.class, ed2_id ); - ing2.setReference( ed2 ); - - em.getTransaction().commit(); + ing2.setReference( ed2 ); + } ); } @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2, 3 ).equals( getAuditReader().getRevisions( SetRefEdMulIdEntity.class, ed1_id ) ); - assert Arrays.asList( 1, 2, 3 ).equals( getAuditReader().getRevisions( SetRefEdMulIdEntity.class, ed2_id ) ); - - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( SetRefIngMulIdEntity.class, ing1_id ) ); - assert Arrays.asList( 1, 3 ).equals( getAuditReader().getRevisions( SetRefIngMulIdEntity.class, ing2_id ) ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1, 2, 3 ), auditReader.getRevisions( SetRefEdMulIdEntity.class, ed1_id ) ); + assertEquals( Arrays.asList( 1, 2, 3 ), auditReader.getRevisions( SetRefEdMulIdEntity.class, ed2_id ) ); + + assertEquals( Arrays.asList( 1, 2 ), auditReader.getRevisions( SetRefIngMulIdEntity.class, ing1_id ) ); + assertEquals( Arrays.asList( 1, 3 ), auditReader.getRevisions( SetRefIngMulIdEntity.class, ing2_id ) ); + } ); } private Set makeSet(T... objects) { @@ -101,58 +93,70 @@ private Set makeSet(T... objects) { } @Test - public void testHistoryOfEdId1() { - SetRefIngMulIdEntity ing1 = getEntityManager().find( SetRefIngMulIdEntity.class, ing1_id ); - SetRefIngMulIdEntity ing2 = getEntityManager().find( SetRefIngMulIdEntity.class, ing2_id ); - - SetRefEdMulIdEntity rev1 = getAuditReader().find( SetRefEdMulIdEntity.class, ed1_id, 1 ); - SetRefEdMulIdEntity rev2 = getAuditReader().find( SetRefEdMulIdEntity.class, ed1_id, 2 ); - SetRefEdMulIdEntity rev3 = getAuditReader().find( SetRefEdMulIdEntity.class, ed1_id, 3 ); - - assert rev1.getReffering().equals( makeSet( ing1, ing2 ) ); - assert rev2.getReffering().equals( makeSet( ing2 ) ); - assert rev3.getReffering().equals( Collections.EMPTY_SET ); + public void testHistoryOfEdId1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + SetRefIngMulIdEntity ing1 = em.find( SetRefIngMulIdEntity.class, ing1_id ); + SetRefIngMulIdEntity ing2 = em.find( SetRefIngMulIdEntity.class, ing2_id ); + + SetRefEdMulIdEntity rev1 = auditReader.find( SetRefEdMulIdEntity.class, ed1_id, 1 ); + SetRefEdMulIdEntity rev2 = auditReader.find( SetRefEdMulIdEntity.class, ed1_id, 2 ); + SetRefEdMulIdEntity rev3 = auditReader.find( SetRefEdMulIdEntity.class, ed1_id, 3 ); + + assertEquals( makeSet( ing1, ing2 ), rev1.getReffering() ); + assertEquals( makeSet( ing2 ), rev2.getReffering() ); + assertEquals( Collections.EMPTY_SET, rev3.getReffering() ); + } ); } @Test - public void testHistoryOfEdId2() { - SetRefIngMulIdEntity ing1 = getEntityManager().find( SetRefIngMulIdEntity.class, ing1_id ); - SetRefIngMulIdEntity ing2 = getEntityManager().find( SetRefIngMulIdEntity.class, ing2_id ); - - SetRefEdMulIdEntity rev1 = getAuditReader().find( SetRefEdMulIdEntity.class, ed2_id, 1 ); - SetRefEdMulIdEntity rev2 = getAuditReader().find( SetRefEdMulIdEntity.class, ed2_id, 2 ); - SetRefEdMulIdEntity rev3 = getAuditReader().find( SetRefEdMulIdEntity.class, ed2_id, 3 ); - - assert rev1.getReffering().equals( Collections.EMPTY_SET ); - assert rev2.getReffering().equals( makeSet( ing1 ) ); - assert rev3.getReffering().equals( makeSet( ing1, ing2 ) ); + public void testHistoryOfEdId2(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + SetRefIngMulIdEntity ing1 = em.find( SetRefIngMulIdEntity.class, ing1_id ); + SetRefIngMulIdEntity ing2 = em.find( SetRefIngMulIdEntity.class, ing2_id ); + + SetRefEdMulIdEntity rev1 = auditReader.find( SetRefEdMulIdEntity.class, ed2_id, 1 ); + SetRefEdMulIdEntity rev2 = auditReader.find( SetRefEdMulIdEntity.class, ed2_id, 2 ); + SetRefEdMulIdEntity rev3 = auditReader.find( SetRefEdMulIdEntity.class, ed2_id, 3 ); + + assertEquals( Collections.EMPTY_SET, rev1.getReffering() ); + assertEquals( makeSet( ing1 ), rev2.getReffering() ); + assertEquals( makeSet( ing1, ing2 ), rev3.getReffering() ); + } ); } @Test - public void testHistoryOfEdIng1() { - SetRefEdMulIdEntity ed1 = getEntityManager().find( SetRefEdMulIdEntity.class, ed1_id ); - SetRefEdMulIdEntity ed2 = getEntityManager().find( SetRefEdMulIdEntity.class, ed2_id ); - - SetRefIngMulIdEntity rev1 = getAuditReader().find( SetRefIngMulIdEntity.class, ing1_id, 1 ); - SetRefIngMulIdEntity rev2 = getAuditReader().find( SetRefIngMulIdEntity.class, ing1_id, 2 ); - SetRefIngMulIdEntity rev3 = getAuditReader().find( SetRefIngMulIdEntity.class, ing1_id, 3 ); - - assert rev1.getReference().equals( ed1 ); - assert rev2.getReference().equals( ed2 ); - assert rev3.getReference().equals( ed2 ); + public void testHistoryOfEdIng1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + SetRefEdMulIdEntity ed1 = em.find( SetRefEdMulIdEntity.class, ed1_id ); + SetRefEdMulIdEntity ed2 = em.find( SetRefEdMulIdEntity.class, ed2_id ); + + SetRefIngMulIdEntity rev1 = auditReader.find( SetRefIngMulIdEntity.class, ing1_id, 1 ); + SetRefIngMulIdEntity rev2 = auditReader.find( SetRefIngMulIdEntity.class, ing1_id, 2 ); + SetRefIngMulIdEntity rev3 = auditReader.find( SetRefIngMulIdEntity.class, ing1_id, 3 ); + + assertEquals( ed1, rev1.getReference() ); + assertEquals( ed2, rev2.getReference() ); + assertEquals( ed2, rev3.getReference() ); + } ); } @Test - public void testHistoryOfEdIng2() { - SetRefEdMulIdEntity ed1 = getEntityManager().find( SetRefEdMulIdEntity.class, ed1_id ); - SetRefEdMulIdEntity ed2 = getEntityManager().find( SetRefEdMulIdEntity.class, ed2_id ); - - SetRefIngMulIdEntity rev1 = getAuditReader().find( SetRefIngMulIdEntity.class, ing2_id, 1 ); - SetRefIngMulIdEntity rev2 = getAuditReader().find( SetRefIngMulIdEntity.class, ing2_id, 2 ); - SetRefIngMulIdEntity rev3 = getAuditReader().find( SetRefIngMulIdEntity.class, ing2_id, 3 ); - - assert rev1.getReference().equals( ed1 ); - assert rev2.getReference().equals( ed1 ); - assert rev3.getReference().equals( ed2 ); + public void testHistoryOfEdIng2(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + SetRefEdMulIdEntity ed1 = em.find( SetRefEdMulIdEntity.class, ed1_id ); + SetRefEdMulIdEntity ed2 = em.find( SetRefEdMulIdEntity.class, ed2_id ); + + SetRefIngMulIdEntity rev1 = auditReader.find( SetRefIngMulIdEntity.class, ing2_id, 1 ); + SetRefIngMulIdEntity rev2 = auditReader.find( SetRefIngMulIdEntity.class, ing2_id, 2 ); + SetRefIngMulIdEntity rev3 = auditReader.find( SetRefIngMulIdEntity.class, ing2_id, 3 ); + + assertEquals( ed1, rev1.getReference() ); + assertEquals( ed1, rev2.getReference() ); + assertEquals( ed2, rev3.getReference() ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/BasicSetWithNullsDelete.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/BasicSetWithNullsDelete.java index e228af47ec0a..b49b41f38cdb 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/BasicSetWithNullsDelete.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/BasicSetWithNullsDelete.java @@ -4,23 +4,29 @@ */ package org.hibernate.orm.test.envers.integration.onetomany; +import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.orm.test.envers.entities.onetomany.SetRefEdEntity; +import org.hibernate.orm.test.envers.entities.onetomany.SetRefIngEntity; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; + import java.util.Arrays; import java.util.Collections; import java.util.HashSet; import java.util.Set; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.onetomany.SetRefEdEntity; -import org.hibernate.orm.test.envers.entities.onetomany.SetRefIngEntity; -import org.junit.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNull; /** * @author Adam Warski (adam at warski dot org) */ -public class BasicSetWithNullsDelete extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {SetRefEdEntity.class, SetRefIngEntity.class}) +public class BasicSetWithNullsDelete { private Integer ed1_id; private Integer ed2_id; @@ -29,92 +35,89 @@ public class BasicSetWithNullsDelete extends BaseEnversJPAFunctionalTestCase { private Integer ing3_id; private Integer ing4_id; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {SetRefEdEntity.class, SetRefIngEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - SetRefEdEntity ed1 = new SetRefEdEntity( 1, "data_ed_1" ); - SetRefEdEntity ed2 = new SetRefEdEntity( 2, "data_ed_2" ); + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + SetRefEdEntity ed1 = new SetRefEdEntity( 1, "data_ed_1" ); + SetRefEdEntity ed2 = new SetRefEdEntity( 2, "data_ed_2" ); - SetRefIngEntity ing1 = new SetRefIngEntity( 3, "data_ing_1", ed1 ); - SetRefIngEntity ing2 = new SetRefIngEntity( 4, "data_ing_2", ed1 ); - SetRefIngEntity ing3 = new SetRefIngEntity( 5, "data_ing_3", ed1 ); - SetRefIngEntity ing4 = new SetRefIngEntity( 6, "data_ing_4", ed1 ); + SetRefIngEntity ing1 = new SetRefIngEntity( 3, "data_ing_1", ed1 ); + SetRefIngEntity ing2 = new SetRefIngEntity( 4, "data_ing_2", ed1 ); + SetRefIngEntity ing3 = new SetRefIngEntity( 5, "data_ing_3", ed1 ); + SetRefIngEntity ing4 = new SetRefIngEntity( 6, "data_ing_4", ed1 ); - // Revision 1 - em.getTransaction().begin(); + // Revision 1 + em.getTransaction().begin(); - em.persist( ed1 ); - em.persist( ed2 ); + em.persist( ed1 ); + em.persist( ed2 ); - em.persist( ing1 ); - em.persist( ing2 ); - em.persist( ing3 ); - em.persist( ing4 ); + em.persist( ing1 ); + em.persist( ing2 ); + em.persist( ing3 ); + em.persist( ing4 ); - em.getTransaction().commit(); + em.getTransaction().commit(); - // Revision 2 - em.getTransaction().begin(); + // Revision 2 + em.getTransaction().begin(); - ing1 = em.find( SetRefIngEntity.class, ing1.getId() ); + ing1 = em.find( SetRefIngEntity.class, ing1.getId() ); - ing1.setReference( null ); + ing1.setReference( null ); - em.getTransaction().commit(); + em.getTransaction().commit(); - // Revision 3 - em.getTransaction().begin(); + // Revision 3 + em.getTransaction().begin(); - ing2 = em.find( SetRefIngEntity.class, ing2.getId() ); - em.remove( ing2 ); + ing2 = em.find( SetRefIngEntity.class, ing2.getId() ); + em.remove( ing2 ); - em.getTransaction().commit(); + em.getTransaction().commit(); - // Revision 4 - em.getTransaction().begin(); + // Revision 4 + em.getTransaction().begin(); - ing3 = em.find( SetRefIngEntity.class, ing3.getId() ); - ed2 = em.find( SetRefEdEntity.class, ed2.getId() ); - ing3.setReference( ed2 ); + ing3 = em.find( SetRefIngEntity.class, ing3.getId() ); + ed2 = em.find( SetRefEdEntity.class, ed2.getId() ); + ing3.setReference( ed2 ); - em.getTransaction().commit(); - // Revision 5 - em.getTransaction().begin(); + em.getTransaction().commit(); + // Revision 5 + em.getTransaction().begin(); - ing4 = em.find( SetRefIngEntity.class, ing4.getId() ); - ed1 = em.find( SetRefEdEntity.class, ed1.getId() ); - em.remove( ed1 ); - ing4.setReference( null ); + ing4 = em.find( SetRefIngEntity.class, ing4.getId() ); + ed1 = em.find( SetRefEdEntity.class, ed1.getId() ); + em.remove( ed1 ); + ing4.setReference( null ); - em.getTransaction().commit(); + em.getTransaction().commit(); - // + // - ed1_id = ed1.getId(); - ed2_id = ed2.getId(); + ed1_id = ed1.getId(); + ed2_id = ed2.getId(); - ing1_id = ing1.getId(); - ing2_id = ing2.getId(); - ing3_id = ing3.getId(); - ing4_id = ing4.getId(); + ing1_id = ing1.getId(); + ing2_id = ing2.getId(); + ing3_id = ing3.getId(); + ing4_id = ing4.getId(); + } ); } @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2, 3, 4, 5 ).equals( getAuditReader().getRevisions( SetRefEdEntity.class, ed1_id ) ); - assert Arrays.asList( 1, 4 ).equals( getAuditReader().getRevisions( SetRefEdEntity.class, ed2_id ) ); - - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( SetRefIngEntity.class, ing1_id ) ); - assert Arrays.asList( 1, 3 ).equals( getAuditReader().getRevisions( SetRefIngEntity.class, ing2_id ) ); - assert Arrays.asList( 1, 4 ).equals( getAuditReader().getRevisions( SetRefIngEntity.class, ing3_id ) ); - assert Arrays.asList( 1, 5 ).equals( getAuditReader().getRevisions( SetRefIngEntity.class, ing4_id ) ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1, 2, 3, 4, 5 ), auditReader.getRevisions( SetRefEdEntity.class, ed1_id ) ); + assertEquals( Arrays.asList( 1, 4 ), auditReader.getRevisions( SetRefEdEntity.class, ed2_id ) ); + + assertEquals( Arrays.asList( 1, 2 ), auditReader.getRevisions( SetRefIngEntity.class, ing1_id ) ); + assertEquals( Arrays.asList( 1, 3 ), auditReader.getRevisions( SetRefIngEntity.class, ing2_id ) ); + assertEquals( Arrays.asList( 1, 4 ), auditReader.getRevisions( SetRefIngEntity.class, ing3_id ) ); + assertEquals( Arrays.asList( 1, 5 ), auditReader.getRevisions( SetRefIngEntity.class, ing4_id ) ); + } ); } private Set makeSet(T... objects) { @@ -127,108 +130,126 @@ private Set makeSet(T... objects) { } @Test - public void testHistoryOfEdId1() { - SetRefIngEntity ing1 = getEntityManager().find( SetRefIngEntity.class, ing1_id ); - SetRefIngEntity ing2 = new SetRefIngEntity( 4, "data_ing_2", new SetRefEdEntity( 1, "data_ed_1" ) ); - SetRefIngEntity ing3 = getEntityManager().find( SetRefIngEntity.class, ing3_id ); - SetRefIngEntity ing4 = getEntityManager().find( SetRefIngEntity.class, ing4_id ); - - SetRefEdEntity rev1 = getAuditReader().find( SetRefEdEntity.class, ed1_id, 1 ); - SetRefEdEntity rev2 = getAuditReader().find( SetRefEdEntity.class, ed1_id, 2 ); - SetRefEdEntity rev3 = getAuditReader().find( SetRefEdEntity.class, ed1_id, 3 ); - SetRefEdEntity rev4 = getAuditReader().find( SetRefEdEntity.class, ed1_id, 4 ); - SetRefEdEntity rev5 = getAuditReader().find( SetRefEdEntity.class, ed1_id, 5 ); - - assert rev1.getReffering().equals( makeSet( ing1, ing2, ing3, ing4 ) ); - assert rev2.getReffering().equals( makeSet( ing2, ing3, ing4 ) ); - assert rev3.getReffering().equals( makeSet( ing3, ing4 ) ); - assert rev4.getReffering().equals( makeSet( ing4 ) ); - assert rev5 == null; + public void testHistoryOfEdId1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + SetRefIngEntity ing1 = em.find( SetRefIngEntity.class, ing1_id ); + SetRefIngEntity ing2 = new SetRefIngEntity( 4, "data_ing_2", new SetRefEdEntity( 1, "data_ed_1" ) ); + SetRefIngEntity ing3 = em.find( SetRefIngEntity.class, ing3_id ); + SetRefIngEntity ing4 = em.find( SetRefIngEntity.class, ing4_id ); + + SetRefEdEntity rev1 = auditReader.find( SetRefEdEntity.class, ed1_id, 1 ); + SetRefEdEntity rev2 = auditReader.find( SetRefEdEntity.class, ed1_id, 2 ); + SetRefEdEntity rev3 = auditReader.find( SetRefEdEntity.class, ed1_id, 3 ); + SetRefEdEntity rev4 = auditReader.find( SetRefEdEntity.class, ed1_id, 4 ); + SetRefEdEntity rev5 = auditReader.find( SetRefEdEntity.class, ed1_id, 5 ); + + assertEquals( makeSet( ing1, ing2, ing3, ing4 ), rev1.getReffering() ); + assertEquals( makeSet( ing2, ing3, ing4 ), rev2.getReffering() ); + assertEquals( makeSet( ing3, ing4 ), rev3.getReffering() ); + assertEquals( makeSet( ing4 ), rev4.getReffering() ); + assertNull( rev5 ); + } ); } @Test - public void testHistoryOfEdId2() { - SetRefIngEntity ing3 = getEntityManager().find( SetRefIngEntity.class, ing3_id ); - - SetRefEdEntity rev1 = getAuditReader().find( SetRefEdEntity.class, ed2_id, 1 ); - SetRefEdEntity rev2 = getAuditReader().find( SetRefEdEntity.class, ed2_id, 2 ); - SetRefEdEntity rev3 = getAuditReader().find( SetRefEdEntity.class, ed2_id, 3 ); - SetRefEdEntity rev4 = getAuditReader().find( SetRefEdEntity.class, ed2_id, 4 ); - SetRefEdEntity rev5 = getAuditReader().find( SetRefEdEntity.class, ed2_id, 5 ); - - assert rev1.getReffering().equals( Collections.EMPTY_SET ); - assert rev2.getReffering().equals( Collections.EMPTY_SET ); - assert rev3.getReffering().equals( Collections.EMPTY_SET ); - assert rev4.getReffering().equals( makeSet( ing3 ) ); - assert rev5.getReffering().equals( makeSet( ing3 ) ); + public void testHistoryOfEdId2(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + SetRefIngEntity ing3 = em.find( SetRefIngEntity.class, ing3_id ); + + SetRefEdEntity rev1 = auditReader.find( SetRefEdEntity.class, ed2_id, 1 ); + SetRefEdEntity rev2 = auditReader.find( SetRefEdEntity.class, ed2_id, 2 ); + SetRefEdEntity rev3 = auditReader.find( SetRefEdEntity.class, ed2_id, 3 ); + SetRefEdEntity rev4 = auditReader.find( SetRefEdEntity.class, ed2_id, 4 ); + SetRefEdEntity rev5 = auditReader.find( SetRefEdEntity.class, ed2_id, 5 ); + + assertEquals( Collections.EMPTY_SET, rev1.getReffering() ); + assertEquals( Collections.EMPTY_SET, rev2.getReffering() ); + assertEquals( Collections.EMPTY_SET, rev3.getReffering() ); + assertEquals( makeSet( ing3 ), rev4.getReffering() ); + assertEquals( makeSet( ing3 ), rev5.getReffering() ); + } ); } @Test - public void testHistoryOfEdIng1() { - SetRefEdEntity ed1 = new SetRefEdEntity( 1, "data_ed_1" ); - - SetRefIngEntity rev1 = getAuditReader().find( SetRefIngEntity.class, ing1_id, 1 ); - SetRefIngEntity rev2 = getAuditReader().find( SetRefIngEntity.class, ing1_id, 2 ); - SetRefIngEntity rev3 = getAuditReader().find( SetRefIngEntity.class, ing1_id, 3 ); - SetRefIngEntity rev4 = getAuditReader().find( SetRefIngEntity.class, ing1_id, 4 ); - SetRefIngEntity rev5 = getAuditReader().find( SetRefIngEntity.class, ing1_id, 5 ); - - assert rev1.getReference().equals( ed1 ); - assert rev2.getReference() == null; - assert rev3.getReference() == null; - assert rev4.getReference() == null; - assert rev5.getReference() == null; + public void testHistoryOfEdIng1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + SetRefEdEntity ed1 = new SetRefEdEntity( 1, "data_ed_1" ); + + SetRefIngEntity rev1 = auditReader.find( SetRefIngEntity.class, ing1_id, 1 ); + SetRefIngEntity rev2 = auditReader.find( SetRefIngEntity.class, ing1_id, 2 ); + SetRefIngEntity rev3 = auditReader.find( SetRefIngEntity.class, ing1_id, 3 ); + SetRefIngEntity rev4 = auditReader.find( SetRefIngEntity.class, ing1_id, 4 ); + SetRefIngEntity rev5 = auditReader.find( SetRefIngEntity.class, ing1_id, 5 ); + + assertEquals( ed1, rev1.getReference() ); + assertNull( rev2.getReference() ); + assertNull( rev3.getReference() ); + assertNull( rev4.getReference() ); + assertNull( rev5.getReference() ); + } ); } @Test - public void testHistoryOfEdIng2() { - SetRefEdEntity ed1 = new SetRefEdEntity( 1, "data_ed_1" ); - - SetRefIngEntity rev1 = getAuditReader().find( SetRefIngEntity.class, ing2_id, 1 ); - SetRefIngEntity rev2 = getAuditReader().find( SetRefIngEntity.class, ing2_id, 2 ); - SetRefIngEntity rev3 = getAuditReader().find( SetRefIngEntity.class, ing2_id, 3 ); - SetRefIngEntity rev4 = getAuditReader().find( SetRefIngEntity.class, ing2_id, 4 ); - SetRefIngEntity rev5 = getAuditReader().find( SetRefIngEntity.class, ing2_id, 5 ); - - assert rev1.getReference().equals( ed1 ); - assert rev2.getReference().equals( ed1 ); - assert rev3 == null; - assert rev4 == null; - assert rev5 == null; + public void testHistoryOfEdIng2(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + SetRefEdEntity ed1 = new SetRefEdEntity( 1, "data_ed_1" ); + + SetRefIngEntity rev1 = auditReader.find( SetRefIngEntity.class, ing2_id, 1 ); + SetRefIngEntity rev2 = auditReader.find( SetRefIngEntity.class, ing2_id, 2 ); + SetRefIngEntity rev3 = auditReader.find( SetRefIngEntity.class, ing2_id, 3 ); + SetRefIngEntity rev4 = auditReader.find( SetRefIngEntity.class, ing2_id, 4 ); + SetRefIngEntity rev5 = auditReader.find( SetRefIngEntity.class, ing2_id, 5 ); + + assertEquals( ed1, rev1.getReference() ); + assertEquals( ed1, rev2.getReference() ); + assertNull( rev3 ); + assertNull( rev4 ); + assertNull( rev5 ); + } ); } @Test - public void testHistoryOfEdIng3() { - SetRefEdEntity ed1 = new SetRefEdEntity( 1, "data_ed_1" ); - SetRefEdEntity ed2 = new SetRefEdEntity( 2, "data_ed_2" ); - - SetRefIngEntity rev1 = getAuditReader().find( SetRefIngEntity.class, ing3_id, 1 ); - SetRefIngEntity rev2 = getAuditReader().find( SetRefIngEntity.class, ing3_id, 2 ); - SetRefIngEntity rev3 = getAuditReader().find( SetRefIngEntity.class, ing3_id, 3 ); - SetRefIngEntity rev4 = getAuditReader().find( SetRefIngEntity.class, ing3_id, 4 ); - SetRefIngEntity rev5 = getAuditReader().find( SetRefIngEntity.class, ing3_id, 5 ); - - assert rev1.getReference().equals( ed1 ); - assert rev2.getReference().equals( ed1 ); - assert rev3.getReference().equals( ed1 ); - assert rev4.getReference().equals( ed2 ); - assert rev5.getReference().equals( ed2 ); + public void testHistoryOfEdIng3(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + SetRefEdEntity ed1 = new SetRefEdEntity( 1, "data_ed_1" ); + SetRefEdEntity ed2 = new SetRefEdEntity( 2, "data_ed_2" ); + + SetRefIngEntity rev1 = auditReader.find( SetRefIngEntity.class, ing3_id, 1 ); + SetRefIngEntity rev2 = auditReader.find( SetRefIngEntity.class, ing3_id, 2 ); + SetRefIngEntity rev3 = auditReader.find( SetRefIngEntity.class, ing3_id, 3 ); + SetRefIngEntity rev4 = auditReader.find( SetRefIngEntity.class, ing3_id, 4 ); + SetRefIngEntity rev5 = auditReader.find( SetRefIngEntity.class, ing3_id, 5 ); + + assertEquals( ed1, rev1.getReference() ); + assertEquals( ed1, rev2.getReference() ); + assertEquals( ed1, rev3.getReference() ); + assertEquals( ed2, rev4.getReference() ); + assertEquals( ed2, rev5.getReference() ); + } ); } @Test - public void testHistoryOfEdIng4() { - SetRefEdEntity ed1 = new SetRefEdEntity( 1, "data_ed_1" ); - - SetRefIngEntity rev1 = getAuditReader().find( SetRefIngEntity.class, ing4_id, 1 ); - SetRefIngEntity rev2 = getAuditReader().find( SetRefIngEntity.class, ing4_id, 2 ); - SetRefIngEntity rev3 = getAuditReader().find( SetRefIngEntity.class, ing4_id, 3 ); - SetRefIngEntity rev4 = getAuditReader().find( SetRefIngEntity.class, ing4_id, 4 ); - SetRefIngEntity rev5 = getAuditReader().find( SetRefIngEntity.class, ing4_id, 5 ); - - assert rev1.getReference().equals( ed1 ); - assert rev2.getReference().equals( ed1 ); - assert rev3.getReference().equals( ed1 ); - assert rev4.getReference().equals( ed1 ); - assert rev5.getReference() == null; + public void testHistoryOfEdIng4(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + SetRefEdEntity ed1 = new SetRefEdEntity( 1, "data_ed_1" ); + + SetRefIngEntity rev1 = auditReader.find( SetRefIngEntity.class, ing4_id, 1 ); + SetRefIngEntity rev2 = auditReader.find( SetRefIngEntity.class, ing4_id, 2 ); + SetRefIngEntity rev3 = auditReader.find( SetRefIngEntity.class, ing4_id, 3 ); + SetRefIngEntity rev4 = auditReader.find( SetRefIngEntity.class, ing4_id, 4 ); + SetRefIngEntity rev5 = auditReader.find( SetRefIngEntity.class, ing4_id, 5 ); + + assertEquals( ed1, rev1.getReference() ); + assertEquals( ed1, rev2.getReference() ); + assertEquals( ed1, rev3.getReference() ); + assertEquals( ed1, rev4.getReference() ); + assertNull( rev5.getReference() ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/BasicWhereTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/BasicWhereTest.java index 3dbb0fc6e7bf..9bfabf24cc6d 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/BasicWhereTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/BasicWhereTest.java @@ -9,15 +9,16 @@ import org.hibernate.annotations.SQLRestriction; import org.hibernate.community.dialect.AltibaseDialect; import org.hibernate.envers.AuditJoinTable; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.Audited; import org.hibernate.envers.RelationTargetAuditMode; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; - +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; +import org.hibernate.testing.orm.junit.Jpa; import org.hibernate.testing.orm.junit.SkipForDialect; -import org.hibernate.testing.transaction.TransactionUtil; -import org.junit.Test; +import org.junit.jupiter.api.Test; import jakarta.persistence.DiscriminatorColumn; import jakarta.persistence.DiscriminatorType; @@ -30,7 +31,7 @@ import jakarta.persistence.OneToMany; import jakarta.persistence.Table; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; /** @@ -40,33 +41,29 @@ */ @JiraKey("HHH-9432") @SkipForDialect( dialectClass = AltibaseDialect.class, reason = "'TYPE' is not escaped even though autoQuoteKeywords is enabled") -public class BasicWhereTest extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = { + BasicWhereTest.EntityA.class, + BasicWhereTest.EntityB.class, + BasicWhereTest.EntityC.class, + BasicWhereTest.EntityX.class, + BasicWhereTest.EntityY.class, + BasicWhereTest.EntityZ.class +}) +public class BasicWhereTest { private Integer aId; private Integer xId; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { - EntityA.class, - EntityB.class, - EntityC.class, - EntityX.class, - EntityY.class, - EntityZ.class - }; - } - - @Test - @Priority(10) - public void initData() { - aId = TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + aId = scope.fromTransaction( entityManager -> { final EntityA a = new EntityA(); a.setName( "a" ); entityManager.persist( a ); return a.getId(); } ); - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { + scope.inTransaction( entityManager -> { final EntityA a = entityManager.find( EntityA.class, aId ); final EntityC c = new EntityC(); c.setName( "c" ); @@ -75,14 +72,14 @@ public void initData() { entityManager.merge( a ); } ); - xId = TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { + xId = scope.fromTransaction( entityManager -> { final EntityX x = new EntityX(); x.setName( "x" ); entityManager.persist( x ); return x.getId(); } ); - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { + scope.inTransaction( entityManager -> { final EntityX x = entityManager.find( EntityX.class, xId ); final EntityZ z = new EntityZ(); z.setName( "z" ); @@ -93,15 +90,21 @@ public void initData() { } @Test - public void testWherePredicateWithAuditJoinTable() { - final EntityA a = getAuditReader().find( EntityA.class, aId, 2 ); - assertEquals( 1, a.getAllMyC().size() ); + public void testWherePredicateWithAuditJoinTable(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + final EntityA a = auditReader.find( EntityA.class, aId, 2 ); + assertEquals( 1, a.getAllMyC().size() ); + } ); } @Test - public void testWherePredicateWithoutAuditJoinTable() { - final EntityX x = getAuditReader().find( EntityX.class, xId, 4 ); - assertEquals( 1, x.getAllMyZ().size() ); + public void testWherePredicateWithoutAuditJoinTable(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + final EntityX x = auditReader.find( EntityX.class, xId, 4 ); + assertEquals( 1, x.getAllMyZ().size() ); + } ); } @Audited diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/BidirectionalMapKey.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/BidirectionalMapKey.java index d82baeed24fc..2b00b697dddc 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/BidirectionalMapKey.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/BidirectionalMapKey.java @@ -5,87 +5,84 @@ package org.hibernate.orm.test.envers.integration.onetomany; import java.util.Arrays; -import jakarta.persistence.EntityManager; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.orm.test.envers.tools.TestTools; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; -import org.junit.Test; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Adam Warski (adam at warski dot org) */ -public class BidirectionalMapKey extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {RefIngMapKeyEntity.class, RefEdMapKeyEntity.class}) +public class BidirectionalMapKey { private Integer ed_id; private Integer ing1_id; private Integer ing2_id; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {RefIngMapKeyEntity.class, RefEdMapKeyEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Revision 1 (intialy 1 relation: ing1 -> ed) - em.getTransaction().begin(); - - RefEdMapKeyEntity ed = new RefEdMapKeyEntity(); + scope.inTransaction( em -> { + RefEdMapKeyEntity ed = new RefEdMapKeyEntity(); - em.persist( ed ); + em.persist( ed ); - RefIngMapKeyEntity ing1 = new RefIngMapKeyEntity(); - ing1.setData( "a" ); - ing1.setReference( ed ); + RefIngMapKeyEntity ing1 = new RefIngMapKeyEntity(); + ing1.setData( "a" ); + ing1.setReference( ed ); - RefIngMapKeyEntity ing2 = new RefIngMapKeyEntity(); - ing2.setData( "b" ); + RefIngMapKeyEntity ing2 = new RefIngMapKeyEntity(); + ing2.setData( "b" ); - em.persist( ing1 ); - em.persist( ing2 ); + em.persist( ing1 ); + em.persist( ing2 ); - em.getTransaction().commit(); + ed_id = ed.getId(); + ing1_id = ing1.getId(); + ing2_id = ing2.getId(); + } ); // Revision 2 (adding second relation: ing2 -> ed) - em.getTransaction().begin(); - - ed = em.find( RefEdMapKeyEntity.class, ed.getId() ); - ing2 = em.find( RefIngMapKeyEntity.class, ing2.getId() ); + scope.inTransaction( em -> { + RefEdMapKeyEntity ed = em.find( RefEdMapKeyEntity.class, ed_id ); + RefIngMapKeyEntity ing2 = em.find( RefIngMapKeyEntity.class, ing2_id ); - ing2.setReference( ed ); - - em.getTransaction().commit(); - - // - - ed_id = ed.getId(); - - ing1_id = ing1.getId(); - ing2_id = ing2.getId(); + ing2.setReference( ed ); + } ); } @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( RefEdMapKeyEntity.class, ed_id ) ); - - assert Arrays.asList( 1 ).equals( getAuditReader().getRevisions( RefIngMapKeyEntity.class, ing1_id ) ); - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( RefIngMapKeyEntity.class, ing2_id ) ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1, 2 ), auditReader.getRevisions( RefEdMapKeyEntity.class, ed_id ) ); + + assertEquals( Arrays.asList( 1 ), auditReader.getRevisions( RefIngMapKeyEntity.class, ing1_id ) ); + assertEquals( Arrays.asList( 1, 2 ), auditReader.getRevisions( RefIngMapKeyEntity.class, ing2_id ) ); + } ); } @Test - public void testHistoryOfEd() { - RefIngMapKeyEntity ing1 = getEntityManager().find( RefIngMapKeyEntity.class, ing1_id ); - RefIngMapKeyEntity ing2 = getEntityManager().find( RefIngMapKeyEntity.class, ing2_id ); - - RefEdMapKeyEntity rev1 = getAuditReader().find( RefEdMapKeyEntity.class, ed_id, 1 ); - RefEdMapKeyEntity rev2 = getAuditReader().find( RefEdMapKeyEntity.class, ed_id, 2 ); - - assert rev1.getIdmap().equals( TestTools.makeMap( "a", ing1 ) ); - assert rev2.getIdmap().equals( TestTools.makeMap( "a", ing1, "b", ing2 ) ); + public void testHistoryOfEd(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + RefIngMapKeyEntity ing1 = em.find( RefIngMapKeyEntity.class, ing1_id ); + RefIngMapKeyEntity ing2 = em.find( RefIngMapKeyEntity.class, ing2_id ); + + RefEdMapKeyEntity rev1 = auditReader.find( RefEdMapKeyEntity.class, ed_id, 1 ); + RefEdMapKeyEntity rev2 = auditReader.find( RefEdMapKeyEntity.class, ed_id, 2 ); + + assertEquals( TestTools.makeMap( "a", ing1 ), rev1.getIdmap() ); + assertEquals( TestTools.makeMap( "a", ing1, "b", ing2 ), rev2.getIdmap() ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/IndexColumnListTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/IndexColumnListTest.java index e18f168bf441..da5c48e1d03c 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/IndexColumnListTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/IndexColumnListTest.java @@ -14,103 +14,116 @@ import jakarta.persistence.OrderColumn; import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; - +import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; -import org.hibernate.testing.transaction.TransactionUtil; -import org.junit.Test; +import org.hibernate.testing.orm.junit.Jpa; + +import org.junit.jupiter.api.Test; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Chris Cranford */ @JiraKey(value = "HHH-7940") -public class IndexColumnListTest extends BaseEnversJPAFunctionalTestCase { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { Parent.class, Child.class }; - } - - @Test - @Priority(10) - public void initData() { +@EnversTest +@Jpa(annotatedClasses = {IndexColumnListTest.Parent.class, IndexColumnListTest.Child.class}) +public class IndexColumnListTest { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Revision 1 - Create indexed entries. - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { + scope.inTransaction( em -> { Parent p = new Parent( 1 ); p.addChild( new Child( 1, "child1" ) ); p.addChild( new Child( 2, "child2" ) ); - entityManager.persist( p ); - p.getChildren().forEach( entityManager::persist ); + em.persist( p ); + p.getChildren().forEach( em::persist ); } ); // Revision 2 - remove an indexed entry, resetting positions. - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - final Parent p = entityManager.find( Parent.class, 1 ); + scope.inTransaction( em -> { + final Parent p = em.find( Parent.class, 1 ); // should remove child with id 1 p.removeChild( p.getChildren().get( 0 ) ); - entityManager.merge( p ); + em.merge( p ); } ); // Revision 3 - add new indexed entity to reset positions - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - final Parent p = entityManager.find( Parent.class, 1 ); + scope.inTransaction( em -> { + final Parent p = em.find( Parent.class, 1 ); // add child with id 3 final Child child = new Child( 3, "child3" ); p.getChildren().add( 0, child ); child.setParent( p ); - entityManager.persist( child ); - entityManager.merge( p ); + em.persist( child ); + em.merge( p ); } ); // Revision 4 - remove all children - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - final Parent p = entityManager.find( Parent.class, 1 ); + scope.inTransaction( em -> { + final Parent p = em.find( Parent.class, 1 ); while ( !p.getChildren().isEmpty() ) { Child child = p.getChildren().get( 0 ); p.removeChild( child ); - entityManager.remove( child ); + em.remove( child ); } - entityManager.merge( p ); + em.merge( p ); } ); } @Test - public void testRevisionCounts() { - assertEquals( Arrays.asList( 1, 2, 3, 4 ), getAuditReader().getRevisions( Parent.class, 1 ) ); - assertEquals( Arrays.asList( 1, 2 ), getAuditReader().getRevisions( Child.class, 1 ) ); - assertEquals( Arrays.asList( 1, 2, 3, 4 ), getAuditReader().getRevisions( Child.class, 2 ) ); - assertEquals( Arrays.asList( 3, 4 ), getAuditReader().getRevisions( Child.class, 3 ) ); + public void testRevisionCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1, 2, 3, 4 ), auditReader.getRevisions( Parent.class, 1 ) ); + assertEquals( Arrays.asList( 1, 2 ), auditReader.getRevisions( Child.class, 1 ) ); + assertEquals( Arrays.asList( 1, 2, 3, 4 ), auditReader.getRevisions( Child.class, 2 ) ); + assertEquals( Arrays.asList( 3, 4 ), auditReader.getRevisions( Child.class, 3 ) ); + } ); } @Test - public void testIndexedCollectionRev1() { - final Parent p = getAuditReader().find( Parent.class, 1, 1 ); - assertEquals( 2, p.getChildren().size() ); - assertEquals( new Child( 1, "child1", p ), p.getChildren().get( 0 ) ); - assertEquals( new Child( 2, "child2", p ), p.getChildren().get( 1 ) ); + public void testIndexedCollectionRev1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + var auditReader = AuditReaderFactory.get( em ); + final Parent p = auditReader.find( Parent.class, 1, 1 ); + assertEquals( 2, p.getChildren().size() ); + assertEquals( new Child( 1, "child1", p ), p.getChildren().get( 0 ) ); + assertEquals( new Child( 2, "child2", p ), p.getChildren().get( 1 ) ); + } ); } @Test - public void testIndexedCollectionRev2() { - final Parent p = getAuditReader().find( Parent.class, 1, 2 ); - assertEquals( 1, p.getChildren().size() ); - assertEquals( new Child( 2, "child2", p ), p.getChildren().get( 0 ) ); + public void testIndexedCollectionRev2(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + var auditReader = AuditReaderFactory.get( em ); + final Parent p = auditReader.find( Parent.class, 1, 2 ); + assertEquals( 1, p.getChildren().size() ); + assertEquals( new Child( 2, "child2", p ), p.getChildren().get( 0 ) ); + } ); } @Test - public void testIndexedCollectionRev3() { - final Parent p = getAuditReader().find( Parent.class, 1, 3 ); - assertEquals( 2, p.getChildren().size() ); - assertEquals( new Child( 3, "child3", p ), p.getChildren().get( 0 ) ); - assertEquals( new Child( 2, "child2", p ), p.getChildren().get( 1 ) ); + public void testIndexedCollectionRev3(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + var auditReader = AuditReaderFactory.get( em ); + final Parent p = auditReader.find( Parent.class, 1, 3 ); + assertEquals( 2, p.getChildren().size() ); + assertEquals( new Child( 3, "child3", p ), p.getChildren().get( 0 ) ); + assertEquals( new Child( 2, "child2", p ), p.getChildren().get( 1 ) ); + } ); } @Test - public void testIndexedCollectionRev4() { - final Parent p = getAuditReader().find( Parent.class, 1, 4 ); - assertEquals( 0, p.getChildren().size() ); + public void testIndexedCollectionRev4(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + var auditReader = AuditReaderFactory.get( em ); + final Parent p = auditReader.find( Parent.class, 1, 4 ); + assertEquals( 0, p.getChildren().size() ); + } ); } @Audited diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/InverseSideChanges.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/InverseSideChanges.java index 7b25bf8e7fdd..e13d1f823e94 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/InverseSideChanges.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/InverseSideChanges.java @@ -7,82 +7,74 @@ import java.util.Arrays; import java.util.Collections; import java.util.HashSet; -import jakarta.persistence.EntityManager; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.orm.test.envers.entities.onetomany.SetRefEdEntity; import org.hibernate.orm.test.envers.entities.onetomany.SetRefIngEntity; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; -import org.junit.Test; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Adam Warski (adam at warski dot org) */ -public class InverseSideChanges extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {SetRefEdEntity.class, SetRefIngEntity.class}) +public class InverseSideChanges { private Integer ed1_id; - private Integer ing1_id; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {SetRefEdEntity.class, SetRefIngEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { SetRefEdEntity ed1 = new SetRefEdEntity( 1, "data_ed_1" ); - SetRefIngEntity ing1 = new SetRefIngEntity( 3, "data_ing_1" ); // Revision 1 - em.getTransaction().begin(); - - em.persist( ed1 ); - - em.getTransaction().commit(); + scope.inTransaction( em -> { + em.persist( ed1 ); + } ); // Revision 2 - - em.getTransaction().begin(); - - ed1 = em.find( SetRefEdEntity.class, ed1.getId() ); - - em.persist( ing1 ); - - ed1.setReffering( new HashSet() ); - ed1.getReffering().add( ing1 ); - - em.getTransaction().commit(); - - // + scope.inTransaction( em -> { + SetRefEdEntity ed = em.find( SetRefEdEntity.class, ed1.getId() ); + em.persist( ing1 ); + ed.setReffering( new HashSet() ); + ed.getReffering().add( ing1 ); + } ); ed1_id = ed1.getId(); - ing1_id = ing1.getId(); } @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1 ).equals( getAuditReader().getRevisions( SetRefEdEntity.class, ed1_id ) ); - - assert Arrays.asList( 2 ).equals( getAuditReader().getRevisions( SetRefIngEntity.class, ing1_id ) ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1 ), auditReader.getRevisions( SetRefEdEntity.class, ed1_id ) ); + assertEquals( Arrays.asList( 2 ), auditReader.getRevisions( SetRefIngEntity.class, ing1_id ) ); + } ); } @Test - public void testHistoryOfEdId1() { - SetRefEdEntity rev1 = getAuditReader().find( SetRefEdEntity.class, ed1_id, 1 ); - - assert rev1.getReffering().equals( Collections.EMPTY_SET ); + public void testHistoryOfEdId1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + var auditReader = AuditReaderFactory.get( em ); + SetRefEdEntity rev1 = auditReader.find( SetRefEdEntity.class, ed1_id, 1 ); + assertEquals( Collections.EMPTY_SET, rev1.getReffering() ); + } ); } @Test - public void testHistoryOfEdIng1() { - SetRefIngEntity rev2 = getAuditReader().find( SetRefIngEntity.class, ing1_id, 2 ); - - assert rev2.getReference() == null; + public void testHistoryOfEdIng1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + var auditReader = AuditReaderFactory.get( em ); + SetRefIngEntity rev2 = auditReader.find( SetRefIngEntity.class, ing1_id, 2 ); + assertEquals( null, rev2.getReference() ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/OrderColumnListTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/OrderColumnListTest.java index 2fec5e18d1fb..c720ac8225a4 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/OrderColumnListTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/OrderColumnListTest.java @@ -15,102 +15,116 @@ import jakarta.persistence.OrderColumn; import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; -import org.hibernate.testing.transaction.TransactionUtil; -import org.junit.Test; +import org.hibernate.testing.orm.junit.Jpa; -import static org.junit.Assert.assertEquals; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Chris Cranford */ @JiraKey(value = "HHH-7940") -public class OrderColumnListTest extends BaseEnversJPAFunctionalTestCase { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { Parent.class, Child.class }; - } - - @Test - @Priority(10) - public void initData() { +@EnversTest +@Jpa(annotatedClasses = {OrderColumnListTest.Parent.class, OrderColumnListTest.Child.class}) +public class OrderColumnListTest { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Revision 1 - Create indexed entries. - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { + scope.inTransaction( em -> { Parent p = new Parent( 1 ); p.addChild( new Child( 1, "child1" ) ); p.addChild( new Child( 2, "child2" ) ); - entityManager.persist( p ); - p.getChildren().forEach( entityManager::persist ); + em.persist( p ); + p.getChildren().forEach( em::persist ); } ); // Revision 2 - remove an indexed entry, resetting positions. - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - final Parent p = entityManager.find( Parent.class, 1 ); + scope.inTransaction( em -> { + final Parent p = em.find( Parent.class, 1 ); // should remove child with id 1 p.removeChild( p.getChildren().get( 0 ) ); - entityManager.merge( p ); + em.merge( p ); } ); // Revision 3 - add new indexed entity to reset positions - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - final Parent p = entityManager.find( Parent.class, 1 ); + scope.inTransaction( em -> { + final Parent p = em.find( Parent.class, 1 ); // add child with id 3 final Child child = new Child( 3, "child3" ); p.getChildren().add( 0, child ); child.setParent( p ); - entityManager.persist( child ); - entityManager.merge( p ); + em.persist( child ); + em.merge( p ); } ); // Revision 4 - remove all children - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - final Parent p = entityManager.find( Parent.class, 1 ); + scope.inTransaction( em -> { + final Parent p = em.find( Parent.class, 1 ); while ( !p.getChildren().isEmpty() ) { Child child = p.getChildren().get( 0 ); p.removeChild( child ); - entityManager.remove( child ); + em.remove( child ); } - entityManager.merge( p ); + em.merge( p ); } ); } @Test - public void testRevisionCounts() { - assertEquals( Arrays.asList( 1, 2, 3, 4 ), getAuditReader().getRevisions( Parent.class, 1 ) ); - assertEquals( Arrays.asList( 1, 2 ), getAuditReader().getRevisions( Child.class, 1 ) ); - assertEquals( Arrays.asList( 1, 2, 3, 4 ), getAuditReader().getRevisions( Child.class, 2 ) ); - assertEquals( Arrays.asList( 3, 4 ), getAuditReader().getRevisions( Child.class, 3 ) ); + public void testRevisionCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1, 2, 3, 4 ), auditReader.getRevisions( Parent.class, 1 ) ); + assertEquals( Arrays.asList( 1, 2 ), auditReader.getRevisions( Child.class, 1 ) ); + assertEquals( Arrays.asList( 1, 2, 3, 4 ), auditReader.getRevisions( Child.class, 2 ) ); + assertEquals( Arrays.asList( 3, 4 ), auditReader.getRevisions( Child.class, 3 ) ); + } ); } @Test - public void testIndexedCollectionRev1() { - final Parent p = getAuditReader().find( Parent.class, 1, 1 ); - assertEquals( 2, p.getChildren().size() ); - assertEquals( new Child( 1, "child1", p ), p.getChildren().get( 0 ) ); - assertEquals( new Child( 2, "child2", p ), p.getChildren().get( 1 ) ); + public void testIndexedCollectionRev1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + var auditReader = AuditReaderFactory.get( em ); + final Parent p = auditReader.find( Parent.class, 1, 1 ); + assertEquals( 2, p.getChildren().size() ); + assertEquals( new Child( 1, "child1", p ), p.getChildren().get( 0 ) ); + assertEquals( new Child( 2, "child2", p ), p.getChildren().get( 1 ) ); + } ); } @Test - public void testIndexedCollectionRev2() { - final Parent p = getAuditReader().find( Parent.class, 1, 2 ); - assertEquals( 1, p.getChildren().size() ); - assertEquals( new Child( 2, "child2", p ), p.getChildren().get( 0 ) ); + public void testIndexedCollectionRev2(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + var auditReader = AuditReaderFactory.get( em ); + final Parent p = auditReader.find( Parent.class, 1, 2 ); + assertEquals( 1, p.getChildren().size() ); + assertEquals( new Child( 2, "child2", p ), p.getChildren().get( 0 ) ); + } ); } @Test - public void testIndexedCollectionRev3() { - final Parent p = getAuditReader().find( Parent.class, 1, 3 ); - assertEquals( 2, p.getChildren().size() ); - assertEquals( new Child( 3, "child3", p ), p.getChildren().get( 0 ) ); - assertEquals( new Child( 2, "child2", p ), p.getChildren().get( 1 ) ); + public void testIndexedCollectionRev3(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + var auditReader = AuditReaderFactory.get( em ); + final Parent p = auditReader.find( Parent.class, 1, 3 ); + assertEquals( 2, p.getChildren().size() ); + assertEquals( new Child( 3, "child3", p ), p.getChildren().get( 0 ) ); + assertEquals( new Child( 2, "child2", p ), p.getChildren().get( 1 ) ); + } ); } @Test - public void testIndexedCollectionRev4() { - final Parent p = getAuditReader().find( Parent.class, 1, 4 ); - assertEquals( 0, p.getChildren().size() ); + public void testIndexedCollectionRev4(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + var auditReader = AuditReaderFactory.get( em ); + final Parent p = auditReader.find( Parent.class, 1, 4 ); + assertEquals( 0, p.getChildren().size() ); + } ); } @Audited diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/detached/BasicDetachedList.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/detached/BasicDetachedList.java index f9b1895e8e0d..9a54a8b1fc7e 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/detached/BasicDetachedList.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/detached/BasicDetachedList.java @@ -6,115 +6,107 @@ import java.util.ArrayList; import java.util.Arrays; -import jakarta.persistence.EntityManager; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.orm.test.envers.entities.StrTestEntity; import org.hibernate.orm.test.envers.entities.onetomany.detached.ListRefCollEntity; import org.hibernate.orm.test.envers.tools.TestTools; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; -import org.junit.Test; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; /** * @author Adam Warski (adam at warski dot org) */ -public class BasicDetachedList extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {StrTestEntity.class, ListRefCollEntity.class}) +public class BasicDetachedList { private Integer str1_id; private Integer str2_id; private Integer coll1_id; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {StrTestEntity.class, ListRefCollEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - StrTestEntity str1 = new StrTestEntity( "str1" ); - StrTestEntity str2 = new StrTestEntity( "str2" ); - - ListRefCollEntity coll1 = new ListRefCollEntity( 3, "coll1" ); - + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Revision 1 - em.getTransaction().begin(); + scope.inTransaction( em -> { + StrTestEntity str1 = new StrTestEntity( "str1" ); + StrTestEntity str2 = new StrTestEntity( "str2" ); - em.persist( str1 ); - em.persist( str2 ); + em.persist( str1 ); + em.persist( str2 ); - coll1.setCollection( new ArrayList() ); - coll1.getCollection().add( str1 ); - em.persist( coll1 ); + ListRefCollEntity coll1 = new ListRefCollEntity( 3, "coll1" ); + coll1.setCollection( new ArrayList() ); + coll1.getCollection().add( str1 ); + em.persist( coll1 ); - em.getTransaction().commit(); + str1_id = str1.getId(); + str2_id = str2.getId(); + coll1_id = coll1.getId(); + } ); // Revision 2 - em.getTransaction().begin(); - - str2 = em.find( StrTestEntity.class, str2.getId() ); - coll1 = em.find( ListRefCollEntity.class, coll1.getId() ); - - coll1.getCollection().add( str2 ); + scope.inTransaction( em -> { + StrTestEntity str2 = em.find( StrTestEntity.class, str2_id ); + ListRefCollEntity coll1 = em.find( ListRefCollEntity.class, coll1_id ); - em.getTransaction().commit(); + coll1.getCollection().add( str2 ); + } ); // Revision 3 - em.getTransaction().begin(); + scope.inTransaction( em -> { + StrTestEntity str1 = em.find( StrTestEntity.class, str1_id ); + ListRefCollEntity coll1 = em.find( ListRefCollEntity.class, coll1_id ); - str1 = em.find( StrTestEntity.class, str1.getId() ); - coll1 = em.find( ListRefCollEntity.class, coll1.getId() ); - - coll1.getCollection().remove( str1 ); - - em.getTransaction().commit(); + coll1.getCollection().remove( str1 ); + } ); // Revision 4 - em.getTransaction().begin(); - - coll1 = em.find( ListRefCollEntity.class, coll1.getId() ); - - coll1.getCollection().clear(); + scope.inTransaction( em -> { + ListRefCollEntity coll1 = em.find( ListRefCollEntity.class, coll1_id ); - em.getTransaction().commit(); - - // - - str1_id = str1.getId(); - str2_id = str2.getId(); - - coll1_id = coll1.getId(); + coll1.getCollection().clear(); + } ); } @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2, 3, 4 ).equals( getAuditReader().getRevisions( ListRefCollEntity.class, coll1_id ) ); - - assert Arrays.asList( 1 ).equals( getAuditReader().getRevisions( StrTestEntity.class, str1_id ) ); - assert Arrays.asList( 1 ).equals( getAuditReader().getRevisions( StrTestEntity.class, str2_id ) ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1, 2, 3, 4 ), auditReader.getRevisions( ListRefCollEntity.class, coll1_id ) ); + assertEquals( Arrays.asList( 1 ), auditReader.getRevisions( StrTestEntity.class, str1_id ) ); + assertEquals( Arrays.asList( 1 ), auditReader.getRevisions( StrTestEntity.class, str2_id ) ); + } ); } @Test - public void testHistoryOfColl1() { - StrTestEntity str1 = getEntityManager().find( StrTestEntity.class, str1_id ); - StrTestEntity str2 = getEntityManager().find( StrTestEntity.class, str2_id ); - - ListRefCollEntity rev1 = getAuditReader().find( ListRefCollEntity.class, coll1_id, 1 ); - ListRefCollEntity rev2 = getAuditReader().find( ListRefCollEntity.class, coll1_id, 2 ); - ListRefCollEntity rev3 = getAuditReader().find( ListRefCollEntity.class, coll1_id, 3 ); - ListRefCollEntity rev4 = getAuditReader().find( ListRefCollEntity.class, coll1_id, 4 ); - - assert TestTools.checkCollection( rev1.getCollection(), str1 ); - assert TestTools.checkCollection( rev2.getCollection(), str1, str2 ); - assert TestTools.checkCollection( rev3.getCollection(), str2 ); - assert TestTools.checkCollection( rev4.getCollection() ); - - assert "coll1".equals( rev1.getData() ); - assert "coll1".equals( rev2.getData() ); - assert "coll1".equals( rev3.getData() ); - assert "coll1".equals( rev4.getData() ); + public void testHistoryOfColl1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + StrTestEntity str1 = em.find( StrTestEntity.class, str1_id ); + StrTestEntity str2 = em.find( StrTestEntity.class, str2_id ); + + final var auditReader = AuditReaderFactory.get( em ); + ListRefCollEntity rev1 = auditReader.find( ListRefCollEntity.class, coll1_id, 1 ); + ListRefCollEntity rev2 = auditReader.find( ListRefCollEntity.class, coll1_id, 2 ); + ListRefCollEntity rev3 = auditReader.find( ListRefCollEntity.class, coll1_id, 3 ); + ListRefCollEntity rev4 = auditReader.find( ListRefCollEntity.class, coll1_id, 4 ); + + assertTrue( TestTools.checkCollection( rev1.getCollection(), str1 ) ); + assertTrue( TestTools.checkCollection( rev2.getCollection(), str1, str2 ) ); + assertTrue( TestTools.checkCollection( rev3.getCollection(), str2 ) ); + assertTrue( TestTools.checkCollection( rev4.getCollection() ) ); + + assertEquals( "coll1", rev1.getData() ); + assertEquals( "coll1", rev2.getData() ); + assertEquals( "coll1", rev3.getData() ); + assertEquals( "coll1", rev4.getData() ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/detached/BasicDetachedSet.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/detached/BasicDetachedSet.java index c44993c5f16d..27ffdcd5c6a7 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/detached/BasicDetachedSet.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/detached/BasicDetachedSet.java @@ -6,115 +6,106 @@ import java.util.Arrays; import java.util.HashSet; -import jakarta.persistence.EntityManager; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.orm.test.envers.entities.StrTestEntity; import org.hibernate.orm.test.envers.entities.onetomany.detached.SetRefCollEntity; import org.hibernate.orm.test.envers.tools.TestTools; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; -import org.junit.Test; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Adam Warski (adam at warski dot org) */ -public class BasicDetachedSet extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {StrTestEntity.class, SetRefCollEntity.class}) +public class BasicDetachedSet { private Integer str1_id; private Integer str2_id; private Integer coll1_id; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {StrTestEntity.class, SetRefCollEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - StrTestEntity str1 = new StrTestEntity( "str1" ); - StrTestEntity str2 = new StrTestEntity( "str2" ); - - SetRefCollEntity coll1 = new SetRefCollEntity( 3, "coll1" ); - + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Revision 1 - em.getTransaction().begin(); + scope.inTransaction( em -> { + StrTestEntity str1 = new StrTestEntity( "str1" ); + StrTestEntity str2 = new StrTestEntity( "str2" ); - em.persist( str1 ); - em.persist( str2 ); + em.persist( str1 ); + em.persist( str2 ); - coll1.setCollection( new HashSet() ); - coll1.getCollection().add( str1 ); - em.persist( coll1 ); + SetRefCollEntity coll1 = new SetRefCollEntity( 3, "coll1" ); + coll1.setCollection( new HashSet() ); + coll1.getCollection().add( str1 ); + em.persist( coll1 ); - em.getTransaction().commit(); + str1_id = str1.getId(); + str2_id = str2.getId(); + coll1_id = coll1.getId(); + } ); // Revision 2 - em.getTransaction().begin(); - - str2 = em.find( StrTestEntity.class, str2.getId() ); - coll1 = em.find( SetRefCollEntity.class, coll1.getId() ); - - coll1.getCollection().add( str2 ); + scope.inTransaction( em -> { + StrTestEntity str2 = em.find( StrTestEntity.class, str2_id ); + SetRefCollEntity coll1 = em.find( SetRefCollEntity.class, coll1_id ); - em.getTransaction().commit(); + coll1.getCollection().add( str2 ); + } ); // Revision 3 - em.getTransaction().begin(); + scope.inTransaction( em -> { + StrTestEntity str1 = em.find( StrTestEntity.class, str1_id ); + SetRefCollEntity coll1 = em.find( SetRefCollEntity.class, coll1_id ); - str1 = em.find( StrTestEntity.class, str1.getId() ); - coll1 = em.find( SetRefCollEntity.class, coll1.getId() ); - - coll1.getCollection().remove( str1 ); - - em.getTransaction().commit(); + coll1.getCollection().remove( str1 ); + } ); // Revision 4 - em.getTransaction().begin(); - - coll1 = em.find( SetRefCollEntity.class, coll1.getId() ); - - coll1.getCollection().clear(); + scope.inTransaction( em -> { + SetRefCollEntity coll1 = em.find( SetRefCollEntity.class, coll1_id ); - em.getTransaction().commit(); - - // - - str1_id = str1.getId(); - str2_id = str2.getId(); - - coll1_id = coll1.getId(); + coll1.getCollection().clear(); + } ); } @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2, 3, 4 ).equals( getAuditReader().getRevisions( SetRefCollEntity.class, coll1_id ) ); - - assert Arrays.asList( 1 ).equals( getAuditReader().getRevisions( StrTestEntity.class, str1_id ) ); - assert Arrays.asList( 1 ).equals( getAuditReader().getRevisions( StrTestEntity.class, str2_id ) ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1, 2, 3, 4 ), auditReader.getRevisions( SetRefCollEntity.class, coll1_id ) ); + assertEquals( Arrays.asList( 1 ), auditReader.getRevisions( StrTestEntity.class, str1_id ) ); + assertEquals( Arrays.asList( 1 ), auditReader.getRevisions( StrTestEntity.class, str2_id ) ); + } ); } @Test - public void testHistoryOfColl1() { - StrTestEntity str1 = getEntityManager().find( StrTestEntity.class, str1_id ); - StrTestEntity str2 = getEntityManager().find( StrTestEntity.class, str2_id ); - - SetRefCollEntity rev1 = getAuditReader().find( SetRefCollEntity.class, coll1_id, 1 ); - SetRefCollEntity rev2 = getAuditReader().find( SetRefCollEntity.class, coll1_id, 2 ); - SetRefCollEntity rev3 = getAuditReader().find( SetRefCollEntity.class, coll1_id, 3 ); - SetRefCollEntity rev4 = getAuditReader().find( SetRefCollEntity.class, coll1_id, 4 ); - - assert rev1.getCollection().equals( TestTools.makeSet( str1 ) ); - assert rev2.getCollection().equals( TestTools.makeSet( str1, str2 ) ); - assert rev3.getCollection().equals( TestTools.makeSet( str2 ) ); - assert rev4.getCollection().equals( TestTools.makeSet() ); - - assert "coll1".equals( rev1.getData() ); - assert "coll1".equals( rev2.getData() ); - assert "coll1".equals( rev3.getData() ); - assert "coll1".equals( rev4.getData() ); + public void testHistoryOfColl1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + StrTestEntity str1 = em.find( StrTestEntity.class, str1_id ); + StrTestEntity str2 = em.find( StrTestEntity.class, str2_id ); + + final var auditReader = AuditReaderFactory.get( em ); + SetRefCollEntity rev1 = auditReader.find( SetRefCollEntity.class, coll1_id, 1 ); + SetRefCollEntity rev2 = auditReader.find( SetRefCollEntity.class, coll1_id, 2 ); + SetRefCollEntity rev3 = auditReader.find( SetRefCollEntity.class, coll1_id, 3 ); + SetRefCollEntity rev4 = auditReader.find( SetRefCollEntity.class, coll1_id, 4 ); + + assertEquals( TestTools.makeSet( str1 ), rev1.getCollection() ); + assertEquals( TestTools.makeSet( str1, str2 ), rev2.getCollection() ); + assertEquals( TestTools.makeSet( str2 ), rev3.getCollection() ); + assertEquals( TestTools.makeSet(), rev4.getCollection() ); + + assertEquals( "coll1", rev1.getData() ); + assertEquals( "coll1", rev2.getData() ); + assertEquals( "coll1", rev3.getData() ); + assertEquals( "coll1", rev4.getData() ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/detached/BasicDetachedSetWithEmbId.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/detached/BasicDetachedSetWithEmbId.java index 9a55f02a53fe..a82d667ef185 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/detached/BasicDetachedSetWithEmbId.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/detached/BasicDetachedSetWithEmbId.java @@ -6,119 +6,108 @@ import java.util.Arrays; import java.util.HashSet; -import jakarta.persistence.EntityManager; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.orm.test.envers.entities.ids.EmbId; import org.hibernate.orm.test.envers.entities.ids.EmbIdTestEntity; import org.hibernate.orm.test.envers.entities.onetomany.detached.ids.SetRefCollEntityEmbId; import org.hibernate.orm.test.envers.tools.TestTools; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; -import org.junit.Test; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Adam Warski (adam at warski dot org) */ -public class BasicDetachedSetWithEmbId extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {EmbIdTestEntity.class, SetRefCollEntityEmbId.class}) +public class BasicDetachedSetWithEmbId { private EmbId str1_id; private EmbId str2_id; private EmbId coll1_id; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {EmbIdTestEntity.class, SetRefCollEntityEmbId.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { str1_id = new EmbId( 1, 2 ); str2_id = new EmbId( 3, 4 ); - coll1_id = new EmbId( 5, 6 ); - EmbIdTestEntity str1 = new EmbIdTestEntity( str1_id, "str1" ); - EmbIdTestEntity str2 = new EmbIdTestEntity( str2_id, "str2" ); - - SetRefCollEntityEmbId coll1 = new SetRefCollEntityEmbId( coll1_id, "coll1" ); - // Revision 1 - em.getTransaction().begin(); + scope.inTransaction( em -> { + EmbIdTestEntity str1 = new EmbIdTestEntity( str1_id, "str1" ); + EmbIdTestEntity str2 = new EmbIdTestEntity( str2_id, "str2" ); - em.persist( str1 ); - em.persist( str2 ); + em.persist( str1 ); + em.persist( str2 ); - coll1.setCollection( new HashSet() ); - coll1.getCollection().add( str1 ); - em.persist( coll1 ); - - em.getTransaction().commit(); + SetRefCollEntityEmbId coll1 = new SetRefCollEntityEmbId( coll1_id, "coll1" ); + coll1.setCollection( new HashSet() ); + coll1.getCollection().add( str1 ); + em.persist( coll1 ); + } ); // Revision 2 - em.getTransaction().begin(); - - str2 = em.find( EmbIdTestEntity.class, str2.getId() ); - coll1 = em.find( SetRefCollEntityEmbId.class, coll1.getId() ); + scope.inTransaction( em -> { + EmbIdTestEntity str2 = em.find( EmbIdTestEntity.class, str2_id ); + SetRefCollEntityEmbId coll1 = em.find( SetRefCollEntityEmbId.class, coll1_id ); - coll1.getCollection().add( str2 ); - - em.getTransaction().commit(); + coll1.getCollection().add( str2 ); + } ); // Revision 3 - em.getTransaction().begin(); - - str1 = em.find( EmbIdTestEntity.class, str1.getId() ); - coll1 = em.find( SetRefCollEntityEmbId.class, coll1.getId() ); + scope.inTransaction( em -> { + EmbIdTestEntity str1 = em.find( EmbIdTestEntity.class, str1_id ); + SetRefCollEntityEmbId coll1 = em.find( SetRefCollEntityEmbId.class, coll1_id ); - coll1.getCollection().remove( str1 ); - - em.getTransaction().commit(); + coll1.getCollection().remove( str1 ); + } ); // Revision 4 - em.getTransaction().begin(); - - coll1 = em.find( SetRefCollEntityEmbId.class, coll1.getId() ); - - coll1.getCollection().clear(); + scope.inTransaction( em -> { + SetRefCollEntityEmbId coll1 = em.find( SetRefCollEntityEmbId.class, coll1_id ); - em.getTransaction().commit(); + coll1.getCollection().clear(); + } ); } @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2, 3, 4 ).equals( - getAuditReader().getRevisions( - SetRefCollEntityEmbId.class, - coll1_id - ) - ); - - assert Arrays.asList( 1 ).equals( getAuditReader().getRevisions( EmbIdTestEntity.class, str1_id ) ); - assert Arrays.asList( 1 ).equals( getAuditReader().getRevisions( EmbIdTestEntity.class, str2_id ) ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1, 2, 3, 4 ), + auditReader.getRevisions( SetRefCollEntityEmbId.class, coll1_id ) ); + assertEquals( Arrays.asList( 1 ), auditReader.getRevisions( EmbIdTestEntity.class, str1_id ) ); + assertEquals( Arrays.asList( 1 ), auditReader.getRevisions( EmbIdTestEntity.class, str2_id ) ); + } ); } @Test - public void testHistoryOfColl1() { - EmbIdTestEntity str1 = getEntityManager().find( EmbIdTestEntity.class, str1_id ); - EmbIdTestEntity str2 = getEntityManager().find( EmbIdTestEntity.class, str2_id ); - - SetRefCollEntityEmbId rev1 = getAuditReader().find( SetRefCollEntityEmbId.class, coll1_id, 1 ); - SetRefCollEntityEmbId rev2 = getAuditReader().find( SetRefCollEntityEmbId.class, coll1_id, 2 ); - SetRefCollEntityEmbId rev3 = getAuditReader().find( SetRefCollEntityEmbId.class, coll1_id, 3 ); - SetRefCollEntityEmbId rev4 = getAuditReader().find( SetRefCollEntityEmbId.class, coll1_id, 4 ); - - assert rev1.getCollection().equals( TestTools.makeSet( str1 ) ); - assert rev2.getCollection().equals( TestTools.makeSet( str1, str2 ) ); - assert rev3.getCollection().equals( TestTools.makeSet( str2 ) ); - assert rev4.getCollection().equals( TestTools.makeSet() ); - - assert "coll1".equals( rev1.getData() ); - assert "coll1".equals( rev2.getData() ); - assert "coll1".equals( rev3.getData() ); - assert "coll1".equals( rev4.getData() ); + public void testHistoryOfColl1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + EmbIdTestEntity str1 = em.find( EmbIdTestEntity.class, str1_id ); + EmbIdTestEntity str2 = em.find( EmbIdTestEntity.class, str2_id ); + + final var auditReader = AuditReaderFactory.get( em ); + SetRefCollEntityEmbId rev1 = auditReader.find( SetRefCollEntityEmbId.class, coll1_id, 1 ); + SetRefCollEntityEmbId rev2 = auditReader.find( SetRefCollEntityEmbId.class, coll1_id, 2 ); + SetRefCollEntityEmbId rev3 = auditReader.find( SetRefCollEntityEmbId.class, coll1_id, 3 ); + SetRefCollEntityEmbId rev4 = auditReader.find( SetRefCollEntityEmbId.class, coll1_id, 4 ); + + assertEquals( TestTools.makeSet( str1 ), rev1.getCollection() ); + assertEquals( TestTools.makeSet( str1, str2 ), rev2.getCollection() ); + assertEquals( TestTools.makeSet( str2 ), rev3.getCollection() ); + assertEquals( TestTools.makeSet(), rev4.getCollection() ); + + assertEquals( "coll1", rev1.getData() ); + assertEquals( "coll1", rev2.getData() ); + assertEquals( "coll1", rev3.getData() ); + assertEquals( "coll1", rev4.getData() ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/detached/BasicDetachedSetWithMulId.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/detached/BasicDetachedSetWithMulId.java index 5a7d63ba9daf..f58ee6144109 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/detached/BasicDetachedSetWithMulId.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/detached/BasicDetachedSetWithMulId.java @@ -6,119 +6,108 @@ import java.util.Arrays; import java.util.HashSet; -import jakarta.persistence.EntityManager; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.orm.test.envers.entities.ids.MulId; import org.hibernate.orm.test.envers.entities.ids.MulIdTestEntity; import org.hibernate.orm.test.envers.entities.onetomany.detached.ids.SetRefCollEntityMulId; import org.hibernate.orm.test.envers.tools.TestTools; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; -import org.junit.Test; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Adam Warski (adam at warski dot org) */ -public class BasicDetachedSetWithMulId extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {MulIdTestEntity.class, SetRefCollEntityMulId.class}) +public class BasicDetachedSetWithMulId { private MulId str1_id; private MulId str2_id; private MulId coll1_id; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {MulIdTestEntity.class, SetRefCollEntityMulId.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { str1_id = new MulId( 1, 2 ); str2_id = new MulId( 3, 4 ); - coll1_id = new MulId( 5, 6 ); - MulIdTestEntity str1 = new MulIdTestEntity( str1_id.getId1(), str1_id.getId2(), "str1" ); - MulIdTestEntity str2 = new MulIdTestEntity( str2_id.getId1(), str2_id.getId2(), "str2" ); - - SetRefCollEntityMulId coll1 = new SetRefCollEntityMulId( coll1_id.getId1(), coll1_id.getId2(), "coll1" ); - // Revision 1 - em.getTransaction().begin(); + scope.inTransaction( em -> { + MulIdTestEntity str1 = new MulIdTestEntity( str1_id.getId1(), str1_id.getId2(), "str1" ); + MulIdTestEntity str2 = new MulIdTestEntity( str2_id.getId1(), str2_id.getId2(), "str2" ); - em.persist( str1 ); - em.persist( str2 ); + em.persist( str1 ); + em.persist( str2 ); - coll1.setCollection( new HashSet() ); - coll1.getCollection().add( str1 ); - em.persist( coll1 ); - - em.getTransaction().commit(); + SetRefCollEntityMulId coll1 = new SetRefCollEntityMulId( coll1_id.getId1(), coll1_id.getId2(), "coll1" ); + coll1.setCollection( new HashSet() ); + coll1.getCollection().add( str1 ); + em.persist( coll1 ); + } ); // Revision 2 - em.getTransaction().begin(); - - str2 = em.find( MulIdTestEntity.class, str2_id ); - coll1 = em.find( SetRefCollEntityMulId.class, coll1_id ); + scope.inTransaction( em -> { + MulIdTestEntity str2 = em.find( MulIdTestEntity.class, str2_id ); + SetRefCollEntityMulId coll1 = em.find( SetRefCollEntityMulId.class, coll1_id ); - coll1.getCollection().add( str2 ); - - em.getTransaction().commit(); + coll1.getCollection().add( str2 ); + } ); // Revision 3 - em.getTransaction().begin(); - - str1 = em.find( MulIdTestEntity.class, str1_id ); - coll1 = em.find( SetRefCollEntityMulId.class, coll1_id ); + scope.inTransaction( em -> { + MulIdTestEntity str1 = em.find( MulIdTestEntity.class, str1_id ); + SetRefCollEntityMulId coll1 = em.find( SetRefCollEntityMulId.class, coll1_id ); - coll1.getCollection().remove( str1 ); - - em.getTransaction().commit(); + coll1.getCollection().remove( str1 ); + } ); // Revision 4 - em.getTransaction().begin(); - - coll1 = em.find( SetRefCollEntityMulId.class, coll1_id ); - - coll1.getCollection().clear(); + scope.inTransaction( em -> { + SetRefCollEntityMulId coll1 = em.find( SetRefCollEntityMulId.class, coll1_id ); - em.getTransaction().commit(); + coll1.getCollection().clear(); + } ); } @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2, 3, 4 ).equals( - getAuditReader().getRevisions( - SetRefCollEntityMulId.class, - coll1_id - ) - ); - - assert Arrays.asList( 1 ).equals( getAuditReader().getRevisions( MulIdTestEntity.class, str1_id ) ); - assert Arrays.asList( 1 ).equals( getAuditReader().getRevisions( MulIdTestEntity.class, str2_id ) ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1, 2, 3, 4 ), + auditReader.getRevisions( SetRefCollEntityMulId.class, coll1_id ) ); + assertEquals( Arrays.asList( 1 ), auditReader.getRevisions( MulIdTestEntity.class, str1_id ) ); + assertEquals( Arrays.asList( 1 ), auditReader.getRevisions( MulIdTestEntity.class, str2_id ) ); + } ); } @Test - public void testHistoryOfColl1() { - MulIdTestEntity str1 = getEntityManager().find( MulIdTestEntity.class, str1_id ); - MulIdTestEntity str2 = getEntityManager().find( MulIdTestEntity.class, str2_id ); - - SetRefCollEntityMulId rev1 = getAuditReader().find( SetRefCollEntityMulId.class, coll1_id, 1 ); - SetRefCollEntityMulId rev2 = getAuditReader().find( SetRefCollEntityMulId.class, coll1_id, 2 ); - SetRefCollEntityMulId rev3 = getAuditReader().find( SetRefCollEntityMulId.class, coll1_id, 3 ); - SetRefCollEntityMulId rev4 = getAuditReader().find( SetRefCollEntityMulId.class, coll1_id, 4 ); - - assert rev1.getCollection().equals( TestTools.makeSet( str1 ) ); - assert rev2.getCollection().equals( TestTools.makeSet( str1, str2 ) ); - assert rev3.getCollection().equals( TestTools.makeSet( str2 ) ); - assert rev4.getCollection().equals( TestTools.makeSet() ); - - assert "coll1".equals( rev1.getData() ); - assert "coll1".equals( rev2.getData() ); - assert "coll1".equals( rev3.getData() ); - assert "coll1".equals( rev4.getData() ); + public void testHistoryOfColl1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + MulIdTestEntity str1 = em.find( MulIdTestEntity.class, str1_id ); + MulIdTestEntity str2 = em.find( MulIdTestEntity.class, str2_id ); + + final var auditReader = AuditReaderFactory.get( em ); + SetRefCollEntityMulId rev1 = auditReader.find( SetRefCollEntityMulId.class, coll1_id, 1 ); + SetRefCollEntityMulId rev2 = auditReader.find( SetRefCollEntityMulId.class, coll1_id, 2 ); + SetRefCollEntityMulId rev3 = auditReader.find( SetRefCollEntityMulId.class, coll1_id, 3 ); + SetRefCollEntityMulId rev4 = auditReader.find( SetRefCollEntityMulId.class, coll1_id, 4 ); + + assertEquals( TestTools.makeSet( str1 ), rev1.getCollection() ); + assertEquals( TestTools.makeSet( str1, str2 ), rev2.getCollection() ); + assertEquals( TestTools.makeSet( str2 ), rev3.getCollection() ); + assertEquals( TestTools.makeSet(), rev4.getCollection() ); + + assertEquals( "coll1", rev1.getData() ); + assertEquals( "coll1", rev2.getData() ); + assertEquals( "coll1", rev3.getData() ); + assertEquals( "coll1", rev4.getData() ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/detached/BasicJoinColumnSet.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/detached/BasicJoinColumnSet.java index f8153a32155e..d1938e580afc 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/detached/BasicJoinColumnSet.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/detached/BasicJoinColumnSet.java @@ -6,124 +6,107 @@ import java.util.Arrays; import java.util.HashSet; -import jakarta.persistence.EntityManager; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.orm.test.envers.entities.StrTestEntity; import org.hibernate.orm.test.envers.entities.onetomany.detached.SetJoinColumnRefCollEntity; import org.hibernate.orm.test.envers.tools.TestTools; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; -import org.junit.Test; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Adam Warski (adam at warski dot org) */ -public class BasicJoinColumnSet extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {StrTestEntity.class, SetJoinColumnRefCollEntity.class}) +public class BasicJoinColumnSet { private Integer str1_id; private Integer str2_id; private Integer coll1_id; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {StrTestEntity.class, SetJoinColumnRefCollEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - StrTestEntity str1 = new StrTestEntity( "str1" ); - StrTestEntity str2 = new StrTestEntity( "str2" ); - - SetJoinColumnRefCollEntity coll1 = new SetJoinColumnRefCollEntity( 3, "coll1" ); - + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Revision 1 - em.getTransaction().begin(); + scope.inTransaction( em -> { + StrTestEntity str1 = new StrTestEntity( "str1" ); + StrTestEntity str2 = new StrTestEntity( "str2" ); - em.persist( str1 ); - em.persist( str2 ); + em.persist( str1 ); + em.persist( str2 ); - coll1.setCollection( new HashSet() ); - coll1.getCollection().add( str1 ); - em.persist( coll1 ); + SetJoinColumnRefCollEntity coll1 = new SetJoinColumnRefCollEntity( 3, "coll1" ); + coll1.setCollection( new HashSet() ); + coll1.getCollection().add( str1 ); + em.persist( coll1 ); - em.getTransaction().commit(); + str1_id = str1.getId(); + str2_id = str2.getId(); + coll1_id = coll1.getId(); + } ); // Revision 2 - em.getTransaction().begin(); - - str2 = em.find( StrTestEntity.class, str2.getId() ); - coll1 = em.find( SetJoinColumnRefCollEntity.class, coll1.getId() ); + scope.inTransaction( em -> { + StrTestEntity str2 = em.find( StrTestEntity.class, str2_id ); + SetJoinColumnRefCollEntity coll1 = em.find( SetJoinColumnRefCollEntity.class, coll1_id ); - coll1.getCollection().add( str2 ); - - em.getTransaction().commit(); + coll1.getCollection().add( str2 ); + } ); // Revision 3 - em.getTransaction().begin(); - - str1 = em.find( StrTestEntity.class, str1.getId() ); - coll1 = em.find( SetJoinColumnRefCollEntity.class, coll1.getId() ); + scope.inTransaction( em -> { + StrTestEntity str1 = em.find( StrTestEntity.class, str1_id ); + SetJoinColumnRefCollEntity coll1 = em.find( SetJoinColumnRefCollEntity.class, coll1_id ); - coll1.getCollection().remove( str1 ); - - em.getTransaction().commit(); + coll1.getCollection().remove( str1 ); + } ); // Revision 4 - em.getTransaction().begin(); - - coll1 = em.find( SetJoinColumnRefCollEntity.class, coll1.getId() ); - - coll1.getCollection().clear(); - - em.getTransaction().commit(); - - // - - str1_id = str1.getId(); - str2_id = str2.getId(); + scope.inTransaction( em -> { + SetJoinColumnRefCollEntity coll1 = em.find( SetJoinColumnRefCollEntity.class, coll1_id ); - coll1_id = coll1.getId(); + coll1.getCollection().clear(); + } ); } @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2, 3, 4 ).equals( - getAuditReader().getRevisions( - SetJoinColumnRefCollEntity.class, - coll1_id - ) - ); - - assert Arrays.asList( 1 ).equals( getAuditReader().getRevisions( StrTestEntity.class, str1_id ) ); - assert Arrays.asList( 1 ).equals( getAuditReader().getRevisions( StrTestEntity.class, str2_id ) ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1, 2, 3, 4 ), + auditReader.getRevisions( SetJoinColumnRefCollEntity.class, coll1_id ) ); + assertEquals( Arrays.asList( 1 ), auditReader.getRevisions( StrTestEntity.class, str1_id ) ); + assertEquals( Arrays.asList( 1 ), auditReader.getRevisions( StrTestEntity.class, str2_id ) ); + } ); } @Test - public void testHistoryOfColl1() { - EntityManager entityManager = getEntityManager(); - entityManager.getTransaction().begin(); - StrTestEntity str1 = entityManager.find( StrTestEntity.class, str1_id ); - StrTestEntity str2 = entityManager.find( StrTestEntity.class, str2_id ); - - entityManager.getTransaction().commit(); - - SetJoinColumnRefCollEntity rev1 = getAuditReader().find( SetJoinColumnRefCollEntity.class, coll1_id, 1 ); - SetJoinColumnRefCollEntity rev2 = getAuditReader().find( SetJoinColumnRefCollEntity.class, coll1_id, 2 ); - SetJoinColumnRefCollEntity rev3 = getAuditReader().find( SetJoinColumnRefCollEntity.class, coll1_id, 3 ); - SetJoinColumnRefCollEntity rev4 = getAuditReader().find( SetJoinColumnRefCollEntity.class, coll1_id, 4 ); - - assert rev1.getCollection().equals( TestTools.makeSet( str1 ) ); - assert rev2.getCollection().equals( TestTools.makeSet( str1, str2 ) ); - assert rev3.getCollection().equals( TestTools.makeSet( str2 ) ); - assert rev4.getCollection().equals( TestTools.makeSet() ); - - assert "coll1".equals( rev1.getData() ); - assert "coll1".equals( rev2.getData() ); - assert "coll1".equals( rev3.getData() ); - assert "coll1".equals( rev4.getData() ); + public void testHistoryOfColl1(EntityManagerFactoryScope scope) { + scope.inTransaction( em -> { + StrTestEntity str1 = em.find( StrTestEntity.class, str1_id ); + StrTestEntity str2 = em.find( StrTestEntity.class, str2_id ); + + final var auditReader = AuditReaderFactory.get( em ); + SetJoinColumnRefCollEntity rev1 = auditReader.find( SetJoinColumnRefCollEntity.class, coll1_id, 1 ); + SetJoinColumnRefCollEntity rev2 = auditReader.find( SetJoinColumnRefCollEntity.class, coll1_id, 2 ); + SetJoinColumnRefCollEntity rev3 = auditReader.find( SetJoinColumnRefCollEntity.class, coll1_id, 3 ); + SetJoinColumnRefCollEntity rev4 = auditReader.find( SetJoinColumnRefCollEntity.class, coll1_id, 4 ); + + assertEquals( TestTools.makeSet( str1 ), rev1.getCollection() ); + assertEquals( TestTools.makeSet( str1, str2 ), rev2.getCollection() ); + assertEquals( TestTools.makeSet( str2 ), rev3.getCollection() ); + assertEquals( TestTools.makeSet(), rev4.getCollection() ); + + assertEquals( "coll1", rev1.getData() ); + assertEquals( "coll1", rev2.getData() ); + assertEquals( "coll1", rev3.getData() ); + assertEquals( "coll1", rev4.getData() ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/detached/DataChangesDetachedSet.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/detached/DataChangesDetachedSet.java index 9484f0b09c3f..3a9157afd062 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/detached/DataChangesDetachedSet.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/detached/DataChangesDetachedSet.java @@ -6,84 +6,79 @@ import java.util.Arrays; import java.util.HashSet; -import jakarta.persistence.EntityManager; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.orm.test.envers.entities.StrTestEntity; import org.hibernate.orm.test.envers.entities.onetomany.detached.SetRefCollEntity; import org.hibernate.orm.test.envers.tools.TestTools; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; -import org.junit.Test; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Adam Warski (adam at warski dot org) */ -public class DataChangesDetachedSet extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {StrTestEntity.class, SetRefCollEntity.class}) +public class DataChangesDetachedSet { private Integer str1_id; private Integer coll1_id; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {StrTestEntity.class, SetRefCollEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - StrTestEntity str1 = new StrTestEntity( "str1" ); - - SetRefCollEntity coll1 = new SetRefCollEntity( 3, "coll1" ); - + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Revision 1 - em.getTransaction().begin(); + scope.inTransaction( em -> { + StrTestEntity str1 = new StrTestEntity( "str1" ); - em.persist( str1 ); + em.persist( str1 ); - coll1.setCollection( new HashSet() ); - em.persist( coll1 ); + SetRefCollEntity coll1 = new SetRefCollEntity( 3, "coll1" ); + coll1.setCollection( new HashSet() ); + em.persist( coll1 ); - em.getTransaction().commit(); + str1_id = str1.getId(); + coll1_id = coll1.getId(); + } ); // Revision 2 - em.getTransaction().begin(); + scope.inTransaction( em -> { + StrTestEntity str1 = em.find( StrTestEntity.class, str1_id ); + SetRefCollEntity coll1 = em.find( SetRefCollEntity.class, coll1_id ); - str1 = em.find( StrTestEntity.class, str1.getId() ); - coll1 = em.find( SetRefCollEntity.class, coll1.getId() ); - - coll1.getCollection().add( str1 ); - coll1.setData( "coll2" ); - - em.getTransaction().commit(); - - // - - str1_id = str1.getId(); - - coll1_id = coll1.getId(); + coll1.getCollection().add( str1 ); + coll1.setData( "coll2" ); + } ); } @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( SetRefCollEntity.class, coll1_id ) ); - - assert Arrays.asList( 1 ).equals( getAuditReader().getRevisions( StrTestEntity.class, str1_id ) ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1, 2 ), auditReader.getRevisions( SetRefCollEntity.class, coll1_id ) ); + assertEquals( Arrays.asList( 1 ), auditReader.getRevisions( StrTestEntity.class, str1_id ) ); + } ); } @Test - public void testHistoryOfColl1() { - StrTestEntity str1 = getEntityManager().find( StrTestEntity.class, str1_id ); + public void testHistoryOfColl1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + StrTestEntity str1 = em.find( StrTestEntity.class, str1_id ); - SetRefCollEntity rev1 = getAuditReader().find( SetRefCollEntity.class, coll1_id, 1 ); - SetRefCollEntity rev2 = getAuditReader().find( SetRefCollEntity.class, coll1_id, 2 ); + final var auditReader = AuditReaderFactory.get( em ); + SetRefCollEntity rev1 = auditReader.find( SetRefCollEntity.class, coll1_id, 1 ); + SetRefCollEntity rev2 = auditReader.find( SetRefCollEntity.class, coll1_id, 2 ); - assert rev1.getCollection().equals( TestTools.makeSet() ); - assert rev2.getCollection().equals( TestTools.makeSet( str1 ) ); + assertEquals( TestTools.makeSet(), rev1.getCollection() ); + assertEquals( TestTools.makeSet( str1 ), rev2.getCollection() ); - assert "coll1".equals( rev1.getData() ); - assert "coll2".equals( rev2.getData() ); + assertEquals( "coll1", rev1.getData() ); + assertEquals( "coll2", rev2.getData() ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/detached/DetachedTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/detached/DetachedTest.java index 1fea418b7707..6f2b9d430363 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/detached/DetachedTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/detached/DetachedTest.java @@ -6,84 +6,83 @@ import java.util.Arrays; -import org.hibernate.Session; -import org.hibernate.orm.test.envers.BaseEnversFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.orm.test.envers.entities.StrTestEntity; import org.hibernate.orm.test.envers.entities.onetomany.detached.ListRefCollEntity; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; -import junit.framework.Assert; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) */ -public class DetachedTest extends BaseEnversFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {ListRefCollEntity.class, StrTestEntity.class}) +public class DetachedTest { private Integer parentId = null; private Integer childId = null; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {ListRefCollEntity.class, StrTestEntity.class}; - } - - @Test - @Priority(10) + @BeforeClassTemplate @JiraKey(value = "HHH-7543") - public void testUpdatingDetachedEntityWithRelation() { - Session session = getSession(); - + public void testUpdatingDetachedEntityWithRelation(EntityManagerFactoryScope scope) { // Revision 1 - session.getTransaction().begin(); - ListRefCollEntity parent = new ListRefCollEntity( 1, "initial data" ); - StrTestEntity child = new StrTestEntity( "data" ); - session.persist( child ); - parent.setCollection( Arrays.asList( child ) ); - session.persist( parent ); - session.getTransaction().commit(); + scope.inTransaction( em -> { + ListRefCollEntity parent = new ListRefCollEntity( 1, "initial data" ); + StrTestEntity child = new StrTestEntity( "data" ); + em.persist( child ); + parent.setCollection( Arrays.asList( child ) ); + em.persist( parent ); - session.close(); - session = getSession(); + parentId = parent.getId(); + childId = child.getId(); + } ); // Revision 2 - updating detached entity - session.getTransaction().begin(); - parent.setData( "modified data" ); - session.merge( parent ); - session.getTransaction().commit(); - - session.close(); - - parentId = parent.getId(); - childId = child.getId(); + scope.inTransaction( em -> { + ListRefCollEntity parent = new ListRefCollEntity( 1, "modified data" ); + parent.setId( parentId ); + parent.setCollection( Arrays.asList( new StrTestEntity( "data", childId ) ) ); + em.merge( parent ); + } ); } @Test - public void testRevisionsCounts() { - Assert.assertEquals( - Arrays.asList( 1, 2 ), getAuditReader().getRevisions( - ListRefCollEntity.class, - parentId - ) - ); - Assert.assertEquals( Arrays.asList( 1 ), getAuditReader().getRevisions( StrTestEntity.class, childId ) ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( + Arrays.asList( 1, 2 ), + auditReader.getRevisions( ListRefCollEntity.class, parentId ) + ); + assertEquals( Arrays.asList( 1 ), auditReader.getRevisions( StrTestEntity.class, childId ) ); + } ); } @Test - public void testHistoryOfParent() { - ListRefCollEntity parent = new ListRefCollEntity( parentId, "initial data" ); - parent.setCollection( Arrays.asList( new StrTestEntity( "data", childId ) ) ); + public void testHistoryOfParent(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + + ListRefCollEntity parent = new ListRefCollEntity( parentId, "initial data" ); + parent.setCollection( Arrays.asList( new StrTestEntity( "data", childId ) ) ); - ListRefCollEntity ver1 = getAuditReader().find( ListRefCollEntity.class, parentId, 1 ); + ListRefCollEntity ver1 = auditReader.find( ListRefCollEntity.class, parentId, 1 ); - Assert.assertEquals( parent, ver1 ); - Assert.assertEquals( parent.getCollection(), ver1.getCollection() ); + assertEquals( parent, ver1 ); + assertEquals( parent.getCollection(), ver1.getCollection() ); - parent.setData( "modified data" ); + parent.setData( "modified data" ); - ListRefCollEntity ver2 = getAuditReader().find( ListRefCollEntity.class, parentId, 2 ); + ListRefCollEntity ver2 = auditReader.find( ListRefCollEntity.class, parentId, 2 ); - Assert.assertEquals( parent, ver2 ); - Assert.assertEquals( parent.getCollection(), ver2.getCollection() ); + assertEquals( parent, ver2 ); + assertEquals( parent.getCollection(), ver2.getCollection() ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/detached/DoubleDetachedSet.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/detached/DoubleDetachedSet.java index 82d5debe0bd8..332dae5d541b 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/detached/DoubleDetachedSet.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/detached/DoubleDetachedSet.java @@ -6,113 +6,106 @@ import java.util.Arrays; import java.util.HashSet; -import jakarta.persistence.EntityManager; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.orm.test.envers.entities.StrTestEntity; import org.hibernate.orm.test.envers.entities.onetomany.detached.DoubleSetRefCollEntity; import org.hibernate.orm.test.envers.tools.TestTools; -import org.junit.Test; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Adam Warski (adam at warski dot org) */ -public class DoubleDetachedSet extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {StrTestEntity.class, DoubleSetRefCollEntity.class}) +public class DoubleDetachedSet { private Integer str1_id; private Integer str2_id; private Integer coll1_id; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {StrTestEntity.class, DoubleSetRefCollEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { StrTestEntity str1 = new StrTestEntity( "str1" ); StrTestEntity str2 = new StrTestEntity( "str2" ); DoubleSetRefCollEntity coll1 = new DoubleSetRefCollEntity( 3, "coll1" ); // Revision 1 - em.getTransaction().begin(); - - em.persist( str1 ); - em.persist( str2 ); - - coll1.setCollection( new HashSet() ); - coll1.getCollection().add( str1 ); - em.persist( coll1 ); + scope.inTransaction( em -> { + em.persist( str1 ); + em.persist( str2 ); - coll1.setCollection2( new HashSet() ); - coll1.getCollection2().add( str2 ); - em.persist( coll1 ); + coll1.setCollection( new HashSet() ); + coll1.getCollection().add( str1 ); + em.persist( coll1 ); - em.getTransaction().commit(); + coll1.setCollection2( new HashSet() ); + coll1.getCollection2().add( str2 ); + em.persist( coll1 ); + } ); // Revision 2 - em.getTransaction().begin(); + scope.inTransaction( em -> { + StrTestEntity str2Ref = em.find( StrTestEntity.class, str2.getId() ); + DoubleSetRefCollEntity coll1Ref = em.find( DoubleSetRefCollEntity.class, coll1.getId() ); - str2 = em.find( StrTestEntity.class, str2.getId() ); - coll1 = em.find( DoubleSetRefCollEntity.class, coll1.getId() ); - - coll1.getCollection().add( str2 ); - - em.getTransaction().commit(); + coll1Ref.getCollection().add( str2Ref ); + } ); // Revision 3 - em.getTransaction().begin(); - - str1 = em.find( StrTestEntity.class, str1.getId() ); - coll1 = em.find( DoubleSetRefCollEntity.class, coll1.getId() ); - - coll1.getCollection().remove( str1 ); - coll1.getCollection2().add( str1 ); + scope.inTransaction( em -> { + StrTestEntity str1Ref = em.find( StrTestEntity.class, str1.getId() ); + DoubleSetRefCollEntity coll1Ref = em.find( DoubleSetRefCollEntity.class, coll1.getId() ); - em.getTransaction().commit(); - - // + coll1Ref.getCollection().remove( str1Ref ); + coll1Ref.getCollection2().add( str1Ref ); + } ); str1_id = str1.getId(); str2_id = str2.getId(); - coll1_id = coll1.getId(); } @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2, 3 ).equals( - getAuditReader().getRevisions( - DoubleSetRefCollEntity.class, - coll1_id - ) - ); - - assert Arrays.asList( 1 ).equals( getAuditReader().getRevisions( StrTestEntity.class, str1_id ) ); - assert Arrays.asList( 1 ).equals( getAuditReader().getRevisions( StrTestEntity.class, str2_id ) ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( + Arrays.asList( 1, 2, 3 ), + auditReader.getRevisions( DoubleSetRefCollEntity.class, coll1_id ) + ); + assertEquals( Arrays.asList( 1 ), auditReader.getRevisions( StrTestEntity.class, str1_id ) ); + assertEquals( Arrays.asList( 1 ), auditReader.getRevisions( StrTestEntity.class, str2_id ) ); + } ); } @Test - public void testHistoryOfColl1() { - StrTestEntity str1 = getEntityManager().find( StrTestEntity.class, str1_id ); - StrTestEntity str2 = getEntityManager().find( StrTestEntity.class, str2_id ); + public void testHistoryOfColl1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + + StrTestEntity str1 = em.find( StrTestEntity.class, str1_id ); + StrTestEntity str2 = em.find( StrTestEntity.class, str2_id ); - DoubleSetRefCollEntity rev1 = getAuditReader().find( DoubleSetRefCollEntity.class, coll1_id, 1 ); - DoubleSetRefCollEntity rev2 = getAuditReader().find( DoubleSetRefCollEntity.class, coll1_id, 2 ); - DoubleSetRefCollEntity rev3 = getAuditReader().find( DoubleSetRefCollEntity.class, coll1_id, 3 ); + DoubleSetRefCollEntity rev1 = auditReader.find( DoubleSetRefCollEntity.class, coll1_id, 1 ); + DoubleSetRefCollEntity rev2 = auditReader.find( DoubleSetRefCollEntity.class, coll1_id, 2 ); + DoubleSetRefCollEntity rev3 = auditReader.find( DoubleSetRefCollEntity.class, coll1_id, 3 ); - assert rev1.getCollection().equals( TestTools.makeSet( str1 ) ); - assert rev2.getCollection().equals( TestTools.makeSet( str1, str2 ) ); - assert rev3.getCollection().equals( TestTools.makeSet( str2 ) ); + assertEquals( rev1.getCollection(), TestTools.makeSet( str1 ) ); + assertEquals( rev2.getCollection(), TestTools.makeSet( str1, str2 ) ); + assertEquals( rev3.getCollection(), TestTools.makeSet( str2 ) ); - assert rev1.getCollection2().equals( TestTools.makeSet( str2 ) ); - assert rev2.getCollection2().equals( TestTools.makeSet( str2 ) ); - assert rev3.getCollection2().equals( TestTools.makeSet( str1, str2 ) ); + assertEquals( rev1.getCollection2(), TestTools.makeSet( str2 ) ); + assertEquals( rev2.getCollection2(), TestTools.makeSet( str2 ) ); + assertEquals( rev3.getCollection2(), TestTools.makeSet( str1, str2 ) ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/detached/DoubleJoinColumnBidirectionalList.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/detached/DoubleJoinColumnBidirectionalList.java index 4fbd36da24b5..4ab9b0f47c7d 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/detached/DoubleJoinColumnBidirectionalList.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/detached/DoubleJoinColumnBidirectionalList.java @@ -5,19 +5,21 @@ package org.hibernate.orm.test.envers.integration.onetomany.detached; import java.util.Arrays; -import jakarta.persistence.EntityManager; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.orm.test.envers.entities.onetomany.detached.DoubleListJoinColumnBidirectionalRefEdEntity1; import org.hibernate.orm.test.envers.entities.onetomany.detached.DoubleListJoinColumnBidirectionalRefEdEntity2; import org.hibernate.orm.test.envers.entities.onetomany.detached.DoubleListJoinColumnBidirectionalRefIngEntity; -import org.junit.Test; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; import static org.hibernate.orm.test.envers.tools.TestTools.checkCollection; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; /** * Test for a double "fake" bidirectional mapping where one side uses @OneToMany+@JoinColumn @@ -25,7 +27,13 @@ * * @author Adam Warski (adam at warski dot org) */ -public class DoubleJoinColumnBidirectionalList extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = { + DoubleListJoinColumnBidirectionalRefIngEntity.class, + DoubleListJoinColumnBidirectionalRefEdEntity1.class, + DoubleListJoinColumnBidirectionalRefEdEntity2.class +}) +public class DoubleJoinColumnBidirectionalList { private Integer ed1_1_id; private Integer ed2_1_id; private Integer ed1_2_id; @@ -34,20 +42,8 @@ public class DoubleJoinColumnBidirectionalList extends BaseEnversJPAFunctionalTe private Integer ing1_id; private Integer ing2_id; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { - DoubleListJoinColumnBidirectionalRefIngEntity.class, - DoubleListJoinColumnBidirectionalRefEdEntity1.class, - DoubleListJoinColumnBidirectionalRefEdEntity2.class - }; - } - - @Test - @Priority(10) - public void createData() { - EntityManager em = getEntityManager(); - + @BeforeClassTemplate + public void createData(EntityManagerFactoryScope scope) { DoubleListJoinColumnBidirectionalRefEdEntity1 ed1_1 = new DoubleListJoinColumnBidirectionalRefEdEntity1( "ed1_1", null @@ -70,79 +66,59 @@ public void createData() { DoubleListJoinColumnBidirectionalRefIngEntity ing2 = new DoubleListJoinColumnBidirectionalRefIngEntity( "coll2" ); // Revision 1 (ing1: ed1_1, ed2_1, ing2: ed1_2, ed2_2) - em.getTransaction().begin(); - - ing1.getReferences1().add( ed1_1 ); - ing1.getReferences2().add( ed2_1 ); - - ing2.getReferences1().add( ed1_2 ); - ing2.getReferences2().add( ed2_2 ); + scope.inTransaction( em -> { + ing1.getReferences1().add( ed1_1 ); + ing1.getReferences2().add( ed2_1 ); - em.persist( ed1_1 ); - em.persist( ed1_2 ); - em.persist( ed2_1 ); - em.persist( ed2_2 ); - em.persist( ing1 ); - em.persist( ing2 ); + ing2.getReferences1().add( ed1_2 ); + ing2.getReferences2().add( ed2_2 ); - em.getTransaction().commit(); + em.persist( ed1_1 ); + em.persist( ed1_2 ); + em.persist( ed2_1 ); + em.persist( ed2_2 ); + em.persist( ing1 ); + em.persist( ing2 ); + } ); // Revision 2 (ing1: ed1_1, ed1_2, ed2_1, ed2_2) - em.getTransaction().begin(); + scope.inTransaction( em -> { + DoubleListJoinColumnBidirectionalRefIngEntity ing1Ref = em.find( DoubleListJoinColumnBidirectionalRefIngEntity.class, ing1.getId() ); + DoubleListJoinColumnBidirectionalRefIngEntity ing2Ref = em.find( DoubleListJoinColumnBidirectionalRefIngEntity.class, ing2.getId() ); + DoubleListJoinColumnBidirectionalRefEdEntity1 ed1_2Ref = em.find( DoubleListJoinColumnBidirectionalRefEdEntity1.class, ed1_2.getId() ); + DoubleListJoinColumnBidirectionalRefEdEntity2 ed2_2Ref = em.find( DoubleListJoinColumnBidirectionalRefEdEntity2.class, ed2_2.getId() ); - ing1 = em.find( DoubleListJoinColumnBidirectionalRefIngEntity.class, ing1.getId() ); - ing2 = em.find( DoubleListJoinColumnBidirectionalRefIngEntity.class, ing2.getId() ); - ed1_1 = em.find( DoubleListJoinColumnBidirectionalRefEdEntity1.class, ed1_1.getId() ); - ed1_2 = em.find( DoubleListJoinColumnBidirectionalRefEdEntity1.class, ed1_2.getId() ); - ed2_1 = em.find( DoubleListJoinColumnBidirectionalRefEdEntity2.class, ed2_1.getId() ); - ed2_2 = em.find( DoubleListJoinColumnBidirectionalRefEdEntity2.class, ed2_2.getId() ); + ing2Ref.getReferences1().clear(); + ing2Ref.getReferences2().clear(); - ing2.getReferences1().clear(); - ing2.getReferences2().clear(); - - ing1.getReferences1().add( ed1_2 ); - ing1.getReferences2().add( ed2_2 ); - - em.getTransaction().commit(); - em.clear(); + ing1Ref.getReferences1().add( ed1_2Ref ); + ing1Ref.getReferences2().add( ed2_2Ref ); + } ); // Revision 3 (ing1: ed1_1, ed1_2, ed2_1, ed2_2) - em.getTransaction().begin(); - - ing1 = em.find( DoubleListJoinColumnBidirectionalRefIngEntity.class, ing1.getId() ); - ing2 = em.find( DoubleListJoinColumnBidirectionalRefIngEntity.class, ing2.getId() ); - ed1_1 = em.find( DoubleListJoinColumnBidirectionalRefEdEntity1.class, ed1_1.getId() ); - ed1_2 = em.find( DoubleListJoinColumnBidirectionalRefEdEntity1.class, ed1_2.getId() ); - ed2_1 = em.find( DoubleListJoinColumnBidirectionalRefEdEntity2.class, ed2_1.getId() ); - ed2_2 = em.find( DoubleListJoinColumnBidirectionalRefEdEntity2.class, ed2_2.getId() ); + scope.inTransaction( em -> { + DoubleListJoinColumnBidirectionalRefEdEntity1 ed1_1Ref = em.find( DoubleListJoinColumnBidirectionalRefEdEntity1.class, ed1_1.getId() ); + DoubleListJoinColumnBidirectionalRefEdEntity2 ed2_2Ref = em.find( DoubleListJoinColumnBidirectionalRefEdEntity2.class, ed2_2.getId() ); - ed1_1.setData( "ed1_1 bis" ); - ed2_2.setData( "ed2_2 bis" ); - - em.getTransaction().commit(); - em.clear(); + ed1_1Ref.setData( "ed1_1 bis" ); + ed2_2Ref.setData( "ed2_2 bis" ); + } ); // Revision 4 (ing1: ed2_2, ing2: ed2_1, ed1_1, ed1_2) - em.getTransaction().begin(); - - ing1 = em.find( DoubleListJoinColumnBidirectionalRefIngEntity.class, ing1.getId() ); - ing2 = em.find( DoubleListJoinColumnBidirectionalRefIngEntity.class, ing2.getId() ); - ed1_1 = em.find( DoubleListJoinColumnBidirectionalRefEdEntity1.class, ed1_1.getId() ); - ed1_2 = em.find( DoubleListJoinColumnBidirectionalRefEdEntity1.class, ed1_2.getId() ); - ed2_1 = em.find( DoubleListJoinColumnBidirectionalRefEdEntity2.class, ed2_1.getId() ); - ed2_2 = em.find( DoubleListJoinColumnBidirectionalRefEdEntity2.class, ed2_2.getId() ); - - ing1.getReferences1().clear(); - ing2.getReferences1().add( ed1_1 ); - ing2.getReferences1().add( ed1_2 ); + scope.inTransaction( em -> { + DoubleListJoinColumnBidirectionalRefIngEntity ing1Ref = em.find( DoubleListJoinColumnBidirectionalRefIngEntity.class, ing1.getId() ); + DoubleListJoinColumnBidirectionalRefIngEntity ing2Ref = em.find( DoubleListJoinColumnBidirectionalRefIngEntity.class, ing2.getId() ); + DoubleListJoinColumnBidirectionalRefEdEntity1 ed1_1Ref = em.find( DoubleListJoinColumnBidirectionalRefEdEntity1.class, ed1_1.getId() ); + DoubleListJoinColumnBidirectionalRefEdEntity1 ed1_2Ref = em.find( DoubleListJoinColumnBidirectionalRefEdEntity1.class, ed1_2.getId() ); + DoubleListJoinColumnBidirectionalRefEdEntity2 ed2_1Ref = em.find( DoubleListJoinColumnBidirectionalRefEdEntity2.class, ed2_1.getId() ); - ing1.getReferences2().remove( ed2_1 ); - ing2.getReferences2().add( ed2_1 ); + ing1Ref.getReferences1().clear(); + ing2Ref.getReferences1().add( ed1_1Ref ); + ing2Ref.getReferences1().add( ed1_2Ref ); - em.getTransaction().commit(); - em.clear(); - - // + ing1Ref.getReferences2().remove( ed2_1Ref ); + ing2Ref.getReferences2().add( ed2_1Ref ); + } ); ing1_id = ing1.getId(); ing2_id = ing2.getId(); @@ -154,332 +130,347 @@ public void createData() { } @Test - public void testRevisionsCounts() { - assertEquals( - Arrays.asList( 1, 2, 4 ), getAuditReader().getRevisions( - DoubleListJoinColumnBidirectionalRefIngEntity.class, - ing1_id - ) - ); - assertEquals( - Arrays.asList( 1, 2, 4 ), getAuditReader().getRevisions( - DoubleListJoinColumnBidirectionalRefIngEntity.class, - ing2_id - ) - ); - - assertEquals( - Arrays.asList( 1, 3, 4 ), getAuditReader().getRevisions( - DoubleListJoinColumnBidirectionalRefEdEntity1.class, - ed1_1_id - ) - ); - assertEquals( - Arrays.asList( 1, 2, 4 ), getAuditReader().getRevisions( - DoubleListJoinColumnBidirectionalRefEdEntity1.class, - ed1_2_id - ) - ); - - assertEquals( - Arrays.asList( 1, 4 ), getAuditReader().getRevisions( - DoubleListJoinColumnBidirectionalRefEdEntity2.class, - ed2_1_id - ) - ); - assertEquals( - Arrays.asList( 1, 2, 3 ), getAuditReader().getRevisions( - DoubleListJoinColumnBidirectionalRefEdEntity2.class, - ed2_2_id - ) - ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( + Arrays.asList( 1, 2, 4 ), + auditReader.getRevisions( DoubleListJoinColumnBidirectionalRefIngEntity.class, ing1_id ) + ); + assertEquals( + Arrays.asList( 1, 2, 4 ), + auditReader.getRevisions( DoubleListJoinColumnBidirectionalRefIngEntity.class, ing2_id ) + ); + + assertEquals( + Arrays.asList( 1, 3, 4 ), + auditReader.getRevisions( DoubleListJoinColumnBidirectionalRefEdEntity1.class, ed1_1_id ) + ); + assertEquals( + Arrays.asList( 1, 2, 4 ), + auditReader.getRevisions( DoubleListJoinColumnBidirectionalRefEdEntity1.class, ed1_2_id ) + ); + + assertEquals( + Arrays.asList( 1, 4 ), + auditReader.getRevisions( DoubleListJoinColumnBidirectionalRefEdEntity2.class, ed2_1_id ) + ); + assertEquals( + Arrays.asList( 1, 2, 3 ), + auditReader.getRevisions( DoubleListJoinColumnBidirectionalRefEdEntity2.class, ed2_2_id ) + ); + } ); } @Test - public void testHistoryOfIng1() { - DoubleListJoinColumnBidirectionalRefEdEntity1 ed1_1_fromRev1 = new DoubleListJoinColumnBidirectionalRefEdEntity1( - ed1_1_id, - "ed1_1", - null - ); - DoubleListJoinColumnBidirectionalRefEdEntity1 ed1_1_fromRev3 = new DoubleListJoinColumnBidirectionalRefEdEntity1( - ed1_1_id, - "ed1_1 bis", - null - ); - DoubleListJoinColumnBidirectionalRefEdEntity1 ed1_2 = getEntityManager().find( - DoubleListJoinColumnBidirectionalRefEdEntity1.class, - ed1_2_id - ); - DoubleListJoinColumnBidirectionalRefEdEntity2 ed2_1 = getEntityManager().find( - DoubleListJoinColumnBidirectionalRefEdEntity2.class, - ed2_1_id - ); - DoubleListJoinColumnBidirectionalRefEdEntity2 ed2_2_fromRev1 = new DoubleListJoinColumnBidirectionalRefEdEntity2( - ed2_2_id, - "ed2_2", - null - ); - DoubleListJoinColumnBidirectionalRefEdEntity2 ed2_2_fromRev3 = new DoubleListJoinColumnBidirectionalRefEdEntity2( - ed2_2_id, - "ed2_2 bis", - null - ); - - DoubleListJoinColumnBidirectionalRefIngEntity rev1 = getAuditReader().find( - DoubleListJoinColumnBidirectionalRefIngEntity.class, - ing1_id, - 1 - ); - DoubleListJoinColumnBidirectionalRefIngEntity rev2 = getAuditReader().find( - DoubleListJoinColumnBidirectionalRefIngEntity.class, - ing1_id, - 2 - ); - DoubleListJoinColumnBidirectionalRefIngEntity rev3 = getAuditReader().find( - DoubleListJoinColumnBidirectionalRefIngEntity.class, - ing1_id, - 3 - ); - DoubleListJoinColumnBidirectionalRefIngEntity rev4 = getAuditReader().find( - DoubleListJoinColumnBidirectionalRefIngEntity.class, - ing1_id, - 4 - ); - - assertTrue( checkCollection( rev1.getReferences1(), ed1_1_fromRev1 ) ); - assertTrue( checkCollection( rev2.getReferences1(), ed1_1_fromRev1, ed1_2 ) ); - assertTrue( checkCollection( rev3.getReferences1(), ed1_1_fromRev3, ed1_2 ) ); - assertTrue( checkCollection( rev4.getReferences1() ) ); - - assertTrue( checkCollection( rev1.getReferences2(), ed2_1 ) ); - assertTrue( checkCollection( rev2.getReferences2(), ed2_1, ed2_2_fromRev1 ) ); - assertTrue( checkCollection( rev3.getReferences2(), ed2_1, ed2_2_fromRev3 ) ); - assertTrue( checkCollection( rev4.getReferences2(), ed2_2_fromRev3 ) ); + public void testHistoryOfIng1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + + DoubleListJoinColumnBidirectionalRefEdEntity1 ed1_1_fromRev1 = new DoubleListJoinColumnBidirectionalRefEdEntity1( + ed1_1_id, + "ed1_1", + null + ); + DoubleListJoinColumnBidirectionalRefEdEntity1 ed1_1_fromRev3 = new DoubleListJoinColumnBidirectionalRefEdEntity1( + ed1_1_id, + "ed1_1 bis", + null + ); + DoubleListJoinColumnBidirectionalRefEdEntity1 ed1_2 = em.find( + DoubleListJoinColumnBidirectionalRefEdEntity1.class, + ed1_2_id + ); + DoubleListJoinColumnBidirectionalRefEdEntity2 ed2_1 = em.find( + DoubleListJoinColumnBidirectionalRefEdEntity2.class, + ed2_1_id + ); + DoubleListJoinColumnBidirectionalRefEdEntity2 ed2_2_fromRev1 = new DoubleListJoinColumnBidirectionalRefEdEntity2( + ed2_2_id, + "ed2_2", + null + ); + DoubleListJoinColumnBidirectionalRefEdEntity2 ed2_2_fromRev3 = new DoubleListJoinColumnBidirectionalRefEdEntity2( + ed2_2_id, + "ed2_2 bis", + null + ); + + DoubleListJoinColumnBidirectionalRefIngEntity rev1 = auditReader.find( + DoubleListJoinColumnBidirectionalRefIngEntity.class, + ing1_id, + 1 + ); + DoubleListJoinColumnBidirectionalRefIngEntity rev2 = auditReader.find( + DoubleListJoinColumnBidirectionalRefIngEntity.class, + ing1_id, + 2 + ); + DoubleListJoinColumnBidirectionalRefIngEntity rev3 = auditReader.find( + DoubleListJoinColumnBidirectionalRefIngEntity.class, + ing1_id, + 3 + ); + DoubleListJoinColumnBidirectionalRefIngEntity rev4 = auditReader.find( + DoubleListJoinColumnBidirectionalRefIngEntity.class, + ing1_id, + 4 + ); + + assertTrue( checkCollection( rev1.getReferences1(), ed1_1_fromRev1 ) ); + assertTrue( checkCollection( rev2.getReferences1(), ed1_1_fromRev1, ed1_2 ) ); + assertTrue( checkCollection( rev3.getReferences1(), ed1_1_fromRev3, ed1_2 ) ); + assertTrue( checkCollection( rev4.getReferences1() ) ); + + assertTrue( checkCollection( rev1.getReferences2(), ed2_1 ) ); + assertTrue( checkCollection( rev2.getReferences2(), ed2_1, ed2_2_fromRev1 ) ); + assertTrue( checkCollection( rev3.getReferences2(), ed2_1, ed2_2_fromRev3 ) ); + assertTrue( checkCollection( rev4.getReferences2(), ed2_2_fromRev3 ) ); + } ); } @Test - public void testHistoryOfIng2() { - DoubleListJoinColumnBidirectionalRefEdEntity1 ed1_1_fromRev3 = new DoubleListJoinColumnBidirectionalRefEdEntity1( - ed1_1_id, - "ed1_1 bis", - null - ); - DoubleListJoinColumnBidirectionalRefEdEntity1 ed1_2 = getEntityManager().find( - DoubleListJoinColumnBidirectionalRefEdEntity1.class, - ed1_2_id - ); - DoubleListJoinColumnBidirectionalRefEdEntity2 ed2_1 = getEntityManager().find( - DoubleListJoinColumnBidirectionalRefEdEntity2.class, - ed2_1_id - ); - DoubleListJoinColumnBidirectionalRefEdEntity2 ed2_2_fromRev1 = new DoubleListJoinColumnBidirectionalRefEdEntity2( - ed2_2_id, - "ed2_2", - null - ); - - DoubleListJoinColumnBidirectionalRefIngEntity rev1 = getAuditReader().find( - DoubleListJoinColumnBidirectionalRefIngEntity.class, - ing2_id, - 1 - ); - DoubleListJoinColumnBidirectionalRefIngEntity rev2 = getAuditReader().find( - DoubleListJoinColumnBidirectionalRefIngEntity.class, - ing2_id, - 2 - ); - DoubleListJoinColumnBidirectionalRefIngEntity rev3 = getAuditReader().find( - DoubleListJoinColumnBidirectionalRefIngEntity.class, - ing2_id, - 3 - ); - DoubleListJoinColumnBidirectionalRefIngEntity rev4 = getAuditReader().find( - DoubleListJoinColumnBidirectionalRefIngEntity.class, - ing2_id, - 4 - ); - - assertTrue( checkCollection( rev1.getReferences1(), ed1_2 ) ); - assertTrue( checkCollection( rev2.getReferences1() ) ); - assertTrue( checkCollection( rev3.getReferences1() ) ); - assertTrue( checkCollection( rev4.getReferences1(), ed1_1_fromRev3, ed1_2 ) ); - - assertTrue( checkCollection( rev1.getReferences2(), ed2_2_fromRev1 ) ); - assertTrue( checkCollection( rev2.getReferences2() ) ); - assertTrue( checkCollection( rev3.getReferences2() ) ); - assertTrue( checkCollection( rev4.getReferences2(), ed2_1 ) ); + public void testHistoryOfIng2(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + + DoubleListJoinColumnBidirectionalRefEdEntity1 ed1_1_fromRev3 = new DoubleListJoinColumnBidirectionalRefEdEntity1( + ed1_1_id, + "ed1_1 bis", + null + ); + DoubleListJoinColumnBidirectionalRefEdEntity1 ed1_2 = em.find( + DoubleListJoinColumnBidirectionalRefEdEntity1.class, + ed1_2_id + ); + DoubleListJoinColumnBidirectionalRefEdEntity2 ed2_1 = em.find( + DoubleListJoinColumnBidirectionalRefEdEntity2.class, + ed2_1_id + ); + DoubleListJoinColumnBidirectionalRefEdEntity2 ed2_2_fromRev1 = new DoubleListJoinColumnBidirectionalRefEdEntity2( + ed2_2_id, + "ed2_2", + null + ); + + DoubleListJoinColumnBidirectionalRefIngEntity rev1 = auditReader.find( + DoubleListJoinColumnBidirectionalRefIngEntity.class, + ing2_id, + 1 + ); + DoubleListJoinColumnBidirectionalRefIngEntity rev2 = auditReader.find( + DoubleListJoinColumnBidirectionalRefIngEntity.class, + ing2_id, + 2 + ); + DoubleListJoinColumnBidirectionalRefIngEntity rev3 = auditReader.find( + DoubleListJoinColumnBidirectionalRefIngEntity.class, + ing2_id, + 3 + ); + DoubleListJoinColumnBidirectionalRefIngEntity rev4 = auditReader.find( + DoubleListJoinColumnBidirectionalRefIngEntity.class, + ing2_id, + 4 + ); + + assertTrue( checkCollection( rev1.getReferences1(), ed1_2 ) ); + assertTrue( checkCollection( rev2.getReferences1() ) ); + assertTrue( checkCollection( rev3.getReferences1() ) ); + assertTrue( checkCollection( rev4.getReferences1(), ed1_1_fromRev3, ed1_2 ) ); + + assertTrue( checkCollection( rev1.getReferences2(), ed2_2_fromRev1 ) ); + assertTrue( checkCollection( rev2.getReferences2() ) ); + assertTrue( checkCollection( rev3.getReferences2() ) ); + assertTrue( checkCollection( rev4.getReferences2(), ed2_1 ) ); + } ); } @Test - public void testHistoryOfEd1_1() { - DoubleListJoinColumnBidirectionalRefIngEntity ing1 = getEntityManager().find( - DoubleListJoinColumnBidirectionalRefIngEntity.class, - ing1_id - ); - DoubleListJoinColumnBidirectionalRefIngEntity ing2 = getEntityManager().find( - DoubleListJoinColumnBidirectionalRefIngEntity.class, - ing2_id - ); - - DoubleListJoinColumnBidirectionalRefEdEntity1 rev1 = getAuditReader().find( - DoubleListJoinColumnBidirectionalRefEdEntity1.class, - ed1_1_id, - 1 - ); - DoubleListJoinColumnBidirectionalRefEdEntity1 rev2 = getAuditReader().find( - DoubleListJoinColumnBidirectionalRefEdEntity1.class, - ed1_1_id, - 2 - ); - DoubleListJoinColumnBidirectionalRefEdEntity1 rev3 = getAuditReader().find( - DoubleListJoinColumnBidirectionalRefEdEntity1.class, - ed1_1_id, - 3 - ); - DoubleListJoinColumnBidirectionalRefEdEntity1 rev4 = getAuditReader().find( - DoubleListJoinColumnBidirectionalRefEdEntity1.class, - ed1_1_id, - 4 - ); - - assertTrue( rev1.getOwner().equals( ing1 ) ); - assertTrue( rev2.getOwner().equals( ing1 ) ); - assertTrue( rev3.getOwner().equals( ing1 ) ); - assertTrue( rev4.getOwner().equals( ing2 ) ); - - assertEquals( rev1.getData(), "ed1_1" ); - assertEquals( rev2.getData(), "ed1_1" ); - assertEquals( rev3.getData(), "ed1_1 bis" ); - assertEquals( rev4.getData(), "ed1_1 bis" ); + public void testHistoryOfEd1_1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + + DoubleListJoinColumnBidirectionalRefIngEntity ing1 = em.find( + DoubleListJoinColumnBidirectionalRefIngEntity.class, + ing1_id + ); + DoubleListJoinColumnBidirectionalRefIngEntity ing2 = em.find( + DoubleListJoinColumnBidirectionalRefIngEntity.class, + ing2_id + ); + + DoubleListJoinColumnBidirectionalRefEdEntity1 rev1 = auditReader.find( + DoubleListJoinColumnBidirectionalRefEdEntity1.class, + ed1_1_id, + 1 + ); + DoubleListJoinColumnBidirectionalRefEdEntity1 rev2 = auditReader.find( + DoubleListJoinColumnBidirectionalRefEdEntity1.class, + ed1_1_id, + 2 + ); + DoubleListJoinColumnBidirectionalRefEdEntity1 rev3 = auditReader.find( + DoubleListJoinColumnBidirectionalRefEdEntity1.class, + ed1_1_id, + 3 + ); + DoubleListJoinColumnBidirectionalRefEdEntity1 rev4 = auditReader.find( + DoubleListJoinColumnBidirectionalRefEdEntity1.class, + ed1_1_id, + 4 + ); + + assertTrue( rev1.getOwner().equals( ing1 ) ); + assertTrue( rev2.getOwner().equals( ing1 ) ); + assertTrue( rev3.getOwner().equals( ing1 ) ); + assertTrue( rev4.getOwner().equals( ing2 ) ); + + assertEquals( rev1.getData(), "ed1_1" ); + assertEquals( rev2.getData(), "ed1_1" ); + assertEquals( rev3.getData(), "ed1_1 bis" ); + assertEquals( rev4.getData(), "ed1_1 bis" ); + } ); } @Test - public void testHistoryOfEd1_2() { - DoubleListJoinColumnBidirectionalRefIngEntity ing1 = getEntityManager().find( - DoubleListJoinColumnBidirectionalRefIngEntity.class, - ing1_id - ); - DoubleListJoinColumnBidirectionalRefIngEntity ing2 = getEntityManager().find( - DoubleListJoinColumnBidirectionalRefIngEntity.class, - ing2_id - ); - - DoubleListJoinColumnBidirectionalRefEdEntity1 rev1 = getAuditReader().find( - DoubleListJoinColumnBidirectionalRefEdEntity1.class, - ed1_2_id, - 1 - ); - DoubleListJoinColumnBidirectionalRefEdEntity1 rev2 = getAuditReader().find( - DoubleListJoinColumnBidirectionalRefEdEntity1.class, - ed1_2_id, - 2 - ); - DoubleListJoinColumnBidirectionalRefEdEntity1 rev3 = getAuditReader().find( - DoubleListJoinColumnBidirectionalRefEdEntity1.class, - ed1_2_id, - 3 - ); - DoubleListJoinColumnBidirectionalRefEdEntity1 rev4 = getAuditReader().find( - DoubleListJoinColumnBidirectionalRefEdEntity1.class, - ed1_2_id, - 4 - ); - - assertTrue( rev1.getOwner().equals( ing2 ) ); - assertTrue( rev2.getOwner().equals( ing1 ) ); - assertTrue( rev3.getOwner().equals( ing1 ) ); - assertTrue( rev4.getOwner().equals( ing2 ) ); - - assertEquals( rev1.getData(), "ed1_2" ); - assertEquals( rev2.getData(), "ed1_2" ); - assertEquals( rev3.getData(), "ed1_2" ); - assertEquals( rev4.getData(), "ed1_2" ); + public void testHistoryOfEd1_2(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + + DoubleListJoinColumnBidirectionalRefIngEntity ing1 = em.find( + DoubleListJoinColumnBidirectionalRefIngEntity.class, + ing1_id + ); + DoubleListJoinColumnBidirectionalRefIngEntity ing2 = em.find( + DoubleListJoinColumnBidirectionalRefIngEntity.class, + ing2_id + ); + + DoubleListJoinColumnBidirectionalRefEdEntity1 rev1 = auditReader.find( + DoubleListJoinColumnBidirectionalRefEdEntity1.class, + ed1_2_id, + 1 + ); + DoubleListJoinColumnBidirectionalRefEdEntity1 rev2 = auditReader.find( + DoubleListJoinColumnBidirectionalRefEdEntity1.class, + ed1_2_id, + 2 + ); + DoubleListJoinColumnBidirectionalRefEdEntity1 rev3 = auditReader.find( + DoubleListJoinColumnBidirectionalRefEdEntity1.class, + ed1_2_id, + 3 + ); + DoubleListJoinColumnBidirectionalRefEdEntity1 rev4 = auditReader.find( + DoubleListJoinColumnBidirectionalRefEdEntity1.class, + ed1_2_id, + 4 + ); + + assertTrue( rev1.getOwner().equals( ing2 ) ); + assertTrue( rev2.getOwner().equals( ing1 ) ); + assertTrue( rev3.getOwner().equals( ing1 ) ); + assertTrue( rev4.getOwner().equals( ing2 ) ); + + assertEquals( rev1.getData(), "ed1_2" ); + assertEquals( rev2.getData(), "ed1_2" ); + assertEquals( rev3.getData(), "ed1_2" ); + assertEquals( rev4.getData(), "ed1_2" ); + } ); } @Test - public void testHistoryOfEd2_1() { - DoubleListJoinColumnBidirectionalRefIngEntity ing1 = getEntityManager().find( - DoubleListJoinColumnBidirectionalRefIngEntity.class, - ing1_id - ); - DoubleListJoinColumnBidirectionalRefIngEntity ing2 = getEntityManager().find( - DoubleListJoinColumnBidirectionalRefIngEntity.class, - ing2_id - ); - - DoubleListJoinColumnBidirectionalRefEdEntity2 rev1 = getAuditReader().find( - DoubleListJoinColumnBidirectionalRefEdEntity2.class, - ed2_1_id, - 1 - ); - DoubleListJoinColumnBidirectionalRefEdEntity2 rev2 = getAuditReader().find( - DoubleListJoinColumnBidirectionalRefEdEntity2.class, - ed2_1_id, - 2 - ); - DoubleListJoinColumnBidirectionalRefEdEntity2 rev3 = getAuditReader().find( - DoubleListJoinColumnBidirectionalRefEdEntity2.class, - ed2_1_id, - 3 - ); - DoubleListJoinColumnBidirectionalRefEdEntity2 rev4 = getAuditReader().find( - DoubleListJoinColumnBidirectionalRefEdEntity2.class, - ed2_1_id, - 4 - ); - - assertTrue( rev1.getOwner().equals( ing1 ) ); - assertTrue( rev2.getOwner().equals( ing1 ) ); - assertTrue( rev3.getOwner().equals( ing1 ) ); - assertTrue( rev4.getOwner().equals( ing2 ) ); - - assertEquals( rev1.getData(), "ed2_1" ); - assertEquals( rev2.getData(), "ed2_1" ); - assertEquals( rev3.getData(), "ed2_1" ); - assertEquals( rev4.getData(), "ed2_1" ); + public void testHistoryOfEd2_1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + + DoubleListJoinColumnBidirectionalRefIngEntity ing1 = em.find( + DoubleListJoinColumnBidirectionalRefIngEntity.class, + ing1_id + ); + DoubleListJoinColumnBidirectionalRefIngEntity ing2 = em.find( + DoubleListJoinColumnBidirectionalRefIngEntity.class, + ing2_id + ); + + DoubleListJoinColumnBidirectionalRefEdEntity2 rev1 = auditReader.find( + DoubleListJoinColumnBidirectionalRefEdEntity2.class, + ed2_1_id, + 1 + ); + DoubleListJoinColumnBidirectionalRefEdEntity2 rev2 = auditReader.find( + DoubleListJoinColumnBidirectionalRefEdEntity2.class, + ed2_1_id, + 2 + ); + DoubleListJoinColumnBidirectionalRefEdEntity2 rev3 = auditReader.find( + DoubleListJoinColumnBidirectionalRefEdEntity2.class, + ed2_1_id, + 3 + ); + DoubleListJoinColumnBidirectionalRefEdEntity2 rev4 = auditReader.find( + DoubleListJoinColumnBidirectionalRefEdEntity2.class, + ed2_1_id, + 4 + ); + + assertTrue( rev1.getOwner().equals( ing1 ) ); + assertTrue( rev2.getOwner().equals( ing1 ) ); + assertTrue( rev3.getOwner().equals( ing1 ) ); + assertTrue( rev4.getOwner().equals( ing2 ) ); + + assertEquals( rev1.getData(), "ed2_1" ); + assertEquals( rev2.getData(), "ed2_1" ); + assertEquals( rev3.getData(), "ed2_1" ); + assertEquals( rev4.getData(), "ed2_1" ); + } ); } @Test - public void testHistoryOfEd2_2() { - DoubleListJoinColumnBidirectionalRefIngEntity ing1 = getEntityManager().find( - DoubleListJoinColumnBidirectionalRefIngEntity.class, - ing1_id - ); - DoubleListJoinColumnBidirectionalRefIngEntity ing2 = getEntityManager().find( - DoubleListJoinColumnBidirectionalRefIngEntity.class, - ing2_id - ); - - DoubleListJoinColumnBidirectionalRefEdEntity2 rev1 = getAuditReader().find( - DoubleListJoinColumnBidirectionalRefEdEntity2.class, - ed2_2_id, - 1 - ); - DoubleListJoinColumnBidirectionalRefEdEntity2 rev2 = getAuditReader().find( - DoubleListJoinColumnBidirectionalRefEdEntity2.class, - ed2_2_id, - 2 - ); - DoubleListJoinColumnBidirectionalRefEdEntity2 rev3 = getAuditReader().find( - DoubleListJoinColumnBidirectionalRefEdEntity2.class, - ed2_2_id, - 3 - ); - DoubleListJoinColumnBidirectionalRefEdEntity2 rev4 = getAuditReader().find( - DoubleListJoinColumnBidirectionalRefEdEntity2.class, - ed2_2_id, - 4 - ); - - assertTrue( rev1.getOwner().equals( ing2 ) ); - assertTrue( rev2.getOwner().equals( ing1 ) ); - assertTrue( rev3.getOwner().equals( ing1 ) ); - assertTrue( rev4.getOwner().equals( ing1 ) ); - - assertEquals( rev1.getData(), "ed2_2" ); - assertEquals( rev2.getData(), "ed2_2" ); - assertEquals( rev3.getData(), "ed2_2 bis" ); - assertEquals( rev4.getData(), "ed2_2 bis" ); + public void testHistoryOfEd2_2(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + + DoubleListJoinColumnBidirectionalRefIngEntity ing1 = em.find( + DoubleListJoinColumnBidirectionalRefIngEntity.class, + ing1_id + ); + DoubleListJoinColumnBidirectionalRefIngEntity ing2 = em.find( + DoubleListJoinColumnBidirectionalRefIngEntity.class, + ing2_id + ); + + DoubleListJoinColumnBidirectionalRefEdEntity2 rev1 = auditReader.find( + DoubleListJoinColumnBidirectionalRefEdEntity2.class, + ed2_2_id, + 1 + ); + DoubleListJoinColumnBidirectionalRefEdEntity2 rev2 = auditReader.find( + DoubleListJoinColumnBidirectionalRefEdEntity2.class, + ed2_2_id, + 2 + ); + DoubleListJoinColumnBidirectionalRefEdEntity2 rev3 = auditReader.find( + DoubleListJoinColumnBidirectionalRefEdEntity2.class, + ed2_2_id, + 3 + ); + DoubleListJoinColumnBidirectionalRefEdEntity2 rev4 = auditReader.find( + DoubleListJoinColumnBidirectionalRefEdEntity2.class, + ed2_2_id, + 4 + ); + + assertTrue( rev1.getOwner().equals( ing2 ) ); + assertTrue( rev2.getOwner().equals( ing1 ) ); + assertTrue( rev3.getOwner().equals( ing1 ) ); + assertTrue( rev4.getOwner().equals( ing1 ) ); + + assertEquals( rev1.getData(), "ed2_2" ); + assertEquals( rev2.getData(), "ed2_2" ); + assertEquals( rev3.getData(), "ed2_2 bis" ); + assertEquals( rev4.getData(), "ed2_2 bis" ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/detached/IndexedJoinColumnBidirectionalList.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/detached/IndexedJoinColumnBidirectionalList.java index b9f5c0e8ca61..b214a2848d27 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/detached/IndexedJoinColumnBidirectionalList.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/detached/IndexedJoinColumnBidirectionalList.java @@ -5,17 +5,19 @@ package org.hibernate.orm.test.envers.integration.onetomany.detached; import java.util.Arrays; -import jakarta.persistence.EntityManager; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.orm.test.envers.entities.onetomany.detached.IndexedListJoinColumnBidirectionalRefEdEntity; import org.hibernate.orm.test.envers.entities.onetomany.detached.IndexedListJoinColumnBidirectionalRefIngEntity; -import org.junit.Test; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; /** * Test for a "fake" bidirectional mapping where one side uses @OneToMany+@JoinColumn (and thus owns the relatin), @@ -23,7 +25,12 @@ * * @author Adam Warski (adam at warski dot org) */ -public class IndexedJoinColumnBidirectionalList extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = { + IndexedListJoinColumnBidirectionalRefIngEntity.class, + IndexedListJoinColumnBidirectionalRefEdEntity.class +}) +public class IndexedJoinColumnBidirectionalList { private Integer ed1_id; private Integer ed2_id; private Integer ed3_id; @@ -31,19 +38,8 @@ public class IndexedJoinColumnBidirectionalList extends BaseEnversJPAFunctionalT private Integer ing1_id; private Integer ing2_id; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { - IndexedListJoinColumnBidirectionalRefIngEntity.class, - IndexedListJoinColumnBidirectionalRefEdEntity.class - }; - } - - @Test - @Priority(10) - public void createData() { - EntityManager em = getEntityManager(); - + @BeforeClassTemplate + public void createData(EntityManagerFactoryScope scope) { IndexedListJoinColumnBidirectionalRefEdEntity ed1 = new IndexedListJoinColumnBidirectionalRefEdEntity( "ed1", null @@ -68,60 +64,42 @@ public void createData() { ); // Revision 1 (ing1: ed1, ed2, ed3) - em.getTransaction().begin(); - - em.persist( ed1 ); - em.persist( ed2 ); - em.persist( ed3 ); - em.persist( ing1 ); - em.persist( ing2 ); - - em.getTransaction().commit(); + scope.inTransaction( em -> { + em.persist( ed1 ); + em.persist( ed2 ); + em.persist( ed3 ); + em.persist( ing1 ); + em.persist( ing2 ); + } ); // Revision 2 (ing1: ed1, ed3, ing2: ed2) - em.getTransaction().begin(); - - ing1 = em.find( IndexedListJoinColumnBidirectionalRefIngEntity.class, ing1.getId() ); - ing2 = em.find( IndexedListJoinColumnBidirectionalRefIngEntity.class, ing2.getId() ); - ed2 = em.find( IndexedListJoinColumnBidirectionalRefEdEntity.class, ed2.getId() ); + scope.inTransaction( em -> { + IndexedListJoinColumnBidirectionalRefIngEntity ing1Ref = em.find( IndexedListJoinColumnBidirectionalRefIngEntity.class, ing1.getId() ); + IndexedListJoinColumnBidirectionalRefIngEntity ing2Ref = em.find( IndexedListJoinColumnBidirectionalRefIngEntity.class, ing2.getId() ); + IndexedListJoinColumnBidirectionalRefEdEntity ed2Ref = em.find( IndexedListJoinColumnBidirectionalRefEdEntity.class, ed2.getId() ); - ing1.getReferences().remove( ed2 ); - ing2.getReferences().add( ed2 ); - - em.getTransaction().commit(); - em.clear(); + ing1Ref.getReferences().remove( ed2Ref ); + ing2Ref.getReferences().add( ed2Ref ); + } ); // Revision 3 (ing1: ed3, ed1, ing2: ed2) - em.getTransaction().begin(); - - ing1 = em.find( IndexedListJoinColumnBidirectionalRefIngEntity.class, ing1.getId() ); - ing2 = em.find( IndexedListJoinColumnBidirectionalRefIngEntity.class, ing2.getId() ); - ed1 = em.find( IndexedListJoinColumnBidirectionalRefEdEntity.class, ed1.getId() ); - ed2 = em.find( IndexedListJoinColumnBidirectionalRefEdEntity.class, ed2.getId() ); - ed3 = em.find( IndexedListJoinColumnBidirectionalRefEdEntity.class, ed3.getId() ); + scope.inTransaction( em -> { + IndexedListJoinColumnBidirectionalRefIngEntity ing1Ref = em.find( IndexedListJoinColumnBidirectionalRefIngEntity.class, ing1.getId() ); + IndexedListJoinColumnBidirectionalRefEdEntity ed3Ref = em.find( IndexedListJoinColumnBidirectionalRefEdEntity.class, ed3.getId() ); - ing1.getReferences().remove( ed3 ); - ing1.getReferences().add( 0, ed3 ); - - em.getTransaction().commit(); - em.clear(); + ing1Ref.getReferences().remove( ed3Ref ); + ing1Ref.getReferences().add( 0, ed3Ref ); + } ); // Revision 4 (ing1: ed2, ed3, ed1) - em.getTransaction().begin(); - - ing1 = em.find( IndexedListJoinColumnBidirectionalRefIngEntity.class, ing1.getId() ); - ing2 = em.find( IndexedListJoinColumnBidirectionalRefIngEntity.class, ing2.getId() ); - ed1 = em.find( IndexedListJoinColumnBidirectionalRefEdEntity.class, ed1.getId() ); - ed2 = em.find( IndexedListJoinColumnBidirectionalRefEdEntity.class, ed2.getId() ); - ed3 = em.find( IndexedListJoinColumnBidirectionalRefEdEntity.class, ed3.getId() ); - - ing2.getReferences().remove( ed2 ); - ing1.getReferences().add( 0, ed2 ); - - em.getTransaction().commit(); - em.clear(); + scope.inTransaction( em -> { + IndexedListJoinColumnBidirectionalRefIngEntity ing1Ref = em.find( IndexedListJoinColumnBidirectionalRefIngEntity.class, ing1.getId() ); + IndexedListJoinColumnBidirectionalRefIngEntity ing2Ref = em.find( IndexedListJoinColumnBidirectionalRefIngEntity.class, ing2.getId() ); + IndexedListJoinColumnBidirectionalRefEdEntity ed2Ref = em.find( IndexedListJoinColumnBidirectionalRefEdEntity.class, ed2.getId() ); - // + ing2Ref.getReferences().remove( ed2Ref ); + ing1Ref.getReferences().add( 0, ed2Ref ); + } ); ing1_id = ing1.getId(); ing2_id = ing2.getId(); @@ -132,252 +110,265 @@ public void createData() { } @Test - public void testRevisionsCounts() { - assertEquals( - Arrays.asList( 1, 2, 3, 4 ), getAuditReader().getRevisions( - IndexedListJoinColumnBidirectionalRefIngEntity.class, - ing1_id - ) - ); - assertEquals( - Arrays.asList( 1, 2, 4 ), getAuditReader().getRevisions( - IndexedListJoinColumnBidirectionalRefIngEntity.class, - ing2_id - ) - ); - - assertEquals( - Arrays.asList( 1, 3, 4 ), getAuditReader().getRevisions( - IndexedListJoinColumnBidirectionalRefEdEntity.class, - ed1_id - ) - ); - assertEquals( - Arrays.asList( 1, 2, 4 ), getAuditReader().getRevisions( - IndexedListJoinColumnBidirectionalRefEdEntity.class, - ed2_id - ) - ); - assertEquals( - Arrays.asList( 1, 2, 3, 4 ), getAuditReader().getRevisions( - IndexedListJoinColumnBidirectionalRefEdEntity.class, - ed3_id - ) - ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( + Arrays.asList( 1, 2, 3, 4 ), + auditReader.getRevisions( IndexedListJoinColumnBidirectionalRefIngEntity.class, ing1_id ) + ); + assertEquals( + Arrays.asList( 1, 2, 4 ), + auditReader.getRevisions( IndexedListJoinColumnBidirectionalRefIngEntity.class, ing2_id ) + ); + + assertEquals( + Arrays.asList( 1, 3, 4 ), + auditReader.getRevisions( IndexedListJoinColumnBidirectionalRefEdEntity.class, ed1_id ) + ); + assertEquals( + Arrays.asList( 1, 2, 4 ), + auditReader.getRevisions( IndexedListJoinColumnBidirectionalRefEdEntity.class, ed2_id ) + ); + assertEquals( + Arrays.asList( 1, 2, 3, 4 ), + auditReader.getRevisions( IndexedListJoinColumnBidirectionalRefEdEntity.class, ed3_id ) + ); + } ); } @Test - public void testHistoryOfIng1() { - IndexedListJoinColumnBidirectionalRefEdEntity ed1 = getEntityManager().find( - IndexedListJoinColumnBidirectionalRefEdEntity.class, - ed1_id - ); - IndexedListJoinColumnBidirectionalRefEdEntity ed2 = getEntityManager().find( - IndexedListJoinColumnBidirectionalRefEdEntity.class, - ed2_id - ); - IndexedListJoinColumnBidirectionalRefEdEntity ed3 = getEntityManager().find( - IndexedListJoinColumnBidirectionalRefEdEntity.class, - ed3_id - ); - - IndexedListJoinColumnBidirectionalRefIngEntity rev1 = getAuditReader().find( - IndexedListJoinColumnBidirectionalRefIngEntity.class, - ing1_id, - 1 - ); - IndexedListJoinColumnBidirectionalRefIngEntity rev2 = getAuditReader().find( - IndexedListJoinColumnBidirectionalRefIngEntity.class, - ing1_id, - 2 - ); - IndexedListJoinColumnBidirectionalRefIngEntity rev3 = getAuditReader().find( - IndexedListJoinColumnBidirectionalRefIngEntity.class, - ing1_id, - 3 - ); - IndexedListJoinColumnBidirectionalRefIngEntity rev4 = getAuditReader().find( - IndexedListJoinColumnBidirectionalRefIngEntity.class, - ing1_id, - 4 - ); - - assertEquals( rev1.getReferences().size(), 3 ); - assertEquals( rev1.getReferences().get( 0 ), ed1 ); - assertEquals( rev1.getReferences().get( 1 ), ed2 ); - assertEquals( rev1.getReferences().get( 2 ), ed3 ); - - assertEquals( rev2.getReferences().size(), 2 ); - assertEquals( rev2.getReferences().get( 0 ), ed1 ); - assertEquals( rev2.getReferences().get( 1 ), ed3 ); - - assertEquals( rev3.getReferences().size(), 2 ); - assertEquals( rev3.getReferences().get( 0 ), ed3 ); - assertEquals( rev3.getReferences().get( 1 ), ed1 ); - - assertEquals( rev4.getReferences().size(), 3 ); - assertEquals( rev4.getReferences().get( 0 ), ed2 ); - assertEquals( rev4.getReferences().get( 1 ), ed3 ); - assertEquals( rev4.getReferences().get( 2 ), ed1 ); + public void testHistoryOfIng1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + + IndexedListJoinColumnBidirectionalRefEdEntity ed1 = em.find( + IndexedListJoinColumnBidirectionalRefEdEntity.class, + ed1_id + ); + IndexedListJoinColumnBidirectionalRefEdEntity ed2 = em.find( + IndexedListJoinColumnBidirectionalRefEdEntity.class, + ed2_id + ); + IndexedListJoinColumnBidirectionalRefEdEntity ed3 = em.find( + IndexedListJoinColumnBidirectionalRefEdEntity.class, + ed3_id + ); + + IndexedListJoinColumnBidirectionalRefIngEntity rev1 = auditReader.find( + IndexedListJoinColumnBidirectionalRefIngEntity.class, + ing1_id, + 1 + ); + IndexedListJoinColumnBidirectionalRefIngEntity rev2 = auditReader.find( + IndexedListJoinColumnBidirectionalRefIngEntity.class, + ing1_id, + 2 + ); + IndexedListJoinColumnBidirectionalRefIngEntity rev3 = auditReader.find( + IndexedListJoinColumnBidirectionalRefIngEntity.class, + ing1_id, + 3 + ); + IndexedListJoinColumnBidirectionalRefIngEntity rev4 = auditReader.find( + IndexedListJoinColumnBidirectionalRefIngEntity.class, + ing1_id, + 4 + ); + + assertEquals( rev1.getReferences().size(), 3 ); + assertEquals( rev1.getReferences().get( 0 ), ed1 ); + assertEquals( rev1.getReferences().get( 1 ), ed2 ); + assertEquals( rev1.getReferences().get( 2 ), ed3 ); + + assertEquals( rev2.getReferences().size(), 2 ); + assertEquals( rev2.getReferences().get( 0 ), ed1 ); + assertEquals( rev2.getReferences().get( 1 ), ed3 ); + + assertEquals( rev3.getReferences().size(), 2 ); + assertEquals( rev3.getReferences().get( 0 ), ed3 ); + assertEquals( rev3.getReferences().get( 1 ), ed1 ); + + assertEquals( rev4.getReferences().size(), 3 ); + assertEquals( rev4.getReferences().get( 0 ), ed2 ); + assertEquals( rev4.getReferences().get( 1 ), ed3 ); + assertEquals( rev4.getReferences().get( 2 ), ed1 ); + } ); } @Test - public void testHistoryOfIng2() { - IndexedListJoinColumnBidirectionalRefEdEntity ed2 = getEntityManager().find( - IndexedListJoinColumnBidirectionalRefEdEntity.class, - ed2_id - ); - - IndexedListJoinColumnBidirectionalRefIngEntity rev1 = getAuditReader().find( - IndexedListJoinColumnBidirectionalRefIngEntity.class, - ing2_id, - 1 - ); - IndexedListJoinColumnBidirectionalRefIngEntity rev2 = getAuditReader().find( - IndexedListJoinColumnBidirectionalRefIngEntity.class, - ing2_id, - 2 - ); - IndexedListJoinColumnBidirectionalRefIngEntity rev3 = getAuditReader().find( - IndexedListJoinColumnBidirectionalRefIngEntity.class, - ing2_id, - 3 - ); - IndexedListJoinColumnBidirectionalRefIngEntity rev4 = getAuditReader().find( - IndexedListJoinColumnBidirectionalRefIngEntity.class, - ing2_id, - 4 - ); - - assertEquals( rev1.getReferences().size(), 0 ); - - assertEquals( rev2.getReferences().size(), 1 ); - assertEquals( rev2.getReferences().get( 0 ), ed2 ); - - assertEquals( rev3.getReferences().size(), 1 ); - assertEquals( rev3.getReferences().get( 0 ), ed2 ); - - assertEquals( rev4.getReferences().size(), 0 ); + public void testHistoryOfIng2(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + + IndexedListJoinColumnBidirectionalRefEdEntity ed2 = em.find( + IndexedListJoinColumnBidirectionalRefEdEntity.class, + ed2_id + ); + + IndexedListJoinColumnBidirectionalRefIngEntity rev1 = auditReader.find( + IndexedListJoinColumnBidirectionalRefIngEntity.class, + ing2_id, + 1 + ); + IndexedListJoinColumnBidirectionalRefIngEntity rev2 = auditReader.find( + IndexedListJoinColumnBidirectionalRefIngEntity.class, + ing2_id, + 2 + ); + IndexedListJoinColumnBidirectionalRefIngEntity rev3 = auditReader.find( + IndexedListJoinColumnBidirectionalRefIngEntity.class, + ing2_id, + 3 + ); + IndexedListJoinColumnBidirectionalRefIngEntity rev4 = auditReader.find( + IndexedListJoinColumnBidirectionalRefIngEntity.class, + ing2_id, + 4 + ); + + assertEquals( rev1.getReferences().size(), 0 ); + + assertEquals( rev2.getReferences().size(), 1 ); + assertEquals( rev2.getReferences().get( 0 ), ed2 ); + + assertEquals( rev3.getReferences().size(), 1 ); + assertEquals( rev3.getReferences().get( 0 ), ed2 ); + + assertEquals( rev4.getReferences().size(), 0 ); + } ); } @Test - public void testHistoryOfEd1() { - IndexedListJoinColumnBidirectionalRefIngEntity ing1 = getEntityManager().find( - IndexedListJoinColumnBidirectionalRefIngEntity.class, - ing1_id - ); - - IndexedListJoinColumnBidirectionalRefEdEntity rev1 = getAuditReader().find( - IndexedListJoinColumnBidirectionalRefEdEntity.class, - ed1_id, - 1 - ); - IndexedListJoinColumnBidirectionalRefEdEntity rev2 = getAuditReader().find( - IndexedListJoinColumnBidirectionalRefEdEntity.class, - ed1_id, - 2 - ); - IndexedListJoinColumnBidirectionalRefEdEntity rev3 = getAuditReader().find( - IndexedListJoinColumnBidirectionalRefEdEntity.class, - ed1_id, - 3 - ); - IndexedListJoinColumnBidirectionalRefEdEntity rev4 = getAuditReader().find( - IndexedListJoinColumnBidirectionalRefEdEntity.class, - ed1_id, - 4 - ); - - assertTrue( rev1.getOwner().equals( ing1 ) ); - assertTrue( rev2.getOwner().equals( ing1 ) ); - assertTrue( rev3.getOwner().equals( ing1 ) ); - assertTrue( rev4.getOwner().equals( ing1 ) ); - - assertEquals( rev1.getPosition(), Integer.valueOf( 0 ) ); - assertEquals( rev2.getPosition(), Integer.valueOf( 0 ) ); - assertEquals( rev3.getPosition(), Integer.valueOf( 1 ) ); - assertEquals( rev4.getPosition(), Integer.valueOf( 2 ) ); + public void testHistoryOfEd1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + + IndexedListJoinColumnBidirectionalRefIngEntity ing1 = em.find( + IndexedListJoinColumnBidirectionalRefIngEntity.class, + ing1_id + ); + + IndexedListJoinColumnBidirectionalRefEdEntity rev1 = auditReader.find( + IndexedListJoinColumnBidirectionalRefEdEntity.class, + ed1_id, + 1 + ); + IndexedListJoinColumnBidirectionalRefEdEntity rev2 = auditReader.find( + IndexedListJoinColumnBidirectionalRefEdEntity.class, + ed1_id, + 2 + ); + IndexedListJoinColumnBidirectionalRefEdEntity rev3 = auditReader.find( + IndexedListJoinColumnBidirectionalRefEdEntity.class, + ed1_id, + 3 + ); + IndexedListJoinColumnBidirectionalRefEdEntity rev4 = auditReader.find( + IndexedListJoinColumnBidirectionalRefEdEntity.class, + ed1_id, + 4 + ); + + assertTrue( rev1.getOwner().equals( ing1 ) ); + assertTrue( rev2.getOwner().equals( ing1 ) ); + assertTrue( rev3.getOwner().equals( ing1 ) ); + assertTrue( rev4.getOwner().equals( ing1 ) ); + + assertEquals( rev1.getPosition(), Integer.valueOf( 0 ) ); + assertEquals( rev2.getPosition(), Integer.valueOf( 0 ) ); + assertEquals( rev3.getPosition(), Integer.valueOf( 1 ) ); + assertEquals( rev4.getPosition(), Integer.valueOf( 2 ) ); + } ); } @Test - public void testHistoryOfEd2() { - IndexedListJoinColumnBidirectionalRefIngEntity ing1 = getEntityManager().find( - IndexedListJoinColumnBidirectionalRefIngEntity.class, - ing1_id - ); - IndexedListJoinColumnBidirectionalRefIngEntity ing2 = getEntityManager().find( - IndexedListJoinColumnBidirectionalRefIngEntity.class, - ing2_id - ); - - IndexedListJoinColumnBidirectionalRefEdEntity rev1 = getAuditReader().find( - IndexedListJoinColumnBidirectionalRefEdEntity.class, - ed2_id, - 1 - ); - IndexedListJoinColumnBidirectionalRefEdEntity rev2 = getAuditReader().find( - IndexedListJoinColumnBidirectionalRefEdEntity.class, - ed2_id, - 2 - ); - IndexedListJoinColumnBidirectionalRefEdEntity rev3 = getAuditReader().find( - IndexedListJoinColumnBidirectionalRefEdEntity.class, - ed2_id, - 3 - ); - IndexedListJoinColumnBidirectionalRefEdEntity rev4 = getAuditReader().find( - IndexedListJoinColumnBidirectionalRefEdEntity.class, - ed2_id, - 4 - ); - - assertTrue( rev1.getOwner().equals( ing1 ) ); - assertTrue( rev2.getOwner().equals( ing2 ) ); - assertTrue( rev3.getOwner().equals( ing2 ) ); - assertTrue( rev4.getOwner().equals( ing1 ) ); - - assertEquals( rev1.getPosition(), Integer.valueOf( 1 ) ); - assertEquals( rev2.getPosition(), Integer.valueOf( 0 ) ); - assertEquals( rev3.getPosition(), Integer.valueOf( 0 ) ); - assertEquals( rev4.getPosition(), Integer.valueOf( 0 ) ); + public void testHistoryOfEd2(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + + IndexedListJoinColumnBidirectionalRefIngEntity ing1 = em.find( + IndexedListJoinColumnBidirectionalRefIngEntity.class, + ing1_id + ); + IndexedListJoinColumnBidirectionalRefIngEntity ing2 = em.find( + IndexedListJoinColumnBidirectionalRefIngEntity.class, + ing2_id + ); + + IndexedListJoinColumnBidirectionalRefEdEntity rev1 = auditReader.find( + IndexedListJoinColumnBidirectionalRefEdEntity.class, + ed2_id, + 1 + ); + IndexedListJoinColumnBidirectionalRefEdEntity rev2 = auditReader.find( + IndexedListJoinColumnBidirectionalRefEdEntity.class, + ed2_id, + 2 + ); + IndexedListJoinColumnBidirectionalRefEdEntity rev3 = auditReader.find( + IndexedListJoinColumnBidirectionalRefEdEntity.class, + ed2_id, + 3 + ); + IndexedListJoinColumnBidirectionalRefEdEntity rev4 = auditReader.find( + IndexedListJoinColumnBidirectionalRefEdEntity.class, + ed2_id, + 4 + ); + + assertTrue( rev1.getOwner().equals( ing1 ) ); + assertTrue( rev2.getOwner().equals( ing2 ) ); + assertTrue( rev3.getOwner().equals( ing2 ) ); + assertTrue( rev4.getOwner().equals( ing1 ) ); + + assertEquals( rev1.getPosition(), Integer.valueOf( 1 ) ); + assertEquals( rev2.getPosition(), Integer.valueOf( 0 ) ); + assertEquals( rev3.getPosition(), Integer.valueOf( 0 ) ); + assertEquals( rev4.getPosition(), Integer.valueOf( 0 ) ); + } ); } @Test - public void testHistoryOfEd3() { - IndexedListJoinColumnBidirectionalRefIngEntity ing1 = getEntityManager().find( - IndexedListJoinColumnBidirectionalRefIngEntity.class, - ing1_id - ); - - IndexedListJoinColumnBidirectionalRefEdEntity rev1 = getAuditReader().find( - IndexedListJoinColumnBidirectionalRefEdEntity.class, - ed3_id, - 1 - ); - IndexedListJoinColumnBidirectionalRefEdEntity rev2 = getAuditReader().find( - IndexedListJoinColumnBidirectionalRefEdEntity.class, - ed3_id, - 2 - ); - IndexedListJoinColumnBidirectionalRefEdEntity rev3 = getAuditReader().find( - IndexedListJoinColumnBidirectionalRefEdEntity.class, - ed3_id, - 3 - ); - IndexedListJoinColumnBidirectionalRefEdEntity rev4 = getAuditReader().find( - IndexedListJoinColumnBidirectionalRefEdEntity.class, - ed3_id, - 4 - ); - - assertTrue( rev1.getOwner().equals( ing1 ) ); - assertTrue( rev2.getOwner().equals( ing1 ) ); - assertTrue( rev3.getOwner().equals( ing1 ) ); - assertTrue( rev4.getOwner().equals( ing1 ) ); - - assertEquals( rev1.getPosition(), Integer.valueOf( 2 ) ); - assertEquals( rev2.getPosition(), Integer.valueOf( 1 ) ); - assertEquals( rev3.getPosition(), Integer.valueOf( 0 ) ); - assertEquals( rev4.getPosition(), Integer.valueOf( 1 ) ); + public void testHistoryOfEd3(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + + IndexedListJoinColumnBidirectionalRefIngEntity ing1 = em.find( + IndexedListJoinColumnBidirectionalRefIngEntity.class, + ing1_id + ); + + IndexedListJoinColumnBidirectionalRefEdEntity rev1 = auditReader.find( + IndexedListJoinColumnBidirectionalRefEdEntity.class, + ed3_id, + 1 + ); + IndexedListJoinColumnBidirectionalRefEdEntity rev2 = auditReader.find( + IndexedListJoinColumnBidirectionalRefEdEntity.class, + ed3_id, + 2 + ); + IndexedListJoinColumnBidirectionalRefEdEntity rev3 = auditReader.find( + IndexedListJoinColumnBidirectionalRefEdEntity.class, + ed3_id, + 3 + ); + IndexedListJoinColumnBidirectionalRefEdEntity rev4 = auditReader.find( + IndexedListJoinColumnBidirectionalRefEdEntity.class, + ed3_id, + 4 + ); + + assertTrue( rev1.getOwner().equals( ing1 ) ); + assertTrue( rev2.getOwner().equals( ing1 ) ); + assertTrue( rev3.getOwner().equals( ing1 ) ); + assertTrue( rev4.getOwner().equals( ing1 ) ); + + assertEquals( rev1.getPosition(), Integer.valueOf( 2 ) ); + assertEquals( rev2.getPosition(), Integer.valueOf( 1 ) ); + assertEquals( rev3.getPosition(), Integer.valueOf( 0 ) ); + assertEquals( rev4.getPosition(), Integer.valueOf( 1 ) ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/detached/InheritanceIndexedJoinColumnBidirectionalList.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/detached/InheritanceIndexedJoinColumnBidirectionalList.java index bb634798ce0c..156cfb8212e7 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/detached/InheritanceIndexedJoinColumnBidirectionalList.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/detached/InheritanceIndexedJoinColumnBidirectionalList.java @@ -5,18 +5,20 @@ package org.hibernate.orm.test.envers.integration.onetomany.detached; import java.util.Arrays; -import jakarta.persistence.EntityManager; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.orm.test.envers.entities.onetomany.detached.inheritance.ChildIndexedListJoinColumnBidirectionalRefIngEntity; import org.hibernate.orm.test.envers.entities.onetomany.detached.inheritance.ParentIndexedListJoinColumnBidirectionalRefIngEntity; import org.hibernate.orm.test.envers.entities.onetomany.detached.inheritance.ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; -import org.junit.Test; +import org.junit.jupiter.api.Test; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; /** * Test for a "fake" bidirectional mapping where one side uses @OneToMany+@JoinColumn (and thus owns the relation), @@ -24,7 +26,13 @@ * * @author Adam Warski (adam at warski dot org) */ -public class InheritanceIndexedJoinColumnBidirectionalList extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = { + ParentIndexedListJoinColumnBidirectionalRefIngEntity.class, + ChildIndexedListJoinColumnBidirectionalRefIngEntity.class, + ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity.class +}) +public class InheritanceIndexedJoinColumnBidirectionalList { private Integer ed1_id; private Integer ed2_id; private Integer ed3_id; @@ -32,356 +40,333 @@ public class InheritanceIndexedJoinColumnBidirectionalList extends BaseEnversJPA private Integer ing1_id; private Integer ing2_id; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { - ParentIndexedListJoinColumnBidirectionalRefIngEntity.class, - ChildIndexedListJoinColumnBidirectionalRefIngEntity.class, - ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity.class - }; - } - - @Test - @Priority(10) - public void createData() { - EntityManager em = getEntityManager(); - - ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity ed1 = new ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity( - "ed1", - null - ); - ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity ed2 = new ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity( - "ed2", - null - ); - ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity ed3 = new ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity( - "ed3", - null - ); - - ChildIndexedListJoinColumnBidirectionalRefIngEntity ing1 = new ChildIndexedListJoinColumnBidirectionalRefIngEntity( - "coll1", - "coll1bis", - ed1, - ed2, - ed3 - ); - ChildIndexedListJoinColumnBidirectionalRefIngEntity ing2 = new ChildIndexedListJoinColumnBidirectionalRefIngEntity( - "coll1", - "coll1bis" - ); - + @BeforeClassTemplate + public void createData(EntityManagerFactoryScope scope) { // Revision 1 (ing1: ed1, ed2, ed3) - em.getTransaction().begin(); - - em.persist( ed1 ); - em.persist( ed2 ); - em.persist( ed3 ); - em.persist( ing1 ); - em.persist( ing2 ); - - em.getTransaction().commit(); + scope.inTransaction( em -> { + ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity ed1 = new ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity( + "ed1", + null + ); + ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity ed2 = new ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity( + "ed2", + null + ); + ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity ed3 = new ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity( + "ed3", + null + ); + + ChildIndexedListJoinColumnBidirectionalRefIngEntity ing1 = new ChildIndexedListJoinColumnBidirectionalRefIngEntity( + "coll1", + "coll1bis", + ed1, + ed2, + ed3 + ); + ChildIndexedListJoinColumnBidirectionalRefIngEntity ing2 = new ChildIndexedListJoinColumnBidirectionalRefIngEntity( + "coll1", + "coll1bis" + ); + + em.persist( ed1 ); + em.persist( ed2 ); + em.persist( ed3 ); + em.persist( ing1 ); + em.persist( ing2 ); + + ed1_id = ed1.getId(); + ed2_id = ed2.getId(); + ed3_id = ed3.getId(); + ing1_id = ing1.getId(); + ing2_id = ing2.getId(); + } ); // Revision 2 (ing1: ed1, ed3, ing2: ed2) - em.getTransaction().begin(); - - ing1 = em.find( ChildIndexedListJoinColumnBidirectionalRefIngEntity.class, ing1.getId() ); - ing2 = em.find( ChildIndexedListJoinColumnBidirectionalRefIngEntity.class, ing2.getId() ); - ed2 = em.find( ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity.class, ed2.getId() ); - - ing1.getReferences().remove( ed2 ); - ing2.getReferences().add( ed2 ); + scope.inTransaction( em -> { + ChildIndexedListJoinColumnBidirectionalRefIngEntity ing1 = em.find( ChildIndexedListJoinColumnBidirectionalRefIngEntity.class, ing1_id ); + ChildIndexedListJoinColumnBidirectionalRefIngEntity ing2 = em.find( ChildIndexedListJoinColumnBidirectionalRefIngEntity.class, ing2_id ); + ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity ed2 = em.find( ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity.class, ed2_id ); - em.getTransaction().commit(); - em.clear(); + ing1.getReferences().remove( ed2 ); + ing2.getReferences().add( ed2 ); + } ); // Revision 3 (ing1: ed3, ed1, ing2: ed2) - em.getTransaction().begin(); + scope.inTransaction( em -> { + ChildIndexedListJoinColumnBidirectionalRefIngEntity ing1 = em.find( ChildIndexedListJoinColumnBidirectionalRefIngEntity.class, ing1_id ); + ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity ed3 = em.find( ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity.class, ed3_id ); - ing1 = em.find( ChildIndexedListJoinColumnBidirectionalRefIngEntity.class, ing1.getId() ); - ing2 = em.find( ChildIndexedListJoinColumnBidirectionalRefIngEntity.class, ing2.getId() ); - ed1 = em.find( ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity.class, ed1.getId() ); - ed2 = em.find( ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity.class, ed2.getId() ); - ed3 = em.find( ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity.class, ed3.getId() ); - - ing1.getReferences().remove( ed3 ); - ing1.getReferences().add( 0, ed3 ); - - em.getTransaction().commit(); - em.clear(); + ing1.getReferences().remove( ed3 ); + ing1.getReferences().add( 0, ed3 ); + } ); // Revision 4 (ing1: ed2, ed3, ed1) - em.getTransaction().begin(); - - ing1 = em.find( ChildIndexedListJoinColumnBidirectionalRefIngEntity.class, ing1.getId() ); - ing2 = em.find( ChildIndexedListJoinColumnBidirectionalRefIngEntity.class, ing2.getId() ); - ed1 = em.find( ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity.class, ed1.getId() ); - ed2 = em.find( ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity.class, ed2.getId() ); - ed3 = em.find( ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity.class, ed3.getId() ); - - ing2.getReferences().remove( ed2 ); - ing1.getReferences().add( 0, ed2 ); - - em.getTransaction().commit(); - em.clear(); - - // - - ing1_id = ing1.getId(); - ing2_id = ing2.getId(); - - ed1_id = ed1.getId(); - ed2_id = ed2.getId(); - ed3_id = ed3.getId(); + scope.inTransaction( em -> { + ChildIndexedListJoinColumnBidirectionalRefIngEntity ing1 = em.find( ChildIndexedListJoinColumnBidirectionalRefIngEntity.class, ing1_id ); + ChildIndexedListJoinColumnBidirectionalRefIngEntity ing2 = em.find( ChildIndexedListJoinColumnBidirectionalRefIngEntity.class, ing2_id ); + ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity ed2 = em.find( ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity.class, ed2_id ); + + ing2.getReferences().remove( ed2 ); + ing1.getReferences().add( 0, ed2 ); + } ); } @Test - public void testRevisionsCounts() { - assertEquals( - Arrays.asList( 1, 2, 3, 4 ), getAuditReader().getRevisions( - ChildIndexedListJoinColumnBidirectionalRefIngEntity.class, - ing1_id - ) - ); - assertEquals( - Arrays.asList( 1, 2, 4 ), getAuditReader().getRevisions( - ChildIndexedListJoinColumnBidirectionalRefIngEntity.class, - ing2_id - ) - ); - - assertEquals( - Arrays.asList( 1, 3, 4 ), getAuditReader().getRevisions( - ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity.class, - ed1_id - ) - ); - assertEquals( - Arrays.asList( 1, 2, 4 ), getAuditReader().getRevisions( - ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity.class, - ed2_id - ) - ); - assertEquals( - Arrays.asList( 1, 2, 3, 4 ), getAuditReader().getRevisions( - ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity.class, - ed3_id - ) - ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( + Arrays.asList( 1, 2, 3, 4 ), + auditReader.getRevisions( ChildIndexedListJoinColumnBidirectionalRefIngEntity.class, ing1_id ) + ); + assertEquals( + Arrays.asList( 1, 2, 4 ), + auditReader.getRevisions( ChildIndexedListJoinColumnBidirectionalRefIngEntity.class, ing2_id ) + ); + + assertEquals( + Arrays.asList( 1, 3, 4 ), + auditReader.getRevisions( ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity.class, ed1_id ) + ); + assertEquals( + Arrays.asList( 1, 2, 4 ), + auditReader.getRevisions( ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity.class, ed2_id ) + ); + assertEquals( + Arrays.asList( 1, 2, 3, 4 ), + auditReader.getRevisions( ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity.class, ed3_id ) + ); + } ); } @Test - public void testHistoryOfIng1() { - ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity ed1 = getEntityManager().find( - ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity.class, - ed1_id - ); - ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity ed2 = getEntityManager().find( - ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity.class, - ed2_id - ); - ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity ed3 = getEntityManager().find( - ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity.class, - ed3_id - ); - - ChildIndexedListJoinColumnBidirectionalRefIngEntity rev1 = getAuditReader().find( - ChildIndexedListJoinColumnBidirectionalRefIngEntity.class, - ing1_id, - 1 - ); - ChildIndexedListJoinColumnBidirectionalRefIngEntity rev2 = getAuditReader().find( - ChildIndexedListJoinColumnBidirectionalRefIngEntity.class, - ing1_id, - 2 - ); - ChildIndexedListJoinColumnBidirectionalRefIngEntity rev3 = getAuditReader().find( - ChildIndexedListJoinColumnBidirectionalRefIngEntity.class, - ing1_id, - 3 - ); - ChildIndexedListJoinColumnBidirectionalRefIngEntity rev4 = getAuditReader().find( - ChildIndexedListJoinColumnBidirectionalRefIngEntity.class, - ing1_id, - 4 - ); - - assertEquals( rev1.getReferences().size(), 3 ); - assertEquals( rev1.getReferences().get( 0 ), ed1 ); - assertEquals( rev1.getReferences().get( 1 ), ed2 ); - assertEquals( rev1.getReferences().get( 2 ), ed3 ); - - assertEquals( rev2.getReferences().size(), 2 ); - assertEquals( rev2.getReferences().get( 0 ), ed1 ); - assertEquals( rev2.getReferences().get( 1 ), ed3 ); - - assertEquals( rev3.getReferences().size(), 2 ); - assertEquals( rev3.getReferences().get( 0 ), ed3 ); - assertEquals( rev3.getReferences().get( 1 ), ed1 ); - - assertEquals( rev4.getReferences().size(), 3 ); - assertEquals( rev4.getReferences().get( 0 ), ed2 ); - assertEquals( rev4.getReferences().get( 1 ), ed3 ); - assertEquals( rev4.getReferences().get( 2 ), ed1 ); + public void testHistoryOfIng1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity ed1 = em.find( + ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity.class, + ed1_id + ); + ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity ed2 = em.find( + ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity.class, + ed2_id + ); + ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity ed3 = em.find( + ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity.class, + ed3_id + ); + + final var auditReader = AuditReaderFactory.get( em ); + ChildIndexedListJoinColumnBidirectionalRefIngEntity rev1 = auditReader.find( + ChildIndexedListJoinColumnBidirectionalRefIngEntity.class, + ing1_id, + 1 + ); + ChildIndexedListJoinColumnBidirectionalRefIngEntity rev2 = auditReader.find( + ChildIndexedListJoinColumnBidirectionalRefIngEntity.class, + ing1_id, + 2 + ); + ChildIndexedListJoinColumnBidirectionalRefIngEntity rev3 = auditReader.find( + ChildIndexedListJoinColumnBidirectionalRefIngEntity.class, + ing1_id, + 3 + ); + ChildIndexedListJoinColumnBidirectionalRefIngEntity rev4 = auditReader.find( + ChildIndexedListJoinColumnBidirectionalRefIngEntity.class, + ing1_id, + 4 + ); + + assertEquals( rev1.getReferences().size(), 3 ); + assertEquals( rev1.getReferences().get( 0 ), ed1 ); + assertEquals( rev1.getReferences().get( 1 ), ed2 ); + assertEquals( rev1.getReferences().get( 2 ), ed3 ); + + assertEquals( rev2.getReferences().size(), 2 ); + assertEquals( rev2.getReferences().get( 0 ), ed1 ); + assertEquals( rev2.getReferences().get( 1 ), ed3 ); + + assertEquals( rev3.getReferences().size(), 2 ); + assertEquals( rev3.getReferences().get( 0 ), ed3 ); + assertEquals( rev3.getReferences().get( 1 ), ed1 ); + + assertEquals( rev4.getReferences().size(), 3 ); + assertEquals( rev4.getReferences().get( 0 ), ed2 ); + assertEquals( rev4.getReferences().get( 1 ), ed3 ); + assertEquals( rev4.getReferences().get( 2 ), ed1 ); + } ); } @Test - public void testHistoryOfIng2() { - ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity ed2 = getEntityManager().find( - ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity.class, - ed2_id - ); - - ChildIndexedListJoinColumnBidirectionalRefIngEntity rev1 = getAuditReader().find( - ChildIndexedListJoinColumnBidirectionalRefIngEntity.class, - ing2_id, - 1 - ); - ChildIndexedListJoinColumnBidirectionalRefIngEntity rev2 = getAuditReader().find( - ChildIndexedListJoinColumnBidirectionalRefIngEntity.class, - ing2_id, - 2 - ); - ChildIndexedListJoinColumnBidirectionalRefIngEntity rev3 = getAuditReader().find( - ChildIndexedListJoinColumnBidirectionalRefIngEntity.class, - ing2_id, - 3 - ); - ChildIndexedListJoinColumnBidirectionalRefIngEntity rev4 = getAuditReader().find( - ChildIndexedListJoinColumnBidirectionalRefIngEntity.class, - ing2_id, - 4 - ); - - assertEquals( rev1.getReferences().size(), 0 ); - - assertEquals( rev2.getReferences().size(), 1 ); - assertEquals( rev2.getReferences().get( 0 ), ed2 ); - - assertEquals( rev3.getReferences().size(), 1 ); - assertEquals( rev3.getReferences().get( 0 ), ed2 ); - - assertEquals( rev4.getReferences().size(), 0 ); + public void testHistoryOfIng2(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity ed2 = em.find( + ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity.class, + ed2_id + ); + + final var auditReader = AuditReaderFactory.get( em ); + ChildIndexedListJoinColumnBidirectionalRefIngEntity rev1 = auditReader.find( + ChildIndexedListJoinColumnBidirectionalRefIngEntity.class, + ing2_id, + 1 + ); + ChildIndexedListJoinColumnBidirectionalRefIngEntity rev2 = auditReader.find( + ChildIndexedListJoinColumnBidirectionalRefIngEntity.class, + ing2_id, + 2 + ); + ChildIndexedListJoinColumnBidirectionalRefIngEntity rev3 = auditReader.find( + ChildIndexedListJoinColumnBidirectionalRefIngEntity.class, + ing2_id, + 3 + ); + ChildIndexedListJoinColumnBidirectionalRefIngEntity rev4 = auditReader.find( + ChildIndexedListJoinColumnBidirectionalRefIngEntity.class, + ing2_id, + 4 + ); + + assertEquals( rev1.getReferences().size(), 0 ); + + assertEquals( rev2.getReferences().size(), 1 ); + assertEquals( rev2.getReferences().get( 0 ), ed2 ); + + assertEquals( rev3.getReferences().size(), 1 ); + assertEquals( rev3.getReferences().get( 0 ), ed2 ); + + assertEquals( rev4.getReferences().size(), 0 ); + } ); } @Test - public void testHistoryOfEd1() { - ChildIndexedListJoinColumnBidirectionalRefIngEntity ing1 = getEntityManager().find( - ChildIndexedListJoinColumnBidirectionalRefIngEntity.class, - ing1_id - ); - - ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity rev1 = getAuditReader().find( - ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity.class, - ed1_id, - 1 - ); - ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity rev2 = getAuditReader().find( - ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity.class, - ed1_id, - 2 - ); - ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity rev3 = getAuditReader().find( - ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity.class, - ed1_id, - 3 - ); - ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity rev4 = getAuditReader().find( - ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity.class, - ed1_id, - 4 - ); - - assertTrue( rev1.getOwner().equals( ing1 ) ); - assertTrue( rev2.getOwner().equals( ing1 ) ); - assertTrue( rev3.getOwner().equals( ing1 ) ); - assertTrue( rev4.getOwner().equals( ing1 ) ); - - assertEquals( rev1.getPosition(), Integer.valueOf( 0 ) ); - assertEquals( rev2.getPosition(), Integer.valueOf( 0 ) ); - assertEquals( rev3.getPosition(), Integer.valueOf( 1 ) ); - assertEquals( rev4.getPosition(), Integer.valueOf( 2 ) ); + public void testHistoryOfEd1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + ChildIndexedListJoinColumnBidirectionalRefIngEntity ing1 = em.find( + ChildIndexedListJoinColumnBidirectionalRefIngEntity.class, + ing1_id + ); + + final var auditReader = AuditReaderFactory.get( em ); + ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity rev1 = auditReader.find( + ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity.class, + ed1_id, + 1 + ); + ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity rev2 = auditReader.find( + ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity.class, + ed1_id, + 2 + ); + ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity rev3 = auditReader.find( + ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity.class, + ed1_id, + 3 + ); + ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity rev4 = auditReader.find( + ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity.class, + ed1_id, + 4 + ); + + assertTrue( rev1.getOwner().equals( ing1 ) ); + assertTrue( rev2.getOwner().equals( ing1 ) ); + assertTrue( rev3.getOwner().equals( ing1 ) ); + assertTrue( rev4.getOwner().equals( ing1 ) ); + + assertEquals( rev1.getPosition(), Integer.valueOf( 0 ) ); + assertEquals( rev2.getPosition(), Integer.valueOf( 0 ) ); + assertEquals( rev3.getPosition(), Integer.valueOf( 1 ) ); + assertEquals( rev4.getPosition(), Integer.valueOf( 2 ) ); + } ); } @Test - public void testHistoryOfEd2() { - ChildIndexedListJoinColumnBidirectionalRefIngEntity ing1 = getEntityManager().find( - ChildIndexedListJoinColumnBidirectionalRefIngEntity.class, - ing1_id - ); - ChildIndexedListJoinColumnBidirectionalRefIngEntity ing2 = getEntityManager().find( - ChildIndexedListJoinColumnBidirectionalRefIngEntity.class, - ing2_id - ); - - ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity rev1 = getAuditReader().find( - ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity.class, - ed2_id, - 1 - ); - ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity rev2 = getAuditReader().find( - ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity.class, - ed2_id, - 2 - ); - ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity rev3 = getAuditReader().find( - ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity.class, - ed2_id, - 3 - ); - ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity rev4 = getAuditReader().find( - ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity.class, - ed2_id, - 4 - ); - - assertTrue( rev1.getOwner().equals( ing1 ) ); - assertTrue( rev2.getOwner().equals( ing2 ) ); - assertTrue( rev3.getOwner().equals( ing2 ) ); - assertTrue( rev4.getOwner().equals( ing1 ) ); - - assertEquals( rev1.getPosition(), Integer.valueOf( 1 ) ); - assertEquals( rev2.getPosition(), Integer.valueOf( 0 ) ); - assertEquals( rev3.getPosition(), Integer.valueOf( 0 ) ); - assertEquals( rev4.getPosition(), Integer.valueOf( 0 ) ); + public void testHistoryOfEd2(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + ChildIndexedListJoinColumnBidirectionalRefIngEntity ing1 = em.find( + ChildIndexedListJoinColumnBidirectionalRefIngEntity.class, + ing1_id + ); + ChildIndexedListJoinColumnBidirectionalRefIngEntity ing2 = em.find( + ChildIndexedListJoinColumnBidirectionalRefIngEntity.class, + ing2_id + ); + + final var auditReader = AuditReaderFactory.get( em ); + ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity rev1 = auditReader.find( + ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity.class, + ed2_id, + 1 + ); + ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity rev2 = auditReader.find( + ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity.class, + ed2_id, + 2 + ); + ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity rev3 = auditReader.find( + ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity.class, + ed2_id, + 3 + ); + ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity rev4 = auditReader.find( + ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity.class, + ed2_id, + 4 + ); + + assertTrue( rev1.getOwner().equals( ing1 ) ); + assertTrue( rev2.getOwner().equals( ing2 ) ); + assertTrue( rev3.getOwner().equals( ing2 ) ); + assertTrue( rev4.getOwner().equals( ing1 ) ); + + assertEquals( rev1.getPosition(), Integer.valueOf( 1 ) ); + assertEquals( rev2.getPosition(), Integer.valueOf( 0 ) ); + assertEquals( rev3.getPosition(), Integer.valueOf( 0 ) ); + assertEquals( rev4.getPosition(), Integer.valueOf( 0 ) ); + } ); } @Test - public void testHistoryOfEd3() { - ChildIndexedListJoinColumnBidirectionalRefIngEntity ing1 = getEntityManager().find( - ChildIndexedListJoinColumnBidirectionalRefIngEntity.class, - ing1_id - ); - - ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity rev1 = getAuditReader().find( - ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity.class, - ed3_id, - 1 - ); - ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity rev2 = getAuditReader().find( - ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity.class, - ed3_id, - 2 - ); - ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity rev3 = getAuditReader().find( - ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity.class, - ed3_id, - 3 - ); - ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity rev4 = getAuditReader().find( - ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity.class, - ed3_id, - 4 - ); - - assertTrue( rev1.getOwner().equals( ing1 ) ); - assertTrue( rev2.getOwner().equals( ing1 ) ); - assertTrue( rev3.getOwner().equals( ing1 ) ); - assertTrue( rev4.getOwner().equals( ing1 ) ); - - assertEquals( rev1.getPosition(), Integer.valueOf( 2 ) ); - assertEquals( rev2.getPosition(), Integer.valueOf( 1 ) ); - assertEquals( rev3.getPosition(), Integer.valueOf( 0 ) ); - assertEquals( rev4.getPosition(), Integer.valueOf( 1 ) ); + public void testHistoryOfEd3(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + ChildIndexedListJoinColumnBidirectionalRefIngEntity ing1 = em.find( + ChildIndexedListJoinColumnBidirectionalRefIngEntity.class, + ing1_id + ); + + final var auditReader = AuditReaderFactory.get( em ); + ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity rev1 = auditReader.find( + ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity.class, + ed3_id, + 1 + ); + ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity rev2 = auditReader.find( + ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity.class, + ed3_id, + 2 + ); + ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity rev3 = auditReader.find( + ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity.class, + ed3_id, + 3 + ); + ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity rev4 = auditReader.find( + ParentOwnedIndexedListJoinColumnBidirectionalRefEdEntity.class, + ed3_id, + 4 + ); + + assertTrue( rev1.getOwner().equals( ing1 ) ); + assertTrue( rev2.getOwner().equals( ing1 ) ); + assertTrue( rev3.getOwner().equals( ing1 ) ); + assertTrue( rev4.getOwner().equals( ing1 ) ); + + assertEquals( rev1.getPosition(), Integer.valueOf( 2 ) ); + assertEquals( rev2.getPosition(), Integer.valueOf( 1 ) ); + assertEquals( rev3.getPosition(), Integer.valueOf( 0 ) ); + assertEquals( rev4.getPosition(), Integer.valueOf( 1 ) ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/detached/JoinColumnBidirectionalList.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/detached/JoinColumnBidirectionalList.java index fb2d0c5cd0e5..c97cb3f26270 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/detached/JoinColumnBidirectionalList.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/detached/JoinColumnBidirectionalList.java @@ -5,18 +5,20 @@ package org.hibernate.orm.test.envers.integration.onetomany.detached; import java.util.Arrays; -import jakarta.persistence.EntityManager; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.orm.test.envers.entities.onetomany.detached.ListJoinColumnBidirectionalRefEdEntity; import org.hibernate.orm.test.envers.entities.onetomany.detached.ListJoinColumnBidirectionalRefIngEntity; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; -import org.junit.Test; +import org.junit.jupiter.api.Test; import static org.hibernate.orm.test.envers.tools.TestTools.checkCollection; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; /** * Test for a "fake" bidirectional mapping where one side uses @OneToMany+@JoinColumn (and thus owns the relatin), @@ -24,289 +26,281 @@ * * @author Adam Warski (adam at warski dot org) */ -public class JoinColumnBidirectionalList extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = { + ListJoinColumnBidirectionalRefIngEntity.class, + ListJoinColumnBidirectionalRefEdEntity.class +}) +public class JoinColumnBidirectionalList { private Integer ed1_id; private Integer ed2_id; private Integer ing1_id; private Integer ing2_id; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { - ListJoinColumnBidirectionalRefIngEntity.class, - ListJoinColumnBidirectionalRefEdEntity.class - }; - } - - @Test - @Priority(10) - public void createData() { - EntityManager em = getEntityManager(); - - ListJoinColumnBidirectionalRefEdEntity ed1 = new ListJoinColumnBidirectionalRefEdEntity( "ed1", null ); - ListJoinColumnBidirectionalRefEdEntity ed2 = new ListJoinColumnBidirectionalRefEdEntity( "ed2", null ); - - ListJoinColumnBidirectionalRefIngEntity ing1 = new ListJoinColumnBidirectionalRefIngEntity( "coll1", ed1 ); - ListJoinColumnBidirectionalRefIngEntity ing2 = new ListJoinColumnBidirectionalRefIngEntity( "coll1", ed2 ); - + @BeforeClassTemplate + public void createData(EntityManagerFactoryScope scope) { // Revision 1 (ing1: ed1, ing2: ed2) - em.getTransaction().begin(); - - em.persist( ed1 ); - em.persist( ed2 ); - em.persist( ing1 ); - em.persist( ing2 ); + scope.inTransaction( em -> { + ListJoinColumnBidirectionalRefEdEntity ed1 = new ListJoinColumnBidirectionalRefEdEntity( "ed1", null ); + ListJoinColumnBidirectionalRefEdEntity ed2 = new ListJoinColumnBidirectionalRefEdEntity( "ed2", null ); - em.getTransaction().commit(); + ListJoinColumnBidirectionalRefIngEntity ing1 = new ListJoinColumnBidirectionalRefIngEntity( "coll1", ed1 ); + ListJoinColumnBidirectionalRefIngEntity ing2 = new ListJoinColumnBidirectionalRefIngEntity( "coll1", ed2 ); - // Revision 2 (ing1: ed1, ed2) - em.getTransaction().begin(); + em.persist( ed1 ); + em.persist( ed2 ); + em.persist( ing1 ); + em.persist( ing2 ); - ing1 = em.find( ListJoinColumnBidirectionalRefIngEntity.class, ing1.getId() ); - ing2 = em.find( ListJoinColumnBidirectionalRefIngEntity.class, ing2.getId() ); - ed1 = em.find( ListJoinColumnBidirectionalRefEdEntity.class, ed1.getId() ); - ed2 = em.find( ListJoinColumnBidirectionalRefEdEntity.class, ed2.getId() ); + ed1_id = ed1.getId(); + ed2_id = ed2.getId(); + ing1_id = ing1.getId(); + ing2_id = ing2.getId(); + } ); - ing2.getReferences().remove( ed2 ); - ing1.getReferences().add( ed2 ); + // Revision 2 (ing1: ed1, ed2) + scope.inTransaction( em -> { + ListJoinColumnBidirectionalRefIngEntity ing1 = em.find( ListJoinColumnBidirectionalRefIngEntity.class, ing1_id ); + ListJoinColumnBidirectionalRefIngEntity ing2 = em.find( ListJoinColumnBidirectionalRefIngEntity.class, ing2_id ); + ListJoinColumnBidirectionalRefEdEntity ed2 = em.find( ListJoinColumnBidirectionalRefEdEntity.class, ed2_id ); - em.getTransaction().commit(); - em.clear(); + ing2.getReferences().remove( ed2 ); + ing1.getReferences().add( ed2 ); + } ); // No revision - no changes - em.getTransaction().begin(); - - ing1 = em.find( ListJoinColumnBidirectionalRefIngEntity.class, ing1.getId() ); - ing2 = em.find( ListJoinColumnBidirectionalRefIngEntity.class, ing2.getId() ); - ed1 = em.find( ListJoinColumnBidirectionalRefEdEntity.class, ed1.getId() ); - ed2 = em.find( ListJoinColumnBidirectionalRefEdEntity.class, ed2.getId() ); + scope.inTransaction( em -> { + ListJoinColumnBidirectionalRefEdEntity ed2 = em.find( ListJoinColumnBidirectionalRefEdEntity.class, ed2_id ); + ListJoinColumnBidirectionalRefIngEntity ing2 = em.find( ListJoinColumnBidirectionalRefIngEntity.class, ing2_id ); - ed2.setOwner( ing2 ); - - em.getTransaction().commit(); - em.clear(); + ed2.setOwner( ing2 ); + } ); // Revision 3 (ing1: ed1, ed2) - em.getTransaction().begin(); - - ed1 = em.find( ListJoinColumnBidirectionalRefEdEntity.class, ed1.getId() ); - - ed1.setData( "ed1 bis" ); - // Shouldn't get written - ed1.setOwner( ing2 ); + scope.inTransaction( em -> { + ListJoinColumnBidirectionalRefEdEntity ed1 = em.find( ListJoinColumnBidirectionalRefEdEntity.class, ed1_id ); + ListJoinColumnBidirectionalRefIngEntity ing2 = em.find( ListJoinColumnBidirectionalRefIngEntity.class, ing2_id ); - em.getTransaction().commit(); - em.clear(); + ed1.setData( "ed1 bis" ); + // Shouldn't get written + ed1.setOwner( ing2 ); + } ); // Revision 4 (ing2: ed1, ed2) - em.getTransaction().begin(); - - ing1 = em.find( ListJoinColumnBidirectionalRefIngEntity.class, ing1.getId() ); - ing2 = em.find( ListJoinColumnBidirectionalRefIngEntity.class, ing2.getId() ); - - ing1.getReferences().clear(); - ing2.getReferences().add( ed1 ); - ing2.getReferences().add( ed2 ); - - em.getTransaction().commit(); - em.clear(); - - // - - ing1_id = ing1.getId(); - ing2_id = ing2.getId(); - - ed1_id = ed1.getId(); - ed2_id = ed2.getId(); + scope.inTransaction( em -> { + ListJoinColumnBidirectionalRefIngEntity ing1 = em.find( ListJoinColumnBidirectionalRefIngEntity.class, ing1_id ); + ListJoinColumnBidirectionalRefIngEntity ing2 = em.find( ListJoinColumnBidirectionalRefIngEntity.class, ing2_id ); + ListJoinColumnBidirectionalRefEdEntity ed1 = em.find( ListJoinColumnBidirectionalRefEdEntity.class, ed1_id ); + ListJoinColumnBidirectionalRefEdEntity ed2 = em.find( ListJoinColumnBidirectionalRefEdEntity.class, ed2_id ); + + ing1.getReferences().clear(); + ing2.getReferences().add( ed1 ); + ing2.getReferences().add( ed2 ); + } ); } @Test - public void testRevisionsCounts() { - assertEquals( - Arrays.asList( 1, 2, 4 ), - getAuditReader().getRevisions( ListJoinColumnBidirectionalRefIngEntity.class, ing1_id ) - ); - assertEquals( - Arrays.asList( 1, 2, 4 ), - getAuditReader().getRevisions( ListJoinColumnBidirectionalRefIngEntity.class, ing2_id ) - ); - - assertEquals( - Arrays.asList( 1, 3, 4 ), - getAuditReader().getRevisions( ListJoinColumnBidirectionalRefEdEntity.class, ed1_id ) - ); - assertEquals( - Arrays.asList( 1, 2, 4 ), - getAuditReader().getRevisions( ListJoinColumnBidirectionalRefEdEntity.class, ed2_id ) - ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( + Arrays.asList( 1, 2, 4 ), + auditReader.getRevisions( ListJoinColumnBidirectionalRefIngEntity.class, ing1_id ) + ); + assertEquals( + Arrays.asList( 1, 2, 4 ), + auditReader.getRevisions( ListJoinColumnBidirectionalRefIngEntity.class, ing2_id ) + ); + + assertEquals( + Arrays.asList( 1, 3, 4 ), + auditReader.getRevisions( ListJoinColumnBidirectionalRefEdEntity.class, ed1_id ) + ); + assertEquals( + Arrays.asList( 1, 2, 4 ), + auditReader.getRevisions( ListJoinColumnBidirectionalRefEdEntity.class, ed2_id ) + ); + } ); } @Test - public void testHistoryOfIng1() { - ListJoinColumnBidirectionalRefEdEntity ed1_fromRev1 = new ListJoinColumnBidirectionalRefEdEntity( - ed1_id, - "ed1", - null - ); - ListJoinColumnBidirectionalRefEdEntity ed1_fromRev3 = new ListJoinColumnBidirectionalRefEdEntity( - ed1_id, - "ed1 bis", - null - ); - ListJoinColumnBidirectionalRefEdEntity ed2 = getEntityManager().find( - ListJoinColumnBidirectionalRefEdEntity.class, - ed2_id - ); - - ListJoinColumnBidirectionalRefIngEntity rev1 = getAuditReader().find( - ListJoinColumnBidirectionalRefIngEntity.class, - ing1_id, - 1 - ); - ListJoinColumnBidirectionalRefIngEntity rev2 = getAuditReader().find( - ListJoinColumnBidirectionalRefIngEntity.class, - ing1_id, - 2 - ); - ListJoinColumnBidirectionalRefIngEntity rev3 = getAuditReader().find( - ListJoinColumnBidirectionalRefIngEntity.class, - ing1_id, - 3 - ); - ListJoinColumnBidirectionalRefIngEntity rev4 = getAuditReader().find( - ListJoinColumnBidirectionalRefIngEntity.class, - ing1_id, - 4 - ); - - assertTrue( checkCollection( rev1.getReferences(), ed1_fromRev1 ) ); - assertTrue( checkCollection( rev2.getReferences(), ed1_fromRev1, ed2 ) ); - assertTrue( checkCollection( rev3.getReferences(), ed1_fromRev3, ed2 ) ); - assertTrue( checkCollection( rev4.getReferences() ) ); + public void testHistoryOfIng1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + ListJoinColumnBidirectionalRefEdEntity ed1_fromRev1 = new ListJoinColumnBidirectionalRefEdEntity( + ed1_id, + "ed1", + null + ); + ListJoinColumnBidirectionalRefEdEntity ed1_fromRev3 = new ListJoinColumnBidirectionalRefEdEntity( + ed1_id, + "ed1 bis", + null + ); + ListJoinColumnBidirectionalRefEdEntity ed2 = em.find( + ListJoinColumnBidirectionalRefEdEntity.class, + ed2_id + ); + + final var auditReader = AuditReaderFactory.get( em ); + ListJoinColumnBidirectionalRefIngEntity rev1 = auditReader.find( + ListJoinColumnBidirectionalRefIngEntity.class, + ing1_id, + 1 + ); + ListJoinColumnBidirectionalRefIngEntity rev2 = auditReader.find( + ListJoinColumnBidirectionalRefIngEntity.class, + ing1_id, + 2 + ); + ListJoinColumnBidirectionalRefIngEntity rev3 = auditReader.find( + ListJoinColumnBidirectionalRefIngEntity.class, + ing1_id, + 3 + ); + ListJoinColumnBidirectionalRefIngEntity rev4 = auditReader.find( + ListJoinColumnBidirectionalRefIngEntity.class, + ing1_id, + 4 + ); + + assertTrue( checkCollection( rev1.getReferences(), ed1_fromRev1 ) ); + assertTrue( checkCollection( rev2.getReferences(), ed1_fromRev1, ed2 ) ); + assertTrue( checkCollection( rev3.getReferences(), ed1_fromRev3, ed2 ) ); + assertTrue( checkCollection( rev4.getReferences() ) ); + } ); } @Test - public void testHistoryOfIng2() { - ListJoinColumnBidirectionalRefEdEntity ed1 = getEntityManager().find( - ListJoinColumnBidirectionalRefEdEntity.class, - ed1_id - ); - ListJoinColumnBidirectionalRefEdEntity ed2 = getEntityManager().find( - ListJoinColumnBidirectionalRefEdEntity.class, - ed2_id - ); - - ListJoinColumnBidirectionalRefIngEntity rev1 = getAuditReader().find( - ListJoinColumnBidirectionalRefIngEntity.class, - ing2_id, - 1 - ); - ListJoinColumnBidirectionalRefIngEntity rev2 = getAuditReader().find( - ListJoinColumnBidirectionalRefIngEntity.class, - ing2_id, - 2 - ); - ListJoinColumnBidirectionalRefIngEntity rev3 = getAuditReader().find( - ListJoinColumnBidirectionalRefIngEntity.class, - ing2_id, - 3 - ); - ListJoinColumnBidirectionalRefIngEntity rev4 = getAuditReader().find( - ListJoinColumnBidirectionalRefIngEntity.class, - ing2_id, - 4 - ); - - assertTrue( checkCollection( rev1.getReferences(), ed2 ) ); - assertTrue( checkCollection( rev2.getReferences() ) ); - assertTrue( checkCollection( rev3.getReferences() ) ); - assertTrue( checkCollection( rev4.getReferences(), ed1, ed2 ) ); + public void testHistoryOfIng2(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + ListJoinColumnBidirectionalRefEdEntity ed1 = em.find( + ListJoinColumnBidirectionalRefEdEntity.class, + ed1_id + ); + ListJoinColumnBidirectionalRefEdEntity ed2 = em.find( + ListJoinColumnBidirectionalRefEdEntity.class, + ed2_id + ); + + final var auditReader = AuditReaderFactory.get( em ); + ListJoinColumnBidirectionalRefIngEntity rev1 = auditReader.find( + ListJoinColumnBidirectionalRefIngEntity.class, + ing2_id, + 1 + ); + ListJoinColumnBidirectionalRefIngEntity rev2 = auditReader.find( + ListJoinColumnBidirectionalRefIngEntity.class, + ing2_id, + 2 + ); + ListJoinColumnBidirectionalRefIngEntity rev3 = auditReader.find( + ListJoinColumnBidirectionalRefIngEntity.class, + ing2_id, + 3 + ); + ListJoinColumnBidirectionalRefIngEntity rev4 = auditReader.find( + ListJoinColumnBidirectionalRefIngEntity.class, + ing2_id, + 4 + ); + + assertTrue( checkCollection( rev1.getReferences(), ed2 ) ); + assertTrue( checkCollection( rev2.getReferences() ) ); + assertTrue( checkCollection( rev3.getReferences() ) ); + assertTrue( checkCollection( rev4.getReferences(), ed1, ed2 ) ); + } ); } @Test - public void testHistoryOfEd1() { - ListJoinColumnBidirectionalRefIngEntity ing1 = getEntityManager().find( - ListJoinColumnBidirectionalRefIngEntity.class, - ing1_id - ); - ListJoinColumnBidirectionalRefIngEntity ing2 = getEntityManager().find( - ListJoinColumnBidirectionalRefIngEntity.class, - ing2_id - ); - - ListJoinColumnBidirectionalRefEdEntity rev1 = getAuditReader().find( - ListJoinColumnBidirectionalRefEdEntity.class, - ed1_id, - 1 - ); - ListJoinColumnBidirectionalRefEdEntity rev2 = getAuditReader().find( - ListJoinColumnBidirectionalRefEdEntity.class, - ed1_id, - 2 - ); - ListJoinColumnBidirectionalRefEdEntity rev3 = getAuditReader().find( - ListJoinColumnBidirectionalRefEdEntity.class, - ed1_id, - 3 - ); - ListJoinColumnBidirectionalRefEdEntity rev4 = getAuditReader().find( - ListJoinColumnBidirectionalRefEdEntity.class, - ed1_id, - 4 - ); - - assertTrue( rev1.getOwner().equals( ing1 ) ); - assertTrue( rev2.getOwner().equals( ing1 ) ); - assertTrue( rev3.getOwner().equals( ing1 ) ); - assertTrue( rev4.getOwner().equals( ing2 ) ); - - assertEquals( rev1.getData(), "ed1" ); - assertEquals( rev2.getData(), "ed1" ); - assertEquals( rev3.getData(), "ed1 bis" ); - assertEquals( rev4.getData(), "ed1 bis" ); + public void testHistoryOfEd1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + ListJoinColumnBidirectionalRefIngEntity ing1 = em.find( + ListJoinColumnBidirectionalRefIngEntity.class, + ing1_id + ); + ListJoinColumnBidirectionalRefIngEntity ing2 = em.find( + ListJoinColumnBidirectionalRefIngEntity.class, + ing2_id + ); + + final var auditReader = AuditReaderFactory.get( em ); + ListJoinColumnBidirectionalRefEdEntity rev1 = auditReader.find( + ListJoinColumnBidirectionalRefEdEntity.class, + ed1_id, + 1 + ); + ListJoinColumnBidirectionalRefEdEntity rev2 = auditReader.find( + ListJoinColumnBidirectionalRefEdEntity.class, + ed1_id, + 2 + ); + ListJoinColumnBidirectionalRefEdEntity rev3 = auditReader.find( + ListJoinColumnBidirectionalRefEdEntity.class, + ed1_id, + 3 + ); + ListJoinColumnBidirectionalRefEdEntity rev4 = auditReader.find( + ListJoinColumnBidirectionalRefEdEntity.class, + ed1_id, + 4 + ); + + assertTrue( rev1.getOwner().equals( ing1 ) ); + assertTrue( rev2.getOwner().equals( ing1 ) ); + assertTrue( rev3.getOwner().equals( ing1 ) ); + assertTrue( rev4.getOwner().equals( ing2 ) ); + + assertEquals( rev1.getData(), "ed1" ); + assertEquals( rev2.getData(), "ed1" ); + assertEquals( rev3.getData(), "ed1 bis" ); + assertEquals( rev4.getData(), "ed1 bis" ); + } ); } @Test - public void testHistoryOfEd2() { - ListJoinColumnBidirectionalRefIngEntity ing1 = getEntityManager().find( - ListJoinColumnBidirectionalRefIngEntity.class, - ing1_id - ); - ListJoinColumnBidirectionalRefIngEntity ing2 = getEntityManager().find( - ListJoinColumnBidirectionalRefIngEntity.class, - ing2_id - ); - - ListJoinColumnBidirectionalRefEdEntity rev1 = getAuditReader().find( - ListJoinColumnBidirectionalRefEdEntity.class, - ed2_id, - 1 - ); - ListJoinColumnBidirectionalRefEdEntity rev2 = getAuditReader().find( - ListJoinColumnBidirectionalRefEdEntity.class, - ed2_id, - 2 - ); - ListJoinColumnBidirectionalRefEdEntity rev3 = getAuditReader().find( - ListJoinColumnBidirectionalRefEdEntity.class, - ed2_id, - 3 - ); - ListJoinColumnBidirectionalRefEdEntity rev4 = getAuditReader().find( - ListJoinColumnBidirectionalRefEdEntity.class, - ed2_id, - 4 - ); - - assertTrue( rev1.getOwner().equals( ing2 ) ); - assertTrue( rev2.getOwner().equals( ing1 ) ); - assertTrue( rev3.getOwner().equals( ing1 ) ); - assertTrue( rev4.getOwner().equals( ing2 ) ); - - assertEquals( rev1.getData(), "ed2" ); - assertEquals( rev2.getData(), "ed2" ); - assertEquals( rev3.getData(), "ed2" ); - assertEquals( rev4.getData(), "ed2" ); + public void testHistoryOfEd2(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + ListJoinColumnBidirectionalRefIngEntity ing1 = em.find( + ListJoinColumnBidirectionalRefIngEntity.class, + ing1_id + ); + ListJoinColumnBidirectionalRefIngEntity ing2 = em.find( + ListJoinColumnBidirectionalRefIngEntity.class, + ing2_id + ); + + final var auditReader = AuditReaderFactory.get( em ); + ListJoinColumnBidirectionalRefEdEntity rev1 = auditReader.find( + ListJoinColumnBidirectionalRefEdEntity.class, + ed2_id, + 1 + ); + ListJoinColumnBidirectionalRefEdEntity rev2 = auditReader.find( + ListJoinColumnBidirectionalRefEdEntity.class, + ed2_id, + 2 + ); + ListJoinColumnBidirectionalRefEdEntity rev3 = auditReader.find( + ListJoinColumnBidirectionalRefEdEntity.class, + ed2_id, + 3 + ); + ListJoinColumnBidirectionalRefEdEntity rev4 = auditReader.find( + ListJoinColumnBidirectionalRefEdEntity.class, + ed2_id, + 4 + ); + + assertTrue( rev1.getOwner().equals( ing2 ) ); + assertTrue( rev2.getOwner().equals( ing1 ) ); + assertTrue( rev3.getOwner().equals( ing1 ) ); + assertTrue( rev4.getOwner().equals( ing2 ) ); + + assertEquals( rev1.getData(), "ed2" ); + assertEquals( rev2.getData(), "ed2" ); + assertEquals( rev3.getData(), "ed2" ); + assertEquals( rev4.getData(), "ed2" ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/detached/JoinColumnBidirectionalListWithInheritance.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/detached/JoinColumnBidirectionalListWithInheritance.java index 316e69015a59..49d39cec9c09 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/detached/JoinColumnBidirectionalListWithInheritance.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/detached/JoinColumnBidirectionalListWithInheritance.java @@ -5,19 +5,21 @@ package org.hibernate.orm.test.envers.integration.onetomany.detached; import java.util.Arrays; -import jakarta.persistence.EntityManager; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.orm.test.envers.entities.onetomany.detached.ListJoinColumnBidirectionalInheritanceRefEdChildEntity; import org.hibernate.orm.test.envers.entities.onetomany.detached.ListJoinColumnBidirectionalInheritanceRefEdParentEntity; import org.hibernate.orm.test.envers.entities.onetomany.detached.ListJoinColumnBidirectionalInheritanceRefIngEntity; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; -import org.junit.Test; +import org.junit.jupiter.api.Test; import static org.hibernate.orm.test.envers.tools.TestTools.checkCollection; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; /** * Test for a "fake" bidirectional mapping where one side uses @OneToMany+@JoinColumn (and thus owns the relatin), @@ -25,203 +27,194 @@ * * @author Adam Warski (adam at warski dot org) */ -public class JoinColumnBidirectionalListWithInheritance extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = { + ListJoinColumnBidirectionalInheritanceRefIngEntity.class, + ListJoinColumnBidirectionalInheritanceRefEdChildEntity.class, + ListJoinColumnBidirectionalInheritanceRefEdParentEntity.class +}) +public class JoinColumnBidirectionalListWithInheritance { private Integer ed1_id; private Integer ed2_id; private Integer ing1_id; private Integer ing2_id; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { - ListJoinColumnBidirectionalInheritanceRefIngEntity.class, - ListJoinColumnBidirectionalInheritanceRefEdChildEntity.class, - ListJoinColumnBidirectionalInheritanceRefEdParentEntity.class - }; - } - - @Test - @Priority(10) - public void createData() { - EntityManager em = getEntityManager(); - - ListJoinColumnBidirectionalInheritanceRefEdParentEntity ed1 = new ListJoinColumnBidirectionalInheritanceRefEdChildEntity( - "ed1", - null, - "ed1 child" - ); - ListJoinColumnBidirectionalInheritanceRefEdParentEntity ed2 = new ListJoinColumnBidirectionalInheritanceRefEdChildEntity( - "ed2", - null, - "ed2 child" - ); - - ListJoinColumnBidirectionalInheritanceRefIngEntity ing1 = new ListJoinColumnBidirectionalInheritanceRefIngEntity( - "coll1", - ed1 - ); - ListJoinColumnBidirectionalInheritanceRefIngEntity ing2 = new ListJoinColumnBidirectionalInheritanceRefIngEntity( - "coll1", - ed2 - ); - + @BeforeClassTemplate + public void createData(EntityManagerFactoryScope scope) { // Revision 1 (ing1: ed1, ing2: ed2) - em.getTransaction().begin(); - - em.persist( ed1 ); - em.persist( ed2 ); - em.persist( ing1 ); - em.persist( ing2 ); - - em.getTransaction().commit(); + scope.inTransaction( em -> { + ListJoinColumnBidirectionalInheritanceRefEdParentEntity ed1 = new ListJoinColumnBidirectionalInheritanceRefEdChildEntity( + "ed1", + null, + "ed1 child" + ); + ListJoinColumnBidirectionalInheritanceRefEdParentEntity ed2 = new ListJoinColumnBidirectionalInheritanceRefEdChildEntity( + "ed2", + null, + "ed2 child" + ); + + ListJoinColumnBidirectionalInheritanceRefIngEntity ing1 = new ListJoinColumnBidirectionalInheritanceRefIngEntity( + "coll1", + ed1 + ); + ListJoinColumnBidirectionalInheritanceRefIngEntity ing2 = new ListJoinColumnBidirectionalInheritanceRefIngEntity( + "coll1", + ed2 + ); + + em.persist( ed1 ); + em.persist( ed2 ); + em.persist( ing1 ); + em.persist( ing2 ); + + ed1_id = ed1.getId(); + ed2_id = ed2.getId(); + ing1_id = ing1.getId(); + ing2_id = ing2.getId(); + } ); // Revision 2 (ing1: ed1, ed2) - em.getTransaction().begin(); - - ing1 = em.find( ListJoinColumnBidirectionalInheritanceRefIngEntity.class, ing1.getId() ); - ing2 = em.find( ListJoinColumnBidirectionalInheritanceRefIngEntity.class, ing2.getId() ); - ed1 = em.find( ListJoinColumnBidirectionalInheritanceRefEdParentEntity.class, ed1.getId() ); - ed2 = em.find( ListJoinColumnBidirectionalInheritanceRefEdParentEntity.class, ed2.getId() ); - - ing2.getReferences().remove( ed2 ); - ing1.getReferences().add( ed2 ); - - em.getTransaction().commit(); - em.clear(); - - // - - ing1_id = ing1.getId(); - ing2_id = ing2.getId(); - - ed1_id = ed1.getId(); - ed2_id = ed2.getId(); + scope.inTransaction( em -> { + ListJoinColumnBidirectionalInheritanceRefIngEntity ing1 = em.find( ListJoinColumnBidirectionalInheritanceRefIngEntity.class, ing1_id ); + ListJoinColumnBidirectionalInheritanceRefIngEntity ing2 = em.find( ListJoinColumnBidirectionalInheritanceRefIngEntity.class, ing2_id ); + ListJoinColumnBidirectionalInheritanceRefEdParentEntity ed2 = em.find( ListJoinColumnBidirectionalInheritanceRefEdParentEntity.class, ed2_id ); + + ing2.getReferences().remove( ed2 ); + ing1.getReferences().add( ed2 ); + } ); } @Test - public void testRevisionsCounts() { - assertEquals( - Arrays.asList( 1, 2 ), getAuditReader().getRevisions( - ListJoinColumnBidirectionalInheritanceRefIngEntity.class, - ing1_id - ) - ); - assertEquals( - Arrays.asList( 1, 2 ), getAuditReader().getRevisions( - ListJoinColumnBidirectionalInheritanceRefIngEntity.class, - ing2_id - ) - ); - - assertEquals( - Arrays.asList( 1 ), getAuditReader().getRevisions( - ListJoinColumnBidirectionalInheritanceRefEdParentEntity.class, - ed1_id - ) - ); - assertEquals( - Arrays.asList( 1, 2 ), getAuditReader().getRevisions( - ListJoinColumnBidirectionalInheritanceRefEdParentEntity.class, - ed2_id - ) - ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( + Arrays.asList( 1, 2 ), + auditReader.getRevisions( ListJoinColumnBidirectionalInheritanceRefIngEntity.class, ing1_id ) + ); + assertEquals( + Arrays.asList( 1, 2 ), + auditReader.getRevisions( ListJoinColumnBidirectionalInheritanceRefIngEntity.class, ing2_id ) + ); + + assertEquals( + Arrays.asList( 1 ), + auditReader.getRevisions( ListJoinColumnBidirectionalInheritanceRefEdParentEntity.class, ed1_id ) + ); + assertEquals( + Arrays.asList( 1, 2 ), + auditReader.getRevisions( ListJoinColumnBidirectionalInheritanceRefEdParentEntity.class, ed2_id ) + ); + } ); } @Test - public void testHistoryOfIng1() { - ListJoinColumnBidirectionalInheritanceRefEdParentEntity ed1 = getEntityManager().find( - ListJoinColumnBidirectionalInheritanceRefEdParentEntity.class, - ed1_id - ); - ListJoinColumnBidirectionalInheritanceRefEdParentEntity ed2 = getEntityManager().find( - ListJoinColumnBidirectionalInheritanceRefEdParentEntity.class, - ed2_id - ); - - ListJoinColumnBidirectionalInheritanceRefIngEntity rev1 = getAuditReader().find( - ListJoinColumnBidirectionalInheritanceRefIngEntity.class, - ing1_id, - 1 - ); - ListJoinColumnBidirectionalInheritanceRefIngEntity rev2 = getAuditReader().find( - ListJoinColumnBidirectionalInheritanceRefIngEntity.class, - ing1_id, - 2 - ); - - assertTrue( checkCollection( rev1.getReferences(), ed1 ) ); - assertTrue( checkCollection( rev2.getReferences(), ed1, ed2 ) ); + public void testHistoryOfIng1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + ListJoinColumnBidirectionalInheritanceRefEdParentEntity ed1 = em.find( + ListJoinColumnBidirectionalInheritanceRefEdParentEntity.class, + ed1_id + ); + ListJoinColumnBidirectionalInheritanceRefEdParentEntity ed2 = em.find( + ListJoinColumnBidirectionalInheritanceRefEdParentEntity.class, + ed2_id + ); + + final var auditReader = AuditReaderFactory.get( em ); + ListJoinColumnBidirectionalInheritanceRefIngEntity rev1 = auditReader.find( + ListJoinColumnBidirectionalInheritanceRefIngEntity.class, + ing1_id, + 1 + ); + ListJoinColumnBidirectionalInheritanceRefIngEntity rev2 = auditReader.find( + ListJoinColumnBidirectionalInheritanceRefIngEntity.class, + ing1_id, + 2 + ); + + assertTrue( checkCollection( rev1.getReferences(), ed1 ) ); + assertTrue( checkCollection( rev2.getReferences(), ed1, ed2 ) ); + } ); } @Test - public void testHistoryOfIng2() { - ListJoinColumnBidirectionalInheritanceRefEdParentEntity ed2 = getEntityManager().find( - ListJoinColumnBidirectionalInheritanceRefEdParentEntity.class, - ed2_id - ); - - ListJoinColumnBidirectionalInheritanceRefIngEntity rev1 = getAuditReader().find( - ListJoinColumnBidirectionalInheritanceRefIngEntity.class, - ing2_id, - 1 - ); - ListJoinColumnBidirectionalInheritanceRefIngEntity rev2 = getAuditReader().find( - ListJoinColumnBidirectionalInheritanceRefIngEntity.class, - ing2_id, - 2 - ); - - assertTrue( checkCollection( rev1.getReferences(), ed2 ) ); - assertTrue( checkCollection( rev2.getReferences() ) ); + public void testHistoryOfIng2(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + ListJoinColumnBidirectionalInheritanceRefEdParentEntity ed2 = em.find( + ListJoinColumnBidirectionalInheritanceRefEdParentEntity.class, + ed2_id + ); + + final var auditReader = AuditReaderFactory.get( em ); + ListJoinColumnBidirectionalInheritanceRefIngEntity rev1 = auditReader.find( + ListJoinColumnBidirectionalInheritanceRefIngEntity.class, + ing2_id, + 1 + ); + ListJoinColumnBidirectionalInheritanceRefIngEntity rev2 = auditReader.find( + ListJoinColumnBidirectionalInheritanceRefIngEntity.class, + ing2_id, + 2 + ); + + assertTrue( checkCollection( rev1.getReferences(), ed2 ) ); + assertTrue( checkCollection( rev2.getReferences() ) ); + } ); } @Test - public void testHistoryOfEd1() { - ListJoinColumnBidirectionalInheritanceRefIngEntity ing1 = getEntityManager().find( - ListJoinColumnBidirectionalInheritanceRefIngEntity.class, - ing1_id - ); - - ListJoinColumnBidirectionalInheritanceRefEdParentEntity rev1 = getAuditReader().find( - ListJoinColumnBidirectionalInheritanceRefEdParentEntity.class, - ed1_id, - 1 - ); - ListJoinColumnBidirectionalInheritanceRefEdParentEntity rev2 = getAuditReader().find( - ListJoinColumnBidirectionalInheritanceRefEdParentEntity.class, - ed1_id, - 2 - ); - - assertTrue( rev1.getOwner().equals( ing1 ) ); - assertTrue( rev2.getOwner().equals( ing1 ) ); + public void testHistoryOfEd1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + ListJoinColumnBidirectionalInheritanceRefIngEntity ing1 = em.find( + ListJoinColumnBidirectionalInheritanceRefIngEntity.class, + ing1_id + ); + + final var auditReader = AuditReaderFactory.get( em ); + ListJoinColumnBidirectionalInheritanceRefEdParentEntity rev1 = auditReader.find( + ListJoinColumnBidirectionalInheritanceRefEdParentEntity.class, + ed1_id, + 1 + ); + ListJoinColumnBidirectionalInheritanceRefEdParentEntity rev2 = auditReader.find( + ListJoinColumnBidirectionalInheritanceRefEdParentEntity.class, + ed1_id, + 2 + ); + + assertTrue( rev1.getOwner().equals( ing1 ) ); + assertTrue( rev2.getOwner().equals( ing1 ) ); + } ); } @Test - public void testHistoryOfEd2() { - ListJoinColumnBidirectionalInheritanceRefIngEntity ing1 = getEntityManager().find( - ListJoinColumnBidirectionalInheritanceRefIngEntity.class, - ing1_id - ); - ListJoinColumnBidirectionalInheritanceRefIngEntity ing2 = getEntityManager().find( - ListJoinColumnBidirectionalInheritanceRefIngEntity.class, - ing2_id - ); - - ListJoinColumnBidirectionalInheritanceRefEdParentEntity rev1 = getAuditReader().find( - ListJoinColumnBidirectionalInheritanceRefEdParentEntity.class, - ed2_id, - 1 - ); - ListJoinColumnBidirectionalInheritanceRefEdParentEntity rev2 = getAuditReader().find( - ListJoinColumnBidirectionalInheritanceRefEdParentEntity.class, - ed2_id, - 2 - ); - - assertTrue( rev1.getOwner().equals( ing2 ) ); - assertTrue( rev2.getOwner().equals( ing1 ) ); + public void testHistoryOfEd2(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + ListJoinColumnBidirectionalInheritanceRefIngEntity ing1 = em.find( + ListJoinColumnBidirectionalInheritanceRefIngEntity.class, + ing1_id + ); + ListJoinColumnBidirectionalInheritanceRefIngEntity ing2 = em.find( + ListJoinColumnBidirectionalInheritanceRefIngEntity.class, + ing2_id + ); + + final var auditReader = AuditReaderFactory.get( em ); + ListJoinColumnBidirectionalInheritanceRefEdParentEntity rev1 = auditReader.find( + ListJoinColumnBidirectionalInheritanceRefEdParentEntity.class, + ed2_id, + 1 + ); + ListJoinColumnBidirectionalInheritanceRefEdParentEntity rev2 = auditReader.find( + ListJoinColumnBidirectionalInheritanceRefEdParentEntity.class, + ed2_id, + 2 + ); + + assertTrue( rev1.getOwner().equals( ing2 ) ); + assertTrue( rev2.getOwner().equals( ing1 ) ); + } ); } - } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/embeddedid/MapsIdTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/embeddedid/MapsIdTest.java index 362141e33eb6..edfef8078841 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/embeddedid/MapsIdTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/embeddedid/MapsIdTest.java @@ -5,162 +5,166 @@ package org.hibernate.orm.test.envers.integration.onetomany.embeddedid; import java.util.Arrays; -import jakarta.persistence.EntityManager; import org.hibernate.community.dialect.AltibaseDialect; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; - +import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; +import org.hibernate.testing.orm.junit.Jpa; import org.hibernate.testing.orm.junit.SkipForDialect; -import org.junit.Assert; -import org.junit.Test; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) */ @JiraKey(value = "HHH-7157") -@SkipForDialect( dialectClass = AltibaseDialect.class, reason = "'CONSTANT' is not escaped even though autoQuoteKeywords is enabled") -public class MapsIdTest extends BaseEnversJPAFunctionalTestCase { +@SkipForDialect(dialectClass = AltibaseDialect.class, reason = "'CONSTANT' is not escaped even though autoQuoteKeywords is enabled") +@EnversTest +@Jpa(annotatedClasses = {Person.class, PersonTuple.class, Constant.class}) +public class MapsIdTest { private PersonTuple tuple1Ver1 = null; private PersonTuple tuple2Ver1 = null; private PersonTuple tuple2Ver2 = null; private Person personCVer1 = null; private Person personCVer2 = null; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {Person.class, PersonTuple.class, Constant.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Revision 1 - em.getTransaction().begin(); - Person personA = new Person( "Peter" ); - Person personB = new Person( "Mary" ); - em.persist( personA ); - em.persist( personB ); - Constant cons = new Constant( "USD", "US Dollar" ); - em.persist( cons ); - PersonTuple tuple1 = new PersonTuple( true, personA, personB, cons ); - em.persist( tuple1 ); - em.getTransaction().commit(); - - tuple1Ver1 = new PersonTuple( - tuple1.isHelloWorld(), - tuple1.getPersonA(), - tuple1.getPersonB(), - tuple1.getConstant() - ); + scope.inTransaction( em -> { + Person personA = new Person( "Peter" ); + Person personB = new Person( "Mary" ); + em.persist( personA ); + em.persist( personB ); + Constant cons = new Constant( "USD", "US Dollar" ); + em.persist( cons ); + PersonTuple tuple1 = new PersonTuple( true, personA, personB, cons ); + em.persist( tuple1 ); + + tuple1Ver1 = new PersonTuple( + tuple1.isHelloWorld(), + tuple1.getPersonA(), + tuple1.getPersonB(), + tuple1.getConstant() + ); + } ); // Revision 2 - em.getTransaction().begin(); - cons = em.find( Constant.class, cons.getId() ); - Person personC1 = new Person( "Lukasz" ); - em.persist( personC1 ); - PersonTuple tuple2 = new PersonTuple( true, personA, personC1, cons ); - em.persist( tuple2 ); - em.getTransaction().commit(); - - tuple2Ver1 = new PersonTuple( - tuple2.isHelloWorld(), - tuple2.getPersonA(), - tuple2.getPersonB(), - tuple2.getConstant() - ); - personCVer1 = new Person( personC1.getId(), personC1.getName() ); - personCVer1.getPersonBTuples().add( tuple2Ver1 ); + scope.inTransaction( em -> { + Constant cons = em.find( Constant.class, "USD" ); + Person personA = em.createQuery( "select p from Person p where p.name = 'Peter'", Person.class ).getSingleResult(); + Person personC1 = new Person( "Lukasz" ); + em.persist( personC1 ); + PersonTuple tuple2 = new PersonTuple( true, personA, personC1, cons ); + em.persist( tuple2 ); + + tuple2Ver1 = new PersonTuple( + tuple2.isHelloWorld(), + tuple2.getPersonA(), + tuple2.getPersonB(), + tuple2.getConstant() + ); + personCVer1 = new Person( personC1.getId(), personC1.getName() ); + personCVer1.getPersonBTuples().add( tuple2Ver1 ); + } ); // Revision 3 - em.getTransaction().begin(); - tuple2 = em.find( PersonTuple.class, tuple2.getPersonTupleId() ); - tuple2.setHelloWorld( false ); - em.merge( tuple2 ); - em.getTransaction().commit(); - - tuple2Ver2 = new PersonTuple( - tuple2.isHelloWorld(), - tuple2.getPersonA(), - tuple2.getPersonB(), - tuple2.getConstant() - ); + scope.inTransaction( em -> { + PersonTuple tuple2 = em.createQuery( + "select pt from PersonTuple pt where pt.personB.name = 'Lukasz'", + PersonTuple.class + ).getSingleResult(); + tuple2.setHelloWorld( false ); + em.merge( tuple2 ); + + tuple2Ver2 = new PersonTuple( + tuple2.isHelloWorld(), + tuple2.getPersonA(), + tuple2.getPersonB(), + tuple2.getConstant() + ); + } ); // Revision 4 - em.getTransaction().begin(); - Person personC2 = em.find( Person.class, personC1.getId() ); - personC2.setName( "Robert" ); - em.merge( personC2 ); - em.getTransaction().commit(); - - personCVer2 = new Person( personC2.getId(), personC2.getName() ); - personCVer2.getPersonBTuples().add( tuple2Ver1 ); - - em.close(); + scope.inTransaction( em -> { + Person personC2 = em.createQuery( "select p from Person p where p.name = 'Lukasz'", Person.class ).getSingleResult(); + personC2.setName( "Robert" ); + em.merge( personC2 ); + + personCVer2 = new Person( personC2.getId(), personC2.getName() ); + personCVer2.getPersonBTuples().add( tuple2Ver1 ); + } ); } @Test - public void testRevisionsCounts() { - Assert.assertEquals( - Arrays.asList( 1 ), getAuditReader().getRevisions( - PersonTuple.class, - tuple1Ver1.getPersonTupleId() - ) - ); - Assert.assertEquals( - Arrays.asList( 2, 3 ), getAuditReader().getRevisions( - PersonTuple.class, - tuple2Ver1.getPersonTupleId() - ) - ); - Assert.assertEquals( - Arrays.asList( 2, 4 ), getAuditReader().getRevisions( - Person.class, - personCVer1.getId() - ) - ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( + Arrays.asList( 1 ), + auditReader.getRevisions( PersonTuple.class, tuple1Ver1.getPersonTupleId() ) + ); + assertEquals( + Arrays.asList( 2, 3 ), + auditReader.getRevisions( PersonTuple.class, tuple2Ver1.getPersonTupleId() ) + ); + assertEquals( + Arrays.asList( 2, 4 ), + auditReader.getRevisions( Person.class, personCVer1.getId() ) + ); + } ); } @Test - public void testHistoryOfTuple1() { - PersonTuple tuple = getAuditReader().find( PersonTuple.class, tuple1Ver1.getPersonTupleId(), 1 ); - - Assert.assertEquals( tuple1Ver1, tuple ); - Assert.assertEquals( tuple1Ver1.isHelloWorld(), tuple.isHelloWorld() ); - Assert.assertEquals( tuple1Ver1.getPersonA().getId(), tuple.getPersonA().getId() ); - Assert.assertEquals( tuple1Ver1.getPersonB().getId(), tuple.getPersonB().getId() ); + public void testHistoryOfTuple1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + PersonTuple tuple = auditReader.find( PersonTuple.class, tuple1Ver1.getPersonTupleId(), 1 ); + + assertEquals( tuple1Ver1, tuple ); + assertEquals( tuple1Ver1.isHelloWorld(), tuple.isHelloWorld() ); + assertEquals( tuple1Ver1.getPersonA().getId(), tuple.getPersonA().getId() ); + assertEquals( tuple1Ver1.getPersonB().getId(), tuple.getPersonB().getId() ); + } ); } @Test - public void testHistoryOfTuple2() { - PersonTuple tuple = getAuditReader().find( PersonTuple.class, tuple2Ver2.getPersonTupleId(), 2 ); - - Assert.assertEquals( tuple2Ver1, tuple ); - Assert.assertEquals( tuple2Ver1.isHelloWorld(), tuple.isHelloWorld() ); - Assert.assertEquals( tuple2Ver1.getPersonA().getId(), tuple.getPersonA().getId() ); - Assert.assertEquals( tuple2Ver1.getPersonB().getId(), tuple.getPersonB().getId() ); - - tuple = getAuditReader().find( PersonTuple.class, tuple2Ver2.getPersonTupleId(), 3 ); - - Assert.assertEquals( tuple2Ver2, tuple ); - Assert.assertEquals( tuple2Ver2.isHelloWorld(), tuple.isHelloWorld() ); - Assert.assertEquals( tuple2Ver2.getPersonA().getId(), tuple.getPersonA().getId() ); - Assert.assertEquals( tuple2Ver2.getPersonB().getId(), tuple.getPersonB().getId() ); + public void testHistoryOfTuple2(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + PersonTuple tuple = auditReader.find( PersonTuple.class, tuple2Ver2.getPersonTupleId(), 2 ); + + assertEquals( tuple2Ver1, tuple ); + assertEquals( tuple2Ver1.isHelloWorld(), tuple.isHelloWorld() ); + assertEquals( tuple2Ver1.getPersonA().getId(), tuple.getPersonA().getId() ); + assertEquals( tuple2Ver1.getPersonB().getId(), tuple.getPersonB().getId() ); + + tuple = auditReader.find( PersonTuple.class, tuple2Ver2.getPersonTupleId(), 3 ); + + assertEquals( tuple2Ver2, tuple ); + assertEquals( tuple2Ver2.isHelloWorld(), tuple.isHelloWorld() ); + assertEquals( tuple2Ver2.getPersonA().getId(), tuple.getPersonA().getId() ); + assertEquals( tuple2Ver2.getPersonB().getId(), tuple.getPersonB().getId() ); + } ); } @Test - public void testHistoryOfPersonC() { - Person person = getAuditReader().find( Person.class, personCVer1.getId(), 2 ); + public void testHistoryOfPersonC(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + Person person = auditReader.find( Person.class, personCVer1.getId(), 2 ); - Assert.assertEquals( personCVer1, person ); - Assert.assertEquals( personCVer1.getPersonATuples(), person.getPersonATuples() ); - Assert.assertEquals( personCVer1.getPersonBTuples(), person.getPersonBTuples() ); + assertEquals( personCVer1, person ); + assertEquals( personCVer1.getPersonATuples(), person.getPersonATuples() ); + assertEquals( personCVer1.getPersonBTuples(), person.getPersonBTuples() ); - person = getAuditReader().find( Person.class, personCVer2.getId(), 4 ); + person = auditReader.find( Person.class, personCVer2.getId(), 4 ); - Assert.assertEquals( personCVer2, person ); + assertEquals( personCVer2, person ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/embeddedid/OneToManyCompositeKeyTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/embeddedid/OneToManyCompositeKeyTest.java index 5beda246a4d5..0588eb8acc02 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/embeddedid/OneToManyCompositeKeyTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/embeddedid/OneToManyCompositeKeyTest.java @@ -27,49 +27,54 @@ import org.hibernate.annotations.Fetch; import org.hibernate.annotations.FetchMode; -import org.hibernate.envers.AuditReader; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.junit.Test; - +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; -import static org.hibernate.testing.transaction.TransactionUtil.doInJPA; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Chris Cranford */ @JiraKey(value = "HHH-11770") -public class OneToManyCompositeKeyTest extends BaseEnversJPAFunctionalTestCase { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[]{ Contract.class, Design.class, DesignContract.class }; - } - - @Test - public void initData() { - doInJPA( this::entityManagerFactory, entityManager -> { +@EnversTest +@Jpa(annotatedClasses = { + OneToManyCompositeKeyTest.Contract.class, + OneToManyCompositeKeyTest.Design.class, + OneToManyCompositeKeyTest.DesignContract.class +}) +public class OneToManyCompositeKeyTest { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + scope.inTransaction( em -> { final Contract contract = new Contract( 1 ); final Design design = new Design( 1 ); final DesignContract designContract = new DesignContract( contract, design ); designContract.setGoal( 25d ); contract.getDesigns().add( designContract ); - entityManager.persist( design ); - entityManager.persist( contract ); + em.persist( design ); + em.persist( contract ); } ); } @Test - public void testRevisionCounts() { - assertEquals( Arrays.asList( 1 ), getAuditReader().getRevisions( Contract.class, 1 ) ); - assertEquals( Arrays.asList( 1 ), getAuditReader().getRevisions( Design.class, 1 ) ); + public void testRevisionCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1 ), auditReader.getRevisions( Contract.class, 1 ) ); + assertEquals( Arrays.asList( 1 ), auditReader.getRevisions( Design.class, 1 ) ); + } ); } @Test - public void testOneToManyAssociationAuditQuery() { - doInJPA( this::entityManagerFactory, entityManager -> { - final AuditReader auditReader = getAuditReader(); + public void testOneToManyAssociationAuditQuery(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); final Contract contract = auditReader.find( Contract.class, 1, 1 ); final Design design = auditReader.find( Design.class, 1, 1 ); assertEquals( 1, contract.getDesigns().size() ); diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/hierarchy/HierarchyTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/hierarchy/HierarchyTest.java index 6753fd67c04b..c374d0e0bb2e 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/hierarchy/HierarchyTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/hierarchy/HierarchyTest.java @@ -5,107 +5,113 @@ package org.hibernate.orm.test.envers.integration.onetomany.hierarchy; import java.util.Arrays; -import jakarta.persistence.EntityManager; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.orm.test.envers.tools.TestTools; - +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Assert; -import org.junit.Test; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; /** * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) */ @JiraKey(value = "HHH-6661") -public class HierarchyTest extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {Node.class}) +public class HierarchyTest { private Long parentId = null; private Long child1Id = null; private Long child2Id = null; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {Node.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - // Revision 1 - em.getTransaction().begin(); - Node parent = new Node( "parent", (Node) null ); - Node child1 = new Node( "child1", parent ); - Node child2 = new Node( "child2", parent ); - parent.getChildren().add( child1 ); - parent.getChildren().add( child2 ); - em.persist( parent ); - em.persist( child1 ); - em.persist( child2 ); - em.getTransaction().commit(); - - parentId = parent.getId(); - child1Id = child1.getId(); - child2Id = child2.getId(); - - // Revision 2 - em.getTransaction().begin(); - parent = em.find( Node.class, parent.getId() ); - parent.getChildren().get( 0 ).setData( "child1 modified" ); - em.getTransaction().commit(); - - // Revision 3 - em.getTransaction().begin(); - child2 = em.find( Node.class, child2.getId() ); - em.remove( child2 ); - em.getTransaction().commit(); + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + scope.inTransaction( em -> { + // Revision 1 + Node parent = new Node( "parent", (Node) null ); + Node child1 = new Node( "child1", parent ); + Node child2 = new Node( "child2", parent ); + parent.getChildren().add( child1 ); + parent.getChildren().add( child2 ); + em.persist( parent ); + em.persist( child1 ); + em.persist( child2 ); + + parentId = parent.getId(); + child1Id = child1.getId(); + child2Id = child2.getId(); + } ); + + scope.inTransaction( em -> { + // Revision 2 + Node parent = em.find( Node.class, parentId ); + parent.getChildren().get( 0 ).setData( "child1 modified" ); + } ); + + scope.inTransaction( em -> { + // Revision 3 + Node child2 = em.find( Node.class, child2Id ); + em.remove( child2 ); + } ); } @Test - public void testRevisionsCounts() { - Assert.assertEquals( Arrays.asList( 1, 3 ), getAuditReader().getRevisions( Node.class, parentId ) ); - Assert.assertEquals( Arrays.asList( 1, 2 ), getAuditReader().getRevisions( Node.class, child1Id ) ); - Assert.assertEquals( Arrays.asList( 1, 3 ), getAuditReader().getRevisions( Node.class, child2Id ) ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1, 3 ), auditReader.getRevisions( Node.class, parentId ) ); + assertEquals( Arrays.asList( 1, 2 ), auditReader.getRevisions( Node.class, child1Id ) ); + assertEquals( Arrays.asList( 1, 3 ), auditReader.getRevisions( Node.class, child2Id ) ); + } ); } @Test - public void testHistoryOfParentNode() { - Node parent = new Node( "parent", parentId ); - Node child1 = new Node( "child1", child1Id ); - Node child2 = new Node( "child2", child2Id ); - - Node ver1 = getAuditReader().find( Node.class, parentId, 1 ); - Assert.assertEquals( parent, ver1 ); - Assert.assertTrue( TestTools.checkCollection( ver1.getChildren(), child1, child2 ) ); - - child1.setData( "child1 modified" ); - - Node ver2 = getAuditReader().find( Node.class, parentId, 2 ); - Assert.assertEquals( parent, ver2 ); - Assert.assertTrue( TestTools.checkCollection( ver2.getChildren(), child1, child2 ) ); - - Node ver3 = getAuditReader().find( Node.class, parentId, 3 ); - Assert.assertEquals( parent, ver3 ); - Assert.assertTrue( TestTools.checkCollection( ver3.getChildren(), child1 ) ); + public void testHistoryOfParentNode(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + Node parent = new Node( "parent", parentId ); + Node child1 = new Node( "child1", child1Id ); + Node child2 = new Node( "child2", child2Id ); + + Node ver1 = auditReader.find( Node.class, parentId, 1 ); + assertEquals( parent, ver1 ); + assertTrue( TestTools.checkCollection( ver1.getChildren(), child1, child2 ) ); + + child1.setData( "child1 modified" ); + + Node ver2 = auditReader.find( Node.class, parentId, 2 ); + assertEquals( parent, ver2 ); + assertTrue( TestTools.checkCollection( ver2.getChildren(), child1, child2 ) ); + + Node ver3 = auditReader.find( Node.class, parentId, 3 ); + assertEquals( parent, ver3 ); + assertTrue( TestTools.checkCollection( ver3.getChildren(), child1 ) ); + } ); } @Test - public void testHistoryOfChild1Node() { - Node parent = new Node( "parent", parentId ); - Node child1 = new Node( "child1", child1Id ); - - Node ver1 = getAuditReader().find( Node.class, child1Id, 1 ); - Assert.assertEquals( child1, ver1 ); - Assert.assertEquals( parent.getId(), ver1.getParent().getId() ); - Assert.assertEquals( parent.getData(), ver1.getParent().getData() ); - - child1.setData( "child1 modified" ); - - Node ver2 = getAuditReader().find( Node.class, child1Id, 2 ); - Assert.assertEquals( child1, ver2 ); - Assert.assertEquals( parent.getId(), ver2.getParent().getId() ); - Assert.assertEquals( parent.getData(), ver2.getParent().getData() ); + public void testHistoryOfChild1Node(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + Node parent = new Node( "parent", parentId ); + Node child1 = new Node( "child1", child1Id ); + + Node ver1 = auditReader.find( Node.class, child1Id, 1 ); + assertEquals( child1, ver1 ); + assertEquals( parent.getId(), ver1.getParent().getId() ); + assertEquals( parent.getData(), ver1.getParent().getData() ); + + child1.setData( "child1 modified" ); + + Node ver2 = auditReader.find( Node.class, child1Id, 2 ); + assertEquals( child1, ver2 ); + assertEquals( parent.getId(), ver2.getParent().getId() ); + assertEquals( parent.getData(), ver2.getParent().getData() ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/idclass/ManyToOneOwned.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/idclass/ManyToOneOwned.java index 7aa977a9fbe7..4fcd0aec482c 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/idclass/ManyToOneOwned.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/idclass/ManyToOneOwned.java @@ -45,7 +45,7 @@ public boolean equals(Object o) { } ManyToOneOwned that = (ManyToOneOwned) o; - if ( data != null ? !data.equals( that.data ) : that.data != null ) { + if ( data != null ? !data.equals( that.getData() ) : that.getData() != null ) { return false; } return true; diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/idclass/OneToManyCompositeKeyTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/idclass/OneToManyCompositeKeyTest.java index ffa568f1b4ea..a4f2fc3cf246 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/idclass/OneToManyCompositeKeyTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/idclass/OneToManyCompositeKeyTest.java @@ -4,49 +4,46 @@ */ package org.hibernate.orm.test.envers.integration.onetomany.idclass; -import java.util.Arrays; - +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.query.AuditEntity; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; - +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; -import org.hibernate.testing.transaction.TransactionUtil; -import org.junit.Test; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; +import java.util.Arrays; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNull; /** * @author Chris Cranford */ @JiraKey(value = "HHH-7625") -public class OneToManyCompositeKeyTest extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {OneToManyOwned.class, ManyToManyCompositeKey.class, ManyToOneOwned.class}) +public class OneToManyCompositeKeyTest { private ManyToManyCompositeKey.ManyToManyId owning1Id = null; private ManyToManyCompositeKey.ManyToManyId owning2Id = null; private Long oneToManyId; private Long manyToOne1Id; private Long manyToOne2Id; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { OneToManyOwned.class, ManyToManyCompositeKey.class, ManyToOneOwned.class }; - } - - @Test - @Priority(10) - public void initData() { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Revision 1 - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { + scope.inTransaction( entityManager -> { OneToManyOwned oneToManyOwned = new OneToManyOwned( "data", null ); ManyToOneOwned manyToOneOwned1 = new ManyToOneOwned( "data1" ); ManyToOneOwned manyToOneOwned2 = new ManyToOneOwned( "data2" ); ManyToManyCompositeKey owning1 = new ManyToManyCompositeKey( oneToManyOwned, manyToOneOwned1 ); ManyToManyCompositeKey owning2 = new ManyToManyCompositeKey( oneToManyOwned, manyToOneOwned2 ); - entityManager.persist(oneToManyOwned); - entityManager.persist(manyToOneOwned1); - entityManager.persist(manyToOneOwned2); + entityManager.persist( oneToManyOwned ); + entityManager.persist( manyToOneOwned1 ); + entityManager.persist( manyToOneOwned2 ); entityManager.persist( owning1 ); entityManager.persist( owning2 ); @@ -59,93 +56,111 @@ public void initData() { } ); // Revision 2 - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { + scope.inTransaction( entityManager -> { ManyToManyCompositeKey owning1 = entityManager.find( ManyToManyCompositeKey.class, owning1Id ); entityManager.remove( owning1 ); } ); // Revision 3 - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { + scope.inTransaction( entityManager -> { ManyToManyCompositeKey owning2 = entityManager.find( ManyToManyCompositeKey.class, owning2Id ); entityManager.remove( owning2 ); } ); } @Test - public void testRevisionsCounts() { - assertEquals( Arrays.asList( 1, 2 ), getAuditReader().getRevisions( ManyToManyCompositeKey.class, owning1Id ) ); - assertEquals( Arrays.asList( 1, 3 ), getAuditReader().getRevisions( ManyToManyCompositeKey.class, owning2Id ) ); - assertEquals( Arrays.asList( 1 ), getAuditReader().getRevisions( OneToManyOwned.class, oneToManyId ) ); - assertEquals( Arrays.asList( 1 ), getAuditReader().getRevisions( ManyToOneOwned.class, manyToOne1Id ) ); - assertEquals( Arrays.asList( 1 ), getAuditReader().getRevisions( ManyToOneOwned.class, manyToOne2Id ) ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1, 2 ), auditReader.getRevisions( ManyToManyCompositeKey.class, owning1Id ) ); + assertEquals( Arrays.asList( 1, 3 ), auditReader.getRevisions( ManyToManyCompositeKey.class, owning2Id ) ); + assertEquals( Arrays.asList( 1 ), auditReader.getRevisions( OneToManyOwned.class, oneToManyId ) ); + assertEquals( Arrays.asList( 1 ), auditReader.getRevisions( ManyToOneOwned.class, manyToOne1Id ) ); + assertEquals( Arrays.asList( 1 ), auditReader.getRevisions( ManyToOneOwned.class, manyToOne2Id ) ); + } ); } @Test - public void testOneToManyHistory() { - final OneToManyOwned rev1 = getAuditReader().find( OneToManyOwned.class, oneToManyId, 1 ); - assertEquals( "data", rev1.getData() ); - assertEquals( 2, rev1.getManyToManyCompositeKeys().size() ); + public void testOneToManyHistory(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + final OneToManyOwned rev1 = auditReader.find( OneToManyOwned.class, oneToManyId, 1 ); + assertEquals( "data", rev1.getData() ); + assertEquals( 2, rev1.getManyToManyCompositeKeys().size() ); + } ); } @Test - public void testManyToOne1History() { - final ManyToOneOwned rev1 = getAuditReader().find( ManyToOneOwned.class, manyToOne1Id, 1 ); - assertEquals( "data1", rev1.getData() ); + public void testManyToOne1History(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + final ManyToOneOwned rev1 = auditReader.find( ManyToOneOwned.class, manyToOne1Id, 1 ); + assertEquals( "data1", rev1.getData() ); + } ); } @Test - public void testManyToOne2History() { - final ManyToOneOwned rev1 = getAuditReader().find( ManyToOneOwned.class, manyToOne2Id, 1 ); - assertEquals( "data2", rev1.getData() ); + public void testManyToOne2History(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + final ManyToOneOwned rev1 = auditReader.find( ManyToOneOwned.class, manyToOne2Id, 1 ); + assertEquals( "data2", rev1.getData() ); + } ); } @Test - public void testOwning1History() { - // objects - final OneToManyOwned oneToMany = new OneToManyOwned( 1L, "data", null ); - final ManyToOneOwned manyToOne = new ManyToOneOwned( 2L, "data1" ); - - // insert revision - final ManyToManyCompositeKey rev1 = getAuditReader().find( ManyToManyCompositeKey.class, owning1Id, 1 ); - assertEquals( rev1.getOneToMany(), oneToMany ); - assertEquals( rev1.getManyToOne(), manyToOne ); - - // removal revision - find returns null for deleted - assertNull( getAuditReader().find( ManyToManyCompositeKey.class, owning1Id, 2 ) ); - - // fetch revision 2 using 'select deletions' api and verify. - final ManyToManyCompositeKey rev2 = (ManyToManyCompositeKey) getAuditReader() - .createQuery() - .forRevisionsOfEntity( ManyToManyCompositeKey.class, true, true ) - .add( AuditEntity.id().eq( owning1Id ) ) - .add( AuditEntity.revisionNumber().eq( 2 ) ) - .getSingleResult(); - assertEquals( rev2.getOneToMany(), oneToMany ); - assertEquals( rev2.getManyToOne(), manyToOne ); + public void testOwning1History(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + // objects + final OneToManyOwned oneToMany = new OneToManyOwned( 1L, "data", null ); + final ManyToOneOwned manyToOne = new ManyToOneOwned( 2L, "data1" ); + + // insert revision + final ManyToManyCompositeKey rev1 = auditReader.find( ManyToManyCompositeKey.class, owning1Id, 1 ); + assertEquals( oneToMany, rev1.getOneToMany() ); + assertEquals( manyToOne, rev1.getManyToOne() ); + + // removal revision - find returns null for deleted + assertNull( auditReader.find( ManyToManyCompositeKey.class, owning1Id, 2 ) ); + + // fetch revision 2 using 'select deletions' api and verify. + final ManyToManyCompositeKey rev2 = (ManyToManyCompositeKey) auditReader + .createQuery() + .forRevisionsOfEntity( ManyToManyCompositeKey.class, true, true ) + .add( AuditEntity.id().eq( owning1Id ) ) + .add( AuditEntity.revisionNumber().eq( 2 ) ) + .getSingleResult(); + assertEquals( oneToMany, rev2.getOneToMany() ); + assertEquals( manyToOne, rev2.getManyToOne() ); + } ); } @Test - public void testOwning2History() { - // objects - final OneToManyOwned oneToMany = new OneToManyOwned( 1L, "data", null ); - final ManyToOneOwned manyToOne = new ManyToOneOwned( 3L, "data2" ); - - // insert revision - final ManyToManyCompositeKey rev1 = getAuditReader().find( ManyToManyCompositeKey.class, owning2Id, 1 ); - assertEquals( rev1.getOneToMany(), oneToMany ); - assertEquals( rev1.getManyToOne(), manyToOne ); - - // removal revision - find returns null for deleted - assertNull( getAuditReader().find( ManyToManyCompositeKey.class, owning2Id, 3 ) ); - - // fetch revision 3 using 'select deletions' api and verify. - final ManyToManyCompositeKey rev2 = (ManyToManyCompositeKey) getAuditReader() - .createQuery() - .forRevisionsOfEntity( ManyToManyCompositeKey.class, true, true ) - .add( AuditEntity.id().eq( owning2Id ) ) - .add( AuditEntity.revisionNumber().eq( 3 ) ) - .getSingleResult(); - assertEquals( rev2.getOneToMany(), oneToMany ); - assertEquals( rev2.getManyToOne(), manyToOne ); + public void testOwning2History(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + // objects + final OneToManyOwned oneToMany = new OneToManyOwned( 1L, "data", null ); + final ManyToOneOwned manyToOne = new ManyToOneOwned( 3L, "data2" ); + + // insert revision + final ManyToManyCompositeKey rev1 = auditReader.find( ManyToManyCompositeKey.class, owning2Id, 1 ); + assertEquals( oneToMany, rev1.getOneToMany() ); + assertEquals( manyToOne, rev1.getManyToOne() ); + + // removal revision - find returns null for deleted + assertNull( auditReader.find( ManyToManyCompositeKey.class, owning2Id, 3 ) ); + + // fetch revision 3 using 'select deletions' api and verify. + final ManyToManyCompositeKey rev2 = (ManyToManyCompositeKey) auditReader + .createQuery() + .forRevisionsOfEntity( ManyToManyCompositeKey.class, true, true ) + .add( AuditEntity.id().eq( owning2Id ) ) + .add( AuditEntity.revisionNumber().eq( 3 ) ) + .getSingleResult(); + assertEquals( oneToMany, rev2.getOneToMany() ); + assertEquals( manyToOne, rev2.getManyToOne() ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/idclass/OneToManyOwned.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/idclass/OneToManyOwned.java index 3e1ce5ddedde..643f6c96e840 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/idclass/OneToManyOwned.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/idclass/OneToManyOwned.java @@ -54,7 +54,7 @@ public boolean equals(Object o) { } OneToManyOwned that = (OneToManyOwned) o; - if ( data != null ? !data.equals( that.data ) : that.data != null ) { + if ( data != null ? !data.equals( that.getData() ) : that.getData() != null ) { return false; } return true; diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/inverseToSuperclass/OneToManyInverseToSuperclassTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/inverseToSuperclass/OneToManyInverseToSuperclassTest.java index e1f3f24276b5..46053aa307d2 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/inverseToSuperclass/OneToManyInverseToSuperclassTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/inverseToSuperclass/OneToManyInverseToSuperclassTest.java @@ -5,103 +5,95 @@ package org.hibernate.orm.test.envers.integration.onetomany.inverseToSuperclass; import java.util.ArrayList; -import jakarta.persistence.EntityManager; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; -import org.junit.Test; +import static org.junit.jupiter.api.Assertions.assertNotNull; /** - * @author Hern�n Chanfreau + * @author Hernán Chanfreau */ - -public class OneToManyInverseToSuperclassTest extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(xmlMappings = "mappings/oneToMany/inverseToSuperclass/mappings.hbm.xml") +public class OneToManyInverseToSuperclassTest { private long m1_id; - @Override - protected String[] getMappings() { - return new String[] {"mappings/oneToMany/inverseToSuperclass/mappings.hbm.xml"}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - Root m1 = new Root(); - DetailSubclass det1 = new DetailSubclass2(); - DetailSubclass det2 = new DetailSubclass2(); + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + scope.inTransaction( em -> { + // Revision 1 + Root m1 = new Root(); + DetailSubclass det1 = new DetailSubclass2(); - // Revision 1 - em.getTransaction().begin(); + det1.setStr2( "detail 1" ); - det1.setStr2( "detail 1" ); + m1.setStr( "root" ); + m1.setItems( new ArrayList() ); + m1.getItems().add( det1 ); + det1.setParent( m1 ); - m1.setStr( "root" ); - m1.setItems( new ArrayList() ); - m1.getItems().add( det1 ); - det1.setParent( m1 ); + em.persist( m1 ); - em.persist( m1 ); - em.getTransaction().commit(); - m1_id = m1.getId(); + m1_id = m1.getId(); + } ); - // Revision 2 - em.getTransaction().begin(); + scope.inTransaction( em -> { + // Revision 2 + Root m1 = em.find( Root.class, m1_id ); + DetailSubclass det2 = new DetailSubclass2(); - m1 = em.find( Root.class, m1_id ); + det2.setStr2( "detail 2" ); + det2.setParent( m1 ); + m1.getItems().add( det2 ); + } ); - det2.setStr2( "detail 2" ); - det2.setParent( m1 ); - m1.getItems().add( det2 ); - em.getTransaction().commit(); + scope.inTransaction( em -> { + // Revision 3 + Root m1 = em.find( Root.class, m1_id ); + m1.setStr( "new root" ); - // Revision 3 - em.getTransaction().begin(); + DetailSubclass det1 = m1.getItems().get( 0 ); + det1.setStr2( "new detail" ); + DetailSubclass det3 = new DetailSubclass2(); + det3.setStr2( "detail 3" ); + det3.setParent( m1 ); - m1 = em.find( Root.class, m1_id ); - m1.setStr( "new root" ); + m1.getItems().get( 1 ).setParent( null ); + m1.getItems().add( det3 ); - det1 = m1.getItems().get( 0 ); - det1.setStr2( "new detail" ); - DetailSubclass det3 = new DetailSubclass2(); - det3.setStr2( "detail 3" ); - det3.setParent( m1 ); + em.persist( m1 ); + } ); - m1.getItems().get( 1 ).setParent( null ); - // m1.getItems().remove(1); - m1.getItems().add( det3 ); + scope.inTransaction( em -> { + // Revision 4 + Root m1 = em.find( Root.class, m1_id ); - em.persist( m1 ); - em.getTransaction().commit(); - - // Revision 4 - em.getTransaction().begin(); - - m1 = em.find( Root.class, m1_id ); - - det1 = m1.getItems().get( 0 ); - det1.setParent( null ); - // m1.getItems().remove(det1); - - em.persist( m1 ); - em.getTransaction().commit(); + DetailSubclass det1 = m1.getItems().get( 0 ); + det1.setParent( null ); + em.persist( m1 ); + } ); } @Test - public void testHistoryExists() { - Root rev1_1 = getAuditReader().find( Root.class, m1_id, 1 ); - Root rev1_2 = getAuditReader().find( Root.class, m1_id, 2 ); - Root rev1_3 = getAuditReader().find( Root.class, m1_id, 3 ); - Root rev1_4 = getAuditReader().find( Root.class, m1_id, 4 ); - - assert (rev1_1 != null); - assert (rev1_2 != null); - assert (rev1_3 != null); - assert (rev1_4 != null); + public void testHistoryExists(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + Root rev1_1 = auditReader.find( Root.class, m1_id, 1 ); + Root rev1_2 = auditReader.find( Root.class, m1_id, 2 ); + Root rev1_3 = auditReader.find( Root.class, m1_id, 3 ); + Root rev1_4 = auditReader.find( Root.class, m1_id, 4 ); + + assertNotNull( rev1_1 ); + assertNotNull( rev1_2 ); + assertNotNull( rev1_3 ); + assertNotNull( rev1_4 ); + } ); } - } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/relatedid/AuditRelatedIdInTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/relatedid/AuditRelatedIdInTest.java index fcd28e1555ac..5fe8d551ee52 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/relatedid/AuditRelatedIdInTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetomany/relatedid/AuditRelatedIdInTest.java @@ -6,25 +6,27 @@ import java.util.List; -import jakarta.persistence.EntityManager; - +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.query.AuditEntity; import org.hibernate.envers.query.AuditQuery; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; import org.hibernate.orm.test.envers.tools.TestTools; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; -import static org.hamcrest.core.Is.is; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertThat; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; /** * @author Chris Cranford */ @JiraKey(value = "HHH-8070") -public class AuditRelatedIdInTest extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {Company.class, Employee.class}) +public class AuditRelatedIdInTest { private Integer company1Id; private Integer company2Id; private Integer company3Id; @@ -33,32 +35,20 @@ public class AuditRelatedIdInTest extends BaseEnversJPAFunctionalTestCase { private Integer employee3Id; private Integer employee4Id; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[]{ - Company.class, - Employee.class - }; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getOrCreateEntityManager(); - try { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + scope.inTransaction( em -> { // Revision 1 Company company1 = new Company( "COMPANY1" ); Company company2 = new Company( "COMPANY2" ); Employee employee1 = new Employee( "Employee1", company1 ); Employee employee2 = new Employee( "Employee2", company2 ); Employee employee3 = new Employee( "Employee3", company2 ); - em.getTransaction().begin(); em.persist( company1 ); em.persist( company2 ); em.persist( employee1 ); em.persist( employee2 ); em.persist( employee3 ); - em.getTransaction().commit(); // cache ids company1Id = company1.getId(); @@ -66,80 +56,89 @@ public void initData() { employee1Id = employee1.getId(); employee2Id = employee2.getId(); employee3Id = employee3.getId(); + } ); + scope.inTransaction( em -> { // Revision 2 - em.getTransaction().begin(); - employee2 = em.find( Employee.class, employee2.getId() ); - employee2.setCompany( company1 ); - company2 = em.find( Company.class, company2.getId() ); + Employee employee2 = em.find( Employee.class, employee2Id ); + employee2.setCompany( em.find( Company.class, company1Id ) ); + Company company2 = em.find( Company.class, company2Id ); company2.setName( "COMPANY2-CHANGED" ); em.merge( employee2 ); em.merge( company2 ); - em.getTransaction().commit(); + } ); + scope.inTransaction( em -> { // Revision 3 Company company3 = new Company( "COMPANY3" ); Employee employee4 = new Employee( "Employee4", company3 ); - em.getTransaction().begin(); em.persist( company3 ); em.persist( employee4 ); - em.getTransaction().commit(); // cache ids employee4Id = employee4.getId(); company3Id = company3.getId(); - } - finally { - em.close(); - } + } ); } @Test - public void testRevisionCounts() { - // companies - assertEquals( 1, getAuditReader().getRevisions( Company.class, company1Id ).size() ); - assertEquals( 2, getAuditReader().getRevisions( Company.class, company2Id ).size() ); - assertEquals( 1, getAuditReader().getRevisions( Company.class, company3Id ).size() ); - // employees - assertEquals( 1, getAuditReader().getRevisions( Employee.class, employee1Id ).size() ); - assertEquals( 2, getAuditReader().getRevisions( Employee.class, employee2Id ).size() ); - assertEquals( 1, getAuditReader().getRevisions( Employee.class, employee3Id ).size() ); - assertEquals( 1, getAuditReader().getRevisions( Employee.class, employee4Id ).size() ); + public void testRevisionCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + // companies + assertEquals( 1, auditReader.getRevisions( Company.class, company1Id ).size() ); + assertEquals( 2, auditReader.getRevisions( Company.class, company2Id ).size() ); + assertEquals( 1, auditReader.getRevisions( Company.class, company3Id ).size() ); + // employees + assertEquals( 1, auditReader.getRevisions( Employee.class, employee1Id ).size() ); + assertEquals( 2, auditReader.getRevisions( Employee.class, employee2Id ).size() ); + assertEquals( 1, auditReader.getRevisions( Employee.class, employee3Id ).size() ); + assertEquals( 1, auditReader.getRevisions( Employee.class, employee4Id ).size() ); + } ); } @Test - public void testCompany1EmployeeIn() { - AuditQuery auditQuery = getAuditReader().createQuery().forRevisionsOfEntity( Employee.class, true, true ); - auditQuery.add( AuditEntity.relatedId( "company" ).in( new Integer[]{ company1Id } ) ); - final List results = auditQuery.getResultList(); - assertEquals( 2, results.size() ); - final Employee employee1 = makeEmployee( employee1Id, "Employee1", company1Id, "COMPANY1" ); - final Employee employee2 = makeEmployee( employee2Id, "Employee2", company1Id, "COMPANY1" ); - assertThat( results.contains( employee1 ), is(true) ); - assertThat( results.contains( employee2 ), is(true) ); + public void testCompany1EmployeeIn(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + AuditQuery auditQuery = auditReader.createQuery().forRevisionsOfEntity( Employee.class, true, true ); + auditQuery.add( AuditEntity.relatedId( "company" ).in( new Integer[]{ company1Id } ) ); + final List results = auditQuery.getResultList(); + assertEquals( 2, results.size() ); + final Employee employee1 = makeEmployee( employee1Id, "Employee1", company1Id, "COMPANY1" ); + final Employee employee2 = makeEmployee( employee2Id, "Employee2", company1Id, "COMPANY1" ); + assertTrue( results.contains( employee1 ) ); + assertTrue( results.contains( employee2 ) ); + } ); } @Test - public void testCompany2EmployeeIn() { - AuditQuery auditQuery = getAuditReader().createQuery().forRevisionsOfEntity( Employee.class, true, true ); - auditQuery.add( AuditEntity.relatedId( "company" ).in( new Integer[]{ company2Id } ) ); - final List results = auditQuery.getResultList(); - assertEquals( 2, results.size() ); - - final Employee employee1 = makeEmployee( employee2Id, "Employee2", company2Id, "COMPANY2" ); - final Employee employee2 = makeEmployee( employee3Id, "Employee3", company2Id, "COMPANY2" ); - assertThat( results.contains( employee1 ), is(true) ); - assertThat( results.contains( employee2 ), is(true) ); + public void testCompany2EmployeeIn(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + AuditQuery auditQuery = auditReader.createQuery().forRevisionsOfEntity( Employee.class, true, true ); + auditQuery.add( AuditEntity.relatedId( "company" ).in( new Integer[]{ company2Id } ) ); + final List results = auditQuery.getResultList(); + assertEquals( 2, results.size() ); + + final Employee employee1 = makeEmployee( employee2Id, "Employee2", company2Id, "COMPANY2" ); + final Employee employee2 = makeEmployee( employee3Id, "Employee3", company2Id, "COMPANY2" ); + assertTrue( results.contains( employee1 ) ); + assertTrue( results.contains( employee2 ) ); + } ); } @Test - public void testCompany3EmployeeIn() { - AuditQuery auditQuery = getAuditReader().createQuery().forRevisionsOfEntity( Employee.class, true, true ); - auditQuery.add( AuditEntity.relatedId( "company" ).in( new Integer[]{ company3Id } ) ); - final List results = auditQuery.getResultList(); - assertEquals( 1, results.size() ); - final Employee employee = makeEmployee( employee4Id, "Employee4", company3Id, "COMPANY3" ); - assertEquals( results, TestTools.makeList( employee ) ); + public void testCompany3EmployeeIn(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + AuditQuery auditQuery = auditReader.createQuery().forRevisionsOfEntity( Employee.class, true, true ); + auditQuery.add( AuditEntity.relatedId( "company" ).in( new Integer[]{ company3Id } ) ); + final List results = auditQuery.getResultList(); + assertEquals( 1, results.size() ); + final Employee employee = makeEmployee( employee4Id, "Employee4", company3Id, "COMPANY3" ); + assertEquals( TestTools.makeList( employee ), results ); + } ); } private Employee makeEmployee(Integer employeeId, String employeeName, Integer companyId, String companyName) { diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/Bidirectional.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/Bidirectional.java index f716ad9eacf6..d56b5ba46004 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/Bidirectional.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/Bidirectional.java @@ -5,57 +5,53 @@ package org.hibernate.orm.test.envers.integration.onetoone.bidirectional; import java.util.Arrays; -import jakarta.persistence.EntityManager; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; -import org.junit.Test; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNull; /** * @author Adam Warski (adam at warski dot org) */ -public class Bidirectional extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {BiRefEdEntity.class, BiRefIngEntity.class}) +public class Bidirectional { private Integer ed1_id; private Integer ed2_id; private Integer ing1_id; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {BiRefEdEntity.class, BiRefIngEntity.class}; - } - - @Test - @Priority(10) - public void initData() { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { BiRefEdEntity ed1 = new BiRefEdEntity( 1, "data_ed_1" ); BiRefEdEntity ed2 = new BiRefEdEntity( 2, "data_ed_2" ); BiRefIngEntity ing1 = new BiRefIngEntity( 3, "data_ing_1" ); // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - - ing1.setReference( ed1 ); + scope.inTransaction( em -> { + ing1.setReference( ed1 ); - em.persist( ed1 ); - em.persist( ed2 ); + em.persist( ed1 ); + em.persist( ed2 ); - em.persist( ing1 ); - - em.getTransaction().commit(); + em.persist( ing1 ); + } ); // Revision 2 - em.getTransaction().begin(); - - ing1 = em.find( BiRefIngEntity.class, ing1.getId() ); - ed2 = em.find( BiRefEdEntity.class, ed2.getId() ); + scope.inTransaction( em -> { + BiRefIngEntity ing1Ref = em.find( BiRefIngEntity.class, ing1.getId() ); + BiRefEdEntity ed2Ref = em.find( BiRefEdEntity.class, ed2.getId() ); - ing1.setReference( ed2 ); - - em.getTransaction().commit(); + ing1Ref.setReference( ed2Ref ); + } ); // @@ -66,32 +62,41 @@ public void initData() { } @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( BiRefEdEntity.class, ed1_id ) ); - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( BiRefEdEntity.class, ed2_id ) ); - - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( BiRefIngEntity.class, ing1_id ) ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1, 2 ), auditReader.getRevisions( BiRefEdEntity.class, ed1_id ) ); + assertEquals( Arrays.asList( 1, 2 ), auditReader.getRevisions( BiRefEdEntity.class, ed2_id ) ); + + assertEquals( Arrays.asList( 1, 2 ), auditReader.getRevisions( BiRefIngEntity.class, ing1_id ) ); + } ); } @Test - public void testHistoryOfEdId1() { - BiRefIngEntity ing1 = getEntityManager().find( BiRefIngEntity.class, ing1_id ); + public void testHistoryOfEdId1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + BiRefIngEntity ing1 = em.find( BiRefIngEntity.class, ing1_id ); - BiRefEdEntity rev1 = getAuditReader().find( BiRefEdEntity.class, ed1_id, 1 ); - BiRefEdEntity rev2 = getAuditReader().find( BiRefEdEntity.class, ed1_id, 2 ); + BiRefEdEntity rev1 = auditReader.find( BiRefEdEntity.class, ed1_id, 1 ); + BiRefEdEntity rev2 = auditReader.find( BiRefEdEntity.class, ed1_id, 2 ); - assert rev1.getReferencing().equals( ing1 ); - assert rev2.getReferencing() == null; + assertEquals( ing1, rev1.getReferencing() ); + assertNull( rev2.getReferencing() ); + } ); } @Test - public void testHistoryOfEdId2() { - BiRefIngEntity ing1 = getEntityManager().find( BiRefIngEntity.class, ing1_id ); + public void testHistoryOfEdId2(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + BiRefIngEntity ing1 = em.find( BiRefIngEntity.class, ing1_id ); - BiRefEdEntity rev1 = getAuditReader().find( BiRefEdEntity.class, ed2_id, 1 ); - BiRefEdEntity rev2 = getAuditReader().find( BiRefEdEntity.class, ed2_id, 2 ); + BiRefEdEntity rev1 = auditReader.find( BiRefEdEntity.class, ed2_id, 1 ); + BiRefEdEntity rev2 = auditReader.find( BiRefEdEntity.class, ed2_id, 2 ); - assert rev1.getReferencing() == null; - assert rev2.getReferencing().equals( ing1 ); + assertNull( rev1.getReferencing() ); + assertEquals( ing1, rev2.getReferencing() ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/Bidirectional2.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/Bidirectional2.java index 4b4eb6b55792..6246311fac8e 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/Bidirectional2.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/Bidirectional2.java @@ -5,31 +5,32 @@ package org.hibernate.orm.test.envers.integration.onetoone.bidirectional; import java.util.Arrays; -import jakarta.persistence.EntityManager; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; -import org.junit.Test; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNull; /** * @author Adam Warski (adam at warski dot org) */ -public class Bidirectional2 extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {BiRefEdEntity.class, BiRefIngEntity.class}) +public class Bidirectional2 { private Integer ed1_id; private Integer ed2_id; private Integer ing1_id; private Integer ing2_id; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {BiRefEdEntity.class, BiRefIngEntity.class}; - } - - @Test - @Priority(10) - public void initData() { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { BiRefEdEntity ed1 = new BiRefEdEntity( 1, "data_ed_1" ); BiRefEdEntity ed2 = new BiRefEdEntity( 2, "data_ed_2" ); @@ -37,49 +38,40 @@ public void initData() { BiRefIngEntity ing2 = new BiRefIngEntity( 4, "data_ing_2" ); // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - - em.persist( ed1 ); - em.persist( ed2 ); - - em.getTransaction().commit(); + scope.inTransaction( em -> { + em.persist( ed1 ); + em.persist( ed2 ); + } ); // Revision 2 - em.getTransaction().begin(); - - ed1 = em.find( BiRefEdEntity.class, ed1.getId() ); + scope.inTransaction( em -> { + BiRefEdEntity ed1Ref = em.find( BiRefEdEntity.class, ed1.getId() ); - ing1.setReference( ed1 ); + ing1.setReference( ed1Ref ); - em.persist( ing1 ); - em.persist( ing2 ); - - em.getTransaction().commit(); + em.persist( ing1 ); + em.persist( ing2 ); + } ); // Revision 3 - em.getTransaction().begin(); - - ed1 = em.find( BiRefEdEntity.class, ed1.getId() ); - ing1 = em.find( BiRefIngEntity.class, ing1.getId() ); - ing2 = em.find( BiRefIngEntity.class, ing2.getId() ); - - ing1.setReference( null ); - ing2.setReference( ed1 ); + scope.inTransaction( em -> { + BiRefEdEntity ed1Ref = em.find( BiRefEdEntity.class, ed1.getId() ); + BiRefIngEntity ing1Ref = em.find( BiRefIngEntity.class, ing1.getId() ); + BiRefIngEntity ing2Ref = em.find( BiRefIngEntity.class, ing2.getId() ); - em.getTransaction().commit(); + ing1Ref.setReference( null ); + ing2Ref.setReference( ed1Ref ); + } ); // Revision 4 - em.getTransaction().begin(); + scope.inTransaction( em -> { + BiRefEdEntity ed2Ref = em.find( BiRefEdEntity.class, ed2.getId() ); + BiRefIngEntity ing1Ref = em.find( BiRefIngEntity.class, ing1.getId() ); + BiRefIngEntity ing2Ref = em.find( BiRefIngEntity.class, ing2.getId() ); - ed2 = em.find( BiRefEdEntity.class, ed2.getId() ); - ing1 = em.find( BiRefIngEntity.class, ing1.getId() ); - ing2 = em.find( BiRefIngEntity.class, ing2.getId() ); - - ing1.setReference( ed2 ); - ing2.setReference( null ); - - em.getTransaction().commit(); + ing1Ref.setReference( ed2Ref ); + ing2Ref.setReference( null ); + } ); // @@ -91,42 +83,51 @@ public void initData() { } @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2, 3, 4 ).equals( getAuditReader().getRevisions( BiRefEdEntity.class, ed1_id ) ); - assert Arrays.asList( 1, 4 ).equals( getAuditReader().getRevisions( BiRefEdEntity.class, ed2_id ) ); - - assert Arrays.asList( 2, 3, 4 ).equals( getAuditReader().getRevisions( BiRefIngEntity.class, ing1_id ) ); - assert Arrays.asList( 2, 3, 4 ).equals( getAuditReader().getRevisions( BiRefIngEntity.class, ing2_id ) ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1, 2, 3, 4 ), auditReader.getRevisions( BiRefEdEntity.class, ed1_id ) ); + assertEquals( Arrays.asList( 1, 4 ), auditReader.getRevisions( BiRefEdEntity.class, ed2_id ) ); + + assertEquals( Arrays.asList( 2, 3, 4 ), auditReader.getRevisions( BiRefIngEntity.class, ing1_id ) ); + assertEquals( Arrays.asList( 2, 3, 4 ), auditReader.getRevisions( BiRefIngEntity.class, ing2_id ) ); + } ); } @Test - public void testHistoryOfEdId1() { - BiRefIngEntity ing1 = getEntityManager().find( BiRefIngEntity.class, ing1_id ); - BiRefIngEntity ing2 = getEntityManager().find( BiRefIngEntity.class, ing2_id ); - - BiRefEdEntity rev1 = getAuditReader().find( BiRefEdEntity.class, ed1_id, 1 ); - BiRefEdEntity rev2 = getAuditReader().find( BiRefEdEntity.class, ed1_id, 2 ); - BiRefEdEntity rev3 = getAuditReader().find( BiRefEdEntity.class, ed1_id, 3 ); - BiRefEdEntity rev4 = getAuditReader().find( BiRefEdEntity.class, ed1_id, 4 ); - - assert rev1.getReferencing() == null; - assert rev2.getReferencing().equals( ing1 ); - assert rev3.getReferencing().equals( ing2 ); - assert rev4.getReferencing() == null; + public void testHistoryOfEdId1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + BiRefIngEntity ing1 = em.find( BiRefIngEntity.class, ing1_id ); + BiRefIngEntity ing2 = em.find( BiRefIngEntity.class, ing2_id ); + + BiRefEdEntity rev1 = auditReader.find( BiRefEdEntity.class, ed1_id, 1 ); + BiRefEdEntity rev2 = auditReader.find( BiRefEdEntity.class, ed1_id, 2 ); + BiRefEdEntity rev3 = auditReader.find( BiRefEdEntity.class, ed1_id, 3 ); + BiRefEdEntity rev4 = auditReader.find( BiRefEdEntity.class, ed1_id, 4 ); + + assertNull( rev1.getReferencing() ); + assertEquals( ing1, rev2.getReferencing() ); + assertEquals( ing2, rev3.getReferencing() ); + assertNull( rev4.getReferencing() ); + } ); } @Test - public void testHistoryOfEdId2() { - BiRefIngEntity ing1 = getEntityManager().find( BiRefIngEntity.class, ing1_id ); - - BiRefEdEntity rev1 = getAuditReader().find( BiRefEdEntity.class, ed2_id, 1 ); - BiRefEdEntity rev2 = getAuditReader().find( BiRefEdEntity.class, ed2_id, 2 ); - BiRefEdEntity rev3 = getAuditReader().find( BiRefEdEntity.class, ed2_id, 3 ); - BiRefEdEntity rev4 = getAuditReader().find( BiRefEdEntity.class, ed2_id, 4 ); - - assert rev1.getReferencing() == null; - assert rev2.getReferencing() == null; - assert rev3.getReferencing() == null; - assert rev4.getReferencing().equals( ing1 ); + public void testHistoryOfEdId2(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + BiRefIngEntity ing1 = em.find( BiRefIngEntity.class, ing1_id ); + + BiRefEdEntity rev1 = auditReader.find( BiRefEdEntity.class, ed2_id, 1 ); + BiRefEdEntity rev2 = auditReader.find( BiRefEdEntity.class, ed2_id, 2 ); + BiRefEdEntity rev3 = auditReader.find( BiRefEdEntity.class, ed2_id, 3 ); + BiRefEdEntity rev4 = auditReader.find( BiRefEdEntity.class, ed2_id, 4 ); + + assertNull( rev1.getReferencing() ); + assertNull( rev2.getReferencing() ); + assertNull( rev3.getReferencing() ); + assertEquals( ing1, rev4.getReferencing() ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/BidirectionalEagerAnnotationTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/BidirectionalEagerAnnotationTest.java index fe9fa84e0e0b..89760504c0df 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/BidirectionalEagerAnnotationTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/BidirectionalEagerAnnotationTest.java @@ -4,59 +4,54 @@ */ package org.hibernate.orm.test.envers.integration.onetoone.bidirectional; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.orm.test.envers.entities.onetoone.BidirectionalEagerAnnotationRefEdOneToOne; import org.hibernate.orm.test.envers.entities.onetoone.BidirectionalEagerAnnotationRefIngOneToOne; - +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; +import org.hibernate.testing.orm.junit.Jpa; + +import org.junit.jupiter.api.Test; -import static org.junit.Assert.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertNotNull; /** * @author Erik-Berndt Scheper */ @JiraKey(value = "HHH-3854") -public class BidirectionalEagerAnnotationTest extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = { + BidirectionalEagerAnnotationRefEdOneToOne.class, + BidirectionalEagerAnnotationRefIngOneToOne.class +}) +public class BidirectionalEagerAnnotationTest { private Integer refIngId1 = null; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { - BidirectionalEagerAnnotationRefEdOneToOne.class, - BidirectionalEagerAnnotationRefIngOneToOne.class - }; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Revision 1 - em.getTransaction().begin(); - BidirectionalEagerAnnotationRefEdOneToOne ed1 = new BidirectionalEagerAnnotationRefEdOneToOne(); - BidirectionalEagerAnnotationRefIngOneToOne ing1 = new BidirectionalEagerAnnotationRefIngOneToOne(); - ed1.setData( "referredEntity1" ); - ed1.setRefIng( ing1 ); - ing1.setData( "referringEntity" ); - ing1.setRefedOne( ed1 ); - em.persist( ed1 ); - em.persist( ing1 ); - em.getTransaction().commit(); - - refIngId1 = ing1.getId(); - - em.close(); + scope.inTransaction( em -> { + BidirectionalEagerAnnotationRefEdOneToOne ed1 = new BidirectionalEagerAnnotationRefEdOneToOne(); + BidirectionalEagerAnnotationRefIngOneToOne ing1 = new BidirectionalEagerAnnotationRefIngOneToOne(); + ed1.setData( "referredEntity1" ); + ed1.setRefIng( ing1 ); + ing1.setData( "referringEntity" ); + ing1.setRefedOne( ed1 ); + em.persist( ed1 ); + em.persist( ing1 ); + + refIngId1 = ing1.getId(); + } ); } @Test - public void testNonProxyObjectTraversing() { - BidirectionalEagerAnnotationRefIngOneToOne referencing = - getAuditReader().find( BidirectionalEagerAnnotationRefIngOneToOne.class, refIngId1, 1 ); - assertNotNull( referencing.getRefedOne().getData() ); + public void testNonProxyObjectTraversing(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + BidirectionalEagerAnnotationRefIngOneToOne referencing = auditReader.find( BidirectionalEagerAnnotationRefIngOneToOne.class, refIngId1, 1 ); + assertNotNull( referencing.getRefedOne().getData() ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/BidirectionalEagerHbmTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/BidirectionalEagerHbmTest.java index bf5d69dca343..7d33cc5e24e8 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/BidirectionalEagerHbmTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/BidirectionalEagerHbmTest.java @@ -4,53 +4,49 @@ */ package org.hibernate.orm.test.envers.integration.onetoone.bidirectional; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.orm.test.envers.entities.onetoone.BidirectionalEagerHbmRefEdPK; import org.hibernate.orm.test.envers.entities.onetoone.BidirectionalEagerHbmRefIngPK; - +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; +import org.hibernate.testing.orm.junit.Jpa; + +import org.junit.jupiter.api.Test; -import static org.junit.Assert.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertNotNull; /** * @author Erik-Berndt Scheper, Amar Singh */ @JiraKey(value = "HHH-3854") -public class BidirectionalEagerHbmTest extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(xmlMappings = "mappings/oneToOne/bidirectional/eagerLoading.hbm.xml") +public class BidirectionalEagerHbmTest { private Long refIngId1 = null; - @Override - protected String[] getMappings() { - return new String[] {"mappings/oneToOne/bidirectional/eagerLoading.hbm.xml"}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Revision 1 - em.getTransaction().begin(); - BidirectionalEagerHbmRefEdPK ed1 = new BidirectionalEagerHbmRefEdPK( "data_ed_1" ); - BidirectionalEagerHbmRefIngPK ing1 = new BidirectionalEagerHbmRefIngPK( "data_ing_1" ); - ing1.setReference( ed1 ); - em.persist( ed1 ); - em.persist( ing1 ); - em.getTransaction().commit(); - - refIngId1 = ing1.getId(); - - em.close(); + scope.inTransaction( em -> { + BidirectionalEagerHbmRefEdPK ed1 = new BidirectionalEagerHbmRefEdPK( "data_ed_1" ); + BidirectionalEagerHbmRefIngPK ing1 = new BidirectionalEagerHbmRefIngPK( "data_ing_1" ); + ing1.setReference( ed1 ); + em.persist( ed1 ); + em.persist( ing1 ); + + refIngId1 = ing1.getId(); + } ); } @Test - public void testNonProxyObjectTraversing() { - BidirectionalEagerHbmRefIngPK referencing = - getAuditReader().find( BidirectionalEagerHbmRefIngPK.class, refIngId1, 1 ); - assertNotNull( referencing.getReference().getData() ); + public void testNonProxyObjectTraversing(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + BidirectionalEagerHbmRefIngPK referencing = + auditReader.find( BidirectionalEagerHbmRefIngPK.class, refIngId1, 1 ); + assertNotNull( referencing.getReference().getData() ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/BidirectionalNoNulls.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/BidirectionalNoNulls.java index 9dae132bdcf5..409a3459763d 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/BidirectionalNoNulls.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/BidirectionalNoNulls.java @@ -5,31 +5,31 @@ package org.hibernate.orm.test.envers.integration.onetoone.bidirectional; import java.util.Arrays; -import jakarta.persistence.EntityManager; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; -import org.junit.Test; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Adam Warski (adam at warski dot org) */ -public class BidirectionalNoNulls extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {BiRefEdEntity.class, BiRefIngEntity.class}) +public class BidirectionalNoNulls { private Integer ed1_id; private Integer ed2_id; private Integer ing1_id; private Integer ing2_id; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {BiRefEdEntity.class, BiRefIngEntity.class}; - } - - @Test - @Priority(10) - public void initData() { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { BiRefEdEntity ed1 = new BiRefEdEntity( 1, "data_ed_1" ); BiRefEdEntity ed2 = new BiRefEdEntity( 2, "data_ed_2" ); @@ -37,34 +37,28 @@ public void initData() { BiRefIngEntity ing2 = new BiRefIngEntity( 4, "data_ing_2" ); // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); + scope.inTransaction( em -> { + ing1.setReference( ed1 ); + ing2.setReference( ed2 ); - ing1.setReference( ed1 ); - ing2.setReference( ed2 ); + em.persist( ed1 ); + em.persist( ed2 ); - em.persist( ed1 ); - em.persist( ed2 ); - - em.persist( ing1 ); - em.persist( ing2 ); - - em.getTransaction().commit(); + em.persist( ing1 ); + em.persist( ing2 ); + } ); // Revision 2 - em = getEntityManager(); - em.getTransaction().begin(); - - ing1 = em.find( BiRefIngEntity.class, ing1.getId() ); - ing2 = em.find( BiRefIngEntity.class, ing2.getId() ); + scope.inTransaction( em -> { + BiRefIngEntity ing1Ref = em.find( BiRefIngEntity.class, ing1.getId() ); + BiRefIngEntity ing2Ref = em.find( BiRefIngEntity.class, ing2.getId() ); - ed1 = em.find( BiRefEdEntity.class, ed1.getId() ); - ed2 = em.find( BiRefEdEntity.class, ed2.getId() ); + BiRefEdEntity ed1Ref = em.find( BiRefEdEntity.class, ed1.getId() ); + BiRefEdEntity ed2Ref = em.find( BiRefEdEntity.class, ed2.getId() ); - ing1.setReference( ed2 ); - ing2.setReference( ed1 ); - - em.getTransaction().commit(); + ing1Ref.setReference( ed2Ref ); + ing2Ref.setReference( ed1Ref ); + } ); // @@ -76,35 +70,44 @@ public void initData() { } @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( BiRefEdEntity.class, ed1_id ) ); - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( BiRefEdEntity.class, ed2_id ) ); - - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( BiRefIngEntity.class, ing1_id ) ); - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( BiRefIngEntity.class, ing2_id ) ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1, 2 ), auditReader.getRevisions( BiRefEdEntity.class, ed1_id ) ); + assertEquals( Arrays.asList( 1, 2 ), auditReader.getRevisions( BiRefEdEntity.class, ed2_id ) ); + + assertEquals( Arrays.asList( 1, 2 ), auditReader.getRevisions( BiRefIngEntity.class, ing1_id ) ); + assertEquals( Arrays.asList( 1, 2 ), auditReader.getRevisions( BiRefIngEntity.class, ing2_id ) ); + } ); } @Test - public void testHistoryOfEdId1() { - BiRefIngEntity ing1 = getEntityManager().find( BiRefIngEntity.class, ing1_id ); - BiRefIngEntity ing2 = getEntityManager().find( BiRefIngEntity.class, ing2_id ); - - BiRefEdEntity rev1 = getAuditReader().find( BiRefEdEntity.class, ed1_id, 1 ); - BiRefEdEntity rev2 = getAuditReader().find( BiRefEdEntity.class, ed1_id, 2 ); - - assert rev1.getReferencing().equals( ing1 ); - assert rev2.getReferencing().equals( ing2 ); + public void testHistoryOfEdId1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + BiRefIngEntity ing1 = em.find( BiRefIngEntity.class, ing1_id ); + BiRefIngEntity ing2 = em.find( BiRefIngEntity.class, ing2_id ); + + BiRefEdEntity rev1 = auditReader.find( BiRefEdEntity.class, ed1_id, 1 ); + BiRefEdEntity rev2 = auditReader.find( BiRefEdEntity.class, ed1_id, 2 ); + + assertEquals( ing1, rev1.getReferencing() ); + assertEquals( ing2, rev2.getReferencing() ); + } ); } @Test - public void testHistoryOfEdId2() { - BiRefIngEntity ing1 = getEntityManager().find( BiRefIngEntity.class, ing1_id ); - BiRefIngEntity ing2 = getEntityManager().find( BiRefIngEntity.class, ing2_id ); - - BiRefEdEntity rev1 = getAuditReader().find( BiRefEdEntity.class, ed2_id, 1 ); - BiRefEdEntity rev2 = getAuditReader().find( BiRefEdEntity.class, ed2_id, 2 ); - - assert rev1.getReferencing().equals( ing2 ); - assert rev2.getReferencing().equals( ing1 ); + public void testHistoryOfEdId2(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + BiRefIngEntity ing1 = em.find( BiRefIngEntity.class, ing1_id ); + BiRefIngEntity ing2 = em.find( BiRefIngEntity.class, ing2_id ); + + BiRefEdEntity rev1 = auditReader.find( BiRefEdEntity.class, ed2_id, 1 ); + BiRefEdEntity rev2 = auditReader.find( BiRefEdEntity.class, ed2_id, 2 ); + + assertEquals( ing2, rev1.getReferencing() ); + assertEquals( ing1, rev2.getReferencing() ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/BidirectionalOneToOneOptionalTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/BidirectionalOneToOneOptionalTest.java new file mode 100644 index 000000000000..4d466f87410b --- /dev/null +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/BidirectionalOneToOneOptionalTest.java @@ -0,0 +1,84 @@ +/* + * SPDX-License-Identifier: Apache-2.0 + * Copyright Red Hat Inc. and Hibernate Authors + */ +package org.hibernate.orm.test.envers.integration.onetoone.bidirectional; + +import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.JiraKey; +import org.hibernate.testing.orm.junit.Jpa; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertNull; + +/** + * @author Chris Cranford + */ +@JiraKey(value = "HHH-8305") +@EnversTest +@Jpa(annotatedClasses = { + BiRefingOptionalEntity.class, + BiRefedOptionalEntity.class +}) +public class BidirectionalOneToOneOptionalTest { + private Integer refingWithNoRefedId; + private Integer refingId; + private Integer refedId; + + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + // Revision 1 + scope.inTransaction( em -> { + // store refing with null refed entity + BiRefingOptionalEntity refingWithNoRefed = new BiRefingOptionalEntity(); + refingWithNoRefed.setReference( null ); + em.persist( refingWithNoRefed ); + + // store refing with non-null refed entity + BiRefingOptionalEntity refing = new BiRefingOptionalEntity(); + BiRefedOptionalEntity refed = new BiRefedOptionalEntity(); + refed.setReferencing( refing ); + refing.setReference( refed ); + em.persist( refing ); + em.persist( refed ); + + this.refingId = refing.getId(); + this.refedId = refed.getId(); + this.refingWithNoRefedId = refingWithNoRefed.getId(); + } ); + } + + @Test + public void testRevisionCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( 1, auditReader.getRevisions( BiRefingOptionalEntity.class, refingId ).size() ); + assertEquals( 1, auditReader.getRevisions( BiRefingOptionalEntity.class, refingWithNoRefedId ).size() ); + assertEquals( 1, auditReader.getRevisions( BiRefedOptionalEntity.class, refedId ).size() ); + } ); + } + + @Test + public void testRevisionHistoryNullReference(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + BiRefingOptionalEntity rev1 = auditReader.find( BiRefingOptionalEntity.class, refingWithNoRefedId, 1 ); + assertNull( rev1.getReference() ); + } ); + } + + @Test + public void testRevisionHistoryWithNonNullReference(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertNotNull( auditReader.find( BiRefingOptionalEntity.class, refingId, 1).getReference() ); + assertNotNull( auditReader.find( BiRefedOptionalEntity.class, refedId, 1 ).getReferencing() ); + } ); + } +} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/ids/BiEmbIdRefEdEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/ids/BiEmbIdRefEdEntity.java index 7ac57201ab54..0dd47cd2125d 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/ids/BiEmbIdRefEdEntity.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/ids/BiEmbIdRefEdEntity.java @@ -74,10 +74,10 @@ public boolean equals(Object o) { BiEmbIdRefEdEntity that = (BiEmbIdRefEdEntity) o; - if ( data != null ? !data.equals( that.data ) : that.data != null ) { + if ( data != null ? !data.equals( that.getData() ) : that.getData() != null ) { return false; } - if ( id != null ? !id.equals( that.id ) : that.id != null ) { + if ( id != null ? !id.equals( that.getId() ) : that.getId() != null ) { return false; } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/ids/BiEmbIdRefIngEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/ids/BiEmbIdRefIngEntity.java index 7b055f3f25a7..be225e7ad650 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/ids/BiEmbIdRefIngEntity.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/ids/BiEmbIdRefIngEntity.java @@ -11,6 +11,7 @@ import org.hibernate.envers.Audited; import org.hibernate.orm.test.envers.entities.ids.EmbId; + /** * @author Adam Warski (adam at warski dot org) */ @@ -74,10 +75,10 @@ public boolean equals(Object o) { BiEmbIdRefIngEntity that = (BiEmbIdRefIngEntity) o; - if ( data != null ? !data.equals( that.data ) : that.data != null ) { + if ( data != null ? !data.equals( that.getData() ) : that.getData() != null ) { return false; } - if ( id != null ? !id.equals( that.id ) : that.id != null ) { + if ( id != null ? !id.equals( that.getId() ) : that.getId() != null ) { return false; } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/ids/BiMulIdRefEdEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/ids/BiMulIdRefEdEntity.java index a8bda57e660e..6dc573be4c01 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/ids/BiMulIdRefEdEntity.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/ids/BiMulIdRefEdEntity.java @@ -82,13 +82,13 @@ public boolean equals(Object o) { BiMulIdRefEdEntity that = (BiMulIdRefEdEntity) o; - if ( data != null ? !data.equals( that.data ) : that.data != null ) { + if ( data != null ? !data.equals( that.getData() ) : that.getData() != null ) { return false; } - if ( id1 != null ? !id1.equals( that.id1 ) : that.id1 != null ) { + if ( id1 != null ? !id1.equals( that.getId1() ) : that.getId1() != null ) { return false; } - if ( id2 != null ? !id2.equals( that.id2 ) : that.id2 != null ) { + if ( id2 != null ? !id2.equals( that.getId2() ) : that.getId2() != null ) { return false; } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/ids/BiMulIdRefIngEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/ids/BiMulIdRefIngEntity.java index 567b790d450c..0f71b1cc4a96 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/ids/BiMulIdRefIngEntity.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/ids/BiMulIdRefIngEntity.java @@ -82,13 +82,13 @@ public boolean equals(Object o) { BiMulIdRefIngEntity that = (BiMulIdRefIngEntity) o; - if ( data != null ? !data.equals( that.data ) : that.data != null ) { + if ( data != null ? !data.equals( that.getData() ) : that.getData() != null ) { return false; } - if ( id1 != null ? !id1.equals( that.id1 ) : that.id1 != null ) { + if ( id1 != null ? !id1.equals( that.getId1() ) : that.getId1() != null ) { return false; } - if ( id2 != null ? !id2.equals( that.id2 ) : that.id2 != null ) { + if ( id2 != null ? !id2.equals( that.getId2() ) : that.getId2() != null ) { return false; } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/ids/EmbIdBidirectional.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/ids/EmbIdBidirectional.java index 1cdf55ec2ebc..db272b4950cf 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/ids/EmbIdBidirectional.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/ids/EmbIdBidirectional.java @@ -5,104 +5,105 @@ package org.hibernate.orm.test.envers.integration.onetoone.bidirectional.ids; import java.util.Arrays; -import jakarta.persistence.EntityManager; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.orm.test.envers.entities.ids.EmbId; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; -import org.junit.Test; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNull; /** * @author Adam Warski (adam at warski dot org) */ -public class EmbIdBidirectional extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {BiEmbIdRefEdEntity.class, BiEmbIdRefIngEntity.class}) +public class EmbIdBidirectional { private EmbId ed1_id; private EmbId ed2_id; - private EmbId ing1_id; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {BiEmbIdRefEdEntity.class, BiEmbIdRefIngEntity.class}; - } - - @Test - @Priority(10) - public void initData() { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { ed1_id = new EmbId( 1, 2 ); ed2_id = new EmbId( 3, 4 ); - ing1_id = new EmbId( 5, 6 ); BiEmbIdRefEdEntity ed1 = new BiEmbIdRefEdEntity( ed1_id, "data_ed_1" ); BiEmbIdRefEdEntity ed2 = new BiEmbIdRefEdEntity( ed2_id, "data_ed_2" ); - BiEmbIdRefIngEntity ing1 = new BiEmbIdRefIngEntity( ing1_id, "data_ing_1" ); // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - - ing1.setReference( ed1 ); - - em.persist( ed1 ); - em.persist( ed2 ); - - em.persist( ing1 ); - - em.getTransaction().commit(); + scope.inTransaction( em -> { + ing1.setReference( ed1 ); + em.persist( ed1 ); + em.persist( ed2 ); + em.persist( ing1 ); + } ); // Revision 2 - em.getTransaction().begin(); - - ing1 = em.find( BiEmbIdRefIngEntity.class, ing1.getId() ); - ed2 = em.find( BiEmbIdRefEdEntity.class, ed2.getId() ); - - ing1.setReference( ed2 ); - - em.getTransaction().commit(); + scope.inTransaction( em -> { + BiEmbIdRefIngEntity ing = em.find( BiEmbIdRefIngEntity.class, ing1_id ); + BiEmbIdRefEdEntity ed = em.find( BiEmbIdRefEdEntity.class, ed2_id ); + ing.setReference( ed ); + } ); } @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( BiEmbIdRefEdEntity.class, ed1_id ) ); - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( BiEmbIdRefEdEntity.class, ed2_id ) ); - - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( BiEmbIdRefIngEntity.class, ing1_id ) ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1, 2 ), auditReader.getRevisions( BiEmbIdRefEdEntity.class, ed1_id ) ); + assertEquals( Arrays.asList( 1, 2 ), auditReader.getRevisions( BiEmbIdRefEdEntity.class, ed2_id ) ); + assertEquals( Arrays.asList( 1, 2 ), auditReader.getRevisions( BiEmbIdRefIngEntity.class, ing1_id ) ); + } ); } @Test - public void testHistoryOfEdId1() { - BiEmbIdRefIngEntity ing1 = getEntityManager().find( BiEmbIdRefIngEntity.class, ing1_id ); + public void testHistoryOfEdId1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + var auditReader = AuditReaderFactory.get( em ); + BiEmbIdRefIngEntity ing1 = em.find( BiEmbIdRefIngEntity.class, ing1_id ); - BiEmbIdRefEdEntity rev1 = getAuditReader().find( BiEmbIdRefEdEntity.class, ed1_id, 1 ); - BiEmbIdRefEdEntity rev2 = getAuditReader().find( BiEmbIdRefEdEntity.class, ed1_id, 2 ); + BiEmbIdRefEdEntity rev1 = auditReader.find( BiEmbIdRefEdEntity.class, ed1_id, 1 ); + BiEmbIdRefEdEntity rev2 = auditReader.find( BiEmbIdRefEdEntity.class, ed1_id, 2 ); - assert rev1.getReferencing().equals( ing1 ); - assert rev2.getReferencing() == null; + assertEquals( ing1, rev1.getReferencing() ); + assertNull( rev2.getReferencing() ); + } ); } @Test - public void testHistoryOfEdId2() { - BiEmbIdRefIngEntity ing1 = getEntityManager().find( BiEmbIdRefIngEntity.class, ing1_id ); + public void testHistoryOfEdId2(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + var auditReader = AuditReaderFactory.get( em ); + BiEmbIdRefIngEntity ing1 = em.find( BiEmbIdRefIngEntity.class, ing1_id ); - BiEmbIdRefEdEntity rev1 = getAuditReader().find( BiEmbIdRefEdEntity.class, ed2_id, 1 ); - BiEmbIdRefEdEntity rev2 = getAuditReader().find( BiEmbIdRefEdEntity.class, ed2_id, 2 ); + BiEmbIdRefEdEntity rev1 = auditReader.find( BiEmbIdRefEdEntity.class, ed2_id, 1 ); + BiEmbIdRefEdEntity rev2 = auditReader.find( BiEmbIdRefEdEntity.class, ed2_id, 2 ); - assert rev1.getReferencing() == null; - assert rev2.getReferencing().equals( ing1 ); + assertNull( rev1.getReferencing() ); + assertEquals( ing1, rev2.getReferencing() ); + } ); } @Test - public void testHistoryOfIngId1() { - BiEmbIdRefEdEntity ed1 = getEntityManager().find( BiEmbIdRefEdEntity.class, ed1_id ); - BiEmbIdRefEdEntity ed2 = getEntityManager().find( BiEmbIdRefEdEntity.class, ed2_id ); - - BiEmbIdRefIngEntity rev1 = getAuditReader().find( BiEmbIdRefIngEntity.class, ing1_id, 1 ); - BiEmbIdRefIngEntity rev2 = getAuditReader().find( BiEmbIdRefIngEntity.class, ing1_id, 2 ); - - assert rev1.getReference().equals( ed1 ); - assert rev2.getReference().equals( ed2 ); + public void testHistoryOfIngId1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + var auditReader = AuditReaderFactory.get( em ); + BiEmbIdRefEdEntity ed1 = em.find( BiEmbIdRefEdEntity.class, ed1_id ); + BiEmbIdRefEdEntity ed2 = em.find( BiEmbIdRefEdEntity.class, ed2_id ); + + BiEmbIdRefIngEntity rev1 = auditReader.find( BiEmbIdRefIngEntity.class, ing1_id, 1 ); + BiEmbIdRefIngEntity rev2 = auditReader.find( BiEmbIdRefIngEntity.class, ing1_id, 2 ); + + assertEquals( ed1, rev1.getReference() ); + assertEquals( ed2, rev2.getReference() ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/ids/MulIdBidirectional.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/ids/MulIdBidirectional.java index 6676fc549c11..cc86b857f253 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/ids/MulIdBidirectional.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/ids/MulIdBidirectional.java @@ -5,104 +5,105 @@ package org.hibernate.orm.test.envers.integration.onetoone.bidirectional.ids; import java.util.Arrays; -import jakarta.persistence.EntityManager; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.orm.test.envers.entities.ids.MulId; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; -import org.junit.Test; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNull; /** * @author Adam Warski (adam at warski dot org) */ -public class MulIdBidirectional extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {BiMulIdRefEdEntity.class, BiMulIdRefIngEntity.class}) +public class MulIdBidirectional { private MulId ed1_id; private MulId ed2_id; - private MulId ing1_id; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {BiMulIdRefEdEntity.class, BiMulIdRefIngEntity.class}; - } - - @Test - @Priority(10) - public void initData() { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { ed1_id = new MulId( 1, 2 ); ed2_id = new MulId( 3, 4 ); - ing1_id = new MulId( 5, 6 ); BiMulIdRefEdEntity ed1 = new BiMulIdRefEdEntity( ed1_id.getId1(), ed1_id.getId2(), "data_ed_1" ); BiMulIdRefEdEntity ed2 = new BiMulIdRefEdEntity( ed2_id.getId1(), ed2_id.getId2(), "data_ed_2" ); - BiMulIdRefIngEntity ing1 = new BiMulIdRefIngEntity( ing1_id.getId1(), ing1_id.getId2(), "data_ing_1" ); // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - - ing1.setReference( ed1 ); - - em.persist( ed1 ); - em.persist( ed2 ); - - em.persist( ing1 ); - - em.getTransaction().commit(); + scope.inTransaction( em -> { + ing1.setReference( ed1 ); + em.persist( ed1 ); + em.persist( ed2 ); + em.persist( ing1 ); + } ); // Revision 2 - em.getTransaction().begin(); - - ing1 = em.find( BiMulIdRefIngEntity.class, ing1_id ); - ed2 = em.find( BiMulIdRefEdEntity.class, ed2_id ); - - ing1.setReference( ed2 ); - - em.getTransaction().commit(); + scope.inTransaction( em -> { + BiMulIdRefIngEntity ing = em.find( BiMulIdRefIngEntity.class, ing1_id ); + BiMulIdRefEdEntity ed = em.find( BiMulIdRefEdEntity.class, ed2_id ); + ing.setReference( ed ); + } ); } @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( BiMulIdRefEdEntity.class, ed1_id ) ); - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( BiMulIdRefEdEntity.class, ed2_id ) ); - - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( BiMulIdRefIngEntity.class, ing1_id ) ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1, 2 ), auditReader.getRevisions( BiMulIdRefEdEntity.class, ed1_id ) ); + assertEquals( Arrays.asList( 1, 2 ), auditReader.getRevisions( BiMulIdRefEdEntity.class, ed2_id ) ); + assertEquals( Arrays.asList( 1, 2 ), auditReader.getRevisions( BiMulIdRefIngEntity.class, ing1_id ) ); + } ); } @Test - public void testHistoryOfEdId1() { - BiMulIdRefIngEntity ing1 = getEntityManager().find( BiMulIdRefIngEntity.class, ing1_id ); + public void testHistoryOfEdId1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + var auditReader = AuditReaderFactory.get( em ); + BiMulIdRefIngEntity ing1 = em.find( BiMulIdRefIngEntity.class, ing1_id ); - BiMulIdRefEdEntity rev1 = getAuditReader().find( BiMulIdRefEdEntity.class, ed1_id, 1 ); - BiMulIdRefEdEntity rev2 = getAuditReader().find( BiMulIdRefEdEntity.class, ed1_id, 2 ); + BiMulIdRefEdEntity rev1 = auditReader.find( BiMulIdRefEdEntity.class, ed1_id, 1 ); + BiMulIdRefEdEntity rev2 = auditReader.find( BiMulIdRefEdEntity.class, ed1_id, 2 ); - assert rev1.getReferencing().equals( ing1 ); - assert rev2.getReferencing() == null; + assertEquals( ing1, rev1.getReferencing() ); + assertNull( rev2.getReferencing() ); + } ); } @Test - public void testHistoryOfEdId2() { - BiMulIdRefIngEntity ing1 = getEntityManager().find( BiMulIdRefIngEntity.class, ing1_id ); + public void testHistoryOfEdId2(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + var auditReader = AuditReaderFactory.get( em ); + BiMulIdRefIngEntity ing1 = em.find( BiMulIdRefIngEntity.class, ing1_id ); - BiMulIdRefEdEntity rev1 = getAuditReader().find( BiMulIdRefEdEntity.class, ed2_id, 1 ); - BiMulIdRefEdEntity rev2 = getAuditReader().find( BiMulIdRefEdEntity.class, ed2_id, 2 ); + BiMulIdRefEdEntity rev1 = auditReader.find( BiMulIdRefEdEntity.class, ed2_id, 1 ); + BiMulIdRefEdEntity rev2 = auditReader.find( BiMulIdRefEdEntity.class, ed2_id, 2 ); - assert rev1.getReferencing() == null; - assert rev2.getReferencing().equals( ing1 ); + assertNull( rev1.getReferencing() ); + assertEquals( ing1, rev2.getReferencing() ); + } ); } @Test - public void testHistoryOfIngId1() { - BiMulIdRefEdEntity ed1 = getEntityManager().find( BiMulIdRefEdEntity.class, ed1_id ); - BiMulIdRefEdEntity ed2 = getEntityManager().find( BiMulIdRefEdEntity.class, ed2_id ); - - BiMulIdRefIngEntity rev1 = getAuditReader().find( BiMulIdRefIngEntity.class, ing1_id, 1 ); - BiMulIdRefIngEntity rev2 = getAuditReader().find( BiMulIdRefIngEntity.class, ing1_id, 2 ); - - assert rev1.getReference().equals( ed1 ); - assert rev2.getReference().equals( ed2 ); + public void testHistoryOfIngId1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + var auditReader = AuditReaderFactory.get( em ); + BiMulIdRefEdEntity ed1 = em.find( BiMulIdRefEdEntity.class, ed1_id ); + BiMulIdRefEdEntity ed2 = em.find( BiMulIdRefEdEntity.class, ed2_id ); + + BiMulIdRefIngEntity rev1 = auditReader.find( BiMulIdRefIngEntity.class, ing1_id, 1 ); + BiMulIdRefIngEntity rev2 = auditReader.find( BiMulIdRefIngEntity.class, ing1_id, 2 ); + + assertEquals( ed1, rev1.getReference() ); + assertEquals( ed2, rev2.getReference() ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/primarykeyjoincolumn/OneToOneWithPrimaryKeyJoinTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/primarykeyjoincolumn/OneToOneWithPrimaryKeyJoinTest.java index 5e88a01d06e2..10cb257b9053 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/primarykeyjoincolumn/OneToOneWithPrimaryKeyJoinTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/bidirectional/primarykeyjoincolumn/OneToOneWithPrimaryKeyJoinTest.java @@ -6,147 +6,135 @@ import java.util.Arrays; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.RevisionType; import org.hibernate.envers.query.AuditEntity; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; import org.hibernate.proxy.HibernateProxy; - +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Assert; -import org.junit.Test; +import org.hibernate.testing.orm.junit.Jpa; + +import org.junit.jupiter.api.Test; -import jakarta.persistence.EntityManager; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; /** * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) */ @JiraKey(value = "HHH-6825") -public class OneToOneWithPrimaryKeyJoinTest extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {Person.class, Account.class, AccountNotAuditedOwners.class, NotAuditedPerson.class}) +public class OneToOneWithPrimaryKeyJoinTest { private Long personId = null; private Long accountId = null; private Long proxyPersonId = null; private Long accountNotAuditedOwnersId = null; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { - Person.class, - Account.class, - AccountNotAuditedOwners.class, - NotAuditedPerson.class - }; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Revision 1 - em.getTransaction().begin(); - Person person = new Person( "Robert" ); - Account account = new Account( "Saving" ); - person.setAccount( account ); - account.setOwner( person ); - em.persist( person ); - em.persist( account ); - em.getTransaction().commit(); + scope.inTransaction( em -> { + Person person = new Person( "Robert" ); + Account account = new Account( "Saving" ); + person.setAccount( account ); + account.setOwner( person ); + em.persist( person ); + em.persist( account ); + + personId = person.getPersonId(); + accountId = account.getAccountId(); + } ); // Revision 2 - em.getTransaction().begin(); - NotAuditedPerson proxyPerson = new NotAuditedPerson( "Lukasz" ); - AccountNotAuditedOwners accountNotAuditedOwners = new AccountNotAuditedOwners( "Standard" ); - proxyPerson.setAccount( accountNotAuditedOwners ); - accountNotAuditedOwners.setOwner( proxyPerson ); - em.persist( accountNotAuditedOwners ); - em.persist( proxyPerson ); - em.getTransaction().commit(); - - personId = person.getPersonId(); - accountId = account.getAccountId(); - accountNotAuditedOwnersId = accountNotAuditedOwners.getAccountId(); - proxyPersonId = proxyPerson.getPersonId(); + scope.inTransaction( em -> { + NotAuditedPerson proxyPerson = new NotAuditedPerson( "Lukasz" ); + AccountNotAuditedOwners accountNotAuditedOwners = new AccountNotAuditedOwners( "Standard" ); + proxyPerson.setAccount( accountNotAuditedOwners ); + accountNotAuditedOwners.setOwner( proxyPerson ); + em.persist( accountNotAuditedOwners ); + em.persist( proxyPerson ); + + accountNotAuditedOwnersId = accountNotAuditedOwners.getAccountId(); + proxyPersonId = proxyPerson.getPersonId(); + } ); } @Test - public void testRevisionsCounts() { - Assert.assertEquals( Arrays.asList( 1 ), getAuditReader().getRevisions( Person.class, personId ) ); - Assert.assertEquals( Arrays.asList( 1 ), getAuditReader().getRevisions( Account.class, accountId ) ); - Assert.assertEquals( - Arrays.asList( 2 ), getAuditReader().getRevisions( - AccountNotAuditedOwners.class, - accountNotAuditedOwnersId - ) - ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1 ), auditReader.getRevisions( Person.class, personId ) ); + assertEquals( Arrays.asList( 1 ), auditReader.getRevisions( Account.class, accountId ) ); + assertEquals( Arrays.asList( 2 ), auditReader.getRevisions( AccountNotAuditedOwners.class, accountNotAuditedOwnersId ) ); + } ); } @Test - public void testHistoryOfPerson() { - Person personVer1 = new Person( personId, "Robert" ); - Account accountVer1 = new Account( accountId, "Saving" ); - personVer1.setAccount( accountVer1 ); - accountVer1.setOwner( personVer1 ); - - Object[] result = ((Object[]) getAuditReader().createQuery().forRevisionsOfEntity( Person.class, false, true ) - .add( AuditEntity.id().eq( personId ) ) - .getResultList().get( 0 )); - - Assert.assertEquals( personVer1, result[0] ); - Assert.assertEquals( personVer1.getAccount(), ((Person) result[0]).getAccount() ); - Assert.assertEquals( RevisionType.ADD, result[2] ); - - Assert.assertEquals( personVer1, getAuditReader().find( Person.class, personId, 1 ) ); + public void testHistoryOfPerson(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + var auditReader = AuditReaderFactory.get( em ); + Person personVer1 = new Person( personId, "Robert" ); + Account accountVer1 = new Account( accountId, "Saving" ); + personVer1.setAccount( accountVer1 ); + accountVer1.setOwner( personVer1 ); + + Object[] result = ((Object[]) auditReader.createQuery().forRevisionsOfEntity( Person.class, false, true ) + .add( AuditEntity.id().eq( personId ) ) + .getResultList().get( 0 )); + + assertEquals( personVer1, result[0] ); + assertEquals( personVer1.getAccount(), ((Person) result[0]).getAccount() ); + assertEquals( RevisionType.ADD, result[2] ); + + assertEquals( personVer1, auditReader.find( Person.class, personId, 1 ) ); + } ); } @Test - public void testHistoryOfAccount() { - Person personVer1 = new Person( personId, "Robert" ); - Account accountVer1 = new Account( accountId, "Saving" ); - personVer1.setAccount( accountVer1 ); - accountVer1.setOwner( personVer1 ); - - Object[] result = ((Object[]) getAuditReader().createQuery().forRevisionsOfEntity( Account.class, false, true ) - .add( AuditEntity.id().eq( accountId ) ) - .getResultList().get( 0 )); - - Assert.assertEquals( accountVer1, result[0] ); - Assert.assertEquals( accountVer1.getOwner(), ((Account) result[0]).getOwner() ); - Assert.assertEquals( RevisionType.ADD, result[2] ); - - Assert.assertEquals( accountVer1, getAuditReader().find( Account.class, accountId, 1 ) ); + public void testHistoryOfAccount(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + var auditReader = AuditReaderFactory.get( em ); + Person personVer1 = new Person( personId, "Robert" ); + Account accountVer1 = new Account( accountId, "Saving" ); + personVer1.setAccount( accountVer1 ); + accountVer1.setOwner( personVer1 ); + + Object[] result = ((Object[]) auditReader.createQuery().forRevisionsOfEntity( Account.class, false, true ) + .add( AuditEntity.id().eq( accountId ) ) + .getResultList().get( 0 )); + + assertEquals( accountVer1, result[0] ); + assertEquals( accountVer1.getOwner(), ((Account) result[0]).getOwner() ); + assertEquals( RevisionType.ADD, result[2] ); + + assertEquals( accountVer1, auditReader.find( Account.class, accountId, 1 ) ); + } ); } @Test - public void testHistoryOfAccountNotAuditedOwners() { - NotAuditedPerson proxyPersonVer1 = new NotAuditedPerson( proxyPersonId, "Lukasz" ); - AccountNotAuditedOwners accountNotAuditedOwnersVer1 = new AccountNotAuditedOwners( - accountNotAuditedOwnersId, - "Standard" - ); - proxyPersonVer1.setAccount( accountNotAuditedOwnersVer1 ); - accountNotAuditedOwnersVer1.setOwner( proxyPersonVer1 ); - - Object[] result = ((Object[]) getAuditReader().createQuery() - .forRevisionsOfEntity( AccountNotAuditedOwners.class, false, true ) - .add( AuditEntity.id().eq( accountNotAuditedOwnersId ) ) - .getResultList() - .get( 0 )); - - Assert.assertEquals( accountNotAuditedOwnersVer1, result[0] ); - Assert.assertEquals( RevisionType.ADD, result[2] ); - Assert.assertTrue( ((AccountNotAuditedOwners) result[0]).getOwner() instanceof HibernateProxy ); - Assert.assertEquals( - proxyPersonVer1.getPersonId(), - ((AccountNotAuditedOwners) result[0]).getOwner().getPersonId() - ); - - Assert.assertEquals( - accountNotAuditedOwnersVer1, getAuditReader().find( - AccountNotAuditedOwners.class, - accountNotAuditedOwnersId, - 2 - ) - ); + public void testHistoryOfAccountNotAuditedOwners(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + var auditReader = AuditReaderFactory.get( em ); + NotAuditedPerson proxyPersonVer1 = new NotAuditedPerson( proxyPersonId, "Lukasz" ); + AccountNotAuditedOwners accountNotAuditedOwnersVer1 = new AccountNotAuditedOwners( accountNotAuditedOwnersId, "Standard" ); + proxyPersonVer1.setAccount( accountNotAuditedOwnersVer1 ); + accountNotAuditedOwnersVer1.setOwner( proxyPersonVer1 ); + + Object[] result = ((Object[]) auditReader.createQuery() + .forRevisionsOfEntity( AccountNotAuditedOwners.class, false, true ) + .add( AuditEntity.id().eq( accountNotAuditedOwnersId ) ) + .getResultList() + .get( 0 )); + + assertEquals( accountNotAuditedOwnersVer1, result[0] ); + assertEquals( RevisionType.ADD, result[2] ); + assertTrue( ((AccountNotAuditedOwners) result[0]).getOwner() instanceof HibernateProxy ); + assertEquals( proxyPersonVer1.getPersonId(), ((AccountNotAuditedOwners) result[0]).getOwner().getPersonId() ); + + assertEquals( accountNotAuditedOwnersVer1, auditReader.find( AccountNotAuditedOwners.class, accountNotAuditedOwnersId, 2 ) ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/unidirectional/UniRefEdEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/unidirectional/UniRefEdEntity.java index ebaa96b7f39b..d81b237481f8 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/unidirectional/UniRefEdEntity.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/unidirectional/UniRefEdEntity.java @@ -56,10 +56,10 @@ public boolean equals(Object o) { UniRefEdEntity that = (UniRefEdEntity) o; - if ( data != null ? !data.equals( that.data ) : that.data != null ) { + if ( data != null ? !data.equals( that.getData() ) : that.getData() != null ) { return false; } - if ( id != null ? !id.equals( that.id ) : that.id != null ) { + if ( id != null ? !id.equals( that.getId() ) : that.getId() != null ) { return false; } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/unidirectional/UniRefIngEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/unidirectional/UniRefIngEntity.java index 8e17c3692e0b..694ac76a5e05 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/unidirectional/UniRefIngEntity.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/unidirectional/UniRefIngEntity.java @@ -70,10 +70,10 @@ public boolean equals(Object o) { UniRefIngEntity that = (UniRefIngEntity) o; - if ( data != null ? !data.equals( that.data ) : that.data != null ) { + if ( data != null ? !data.equals( that.getData() ) : that.getData() != null ) { return false; } - if ( id != null ? !id.equals( that.id ) : that.id != null ) { + if ( id != null ? !id.equals( that.getId() ) : that.getId() != null ) { return false; } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/unidirectional/Unidirectional.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/unidirectional/Unidirectional.java index 230ee8a2ee1c..5eb279a9a69f 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/unidirectional/Unidirectional.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/unidirectional/Unidirectional.java @@ -5,17 +5,23 @@ package org.hibernate.orm.test.envers.integration.onetoone.unidirectional; import java.util.Arrays; -import jakarta.persistence.EntityManager; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; -import org.junit.Test; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Adam Warski (adam at warski dot org) */ -public class Unidirectional extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {UniRefEdEntity.class, UniRefIngEntity.class}) +public class Unidirectional { private Integer ed1_id; private Integer ed2_id; private Integer ed3_id; @@ -24,107 +30,97 @@ public class Unidirectional extends BaseEnversJPAFunctionalTestCase { private Integer ing1_id; private Integer ing2_id; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {UniRefEdEntity.class, UniRefIngEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - UniRefEdEntity ed1 = new UniRefEdEntity( 1, "data_ed_1" ); - UniRefEdEntity ed2 = new UniRefEdEntity( 2, "data_ed_2" ); - UniRefEdEntity ed3 = new UniRefEdEntity( 3, "data_ed_2" ); - UniRefEdEntity ed4 = new UniRefEdEntity( 4, "data_ed_2" ); - - UniRefIngEntity ing1 = new UniRefIngEntity( 5, "data_ing_1", ed1 ); - UniRefIngEntity ing2 = new UniRefIngEntity( 6, "data_ing_2", ed3 ); - + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - - em.persist( ed1 ); - em.persist( ed2 ); - em.persist( ed3 ); - em.persist( ed4 ); + scope.inTransaction( em -> { + UniRefEdEntity ed1 = new UniRefEdEntity( 1, "data_ed_1" ); + UniRefEdEntity ed2 = new UniRefEdEntity( 2, "data_ed_2" ); + UniRefEdEntity ed3 = new UniRefEdEntity( 3, "data_ed_2" ); + UniRefEdEntity ed4 = new UniRefEdEntity( 4, "data_ed_2" ); - em.persist( ing1 ); - em.persist( ing2 ); + UniRefIngEntity ing1 = new UniRefIngEntity( 5, "data_ing_1", ed1 ); + UniRefIngEntity ing2 = new UniRefIngEntity( 6, "data_ing_2", ed3 ); - em.getTransaction().commit(); + em.persist( ed1 ); + em.persist( ed2 ); + em.persist( ed3 ); + em.persist( ed4 ); - // Revision 2 + em.persist( ing1 ); + em.persist( ing2 ); - em = getEntityManager(); - em.getTransaction().begin(); + ed1_id = ed1.getId(); + ed2_id = ed2.getId(); + ed3_id = ed3.getId(); + ed4_id = ed4.getId(); - ing1 = em.find( UniRefIngEntity.class, ing1.getId() ); - ed2 = em.find( UniRefEdEntity.class, ed2.getId() ); + ing1_id = ing1.getId(); + ing2_id = ing2.getId(); + } ); - ing1.setReference( ed2 ); + // Revision 2 + scope.inTransaction( em -> { + UniRefIngEntity ing1 = em.find( UniRefIngEntity.class, ing1_id ); + UniRefEdEntity ed2 = em.find( UniRefEdEntity.class, ed2_id ); - em.getTransaction().commit(); + ing1.setReference( ed2 ); + } ); // Revision 3 + scope.inTransaction( em -> { + UniRefIngEntity ing2 = em.find( UniRefIngEntity.class, ing2_id ); + UniRefEdEntity ed4 = em.find( UniRefEdEntity.class, ed4_id ); - em = getEntityManager(); - em.getTransaction().begin(); - - ing2 = em.find( UniRefIngEntity.class, ing2.getId() ); - ed3 = em.find( UniRefEdEntity.class, ed3.getId() ); - - ing2.setReference( ed4 ); - - em.getTransaction().commit(); - - // - - ed1_id = ed1.getId(); - ed2_id = ed2.getId(); - ed3_id = ed3.getId(); - ed4_id = ed4.getId(); - - ing1_id = ing1.getId(); - ing2_id = ing2.getId(); + ing2.setReference( ed4 ); + } ); } @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1 ).equals( getAuditReader().getRevisions( UniRefEdEntity.class, ed1_id ) ); - assert Arrays.asList( 1 ).equals( getAuditReader().getRevisions( UniRefEdEntity.class, ed2_id ) ); - assert Arrays.asList( 1 ).equals( getAuditReader().getRevisions( UniRefEdEntity.class, ed3_id ) ); - assert Arrays.asList( 1 ).equals( getAuditReader().getRevisions( UniRefEdEntity.class, ed4_id ) ); - - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( UniRefIngEntity.class, ing1_id ) ); - assert Arrays.asList( 1, 3 ).equals( getAuditReader().getRevisions( UniRefIngEntity.class, ing2_id ) ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1 ), auditReader.getRevisions( UniRefEdEntity.class, ed1_id ) ); + assertEquals( Arrays.asList( 1 ), auditReader.getRevisions( UniRefEdEntity.class, ed2_id ) ); + assertEquals( Arrays.asList( 1 ), auditReader.getRevisions( UniRefEdEntity.class, ed3_id ) ); + assertEquals( Arrays.asList( 1 ), auditReader.getRevisions( UniRefEdEntity.class, ed4_id ) ); + + assertEquals( Arrays.asList( 1, 2 ), auditReader.getRevisions( UniRefIngEntity.class, ing1_id ) ); + assertEquals( Arrays.asList( 1, 3 ), auditReader.getRevisions( UniRefIngEntity.class, ing2_id ) ); + } ); } @Test - public void testHistoryOfIngId1() { - UniRefEdEntity ed1 = getEntityManager().find( UniRefEdEntity.class, ed1_id ); - UniRefEdEntity ed2 = getEntityManager().find( UniRefEdEntity.class, ed2_id ); - - UniRefIngEntity rev1 = getAuditReader().find( UniRefIngEntity.class, ing1_id, 1 ); - UniRefIngEntity rev2 = getAuditReader().find( UniRefIngEntity.class, ing1_id, 2 ); - UniRefIngEntity rev3 = getAuditReader().find( UniRefIngEntity.class, ing1_id, 3 ); - - assert rev1.getReference().equals( ed1 ); - assert rev2.getReference().equals( ed2 ); - assert rev3.getReference().equals( ed2 ); + public void testHistoryOfIngId1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + UniRefEdEntity ed1 = em.find( UniRefEdEntity.class, ed1_id ); + UniRefEdEntity ed2 = em.find( UniRefEdEntity.class, ed2_id ); + + UniRefIngEntity rev1 = auditReader.find( UniRefIngEntity.class, ing1_id, 1 ); + UniRefIngEntity rev2 = auditReader.find( UniRefIngEntity.class, ing1_id, 2 ); + UniRefIngEntity rev3 = auditReader.find( UniRefIngEntity.class, ing1_id, 3 ); + + assertEquals( ed1, rev1.getReference() ); + assertEquals( ed2, rev2.getReference() ); + assertEquals( ed2, rev3.getReference() ); + } ); } @Test - public void testHistoryOfIngId2() { - UniRefEdEntity ed3 = getEntityManager().find( UniRefEdEntity.class, ed3_id ); - UniRefEdEntity ed4 = getEntityManager().find( UniRefEdEntity.class, ed4_id ); - - UniRefIngEntity rev1 = getAuditReader().find( UniRefIngEntity.class, ing2_id, 1 ); - UniRefIngEntity rev2 = getAuditReader().find( UniRefIngEntity.class, ing2_id, 2 ); - UniRefIngEntity rev3 = getAuditReader().find( UniRefIngEntity.class, ing2_id, 3 ); - - assert rev1.getReference().equals( ed3 ); - assert rev2.getReference().equals( ed3 ); - assert rev3.getReference().equals( ed4 ); + public void testHistoryOfIngId2(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + UniRefEdEntity ed3 = em.find( UniRefEdEntity.class, ed3_id ); + UniRefEdEntity ed4 = em.find( UniRefEdEntity.class, ed4_id ); + + UniRefIngEntity rev1 = auditReader.find( UniRefIngEntity.class, ing2_id, 1 ); + UniRefIngEntity rev2 = auditReader.find( UniRefIngEntity.class, ing2_id, 2 ); + UniRefIngEntity rev3 = auditReader.find( UniRefIngEntity.class, ing2_id, 3 ); + + assertEquals( ed3, rev1.getReference() ); + assertEquals( ed3, rev2.getReference() ); + assertEquals( ed4, rev3.getReference() ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/unidirectional/UnidirectionalMulIdWithNulls.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/unidirectional/UnidirectionalMulIdWithNulls.java index 7a1fda0e60cc..9b3ab0903db5 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/unidirectional/UnidirectionalMulIdWithNulls.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/unidirectional/UnidirectionalMulIdWithNulls.java @@ -4,60 +4,61 @@ */ package org.hibernate.orm.test.envers.integration.onetoone.unidirectional; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.orm.test.envers.entities.ids.EmbId; import org.hibernate.orm.test.envers.entities.ids.EmbIdTestEntity; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; -import org.junit.Test; +import org.junit.jupiter.api.Test; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertNull; /** * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) */ -public class UnidirectionalMulIdWithNulls extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {EmbIdTestEntity.class, UniRefIngMulIdEntity.class}) +public class UnidirectionalMulIdWithNulls { private EmbId ei; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {EmbIdTestEntity.class, UniRefIngMulIdEntity.class}; - } - - @Test - @Priority(10) - public void initData() { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { ei = new EmbId( 1, 2 ); - EntityManager em = getEntityManager(); - // Revision 1 - EmbIdTestEntity eite = new EmbIdTestEntity( ei, "data" ); - UniRefIngMulIdEntity notNullRef = new UniRefIngMulIdEntity( 1, "data 1", eite ); - UniRefIngMulIdEntity nullRef = new UniRefIngMulIdEntity( 2, "data 2", null ); - - em.getTransaction().begin(); - em.persist( eite ); - em.persist( notNullRef ); - em.persist( nullRef ); - em.getTransaction().commit(); + scope.inTransaction( em -> { + EmbIdTestEntity eite = new EmbIdTestEntity( ei, "data" ); + UniRefIngMulIdEntity notNullRef = new UniRefIngMulIdEntity( 1, "data 1", eite ); + UniRefIngMulIdEntity nullRef = new UniRefIngMulIdEntity( 2, "data 2", null ); + + em.persist( eite ); + em.persist( notNullRef ); + em.persist( nullRef ); + } ); } @Test - public void testNullReference() { - UniRefIngMulIdEntity nullRef = getAuditReader().find( UniRefIngMulIdEntity.class, 2, 1 ); - assertNull( nullRef.getReference() ); + public void testNullReference(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + UniRefIngMulIdEntity nullRef = auditReader.find( UniRefIngMulIdEntity.class, 2, 1 ); + assertNull( nullRef.getReference() ); + } ); } @Test - public void testNotNullReference() { - EmbIdTestEntity eite = getAuditReader().find( EmbIdTestEntity.class, ei, 1 ); - UniRefIngMulIdEntity notNullRef = getAuditReader().find( UniRefIngMulIdEntity.class, 1, 1 ); - assertNotNull( notNullRef.getReference() ); - assertEquals( notNullRef.getReference(), eite ); + public void testNotNullReference(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + EmbIdTestEntity eite = auditReader.find( EmbIdTestEntity.class, ei, 1 ); + UniRefIngMulIdEntity notNullRef = auditReader.find( UniRefIngMulIdEntity.class, 1, 1 ); + assertNotNull( notNullRef.getReference() ); + assertEquals( eite, notNullRef.getReference() ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/unidirectional/UnidirectionalWithNulls.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/unidirectional/UnidirectionalWithNulls.java index f7eb0f51da77..c01f5be8778f 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/unidirectional/UnidirectionalWithNulls.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/onetoone/unidirectional/UnidirectionalWithNulls.java @@ -5,113 +5,109 @@ package org.hibernate.orm.test.envers.integration.onetoone.unidirectional; import java.util.Arrays; -import jakarta.persistence.EntityManager; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; -import org.junit.Test; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNull; /** * @author Adam Warski (adam at warski dot org) */ -public class UnidirectionalWithNulls extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {UniRefEdEntity.class, UniRefIngEntity.class}) +public class UnidirectionalWithNulls { private Integer ed1_id; private Integer ed2_id; private Integer ing1_id; private Integer ing2_id; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {UniRefEdEntity.class, UniRefIngEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - UniRefEdEntity ed1 = new UniRefEdEntity( 1, "data_ed_1" ); - UniRefEdEntity ed2 = new UniRefEdEntity( 2, "data_ed_2" ); - - UniRefIngEntity ing1 = new UniRefIngEntity( 3, "data_ing_1", ed1 ); - UniRefIngEntity ing2 = new UniRefIngEntity( 4, "data_ing_2", null ); - + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); + scope.inTransaction( em -> { + UniRefEdEntity ed1 = new UniRefEdEntity( 1, "data_ed_1" ); + UniRefEdEntity ed2 = new UniRefEdEntity( 2, "data_ed_2" ); - em.persist( ed1 ); - em.persist( ed2 ); + UniRefIngEntity ing1 = new UniRefIngEntity( 3, "data_ing_1", ed1 ); + UniRefIngEntity ing2 = new UniRefIngEntity( 4, "data_ing_2", null ); - em.persist( ing1 ); - em.persist( ing2 ); + em.persist( ed1 ); + em.persist( ed2 ); - em.getTransaction().commit(); + em.persist( ing1 ); + em.persist( ing2 ); - // Revision 2 - - em = getEntityManager(); - em.getTransaction().begin(); - - ing1 = em.find( UniRefIngEntity.class, ing1.getId() ); + ed1_id = ed1.getId(); + ed2_id = ed2.getId(); - ing1.setReference( null ); + ing1_id = ing1.getId(); + ing2_id = ing2.getId(); + } ); - em.getTransaction().commit(); + // Revision 2 + scope.inTransaction( em -> { + UniRefIngEntity ing1 = em.find( UniRefIngEntity.class, ing1_id ); + ing1.setReference( null ); + } ); // Revision 3 + scope.inTransaction( em -> { + UniRefIngEntity ing2 = em.find( UniRefIngEntity.class, ing2_id ); + UniRefEdEntity ed2 = em.find( UniRefEdEntity.class, ed2_id ); - em = getEntityManager(); - em.getTransaction().begin(); - - ing2 = em.find( UniRefIngEntity.class, ing2.getId() ); - ed2 = em.find( UniRefEdEntity.class, ed2.getId() ); - - ing2.setReference( ed2 ); - - em.getTransaction().commit(); - - // - - ed1_id = ed1.getId(); - ed2_id = ed2.getId(); - - ing1_id = ing1.getId(); - ing2_id = ing2.getId(); + ing2.setReference( ed2 ); + } ); } @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1 ).equals( getAuditReader().getRevisions( UniRefEdEntity.class, ed1_id ) ); - assert Arrays.asList( 1 ).equals( getAuditReader().getRevisions( UniRefEdEntity.class, ed2_id ) ); - - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( UniRefIngEntity.class, ing1_id ) ); - assert Arrays.asList( 1, 3 ).equals( getAuditReader().getRevisions( UniRefIngEntity.class, ing2_id ) ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1 ), auditReader.getRevisions( UniRefEdEntity.class, ed1_id ) ); + assertEquals( Arrays.asList( 1 ), auditReader.getRevisions( UniRefEdEntity.class, ed2_id ) ); + + assertEquals( Arrays.asList( 1, 2 ), auditReader.getRevisions( UniRefIngEntity.class, ing1_id ) ); + assertEquals( Arrays.asList( 1, 3 ), auditReader.getRevisions( UniRefIngEntity.class, ing2_id ) ); + } ); } @Test - public void testHistoryOfIngId1() { - UniRefEdEntity ed1 = getEntityManager().find( UniRefEdEntity.class, ed1_id ); - - UniRefIngEntity rev1 = getAuditReader().find( UniRefIngEntity.class, ing1_id, 1 ); - UniRefIngEntity rev2 = getAuditReader().find( UniRefIngEntity.class, ing1_id, 2 ); - UniRefIngEntity rev3 = getAuditReader().find( UniRefIngEntity.class, ing1_id, 3 ); - - assert rev1.getReference().equals( ed1 ); - assert rev2.getReference() == null; - assert rev3.getReference() == null; + public void testHistoryOfIngId1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + UniRefEdEntity ed1 = em.find( UniRefEdEntity.class, ed1_id ); + + UniRefIngEntity rev1 = auditReader.find( UniRefIngEntity.class, ing1_id, 1 ); + UniRefIngEntity rev2 = auditReader.find( UniRefIngEntity.class, ing1_id, 2 ); + UniRefIngEntity rev3 = auditReader.find( UniRefIngEntity.class, ing1_id, 3 ); + + assertEquals( ed1, rev1.getReference() ); + assertNull( rev2.getReference() ); + assertNull( rev3.getReference() ); + } ); } @Test - public void testHistoryOfIngId2() { - UniRefEdEntity ed2 = getEntityManager().find( UniRefEdEntity.class, ed2_id ); - - UniRefIngEntity rev1 = getAuditReader().find( UniRefIngEntity.class, ing2_id, 1 ); - UniRefIngEntity rev2 = getAuditReader().find( UniRefIngEntity.class, ing2_id, 2 ); - UniRefIngEntity rev3 = getAuditReader().find( UniRefIngEntity.class, ing2_id, 3 ); - - assert rev1.getReference() == null; - assert rev2.getReference() == null; - assert rev3.getReference().equals( ed2 ); + public void testHistoryOfIngId2(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + UniRefEdEntity ed2 = em.find( UniRefEdEntity.class, ed2_id ); + + UniRefIngEntity rev1 = auditReader.find( UniRefIngEntity.class, ing2_id, 1 ); + UniRefIngEntity rev2 = auditReader.find( UniRefIngEntity.class, ing2_id, 2 ); + UniRefIngEntity rev3 = auditReader.find( UniRefIngEntity.class, ing2_id, 3 ); + + assertNull( rev1.getReference() ); + assertNull( rev2.getReference() ); + assertEquals( ed2, rev3.getReference() ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/primitive/PrimitiveAddDelete.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/primitive/PrimitiveAddDelete.java index fa308901529b..db33f5702946 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/primitive/PrimitiveAddDelete.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/primitive/PrimitiveAddDelete.java @@ -5,76 +5,83 @@ package org.hibernate.orm.test.envers.integration.primitive; import java.util.Arrays; -import java.util.List; -import jakarta.persistence.EntityManager; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.orm.test.envers.entities.PrimitiveTestEntity; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; -import org.junit.Test; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNull; /** * @author Adam Warski (adam at warski dot org) */ -public class PrimitiveAddDelete extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {PrimitiveTestEntity.class}) +public class PrimitiveAddDelete { private Integer id1; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {PrimitiveTestEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Revision 1 - em.getTransaction().begin(); - PrimitiveTestEntity pte = new PrimitiveTestEntity( 10, 11 ); - em.persist( pte ); - id1 = pte.getId(); - em.getTransaction().commit(); + scope.inTransaction( em -> { + PrimitiveTestEntity pte = new PrimitiveTestEntity( 10, 11 ); + em.persist( pte ); + id1 = pte.getId(); + } ); // Revision 2 - em.getTransaction().begin(); - pte = em.find( PrimitiveTestEntity.class, id1 ); - pte.setNumVal1( 20 ); - pte.setNumVal2( 21 ); - em.getTransaction().commit(); + scope.inTransaction( em -> { + PrimitiveTestEntity pte = em.find( PrimitiveTestEntity.class, id1 ); + pte.setNumVal1( 20 ); + pte.setNumVal2( 21 ); + } ); // Revision 3 - em.getTransaction().begin(); - pte = em.find( PrimitiveTestEntity.class, id1 ); - em.remove( pte ); - em.getTransaction().commit(); + scope.inTransaction( em -> { + PrimitiveTestEntity pte = em.find( PrimitiveTestEntity.class, id1 ); + em.remove( pte ); + } ); } @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2, 3 ).equals( getAuditReader().getRevisions( PrimitiveTestEntity.class, id1 ) ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1, 2, 3 ), auditReader.getRevisions( PrimitiveTestEntity.class, id1 ) ); + } ); } @Test - public void testHistoryOfId1() { - PrimitiveTestEntity ver1 = new PrimitiveTestEntity( id1, 10, 0 ); - PrimitiveTestEntity ver2 = new PrimitiveTestEntity( id1, 20, 0 ); + public void testHistoryOfId1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + PrimitiveTestEntity ver1 = new PrimitiveTestEntity( id1, 10, 0 ); + PrimitiveTestEntity ver2 = new PrimitiveTestEntity( id1, 20, 0 ); - assert getAuditReader().find( PrimitiveTestEntity.class, id1, 1 ).equals( ver1 ); - assert getAuditReader().find( PrimitiveTestEntity.class, id1, 2 ).equals( ver2 ); - assert getAuditReader().find( PrimitiveTestEntity.class, id1, 3 ) == null; + assertEquals( ver1, auditReader.find( PrimitiveTestEntity.class, id1, 1 ) ); + assertEquals( ver2, auditReader.find( PrimitiveTestEntity.class, id1, 2 ) ); + assertNull( auditReader.find( PrimitiveTestEntity.class, id1, 3 ) ); + } ); } @Test - public void testQueryWithDeleted() { - // Selecting all entities, also the deleted ones - List entities = getAuditReader().createQuery().forRevisionsOfEntity( PrimitiveTestEntity.class, true, true ) - .getResultList(); + public void testQueryWithDeleted(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + // Selecting all entities, also the deleted ones + var entities = auditReader.createQuery().forRevisionsOfEntity( PrimitiveTestEntity.class, true, true ) + .getResultList(); - assert entities.size() == 3; - assert entities.get( 0 ).equals( new PrimitiveTestEntity( id1, 10, 0 ) ); - assert entities.get( 1 ).equals( new PrimitiveTestEntity( id1, 20, 0 ) ); - assert entities.get( 2 ).equals( new PrimitiveTestEntity( id1, 0, 0 ) ); + assertEquals( 3, entities.size() ); + assertEquals( new PrimitiveTestEntity( id1, 10, 0 ), entities.get( 0 ) ); + assertEquals( new PrimitiveTestEntity( id1, 20, 0 ), entities.get( 1 ) ); + assertEquals( new PrimitiveTestEntity( id1, 0, 0 ), entities.get( 2 ) ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/properties/UnversionedOptimisticLockingField.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/properties/UnversionedOptimisticLockingField.java index 157815eeb0e4..fbfafaf4ccd2 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/properties/UnversionedOptimisticLockingField.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/properties/UnversionedOptimisticLockingField.java @@ -4,78 +4,77 @@ */ package org.hibernate.orm.test.envers.integration.properties; -import java.util.Arrays; -import java.util.Map; -import jakarta.persistence.EntityManager; - +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.configuration.EnversSettings; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; import org.hibernate.mapping.PersistentClass; import org.hibernate.mapping.Property; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.DomainModel; +import org.hibernate.testing.orm.junit.DomainModelScope; +import org.hibernate.testing.orm.junit.ServiceRegistry; +import org.hibernate.testing.orm.junit.SessionFactory; +import org.hibernate.testing.orm.junit.SessionFactoryScope; +import org.hibernate.testing.orm.junit.Setting; +import org.junit.jupiter.api.Test; -import org.junit.Assert; -import org.junit.Test; +import java.util.Arrays; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotEquals; /** * @author Nicolas Doroskevich */ -public class UnversionedOptimisticLockingField extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@DomainModel(annotatedClasses = {UnversionedOptimisticLockingFieldEntity.class}) +@ServiceRegistry(settings = @Setting(name = EnversSettings.DO_NOT_AUDIT_OPTIMISTIC_LOCKING_FIELD, value = "true")) +@SessionFactory +public class UnversionedOptimisticLockingField { private Integer id1; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {UnversionedOptimisticLockingFieldEntity.class}; - } - - @Override - public void addConfigOptions(Map configuration) { - super.addConfigOptions( configuration ); - configuration.put( EnversSettings.DO_NOT_AUDIT_OPTIMISTIC_LOCKING_FIELD, "true" ); - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - UnversionedOptimisticLockingFieldEntity olfe = new UnversionedOptimisticLockingFieldEntity( "x" ); - em.persist( olfe ); - id1 = olfe.getId(); - em.getTransaction().commit(); + @BeforeClassTemplate + public void initData(SessionFactoryScope scope) { + scope.inTransaction( em -> { + UnversionedOptimisticLockingFieldEntity olfe = new UnversionedOptimisticLockingFieldEntity( "x" ); + em.persist( olfe ); + id1 = olfe.getId(); + } ); - em.getTransaction().begin(); - olfe = em.find( UnversionedOptimisticLockingFieldEntity.class, id1 ); - olfe.setStr( "y" ); - em.getTransaction().commit(); + scope.inTransaction( em -> { + UnversionedOptimisticLockingFieldEntity olfe = em.find( UnversionedOptimisticLockingFieldEntity.class, + id1 ); + olfe.setStr( "y" ); + } ); } @Test - public void testRevisionCounts() { - assert Arrays.asList( 1, 2 ).equals( - getAuditReader().getRevisions( - UnversionedOptimisticLockingFieldEntity.class, - id1 - ) - ); + public void testRevisionCounts(SessionFactoryScope scope) { + scope.inSession( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1, 2 ), + auditReader.getRevisions( UnversionedOptimisticLockingFieldEntity.class, id1 ) ); + } ); } @Test - public void testHistoryOfId1() { - UnversionedOptimisticLockingFieldEntity ver1 = new UnversionedOptimisticLockingFieldEntity( id1, "x" ); - UnversionedOptimisticLockingFieldEntity ver2 = new UnversionedOptimisticLockingFieldEntity( id1, "y" ); + public void testHistoryOfId1(SessionFactoryScope scope) { + scope.inSession( em -> { + final var auditReader = AuditReaderFactory.get( em ); + UnversionedOptimisticLockingFieldEntity ver1 = new UnversionedOptimisticLockingFieldEntity( id1, "x" ); + UnversionedOptimisticLockingFieldEntity ver2 = new UnversionedOptimisticLockingFieldEntity( id1, "y" ); - assert getAuditReader().find( UnversionedOptimisticLockingFieldEntity.class, id1, 1 ) - .equals( ver1 ); - assert getAuditReader().find( UnversionedOptimisticLockingFieldEntity.class, id1, 2 ) - .equals( ver2 ); + assertEquals( ver1, auditReader.find( UnversionedOptimisticLockingFieldEntity.class, id1, 1 ) ); + assertEquals( ver2, auditReader.find( UnversionedOptimisticLockingFieldEntity.class, id1, 2 ) ); + } ); } @Test - public void testMapping() { - PersistentClass pc = metadata().getEntityBinding( UnversionedOptimisticLockingFieldEntity.class.getName() + "_AUD" ); + public void testMapping(DomainModelScope scope) { + PersistentClass pc = scope.getDomainModel() + .getEntityBinding( UnversionedOptimisticLockingFieldEntity.class.getName() + "_AUD" ); for ( Property p : pc.getProperties() ) { - Assert.assertNotEquals( "optLocking", p.getName() ); + assertNotEquals( "optLocking", p.getName() ); } } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/properties/VersionsProperties.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/properties/VersionsProperties.java index dcbe55549392..2670b8839f6a 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/properties/VersionsProperties.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/properties/VersionsProperties.java @@ -5,62 +5,64 @@ package org.hibernate.orm.test.envers.integration.properties; import java.util.Arrays; -import java.util.Map; -import jakarta.persistence.EntityManager; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.configuration.EnversSettings; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; +import org.hibernate.testing.orm.junit.Setting; -import org.junit.Test; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Adam Warski (adam at warski dot org) */ -public class VersionsProperties extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {PropertiesTestEntity.class}, + integrationSettings = { + @Setting(name = EnversSettings.AUDIT_TABLE_PREFIX, value = "VP_"), + @Setting(name = EnversSettings.AUDIT_TABLE_SUFFIX, value = "_VS"), + @Setting(name = EnversSettings.REVISION_FIELD_NAME, value = "ver_rev"), + @Setting(name = EnversSettings.REVISION_TYPE_FIELD_NAME, value = "ver_rev_type") + }) +public class VersionsProperties { private Integer id1; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {PropertiesTestEntity.class}; - } - - @Override - protected void addConfigOptions(Map options) { - super.addConfigOptions( options ); - options.put( EnversSettings.AUDIT_TABLE_PREFIX, "VP_" ); - options.put( EnversSettings.AUDIT_TABLE_SUFFIX, "_VS" ); - options.put( EnversSettings.REVISION_FIELD_NAME, "ver_rev" ); - options.put( EnversSettings.REVISION_TYPE_FIELD_NAME, "ver_rev_type" ); - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - PropertiesTestEntity pte = new PropertiesTestEntity( "x" ); - em.persist( pte ); - id1 = pte.getId(); - em.getTransaction().commit(); + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + scope.inTransaction( em -> { + PropertiesTestEntity pte = new PropertiesTestEntity( "x" ); + em.persist( pte ); + id1 = pte.getId(); + } ); - em.getTransaction().begin(); - pte = em.find( PropertiesTestEntity.class, id1 ); - pte.setStr( "y" ); - em.getTransaction().commit(); + scope.inTransaction( em -> { + PropertiesTestEntity pte = em.find( PropertiesTestEntity.class, id1 ); + pte.setStr( "y" ); + } ); } @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( PropertiesTestEntity.class, id1 ) ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1, 2 ), auditReader.getRevisions( PropertiesTestEntity.class, id1 ) ); + } ); } @Test - public void testHistoryOfId1() { - PropertiesTestEntity ver1 = new PropertiesTestEntity( id1, "x" ); - PropertiesTestEntity ver2 = new PropertiesTestEntity( id1, "y" ); + public void testHistoryOfId1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + PropertiesTestEntity ver1 = new PropertiesTestEntity( id1, "x" ); + PropertiesTestEntity ver2 = new PropertiesTestEntity( id1, "y" ); - assert getAuditReader().find( PropertiesTestEntity.class, id1, 1 ).equals( ver1 ); - assert getAuditReader().find( PropertiesTestEntity.class, id1, 2 ).equals( ver2 ); + assertEquals( ver1, auditReader.find( PropertiesTestEntity.class, id1, 1 ) ); + assertEquals( ver2, auditReader.find( PropertiesTestEntity.class, id1, 2 ) ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/proxy/AuditedCollectionProxyTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/proxy/AuditedCollectionProxyTest.java index a82bb857c4b9..7a6835061bf2 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/proxy/AuditedCollectionProxyTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/proxy/AuditedCollectionProxyTest.java @@ -4,15 +4,16 @@ */ package org.hibernate.orm.test.envers.integration.proxy; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; import org.hibernate.orm.test.envers.entities.onetomany.ListRefEdEntity; import org.hibernate.orm.test.envers.entities.onetomany.ListRefIngEntity; import org.hibernate.proxy.HibernateProxy; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; -import org.junit.Test; +import static org.junit.jupiter.api.Assertions.assertInstanceOf; /** * Test case for HHH-5750: Proxied objects lose the temporary session used to @@ -20,20 +21,14 @@ * * @author Erik-Berndt Scheper */ -public class AuditedCollectionProxyTest extends BaseEnversJPAFunctionalTestCase { +@Jpa(annotatedClasses = {ListRefEdEntity.class, ListRefIngEntity.class}) +@EnversTest +public class AuditedCollectionProxyTest { Integer id_ListRefEdEntity1; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {ListRefEdEntity.class, ListRefIngEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { ListRefEdEntity listReferencedEntity1 = new ListRefEdEntity( Integer.valueOf( 1 ), "str1" ); @@ -42,10 +37,10 @@ public void initData() { ); // Revision 1 - em.getTransaction().begin(); - em.persist( listReferencedEntity1 ); - em.persist( refingEntity1 ); - em.getTransaction().commit(); + scope.inTransaction( em -> { + em.persist( listReferencedEntity1 ); + em.persist( refingEntity1 ); + } ); id_ListRefEdEntity1 = listReferencedEntity1.getId(); @@ -54,32 +49,29 @@ public void initData() { Integer.valueOf( 2 ), "refing2", listReferencedEntity1 ); - em.getTransaction().begin(); - em.persist( refingEntity2 ); - em.getTransaction().commit(); + scope.inTransaction( em -> { + em.persist( refingEntity2 ); + } ); } @Test - public void testProxyIdentifier() { - EntityManager em = getEntityManager(); + public void testProxyIdentifier(EntityManagerFactoryScope scope) { + scope.inTransaction( em -> { + ListRefEdEntity listReferencedEntity1 = em.getReference( + ListRefEdEntity.class, id_ListRefEdEntity1 + ); - em.getTransaction().begin(); + assertInstanceOf( HibernateProxy.class, listReferencedEntity1 ); - ListRefEdEntity listReferencedEntity1 = em.getReference( - ListRefEdEntity.class, id_ListRefEdEntity1 - ); - - assert listReferencedEntity1 instanceof HibernateProxy; - - // Revision 3 - ListRefIngEntity refingEntity3 = new ListRefIngEntity( - Integer.valueOf( 3 ), "refing3", listReferencedEntity1 - ); + // Revision 3 + ListRefIngEntity refingEntity3 = new ListRefIngEntity( + Integer.valueOf( 3 ), "refing3", listReferencedEntity1 + ); - em.persist( refingEntity3 ); + em.persist( refingEntity3 ); - listReferencedEntity1.getReffering().size(); - em.getTransaction().commit(); + listReferencedEntity1.getReffering().size(); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/proxy/ProxyIdentifier.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/proxy/ProxyIdentifier.java index e9244f037870..e893b44ebcc1 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/proxy/ProxyIdentifier.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/proxy/ProxyIdentifier.java @@ -4,10 +4,7 @@ */ package org.hibernate.orm.test.envers.integration.proxy; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.orm.test.envers.entities.UnversionedStrTestEntity; import org.hibernate.orm.test.envers.entities.manytomany.unidirectional.ManyToManyNotAuditedNullEntity; import org.hibernate.orm.test.envers.entities.manytoone.unidirectional.ExtManyToOneNotAuditedNullEntity; @@ -16,15 +13,29 @@ import org.hibernate.orm.test.envers.entities.onetomany.OneToManyNotAuditedNullEntity; import org.hibernate.proxy.HibernateProxy; import org.hibernate.proxy.LazyInitializer; - +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Assert; -import org.junit.Test; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertTrue; /** * @author Eugene Goroschenya */ -public class ProxyIdentifier extends BaseEnversJPAFunctionalTestCase { +@Jpa(annotatedClasses = { + TargetNotAuditedEntity.class, ManyToOneNotAuditedNullEntity.class, UnversionedStrTestEntity.class, + ManyToManyNotAuditedNullEntity.class, OneToManyNotAuditedNullEntity.class, + ExtManyToOneNotAuditedNullEntity.class +}) +@EnversTest +public class ProxyIdentifier { private TargetNotAuditedEntity tnae1 = null; private ManyToOneNotAuditedNullEntity mtonane1 = null; private ExtManyToOneNotAuditedNullEntity emtonane1 = null; @@ -33,115 +44,105 @@ public class ProxyIdentifier extends BaseEnversJPAFunctionalTestCase { private UnversionedStrTestEntity uste1 = null; private UnversionedStrTestEntity uste2 = null; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { - TargetNotAuditedEntity.class, ManyToOneNotAuditedNullEntity.class, UnversionedStrTestEntity.class, - ManyToManyNotAuditedNullEntity.class, OneToManyNotAuditedNullEntity.class, - ExtManyToOneNotAuditedNullEntity.class - }; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { uste1 = new UnversionedStrTestEntity( "str1" ); uste2 = new UnversionedStrTestEntity( "str2" ); // No revision - em.getTransaction().begin(); - em.persist( uste1 ); - em.persist( uste2 ); - em.getTransaction().commit(); + scope.inTransaction( em -> { + em.persist( uste1 ); + em.persist( uste2 ); + } ); // Revision 1 - em.getTransaction().begin(); - uste1 = em.find( UnversionedStrTestEntity.class, uste1.getId() ); - tnae1 = new TargetNotAuditedEntity( 1, "tnae1", uste1 ); - em.persist( tnae1 ); - em.getTransaction().commit(); + scope.inTransaction( em -> { + UnversionedStrTestEntity uste1Ref = em.find( UnversionedStrTestEntity.class, uste1.getId() ); + tnae1 = new TargetNotAuditedEntity( 1, "tnae1", uste1Ref ); + em.persist( tnae1 ); + } ); // Revision 2 - em.getTransaction().begin(); - uste2 = em.find( UnversionedStrTestEntity.class, uste2.getId() ); - mtonane1 = new ManyToOneNotAuditedNullEntity( 2, "mtonane1", uste2 ); - mtmnane1 = new ManyToManyNotAuditedNullEntity( 3, "mtmnane1" ); - mtmnane1.getReferences().add( uste2 ); - otmnane1 = new OneToManyNotAuditedNullEntity( 4, "otmnane1" ); - otmnane1.getReferences().add( uste2 ); - emtonane1 = new ExtManyToOneNotAuditedNullEntity( 5, "emtonane1", uste2, "extension" ); - em.persist( mtonane1 ); - em.persist( mtmnane1 ); - em.persist( otmnane1 ); - em.persist( emtonane1 ); - em.getTransaction().commit(); - - em.clear(); + scope.inTransaction( em -> { + UnversionedStrTestEntity uste2Ref = em.find( UnversionedStrTestEntity.class, uste2.getId() ); + mtonane1 = new ManyToOneNotAuditedNullEntity( 2, "mtonane1", uste2Ref ); + mtmnane1 = new ManyToManyNotAuditedNullEntity( 3, "mtmnane1" ); + mtmnane1.getReferences().add( uste2Ref ); + otmnane1 = new OneToManyNotAuditedNullEntity( 4, "otmnane1" ); + otmnane1.getReferences().add( uste2Ref ); + emtonane1 = new ExtManyToOneNotAuditedNullEntity( 5, "emtonane1", uste2Ref, "extension" ); + em.persist( mtonane1 ); + em.persist( mtmnane1 ); + em.persist( otmnane1 ); + em.persist( emtonane1 ); + } ); // Revision 3 // Remove not audited target entity, so we can verify null reference // when @NotFound(action = NotFoundAction.IGNORE) applied. - em.getTransaction().begin(); - ManyToOneNotAuditedNullEntity tmp1 = em.find( ManyToOneNotAuditedNullEntity.class, mtonane1.getId() ); - tmp1.setReference( null ); - tmp1 = em.merge( tmp1 ); - ManyToManyNotAuditedNullEntity tmp2 = em.find( ManyToManyNotAuditedNullEntity.class, mtmnane1.getId() ); - tmp2.setReferences( null ); - tmp2 = em.merge( tmp2 ); - OneToManyNotAuditedNullEntity tmp3 = em.find( OneToManyNotAuditedNullEntity.class, otmnane1.getId() ); - tmp3.setReferences( null ); - tmp3 = em.merge( tmp3 ); - ExtManyToOneNotAuditedNullEntity tmp4 = em.find( ExtManyToOneNotAuditedNullEntity.class, emtonane1.getId() ); - tmp4.setReference( null ); - tmp4 = em.merge( tmp4 ); - em.remove( em.getReference( UnversionedStrTestEntity.class, uste2.getId() ) ); - em.getTransaction().commit(); - - em.close(); + scope.inTransaction( em -> { + ManyToOneNotAuditedNullEntity tmp1 = em.find( ManyToOneNotAuditedNullEntity.class, mtonane1.getId() ); + tmp1.setReference( null ); + tmp1 = em.merge( tmp1 ); + ManyToManyNotAuditedNullEntity tmp2 = em.find( ManyToManyNotAuditedNullEntity.class, mtmnane1.getId() ); + tmp2.setReferences( null ); + tmp2 = em.merge( tmp2 ); + OneToManyNotAuditedNullEntity tmp3 = em.find( OneToManyNotAuditedNullEntity.class, otmnane1.getId() ); + tmp3.setReferences( null ); + tmp3 = em.merge( tmp3 ); + ExtManyToOneNotAuditedNullEntity tmp4 = em.find( ExtManyToOneNotAuditedNullEntity.class, emtonane1.getId() ); + tmp4.setReference( null ); + tmp4 = em.merge( tmp4 ); + em.remove( em.getReference( UnversionedStrTestEntity.class, uste2.getId() ) ); + } ); } @Test - public void testProxyIdentifier() { - TargetNotAuditedEntity rev1 = getAuditReader().find( TargetNotAuditedEntity.class, tnae1.getId(), 1 ); + public void testProxyIdentifier(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + TargetNotAuditedEntity rev1 = AuditReaderFactory.get( em ).find( TargetNotAuditedEntity.class, tnae1.getId(), 1 ); - Assert.assertTrue( rev1.getReference() instanceof HibernateProxy ); + assertTrue( rev1.getReference() instanceof HibernateProxy ); - HibernateProxy proxyCreateByEnvers = (HibernateProxy) rev1.getReference(); - LazyInitializer lazyInitializer = proxyCreateByEnvers.getHibernateLazyInitializer(); + HibernateProxy proxyCreateByEnvers = (HibernateProxy) rev1.getReference(); + LazyInitializer lazyInitializer = proxyCreateByEnvers.getHibernateLazyInitializer(); - Assert.assertTrue( lazyInitializer.isUninitialized() ); - Assert.assertNotNull( lazyInitializer.getInternalIdentifier() ); - Assert.assertEquals( tnae1.getId(), lazyInitializer.getInternalIdentifier() ); - Assert.assertTrue( lazyInitializer.isUninitialized() ); + assertTrue( lazyInitializer.isUninitialized() ); + assertNotNull( lazyInitializer.getInternalIdentifier() ); + assertEquals( tnae1.getId(), lazyInitializer.getInternalIdentifier() ); + assertTrue( lazyInitializer.isUninitialized() ); - Assert.assertEquals( uste1.getId(), rev1.getReference().getId() ); - Assert.assertEquals( uste1.getStr(), rev1.getReference().getStr() ); - Assert.assertFalse( lazyInitializer.isUninitialized() ); + assertEquals( uste1.getId(), rev1.getReference().getId() ); + assertEquals( uste1.getStr(), rev1.getReference().getStr() ); + assertFalse( lazyInitializer.isUninitialized() ); + } ); } @Test @JiraKey( value = "HHH-8174" ) - public void testNullReferenceWithNotFoundActionIgnore() { - ManyToOneNotAuditedNullEntity mtoRev2 = getAuditReader().find( ManyToOneNotAuditedNullEntity.class, mtonane1.getId(), 2 ); - Assert.assertEquals( mtonane1, mtoRev2 ); - Assert.assertNull( mtoRev2.getReference() ); - - ManyToManyNotAuditedNullEntity mtmRev2 = getAuditReader().find( ManyToManyNotAuditedNullEntity.class, mtmnane1.getId(), 2 ); - Assert.assertEquals( mtmnane1, mtmRev2 ); - Assert.assertTrue( mtmRev2.getReferences().isEmpty() ); - - OneToManyNotAuditedNullEntity otmRev2 = getAuditReader().find( OneToManyNotAuditedNullEntity.class, otmnane1.getId(), 2 ); - Assert.assertEquals( otmnane1, otmRev2 ); - Assert.assertTrue( otmRev2.getReferences().isEmpty() ); + public void testNullReferenceWithNotFoundActionIgnore(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + ManyToOneNotAuditedNullEntity mtoRev2 = AuditReaderFactory.get( em ).find( ManyToOneNotAuditedNullEntity.class, mtonane1.getId(), 2 ); + assertEquals( mtonane1, mtoRev2 ); + assertNull( mtoRev2.getReference() ); + + ManyToManyNotAuditedNullEntity mtmRev2 = AuditReaderFactory.get( em ).find( ManyToManyNotAuditedNullEntity.class, mtmnane1.getId(), 2 ); + assertEquals( mtmnane1, mtmRev2 ); + assertTrue( mtmRev2.getReferences().isEmpty() ); + + OneToManyNotAuditedNullEntity otmRev2 = AuditReaderFactory.get( em ).find( OneToManyNotAuditedNullEntity.class, otmnane1.getId(), 2 ); + assertEquals( otmnane1, otmRev2 ); + assertTrue( otmRev2.getReferences().isEmpty() ); + } ); } @Test @JiraKey( value = "HHH-8912" ) - public void testNullReferenceWithNotFoundActionIgnoreInParent() { - ExtManyToOneNotAuditedNullEntity emtoRev2 = getAuditReader().find( ExtManyToOneNotAuditedNullEntity.class, emtonane1.getId(), 2 ); - Assert.assertEquals( emtonane1, emtoRev2 ); - Assert.assertNull( emtoRev2.getReference() ); + public void testNullReferenceWithNotFoundActionIgnoreInParent(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + ExtManyToOneNotAuditedNullEntity emtoRev2 = AuditReaderFactory.get( em ).find( ExtManyToOneNotAuditedNullEntity.class, emtonane1.getId(), 2 ); + assertEquals( emtonane1, emtoRev2 ); + assertNull( emtoRev2.getReference() ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/proxy/QueryingWithProxyObjectTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/proxy/QueryingWithProxyObjectTest.java index bb4d45a9ab99..d4674ff418a0 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/proxy/QueryingWithProxyObjectTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/proxy/QueryingWithProxyObjectTest.java @@ -7,67 +7,69 @@ import java.util.Arrays; import java.util.List; -import org.hibernate.orm.test.envers.BaseEnversFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.orm.test.envers.entities.StrTestEntity; - +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Assert; -import org.junit.Test; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; /** * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) */ -public class QueryingWithProxyObjectTest extends BaseEnversFunctionalTestCase { +@Jpa(annotatedClasses = {StrTestEntity.class}) +@EnversTest +public class QueryingWithProxyObjectTest { private Integer id = null; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {StrTestEntity.class}; - } - - @Test - @Priority(10) - public void initData() { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Revision 1 - getSession().getTransaction().begin(); - StrTestEntity ste = new StrTestEntity( "data" ); - getSession().persist( ste ); - getSession().getTransaction().commit(); - id = ste.getId(); - getSession().close(); + id = scope.fromTransaction( em -> { + StrTestEntity ste = new StrTestEntity( "data" ); + em.persist( ste ); + return ste.getId(); + } ); } @Test @JiraKey(value = "HHH-4760") @SuppressWarnings("unchecked") - public void testQueryingWithProxyObject() { - StrTestEntity originalSte = new StrTestEntity( "data", id ); - // Load the proxy instance - StrTestEntity proxySte = (StrTestEntity) getSession().getReference( StrTestEntity.class, id ); + public void testQueryingWithProxyObject(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + StrTestEntity originalSte = new StrTestEntity( "data", id ); + // Load the proxy instance + StrTestEntity proxySte = em.getReference( StrTestEntity.class, id ); - Assert.assertTrue( getAuditReader().isEntityClassAudited( proxySte.getClass() ) ); + var auditReader = AuditReaderFactory.get( em ); - StrTestEntity ste = getAuditReader().find( proxySte.getClass(), proxySte.getId(), 1 ); - Assert.assertEquals( originalSte, ste ); + assertTrue( auditReader.isEntityClassAudited( proxySte.getClass() ) ); - List revisions = getAuditReader().getRevisions( proxySte.getClass(), proxySte.getId() ); - Assert.assertEquals( Arrays.asList( 1 ), revisions ); + StrTestEntity ste = auditReader.find( proxySte.getClass(), proxySte.getId(), 1 ); + assertEquals( originalSte, ste ); - List entities = getAuditReader().createQuery() - .forEntitiesAtRevision( proxySte.getClass(), 1 ) - .getResultList(); - Assert.assertEquals( Arrays.asList( originalSte ), entities ); + List revisions = auditReader.getRevisions( proxySte.getClass(), proxySte.getId() ); + assertEquals( Arrays.asList( 1 ), revisions ); - ste = (StrTestEntity) getAuditReader().createQuery() - .forRevisionsOfEntity( proxySte.getClass(), true, false ) - .getSingleResult(); - Assert.assertEquals( originalSte, ste ); + List entities = auditReader.createQuery() + .forEntitiesAtRevision( proxySte.getClass(), 1 ) + .getResultList(); + assertEquals( Arrays.asList( originalSte ), entities ); - ste = (StrTestEntity) getAuditReader().createQuery() - .forEntitiesModifiedAtRevision( proxySte.getClass(), 1 ) - .getSingleResult(); - Assert.assertEquals( originalSte, ste ); + ste = (StrTestEntity) auditReader.createQuery() + .forRevisionsOfEntity( proxySte.getClass(), true, false ) + .getSingleResult(); + assertEquals( originalSte, ste ); + ste = (StrTestEntity) auditReader.createQuery() + .forEntitiesModifiedAtRevision( proxySte.getClass(), 1 ) + .getSingleResult(); + assertEquals( originalSte, ste ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/proxy/RemovedObjectQueryTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/proxy/RemovedObjectQueryTest.java index 3b797b8cdebb..cd27432ed8ee 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/proxy/RemovedObjectQueryTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/proxy/RemovedObjectQueryTest.java @@ -4,21 +4,13 @@ */ package org.hibernate.orm.test.envers.integration.proxy; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; -import jakarta.persistence.EntityManager; - import org.hibernate.Hibernate; import org.hibernate.dialect.HSQLDialect; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.RevisionType; import org.hibernate.envers.configuration.EnversSettings; import org.hibernate.envers.enhanced.SequenceIdRevisionEntity; import org.hibernate.envers.query.AuditEntity; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; import org.hibernate.orm.test.envers.entities.IntTestPrivSeqEntity; import org.hibernate.orm.test.envers.entities.StrTestPrivSeqEntity; import org.hibernate.orm.test.envers.entities.UnversionedStrTestEntity; @@ -34,17 +26,35 @@ import org.hibernate.orm.test.envers.entities.onetomany.SetRefIngEntity; import org.hibernate.orm.test.envers.integration.manytomany.ternary.TernaryMapEntity; import org.hibernate.orm.test.envers.tools.TestTools; - import org.hibernate.testing.SkipForDialect; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Assert; -import org.junit.Test; +import org.hibernate.testing.orm.junit.Jpa; +import org.hibernate.testing.orm.junit.Setting; +import org.junit.jupiter.api.Test; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; /** * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) */ @JiraKey(value = "HHH-5845") -public class RemovedObjectQueryTest extends BaseEnversJPAFunctionalTestCase { +@Jpa(annotatedClasses = { + SetRefEdEntity.class, SetRefIngEntity.class, SetOwnedEntity.class, SetOwningEntity.class, + StringSetEntity.class, UnversionedStrTestEntity.class, M2MIndexedListTargetNotAuditedEntity.class, + TernaryMapEntity.class, StrTestPrivSeqEntity.class, IntTestPrivSeqEntity.class, + CollectionRefEdEntity.class, CollectionRefIngEntity.class, ListOwnedEntity.class, ListOwningEntity.class +}, integrationSettings = @Setting(name = EnversSettings.STORE_DATA_AT_DELETE, value = "true")) +@EnversTest +public class RemovedObjectQueryTest { private Integer stringSetId = null; private Integer ternaryMapId = null; private UnversionedStrTestEntity unversionedEntity1 = null; @@ -54,547 +64,569 @@ public class RemovedObjectQueryTest extends BaseEnversJPAFunctionalTestCase { private IntTestPrivSeqEntity intEntity1 = null; private IntTestPrivSeqEntity intEntity2 = null; - @Override - protected void addConfigOptions(Map options) { - super.addConfigOptions( options ); - options.put( EnversSettings.STORE_DATA_AT_DELETE, "true" ); - } - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { - SetRefEdEntity.class, SetRefIngEntity.class, SetOwnedEntity.class, SetOwningEntity.class, - StringSetEntity.class, UnversionedStrTestEntity.class, M2MIndexedListTargetNotAuditedEntity.class, - TernaryMapEntity.class, StrTestPrivSeqEntity.class, IntTestPrivSeqEntity.class, - CollectionRefEdEntity.class, CollectionRefIngEntity.class, ListOwnedEntity.class, ListOwningEntity.class - }; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - SetRefEdEntity refEdEntity1 = new SetRefEdEntity( 1, "Demo Data 1" ); - SetRefIngEntity refIngEntity1 = new SetRefIngEntity( 2, "Example Data 1", refEdEntity1 ); - - // Revision 1 - em.getTransaction().begin(); - em.persist( refEdEntity1 ); - em.persist( refIngEntity1 ); - em.getTransaction().commit(); - - // Revision 2 - removing both object in the same revision - em.getTransaction().begin(); - refEdEntity1 = em.find( SetRefEdEntity.class, 1 ); - refIngEntity1 = em.find( SetRefIngEntity.class, 2 ); - em.remove( refIngEntity1 ); - em.remove( refEdEntity1 ); - em.getTransaction().commit(); - - SetRefEdEntity refEdEntity2 = new SetRefEdEntity( 3, "Demo Data 2" ); - SetRefIngEntity refIngEntity2 = new SetRefIngEntity( 4, "Example Data 2", refEdEntity2 ); - - // Revision 3 - em.getTransaction().begin(); - em.persist( refEdEntity2 ); - em.persist( refIngEntity2 ); - em.getTransaction().commit(); - - // Revision 4 - removing child object - em.getTransaction().begin(); - refIngEntity2 = em.find( SetRefIngEntity.class, 4 ); - em.remove( refIngEntity2 ); - em.getTransaction().commit(); - - // Revision 5 - removing parent object - em.getTransaction().begin(); - refEdEntity2 = em.find( SetRefEdEntity.class, 3 ); - em.remove( refEdEntity2 ); - em.getTransaction().commit(); - - SetOwningEntity setOwningEntity1 = new SetOwningEntity( 5, "Demo Data 1" ); - SetOwnedEntity setOwnedEntity1 = new SetOwnedEntity( 6, "Example Data 1" ); - Set owning = new HashSet(); - Set owned = new HashSet(); - owning.add( setOwningEntity1 ); - owned.add( setOwnedEntity1 ); - setOwningEntity1.setReferences( owned ); - setOwnedEntity1.setReferencing( owning ); - - // Revision 6 - em.getTransaction().begin(); - em.persist( setOwnedEntity1 ); - em.persist( setOwningEntity1 ); - em.getTransaction().commit(); - - // Revision 7 - removing both object in the same revision - em.getTransaction().begin(); - setOwnedEntity1 = em.find( SetOwnedEntity.class, 6 ); - setOwningEntity1 = em.find( SetOwningEntity.class, 5 ); - em.remove( setOwningEntity1 ); - em.remove( setOwnedEntity1 ); - em.getTransaction().commit(); - - SetOwningEntity setOwningEntity2 = new SetOwningEntity( 7, "Demo Data 2" ); - SetOwnedEntity setOwnedEntity2 = new SetOwnedEntity( 8, "Example Data 2" ); - owning = new HashSet(); - owned = new HashSet(); - owning.add( setOwningEntity2 ); - owned.add( setOwnedEntity2 ); - setOwningEntity2.setReferences( owned ); - setOwnedEntity2.setReferencing( owning ); - - // Revision 8 - em.getTransaction().begin(); - em.persist( setOwnedEntity2 ); - em.persist( setOwningEntity2 ); - em.getTransaction().commit(); - - // Revision 9 - removing first object - em.getTransaction().begin(); - setOwningEntity2 = em.find( SetOwningEntity.class, 7 ); - setOwnedEntity2.getReferencing().remove( setOwningEntity2 ); - em.remove( setOwningEntity2 ); - em.getTransaction().commit(); - - // Revision 10 - removing second object - em.getTransaction().begin(); - setOwnedEntity2 = em.find( SetOwnedEntity.class, 8 ); - em.remove( setOwnedEntity2 ); - em.getTransaction().commit(); - - StringSetEntity stringSetEntity = new StringSetEntity(); - stringSetEntity.getStrings().add( "string 1" ); - stringSetEntity.getStrings().add( "string 2" ); - - // Revision 11 - em.getTransaction().begin(); - em.persist( stringSetEntity ); - em.getTransaction().commit(); - - stringSetId = stringSetEntity.getId(); - - // Revision 12 - removing element collection - em.getTransaction().begin(); - stringSetEntity = em.find( StringSetEntity.class, stringSetEntity.getId() ); - em.remove( stringSetEntity ); - em.getTransaction().commit(); - - // Revision 13 - em.getTransaction().begin(); - unversionedEntity1 = new UnversionedStrTestEntity( "string 1" ); - unversionedEntity2 = new UnversionedStrTestEntity( "string 2" ); - M2MIndexedListTargetNotAuditedEntity relationNotAuditedEntity = new M2MIndexedListTargetNotAuditedEntity( - 1, - "Parent" - ); - relationNotAuditedEntity.getReferences().add( unversionedEntity1 ); - relationNotAuditedEntity.getReferences().add( unversionedEntity2 ); - em.persist( unversionedEntity1 ); - em.persist( unversionedEntity2 ); - em.persist( relationNotAuditedEntity ); - em.getTransaction().commit(); - - // Revision 14 - removing entity with unversioned relation - em.getTransaction().begin(); - relationNotAuditedEntity = em.find( - M2MIndexedListTargetNotAuditedEntity.class, - relationNotAuditedEntity.getId() - ); - em.remove( relationNotAuditedEntity ); - em.getTransaction().commit(); - - stringEntity1 = new StrTestPrivSeqEntity( "Value 1" ); - stringEntity2 = new StrTestPrivSeqEntity( "Value 2" ); - intEntity1 = new IntTestPrivSeqEntity( 1 ); - intEntity2 = new IntTestPrivSeqEntity( 2 ); - TernaryMapEntity mapEntity = new TernaryMapEntity(); - mapEntity.getMap().put( intEntity1, stringEntity1 ); - mapEntity.getMap().put( intEntity2, stringEntity2 ); - - // Revision 15 - em.getTransaction().begin(); - em.persist( stringEntity1 ); - em.persist( stringEntity2 ); - em.persist( intEntity1 ); - em.persist( intEntity2 ); - em.persist( mapEntity ); - em.getTransaction().commit(); - - ternaryMapId = mapEntity.getId(); - - // Revision 16 - updating ternary map - em.getTransaction().begin(); - intEntity2 = em.find( IntTestPrivSeqEntity.class, intEntity2.getId() ); - intEntity2.setNumber( 3 ); - intEntity2 = em.merge( intEntity2 ); - stringEntity2 = em.find( StrTestPrivSeqEntity.class, stringEntity2.getId() ); - stringEntity2.setStr( "Value 3" ); - stringEntity2 = em.merge( stringEntity2 ); - em.getTransaction().commit(); - - // Revision 17 - removing ternary map - em.getTransaction().begin(); - mapEntity = em.find( TernaryMapEntity.class, mapEntity.getId() ); - em.remove( mapEntity ); - em.getTransaction().commit(); - - CollectionRefEdEntity collEd1 = new CollectionRefEdEntity( 1, "data_ed_1" ); - CollectionRefIngEntity collIng1 = new CollectionRefIngEntity( 2, "data_ing_1", collEd1 ); - collEd1.setReffering( new ArrayList() ); - collEd1.getReffering().add( collIng1 ); - - // Revision 18 - testing one-to-many collection - em.getTransaction().begin(); - em.persist( collEd1 ); - em.persist( collIng1 ); - em.getTransaction().commit(); - - // Revision 19 - em.getTransaction().begin(); - collIng1 = em.find( CollectionRefIngEntity.class, collIng1.getId() ); - collIng1.setData( "modified data_ing_1" ); - collIng1 = em.merge( collIng1 ); - em.getTransaction().commit(); - - // Revision 20 - em.getTransaction().begin(); - collEd1 = em.find( CollectionRefEdEntity.class, collEd1.getId() ); - collIng1 = em.find( CollectionRefIngEntity.class, collIng1.getId() ); - em.remove( collIng1 ); - em.remove( collEd1 ); - em.getTransaction().commit(); - - ListOwnedEntity listEd1 = new ListOwnedEntity( 1, "data_ed_1" ); - ListOwningEntity listIng1 = new ListOwningEntity( 2, "data_ing_1" ); - listEd1.setReferencing( new ArrayList() ); - listIng1.setReferences( new ArrayList() ); - listEd1.getReferencing().add( listIng1 ); - listIng1.getReferences().add( listEd1 ); - - // Revision 21 - testing many-to-many collection - em.getTransaction().begin(); - em.persist( listEd1 ); - em.persist( listIng1 ); - em.getTransaction().commit(); - - // Revision 22 - em.getTransaction().begin(); - listIng1 = em.find( ListOwningEntity.class, listIng1.getId() ); - listIng1.setData( "modified data_ing_1" ); - listIng1 = em.merge( listIng1 ); - em.getTransaction().commit(); - - // Revision 23 - em.getTransaction().begin(); - listIng1 = em.find( ListOwningEntity.class, listIng1.getId() ); - listEd1 = em.find( ListOwnedEntity.class, listEd1.getId() ); - em.remove( listIng1 ); - em.remove( listEd1 ); - em.getTransaction().commit(); - - em.close(); + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + SetRefEdEntity refEdEntity1 = new SetRefEdEntity( 1, "Demo Data 1" ); + SetRefIngEntity refIngEntity1 = new SetRefIngEntity( 2, "Example Data 1", refEdEntity1 ); + + // Revision 1 + em.getTransaction().begin(); + em.persist( refEdEntity1 ); + em.persist( refIngEntity1 ); + em.getTransaction().commit(); + + // Revision 2 - removing both object in the same revision + em.getTransaction().begin(); + refEdEntity1 = em.find( SetRefEdEntity.class, 1 ); + refIngEntity1 = em.find( SetRefIngEntity.class, 2 ); + em.remove( refIngEntity1 ); + em.remove( refEdEntity1 ); + em.getTransaction().commit(); + + SetRefEdEntity refEdEntity2 = new SetRefEdEntity( 3, "Demo Data 2" ); + SetRefIngEntity refIngEntity2 = new SetRefIngEntity( 4, "Example Data 2", refEdEntity2 ); + + // Revision 3 + em.getTransaction().begin(); + em.persist( refEdEntity2 ); + em.persist( refIngEntity2 ); + em.getTransaction().commit(); + + // Revision 4 - removing child object + em.getTransaction().begin(); + refIngEntity2 = em.find( SetRefIngEntity.class, 4 ); + em.remove( refIngEntity2 ); + em.getTransaction().commit(); + + // Revision 5 - removing parent object + em.getTransaction().begin(); + refEdEntity2 = em.find( SetRefEdEntity.class, 3 ); + em.remove( refEdEntity2 ); + em.getTransaction().commit(); + + SetOwningEntity setOwningEntity1 = new SetOwningEntity( 5, "Demo Data 1" ); + SetOwnedEntity setOwnedEntity1 = new SetOwnedEntity( 6, "Example Data 1" ); + Set owning = new HashSet(); + Set owned = new HashSet(); + owning.add( setOwningEntity1 ); + owned.add( setOwnedEntity1 ); + setOwningEntity1.setReferences( owned ); + setOwnedEntity1.setReferencing( owning ); + + // Revision 6 + em.getTransaction().begin(); + em.persist( setOwnedEntity1 ); + em.persist( setOwningEntity1 ); + em.getTransaction().commit(); + + // Revision 7 - removing both object in the same revision + em.getTransaction().begin(); + setOwnedEntity1 = em.find( SetOwnedEntity.class, 6 ); + setOwningEntity1 = em.find( SetOwningEntity.class, 5 ); + em.remove( setOwningEntity1 ); + em.remove( setOwnedEntity1 ); + em.getTransaction().commit(); + + SetOwningEntity setOwningEntity2 = new SetOwningEntity( 7, "Demo Data 2" ); + SetOwnedEntity setOwnedEntity2 = new SetOwnedEntity( 8, "Example Data 2" ); + owning = new HashSet(); + owned = new HashSet(); + owning.add( setOwningEntity2 ); + owned.add( setOwnedEntity2 ); + setOwningEntity2.setReferences( owned ); + setOwnedEntity2.setReferencing( owning ); + + // Revision 8 + em.getTransaction().begin(); + em.persist( setOwnedEntity2 ); + em.persist( setOwningEntity2 ); + em.getTransaction().commit(); + + // Revision 9 - removing first object + em.getTransaction().begin(); + setOwningEntity2 = em.find( SetOwningEntity.class, 7 ); + setOwnedEntity2.getReferencing().remove( setOwningEntity2 ); + em.remove( setOwningEntity2 ); + em.getTransaction().commit(); + + // Revision 10 - removing second object + em.getTransaction().begin(); + setOwnedEntity2 = em.find( SetOwnedEntity.class, 8 ); + em.remove( setOwnedEntity2 ); + em.getTransaction().commit(); + + StringSetEntity stringSetEntity = new StringSetEntity(); + stringSetEntity.getStrings().add( "string 1" ); + stringSetEntity.getStrings().add( "string 2" ); + + // Revision 11 + em.getTransaction().begin(); + em.persist( stringSetEntity ); + em.getTransaction().commit(); + + stringSetId = stringSetEntity.getId(); + + // Revision 12 - removing element collection + em.getTransaction().begin(); + stringSetEntity = em.find( StringSetEntity.class, stringSetEntity.getId() ); + em.remove( stringSetEntity ); + em.getTransaction().commit(); + + // Revision 13 + em.getTransaction().begin(); + unversionedEntity1 = new UnversionedStrTestEntity( "string 1" ); + unversionedEntity2 = new UnversionedStrTestEntity( "string 2" ); + M2MIndexedListTargetNotAuditedEntity relationNotAuditedEntity = new M2MIndexedListTargetNotAuditedEntity( + 1, + "Parent" + ); + relationNotAuditedEntity.getReferences().add( unversionedEntity1 ); + relationNotAuditedEntity.getReferences().add( unversionedEntity2 ); + em.persist( unversionedEntity1 ); + em.persist( unversionedEntity2 ); + em.persist( relationNotAuditedEntity ); + em.getTransaction().commit(); + + // Revision 14 - removing entity with unversioned relation + em.getTransaction().begin(); + relationNotAuditedEntity = em.find( + M2MIndexedListTargetNotAuditedEntity.class, + relationNotAuditedEntity.getId() + ); + em.remove( relationNotAuditedEntity ); + em.getTransaction().commit(); + + stringEntity1 = new StrTestPrivSeqEntity( "Value 1" ); + stringEntity2 = new StrTestPrivSeqEntity( "Value 2" ); + intEntity1 = new IntTestPrivSeqEntity( 1 ); + intEntity2 = new IntTestPrivSeqEntity( 2 ); + TernaryMapEntity mapEntity = new TernaryMapEntity(); + mapEntity.getMap().put( intEntity1, stringEntity1 ); + mapEntity.getMap().put( intEntity2, stringEntity2 ); + + // Revision 15 + em.getTransaction().begin(); + em.persist( stringEntity1 ); + em.persist( stringEntity2 ); + em.persist( intEntity1 ); + em.persist( intEntity2 ); + em.persist( mapEntity ); + em.getTransaction().commit(); + + ternaryMapId = mapEntity.getId(); + + // Revision 16 - updating ternary map + em.getTransaction().begin(); + intEntity2 = em.find( IntTestPrivSeqEntity.class, intEntity2.getId() ); + intEntity2.setNumber( 3 ); + intEntity2 = em.merge( intEntity2 ); + stringEntity2 = em.find( StrTestPrivSeqEntity.class, stringEntity2.getId() ); + stringEntity2.setStr( "Value 3" ); + stringEntity2 = em.merge( stringEntity2 ); + em.getTransaction().commit(); + + // Revision 17 - removing ternary map + em.getTransaction().begin(); + mapEntity = em.find( TernaryMapEntity.class, mapEntity.getId() ); + em.remove( mapEntity ); + em.getTransaction().commit(); + + CollectionRefEdEntity collEd1 = new CollectionRefEdEntity( 1, "data_ed_1" ); + CollectionRefIngEntity collIng1 = new CollectionRefIngEntity( 2, "data_ing_1", collEd1 ); + collEd1.setReffering( new ArrayList() ); + collEd1.getReffering().add( collIng1 ); + + // Revision 18 - testing one-to-many collection + em.getTransaction().begin(); + em.persist( collEd1 ); + em.persist( collIng1 ); + em.getTransaction().commit(); + + // Revision 19 + em.getTransaction().begin(); + collIng1 = em.find( CollectionRefIngEntity.class, collIng1.getId() ); + collIng1.setData( "modified data_ing_1" ); + collIng1 = em.merge( collIng1 ); + em.getTransaction().commit(); + + // Revision 20 + em.getTransaction().begin(); + collEd1 = em.find( CollectionRefEdEntity.class, collEd1.getId() ); + collIng1 = em.find( CollectionRefIngEntity.class, collIng1.getId() ); + em.remove( collIng1 ); + em.remove( collEd1 ); + em.getTransaction().commit(); + + ListOwnedEntity listEd1 = new ListOwnedEntity( 1, "data_ed_1" ); + ListOwningEntity listIng1 = new ListOwningEntity( 2, "data_ing_1" ); + listEd1.setReferencing( new ArrayList() ); + listIng1.setReferences( new ArrayList() ); + listEd1.getReferencing().add( listIng1 ); + listIng1.getReferences().add( listEd1 ); + + // Revision 21 - testing many-to-many collection + em.getTransaction().begin(); + em.persist( listEd1 ); + em.persist( listIng1 ); + em.getTransaction().commit(); + + // Revision 22 + em.getTransaction().begin(); + listIng1 = em.find( ListOwningEntity.class, listIng1.getId() ); + listIng1.setData( "modified data_ing_1" ); + listIng1 = em.merge( listIng1 ); + em.getTransaction().commit(); + + // Revision 23 + em.getTransaction().begin(); + listIng1 = em.find( ListOwningEntity.class, listIng1.getId() ); + listEd1 = em.find( ListOwnedEntity.class, listEd1.getId() ); + em.remove( listIng1 ); + em.remove( listEd1 ); + em.getTransaction().commit(); + } ); } @Test @SkipForDialect(value = HSQLDialect.class, comment = "No idea why this fails. Looks like a HSQLDB bug") - public void testTernaryMap() { - final TernaryMapEntity ternaryMap = new TernaryMapEntity(); - ternaryMap.setId( ternaryMapId ); - ternaryMap.getMap().put( intEntity1, stringEntity1 ); - ternaryMap.getMap().put( new IntTestPrivSeqEntity( 2, intEntity2.getId() ) , new StrTestPrivSeqEntity( "Value 2", stringEntity2.getId() ) ); + public void testTernaryMap(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final TernaryMapEntity ternaryMap = new TernaryMapEntity(); + ternaryMap.setId( ternaryMapId ); + ternaryMap.getMap().put( intEntity1, stringEntity1 ); + ternaryMap.getMap().put( new IntTestPrivSeqEntity( 2, intEntity2.getId() ), + new StrTestPrivSeqEntity( "Value 2", stringEntity2.getId() ) ); - TernaryMapEntity entity = getAuditReader().find( TernaryMapEntity.class, ternaryMapId, 15 ); + TernaryMapEntity entity = AuditReaderFactory.get( em ).find( TernaryMapEntity.class, ternaryMapId, 15 ); - Assert.assertEquals( ternaryMap.getMap(), entity.getMap() ); + assertEquals( ternaryMap.getMap(), entity.getMap() ); - ternaryMap.getMap().clear(); - ternaryMap.getMap().put( intEntity1, stringEntity1 ); - ternaryMap.getMap().put( intEntity2, stringEntity2 ); + ternaryMap.getMap().clear(); + ternaryMap.getMap().put( intEntity1, stringEntity1 ); + ternaryMap.getMap().put( intEntity2, stringEntity2 ); - entity = getAuditReader().find( TernaryMapEntity.class, ternaryMapId, 16 ); + entity = AuditReaderFactory.get( em ).find( TernaryMapEntity.class, ternaryMapId, 16 ); - Assert.assertEquals( ternaryMap.getMap(), entity.getMap() ); + assertEquals( ternaryMap.getMap(), entity.getMap() ); - List queryResult = getAuditReader().createQuery().forRevisionsOfEntity( TernaryMapEntity.class, false, true ) - .add( AuditEntity.id().eq( ternaryMapId ) ) - .add( AuditEntity.revisionType().eq( RevisionType.DEL ) ) - .getResultList(); - Object[] objArray = (Object[]) queryResult.get( 0 ); + List queryResult = AuditReaderFactory.get( em ).createQuery() + .forRevisionsOfEntity( TernaryMapEntity.class, false, true ) + .add( AuditEntity.id().eq( ternaryMapId ) ) + .add( AuditEntity.revisionType().eq( RevisionType.DEL ) ) + .getResultList(); + Object[] objArray = (Object[]) queryResult.get( 0 ); - Assert.assertEquals( 17, getRevisionNumber( objArray[1] ) ); + assertEquals( 17, getRevisionNumber( objArray[1] ) ); - entity = (TernaryMapEntity) objArray[0]; - Assert.assertEquals( ternaryMap.getMap(), entity.getMap() ); + entity = (TernaryMapEntity) objArray[0]; + assertEquals( ternaryMap.getMap(), entity.getMap() ); + } ); } @Test - public void testUnversionedRelation() { - List queryResult = getAuditReader().createQuery() - .forRevisionsOfEntity( M2MIndexedListTargetNotAuditedEntity.class, false, true ) - .add( AuditEntity.id().eq( 1 ) ) - .add( AuditEntity.revisionType().eq( RevisionType.DEL ) ) - .getResultList(); - Object[] objArray = (Object[]) queryResult.get( 0 ); - - Assert.assertEquals( 14, getRevisionNumber( objArray[1] ) ); - - M2MIndexedListTargetNotAuditedEntity relationNotAuditedEntity = (M2MIndexedListTargetNotAuditedEntity) objArray[0]; - Assert.assertTrue( - TestTools.checkCollection( - relationNotAuditedEntity.getReferences(), - unversionedEntity1, unversionedEntity2 - ) - ); + public void testUnversionedRelation(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + List queryResult = AuditReaderFactory.get( em ).createQuery() + .forRevisionsOfEntity( M2MIndexedListTargetNotAuditedEntity.class, false, true ) + .add( AuditEntity.id().eq( 1 ) ) + .add( AuditEntity.revisionType().eq( RevisionType.DEL ) ) + .getResultList(); + Object[] objArray = (Object[]) queryResult.get( 0 ); + + assertEquals( 14, getRevisionNumber( objArray[1] ) ); + + M2MIndexedListTargetNotAuditedEntity relationNotAuditedEntity = (M2MIndexedListTargetNotAuditedEntity) objArray[0]; + assertTrue( + TestTools.checkCollection( + relationNotAuditedEntity.getReferences(), + unversionedEntity1, unversionedEntity2 + ) + ); + } ); } @Test - public void testElementCollection() { - List queryResult = getAuditReader().createQuery().forRevisionsOfEntity( StringSetEntity.class, false, true ) - .add( AuditEntity.id().eq( stringSetId ) ) - .add( AuditEntity.revisionType().eq( RevisionType.DEL ) ) - .getResultList(); - Object[] objArray = (Object[]) queryResult.get( 0 ); - - Assert.assertEquals( 12, getRevisionNumber( objArray[1] ) ); - - StringSetEntity stringSetEntity = (StringSetEntity) objArray[0]; - Assert.assertEquals( TestTools.makeSet( "string 1", "string 2" ), stringSetEntity.getStrings() ); + public void testElementCollection(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + List queryResult = AuditReaderFactory.get( em ).createQuery() + .forRevisionsOfEntity( StringSetEntity.class, false, true ) + .add( AuditEntity.id().eq( stringSetId ) ) + .add( AuditEntity.revisionType().eq( RevisionType.DEL ) ) + .getResultList(); + Object[] objArray = (Object[]) queryResult.get( 0 ); + + assertEquals( 12, getRevisionNumber( objArray[1] ) ); + + StringSetEntity stringSetEntity = (StringSetEntity) objArray[0]; + assertEquals( TestTools.makeSet( "string 1", "string 2" ), stringSetEntity.getStrings() ); + } ); } // One to many tests. @Test - public void testOneToManyCollectionSemantics() { - final CollectionRefEdEntity edVer1 = new CollectionRefEdEntity( 1, "data_ed_1" ); - final CollectionRefIngEntity ingVer1 = new CollectionRefIngEntity( 2, "data_ing_1" ); - final CollectionRefIngEntity ingVer2 = new CollectionRefIngEntity( 2, "modified data_ing_1" ); + public void testOneToManyCollectionSemantics(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final CollectionRefEdEntity edVer1 = new CollectionRefEdEntity( 1, "data_ed_1" ); + final CollectionRefIngEntity ingVer1 = new CollectionRefIngEntity( 2, "data_ing_1" ); + final CollectionRefIngEntity ingVer2 = new CollectionRefIngEntity( 2, "modified data_ing_1" ); - CollectionRefEdEntity entity = getAuditReader().find( CollectionRefEdEntity.class, 1, 18 ); + CollectionRefEdEntity entity = AuditReaderFactory.get( em ).find( CollectionRefEdEntity.class, 1, 18 ); - Assert.assertEquals( edVer1, entity ); - Assert.assertTrue( TestTools.checkCollection( entity.getReffering(), ingVer1 ) ); + assertEquals( edVer1, entity ); + assertTrue( TestTools.checkCollection( entity.getReffering(), ingVer1 ) ); - entity = getAuditReader().find( CollectionRefEdEntity.class, 1, 19 ); + entity = AuditReaderFactory.get( em ).find( CollectionRefEdEntity.class, 1, 19 ); - Assert.assertTrue( TestTools.checkCollection( entity.getReffering(), ingVer2 ) ); + assertTrue( TestTools.checkCollection( entity.getReffering(), ingVer2 ) ); - List queryResult = getAuditReader().createQuery().forRevisionsOfEntity( CollectionRefEdEntity.class, false, true ) - .add( AuditEntity.id().eq( 1 ) ) - .add( AuditEntity.revisionType().eq( RevisionType.DEL ) ) - .getResultList(); - Object[] objArray = (Object[]) queryResult.get( 0 ); + List queryResult = AuditReaderFactory.get( em ).createQuery() + .forRevisionsOfEntity( CollectionRefEdEntity.class, false, true ) + .add( AuditEntity.id().eq( 1 ) ) + .add( AuditEntity.revisionType().eq( RevisionType.DEL ) ) + .getResultList(); + Object[] objArray = (Object[]) queryResult.get( 0 ); - Assert.assertEquals( 20, getRevisionNumber( objArray[1] ) ); + assertEquals( 20, getRevisionNumber( objArray[1] ) ); - entity = (CollectionRefEdEntity) objArray[0]; - Assert.assertEquals( "data_ed_1", entity.getData() ); - Assert.assertTrue( TestTools.checkCollection( entity.getReffering(), ingVer2 ) ); + entity = (CollectionRefEdEntity) objArray[0]; + assertEquals( "data_ed_1", entity.getData() ); + assertTrue( TestTools.checkCollection( entity.getReffering(), ingVer2 ) ); + } ); } @Test - public void testReferencedOneToManySameRevision() { - List queryResult = getAuditReader().createQuery().forRevisionsOfEntity( SetRefIngEntity.class, false, true ) - .add( AuditEntity.id().eq( 2 ) ) - .add( AuditEntity.revisionType().eq( RevisionType.DEL ) ) - .getResultList(); - Object[] objArray = (Object[]) queryResult.get( 0 ); - - Assert.assertEquals( 2, getRevisionNumber( objArray[1] ) ); - - SetRefIngEntity refIngEntity = (SetRefIngEntity) objArray[0]; - Assert.assertEquals( "Example Data 1", refIngEntity.getData() ); - - Hibernate.initialize( refIngEntity.getReference() ); - Assert.assertEquals( "Demo Data 1", refIngEntity.getReference().getData() ); + public void testReferencedOneToManySameRevision(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + List queryResult = AuditReaderFactory.get( em ).createQuery() + .forRevisionsOfEntity( SetRefIngEntity.class, false, true ) + .add( AuditEntity.id().eq( 2 ) ) + .add( AuditEntity.revisionType().eq( RevisionType.DEL ) ) + .getResultList(); + Object[] objArray = (Object[]) queryResult.get( 0 ); + + assertEquals( 2, getRevisionNumber( objArray[1] ) ); + + SetRefIngEntity refIngEntity = (SetRefIngEntity) objArray[0]; + assertEquals( "Example Data 1", refIngEntity.getData() ); + + Hibernate.initialize( refIngEntity.getReference() ); + assertEquals( "Demo Data 1", refIngEntity.getReference().getData() ); + } ); } @Test - public void testReferringOneToManySameRevision() { - List queryResult = getAuditReader().createQuery().forRevisionsOfEntity( SetRefEdEntity.class, false, true ) - .add( AuditEntity.id().eq( 1 ) ) - .add( AuditEntity.revisionType().eq( RevisionType.DEL ) ) - .getResultList(); - Object[] objArray = (Object[]) queryResult.get( 0 ); - - Assert.assertEquals( 2, getRevisionNumber( objArray[1] ) ); - - SetRefEdEntity refEdEntity = (SetRefEdEntity) objArray[0]; - Assert.assertEquals( "Demo Data 1", refEdEntity.getData() ); - - Hibernate.initialize( refEdEntity.getReffering() ); - Assert.assertEquals( - TestTools.makeSet( new SetRefIngEntity( 2, "Example Data 1" ) ), - refEdEntity.getReffering() - ); + public void testReferringOneToManySameRevision(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + List queryResult = AuditReaderFactory.get( em ).createQuery() + .forRevisionsOfEntity( SetRefEdEntity.class, false, true ) + .add( AuditEntity.id().eq( 1 ) ) + .add( AuditEntity.revisionType().eq( RevisionType.DEL ) ) + .getResultList(); + Object[] objArray = (Object[]) queryResult.get( 0 ); + + assertEquals( 2, getRevisionNumber( objArray[1] ) ); + + SetRefEdEntity refEdEntity = (SetRefEdEntity) objArray[0]; + assertEquals( "Demo Data 1", refEdEntity.getData() ); + + Hibernate.initialize( refEdEntity.getReffering() ); + assertEquals( + TestTools.makeSet( new SetRefIngEntity( 2, "Example Data 1" ) ), + refEdEntity.getReffering() + ); + } ); } @Test - public void testReferencedOneToManyDifferentRevisions() { - List queryResult = getAuditReader().createQuery().forRevisionsOfEntity( SetRefIngEntity.class, false, true ) - .add( AuditEntity.id().eq( 4 ) ) - .add( AuditEntity.revisionType().eq( RevisionType.DEL ) ) - .getResultList(); - Object[] objArray = (Object[]) queryResult.get( 0 ); - - Assert.assertEquals( 4, getRevisionNumber( objArray[1] ) ); - - SetRefIngEntity refIngEntity = (SetRefIngEntity) objArray[0]; - Assert.assertEquals( "Example Data 2", refIngEntity.getData() ); - - Hibernate.initialize( refIngEntity.getReference() ); - Assert.assertEquals( "Demo Data 2", refIngEntity.getReference().getData() ); + public void testReferencedOneToManyDifferentRevisions(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + List queryResult = AuditReaderFactory.get( em ).createQuery() + .forRevisionsOfEntity( SetRefIngEntity.class, false, true ) + .add( AuditEntity.id().eq( 4 ) ) + .add( AuditEntity.revisionType().eq( RevisionType.DEL ) ) + .getResultList(); + Object[] objArray = (Object[]) queryResult.get( 0 ); + + assertEquals( 4, getRevisionNumber( objArray[1] ) ); + + SetRefIngEntity refIngEntity = (SetRefIngEntity) objArray[0]; + assertEquals( "Example Data 2", refIngEntity.getData() ); + + Hibernate.initialize( refIngEntity.getReference() ); + assertEquals( "Demo Data 2", refIngEntity.getReference().getData() ); + } ); } @Test - public void testReferringOneToManyDifferentRevisions() { - List queryResult = getAuditReader().createQuery().forRevisionsOfEntity( SetRefEdEntity.class, false, true ) - .add( AuditEntity.id().eq( 3 ) ) - .add( AuditEntity.revisionType().eq( RevisionType.DEL ) ) - .getResultList(); - Object[] objArray = (Object[]) queryResult.get( 0 ); - - Assert.assertEquals( 5, getRevisionNumber( objArray[1] ) ); - - SetRefEdEntity refEdEntity = (SetRefEdEntity) objArray[0]; - Assert.assertEquals( "Demo Data 2", refEdEntity.getData() ); - - Hibernate.initialize( refEdEntity.getReffering() ); - Assert.assertTrue( refEdEntity.getReffering().isEmpty() ); - - // After commit in revision four, child entity has been removed. - queryResult = getAuditReader().createQuery().forRevisionsOfEntity( SetRefEdEntity.class, false, true ) - .add( AuditEntity.id().eq( 3 ) ) - .add( AuditEntity.revisionNumber().eq( 4 ) ) - .getResultList(); - objArray = (Object[]) queryResult.get( 0 ); - - refEdEntity = (SetRefEdEntity) objArray[0]; - Assert.assertEquals( "Demo Data 2", refEdEntity.getData() ); - - Hibernate.initialize( refEdEntity.getReffering() ); - Assert.assertTrue( refEdEntity.getReffering().isEmpty() ); + public void testReferringOneToManyDifferentRevisions(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + List queryResult = AuditReaderFactory.get( em ).createQuery() + .forRevisionsOfEntity( SetRefEdEntity.class, false, true ) + .add( AuditEntity.id().eq( 3 ) ) + .add( AuditEntity.revisionType().eq( RevisionType.DEL ) ) + .getResultList(); + Object[] objArray = (Object[]) queryResult.get( 0 ); + + assertEquals( 5, getRevisionNumber( objArray[1] ) ); + + SetRefEdEntity refEdEntity = (SetRefEdEntity) objArray[0]; + assertEquals( "Demo Data 2", refEdEntity.getData() ); + + Hibernate.initialize( refEdEntity.getReffering() ); + assertTrue( refEdEntity.getReffering().isEmpty() ); + + // After commit in revision four, child entity has been removed. + queryResult = AuditReaderFactory.get( em ).createQuery() + .forRevisionsOfEntity( SetRefEdEntity.class, false, true ) + .add( AuditEntity.id().eq( 3 ) ) + .add( AuditEntity.revisionNumber().eq( 4 ) ) + .getResultList(); + objArray = (Object[]) queryResult.get( 0 ); + + refEdEntity = (SetRefEdEntity) objArray[0]; + assertEquals( "Demo Data 2", refEdEntity.getData() ); + + Hibernate.initialize( refEdEntity.getReffering() ); + assertTrue( refEdEntity.getReffering().isEmpty() ); + } ); } // Many to many tests. @Test - public void testManyToManyCollectionSemantics() { - final ListOwnedEntity edVer1 = new ListOwnedEntity( 1, "data_ed_1" ); - final ListOwningEntity ingVer1 = new ListOwningEntity( 2, "data_ing_1" ); - final ListOwningEntity ingVer2 = new ListOwningEntity( 2, "modified data_ing_1" ); + public void testManyToManyCollectionSemantics(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final ListOwnedEntity edVer1 = new ListOwnedEntity( 1, "data_ed_1" ); + final ListOwningEntity ingVer1 = new ListOwningEntity( 2, "data_ing_1" ); + final ListOwningEntity ingVer2 = new ListOwningEntity( 2, "modified data_ing_1" ); - ListOwnedEntity entity = getAuditReader().find( ListOwnedEntity.class, 1, 21 ); + ListOwnedEntity entity = AuditReaderFactory.get( em ).find( ListOwnedEntity.class, 1, 21 ); - Assert.assertEquals( edVer1, entity ); - Assert.assertTrue( TestTools.checkCollection( entity.getReferencing(), ingVer1 ) ); + assertEquals( edVer1, entity ); + assertTrue( TestTools.checkCollection( entity.getReferencing(), ingVer1 ) ); - entity = getAuditReader().find( ListOwnedEntity.class, 1, 22 ); + entity = AuditReaderFactory.get( em ).find( ListOwnedEntity.class, 1, 22 ); - Assert.assertTrue( TestTools.checkCollection( entity.getReferencing(), ingVer2 ) ); + assertTrue( TestTools.checkCollection( entity.getReferencing(), ingVer2 ) ); - List queryResult = getAuditReader().createQuery().forRevisionsOfEntity( ListOwnedEntity.class, false, true ) - .add( AuditEntity.id().eq( 1 ) ) - .add( AuditEntity.revisionType().eq( RevisionType.DEL ) ) - .getResultList(); - Object[] objArray = (Object[]) queryResult.get( 0 ); + List queryResult = AuditReaderFactory.get( em ).createQuery() + .forRevisionsOfEntity( ListOwnedEntity.class, false, true ) + .add( AuditEntity.id().eq( 1 ) ) + .add( AuditEntity.revisionType().eq( RevisionType.DEL ) ) + .getResultList(); + Object[] objArray = (Object[]) queryResult.get( 0 ); - Assert.assertEquals( 23, getRevisionNumber( objArray[1] ) ); + assertEquals( 23, getRevisionNumber( objArray[1] ) ); - entity = (ListOwnedEntity) objArray[0]; - Assert.assertEquals( "data_ed_1", entity.getData() ); - Assert.assertTrue( TestTools.checkCollection( entity.getReferencing(), ingVer2 ) ); + entity = (ListOwnedEntity) objArray[0]; + assertEquals( "data_ed_1", entity.getData() ); + assertTrue( TestTools.checkCollection( entity.getReferencing(), ingVer2 ) ); + } ); } @Test - public void testOwnedManyToManySameRevision() { - List queryResult = getAuditReader().createQuery().forRevisionsOfEntity( SetOwningEntity.class, false, true ) - .add( AuditEntity.id().eq( 5 ) ) - .add( AuditEntity.revisionType().eq( RevisionType.DEL ) ) - .getResultList(); - Object[] objArray = (Object[]) queryResult.get( 0 ); - - Assert.assertEquals( 7, getRevisionNumber( objArray[1] ) ); - - SetOwningEntity setOwningEntity = (SetOwningEntity) objArray[0]; - Assert.assertEquals( "Demo Data 1", setOwningEntity.getData() ); - - Hibernate.initialize( setOwningEntity.getReferences() ); - Assert.assertEquals( - TestTools.makeSet( new SetOwnedEntity( 6, "Example Data 1" ) ), - setOwningEntity.getReferences() - ); + public void testOwnedManyToManySameRevision(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + List queryResult = AuditReaderFactory.get( em ).createQuery() + .forRevisionsOfEntity( SetOwningEntity.class, false, true ) + .add( AuditEntity.id().eq( 5 ) ) + .add( AuditEntity.revisionType().eq( RevisionType.DEL ) ) + .getResultList(); + Object[] objArray = (Object[]) queryResult.get( 0 ); + + assertEquals( 7, getRevisionNumber( objArray[1] ) ); + + SetOwningEntity setOwningEntity = (SetOwningEntity) objArray[0]; + assertEquals( "Demo Data 1", setOwningEntity.getData() ); + + Hibernate.initialize( setOwningEntity.getReferences() ); + assertEquals( + TestTools.makeSet( new SetOwnedEntity( 6, "Example Data 1" ) ), + setOwningEntity.getReferences() + ); + } ); } @Test - public void testOwningManyToManySameRevision() { - List queryResult = getAuditReader().createQuery().forRevisionsOfEntity( SetOwnedEntity.class, false, true ) - .add( AuditEntity.id().eq( 6 ) ) - .add( AuditEntity.revisionType().eq( RevisionType.DEL ) ) - .getResultList(); - Object[] objArray = (Object[]) queryResult.get( 0 ); - - Assert.assertEquals( 7, getRevisionNumber( objArray[1] ) ); - - SetOwnedEntity setOwnedEntity = (SetOwnedEntity) objArray[0]; - Assert.assertEquals( "Example Data 1", setOwnedEntity.getData() ); - - Hibernate.initialize( setOwnedEntity.getReferencing() ); - Assert.assertEquals( - TestTools.makeSet( new SetOwningEntity( 5, "Demo Data 1" ) ), - setOwnedEntity.getReferencing() - ); + public void testOwningManyToManySameRevision(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + List queryResult = AuditReaderFactory.get( em ).createQuery() + .forRevisionsOfEntity( SetOwnedEntity.class, false, true ) + .add( AuditEntity.id().eq( 6 ) ) + .add( AuditEntity.revisionType().eq( RevisionType.DEL ) ) + .getResultList(); + Object[] objArray = (Object[]) queryResult.get( 0 ); + + assertEquals( 7, getRevisionNumber( objArray[1] ) ); + + SetOwnedEntity setOwnedEntity = (SetOwnedEntity) objArray[0]; + assertEquals( "Example Data 1", setOwnedEntity.getData() ); + + Hibernate.initialize( setOwnedEntity.getReferencing() ); + assertEquals( + TestTools.makeSet( new SetOwningEntity( 5, "Demo Data 1" ) ), + setOwnedEntity.getReferencing() + ); + } ); } @Test - public void testOwnedManyToManyDifferentRevisions() { - List queryResult = getAuditReader().createQuery().forRevisionsOfEntity( SetOwningEntity.class, false, true ) - .add( AuditEntity.id().eq( 7 ) ) - .add( AuditEntity.revisionType().eq( RevisionType.DEL ) ) - .getResultList(); - Object[] objArray = (Object[]) queryResult.get( 0 ); - - Assert.assertEquals( 9, getRevisionNumber( objArray[1] ) ); - - SetOwningEntity setOwningEntity = (SetOwningEntity) objArray[0]; - Assert.assertEquals( "Demo Data 2", setOwningEntity.getData() ); - - Hibernate.initialize( setOwningEntity.getReferences() ); - Assert.assertEquals( - TestTools.makeSet( new SetOwnedEntity( 8, "Example Data 2" ) ), - setOwningEntity.getReferences() - ); + public void testOwnedManyToManyDifferentRevisions(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + List queryResult = AuditReaderFactory.get( em ).createQuery() + .forRevisionsOfEntity( SetOwningEntity.class, false, true ) + .add( AuditEntity.id().eq( 7 ) ) + .add( AuditEntity.revisionType().eq( RevisionType.DEL ) ) + .getResultList(); + Object[] objArray = (Object[]) queryResult.get( 0 ); + + assertEquals( 9, getRevisionNumber( objArray[1] ) ); + + SetOwningEntity setOwningEntity = (SetOwningEntity) objArray[0]; + assertEquals( "Demo Data 2", setOwningEntity.getData() ); + + Hibernate.initialize( setOwningEntity.getReferences() ); + assertEquals( + TestTools.makeSet( new SetOwnedEntity( 8, "Example Data 2" ) ), + setOwningEntity.getReferences() + ); + } ); } @Test - public void testOwningManyToManyDifferentRevisions() { - List queryResult = getAuditReader().createQuery().forRevisionsOfEntity( SetOwnedEntity.class, false, true ) - .add( AuditEntity.id().eq( 8 ) ) - .add( AuditEntity.revisionType().eq( RevisionType.DEL ) ) - .getResultList(); - Object[] objArray = (Object[]) queryResult.get( 0 ); - - Assert.assertEquals( 10, getRevisionNumber( objArray[1] ) ); - - SetOwnedEntity setOwnedEntity = (SetOwnedEntity) objArray[0]; - Assert.assertEquals( "Example Data 2", setOwnedEntity.getData() ); - - Hibernate.initialize( setOwnedEntity.getReferencing() ); - Assert.assertTrue( setOwnedEntity.getReferencing().isEmpty() ); - - // After commit in revision nine, related entity has been removed. - queryResult = getAuditReader().createQuery().forRevisionsOfEntity( SetOwnedEntity.class, false, true ) - .add( AuditEntity.id().eq( 8 ) ) - .add( AuditEntity.revisionNumber().eq( 9 ) ) - .getResultList(); - objArray = (Object[]) queryResult.get( 0 ); - - setOwnedEntity = (SetOwnedEntity) objArray[0]; - Assert.assertEquals( "Example Data 2", setOwnedEntity.getData() ); - - Hibernate.initialize( setOwnedEntity.getReferencing() ); - Assert.assertTrue( setOwnedEntity.getReferencing().isEmpty() ); + public void testOwningManyToManyDifferentRevisions(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + List queryResult = AuditReaderFactory.get( em ).createQuery() + .forRevisionsOfEntity( SetOwnedEntity.class, false, true ) + .add( AuditEntity.id().eq( 8 ) ) + .add( AuditEntity.revisionType().eq( RevisionType.DEL ) ) + .getResultList(); + Object[] objArray = (Object[]) queryResult.get( 0 ); + + assertEquals( 10, getRevisionNumber( objArray[1] ) ); + + SetOwnedEntity setOwnedEntity = (SetOwnedEntity) objArray[0]; + assertEquals( "Example Data 2", setOwnedEntity.getData() ); + + Hibernate.initialize( setOwnedEntity.getReferencing() ); + assertTrue( setOwnedEntity.getReferencing().isEmpty() ); + + // After commit in revision nine, related entity has been removed. + queryResult = AuditReaderFactory.get( em ).createQuery() + .forRevisionsOfEntity( SetOwnedEntity.class, false, true ) + .add( AuditEntity.id().eq( 8 ) ) + .add( AuditEntity.revisionNumber().eq( 9 ) ) + .getResultList(); + objArray = (Object[]) queryResult.get( 0 ); + + setOwnedEntity = (SetOwnedEntity) objArray[0]; + assertEquals( "Example Data 2", setOwnedEntity.getData() ); + + Hibernate.initialize( setOwnedEntity.getReferencing() ); + assertTrue( setOwnedEntity.getReferencing().isEmpty() ); + } ); } private Number getRevisionNumber(Object revisionEntity) { diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/AbstractEntityWithChangesQueryTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/AbstractEntityWithChangesQueryTest.java index 494d4a359a83..f2cc5073f077 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/AbstractEntityWithChangesQueryTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/AbstractEntityWithChangesQueryTest.java @@ -14,37 +14,31 @@ import jakarta.persistence.GeneratedValue; import jakarta.persistence.Id; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.Audited; import org.hibernate.envers.RevisionType; import org.hibernate.envers.configuration.EnversSettings; import org.hibernate.envers.query.AuditEntity; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; import org.hibernate.orm.test.envers.tools.TestTools; -import org.junit.Test; - +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.junit.jupiter.api.Test; -import static org.hibernate.testing.transaction.TransactionUtil.doInJPA; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Chris Cranford */ -@JiraKey( value = "HHH-8058" ) -public abstract class AbstractEntityWithChangesQueryTest extends BaseEnversJPAFunctionalTestCase { +@JiraKey(value = "HHH-8058") +public abstract class AbstractEntityWithChangesQueryTest { private Integer simpleId; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { Simple.class }; - } - - @Test - @Priority(10) - public void initData() { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Revision 1 - simpleId = doInJPA( this::entityManagerFactory, entityManager -> { + simpleId = scope.fromTransaction( entityManager -> { final Simple simple = new Simple(); simple.setName( "Name" ); simple.setValue( 25 ); @@ -53,14 +47,14 @@ public void initData() { } ); // Revision 2 - doInJPA( this::entityManagerFactory, entityManager -> { + scope.inTransaction( entityManager -> { final Simple simple = entityManager.find( Simple.class, simpleId ); simple.setName( "Name-Modified2" ); entityManager.merge( simple ); } ); // Revision 3 - doInJPA( this::entityManagerFactory, entityManager -> { + scope.inTransaction( entityManager -> { final Simple simple = entityManager.find( Simple.class, simpleId ); simple.setName( "Name-Modified3" ); simple.setValue( 100 ); @@ -68,33 +62,39 @@ public void initData() { } ); // Revision 4 - doInJPA( this::entityManagerFactory, entityManager -> { + scope.inTransaction( entityManager -> { final Simple simple = entityManager.find( Simple.class, simpleId ); entityManager.remove( simple ); } ); } @Test - public void testRevisionCount() { - assertEquals( Arrays.asList( 1, 2, 3, 4 ), getAuditReader().getRevisions( Simple.class, simpleId ) ); + public void testRevisionCount(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + assertEquals( Arrays.asList( 1, 2, 3, 4 ), AuditReaderFactory.get( em ).getRevisions( Simple.class, simpleId ) ); + } ); } @Test - public void testEntityRevisionsWithChangesQueryNoDeletions() { - List results = getAuditReader().createQuery() - .forRevisionsOfEntityWithChanges( Simple.class, false ) - .add( AuditEntity.id().eq( simpleId ) ) - .getResultList(); - compareResults( getExpectedResults( false ), results ); + public void testEntityRevisionsWithChangesQueryNoDeletions(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + List results = AuditReaderFactory.get( em ).createQuery() + .forRevisionsOfEntityWithChanges( Simple.class, false ) + .add( AuditEntity.id().eq( simpleId ) ) + .getResultList(); + compareResults( getExpectedResults( scope, false ), results ); + } ); } @Test - public void testEntityRevisionsWithChangesQuery() { - List results = getAuditReader().createQuery() - .forRevisionsOfEntityWithChanges( Simple.class, true ) - .add( AuditEntity.id().eq( simpleId ) ) - .getResultList(); - compareResults( getExpectedResults( true ), results ); + public void testEntityRevisionsWithChangesQuery(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + List results = AuditReaderFactory.get( em ).createQuery() + .forRevisionsOfEntityWithChanges( Simple.class, true ) + .add( AuditEntity.id().eq( simpleId ) ) + .getResultList(); + compareResults( getExpectedResults( scope, true ), results ); + } ); } private void compareResults(List expectedResults, List results) { @@ -111,11 +111,11 @@ private void compareResults(List expectedResults, List results) { } } - protected List getExpectedResults(boolean includeDeletions) { + protected List getExpectedResults(EntityManagerFactoryScope scope, boolean includeDeletions) { String deleteName = null; Integer deleteValue = null; - if ( getConfig().get( EnversSettings.STORE_DATA_AT_DELETE ) == Boolean.TRUE ) { + if ( Boolean.TRUE.toString().equals( scope.getEntityManagerFactory().getProperties().get( EnversSettings.STORE_DATA_AT_DELETE ) ) ) { deleteName = "Name-Modified3"; deleteValue = 100; } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/AggregateQuery.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/AggregateQuery.java index 2ec169ebf5c4..1cb9dde83fc0 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/AggregateQuery.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/AggregateQuery.java @@ -6,164 +6,173 @@ import java.util.Arrays; import java.util.List; -import jakarta.persistence.EntityManager; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.query.AuditEntity; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; import org.hibernate.orm.test.envers.entities.IntTestEntity; import org.hibernate.orm.test.envers.entities.ids.UnusualIdNamingEntity; import org.hibernate.orm.test.envers.tools.TestTools; - +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Assert; -import org.junit.Test; +import org.hibernate.testing.orm.junit.Jpa; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.junit.jupiter.api.Assertions.fail; /** * @author Adam Warski (adam at warski dot org) */ @SuppressWarnings("unchecked") -public class AggregateQuery extends BaseEnversJPAFunctionalTestCase { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {IntTestEntity.class, UnusualIdNamingEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - +@Jpa(annotatedClasses = { + IntTestEntity.class, + UnusualIdNamingEntity.class +}) +@EnversTest +public class AggregateQuery { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Revision 1 - em.getTransaction().begin(); - IntTestEntity ite1 = new IntTestEntity( 2 ); - IntTestEntity ite2 = new IntTestEntity( 10 ); - em.persist( ite1 ); - em.persist( ite2 ); - Integer id1 = ite1.getId(); - Integer id2 = ite2.getId(); - em.getTransaction().commit(); + scope.inTransaction( em -> { + IntTestEntity ite1 = new IntTestEntity( 2 ); + IntTestEntity ite2 = new IntTestEntity( 10 ); + em.persist( ite1 ); + em.persist( ite2 ); + } ); // Revision 2 - em.getTransaction().begin(); - IntTestEntity ite3 = new IntTestEntity( 8 ); - UnusualIdNamingEntity uine1 = new UnusualIdNamingEntity( "id1", "data1" ); - em.persist( uine1 ); - em.persist( ite3 ); - ite1 = em.find( IntTestEntity.class, id1 ); - ite1.setNumber( 0 ); - em.getTransaction().commit(); + scope.inTransaction( em -> { + IntTestEntity ite3 = new IntTestEntity( 8 ); + UnusualIdNamingEntity uine1 = new UnusualIdNamingEntity( "id1", "data1" ); + em.persist( uine1 ); + em.persist( ite3 ); + IntTestEntity ite1 = em.createQuery( "from IntTestEntity where number = 2", IntTestEntity.class ) + .getSingleResult(); + ite1.setNumber( 0 ); + } ); // Revision 3 - em.getTransaction().begin(); - ite2 = em.find( IntTestEntity.class, id2 ); - ite2.setNumber( 52 ); - em.getTransaction().commit(); - - em.close(); + scope.inTransaction( em -> { + IntTestEntity ite2 = em.createQuery( "from IntTestEntity where number = 10", IntTestEntity.class ) + .getSingleResult(); + ite2.setNumber( 52 ); + } ); } @Test - public void testEntitiesAvgMaxQuery() { - Object[] ver1 = (Object[]) getAuditReader().createQuery() - .forEntitiesAtRevision( IntTestEntity.class, 1 ) - .addProjection( AuditEntity.property( "number" ).max() ) - .addProjection( AuditEntity.property( "number" ).function( "avg" ) ) - .getSingleResult(); - - Object[] ver2 = (Object[]) getAuditReader().createQuery() - .forEntitiesAtRevision( IntTestEntity.class, 2 ) - .addProjection( AuditEntity.property( "number" ).max() ) - .addProjection( AuditEntity.property( "number" ).function( "avg" ) ) - .getSingleResult(); - - Object[] ver3 = (Object[]) getAuditReader().createQuery() - .forEntitiesAtRevision( IntTestEntity.class, 3 ) - .addProjection( AuditEntity.property( "number" ).max() ) - .addProjection( AuditEntity.property( "number" ).function( "avg" ) ) - .getSingleResult(); - - assert (Integer) ver1[0] == 10; - assert (Double) ver1[1] == 6.0; - - assert (Integer) ver2[0] == 10; - assert (Double) ver2[1] == 6.0; - - assert (Integer) ver3[0] == 52; - assert (Double) ver3[1] == 20.0; + public void testEntitiesAvgMaxQuery(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + Object[] ver1 = (Object[]) AuditReaderFactory.get( em ).createQuery() + .forEntitiesAtRevision( IntTestEntity.class, 1 ) + .addProjection( AuditEntity.property( "number" ).max() ) + .addProjection( AuditEntity.property( "number" ).function( "avg" ) ) + .getSingleResult(); + + Object[] ver2 = (Object[]) AuditReaderFactory.get( em ).createQuery() + .forEntitiesAtRevision( IntTestEntity.class, 2 ) + .addProjection( AuditEntity.property( "number" ).max() ) + .addProjection( AuditEntity.property( "number" ).function( "avg" ) ) + .getSingleResult(); + + Object[] ver3 = (Object[]) AuditReaderFactory.get( em ).createQuery() + .forEntitiesAtRevision( IntTestEntity.class, 3 ) + .addProjection( AuditEntity.property( "number" ).max() ) + .addProjection( AuditEntity.property( "number" ).function( "avg" ) ) + .getSingleResult(); + + assertEquals( 10, (Integer) ver1[0] ); + assertEquals( 6.0, (Double) ver1[1] ); + + assertEquals( 10, (Integer) ver2[0] ); + assertEquals( 6.0, (Double) ver2[1] ); + + assertEquals( 52, (Integer) ver3[0] ); + assertEquals( 20.0, (Double) ver3[1] ); + } ); } @Test @JiraKey(value = "HHH-8036") - public void testEntityIdProjection() { - Integer maxId = (Integer) getAuditReader().createQuery().forRevisionsOfEntity( IntTestEntity.class, true, true ) - .addProjection( AuditEntity.id().max() ) - .add( AuditEntity.revisionNumber().gt( 2 ) ) - .getSingleResult(); - Assert.assertEquals( Integer.valueOf( 2 ), maxId ); + public void testEntityIdProjection(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + Integer maxId = (Integer) AuditReaderFactory.get( em ).createQuery() + .forRevisionsOfEntity( IntTestEntity.class, true, true ) + .addProjection( AuditEntity.id().max() ) + .add( AuditEntity.revisionNumber().gt( 2 ) ) + .getSingleResult(); + assertEquals( Integer.valueOf( 2 ), maxId ); + } ); } @Test @JiraKey(value = "HHH-8036") - public void testEntityIdRestriction() { - List list = getAuditReader().createQuery().forRevisionsOfEntity( - IntTestEntity.class, - true, - true - ) - .add( AuditEntity.id().between( 2, 3 ) ) - .getResultList(); - Assert.assertTrue( - TestTools.checkCollection( - list, - new IntTestEntity( 10, 2 ), new IntTestEntity( 8, 3 ), new IntTestEntity( 52, 2 ) - ) - ); + public void testEntityIdRestriction(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + List list = AuditReaderFactory.get( em ).createQuery() + .forRevisionsOfEntity( IntTestEntity.class, true, true ) + .add( AuditEntity.id().between( 2, 3 ) ) + .getResultList(); + assertTrue( + TestTools.checkCollection( + list, + new IntTestEntity( 10, 2 ), new IntTestEntity( 8, 3 ), new IntTestEntity( 52, 2 ) + ) + ); + } ); } @Test @JiraKey(value = "HHH-8036") - public void testEntityIdOrdering() { - List list = getAuditReader().createQuery().forRevisionsOfEntity( - IntTestEntity.class, - true, - true - ) - .add( AuditEntity.revisionNumber().lt( 2 ) ) - .addOrder( AuditEntity.id().desc() ) - .getResultList(); - Assert.assertEquals( Arrays.asList( new IntTestEntity( 10, 2 ), new IntTestEntity( 2, 1 ) ), list ); + public void testEntityIdOrdering(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + List list = AuditReaderFactory.get( em ).createQuery() + .forRevisionsOfEntity( IntTestEntity.class, true, true ) + .add( AuditEntity.revisionNumber().lt( 2 ) ) + .addOrder( AuditEntity.id().desc() ) + .getResultList(); + assertEquals( Arrays.asList( new IntTestEntity( 10, 2 ), new IntTestEntity( 2, 1 ) ), list ); + } ); } @Test @JiraKey(value = "HHH-8036") - public void testUnusualIdFieldName() { - UnusualIdNamingEntity entity = (UnusualIdNamingEntity) getAuditReader().createQuery() - .forRevisionsOfEntity( UnusualIdNamingEntity.class, true, true ) - .add( AuditEntity.id().like( "id1" ) ) - .getSingleResult(); - Assert.assertEquals( new UnusualIdNamingEntity( "id1", "data1" ), entity ); + public void testUnusualIdFieldName(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + UnusualIdNamingEntity entity = (UnusualIdNamingEntity) AuditReaderFactory.get( em ).createQuery() + .forRevisionsOfEntity( UnusualIdNamingEntity.class, true, true ) + .add( AuditEntity.id().like( "id1" ) ) + .getSingleResult(); + assertEquals( new UnusualIdNamingEntity( "id1", "data1" ), entity ); + } ); } @Test @JiraKey(value = "HHH-8036") - public void testEntityIdModifiedFlagNotSupported() { - try { - getAuditReader().createQuery().forRevisionsOfEntity( IntTestEntity.class, true, true ) - .add( AuditEntity.id().hasChanged() ) - .getResultList(); - } - catch (UnsupportedOperationException e1) { + public void testEntityIdModifiedFlagNotSupported(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { try { - getAuditReader().createQuery().forRevisionsOfEntity( IntTestEntity.class, true, true ) - .add( AuditEntity.id().hasNotChanged() ) + AuditReaderFactory.get( em ).createQuery() + .forRevisionsOfEntity( IntTestEntity.class, true, true ) + .add( AuditEntity.id().hasChanged() ) .getResultList(); } - catch (UnsupportedOperationException e2) { - return; + catch (UnsupportedOperationException e1) { + try { + AuditReaderFactory.get( em ).createQuery() + .forRevisionsOfEntity( IntTestEntity.class, true, true ) + .add( AuditEntity.id().hasNotChanged() ) + .getResultList(); + } + catch (UnsupportedOperationException e2) { + return; + } + fail(); } - Assert.fail(); - } - Assert.fail(); + fail(); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/AssociationEntitiesModifiedQueryTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/AssociationEntitiesModifiedQueryTest.java index 4c5a70b6db68..4dfbdd9738d9 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/AssociationEntitiesModifiedQueryTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/AssociationEntitiesModifiedQueryTest.java @@ -11,22 +11,29 @@ import jakarta.persistence.ManyToOne; import jakarta.persistence.criteria.JoinType; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.Audited; import org.hibernate.envers.query.AuditEntity; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.junit.Test; - +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; +import org.hibernate.testing.orm.junit.Jpa; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.junit.jupiter.api.Test; -import static org.hibernate.testing.transaction.TransactionUtil.doInJPA; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Chris Cranford */ @JiraKey(value = "HHH-11981") -public class AssociationEntitiesModifiedQueryTest extends BaseEnversJPAFunctionalTestCase { +@Jpa(annotatedClasses = { + AssociationEntitiesModifiedQueryTest.TemplateType.class, + AssociationEntitiesModifiedQueryTest.Template.class +}) +@EnversTest +public class AssociationEntitiesModifiedQueryTest { @Entity(name = "TemplateType") @Audited(withModifiedFlag = true) public static class TemplateType { @@ -104,16 +111,10 @@ public void setTemplateType(TemplateType templateType) { } } - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { TemplateType.class, Template.class }; - } - - @Test - @Priority(10) - public void initData() { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Revision 1 - doInJPA( this::entityManagerFactory, entityManager -> { + scope.inTransaction( entityManager -> { final TemplateType type1 = new TemplateType( 1, "Type1" ); final TemplateType type2 = new TemplateType( 2, "Type2" ); final Template template = new Template( 1, "Template1", type1 ); @@ -123,7 +124,7 @@ public void initData() { } ); // Revision 2 - doInJPA( this::entityManagerFactory, entityManager -> { + scope.inTransaction( entityManager -> { final TemplateType type = entityManager.find( TemplateType.class, 2 ); final Template template = entityManager.find( Template.class, 1 ); template.setTemplateType( type ); @@ -131,41 +132,41 @@ public void initData() { } ); // Revision 3 - doInJPA( this::entityManagerFactory, entityManager -> { + scope.inTransaction( entityManager -> { final Template template = entityManager.find( Template.class, 1 ); entityManager.remove( template ); } ); } @Test - public void testEntitiesModifiedAtRevision1WithAssociationQueries() { - doInJPA( this::entityManagerFactory, entityManager -> { - List results = getEntitiesModifiedAtRevisionUsingAssociationQueryResults( 1 ); + public void testEntitiesModifiedAtRevision1WithAssociationQueries(EntityManagerFactoryScope scope) { + scope.inEntityManager( entityManager -> { + List results = getEntitiesModifiedAtRevisionUsingAssociationQueryResults( entityManager, 1 ); assertEquals( 1, results.size() ); assertEquals( "Type1", ( (TemplateType) results.get( 0 ) ).getName() ); } ); } @Test - public void testEntitiesModifiedAtRevision2WithAssociationQueries() { - doInJPA( this::entityManagerFactory, entityManager -> { - List results = getEntitiesModifiedAtRevisionUsingAssociationQueryResults( 2 ); + public void testEntitiesModifiedAtRevision2WithAssociationQueries(EntityManagerFactoryScope scope) { + scope.inEntityManager( entityManager -> { + List results = getEntitiesModifiedAtRevisionUsingAssociationQueryResults( entityManager, 2 ); assertEquals( 1, results.size() ); assertEquals( "Type2", ( (TemplateType) results.get( 0 ) ).getName() ); } ); } @Test - public void testEntitiesModifiedAtRevision3WithAssociationQueries() { - doInJPA( this::entityManagerFactory, entityManager -> { - List results = getEntitiesModifiedAtRevisionUsingAssociationQueryResults( 3 ); + public void testEntitiesModifiedAtRevision3WithAssociationQueries(EntityManagerFactoryScope scope) { + scope.inEntityManager( entityManager -> { + List results = getEntitiesModifiedAtRevisionUsingAssociationQueryResults( entityManager, 3 ); assertEquals( 0, results.size() ); } ); } - private List getEntitiesModifiedAtRevisionUsingAssociationQueryResults(Number revision) { + private List getEntitiesModifiedAtRevisionUsingAssociationQueryResults(jakarta.persistence.EntityManager entityManager, Number revision) { // Without fix HHH-11981, throw org.hibernate.QueryException - Parameter not bound : revision - return getAuditReader().createQuery() + return AuditReaderFactory.get( entityManager ).createQuery() .forEntitiesModifiedAtRevision( Template.class, revision ) .traverseRelation( "templateType", JoinType.INNER ) .addProjection( AuditEntity.selectEntity( false ) ) diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/AssociationQueryWithOnClauseTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/AssociationQueryWithOnClauseTest.java index bf85258f1b0e..56829e0cd9c8 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/AssociationQueryWithOnClauseTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/AssociationQueryWithOnClauseTest.java @@ -10,7 +10,6 @@ import jakarta.persistence.Column; import jakarta.persistence.Entity; -import jakarta.persistence.EntityManager; import jakarta.persistence.Id; import jakarta.persistence.JoinTable; import jakarta.persistence.ManyToMany; @@ -19,21 +18,30 @@ import jakarta.persistence.criteria.JoinType; import org.hibernate.envers.AuditJoinTable; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.Audited; import org.hibernate.envers.query.AuditEntity; import org.hibernate.envers.query.order.NullPrecedence; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; -import static org.junit.Assert.*; +import static org.junit.jupiter.api.Assertions.assertArrayEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Felix Feisst (feisst dot felix at gmail dot com) */ @JiraKey(value = "HHH-11896") -public class AssociationQueryWithOnClauseTest extends BaseEnversJPAFunctionalTestCase { +@Jpa(annotatedClasses = { + AssociationQueryWithOnClauseTest.EntityA.class, + AssociationQueryWithOnClauseTest.EntityB.class +}) +@EnversTest +public class AssociationQueryWithOnClauseTest { private EntityA a1; private EntityA a2; @@ -128,94 +136,91 @@ public void setNumber(int number) { } } - @Override - protected Class[] getAnnotatedClasses() { - return new Class[]{ EntityA.class, EntityB.class }; + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + scope.inTransaction( em -> { + final EntityB b1t1 = new EntityB(); + b1t1.setId( 21L ); + b1t1.setType( "T1" ); + b1t1.setNumber( 1 ); + em.persist( b1t1 ); + final EntityB b2t2 = new EntityB(); + b2t2.setId( 22L ); + b2t2.setType( "T2" ); + b2t2.setNumber( 2 ); + em.persist( b2t2 ); + final EntityB b3t1 = new EntityB(); + b3t1.setId( 23L ); + b3t1.setType( "T1" ); + b3t1.setNumber( 3 ); + em.persist( b3t1 ); + + a1 = new EntityA(); + a1.setId( 1L ); + a1.setbManyToOne( b1t1 ); + a1.getbOneToMany().add( b1t1 ); + a1.getbOneToMany().add( b2t2 ); + a1.getbManyToMany().add( b1t1 ); + a1.getbManyToMany().add( b2t2 ); + em.persist( a1 ); + a2 = new EntityA(); + a2.setId( 2L ); + a2.setbManyToOne( b2t2 ); + a2.getbManyToMany().add( b3t1 ); + em.persist( a2 ); + a3 = new EntityA(); + a3.setId( 3L ); + a3.setbManyToOne( b3t1 ); + a3.getbOneToMany().add( b3t1 ); + a3.getbManyToMany().add( b3t1 ); + em.persist( a3 ); + } ); } @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - em.getTransaction().begin(); - final EntityB b1t1 = new EntityB(); - b1t1.setId( 21L ); - b1t1.setType( "T1" ); - b1t1.setNumber( 1 ); - em.persist( b1t1 ); - final EntityB b2t2 = new EntityB(); - b2t2.setId( 22L ); - b2t2.setType( "T2" ); - b2t2.setNumber( 2 ); - em.persist( b2t2 ); - final EntityB b3t1 = new EntityB(); - b3t1.setId( 23L ); - b3t1.setType( "T1" ); - b3t1.setNumber( 3 ); - em.persist( b3t1 ); - - a1 = new EntityA(); - a1.setId( 1L ); - a1.setbManyToOne( b1t1 ); - a1.getbOneToMany().add( b1t1 ); - a1.getbOneToMany().add( b2t2 ); - a1.getbManyToMany().add( b1t1 ); - a1.getbManyToMany().add( b2t2 ); - em.persist( a1 ); - a2 = new EntityA(); - a2.setId( 2L ); - a2.setbManyToOne( b2t2 ); - a2.getbManyToMany().add( b3t1 ); - em.persist( a2 ); - a3 = new EntityA(); - a3.setId( 3L ); - a3.setbManyToOne( b3t1 ); - a3.getbOneToMany().add( b3t1 ); - a3.getbManyToMany().add( b3t1 ); - em.persist( a3 ); - - em.getTransaction().commit(); + public void testManyToOne(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + List list = AuditReaderFactory.get( em ).createQuery() + .forEntitiesAtRevision( EntityA.class, 1 ) + .traverseRelation( "bManyToOne", JoinType.LEFT, "b", AuditEntity.property( "b", "type" ).eq( "T1" ) ) + .addOrder( AuditEntity.property( "b", "number" ).asc().nulls( NullPrecedence.FIRST ) ) + .up() + .addProjection( AuditEntity.id() ) + .addProjection( AuditEntity.property( "b", "number" ) ) + .getResultList(); + assertArrayListEquals( list, tuple( a2.getId(), null ), tuple( a1.getId(), 1 ), tuple( a3.getId(), 3 ) ); + } ); } @Test - public void testManyToOne() { - List list = getAuditReader().createQuery() - .forEntitiesAtRevision( EntityA.class, 1 ) - .traverseRelation( "bManyToOne", JoinType.LEFT, "b", AuditEntity.property( "b", "type" ).eq( "T1" ) ) - .addOrder( AuditEntity.property( "b", "number" ).asc().nulls( NullPrecedence.FIRST ) ) - .up() - .addProjection( AuditEntity.id() ) - .addProjection( AuditEntity.property( "b", "number" ) ) - .getResultList(); - assertArrayListEquals( list, tuple( a2.getId(), null ), tuple( a1.getId(), 1 ), tuple( a3.getId(), 3 ) ); + public void testOneToMany(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + List list = AuditReaderFactory.get( em ).createQuery().forEntitiesAtRevision( EntityA.class, 1 ) + .traverseRelation( "bOneToMany", JoinType.LEFT, "b", AuditEntity.property( "b", "type" ).eq( "T1" ) ) + .addOrder( AuditEntity.property( "b", "number" ).asc().nulls( NullPrecedence.FIRST ) ) + .up() + .addOrder( AuditEntity.id().asc() ) + .addProjection( AuditEntity.id() ) + .addProjection( AuditEntity.property( "b", "number" ) ) + .getResultList(); + assertArrayListEquals( list, tuple( a1.getId(), null ), tuple( a2.getId(), null ), tuple( a1.getId(), 1 ), tuple( a3.getId(), 3 ) ); + } ); } @Test - public void testOneToMany() { - List list = getAuditReader().createQuery().forEntitiesAtRevision( EntityA.class, 1 ) - .traverseRelation( "bOneToMany", JoinType.LEFT, "b", AuditEntity.property( "b", "type" ).eq( "T1" ) ) - .addOrder( AuditEntity.property( "b", "number" ).asc().nulls( NullPrecedence.FIRST ) ) - .up() - .addOrder( AuditEntity.id().asc() ) - .addProjection( AuditEntity.id() ) - .addProjection( AuditEntity.property( "b", "number" ) ) - .getResultList(); - assertArrayListEquals( list, tuple( a1.getId(), null ), tuple( a2.getId(), null ), tuple( a1.getId(), 1 ), tuple( a3.getId(), 3 ) ); - } - - @Test - public void testManyToMany() { - List list = getAuditReader().createQuery() - .forEntitiesAtRevision( EntityA.class, 1 ) - .traverseRelation( "bManyToMany", JoinType.LEFT, "b", AuditEntity.property( "b", "type" ).eq( "T1" ) ) - .addOrder( AuditEntity.property( "b", "number" ).asc().nulls( NullPrecedence.FIRST ) ) - .up() - .addOrder( AuditEntity.id().asc().nulls( NullPrecedence.FIRST ) ) - .addProjection(AuditEntity.id() ) - .addProjection( AuditEntity.property( "b", "number" ) ) - .getResultList(); - assertArrayListEquals( list, tuple( a1.getId(), null ), tuple( a1.getId(), 1 ), tuple( a2.getId(), 3 ), tuple( a3.getId(), 3 ) ); + public void testManyToMany(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + List list = AuditReaderFactory.get( em ).createQuery() + .forEntitiesAtRevision( EntityA.class, 1 ) + .traverseRelation( "bManyToMany", JoinType.LEFT, "b", AuditEntity.property( "b", "type" ).eq( "T1" ) ) + .addOrder( AuditEntity.property( "b", "number" ).asc().nulls( NullPrecedence.FIRST ) ) + .up() + .addOrder( AuditEntity.id().asc().nulls( NullPrecedence.FIRST ) ) + .addProjection( AuditEntity.id() ) + .addProjection( AuditEntity.property( "b", "number" ) ) + .getResultList(); + assertArrayListEquals( list, tuple( a1.getId(), null ), tuple( a1.getId(), 1 ), tuple( a2.getId(), 3 ), tuple( a3.getId(), 3 ) ); + } ); } private Object[] tuple(final Long id, final Integer number) { @@ -223,7 +228,7 @@ private Object[] tuple(final Long id, final Integer number) { } private void assertArrayListEquals(final List actual, final Object[]... expected) { - assertEquals( "Unexpected number of results", expected.length, actual.size() ); + assertEquals( expected.length, actual.size(), "Unexpected number of results" ); for ( int i = 0; i < expected.length; i++ ) { final Object[] exp = expected[i]; final Object[] act = (Object[]) actual.get( i ); diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/AssociationRevisionsOfEntitiesQueryStoreAtDeletionTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/AssociationRevisionsOfEntitiesQueryStoreAtDeletionTest.java index f00c449186d4..28710ebf9b4b 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/AssociationRevisionsOfEntitiesQueryStoreAtDeletionTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/AssociationRevisionsOfEntitiesQueryStoreAtDeletionTest.java @@ -4,20 +4,30 @@ */ package org.hibernate.orm.test.envers.integration.query; -import java.util.Map; - import org.hibernate.envers.configuration.EnversSettings; - +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; +import org.hibernate.testing.orm.junit.Jpa; +import org.hibernate.testing.orm.junit.Setting; /** * @author Chris Cranford */ -@JiraKey( value = "HHH-13817" ) +@JiraKey(value = "HHH-13817") +@Jpa( + annotatedClasses = { + AssociationRevisionsOfEntitiesQueryTest.Template.class, + AssociationRevisionsOfEntitiesQueryTest.TemplateType.class + }, + integrationSettings = { + @Setting(name = EnversSettings.STORE_DATA_AT_DELETE, value = "true") + } +) +@EnversTest public class AssociationRevisionsOfEntitiesQueryStoreAtDeletionTest extends AssociationRevisionsOfEntitiesQueryTest { @Override - protected void addSettings(Map settings) { - super.addSettings( settings ); - settings.put( EnversSettings.STORE_DATA_AT_DELETE, true ); + protected boolean isStoreDataAtDelete(EntityManagerFactoryScope scope) { + return true; } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/AssociationRevisionsOfEntitiesQueryTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/AssociationRevisionsOfEntitiesQueryTest.java index 464fa5c9e3a0..b12694d2b242 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/AssociationRevisionsOfEntitiesQueryTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/AssociationRevisionsOfEntitiesQueryTest.java @@ -4,11 +4,6 @@ */ package org.hibernate.orm.test.envers.integration.query; -import static org.hibernate.testing.junit4.ExtraAssertions.assertTyping; -import static org.hibernate.testing.transaction.TransactionUtil.doInHibernate; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.fail; - import java.util.List; import jakarta.persistence.Entity; @@ -16,55 +11,63 @@ import jakarta.persistence.ManyToOne; import jakarta.persistence.criteria.JoinType; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.Audited; import org.hibernate.envers.query.AuditEntity; -import org.hibernate.orm.test.envers.BaseEnversFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.junit.Test; - +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; +import org.hibernate.testing.orm.junit.Jpa; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertInstanceOf; +import static org.junit.jupiter.api.Assertions.fail; /** * @author Chris Cranford */ -@JiraKey( "HHH-13817" ) -public class AssociationRevisionsOfEntitiesQueryTest extends BaseEnversFunctionalTestCase { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { Template.class, TemplateType.class }; - } - - @Test - @Priority(10) - public void initData() { - doInHibernate( this::sessionFactory, session -> { +@JiraKey(value = "HHH-13817") +@Jpa(annotatedClasses = { + AssociationRevisionsOfEntitiesQueryTest.Template.class, + AssociationRevisionsOfEntitiesQueryTest.TemplateType.class +}) +@EnversTest +public class AssociationRevisionsOfEntitiesQueryTest { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + // Revision 1 + scope.inTransaction( entityManager -> { final TemplateType type1 = new TemplateType( 1, "Type1" ); final TemplateType type2 = new TemplateType( 2, "Type2" ); - session.persist( type1 ); - session.persist( type2 ); + entityManager.persist( type1 ); + entityManager.persist( type2 ); final Template template = new Template( 1, "Template1", type1 ); - session.persist( template ); + entityManager.persist( template ); } ); - doInHibernate( this::sessionFactory, session -> { - final TemplateType type = session.find( TemplateType.class, 2 ); - final Template template = session.find( Template.class, 1 ); + // Revision 2 + scope.inTransaction( entityManager -> { + final TemplateType type = entityManager.find( TemplateType.class, 2 ); + final Template template = entityManager.find( Template.class, 1 ); template.setName( "Template1-Updated" ); template.setTemplateType( type ); - session.merge( template ); + entityManager.merge( template ); } ); - doInHibernate( this::sessionFactory, session -> { - final Template template = session.find( Template.class, 1 ); - session.remove( template ); + // Revision 3 + scope.inTransaction( entityManager -> { + final Template template = entityManager.find( Template.class, 1 ); + entityManager.remove( template ); } ); } @Test - public void testRevisionsOfEntityWithAssociationQueries() { - doInHibernate( this::sessionFactory, session -> { - List results = getAuditReader().createQuery() + public void testRevisionsOfEntityWithAssociationQueries(EntityManagerFactoryScope scope) { + scope.inEntityManager( entityManager -> { + List results = AuditReaderFactory.get( entityManager ).createQuery() .forRevisionsOfEntity( Template.class, true, true ) .add( AuditEntity.id().eq( 1 ) ) .traverseRelation( "templateType", JoinType.INNER ) @@ -75,16 +78,16 @@ public void testRevisionsOfEntityWithAssociationQueries() { assertEquals( "Template1", ( (Template) results.get( 0 ) ).getName() ); } ); - doInHibernate( this::sessionFactory, session -> { - List results = getAuditReader().createQuery() + scope.inEntityManager( entityManager -> { + List results = AuditReaderFactory.get( entityManager ).createQuery() .forRevisionsOfEntity( Template.class, true, true ) .add( AuditEntity.id().eq( 1 ) ) .traverseRelation( "templateType", JoinType.INNER ) - .add( AuditEntity.property("name" ).eq("Type2" ) ) + .add( AuditEntity.property( "name" ).eq( "Type2" ) ) .up() .getResultList(); - assertEquals( getConfiguration().isStoreDataAtDelete() ? 2 : 1, results.size() ); + assertEquals( isStoreDataAtDelete( scope ) ? 2 : 1, results.size() ); for ( Object result : results ) { assertEquals( "Template1-Updated", ( (Template) result ).getName() ); } @@ -92,13 +95,13 @@ public void testRevisionsOfEntityWithAssociationQueries() { } @Test - public void testAssociationQueriesNotAllowedWhenNotSelectingJustEntities() { + public void testAssociationQueriesNotAllowedWhenNotSelectingJustEntities(EntityManagerFactoryScope scope) { try { - doInHibernate( this::sessionFactory, session -> { - getAuditReader().createQuery() + scope.inEntityManager( entityManager -> { + AuditReaderFactory.get( entityManager ).createQuery() .forRevisionsOfEntity( Template.class, false, true ) .add( AuditEntity.id().eq( 1 ) ) - .traverseRelation("templateType", JoinType.INNER ) + .traverseRelation( "templateType", JoinType.INNER ) .add( AuditEntity.property( "name" ).eq( "Type1" ) ) .up() .getResultList(); @@ -107,10 +110,14 @@ public void testAssociationQueriesNotAllowedWhenNotSelectingJustEntities() { fail( "Test should have thrown IllegalStateException due to selectEntitiesOnly=false" ); } catch ( Exception e ) { - assertTyping( IllegalStateException.class, e ); + assertInstanceOf( IllegalStateException.class, e ); } } + protected boolean isStoreDataAtDelete(EntityManagerFactoryScope scope) { + return false; + } + @Entity(name = "TemplateType") @Audited public static class TemplateType { diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/AssociationToManyJoinQueryTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/AssociationToManyJoinQueryTest.java index c235a6528367..c0f034e3d6c9 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/AssociationToManyJoinQueryTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/AssociationToManyJoinQueryTest.java @@ -4,16 +4,12 @@ */ package org.hibernate.orm.test.envers.integration.query; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; - import java.util.Collection; import java.util.HashSet; import java.util.List; import java.util.Set; import jakarta.persistence.Entity; -import jakarta.persistence.EntityManager; import jakarta.persistence.Id; import jakarta.persistence.JoinTable; import jakarta.persistence.ManyToMany; @@ -22,18 +18,30 @@ import jakarta.persistence.criteria.JoinType; import org.hibernate.envers.AuditJoinTable; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.Audited; import org.hibernate.envers.query.AuditEntity; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; /** * @author Felix Feisst (feisst dot felix at gmail dot com) */ @JiraKey(value = "HHH-11735") -public class AssociationToManyJoinQueryTest extends BaseEnversJPAFunctionalTestCase { +@Jpa(annotatedClasses = { + AssociationToManyJoinQueryTest.EntityA.class, + AssociationToManyJoinQueryTest.EntityB.class, + AssociationToManyJoinQueryTest.EntityC.class +}) +@EnversTest +public class AssociationToManyJoinQueryTest { private EntityA aEmpty; private EntityA aOneToMany; @@ -220,260 +228,274 @@ public void setBidiAManyToManyInverse(Set bidiAManyToManyInverse) { } - @Override - protected Class[] getAnnotatedClasses() { - return new Class[]{ EntityA.class, EntityB.class, EntityC.class }; - } - - @Test - @Priority(10) - public void initData() { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // revision 1: - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - b1 = new EntityB(); - b1.setId( 21L ); - b1.setName( "B1" ); - em.persist( b1 ); - b2 = new EntityB(); - b2.setId( 22L ); - b2.setName( "B2" ); - em.persist( b2 ); - b3 = new EntityB(); - b3.setId( 23L ); - b3.setName( "B3" ); - em.persist( b3 ); - c1 = new EntityC(); - c1.setId( 31L ); - c1.setName( "C1" ); - em.persist( c1 ); - c2 = new EntityC(); - c2.setId( 32L ); - c2.setName( "C2" ); - em.persist( c2 ); - c3 = new EntityC(); - c3.setId( 33L ); - c3.setName( "C3" ); - em.persist( c3 ); - aEmpty = new EntityA(); - aEmpty.setId( 1L ); - aEmpty.setName( "aEmpty" ); - em.persist( aEmpty ); - aOneToMany = new EntityA(); - aOneToMany.setId( 2L ); - aOneToMany.setName( "aOneToMany" ); - aOneToMany.getbOneToMany().add( b1 ); - aOneToMany.getbOneToMany().add( b3 ); - em.persist( aOneToMany ); - aManyToMany = new EntityA(); - aManyToMany.setId( 3L ); - aManyToMany.setName( "aManyToMany" ); - aManyToMany.getbManyToMany().add( b1 ); - aManyToMany.getbManyToMany().add( b3 ); - em.persist( aManyToMany ); - aBidiOneToManyInverse = new EntityA(); - aBidiOneToManyInverse.setId( 4L ); - aBidiOneToManyInverse.setName( "aBidiOneToManyInverse" ); - aBidiOneToManyInverse.getBidiCOneToManyInverse().add( c1 ); - c1.setBidiAManyToOneOwning( aBidiOneToManyInverse ); - aBidiOneToManyInverse.getBidiCOneToManyInverse().add( c3 ); - c3.setBidiAManyToOneOwning( aBidiOneToManyInverse ); - em.persist( aBidiOneToManyInverse ); - aBidiManyToManyOwning = new EntityA(); - aBidiManyToManyOwning.setId( 5L ); - aBidiManyToManyOwning.setName( "aBidiManyToManyOwning" ); - aBidiManyToManyOwning.getBidiCManyToManyOwning().add( c1 ); - c1.getBidiAManyToManyInverse().add( aBidiManyToManyOwning ); - aBidiManyToManyOwning.getBidiCManyToManyOwning().add( c3 ); - c3.getBidiAManyToManyInverse().add( aBidiManyToManyOwning ); - em.persist( aBidiManyToManyOwning ); - aBidiManyToManyInverse = new EntityA(); - aBidiManyToManyInverse.setId( 6L ); - aBidiManyToManyInverse.setName( "aBidiManyToManyInverse" ); - aBidiManyToManyInverse.getBidiCManyToManyInverse().add( c1 ); - c1.getBidiAManyToManyOwning().add( aBidiManyToManyInverse ); - aBidiManyToManyInverse.getBidiCManyToManyInverse().add( c3 ); - c3.getBidiAManyToManyOwning().add( aBidiManyToManyInverse ); - em.persist( aBidiManyToManyInverse ); - em.getTransaction().commit(); - - // revision 2: - em.getTransaction().begin(); - aOneToMany.getbOneToMany().remove( b1 ); - aOneToMany.getbOneToMany().add( b2 ); - aManyToMany.getbManyToMany().remove( b1 ); - aManyToMany.getbManyToMany().add( b2 ); - aBidiOneToManyInverse.getBidiCOneToManyInverse().remove( c1 ); - c1.setBidiAManyToOneOwning( null ); - aBidiOneToManyInverse.getBidiCOneToManyInverse().add( c2 ); - c2.setBidiAManyToOneOwning( aBidiOneToManyInverse ); - aBidiManyToManyOwning.getBidiCManyToManyOwning().remove( c1 ); - c1.getBidiAManyToManyInverse().remove( aBidiManyToManyOwning ); - aBidiManyToManyOwning.getBidiCManyToManyOwning().add( c2 ); - c2.getBidiAManyToManyInverse().add( aBidiManyToManyOwning ); - aBidiManyToManyInverse.getBidiCManyToManyInverse().remove( c1 ); - c1.getBidiAManyToManyOwning().remove( aBidiManyToManyInverse ); - aBidiManyToManyInverse.getBidiCManyToManyInverse().add( c2 ); - c2.getBidiAManyToManyOwning().add( aBidiManyToManyInverse ); - em.getTransaction().commit(); + scope.inEntityManager( em -> { + em.getTransaction().begin(); + b1 = new EntityB(); + b1.setId( 21L ); + b1.setName( "B1" ); + em.persist( b1 ); + b2 = new EntityB(); + b2.setId( 22L ); + b2.setName( "B2" ); + em.persist( b2 ); + b3 = new EntityB(); + b3.setId( 23L ); + b3.setName( "B3" ); + em.persist( b3 ); + c1 = new EntityC(); + c1.setId( 31L ); + c1.setName( "C1" ); + em.persist( c1 ); + c2 = new EntityC(); + c2.setId( 32L ); + c2.setName( "C2" ); + em.persist( c2 ); + c3 = new EntityC(); + c3.setId( 33L ); + c3.setName( "C3" ); + em.persist( c3 ); + aEmpty = new EntityA(); + aEmpty.setId( 1L ); + aEmpty.setName( "aEmpty" ); + em.persist( aEmpty ); + aOneToMany = new EntityA(); + aOneToMany.setId( 2L ); + aOneToMany.setName( "aOneToMany" ); + aOneToMany.getbOneToMany().add( b1 ); + aOneToMany.getbOneToMany().add( b3 ); + em.persist( aOneToMany ); + aManyToMany = new EntityA(); + aManyToMany.setId( 3L ); + aManyToMany.setName( "aManyToMany" ); + aManyToMany.getbManyToMany().add( b1 ); + aManyToMany.getbManyToMany().add( b3 ); + em.persist( aManyToMany ); + aBidiOneToManyInverse = new EntityA(); + aBidiOneToManyInverse.setId( 4L ); + aBidiOneToManyInverse.setName( "aBidiOneToManyInverse" ); + aBidiOneToManyInverse.getBidiCOneToManyInverse().add( c1 ); + c1.setBidiAManyToOneOwning( aBidiOneToManyInverse ); + aBidiOneToManyInverse.getBidiCOneToManyInverse().add( c3 ); + c3.setBidiAManyToOneOwning( aBidiOneToManyInverse ); + em.persist( aBidiOneToManyInverse ); + aBidiManyToManyOwning = new EntityA(); + aBidiManyToManyOwning.setId( 5L ); + aBidiManyToManyOwning.setName( "aBidiManyToManyOwning" ); + aBidiManyToManyOwning.getBidiCManyToManyOwning().add( c1 ); + c1.getBidiAManyToManyInverse().add( aBidiManyToManyOwning ); + aBidiManyToManyOwning.getBidiCManyToManyOwning().add( c3 ); + c3.getBidiAManyToManyInverse().add( aBidiManyToManyOwning ); + em.persist( aBidiManyToManyOwning ); + aBidiManyToManyInverse = new EntityA(); + aBidiManyToManyInverse.setId( 6L ); + aBidiManyToManyInverse.setName( "aBidiManyToManyInverse" ); + aBidiManyToManyInverse.getBidiCManyToManyInverse().add( c1 ); + c1.getBidiAManyToManyOwning().add( aBidiManyToManyInverse ); + aBidiManyToManyInverse.getBidiCManyToManyInverse().add( c3 ); + c3.getBidiAManyToManyOwning().add( aBidiManyToManyInverse ); + em.persist( aBidiManyToManyInverse ); + em.getTransaction().commit(); + + em.getTransaction().begin(); + aOneToMany.getbOneToMany().remove( b1 ); + aOneToMany.getbOneToMany().add( b2 ); + aManyToMany.getbManyToMany().remove( b1 ); + aManyToMany.getbManyToMany().add( b2 ); + aBidiOneToManyInverse.getBidiCOneToManyInverse().remove( c1 ); + c1.setBidiAManyToOneOwning( null ); + aBidiOneToManyInverse.getBidiCOneToManyInverse().add( c2 ); + c2.setBidiAManyToOneOwning( aBidiOneToManyInverse ); + aBidiManyToManyOwning.getBidiCManyToManyOwning().remove( c1 ); + c1.getBidiAManyToManyInverse().remove( aBidiManyToManyOwning ); + aBidiManyToManyOwning.getBidiCManyToManyOwning().add( c2 ); + c2.getBidiAManyToManyInverse().add( aBidiManyToManyOwning ); + aBidiManyToManyInverse.getBidiCManyToManyInverse().remove( c1 ); + c1.getBidiAManyToManyOwning().remove( aBidiManyToManyInverse ); + aBidiManyToManyInverse.getBidiCManyToManyInverse().add( c2 ); + c2.getBidiAManyToManyOwning().add( aBidiManyToManyInverse ); + em.getTransaction().commit(); + } ); } @Test - public void testOneToManyInnerJoin() { - List list1 = getAuditReader().createQuery().forEntitiesAtRevision( EntityA.class, 1 ).traverseRelation( "bOneToMany", JoinType.INNER ) - .add( AuditEntity.property( "name" ).eq( "B1" ) ).getResultList(); - assertEquals( "Expected exactly one entity", 1, list1.size() ); - EntityA entityA1 = (EntityA) list1.get( 0 ); - assertEquals( "Expected the correct entity to be resolved", aOneToMany.getId(), entityA1.getId() ); - - List list2 = getAuditReader().createQuery().forEntitiesAtRevision( EntityA.class, 1 ).traverseRelation( "bOneToMany", JoinType.INNER ) - .add( AuditEntity.property( "name" ).eq( "B2" ) ).getResultList(); - assertTrue( "Expected no entities to be returned, since B2 has been added in revision 2", list2.isEmpty() ); - - List list3 = getAuditReader().createQuery().forEntitiesAtRevision( EntityA.class, 2 ).traverseRelation( "bOneToMany", JoinType.INNER ) - .add( AuditEntity.property( "name" ).eq( "B2" ) ).getResultList(); - assertEquals( "Expected exactly one entity", 1, list3.size() ); - EntityA entityA3 = (EntityA) list3.get( 0 ); - assertEquals( "Expected the correct entity to be resolved", aOneToMany.getId(), entityA3.getId() ); - - List list4 = getAuditReader().createQuery().forEntitiesAtRevision( EntityA.class, 2 ).traverseRelation( "bOneToMany", JoinType.INNER ) - .add( AuditEntity.property( "name" ).eq( "B1" ) ).getResultList(); - assertTrue( "Expected no entities to be returned, since B1 has been removed in revision 2", list4.isEmpty() ); + public void testOneToManyInnerJoin(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + List list1 = AuditReaderFactory.get( em ).createQuery().forEntitiesAtRevision( EntityA.class, 1 ).traverseRelation( "bOneToMany", JoinType.INNER ) + .add( AuditEntity.property( "name" ).eq( "B1" ) ).getResultList(); + assertEquals( 1, list1.size(), "Expected exactly one entity" ); + EntityA entityA1 = (EntityA) list1.get( 0 ); + assertEquals( aOneToMany.getId(), entityA1.getId(), "Expected the correct entity to be resolved" ); + + List list2 = AuditReaderFactory.get( em ).createQuery().forEntitiesAtRevision( EntityA.class, 1 ).traverseRelation( "bOneToMany", JoinType.INNER ) + .add( AuditEntity.property( "name" ).eq( "B2" ) ).getResultList(); + assertTrue( list2.isEmpty(), "Expected no entities to be returned, since B2 has been added in revision 2" ); + + List list3 = AuditReaderFactory.get( em ).createQuery().forEntitiesAtRevision( EntityA.class, 2 ).traverseRelation( "bOneToMany", JoinType.INNER ) + .add( AuditEntity.property( "name" ).eq( "B2" ) ).getResultList(); + assertEquals( 1, list3.size(), "Expected exactly one entity" ); + EntityA entityA3 = (EntityA) list3.get( 0 ); + assertEquals( aOneToMany.getId(), entityA3.getId(), "Expected the correct entity to be resolved" ); + + List list4 = AuditReaderFactory.get( em ).createQuery().forEntitiesAtRevision( EntityA.class, 2 ).traverseRelation( "bOneToMany", JoinType.INNER ) + .add( AuditEntity.property( "name" ).eq( "B1" ) ).getResultList(); + assertTrue( list4.isEmpty(), "Expected no entities to be returned, since B1 has been removed in revision 2" ); + } ); } @Test - public void testOneToManyLeftJoin() { - List list = getAuditReader().createQuery().forEntitiesAtRevision( EntityA.class, 1 ).traverseRelation( "bOneToMany", JoinType.LEFT, "b" ).up() - .add( AuditEntity.or( AuditEntity.property( "name" ).eq( "aEmpty" ), AuditEntity.property( "b", "name" ).eq( "B1" ) ) ) - .getResultList(); - assertTrue( "Expected the correct entities to be resolved", listContainsIds( list, aEmpty.getId(), aOneToMany.getId() ) ); + public void testOneToManyLeftJoin(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + List list = AuditReaderFactory.get( em ).createQuery().forEntitiesAtRevision( EntityA.class, 1 ).traverseRelation( "bOneToMany", JoinType.LEFT, "b" ).up() + .add( AuditEntity.or( AuditEntity.property( "name" ).eq( "aEmpty" ), AuditEntity.property( "b", "name" ).eq( "B1" ) ) ) + .getResultList(); + assertTrue( listContainsIds( list, aEmpty.getId(), aOneToMany.getId() ), "Expected the correct entities to be resolved" ); + } ); } @Test - public void testManyToManyInnerJoin() { - List list1 = getAuditReader().createQuery().forEntitiesAtRevision( EntityA.class, 1 ).traverseRelation( "bManyToMany", JoinType.INNER ) - .add( AuditEntity.property( "name" ).eq( "B1" ) ).getResultList(); - assertEquals( "Expected exactly one entity", 1, list1.size() ); - EntityA entityA1 = (EntityA) list1.get( 0 ); - assertEquals( "Expected the correct entity to be resolved", aManyToMany.getId(), entityA1.getId() ); - - List list2 = getAuditReader().createQuery().forEntitiesAtRevision( EntityA.class, 1 ).traverseRelation( "bManyToMany", JoinType.INNER ) - .add( AuditEntity.property( "name" ).eq( "B2" ) ).getResultList(); - assertTrue( "Expected no entities to be returned, since B2 has been added in revision 2", list2.isEmpty() ); - - List list3 = getAuditReader().createQuery().forEntitiesAtRevision( EntityA.class, 2 ).traverseRelation( "bManyToMany", JoinType.INNER ) - .add( AuditEntity.property( "name" ).eq( "B2" ) ).getResultList(); - assertEquals( "Expected exactly one entity", 1, list3.size() ); - EntityA entityA3 = (EntityA) list3.get( 0 ); - assertEquals( "Expected the correct entity to be resolved", aManyToMany.getId(), entityA3.getId() ); - - List list4 = getAuditReader().createQuery().forEntitiesAtRevision( EntityA.class, 2 ).traverseRelation( "bManyToMany", JoinType.INNER ) - .add( AuditEntity.property( "name" ).eq( "B1" ) ).getResultList(); - assertTrue( "Expected no entities to be returned, since B1 has been removed in revision 2", list4.isEmpty() ); + public void testManyToManyInnerJoin(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + List list1 = AuditReaderFactory.get( em ).createQuery().forEntitiesAtRevision( EntityA.class, 1 ).traverseRelation( "bManyToMany", JoinType.INNER ) + .add( AuditEntity.property( "name" ).eq( "B1" ) ).getResultList(); + assertEquals( 1, list1.size(), "Expected exactly one entity" ); + EntityA entityA1 = (EntityA) list1.get( 0 ); + assertEquals( aManyToMany.getId(), entityA1.getId(), "Expected the correct entity to be resolved" ); + + List list2 = AuditReaderFactory.get( em ).createQuery().forEntitiesAtRevision( EntityA.class, 1 ).traverseRelation( "bManyToMany", JoinType.INNER ) + .add( AuditEntity.property( "name" ).eq( "B2" ) ).getResultList(); + assertTrue( list2.isEmpty(), "Expected no entities to be returned, since B2 has been added in revision 2" ); + + List list3 = AuditReaderFactory.get( em ).createQuery().forEntitiesAtRevision( EntityA.class, 2 ).traverseRelation( "bManyToMany", JoinType.INNER ) + .add( AuditEntity.property( "name" ).eq( "B2" ) ).getResultList(); + assertEquals( 1, list3.size(), "Expected exactly one entity" ); + EntityA entityA3 = (EntityA) list3.get( 0 ); + assertEquals( aManyToMany.getId(), entityA3.getId(), "Expected the correct entity to be resolved" ); + + List list4 = AuditReaderFactory.get( em ).createQuery().forEntitiesAtRevision( EntityA.class, 2 ).traverseRelation( "bManyToMany", JoinType.INNER ) + .add( AuditEntity.property( "name" ).eq( "B1" ) ).getResultList(); + assertTrue( list4.isEmpty(), "Expected no entities to be returned, since B1 has been removed in revision 2" ); + } ); } @Test - public void testManyToManyLeftJoin() { - List list = getAuditReader().createQuery().forEntitiesAtRevision( EntityA.class, 1 ).traverseRelation( "bManyToMany", JoinType.LEFT, "b" ).up() - .add( AuditEntity.or( AuditEntity.property( "name" ).eq( "aEmpty" ), AuditEntity.property( "b", "name" ).eq( "B1" ) ) ) - .getResultList(); - assertTrue( "Expected the correct entities to be resolved", listContainsIds( list, aEmpty.getId(), aManyToMany.getId() ) ); + public void testManyToManyLeftJoin(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + List list = AuditReaderFactory.get( em ).createQuery().forEntitiesAtRevision( EntityA.class, 1 ).traverseRelation( "bManyToMany", JoinType.LEFT, "b" ).up() + .add( AuditEntity.or( AuditEntity.property( "name" ).eq( "aEmpty" ), AuditEntity.property( "b", "name" ).eq( "B1" ) ) ) + .getResultList(); + assertTrue( listContainsIds( list, aEmpty.getId(), aManyToMany.getId() ), "Expected the correct entities to be resolved" ); + } ); } @Test - public void testBidiOneToManyInnerJoin() { - List list1 = getAuditReader().createQuery().forEntitiesAtRevision( EntityA.class, 1 ).traverseRelation( "bidiCOneToManyInverse", JoinType.INNER ) - .add( AuditEntity.property( "name" ).eq( "C1" ) ).getResultList(); - assertEquals( "Expected exactly one entity", 1, list1.size() ); - EntityA entityA1 = (EntityA) list1.get( 0 ); - assertEquals( "Expected the correct entity to be resolved", aBidiOneToManyInverse.getId(), entityA1.getId() ); - - List list2 = getAuditReader().createQuery().forEntitiesAtRevision( EntityA.class, 1 ).traverseRelation( "bidiCOneToManyInverse", JoinType.INNER ) - .add( AuditEntity.property( "name" ).eq( "C2" ) ).getResultList(); - assertTrue( "Expected no entities to be returned, since C2 has been added in revision 2", list2.isEmpty() ); - - List list3 = getAuditReader().createQuery().forEntitiesAtRevision( EntityA.class, 2 ).traverseRelation( "bidiCOneToManyInverse", JoinType.INNER ) - .add( AuditEntity.property( "name" ).eq( "C2" ) ).getResultList(); - assertEquals( "Expected exactly one entity", 1, list3.size() ); - EntityA entityA3 = (EntityA) list3.get( 0 ); - assertEquals( "Expected the correct entity to be resolved", aBidiOneToManyInverse.getId(), entityA3.getId() ); - - List list4 = getAuditReader().createQuery().forEntitiesAtRevision( EntityA.class, 2 ).traverseRelation( "bidiCOneToManyInverse", JoinType.INNER ) - .add( AuditEntity.property( "name" ).eq( "C1" ) ).getResultList(); - assertTrue( "Expected no entities to be returned, since C1 has been removed in revision 2", list4.isEmpty() ); + public void testBidiOneToManyInnerJoin(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + List list1 = AuditReaderFactory.get( em ).createQuery().forEntitiesAtRevision( EntityA.class, 1 ).traverseRelation( "bidiCOneToManyInverse", JoinType.INNER ) + .add( AuditEntity.property( "name" ).eq( "C1" ) ).getResultList(); + assertEquals( 1, list1.size(), "Expected exactly one entity" ); + EntityA entityA1 = (EntityA) list1.get( 0 ); + assertEquals( aBidiOneToManyInverse.getId(), entityA1.getId(), "Expected the correct entity to be resolved" ); + + List list2 = AuditReaderFactory.get( em ).createQuery().forEntitiesAtRevision( EntityA.class, 1 ).traverseRelation( "bidiCOneToManyInverse", JoinType.INNER ) + .add( AuditEntity.property( "name" ).eq( "C2" ) ).getResultList(); + assertTrue( list2.isEmpty(), "Expected no entities to be returned, since C2 has been added in revision 2" ); + + List list3 = AuditReaderFactory.get( em ).createQuery().forEntitiesAtRevision( EntityA.class, 2 ).traverseRelation( "bidiCOneToManyInverse", JoinType.INNER ) + .add( AuditEntity.property( "name" ).eq( "C2" ) ).getResultList(); + assertEquals( 1, list3.size(), "Expected exactly one entity" ); + EntityA entityA3 = (EntityA) list3.get( 0 ); + assertEquals( aBidiOneToManyInverse.getId(), entityA3.getId(), "Expected the correct entity to be resolved" ); + + List list4 = AuditReaderFactory.get( em ).createQuery().forEntitiesAtRevision( EntityA.class, 2 ).traverseRelation( "bidiCOneToManyInverse", JoinType.INNER ) + .add( AuditEntity.property( "name" ).eq( "C1" ) ).getResultList(); + assertTrue( list4.isEmpty(), "Expected no entities to be returned, since C1 has been removed in revision 2" ); + } ); } @Test - public void testBidiOneToManyLeftJoin() { - List list = getAuditReader().createQuery().forEntitiesAtRevision( EntityA.class, 1 ).traverseRelation( "bidiCOneToManyInverse", JoinType.LEFT, "c" ) - .up() - .add( AuditEntity.or( AuditEntity.property( "name" ).eq( "aEmpty" ), AuditEntity.property( "c", "name" ).eq( "C1" ) ) ) - .getResultList(); - assertTrue( "Expected the correct entities to be resolved", listContainsIds( list, aEmpty.getId(), aBidiOneToManyInverse.getId() ) ); + public void testBidiOneToManyLeftJoin(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + List list = AuditReaderFactory.get( em ).createQuery().forEntitiesAtRevision( EntityA.class, 1 ).traverseRelation( "bidiCOneToManyInverse", JoinType.LEFT, "c" ) + .up() + .add( AuditEntity.or( AuditEntity.property( "name" ).eq( "aEmpty" ), AuditEntity.property( "c", "name" ).eq( "C1" ) ) ) + .getResultList(); + assertTrue( listContainsIds( list, aEmpty.getId(), aBidiOneToManyInverse.getId() ), "Expected the correct entities to be resolved" ); + } ); } @Test - public void testBidiManyToManyOwningInnerJoin() { - List list1 = getAuditReader().createQuery().forEntitiesAtRevision( EntityA.class, 1 ).traverseRelation( "bidiCManyToManyOwning", JoinType.INNER ) - .add( AuditEntity.property( "name" ).eq( "C1" ) ).getResultList(); - assertEquals( "Expected exactly one entity", 1, list1.size() ); - EntityA entityA1 = (EntityA) list1.get( 0 ); - assertEquals( "Expected the correct entity to be resolved", aBidiManyToManyOwning.getId(), entityA1.getId() ); - - List list2 = getAuditReader().createQuery().forEntitiesAtRevision( EntityA.class, 1 ).traverseRelation( "bidiCManyToManyOwning", JoinType.INNER ) - .add( AuditEntity.property( "name" ).eq( "C2" ) ).getResultList(); - assertTrue( "Expected no entities to be returned, since C2 has been added in revision 2", list2.isEmpty() ); - - List list3 = getAuditReader().createQuery().forEntitiesAtRevision( EntityA.class, 2 ).traverseRelation( "bidiCManyToManyOwning", JoinType.INNER ) - .add( AuditEntity.property( "name" ).eq( "C2" ) ).getResultList(); - assertEquals( "Expected exactly one entity", 1, list3.size() ); - EntityA entityA3 = (EntityA) list3.get( 0 ); - assertEquals( "Expected the correct entity to be resolved", aBidiManyToManyOwning.getId(), entityA3.getId() ); - - List list4 = getAuditReader().createQuery().forEntitiesAtRevision( EntityA.class, 2 ).traverseRelation( "bidiCManyToManyOwning", JoinType.INNER ) - .add( AuditEntity.property( "name" ).eq( "C1" ) ).getResultList(); - assertTrue( "Expected no entities to be returned, since C1 has been removed in revision 2", list4.isEmpty() ); + public void testBidiManyToManyOwningInnerJoin(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + List list1 = AuditReaderFactory.get( em ).createQuery().forEntitiesAtRevision( EntityA.class, 1 ).traverseRelation( "bidiCManyToManyOwning", JoinType.INNER ) + .add( AuditEntity.property( "name" ).eq( "C1" ) ).getResultList(); + assertEquals( 1, list1.size(), "Expected exactly one entity" ); + EntityA entityA1 = (EntityA) list1.get( 0 ); + assertEquals( aBidiManyToManyOwning.getId(), entityA1.getId(), "Expected the correct entity to be resolved" ); + + List list2 = AuditReaderFactory.get( em ).createQuery().forEntitiesAtRevision( EntityA.class, 1 ).traverseRelation( "bidiCManyToManyOwning", JoinType.INNER ) + .add( AuditEntity.property( "name" ).eq( "C2" ) ).getResultList(); + assertTrue( list2.isEmpty(), "Expected no entities to be returned, since C2 has been added in revision 2" ); + + List list3 = AuditReaderFactory.get( em ).createQuery().forEntitiesAtRevision( EntityA.class, 2 ).traverseRelation( "bidiCManyToManyOwning", JoinType.INNER ) + .add( AuditEntity.property( "name" ).eq( "C2" ) ).getResultList(); + assertEquals( 1, list3.size(), "Expected exactly one entity" ); + EntityA entityA3 = (EntityA) list3.get( 0 ); + assertEquals( aBidiManyToManyOwning.getId(), entityA3.getId(), "Expected the correct entity to be resolved" ); + + List list4 = AuditReaderFactory.get( em ).createQuery().forEntitiesAtRevision( EntityA.class, 2 ).traverseRelation( "bidiCManyToManyOwning", JoinType.INNER ) + .add( AuditEntity.property( "name" ).eq( "C1" ) ).getResultList(); + assertTrue( list4.isEmpty(), "Expected no entities to be returned, since C1 has been removed in revision 2" ); + } ); } @Test - public void testBidiManyToManyOwningLeftJoin() { - List list = getAuditReader().createQuery().forEntitiesAtRevision( EntityA.class, 1 ).traverseRelation( "bidiCManyToManyOwning", JoinType.LEFT, "c" ) - .up() - .add( AuditEntity.or( AuditEntity.property( "name" ).eq( "aEmpty" ), AuditEntity.property( "c", "name" ).eq( "C1" ) ) ) - .getResultList(); - assertTrue( "Expected the correct entities to be resolved", listContainsIds( list, aEmpty.getId(), aBidiManyToManyOwning.getId() ) ); + public void testBidiManyToManyOwningLeftJoin(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + List list = AuditReaderFactory.get( em ).createQuery().forEntitiesAtRevision( EntityA.class, 1 ).traverseRelation( "bidiCManyToManyOwning", JoinType.LEFT, "c" ) + .up() + .add( AuditEntity.or( AuditEntity.property( "name" ).eq( "aEmpty" ), AuditEntity.property( "c", "name" ).eq( "C1" ) ) ) + .getResultList(); + assertTrue( listContainsIds( list, aEmpty.getId(), aBidiManyToManyOwning.getId() ), "Expected the correct entities to be resolved" ); + } ); } @Test - public void testBidiManyToManyInverseInnerJoin() { - List list1 = getAuditReader().createQuery().forEntitiesAtRevision( EntityA.class, 1 ).traverseRelation( "bidiCManyToManyInverse", JoinType.INNER ) - .add( AuditEntity.property( "name" ).eq( "C1" ) ).getResultList(); - assertEquals( "Expected exactly one entity", 1, list1.size() ); - EntityA entityA1 = (EntityA) list1.get( 0 ); - assertEquals( "Expected the correct entity to be resolved", aBidiManyToManyInverse.getId(), entityA1.getId() ); - - List list2 = getAuditReader().createQuery().forEntitiesAtRevision( EntityA.class, 1 ).traverseRelation( "bidiCManyToManyInverse", JoinType.INNER ) - .add( AuditEntity.property( "name" ).eq( "C2" ) ).getResultList(); - assertTrue( "Expected no entities to be returned, since C2 has been added in revision 2", list2.isEmpty() ); - - List list3 = getAuditReader().createQuery().forEntitiesAtRevision( EntityA.class, 2 ).traverseRelation( "bidiCManyToManyInverse", JoinType.INNER ) - .add( AuditEntity.property( "name" ).eq( "C2" ) ).getResultList(); - assertEquals( "Expected exactly one entity", 1, list3.size() ); - EntityA entityA3 = (EntityA) list3.get( 0 ); - assertEquals( "Expected the correct entity to be resolved", aBidiManyToManyInverse.getId(), entityA3.getId() ); - - List list4 = getAuditReader().createQuery().forEntitiesAtRevision( EntityA.class, 2 ).traverseRelation( "bidiCManyToManyInverse", JoinType.INNER ) - .add( AuditEntity.property( "name" ).eq( "C1" ) ).getResultList(); - assertTrue( "Expected no entities to be returned, since C1 has been removed in revision 2", list4.isEmpty() ); + public void testBidiManyToManyInverseInnerJoin(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + List list1 = AuditReaderFactory.get( em ).createQuery().forEntitiesAtRevision( EntityA.class, 1 ).traverseRelation( "bidiCManyToManyInverse", JoinType.INNER ) + .add( AuditEntity.property( "name" ).eq( "C1" ) ).getResultList(); + assertEquals( 1, list1.size(), "Expected exactly one entity" ); + EntityA entityA1 = (EntityA) list1.get( 0 ); + assertEquals( aBidiManyToManyInverse.getId(), entityA1.getId(), "Expected the correct entity to be resolved" ); + + List list2 = AuditReaderFactory.get( em ).createQuery().forEntitiesAtRevision( EntityA.class, 1 ).traverseRelation( "bidiCManyToManyInverse", JoinType.INNER ) + .add( AuditEntity.property( "name" ).eq( "C2" ) ).getResultList(); + assertTrue( list2.isEmpty(), "Expected no entities to be returned, since C2 has been added in revision 2" ); + + List list3 = AuditReaderFactory.get( em ).createQuery().forEntitiesAtRevision( EntityA.class, 2 ).traverseRelation( "bidiCManyToManyInverse", JoinType.INNER ) + .add( AuditEntity.property( "name" ).eq( "C2" ) ).getResultList(); + assertEquals( 1, list3.size(), "Expected exactly one entity" ); + EntityA entityA3 = (EntityA) list3.get( 0 ); + assertEquals( aBidiManyToManyInverse.getId(), entityA3.getId(), "Expected the correct entity to be resolved" ); + + List list4 = AuditReaderFactory.get( em ).createQuery().forEntitiesAtRevision( EntityA.class, 2 ).traverseRelation( "bidiCManyToManyInverse", JoinType.INNER ) + .add( AuditEntity.property( "name" ).eq( "C1" ) ).getResultList(); + assertTrue( list4.isEmpty(), "Expected no entities to be returned, since C1 has been removed in revision 2" ); + } ); } @Test - public void testBidiManyToManyInverseLeftJoin() { - List list = getAuditReader().createQuery().forEntitiesAtRevision( EntityA.class, 1 ).traverseRelation( "bidiCManyToManyInverse", JoinType.LEFT, "c" ) - .up() - .add( AuditEntity.or( AuditEntity.property( "name" ).eq( "aEmpty" ), AuditEntity.property( "c", "name" ).eq( "C1" ) ) ) - .getResultList(); - assertTrue( "Expected the correct entities to be resolved", listContainsIds( list, aEmpty.getId(), aBidiManyToManyInverse.getId() ) ); + public void testBidiManyToManyInverseLeftJoin(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + List list = AuditReaderFactory.get( em ).createQuery().forEntitiesAtRevision( EntityA.class, 1 ).traverseRelation( "bidiCManyToManyInverse", JoinType.LEFT, "c" ) + .up() + .add( AuditEntity.or( AuditEntity.property( "name" ).eq( "aEmpty" ), AuditEntity.property( "c", "name" ).eq( "C1" ) ) ) + .getResultList(); + assertTrue( listContainsIds( list, aEmpty.getId(), aBidiManyToManyInverse.getId() ), "Expected the correct entities to be resolved" ); + } ); } private boolean listContainsIds(final Collection entities, final long... ids) { diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/AssociationToNotAuditedManyJoinQueryTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/AssociationToNotAuditedManyJoinQueryTest.java index 47d947f1dbf2..03cc38608ddd 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/AssociationToNotAuditedManyJoinQueryTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/AssociationToNotAuditedManyJoinQueryTest.java @@ -4,16 +4,12 @@ */ package org.hibernate.orm.test.envers.integration.query; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; - import java.util.Collection; import java.util.HashSet; import java.util.List; import java.util.Set; import jakarta.persistence.Entity; -import jakarta.persistence.EntityManager; import jakarta.persistence.Id; import jakarta.persistence.JoinTable; import jakarta.persistence.ManyToMany; @@ -21,19 +17,31 @@ import jakarta.persistence.criteria.JoinType; import org.hibernate.envers.AuditJoinTable; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.Audited; import org.hibernate.envers.RelationTargetAuditMode; import org.hibernate.envers.query.AuditEntity; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; +import org.hibernate.testing.orm.junit.Jpa; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; /** * @author Felix Feisst (feisst dot felix at gmail dot com) */ @JiraKey(value = "HHH-11735") -public class AssociationToNotAuditedManyJoinQueryTest extends BaseEnversJPAFunctionalTestCase { +@Jpa(annotatedClasses = { + AssociationToNotAuditedManyJoinQueryTest.EntityA.class, + AssociationToNotAuditedManyJoinQueryTest.EntityB.class, + AssociationToNotAuditedManyJoinQueryTest.EntityC.class +}) +@EnversTest +public class AssociationToNotAuditedManyJoinQueryTest { private EntityA aEmpty; private EntityA aOneToMany; @@ -228,266 +236,188 @@ public void setBidiAManyToManyInverse(Set bidiAManyToManyInverse) { } - @Override - protected Class[] getAnnotatedClasses() { - return new Class[]{ EntityA.class, EntityB.class, EntityC.class }; - } - - @Test - @Priority(10) - public void initData() { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // revision 1: - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - b1 = new EntityB(); - b1.setId( 21L ); - b1.setName( "B1" ); - em.persist( b1 ); - b2 = new EntityB(); - b2.setId( 22L ); - b2.setName( "B2" ); - em.persist( b2 ); - b3 = new EntityB(); - b3.setId( 23L ); - b3.setName( "B3" ); - em.persist( b3 ); - c1 = new EntityC(); - c1.setId( 31L ); - c1.setName( "C1" ); - em.persist( c1 ); - c2 = new EntityC(); - c2.setId( 32L ); - c2.setName( "C2" ); - em.persist( c2 ); - c3 = new EntityC(); - c3.setId( 33L ); - c3.setName( "C3" ); - em.persist( c3 ); - aEmpty = new EntityA(); - aEmpty.setId( 1L ); - aEmpty.setName( "aEmpty" ); - em.persist( aEmpty ); - aOneToMany = new EntityA(); - aOneToMany.setId( 2L ); - aOneToMany.setName( "aOneToMany" ); - aOneToMany.getbOneToMany().add( b1 ); - aOneToMany.getbOneToMany().add( b3 ); - em.persist( aOneToMany ); - aManyToMany = new EntityA(); - aManyToMany.setId( 3L ); - aManyToMany.setName( "aManyToMany" ); - aManyToMany.getbManyToMany().add( b1 ); - aManyToMany.getbManyToMany().add( b3 ); - em.persist( aManyToMany ); - aBidiOneToManyInverse = new EntityA(); - aBidiOneToManyInverse.setId( 4L ); - aBidiOneToManyInverse.setName( "aBidiOneToManyInverse" ); - // aBidiOneToManyInverse.getBidiCOneToManyInverse().add( c1 ); - // c1.setBidiAManyToOneOwning( aBidiOneToManyInverse ); - // aBidiOneToManyInverse.getBidiCOneToManyInverse().add( c3 ); - // c3.setBidiAManyToOneOwning( aBidiOneToManyInverse ); - em.persist( aBidiOneToManyInverse ); - aBidiManyToManyOwning = new EntityA(); - aBidiManyToManyOwning.setId( 5L ); - aBidiManyToManyOwning.setName( "aBidiManyToManyOwning" ); - aBidiManyToManyOwning.getBidiCManyToManyOwning().add( c1 ); - c1.getBidiAManyToManyInverse().add( aBidiManyToManyOwning ); - aBidiManyToManyOwning.getBidiCManyToManyOwning().add( c3 ); - c3.getBidiAManyToManyInverse().add( aBidiManyToManyOwning ); - em.persist( aBidiManyToManyOwning ); - aBidiManyToManyInverse = new EntityA(); - aBidiManyToManyInverse.setId( 6L ); - aBidiManyToManyInverse.setName( "aBidiManyToManyInverse" ); - // aBidiManyToManyInverse.getBidiCManyToManyInverse().add( c1 ); - // c1.getBidiAManyToManyOwning().add( aBidiManyToManyInverse ); - // aBidiManyToManyInverse.getBidiCManyToManyInverse().add( c3 ); - // c3.getBidiAManyToManyOwning().add( aBidiManyToManyInverse ); - em.persist( aBidiManyToManyInverse ); - em.getTransaction().commit(); - - // revision 2: - em.getTransaction().begin(); - aOneToMany.getbOneToMany().remove( b1 ); - aOneToMany.getbOneToMany().add( b2 ); - aManyToMany.getbManyToMany().remove( b1 ); - aManyToMany.getbManyToMany().add( b2 ); - // aBidiOneToManyInverse.getBidiCOneToManyInverse().remove( c1 ); - // c1.setBidiAManyToOneOwning( null ); - // aBidiOneToManyInverse.getBidiCOneToManyInverse().add( c2 ); - // c2.setBidiAManyToOneOwning( aBidiOneToManyInverse ); - aBidiManyToManyOwning.getBidiCManyToManyOwning().remove( c1 ); - c1.getBidiAManyToManyInverse().remove( aBidiManyToManyOwning ); - aBidiManyToManyOwning.getBidiCManyToManyOwning().add( c2 ); - c2.getBidiAManyToManyInverse().add( aBidiManyToManyOwning ); - // aBidiManyToManyInverse.getBidiCManyToManyInverse().remove( c1 ); - // c1.getBidiAManyToManyOwning().remove( aBidiManyToManyInverse ); - // aBidiManyToManyInverse.getBidiCManyToManyInverse().add( c2 ); - // c2.getBidiAManyToManyOwning().add( aBidiManyToManyInverse ); - em.getTransaction().commit(); + scope.inEntityManager( em -> { + em.getTransaction().begin(); + b1 = new EntityB(); + b1.setId( 21L ); + b1.setName( "B1" ); + em.persist( b1 ); + b2 = new EntityB(); + b2.setId( 22L ); + b2.setName( "B2" ); + em.persist( b2 ); + b3 = new EntityB(); + b3.setId( 23L ); + b3.setName( "B3" ); + em.persist( b3 ); + c1 = new EntityC(); + c1.setId( 31L ); + c1.setName( "C1" ); + em.persist( c1 ); + c2 = new EntityC(); + c2.setId( 32L ); + c2.setName( "C2" ); + em.persist( c2 ); + c3 = new EntityC(); + c3.setId( 33L ); + c3.setName( "C3" ); + em.persist( c3 ); + aEmpty = new EntityA(); + aEmpty.setId( 1L ); + aEmpty.setName( "aEmpty" ); + em.persist( aEmpty ); + aOneToMany = new EntityA(); + aOneToMany.setId( 2L ); + aOneToMany.setName( "aOneToMany" ); + aOneToMany.getbOneToMany().add( b1 ); + aOneToMany.getbOneToMany().add( b3 ); + em.persist( aOneToMany ); + aManyToMany = new EntityA(); + aManyToMany.setId( 3L ); + aManyToMany.setName( "aManyToMany" ); + aManyToMany.getbManyToMany().add( b1 ); + aManyToMany.getbManyToMany().add( b3 ); + em.persist( aManyToMany ); + aBidiOneToManyInverse = new EntityA(); + aBidiOneToManyInverse.setId( 4L ); + aBidiOneToManyInverse.setName( "aBidiOneToManyInverse" ); + em.persist( aBidiOneToManyInverse ); + aBidiManyToManyOwning = new EntityA(); + aBidiManyToManyOwning.setId( 5L ); + aBidiManyToManyOwning.setName( "aBidiManyToManyOwning" ); + aBidiManyToManyOwning.getBidiCManyToManyOwning().add( c1 ); + c1.getBidiAManyToManyInverse().add( aBidiManyToManyOwning ); + aBidiManyToManyOwning.getBidiCManyToManyOwning().add( c3 ); + c3.getBidiAManyToManyInverse().add( aBidiManyToManyOwning ); + em.persist( aBidiManyToManyOwning ); + aBidiManyToManyInverse = new EntityA(); + aBidiManyToManyInverse.setId( 6L ); + aBidiManyToManyInverse.setName( "aBidiManyToManyInverse" ); + em.persist( aBidiManyToManyInverse ); + em.getTransaction().commit(); + + em.getTransaction().begin(); + aOneToMany.getbOneToMany().remove( b1 ); + aOneToMany.getbOneToMany().add( b2 ); + aManyToMany.getbManyToMany().remove( b1 ); + aManyToMany.getbManyToMany().add( b2 ); + aBidiManyToManyOwning.getBidiCManyToManyOwning().remove( c1 ); + c1.getBidiAManyToManyInverse().remove( aBidiManyToManyOwning ); + aBidiManyToManyOwning.getBidiCManyToManyOwning().add( c2 ); + c2.getBidiAManyToManyInverse().add( aBidiManyToManyOwning ); + em.getTransaction().commit(); + } ); } @Test - public void testOneToManyInnerJoin() { - List list1 = getAuditReader().createQuery().forEntitiesAtRevision( EntityA.class, 1 ).traverseRelation( "bOneToMany", JoinType.INNER ) - .add( AuditEntity.property( "name" ).eq( "B1" ) ).getResultList(); - assertEquals( "Expected exactly one entity", 1, list1.size() ); - EntityA entityA1 = (EntityA) list1.get( 0 ); - assertEquals( "Expected the correct entity to be resolved", aOneToMany.getId(), entityA1.getId() ); - - List list2 = getAuditReader().createQuery().forEntitiesAtRevision( EntityA.class, 1 ).traverseRelation( "bOneToMany", JoinType.INNER ) - .add( AuditEntity.property( "name" ).eq( "B2" ) ).getResultList(); - assertTrue( "Expected no entities to be returned, since B2 has been added in revision 2", list2.isEmpty() ); - - List list3 = getAuditReader().createQuery().forEntitiesAtRevision( EntityA.class, 2 ).traverseRelation( "bOneToMany", JoinType.INNER ) - .add( AuditEntity.property( "name" ).eq( "B2" ) ).getResultList(); - assertEquals( "Expected exactly one entity", 1, list3.size() ); - EntityA entityA3 = (EntityA) list3.get( 0 ); - assertEquals( "Expected the correct entity to be resolved", aOneToMany.getId(), entityA3.getId() ); - - List list4 = getAuditReader().createQuery().forEntitiesAtRevision( EntityA.class, 2 ).traverseRelation( "bOneToMany", JoinType.INNER ) - .add( AuditEntity.property( "name" ).eq( "B1" ) ).getResultList(); - assertTrue( "Expected no entities to be returned, since B1 has been removed in revision 2", list4.isEmpty() ); + public void testOneToManyInnerJoin(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + List list1 = AuditReaderFactory.get( em ).createQuery().forEntitiesAtRevision( EntityA.class, 1 ).traverseRelation( "bOneToMany", JoinType.INNER ) + .add( AuditEntity.property( "name" ).eq( "B1" ) ).getResultList(); + assertEquals( 1, list1.size(), "Expected exactly one entity" ); + EntityA entityA1 = (EntityA) list1.get( 0 ); + assertEquals( aOneToMany.getId(), entityA1.getId(), "Expected the correct entity to be resolved" ); + + List list2 = AuditReaderFactory.get( em ).createQuery().forEntitiesAtRevision( EntityA.class, 1 ).traverseRelation( "bOneToMany", JoinType.INNER ) + .add( AuditEntity.property( "name" ).eq( "B2" ) ).getResultList(); + assertTrue( list2.isEmpty(), "Expected no entities to be returned, since B2 has been added in revision 2" ); + + List list3 = AuditReaderFactory.get( em ).createQuery().forEntitiesAtRevision( EntityA.class, 2 ).traverseRelation( "bOneToMany", JoinType.INNER ) + .add( AuditEntity.property( "name" ).eq( "B2" ) ).getResultList(); + assertEquals( 1, list3.size(), "Expected exactly one entity" ); + EntityA entityA3 = (EntityA) list3.get( 0 ); + assertEquals( aOneToMany.getId(), entityA3.getId(), "Expected the correct entity to be resolved" ); + + List list4 = AuditReaderFactory.get( em ).createQuery().forEntitiesAtRevision( EntityA.class, 2 ).traverseRelation( "bOneToMany", JoinType.INNER ) + .add( AuditEntity.property( "name" ).eq( "B1" ) ).getResultList(); + assertTrue( list4.isEmpty(), "Expected no entities to be returned, since B1 has been removed in revision 2" ); + } ); } @Test - public void testOneToManyLeftJoin() { - List list = getAuditReader().createQuery().forEntitiesAtRevision( EntityA.class, 1 ).traverseRelation( "bOneToMany", JoinType.LEFT, "b" ).up() - .add( AuditEntity.or( AuditEntity.property( "name" ).eq( "aEmpty" ), AuditEntity.property( "b", "name" ).eq( "B1" ) ) ) - .getResultList(); - assertTrue( "Expected the correct entities to be resolved", listContainsIds( list, aEmpty.getId(), aOneToMany.getId() ) ); + public void testOneToManyLeftJoin(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + List list = AuditReaderFactory.get( em ).createQuery().forEntitiesAtRevision( EntityA.class, 1 ).traverseRelation( "bOneToMany", JoinType.LEFT, "b" ).up() + .add( AuditEntity.or( AuditEntity.property( "name" ).eq( "aEmpty" ), AuditEntity.property( "b", "name" ).eq( "B1" ) ) ) + .getResultList(); + assertTrue( listContainsIds( list, aEmpty.getId(), aOneToMany.getId() ), "Expected the correct entities to be resolved" ); + } ); } @Test - public void testManyToManyInnerJoin() { - List list1 = getAuditReader().createQuery().forEntitiesAtRevision( EntityA.class, 1 ).traverseRelation( "bManyToMany", JoinType.INNER ) - .add( AuditEntity.property( "name" ).eq( "B1" ) ).getResultList(); - assertEquals( "Expected exactly one entity", 1, list1.size() ); - EntityA entityA1 = (EntityA) list1.get( 0 ); - assertEquals( "Expected the correct entity to be resolved", aManyToMany.getId(), entityA1.getId() ); - - List list2 = getAuditReader().createQuery().forEntitiesAtRevision( EntityA.class, 1 ).traverseRelation( "bManyToMany", JoinType.INNER ) - .add( AuditEntity.property( "name" ).eq( "B2" ) ).getResultList(); - assertTrue( "Expected no entities to be returned, since B2 has been added in revision 2", list2.isEmpty() ); - - List list3 = getAuditReader().createQuery().forEntitiesAtRevision( EntityA.class, 2 ).traverseRelation( "bManyToMany", JoinType.INNER ) - .add( AuditEntity.property( "name" ).eq( "B2" ) ).getResultList(); - assertEquals( "Expected exactly one entity", 1, list3.size() ); - EntityA entityA3 = (EntityA) list3.get( 0 ); - assertEquals( "Expected the correct entity to be resolved", aManyToMany.getId(), entityA3.getId() ); - - List list4 = getAuditReader().createQuery().forEntitiesAtRevision( EntityA.class, 2 ).traverseRelation( "bManyToMany", JoinType.INNER ) - .add( AuditEntity.property( "name" ).eq( "B1" ) ).getResultList(); - assertTrue( "Expected no entities to be returned, since B1 has been removed in revision 2", list4.isEmpty() ); + public void testManyToManyInnerJoin(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + List list1 = AuditReaderFactory.get( em ).createQuery().forEntitiesAtRevision( EntityA.class, 1 ).traverseRelation( "bManyToMany", JoinType.INNER ) + .add( AuditEntity.property( "name" ).eq( "B1" ) ).getResultList(); + assertEquals( 1, list1.size(), "Expected exactly one entity" ); + EntityA entityA1 = (EntityA) list1.get( 0 ); + assertEquals( aManyToMany.getId(), entityA1.getId(), "Expected the correct entity to be resolved" ); + + List list2 = AuditReaderFactory.get( em ).createQuery().forEntitiesAtRevision( EntityA.class, 1 ).traverseRelation( "bManyToMany", JoinType.INNER ) + .add( AuditEntity.property( "name" ).eq( "B2" ) ).getResultList(); + assertTrue( list2.isEmpty(), "Expected no entities to be returned, since B2 has been added in revision 2" ); + + List list3 = AuditReaderFactory.get( em ).createQuery().forEntitiesAtRevision( EntityA.class, 2 ).traverseRelation( "bManyToMany", JoinType.INNER ) + .add( AuditEntity.property( "name" ).eq( "B2" ) ).getResultList(); + assertEquals( 1, list3.size(), "Expected exactly one entity" ); + EntityA entityA3 = (EntityA) list3.get( 0 ); + assertEquals( aManyToMany.getId(), entityA3.getId(), "Expected the correct entity to be resolved" ); + + List list4 = AuditReaderFactory.get( em ).createQuery().forEntitiesAtRevision( EntityA.class, 2 ).traverseRelation( "bManyToMany", JoinType.INNER ) + .add( AuditEntity.property( "name" ).eq( "B1" ) ).getResultList(); + assertTrue( list4.isEmpty(), "Expected no entities to be returned, since B1 has been removed in revision 2" ); + } ); } @Test - public void testManyToManyLeftJoin() { - List list = getAuditReader().createQuery().forEntitiesAtRevision( EntityA.class, 1 ).traverseRelation( "bManyToMany", JoinType.LEFT, "b" ).up() - .add( AuditEntity.or( AuditEntity.property( "name" ).eq( "aEmpty" ), AuditEntity.property( "b", "name" ).eq( "B1" ) ) ) - .getResultList(); - assertTrue( "Expected the correct entities to be resolved", listContainsIds( list, aEmpty.getId(), aManyToMany.getId() ) ); + public void testManyToManyLeftJoin(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + List list = AuditReaderFactory.get( em ).createQuery().forEntitiesAtRevision( EntityA.class, 1 ).traverseRelation( "bManyToMany", JoinType.LEFT, "b" ).up() + .add( AuditEntity.or( AuditEntity.property( "name" ).eq( "aEmpty" ), AuditEntity.property( "b", "name" ).eq( "B1" ) ) ) + .getResultList(); + assertTrue( listContainsIds( list, aEmpty.getId(), aManyToMany.getId() ), "Expected the correct entities to be resolved" ); + } ); } - // @Test - // public void testBidiOneToManyInnerJoin() { - // List list1 = getAuditReader().createQuery().forEntitiesAtRevision( EntityA.class, 1 ).traverseRelation( - // "bidiCOneToManyInverse", JoinType.INNER ).add( AuditEntity.property( "name" ).eq( "C1" ) ).getResultList(); - // assertEquals("Expected exactly one entity", 1, list1.size()); - // EntityA entityA1 = (EntityA) list1.get( 0 ); - // assertEquals("Expected the correct entity to be resolved", aBidiOneToManyInverse.getId(), entityA1.getId()); - // - // List list2 = getAuditReader().createQuery().forEntitiesAtRevision( EntityA.class, 1 ).traverseRelation( - // "bidiCOneToManyInverse", JoinType.INNER ).add( AuditEntity.property( "name" ).eq( "C2" ) ).getResultList(); - // assertTrue("Expected no entities to be returned, since C2 has been added in revision 2", list2.isEmpty()); - // - // List list3 = getAuditReader().createQuery().forEntitiesAtRevision( EntityA.class, 2 ).traverseRelation( - // "bidiCOneToManyInverse", JoinType.INNER ).add( AuditEntity.property( "name" ).eq( "C2" ) ).getResultList(); - // assertEquals("Expected exactly one entity", 1, list3.size()); - // EntityA entityA3 = (EntityA) list3.get( 0 ); - // assertEquals("Expected the correct entity to be resolved", aBidiOneToManyInverse.getId(), entityA3.getId()); - // - // List list4 = getAuditReader().createQuery().forEntitiesAtRevision( EntityA.class, 2 ).traverseRelation( - // "bidiCOneToManyInverse", JoinType.INNER ).add( AuditEntity.property( "name" ).eq( "C1" ) ).getResultList(); - // assertTrue("Expected no entities to be returned, since C1 has been removed in revision 2", list4.isEmpty()); - // } - // - // @Test - // public void testBidiOneToManyLeftJoin() { - // List list = getAuditReader().createQuery().forEntitiesAtRevision( EntityA.class, 1 ).traverseRelation( - // "bidiCOneToManyInverse", JoinType.LEFT, "c" ).up() - // .add( AuditEntity.or( AuditEntity.property( "name" ).eq( "aEmpty" ), AuditEntity.property( "c", "name" ).eq( "C1" - // ) ) ) - // .getResultList(); - // assertTrue("Expected the correct entities to be resolved", listContainsIds(list, aEmpty.getId(), - // aBidiOneToManyInverse.getId())); - // } - @Test - public void testBidiManyToManyOwningInnerJoin() { - List list1 = getAuditReader().createQuery().forEntitiesAtRevision( EntityA.class, 1 ).traverseRelation( "bidiCManyToManyOwning", JoinType.INNER ) - .add( AuditEntity.property( "name" ).eq( "C1" ) ).getResultList(); - assertEquals( "Expected exactly one entity", 1, list1.size() ); - EntityA entityA1 = (EntityA) list1.get( 0 ); - assertEquals( "Expected the correct entity to be resolved", aBidiManyToManyOwning.getId(), entityA1.getId() ); - - List list2 = getAuditReader().createQuery().forEntitiesAtRevision( EntityA.class, 1 ).traverseRelation( "bidiCManyToManyOwning", JoinType.INNER ) - .add( AuditEntity.property( "name" ).eq( "C2" ) ).getResultList(); - assertTrue( "Expected no entities to be returned, since C2 has been added in revision 2", list2.isEmpty() ); - - List list3 = getAuditReader().createQuery().forEntitiesAtRevision( EntityA.class, 2 ).traverseRelation( "bidiCManyToManyOwning", JoinType.INNER ) - .add( AuditEntity.property( "name" ).eq( "C2" ) ).getResultList(); - assertEquals( "Expected exactly one entity", 1, list3.size() ); - EntityA entityA3 = (EntityA) list3.get( 0 ); - assertEquals( "Expected the correct entity to be resolved", aBidiManyToManyOwning.getId(), entityA3.getId() ); - - List list4 = getAuditReader().createQuery().forEntitiesAtRevision( EntityA.class, 2 ).traverseRelation( "bidiCManyToManyOwning", JoinType.INNER ) - .add( AuditEntity.property( "name" ).eq( "C1" ) ).getResultList(); - assertTrue( "Expected no entities to be returned, since C1 has been removed in revision 2", list4.isEmpty() ); + public void testBidiManyToManyOwningInnerJoin(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + List list1 = AuditReaderFactory.get( em ).createQuery().forEntitiesAtRevision( EntityA.class, 1 ).traverseRelation( "bidiCManyToManyOwning", JoinType.INNER ) + .add( AuditEntity.property( "name" ).eq( "C1" ) ).getResultList(); + assertEquals( 1, list1.size(), "Expected exactly one entity" ); + EntityA entityA1 = (EntityA) list1.get( 0 ); + assertEquals( aBidiManyToManyOwning.getId(), entityA1.getId(), "Expected the correct entity to be resolved" ); + + List list2 = AuditReaderFactory.get( em ).createQuery().forEntitiesAtRevision( EntityA.class, 1 ).traverseRelation( "bidiCManyToManyOwning", JoinType.INNER ) + .add( AuditEntity.property( "name" ).eq( "C2" ) ).getResultList(); + assertTrue( list2.isEmpty(), "Expected no entities to be returned, since C2 has been added in revision 2" ); + + List list3 = AuditReaderFactory.get( em ).createQuery().forEntitiesAtRevision( EntityA.class, 2 ).traverseRelation( "bidiCManyToManyOwning", JoinType.INNER ) + .add( AuditEntity.property( "name" ).eq( "C2" ) ).getResultList(); + assertEquals( 1, list3.size(), "Expected exactly one entity" ); + EntityA entityA3 = (EntityA) list3.get( 0 ); + assertEquals( aBidiManyToManyOwning.getId(), entityA3.getId(), "Expected the correct entity to be resolved" ); + + List list4 = AuditReaderFactory.get( em ).createQuery().forEntitiesAtRevision( EntityA.class, 2 ).traverseRelation( "bidiCManyToManyOwning", JoinType.INNER ) + .add( AuditEntity.property( "name" ).eq( "C1" ) ).getResultList(); + assertTrue( list4.isEmpty(), "Expected no entities to be returned, since C1 has been removed in revision 2" ); + } ); } @Test - public void testBidiManyToManyOwningLeftJoin() { - List list = getAuditReader().createQuery().forEntitiesAtRevision( EntityA.class, 1 ).traverseRelation( "bidiCManyToManyOwning", JoinType.LEFT, "c" ) - .up() - .add( AuditEntity.or( AuditEntity.property( "name" ).eq( "aEmpty" ), AuditEntity.property( "c", "name" ).eq( "C1" ) ) ) - .getResultList(); - assertTrue( "Expected the correct entities to be resolved", listContainsIds( list, aEmpty.getId(), aBidiManyToManyOwning.getId() ) ); + public void testBidiManyToManyOwningLeftJoin(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + List list = AuditReaderFactory.get( em ).createQuery().forEntitiesAtRevision( EntityA.class, 1 ).traverseRelation( "bidiCManyToManyOwning", JoinType.LEFT, "c" ) + .up() + .add( AuditEntity.or( AuditEntity.property( "name" ).eq( "aEmpty" ), AuditEntity.property( "c", "name" ).eq( "C1" ) ) ) + .getResultList(); + assertTrue( listContainsIds( list, aEmpty.getId(), aBidiManyToManyOwning.getId() ), "Expected the correct entities to be resolved" ); + } ); } - // @Test - // public void testBidiManyToManyInverseInnerJoin() { - // List list1 = getAuditReader().createQuery().forEntitiesAtRevision( EntityA.class, 1 ).traverseRelation( - // "bidiCManyToManyInverse", JoinType.INNER ).add( AuditEntity.property( "name" ).eq( "C1" ) ).getResultList(); - // assertEquals("Expected exactly one entity", 1, list1.size()); - // EntityA entityA1 = (EntityA) list1.get( 0 ); - // assertEquals("Expected the correct entity to be resolved", aBidiManyToManyInverse.getId(), entityA1.getId()); - // - // List list2 = getAuditReader().createQuery().forEntitiesAtRevision( EntityA.class, 1 ).traverseRelation( - // "bidiCManyToManyInverse", JoinType.INNER ).add( AuditEntity.property( "name" ).eq( "C2" ) ).getResultList(); - // assertTrue("Expected no entities to be returned, since C2 has been added in revision 2", list2.isEmpty()); - // - // List list3 = getAuditReader().createQuery().forEntitiesAtRevision( EntityA.class, 2 ).traverseRelation( - // "bidiCManyToManyInverse", JoinType.INNER ).add( AuditEntity.property( "name" ).eq( "C2" ) ).getResultList(); - // assertEquals("Expected exactly one entity", 1, list3.size()); - // EntityA entityA3 = (EntityA) list3.get( 0 ); - // assertEquals("Expected the correct entity to be resolved", aBidiManyToManyInverse.getId(), entityA3.getId()); - // - // List list4 = getAuditReader().createQuery().forEntitiesAtRevision( EntityA.class, 2 ).traverseRelation( - // "bidiCManyToManyInverse", JoinType.INNER ).add( AuditEntity.property( "name" ).eq( "C1" ) ).getResultList(); - // assertTrue("Expected no entities to be returned, since C1 has been removed in revision 2", list4.isEmpty()); - // } - // - // @Test - // public void testBidiManyToManyInverseLeftJoin() { - // List list = getAuditReader().createQuery().forEntitiesAtRevision( EntityA.class, 1 ).traverseRelation( - // "bidiCManyToManyInverse", JoinType.LEFT, "c" ).up() - // .add( AuditEntity.or( AuditEntity.property( "name" ).eq( "aEmpty" ), AuditEntity.property( "c", "name" ).eq( "C1" - // ) ) ) - // .getResultList(); - // assertTrue("Expected the correct entities to be resolved", listContainsIds(list, aEmpty.getId(), - // aBidiManyToManyInverse.getId())); - // } - private boolean listContainsIds(final Collection entities, final long... ids) { final Set idSet = new HashSet<>(); for ( final Object entity : entities ) { diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/AssociationToOneInnerJoinQueryTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/AssociationToOneInnerJoinQueryTest.java new file mode 100644 index 000000000000..065806b6f226 --- /dev/null +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/AssociationToOneInnerJoinQueryTest.java @@ -0,0 +1,194 @@ +/* + * SPDX-License-Identifier: Apache-2.0 + * Copyright Red Hat Inc. and Hibernate Authors + */ +package org.hibernate.orm.test.envers.integration.query; + +import java.util.List; +import jakarta.persistence.criteria.JoinType; + +import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.envers.query.AuditEntity; +import org.hibernate.orm.test.envers.integration.query.entities.Address; +import org.hibernate.orm.test.envers.integration.query.entities.Car; +import org.hibernate.orm.test.envers.integration.query.entities.Person; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +/** + * @author Felix Feisst (feisst dot felix at gmail dot com) + */ +@SuppressWarnings("unchecked") +@Jpa(annotatedClasses = { + Car.class, + Person.class, + Address.class +}) +@EnversTest +public class AssociationToOneInnerJoinQueryTest { + + private Car vw; + private Car ford; + private Car toyota; + private Address address1; + private Address address2; + private Person vwOwner; + private Person fordOwner; + private Person toyotaOwner; + + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + // revision 1 + scope.inEntityManager( em -> { + em.getTransaction().begin(); + address1 = new Address( "Freiburgerstrasse", 5 ); + em.persist( address1 ); + address2 = new Address( "Hindenburgstrasse", 30 ); + em.persist( address2 ); + vwOwner = new Person( "VW owner", 20, address1 ); + em.persist( vwOwner ); + fordOwner = new Person( "Ford owner", 30, address1 ); + em.persist( fordOwner ); + toyotaOwner = new Person( "Toyota owner", 30, address2 ); + em.persist( toyotaOwner ); + final Person nonOwner = new Person( "NonOwner", 30, address1 ); + em.persist( nonOwner ); + vw = new Car( "VW" ); + vw.setOwner( vwOwner ); + em.persist( vw ); + ford = new Car( "Ford" ); + ford.setOwner( fordOwner ); + em.persist( ford ); + toyota = new Car( "Toyota" ); + toyota.setOwner( toyotaOwner ); + em.persist( toyota ); + em.getTransaction().commit(); + + // revision 2 + em.getTransaction().begin(); + toyotaOwner.setAge( 40 ); + em.getTransaction().commit(); + } ); + } + + @Test + public void testAssociationQuery(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + final Car result1 = (Car) auditReader.createQuery().forEntitiesAtRevision( Car.class, 1 ).traverseRelation( "owner", JoinType.INNER ) + .add( AuditEntity.property( "name" ).like( "Ford%" ) ).getSingleResult(); + assertEquals( ford.getId(), result1.getId(), "Unexpected single car at revision 1" ); + + Car result2 = (Car) auditReader.createQuery().forEntitiesAtRevision( Car.class, 1 ).traverseRelation( "owner", JoinType.INNER ).traverseRelation( "address", JoinType.INNER ) + .add( AuditEntity.property( "number" ).eq( 30 ) ).getSingleResult(); + assertEquals( toyota.getId(), result2.getId(), "Unexpected single car at revision 1" ); + + List resultList1 = auditReader.createQuery().forEntitiesAtRevision( Car.class, 1 ).traverseRelation( "owner", JoinType.INNER ) + .add( AuditEntity.property( "age" ).ge( 30 ) ).add( AuditEntity.property( "age" ).lt( 40 ) ).up() + .addOrder( AuditEntity.property( "make" ).asc() ).getResultList(); + assertEquals( 2, resultList1.size(), "Unexpected number of cars for query in revision 1" ); + assertEquals( ford.getId(), resultList1.get( 0 ).getId(), "Unexpected car at index 0 in revision 1" ); + assertEquals( toyota.getId(), resultList1.get( 1 ).getId(), "Unexpected car at index 1 in revision 2" ); + + Car result3 = (Car) auditReader.createQuery().forEntitiesAtRevision( Car.class, 2 ).traverseRelation( "owner", JoinType.INNER ) + .add( AuditEntity.property( "age" ).ge( 30 ) ).add( AuditEntity.property( "age" ).lt( 40 ) ).up() + .addOrder( AuditEntity.property( "make" ).asc() ).getSingleResult(); + assertEquals( ford.getId(), result3.getId(), "Unexpected car at revision 2" ); + } ); + } + + @Test + public void testAssociationQueryWithOrdering(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + List cars1 = auditReader.createQuery().forEntitiesAtRevision( Car.class, 1 ).traverseRelation( "owner", JoinType.INNER ).traverseRelation( "address", JoinType.INNER ) + .addOrder( AuditEntity.property( "number" ).asc() ).up().addOrder( AuditEntity.property( "age" ).desc() ).getResultList(); + assertEquals( 3, cars1.size(), "Unexpected number of results" ); + assertEquals( ford.getId(), cars1.get( 0 ).getId(), "Unexpected car at index 0" ); + assertEquals( vw.getId(), cars1.get( 1 ).getId(), "Unexpected car at index 1" ); + assertEquals( toyota.getId(), cars1.get( 2 ).getId(), "Unexpected car at index 2" ); + + List cars2 = auditReader.createQuery().forEntitiesAtRevision( Car.class, 1 ).traverseRelation( "owner", JoinType.INNER ).traverseRelation( "address", JoinType.INNER ) + .addOrder( AuditEntity.property( "number" ).asc() ).up().addOrder( AuditEntity.property( "age" ).asc() ).getResultList(); + assertEquals( 3, cars2.size(), "Unexpected number of results" ); + assertEquals( vw.getId(), cars2.get( 0 ).getId(), "Unexpected car at index 0" ); + assertEquals( ford.getId(), cars2.get( 1 ).getId(), "Unexpected car at index 1" ); + assertEquals( toyota.getId(), cars2.get( 2 ).getId(), "Unexpected car at index 2" ); + } ); + } + + @Test + public void testAssociationQueryWithProjection(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + List list1 = auditReader.createQuery().forEntitiesAtRevision( Car.class, 2 ).traverseRelation( "owner", JoinType.INNER ) + .addProjection( AuditEntity.property( "age" ) ).addOrder( AuditEntity.property( "age" ).asc() ).getResultList(); + assertEquals( 3, list1.size(), "Unexpected number of results" ); + assertEquals( Integer.valueOf( 20 ), list1.get( 0 ), "Unexpected age at index 0" ); + assertEquals( Integer.valueOf( 30 ), list1.get( 1 ), "Unexpected age at index 0" ); + assertEquals( Integer.valueOf( 40 ), list1.get( 2 ), "Unexpected age at index 0" ); + + List
    list2 = auditReader.createQuery().forEntitiesAtRevision( Car.class, 2 ).traverseRelation( "owner", JoinType.INNER ) + .addOrder( AuditEntity.property( "age" ).asc() ).traverseRelation( "address", JoinType.INNER ).addProjection( AuditEntity.selectEntity( false ) ).getResultList(); + assertEquals( 2, list2.size(), "Unexpected number of results" ); + assertEquals( address1.getId(), list2.get( 0 ).getId(), "Unexpected address at index 0" ); + assertEquals( address2.getId(), list2.get( 1 ).getId(), "Unexpected address at index 1" ); + + List
    list3 = auditReader.createQuery().forEntitiesAtRevision( Car.class, 2 ).traverseRelation( "owner", JoinType.INNER ).traverseRelation( "address", JoinType.INNER ) + .addProjection( AuditEntity.selectEntity( true ) ).addOrder( AuditEntity.property( "number" ).asc() ).getResultList(); + assertEquals( 2, list3.size(), "Unexpected number of results" ); + assertEquals( address1.getId(), list3.get( 0 ).getId(), "Unexpected address at index 0" ); + assertEquals( address2.getId(), list3.get( 1 ).getId(), "Unexpected address at index 1" ); + + List list4 = auditReader.createQuery().forEntitiesAtRevision( Car.class, 2 ).traverseRelation( "owner", JoinType.INNER ) + .addOrder( AuditEntity.property( "age" ).asc() ).addProjection( AuditEntity.selectEntity( false ) ).traverseRelation( "address", JoinType.INNER ) + .addProjection( AuditEntity.property( "number" ) ).getResultList(); + assertEquals( 3, list4.size(), "Unexpected number of results" ); + final Object[] index0 = list4.get( 0 ); + assertEquals( vwOwner.getId(), ( (Person) index0[0] ).getId(), "Unexpected owner at index 0" ); + assertEquals( Integer.valueOf( 5 ), index0[1], "Unexpected number at index 0" ); + final Object[] index1 = list4.get( 1 ); + assertEquals( fordOwner.getId(), ( (Person) index1[0] ).getId(), "Unexpected owner at index 1" ); + assertEquals( Integer.valueOf( 5 ), index1[1], "Unexpected number at index 1" ); + final Object[] index2 = list4.get( 2 ); + assertEquals( toyotaOwner.getId(), ( (Person) index2[0] ).getId(), "Unexpected owner at index 2" ); + assertEquals( Integer.valueOf( 30 ), index2[1], "Unexpected number at index 2" ); + } ); + } + + @Test + public void testDisjunctionOfPropertiesFromDifferentEntities(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + // all cars where the owner has an age of 20 or lives in an address with number 30. + List resultList = AuditReaderFactory.get( em ).createQuery() + .forEntitiesAtRevision( Car.class, 1 ) + .traverseRelation( "owner", JoinType.INNER, "p" ) + .traverseRelation( "address", JoinType.INNER, "a" ) + .up().up().add( AuditEntity.disjunction().add(AuditEntity.property( "p", "age" ) + .eq( 20 ) ).add( AuditEntity.property( "a", "number" ).eq( 30 ) ) ) + .addOrder( AuditEntity.property( "make" ).asc() ).getResultList(); + assertEquals( 2, resultList.size(), "Expected two cars to be returned, Toyota and VW" ); + assertEquals( toyota.getId(), resultList.get(0).getId(), "Unexpected car at index 0" ); + assertEquals( vw.getId(), resultList.get(1).getId(), "Unexpected car at index 1" ); + } ); + } + + @Test + public void testComparisonOfTwoPropertiesFromDifferentEntities(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + // the car where the owner age is equal to the owner address number. + Car result = (Car) AuditReaderFactory.get( em ).createQuery() + .forEntitiesAtRevision( Car.class, 1 ) + .traverseRelation( "owner", JoinType.INNER, "p" ) + .traverseRelation( "address", JoinType.INNER, "a" ) + .up().up().add(AuditEntity.property( "p", "age" ) + .eqProperty( "a", "number" ) ).getSingleResult(); + assertEquals( toyota.getId(), result.getId(), "Unexpected car returned" ); + } ); + } +} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/AssociationToOneLeftJoinQueryTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/AssociationToOneLeftJoinQueryTest.java index 03cb4d91aceb..ce2bb041e14c 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/AssociationToOneLeftJoinQueryTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/AssociationToOneLeftJoinQueryTest.java @@ -4,28 +4,35 @@ */ package org.hibernate.orm.test.envers.integration.query; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; - import java.util.List; -import jakarta.persistence.EntityManager; import jakarta.persistence.criteria.JoinType; -import org.hibernate.envers.AuditReader; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.query.AuditEntity; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; import org.hibernate.orm.test.envers.integration.query.entities.Address; import org.hibernate.orm.test.envers.integration.query.entities.Car; import org.hibernate.orm.test.envers.integration.query.entities.Person; -import org.junit.Test; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; /** * @author Felix Feisst (feisst dot felix at gmail dot com) */ @SuppressWarnings("unchecked") -public class AssociationToOneLeftJoinQueryTest extends BaseEnversJPAFunctionalTestCase { +@Jpa(annotatedClasses = { + Car.class, + Person.class, + Address.class +}) +@EnversTest +public class AssociationToOneLeftJoinQueryTest { private Car car1; private Car car2; @@ -34,59 +41,54 @@ public class AssociationToOneLeftJoinQueryTest extends BaseEnversJPAFunctionalTe private Person person2; private Address address1; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { Car.class, Person.class, Address.class }; - } - - @Test - @Priority(10) - public void initData() { - final EntityManager em = getEntityManager(); - + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // revision 1 - em.getTransaction().begin(); - address1 = new Address("address1", 1); - em.persist(address1); - Address address2 = new Address("address2", 2); - em.persist(address2); - person1 = new Person("person1", 30, address1); - em.persist(person1); - person2 = new Person("person2", 20, null); - em.persist(person2); - Person person3 = new Person("person3", 10, address1); - em.persist(person3); - car1 = new Car("car1"); - car1.setOwner(person1); - em.persist(car1); - car2 = new Car("car2"); - car2.setOwner(person2); - em.persist(car2); - car3 = new Car("car3"); - em.persist(car3); - em.getTransaction().commit(); + scope.inEntityManager( em -> { + em.getTransaction().begin(); + address1 = new Address( "address1", 1 ); + em.persist( address1 ); + Address address2 = new Address( "address2", 2 ); + em.persist( address2 ); + person1 = new Person( "person1", 30, address1 ); + em.persist( person1 ); + person2 = new Person( "person2", 20, null ); + em.persist( person2 ); + Person person3 = new Person( "person3", 10, address1 ); + em.persist( person3 ); + car1 = new Car( "car1" ); + car1.setOwner( person1 ); + em.persist( car1 ); + car2 = new Car( "car2" ); + car2.setOwner( person2 ); + em.persist( car2 ); + car3 = new Car( "car3" ); + em.persist( car3 ); + em.getTransaction().commit(); - // revision 2 - em.getTransaction().begin(); - person2.setAge(21); - em.getTransaction().commit(); + // revision 2 + em.getTransaction().begin(); + person2.setAge( 21 ); + em.getTransaction().commit(); + } ); } @Test - public void testLeftJoinOnAuditedEntity() { - final AuditReader auditReader = getAuditReader(); - // all cars where the owner has an age of 20 or where there is no owner at all - List resultList = auditReader.createQuery() - .forEntitiesAtRevision( Car.class, 1 ) - .traverseRelation( "owner", JoinType.LEFT, "p" ) - .up().add( AuditEntity.or( AuditEntity.property( "p", "age").eq( 20 ), - AuditEntity.relatedId( "owner" ).eq( null ) ) ) - .addOrder( AuditEntity.property( "make" ).asc() ).getResultList(); - assertEquals( "The result list should have 2 results, car1 because its owner has an age of 30 and car3 because it has no owner at all", 2, resultList.size() ); - Car car0 = resultList.get(0); - Car car1 = resultList.get(1); - assertEquals( "Unexpected car at index 0", car2.getId(), car0.getId() ); - assertEquals( "Unexpected car at index 0", car3.getId(), car1.getId() ); + public void testLeftJoinOnAuditedEntity(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + // all cars where the owner has an age of 20 or where there is no owner at all + List resultList = AuditReaderFactory.get( em ).createQuery() + .forEntitiesAtRevision( Car.class, 1 ) + .traverseRelation( "owner", JoinType.LEFT, "p" ) + .up().add( AuditEntity.or( AuditEntity.property( "p", "age" ).eq( 20 ), + AuditEntity.relatedId( "owner" ).eq( null ) ) ) + .addOrder( AuditEntity.property( "make" ).asc() ).getResultList(); + assertEquals( 2, resultList.size(), "The result list should have 2 results, car1 because its owner has an age of 30 and car3 because it has no owner at all" ); + Car car0 = resultList.get( 0 ); + Car car1 = resultList.get( 1 ); + assertEquals( car2.getId(), car0.getId(), "Unexpected car at index 0" ); + assertEquals( car3.getId(), car1.getId(), "Unexpected car at index 0" ); + } ); } /** @@ -100,14 +102,15 @@ public void testLeftJoinOnAuditedEntity() { * This test ensures that this defect is no longer in the current implementation. */ @Test - public void testEntitiesWithANullRelatedIdAreNotJoinedToOtherEntities() { - final AuditReader auditReader = getAuditReader(); - List resultList = auditReader.createQuery() - .forEntitiesAtRevision( Car.class, 1 ) - .traverseRelation( "owner", JoinType.LEFT, "p" ) - .up().add( AuditEntity.and( AuditEntity.property( "make" ).eq( "car3" ), AuditEntity.property( "p", "age" ).eq( 30 ) ) ) - .getResultList(); - assertTrue( "Expected no cars to be returned, because car3 does not have an owner", resultList.isEmpty() ); + public void testEntitiesWithANullRelatedIdAreNotJoinedToOtherEntities(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + List resultList = AuditReaderFactory.get( em ).createQuery() + .forEntitiesAtRevision( Car.class, 1 ) + .traverseRelation( "owner", JoinType.LEFT, "p" ) + .up().add( AuditEntity.and( AuditEntity.property( "make" ).eq( "car3" ), AuditEntity.property( "p", "age" ).eq( 30 ) ) ) + .getResultList(); + assertTrue( resultList.isEmpty(), "Expected no cars to be returned, because car3 does not have an owner" ); + } ); } /** @@ -120,15 +123,16 @@ public void testEntitiesWithANullRelatedIdAreNotJoinedToOtherEntities() { * This test ensures that this defect is no longer in the current implementation. */ @Test - public void testEntitiesWithANullRelatedIdAreNotReturnedMoreThanOnce() { - final AuditReader auditReader = getAuditReader(); - List resultList = auditReader.createQuery() - .forEntitiesAtRevision( Car.class, 1 ) - .traverseRelation( "owner", JoinType.LEFT, "p" ) - .up().add( AuditEntity.or( AuditEntity.property( "make" ).eq( "car3" ), AuditEntity.property( "p", "age" ).eq( 10 ) ) ) - .getResultList(); - assertEquals( "Expected car3 to be returned but only once", 1, resultList.size() ); - assertEquals( "Unexpected car at index 0", car3.getId(), resultList.get(0).getId() ); + public void testEntitiesWithANullRelatedIdAreNotReturnedMoreThanOnce(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + List resultList = AuditReaderFactory.get( em ).createQuery() + .forEntitiesAtRevision( Car.class, 1 ) + .traverseRelation( "owner", JoinType.LEFT, "p" ) + .up().add( AuditEntity.or( AuditEntity.property( "make" ).eq( "car3" ), AuditEntity.property( "p", "age" ).eq( 10 ) ) ) + .getResultList(); + assertEquals( 1, resultList.size(), "Expected car3 to be returned but only once" ); + assertEquals( car3.getId(), resultList.get( 0 ).getId(), "Unexpected car at index 0" ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/AuditFunctionQueryTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/AuditFunctionQueryTest.java new file mode 100644 index 000000000000..848dec8ab2e5 --- /dev/null +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/AuditFunctionQueryTest.java @@ -0,0 +1,178 @@ +/* + * SPDX-License-Identifier: Apache-2.0 + * Copyright Red Hat Inc. and Hibernate Authors + */ +package org.hibernate.orm.test.envers.integration.query; + +import jakarta.persistence.Entity; +import jakarta.persistence.Id; + +import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.envers.Audited; +import org.hibernate.envers.query.AuditEntity; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; + +/** + * @author Felix Feisst (feisst dot felix at gmail dot com) + */ +@Jpa(annotatedClasses = { + AuditFunctionQueryTest.TestEntity.class +}) +@EnversTest +public class AuditFunctionQueryTest { + + @Entity(name = "TestEntity") + @Audited + public static class TestEntity { + + @Id + private Long id; + private String string1; + private String string2; + private Integer integer1; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getString1() { + return string1; + } + + public void setString1(String string1) { + this.string1 = string1; + } + + public String getString2() { + return string2; + } + + public Integer getInteger1() { + return integer1; + } + + public void setInteger1(Integer integer1) { + this.integer1 = integer1; + } + + public void setString2(String string2) { + this.string2 = string2; + } + + } + + private TestEntity testEntity1; + + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + testEntity1 = scope.fromTransaction( em -> { + TestEntity entity = new TestEntity(); + entity.setId( 1L ); + entity.setString1( "abcdef" ); + entity.setString2( "42 - the truth" ); + entity.setInteger1( 42 ); + em.persist( entity ); + return entity; + } ); + } + + @Test + public void testProjectionWithPropertyArgument(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + Object actual = AuditReaderFactory.get( em ).createQuery().forEntitiesAtRevision( TestEntity.class, 1 ) + .addProjection( AuditEntity.function( "upper", AuditEntity.property( "string1" ) ) ).getSingleResult(); + String expected = testEntity1.getString1().toUpperCase(); + assertEquals( expected, actual, "Expected the property string1 to be upper case" ); + } ); + } + + @Test + public void testProjectionWithPropertyAndSimpleArguments(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + Object actual = AuditReaderFactory.get( em ).createQuery().forEntitiesAtRevision( TestEntity.class, 1 ) + .addProjection( AuditEntity.function( "substring", AuditEntity.property( "string1" ), 3, 2 ) ).getSingleResult(); + // the sql substring indices are 1 based while java substring indices are 0 based + // the sql substring second parameter denotes the length of the substring + // while in java the scond argument denotes the end index + String expected = testEntity1.getString1().substring( 2, 4 ); + assertEquals( expected, actual, "Expected the substring of the property string1" ); + } ); + } + + @Test + public void testProjectionWithNestedFunction(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + Object actual = AuditReaderFactory.get( em ).createQuery().forEntitiesAtRevision( TestEntity.class, 1 ) + .addProjection( AuditEntity.function( "concat", + AuditEntity.function( "upper", AuditEntity.property( "string1" ) ), + AuditEntity.function( "substring", AuditEntity.property( "string2" ), 1, 2 ) ) ) + .getSingleResult(); + final String expected = testEntity1.getString1().toUpperCase().concat( testEntity1.getString2().substring( 0, 2 ) ); + assertEquals( expected, actual, "Expected the upper cased string1 to be concat with the first two characters of string2" ); + } ); + } + + @Test + public void testComparisonFunctionWithValue(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + TestEntity entity = (TestEntity) AuditReaderFactory.get( em ).createQuery().forEntitiesAtRevision( TestEntity.class, 1 ) + .add( AuditEntity.function( "substring", AuditEntity.property( "string1" ), 3, 2 ).eq( "cd" ) ).getSingleResult(); + assertNotNull( entity, "Expected the entity to be returned" ); + assertEquals( testEntity1.getId(), entity.getId(), "Expected the entity to be returned" ); + } ); + } + + @Test + public void testComparionFunctionWithProperty(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + TestEntity entity = (TestEntity) AuditReaderFactory.get( em ).createQuery().forEntitiesAtRevision( TestEntity.class, 1 ) + .add( AuditEntity.function( "length", AuditEntity.property( "string2" ) ).ltProperty( "integer1" ) ).getSingleResult(); + assertNotNull( entity, "Expected the entity to be returned" ); + assertEquals( testEntity1.getId(), entity.getId(), "Expected the entity to be returned" ); + } ); + } + + @Test + public void testComparisonFunctionWithFunction(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + TestEntity entity = (TestEntity) AuditReaderFactory.get( em ).createQuery().forEntitiesAtRevision( TestEntity.class, 1 ) + .add( AuditEntity.function( "substring", AuditEntity.property( "string2" ), 1, 2 ) + .eqFunction( AuditEntity.function( "str", AuditEntity.property( "integer1" ) ) ) ) + .getSingleResult(); + assertNotNull( entity, "Expected the entity to be returned" ); + assertEquals( testEntity1.getId(), entity.getId(), "Expected the entity to be returned" ); + } ); + } + + @Test + public void testComparisonPropertyWithFunction(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + TestEntity entity = (TestEntity) AuditReaderFactory.get( em ).createQuery().forEntitiesAtRevision( TestEntity.class, 1 ) + .add( AuditEntity.property( "integer1" ).gtFunction( AuditEntity.function( "length", AuditEntity.property( "string2" ) ) ) ).getSingleResult(); + assertNotNull( entity, "Expected the entity to be returned" ); + assertEquals( testEntity1.getId(), entity.getId(), "Expected the entity to be returned" ); + } ); + } + + @Test + public void testFunctionOnIdProperty(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + TestEntity entity = (TestEntity) AuditReaderFactory.get( em ).createQuery().forEntitiesAtRevision( TestEntity.class, 1 ) + .add( AuditEntity.function( "str", AuditEntity.id() ).like( "%1%" ) ).getSingleResult(); + assertNotNull( entity, "Expected the entity to be returned" ); + assertEquals( testEntity1.getId(), entity.getId(), "Expected the entity to be returned" ); + } ); + } + +} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/ComponentQueryTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/ComponentQueryTest.java index ec718fdaee8e..d5439d6f8b2c 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/ComponentQueryTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/ComponentQueryTest.java @@ -4,8 +4,6 @@ */ package org.hibernate.orm.test.envers.integration.query; -import static org.junit.Assert.assertEquals; - import java.util.ArrayList; import java.util.Collections; import java.util.HashSet; @@ -16,26 +14,36 @@ import jakarta.persistence.Embeddable; import jakarta.persistence.Embedded; import jakarta.persistence.Entity; -import jakarta.persistence.EntityManager; import jakarta.persistence.GeneratedValue; import jakarta.persistence.Id; import jakarta.persistence.ManyToOne; import jakarta.persistence.criteria.JoinType; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.Audited; import org.hibernate.envers.query.AuditEntity; import org.hibernate.envers.query.order.NullPrecedence; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; +import org.hibernate.testing.orm.junit.Jpa; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Felix Feisst (feisst dot felix at gmail dot com) */ @SuppressWarnings("rawtypes") @JiraKey(value = "HHH-11895") -public class ComponentQueryTest extends BaseEnversJPAFunctionalTestCase { +@Jpa(annotatedClasses = { + ComponentQueryTest.Asset.class, + ComponentQueryTest.Symbol.class, + ComponentQueryTest.SymbolType.class +}) +@EnversTest +public class ComponentQueryTest { @Embeddable public static class Symbol { @@ -138,11 +146,6 @@ public void setMultiSymbols(Set multiSymbols) { } - @Override - protected Class[] getAnnotatedClasses() { - return new Class[]{ Asset.class, Symbol.class, SymbolType.class }; - } - private SymbolType type1; private SymbolType type2; @@ -150,217 +153,241 @@ protected Class[] getAnnotatedClasses() { private Asset asset2; private Asset asset3; - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - - type1 = new SymbolType(); - type1.setName( "T1" ); - em.persist( type1 ); - - type2 = new SymbolType(); - type2.setName( "T2" ); - em.persist( type2 ); - - asset1 = new Asset(); - em.persist( asset1 ); - - asset2 = new Asset(); - asset2.setSingleSymbol( new Symbol( type1, "X1" ) ); - asset2.getMultiSymbols().add( new Symbol( type1, "X" ) ); - em.persist( asset2 ); - - asset3 = new Asset(); - asset3.setSingleSymbol( new Symbol( type2, "X2" ) ); - asset3.getMultiSymbols().add( new Symbol( type1, "Y" ) ); - asset3.getMultiSymbols().add( new Symbol( type2, "X" ) ); - em.persist( asset3 ); - - em.getTransaction().commit(); + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + scope.inTransaction( em -> { + type1 = new SymbolType(); + type1.setName( "T1" ); + em.persist( type1 ); + + type2 = new SymbolType(); + type2.setName( "T2" ); + em.persist( type2 ); + + asset1 = new Asset(); + em.persist( asset1 ); + + asset2 = new Asset(); + asset2.setSingleSymbol( new Symbol( type1, "X1" ) ); + asset2.getMultiSymbols().add( new Symbol( type1, "X" ) ); + em.persist( asset2 ); + + asset3 = new Asset(); + asset3.setSingleSymbol( new Symbol( type2, "X2" ) ); + asset3.getMultiSymbols().add( new Symbol( type1, "Y" ) ); + asset3.getMultiSymbols().add( new Symbol( type2, "X" ) ); + em.persist( asset3 ); + } ); } @Test - public void testSingleSymbolUsingIdentifier() { - List actual = getAuditReader().createQuery() - .forEntitiesAtRevision( Asset.class, 1 ) - .traverseRelation( "singleSymbol", JoinType.INNER, "s" ) - .add( AuditEntity.property( "s", "identifier" ).eq( "X1" ) ) - .up() - .addProjection( AuditEntity.id() ) - .getResultList(); - assertEquals( "Expected only asset2 to be returned", Collections.singletonList( asset2.getId() ), actual ); + public void testSingleSymbolUsingIdentifier(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + List actual = AuditReaderFactory.get( em ).createQuery() + .forEntitiesAtRevision( Asset.class, 1 ) + .traverseRelation( "singleSymbol", JoinType.INNER, "s" ) + .add( AuditEntity.property( "s", "identifier" ).eq( "X1" ) ) + .up() + .addProjection( AuditEntity.id() ) + .getResultList(); + assertEquals( Collections.singletonList( asset2.getId() ), actual, "Expected only asset2 to be returned" ); + } ); } @Test - public void testMultiSymbolUsingIdentifier() { - List actual = getAuditReader().createQuery() - .forEntitiesAtRevision( Asset.class, 1 ) - .traverseRelation( "multiSymbols", JoinType.INNER, "s" ) - .add( AuditEntity.property( "s", "identifier" ).like( "X%" ) ) - .up() - .addProjection( AuditEntity.id() ) - .addOrder( AuditEntity.id().asc() ) - .getResultList(); - List expected = new ArrayList<>(); - Collections.addAll( expected, asset2.getId(), asset3.getId() ); - assertEquals( "Expected only the ids of the assets with symbol T1", expected, actual ); + public void testMultiSymbolUsingIdentifier(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + List actual = AuditReaderFactory.get( em ).createQuery() + .forEntitiesAtRevision( Asset.class, 1 ) + .traverseRelation( "multiSymbols", JoinType.INNER, "s" ) + .add( AuditEntity.property( "s", "identifier" ).like( "X%" ) ) + .up() + .addProjection( AuditEntity.id() ) + .addOrder( AuditEntity.id().asc() ) + .getResultList(); + List expected = new ArrayList<>(); + Collections.addAll( expected, asset2.getId(), asset3.getId() ); + assertEquals( expected, actual, "Expected only the ids of the assets with symbol T1" ); + } ); } @Test - public void testSingleSymbolUsingType() { - List actual = getAuditReader().createQuery() - .forEntitiesAtRevision( Asset.class, 1 ) - .traverseRelation( "singleSymbol", JoinType.INNER, "s" ) - .add( AuditEntity.property( "s", "type" ).eq( type1 ) ) - .up() - .addProjection( AuditEntity.id() ) - .getResultList(); - assertEquals( "Expected only asset2 to be returned", Collections.singletonList( asset2.getId() ), actual ); + public void testSingleSymbolUsingType(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + List actual = AuditReaderFactory.get( em ).createQuery() + .forEntitiesAtRevision( Asset.class, 1 ) + .traverseRelation( "singleSymbol", JoinType.INNER, "s" ) + .add( AuditEntity.property( "s", "type" ).eq( type1 ) ) + .up() + .addProjection( AuditEntity.id() ) + .getResultList(); + assertEquals( Collections.singletonList( asset2.getId() ), actual, "Expected only asset2 to be returned" ); + } ); } @Test - public void testMultiSymbolUsingType() { - List actual = getAuditReader().createQuery() - .forEntitiesAtRevision( Asset.class, 1 ) - .traverseRelation( "multiSymbols", JoinType.INNER, "s" ) - .add( AuditEntity.property( "s", "type" ).eq( type2 ) ) - .up() - .addProjection( AuditEntity.id() ) - .getResultList(); - assertEquals( " Expected only asset3 to be returned", Collections.singletonList( asset3.getId() ), actual ); + public void testMultiSymbolUsingType(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + List actual = AuditReaderFactory.get( em ).createQuery() + .forEntitiesAtRevision( Asset.class, 1 ) + .traverseRelation( "multiSymbols", JoinType.INNER, "s" ) + .add( AuditEntity.property( "s", "type" ).eq( type2 ) ) + .up() + .addProjection( AuditEntity.id() ) + .getResultList(); + assertEquals( Collections.singletonList( asset3.getId() ), actual, " Expected only asset3 to be returned" ); + } ); } @Test - public void testJoinOnSingleComponentAssociation() { - List actual = getAuditReader().createQuery() - .forEntitiesAtRevision( Asset.class, 1 ) - .traverseRelation( "singleSymbol", JoinType.INNER, "s" ) - .traverseRelation( "type", JoinType.INNER, "t" ) - .add( AuditEntity.property( "t", "name" ).eq( "T1" ) ) - .up() - .up() - .addProjection( AuditEntity.id() ) - .getResultList(); - assertEquals( "Expected only asset2 to be returned", Collections.singletonList( asset2.getId() ), actual ); + public void testJoinOnSingleComponentAssociation(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + List actual = AuditReaderFactory.get( em ).createQuery() + .forEntitiesAtRevision( Asset.class, 1 ) + .traverseRelation( "singleSymbol", JoinType.INNER, "s" ) + .traverseRelation( "type", JoinType.INNER, "t" ) + .add( AuditEntity.property( "t", "name" ).eq( "T1" ) ) + .up() + .up() + .addProjection( AuditEntity.id() ) + .getResultList(); + assertEquals( Collections.singletonList( asset2.getId() ), actual, "Expected only asset2 to be returned" ); + } ); } @Test - public void testJoinOnMultiComponentAssociation() { - List actual = getAuditReader().createQuery() - .forEntitiesAtRevision( Asset.class, 1 ) - .traverseRelation( "multiSymbols", JoinType.INNER, "s" ) - .traverseRelation( "type", JoinType.INNER, "t" ) - .add( AuditEntity.property( "t", "name" ).eq( "T2" ) ) - .up() - .up() - .addProjection( AuditEntity.id() ) - .getResultList(); - assertEquals( "Expected only asset3 to be returned", Collections.singletonList( asset3.getId() ), actual ); + public void testJoinOnMultiComponentAssociation(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + List actual = AuditReaderFactory.get( em ).createQuery() + .forEntitiesAtRevision( Asset.class, 1 ) + .traverseRelation( "multiSymbols", JoinType.INNER, "s" ) + .traverseRelation( "type", JoinType.INNER, "t" ) + .add( AuditEntity.property( "t", "name" ).eq( "T2" ) ) + .up() + .up() + .addProjection( AuditEntity.id() ) + .getResultList(); + assertEquals( Collections.singletonList( asset3.getId() ), actual, "Expected only asset3 to be returned" ); + } ); } @Test - public void testOrderingOnSingleComponent() { - List actual = getAuditReader().createQuery() - .forEntitiesAtRevision( Asset.class, 1 ) - .addProjection( AuditEntity.id() ) - .traverseRelation( "singleSymbol", JoinType.LEFT, "s" ) - .addOrder( AuditEntity.property( "s", "identifier" ).asc().nulls( NullPrecedence.FIRST ) ) - .getResultList(); - List expected = new ArrayList<>(); - Collections.addAll( expected, asset1.getId(), asset2.getId(), asset3.getId() ); - assertEquals( "Expected all assets in correct order", expected, actual ); + public void testOrderingOnSingleComponent(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + List actual = AuditReaderFactory.get( em ).createQuery() + .forEntitiesAtRevision( Asset.class, 1 ) + .addProjection( AuditEntity.id() ) + .traverseRelation( "singleSymbol", JoinType.LEFT, "s" ) + .addOrder( AuditEntity.property( "s", "identifier" ).asc().nulls( NullPrecedence.FIRST ) ) + .getResultList(); + List expected = new ArrayList<>(); + Collections.addAll( expected, asset1.getId(), asset2.getId(), asset3.getId() ); + assertEquals( expected, actual, "Expected all assets in correct order" ); + } ); } @Test - public void testOrderingOnMultiComponent() { - List actual = getAuditReader().createQuery() - .forEntitiesAtRevision( Asset.class, 1 ) - .addProjection( AuditEntity.id() ) - .traverseRelation( "multiSymbols", JoinType.LEFT, "s" ) - .traverseRelation( "type", JoinType.LEFT, "t" ) - .addOrder( AuditEntity.property( "t", "name" ).asc().nulls( NullPrecedence.FIRST ) ) - .addOrder( AuditEntity.property( "s", "identifier" ).asc().nulls( NullPrecedence.FIRST ) ) - .getResultList(); - List expected = new ArrayList<>(); - Collections.addAll( expected, asset1.getId(), asset2.getId(), asset3.getId(), asset3.getId() ); - assertEquals( "Expected all assets in correct order", expected, actual ); + public void testOrderingOnMultiComponent(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + List actual = AuditReaderFactory.get( em ).createQuery() + .forEntitiesAtRevision( Asset.class, 1 ) + .addProjection( AuditEntity.id() ) + .traverseRelation( "multiSymbols", JoinType.LEFT, "s" ) + .traverseRelation( "type", JoinType.LEFT, "t" ) + .addOrder( AuditEntity.property( "t", "name" ).asc().nulls( NullPrecedence.FIRST ) ) + .addOrder( AuditEntity.property( "s", "identifier" ).asc().nulls( NullPrecedence.FIRST ) ) + .getResultList(); + List expected = new ArrayList<>(); + Collections.addAll( expected, asset1.getId(), asset2.getId(), asset3.getId(), asset3.getId() ); + assertEquals( expected, actual, "Expected all assets in correct order" ); + } ); } @Test - public void testProjectionOnSingleComponentProperty() { - List actual = getAuditReader().createQuery() - .forEntitiesAtRevision( Asset.class, 1 ) - .add( AuditEntity.id().eq( asset2.getId() ) ) - .traverseRelation( "singleSymbol", JoinType.INNER, "s" ) - .addProjection( AuditEntity.property( "s", "identifier" ) ) - .getResultList(); - assertEquals( "Expected the symbol identifier of asset2 to be returned", Collections.singletonList( "X1" ), actual ); + public void testProjectionOnSingleComponentProperty(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + List actual = AuditReaderFactory.get( em ).createQuery() + .forEntitiesAtRevision( Asset.class, 1 ) + .add( AuditEntity.id().eq( asset2.getId() ) ) + .traverseRelation( "singleSymbol", JoinType.INNER, "s" ) + .addProjection( AuditEntity.property( "s", "identifier" ) ) + .getResultList(); + assertEquals( Collections.singletonList( "X1" ), actual, "Expected the symbol identifier of asset2 to be returned" ); + } ); } @Test - public void testProjectionOnMultiComponentProperty() { - List actual = getAuditReader().createQuery() - .forEntitiesAtRevision( Asset.class, 1 ) - .add( AuditEntity.id().eq( asset2.getId() ) ) - .traverseRelation( "multiSymbols", JoinType.INNER, "s" ) - .addProjection( AuditEntity.property( "s", "identifier" ) ) - .getResultList(); - assertEquals( "Expected the symbol identifier of asset2 to be returned", Collections.singletonList( "X" ), actual ); + public void testProjectionOnMultiComponentProperty(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + List actual = AuditReaderFactory.get( em ).createQuery() + .forEntitiesAtRevision( Asset.class, 1 ) + .add( AuditEntity.id().eq( asset2.getId() ) ) + .traverseRelation( "multiSymbols", JoinType.INNER, "s" ) + .addProjection( AuditEntity.property( "s", "identifier" ) ) + .getResultList(); + assertEquals( Collections.singletonList( "X" ), actual, "Expected the symbol identifier of asset2 to be returned" ); + } ); } @Test - public void testFunctionOnSingleComponentProperty() { - List actual = getAuditReader().createQuery() - .forEntitiesAtRevision( Asset.class, 1 ) - .add( AuditEntity.id().eq( asset2.getId() ) ) - .traverseRelation( "singleSymbol", JoinType.INNER, "s" ) - .addProjection( AuditEntity.function( "CONCAT", AuditEntity.property( "s", "identifier" ), "Z" ) ) - .getResultList(); - assertEquals( "Expecte the symbol identfier of asset2 concatenated with 'Z'", Collections.singletonList( "X1Z" ), actual ); + public void testFunctionOnSingleComponentProperty(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + List actual = AuditReaderFactory.get( em ).createQuery() + .forEntitiesAtRevision( Asset.class, 1 ) + .add( AuditEntity.id().eq( asset2.getId() ) ) + .traverseRelation( "singleSymbol", JoinType.INNER, "s" ) + .addProjection( AuditEntity.function( "CONCAT", AuditEntity.property( "s", "identifier" ), "Z" ) ) + .getResultList(); + assertEquals( Collections.singletonList( "X1Z" ), actual, "Expecte the symbol identfier of asset2 concatenated with 'Z'" ); + } ); } @Test - public void testFunctionOnMultiComponentProperty() { - List actual = getAuditReader().createQuery() - .forEntitiesAtRevision( Asset.class, 1 ) - .add( AuditEntity.id().eq( asset2.getId() ) ) - .traverseRelation( "multiSymbols", JoinType.INNER, "s" ) - .addProjection( AuditEntity.function( "CONCAT", AuditEntity.property( "s", "identifier" ), "Z" ) ) - .getResultList(); - assertEquals( "Expecte the symbol identfier of asset2 concatenated with 'Z'", Collections.singletonList( "XZ" ), actual ); + public void testFunctionOnMultiComponentProperty(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + List actual = AuditReaderFactory.get( em ).createQuery() + .forEntitiesAtRevision( Asset.class, 1 ) + .add( AuditEntity.id().eq( asset2.getId() ) ) + .traverseRelation( "multiSymbols", JoinType.INNER, "s" ) + .addProjection( AuditEntity.function( "CONCAT", AuditEntity.property( "s", "identifier" ), "Z" ) ) + .getResultList(); + assertEquals( Collections.singletonList( "XZ" ), actual, "Expecte the symbol identfier of asset2 concatenated with 'Z'" ); + } ); } @Test @JiraKey(value = "HHH-11896") - public void testOnClauseOnSingleSymbol() { - List actual = getAuditReader().createQuery() - .forEntitiesAtRevision( Asset.class, 1 ) - .addProjection( AuditEntity.id() ) - .traverseRelation( "singleSymbol", JoinType.LEFT, "s", AuditEntity.property( "s", "type" ).eq( type1 ) ) - .addOrder( AuditEntity.property( "s", "identifier" ).asc().nulls( NullPrecedence.FIRST ) ) - .up() - .addOrder( AuditEntity.id().asc() ) - .getResultList(); - final List expected = new ArrayList<>(); - Collections.addAll( expected, asset1.getId(), asset3.getId(), asset2.getId() ); - assertEquals( "Expected the correct ordering. Assets which do not have a symbol of type1 should come first (null first)", expected, actual ); + public void testOnClauseOnSingleSymbol(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + List actual = AuditReaderFactory.get( em ).createQuery() + .forEntitiesAtRevision( Asset.class, 1 ) + .addProjection( AuditEntity.id() ) + .traverseRelation( "singleSymbol", JoinType.LEFT, "s", AuditEntity.property( "s", "type" ).eq( type1 ) ) + .addOrder( AuditEntity.property( "s", "identifier" ).asc().nulls( NullPrecedence.FIRST ) ) + .up() + .addOrder( AuditEntity.id().asc() ) + .getResultList(); + final List expected = new ArrayList<>(); + Collections.addAll( expected, asset1.getId(), asset3.getId(), asset2.getId() ); + assertEquals( expected, actual, "Expected the correct ordering. Assets which do not have a symbol of type1 should come first (null first)" ); + } ); } @Test @JiraKey(value = "HHH-11896") - public void testOnClauseOnMultiSymbol() { - List actual = getAuditReader().createQuery() - .forEntitiesAtRevision( Asset.class, 1 ) - .addProjection( AuditEntity.id() ) - .traverseRelation( "multiSymbols", JoinType.LEFT, "s", AuditEntity.property( "s", "type" ).eq( type1 ) ) - .addOrder( AuditEntity.property( "s", "identifier" ).asc().nulls( NullPrecedence.FIRST ) ) - .up() - .addOrder( AuditEntity.id().asc() ) - .getResultList(); - final List expected = new ArrayList<>(); - Collections.addAll( expected, asset1.getId(), asset2.getId(), asset3.getId() ); - assertEquals( "Expected the correct ordering. Assets which do not have a symbol of type1 should come first (null first)", expected, actual ); + public void testOnClauseOnMultiSymbol(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + List actual = AuditReaderFactory.get( em ).createQuery() + .forEntitiesAtRevision( Asset.class, 1 ) + .addProjection( AuditEntity.id() ) + .traverseRelation( "multiSymbols", JoinType.LEFT, "s", AuditEntity.property( "s", "type" ).eq( type1 ) ) + .addOrder( AuditEntity.property( "s", "identifier" ).asc().nulls( NullPrecedence.FIRST ) ) + .up() + .addOrder( AuditEntity.id().asc() ) + .getResultList(); + final List expected = new ArrayList<>(); + Collections.addAll( expected, asset1.getId(), asset2.getId(), asset3.getId() ); + assertEquals( expected, actual, "Expected the correct ordering. Assets which do not have a symbol of type1 should come first (null first)" ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/CustomRevEntityQuery.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/CustomRevEntityQuery.java index 9e6f358735a9..d58b6a42bdad 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/CustomRevEntityQuery.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/CustomRevEntityQuery.java @@ -5,47 +5,48 @@ package org.hibernate.orm.test.envers.integration.query; import java.util.List; -import jakarta.persistence.EntityManager; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.query.AuditEntity; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; import org.hibernate.orm.test.envers.entities.StrIntTestEntity; import org.hibernate.orm.test.envers.entities.reventity.CustomRevEntity; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.junit.jupiter.api.Test; -import org.junit.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertInstanceOf; +import static org.junit.jupiter.api.Assertions.assertTrue; /** * @author Adam Warski (adam at warski dot org) */ @SuppressWarnings("unchecked") -public class CustomRevEntityQuery extends BaseEnversJPAFunctionalTestCase { +@Jpa(annotatedClasses = { + StrIntTestEntity.class, + CustomRevEntity.class +}) +@EnversTest +public class CustomRevEntityQuery { private Integer id1; private Integer id2; private Long timestamp; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {StrIntTestEntity.class, CustomRevEntity.class}; - } - - @Test - @Priority(10) - public void initData() throws InterruptedException { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) throws InterruptedException { // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - - StrIntTestEntity site1 = new StrIntTestEntity( "a", 10 ); - StrIntTestEntity site2 = new StrIntTestEntity( "b", 15 ); + scope.inTransaction( em -> { + StrIntTestEntity site1 = new StrIntTestEntity( "a", 10 ); + StrIntTestEntity site2 = new StrIntTestEntity( "b", 15 ); - em.persist( site1 ); - em.persist( site2 ); + em.persist( site1 ); + em.persist( site2 ); - id1 = site1.getId(); - id2 = site2.getId(); - - em.getTransaction().commit(); + id1 = site1.getId(); + id2 = site2.getId(); + } ); Thread.sleep( 100 ); @@ -54,54 +55,57 @@ public void initData() throws InterruptedException { Thread.sleep( 100 ); // Revision 2 - em.getTransaction().begin(); - - site1 = em.find( StrIntTestEntity.class, id1 ); - - site1.setStr1( "c" ); - - em.getTransaction().commit(); + scope.inTransaction( em -> { + StrIntTestEntity site1 = em.find( StrIntTestEntity.class, id1 ); + site1.setStr1( "c" ); + } ); } @Test - public void testRevisionsOfId1Query() { - List result = getAuditReader().createQuery() - .forRevisionsOfEntity( StrIntTestEntity.class, false, true ) - .add( AuditEntity.id().eq( id1 ) ) - .getResultList(); - - assert result.get( 0 )[0].equals( new StrIntTestEntity( "a", 10, id1 ) ); - assert result.get( 0 )[1] instanceof CustomRevEntity; - assert ((CustomRevEntity) result.get( 0 )[1]).getCustomId() == 1; - - assert result.get( 1 )[0].equals( new StrIntTestEntity( "c", 10, id1 ) ); - assert result.get( 1 )[1] instanceof CustomRevEntity; - assert ((CustomRevEntity) result.get( 1 )[1]).getCustomId() == 2; + public void testRevisionsOfId1Query(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + List result = AuditReaderFactory.get( em ).createQuery() + .forRevisionsOfEntity( StrIntTestEntity.class, false, true ) + .add( AuditEntity.id().eq( id1 ) ) + .getResultList(); + + assertEquals( new StrIntTestEntity( "a", 10, id1 ), result.get( 0 )[0] ); + assertInstanceOf( CustomRevEntity.class, result.get( 0 )[1] ); + assertEquals( 1, ((CustomRevEntity) result.get( 0 )[1]).getCustomId() ); + + assertEquals( new StrIntTestEntity( "c", 10, id1 ), result.get( 1 )[0] ); + assertInstanceOf( CustomRevEntity.class, result.get( 1 )[1] ); + assertEquals( 2, ((CustomRevEntity) result.get( 1 )[1]).getCustomId() ); + } ); } @Test - public void testRevisionsOfId2Query() { - List result = getAuditReader().createQuery() - .forRevisionsOfEntity( StrIntTestEntity.class, false, true ) - .add( AuditEntity.id().eq( id2 ) ) - .getResultList(); - - assert result.get( 0 )[0].equals( new StrIntTestEntity( "b", 15, id2 ) ); - assert result.get( 0 )[1] instanceof CustomRevEntity; - assert ((CustomRevEntity) result.get( 0 )[1]).getCustomId() == 1; + public void testRevisionsOfId2Query(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + List result = AuditReaderFactory.get( em ).createQuery() + .forRevisionsOfEntity( StrIntTestEntity.class, false, true ) + .add( AuditEntity.id().eq( id2 ) ) + .getResultList(); + + assertEquals( new StrIntTestEntity( "b", 15, id2 ), result.get( 0 )[0] ); + assertInstanceOf( CustomRevEntity.class, result.get( 0 )[1] ); + assertEquals( 1, ((CustomRevEntity) result.get( 0 )[1]).getCustomId() ); + } ); } @Test - public void testRevisionPropertyRestriction() { - List result = getAuditReader().createQuery() - .forRevisionsOfEntity( StrIntTestEntity.class, false, true ) - .add( AuditEntity.id().eq( id1 ) ) - .add( AuditEntity.revisionProperty( "customTimestamp" ).ge( timestamp ) ) - .getResultList(); - - assert result.get( 0 )[0].equals( new StrIntTestEntity( "c", 10, id1 ) ); - assert result.get( 0 )[1] instanceof CustomRevEntity; - assert ((CustomRevEntity) result.get( 0 )[1]).getCustomId() == 2; - assert ((CustomRevEntity) result.get( 0 )[1]).getCustomTimestamp() >= timestamp; + public void testRevisionPropertyRestriction(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + List result = AuditReaderFactory.get( em ).createQuery() + .forRevisionsOfEntity( StrIntTestEntity.class, false, true ) + .add( AuditEntity.id().eq( id1 ) ) + .add( AuditEntity.revisionProperty( "customTimestamp" ).ge( timestamp ) ) + .getResultList(); + + assertEquals( new StrIntTestEntity( "c", 10, id1 ), result.get( 0 )[0] ); + assertInstanceOf( CustomRevEntity.class, result.get( 0 )[1] ); + assertEquals( 2, ((CustomRevEntity) result.get( 0 )[1]).getCustomId() ); + assertTrue( ((CustomRevEntity) result.get( 0 )[1]).getCustomTimestamp() >= timestamp ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/DeletedEntities.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/DeletedEntities.java index aa5eef5972c3..dc5c74690b76 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/DeletedEntities.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/DeletedEntities.java @@ -4,79 +4,86 @@ */ package org.hibernate.orm.test.envers.integration.query; -import java.util.List; -import jakarta.persistence.EntityManager; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.RevisionType; import org.hibernate.envers.enhanced.SequenceIdRevisionEntity; import org.hibernate.envers.query.AuditEntity; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; import org.hibernate.orm.test.envers.entities.StrIntTestEntity; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.junit.jupiter.api.Test; -import org.junit.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Adam Warski (adam at warski dot org) */ -public class DeletedEntities extends BaseEnversJPAFunctionalTestCase { +@Jpa(annotatedClasses = { + StrIntTestEntity.class +}) +@EnversTest +public class DeletedEntities { + private Integer id1; private Integer id2; + private Integer id3; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {StrIntTestEntity.class}; - } - - @Test - @Priority(10) - public void initData() { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); + scope.inEntityManager( em -> { + em.getTransaction().begin(); - StrIntTestEntity site1 = new StrIntTestEntity( "a", 10 ); - StrIntTestEntity site2 = new StrIntTestEntity( "b", 11 ); + StrIntTestEntity site1 = new StrIntTestEntity( "a", 10 ); + StrIntTestEntity site2 = new StrIntTestEntity( "b", 11 ); - em.persist( site1 ); - em.persist( site2 ); + em.persist( site1 ); + em.persist( site2 ); - id2 = site2.getId(); + id2 = site2.getId(); - em.getTransaction().commit(); + em.getTransaction().commit(); - // Revision 2 - em.getTransaction().begin(); + // Revision 2 + em.getTransaction().begin(); - site2 = em.find( StrIntTestEntity.class, id2 ); - em.remove( site2 ); + site2 = em.find( StrIntTestEntity.class, id2 ); + em.remove( site2 ); - em.getTransaction().commit(); + em.getTransaction().commit(); + } ); } @Test - public void testProjectionsInEntitiesAtRevision() { - assert getAuditReader().createQuery().forEntitiesAtRevision( StrIntTestEntity.class, 1 ) - .getResultList().size() == 2; - assert getAuditReader().createQuery().forEntitiesAtRevision( StrIntTestEntity.class, 2 ) - .getResultList().size() == 1; - - assert (Long) getAuditReader().createQuery().forEntitiesAtRevision( StrIntTestEntity.class, 1 ) - .addProjection( AuditEntity.id().count() ).getResultList().get( 0 ) == 2; - assert (Long) getAuditReader().createQuery().forEntitiesAtRevision( StrIntTestEntity.class, 2 ) - .addProjection( AuditEntity.id().count() ).getResultList().get( 0 ) == 1; + public void testProjectionsInEntitiesAtRevision(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( 2, auditReader.createQuery().forEntitiesAtRevision( StrIntTestEntity.class, 1 ).getResultList().size() ); + assertEquals( 1, auditReader.createQuery().forEntitiesAtRevision( StrIntTestEntity.class, 2 ).getResultList().size() ); + + assertEquals( 2L, auditReader.createQuery().forEntitiesAtRevision( StrIntTestEntity.class, 1 ) + .addProjection( AuditEntity.id().count() ).getResultList().get( 0 ) ); + assertEquals( 1L, auditReader.createQuery().forEntitiesAtRevision( StrIntTestEntity.class, 2 ) + .addProjection( AuditEntity.id().count() ).getResultList().get( 0 ) ); + } ); } @Test - public void testRevisionsOfEntityWithoutDelete() { - List result = getAuditReader().createQuery() - .forRevisionsOfEntity( StrIntTestEntity.class, false, false ) - .add( AuditEntity.id().eq( id2 ) ) - .getResultList(); + public void testRevisionsOfEntityWithoutDelete(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var result = AuditReaderFactory.get( em ).createQuery() + .forRevisionsOfEntity( StrIntTestEntity.class, false, false ) + .add( AuditEntity.id().eq( id2 ) ) + .getResultList(); + + assertEquals( 1, result.size() ); - assert result.size() == 1; - assert ((Object[]) result.get( 0 ))[0].equals( new StrIntTestEntity( "b", 11, id2 ) ); - assert ((SequenceIdRevisionEntity) ((Object[]) result.get( 0 ))[1]).getId() == 1; - assert ((Object[]) result.get( 0 ))[2].equals( RevisionType.ADD ); + assertEquals( new StrIntTestEntity( "b", 11, id2 ), ((Object[]) result.get( 0 ))[0] ); + assertEquals( 1, ((SequenceIdRevisionEntity) ((Object[]) result.get( 0 ))[1]).getId() ); + assertEquals( RevisionType.ADD, ((Object[]) result.get( 0 ))[2] ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/EntityTypeQueryTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/EntityTypeQueryTest.java index 7827c171cf44..ba3fbebf23fc 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/EntityTypeQueryTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/EntityTypeQueryTest.java @@ -15,21 +15,27 @@ import jakarta.persistence.InheritanceType; import org.hibernate.envers.Audited; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.query.AuditEntity; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.junit.Test; - +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; +import org.hibernate.testing.orm.junit.Jpa; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.junit.jupiter.api.Test; -import static org.hibernate.testing.transaction.TransactionUtil.doInJPA; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Felix Feisst (feisst dot felix at gmail dot com) */ @JiraKey(value = "HHH-11573") -public class EntityTypeQueryTest extends BaseEnversJPAFunctionalTestCase { +@Jpa(annotatedClasses = { + EntityTypeQueryTest.EntityA.class, + EntityTypeQueryTest.EntityB.class +}) +@EnversTest +public class EntityTypeQueryTest { @Entity(name = "EntityA") @Audited @@ -70,51 +76,49 @@ public static class EntityB extends EntityA { private EntityB b1; private EntityB b2; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[]{ EntityA.class, EntityB.class }; - } - - @Test - @Priority(10) - public void initData() { - doInJPA( this::entityManagerFactory, entityManager -> { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + scope.inTransaction( em -> { a1 = new EntityA(); a1.setName( "a1" ); - entityManager.persist( a1 ); + em.persist( a1 ); a2 = new EntityA(); a2.setName( "a2" ); - entityManager.persist( a2 ); + em.persist( a2 ); b1 = new EntityB(); b1.setName( "b1" ); - entityManager.persist( b1 ); + em.persist( b1 ); b2 = new EntityB(); b2.setName( "b2" ); - entityManager.persist( b2 ); + em.persist( b2 ); } ); } @Test - public void testRestrictToSubType() { - List list = getAuditReader().createQuery().forEntitiesAtRevision( EntityA.class, 1 ) - .add( AuditEntity.entityType( EntityB.class ) ) - .addProjection( AuditEntity.property( "name" ) ) - .addOrder( AuditEntity.property( "name" ).asc() ) - .getResultList(); - assertEquals( "Expected only entities of type EntityB to be selected", list( "b1", "b2" ), list ); + public void testRestrictToSubType(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + List list = AuditReaderFactory.get( em ).createQuery().forEntitiesAtRevision( EntityA.class, 1 ) + .add( AuditEntity.entityType( EntityB.class ) ) + .addProjection( AuditEntity.property( "name" ) ) + .addOrder( AuditEntity.property( "name" ).asc() ) + .getResultList(); + assertEquals( list( "b1", "b2" ), list, "Expected only entities of type EntityB to be selected" ); + } ); } @Test - public void testRestrictToSuperType() { - List list = getAuditReader().createQuery().forEntitiesAtRevision( EntityA.class, 1 ) - .add( AuditEntity.entityType( EntityA.class ) ) - .addProjection( AuditEntity.property( "name" ) ) - .addOrder( AuditEntity.property( "name" ).asc() ) - .getResultList(); - assertEquals( "Expected only entities of type EntityA to be selected", list( "a1", "a2" ), list ); + public void testRestrictToSuperType(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + List list = AuditReaderFactory.get( em ).createQuery().forEntitiesAtRevision( EntityA.class, 1 ) + .add( AuditEntity.entityType( EntityA.class ) ) + .addProjection( AuditEntity.property( "name" ) ) + .addOrder( AuditEntity.property( "name" ).asc() ) + .getResultList(); + assertEquals( list( "a1", "a2" ), list, "Expected only entities of type EntityA to be selected" ); + } ); } private List list(final String... elements) { diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/EntityWithChangesQueryNoModifiedFlagTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/EntityWithChangesQueryNoModifiedFlagTest.java index 035b963291cc..098aa81a28f4 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/EntityWithChangesQueryNoModifiedFlagTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/EntityWithChangesQueryNoModifiedFlagTest.java @@ -5,9 +5,12 @@ package org.hibernate.orm.test.envers.integration.query; import org.hibernate.envers.exception.AuditException; -import org.junit.Test; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; import static org.hibernate.testing.junit4.ExtraAssertions.assertTyping; import static org.junit.Assert.fail; @@ -15,12 +18,16 @@ /** * @author Chris Cranford */ +@Jpa(annotatedClasses = { + AbstractEntityWithChangesQueryTest.Simple.class +}) +@EnversTest @JiraKey( value = "HHH-8058" ) public class EntityWithChangesQueryNoModifiedFlagTest extends AbstractEntityWithChangesQueryTest { @Test - public void testEntityRevisionsWithChangesQueryNoDeletions() { + public void testEntityRevisionsWithChangesQueryNoDeletions(EntityManagerFactoryScope scope) { try { - super.testEntityRevisionsWithChangesQueryNoDeletions(); + super.testEntityRevisionsWithChangesQueryNoDeletions( scope ); fail( "This should have failed with AuditException since test case doesn't enable modifiedFlag" ); } catch ( Exception e ) { @@ -29,9 +36,9 @@ public void testEntityRevisionsWithChangesQueryNoDeletions() { } @Test - public void testEntityRevisionsWithChangesQuery() { + public void testEntityRevisionsWithChangesQuery(EntityManagerFactoryScope scope) { try { - super.testEntityRevisionsWithChangesQuery(); + super.testEntityRevisionsWithChangesQuery( scope ); fail( "This should have failed with AuditException since test case doesn't enable modifiedFlag" ); } catch ( Exception e ) { diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/EntityWithChangesQueryStoreDeletionDataTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/EntityWithChangesQueryStoreDeletionDataTest.java index e69e1a894ffa..6798a5f70827 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/EntityWithChangesQueryStoreDeletionDataTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/EntityWithChangesQueryStoreDeletionDataTest.java @@ -4,21 +4,23 @@ */ package org.hibernate.orm.test.envers.integration.query; -import java.util.Map; import org.hibernate.envers.configuration.EnversSettings; - +import org.hibernate.testing.envers.junit.EnversTest; import org.hibernate.testing.orm.junit.JiraKey; +import org.hibernate.testing.orm.junit.Jpa; +import org.hibernate.testing.orm.junit.Setting; /** * @author Chris Cranford */ -@JiraKey( value = "HHH-8058" ) +@Jpa(annotatedClasses = { + AbstractEntityWithChangesQueryTest.Simple.class +}, integrationSettings = { + @Setting(name = EnversSettings.GLOBAL_WITH_MODIFIED_FLAG, value = "true"), + @Setting(name = EnversSettings.STORE_DATA_AT_DELETE, value = "true") +}) +@EnversTest +@JiraKey(value = "HHH-8058") public class EntityWithChangesQueryStoreDeletionDataTest extends AbstractEntityWithChangesQueryTest { - @Override - protected void addConfigOptions(Map options) { - options.put( EnversSettings.GLOBAL_WITH_MODIFIED_FLAG, Boolean.TRUE ); - options.put( EnversSettings.STORE_DATA_AT_DELETE, Boolean.TRUE ); - super.addConfigOptions( options ); - } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/EntityWithChangesQueryTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/EntityWithChangesQueryTest.java index 9f6454ac8b1d..b4f80a685be7 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/EntityWithChangesQueryTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/EntityWithChangesQueryTest.java @@ -4,20 +4,20 @@ */ package org.hibernate.orm.test.envers.integration.query; -import java.util.Map; - import org.hibernate.envers.configuration.EnversSettings; - +import org.hibernate.testing.envers.junit.EnversTest; import org.hibernate.testing.orm.junit.JiraKey; +import org.hibernate.testing.orm.junit.Jpa; +import org.hibernate.testing.orm.junit.Setting; + /** * @author Chris Cranford */ -@JiraKey( value = "HHH-8058" ) +@Jpa(annotatedClasses = {AbstractEntityWithChangesQueryTest.Simple.class}, integrationSettings = { + @Setting(name = EnversSettings.GLOBAL_WITH_MODIFIED_FLAG, value = "true") +}) +@EnversTest +@JiraKey(value = "HHH-8058") public class EntityWithChangesQueryTest extends AbstractEntityWithChangesQueryTest { - @Override - protected void addConfigOptions(Map options) { - super.addConfigOptions( options ); - options.put( EnversSettings.GLOBAL_WITH_MODIFIED_FLAG, Boolean.TRUE ); - } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/InheritanceAssociationToOneInnerJoinTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/InheritanceAssociationToOneInnerJoinTest.java new file mode 100644 index 000000000000..3ee3f5190c93 --- /dev/null +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/InheritanceAssociationToOneInnerJoinTest.java @@ -0,0 +1,233 @@ +/* + * SPDX-License-Identifier: Apache-2.0 + * Copyright Red Hat Inc. and Hibernate Authors + */ +package org.hibernate.orm.test.envers.integration.query; + +import java.util.List; + +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import jakarta.persistence.Inheritance; +import jakarta.persistence.InheritanceType; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.criteria.JoinType; + +import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.envers.Audited; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.JiraKey; +import org.hibernate.testing.orm.junit.Jpa; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.junit.jupiter.api.Test; + +import static org.hibernate.envers.query.AuditEntity.disjunction; +import static org.hibernate.envers.query.AuditEntity.property; +import static org.junit.jupiter.api.Assertions.assertEquals; + +/** + * @author Chris Cranford + */ +@JiraKey(value = "HHH-11383") +@Jpa(annotatedClasses = { + InheritanceAssociationToOneInnerJoinTest.EntityA.class, + InheritanceAssociationToOneInnerJoinTest.EntityB.class, + InheritanceAssociationToOneInnerJoinTest.EntityC.class, + InheritanceAssociationToOneInnerJoinTest.EntityD.class +}) +@EnversTest +public class InheritanceAssociationToOneInnerJoinTest { + + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + scope.inTransaction( em -> { + final EntityC c = new EntityC(); + c.setId( 1 ); + c.setFoo( "bar" ); + em.persist( c ); + + final EntityD d = new EntityD(); + d.setId( 1 ); + d.setFoo( "bar" ); + em.persist( d ); + + final EntityB b1 = new EntityB(); + b1.setId( 1 ); + b1.setName( "b1" ); + b1.setRelationToC( c ); + b1.setRelationToD( d ); + em.persist( b1 ); + + final EntityB b2 = new EntityB(); + b2.setId( 2 ); + b2.setName( "b2" ); + b2.setRelationToC( c ); + b2.setRelationToD( d ); + em.persist( b2 ); + } ); + } + + @Test + public void testAuditQueryWithJoinedInheritanceUsingWithSemanticsManyToOne(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + List results = AuditReaderFactory.get( em ).createQuery().forEntitiesAtRevision( EntityB.class, 1 ) + .add( + disjunction() + .add( property( "name" ).like( "b1" ) ) + .add( property( "name" ).like( "b2" ) ) ) + .traverseRelation( "relationToC", JoinType.INNER ) + .add( property( "foo" ).like( "bar" ) ) + .getResultList(); + assertEquals( 2, results.size() ); + } ); + } + + @Test + public void testAuditQueryWithJoinedInheritanceUsingWithSemanticsOneToOne(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + List results = AuditReaderFactory.get( em ).createQuery().forEntitiesAtRevision( EntityB.class, 1 ) + .add( + disjunction() + .add( property( "name" ).like( "b1" ) ) + .add( property( "name" ).like( "b2" ) ) ) + .traverseRelation( "relationToD", JoinType.INNER ) + .add( property( "foo" ).like( "bar" ) ) + .getResultList(); + assertEquals( 2, results.size() ); + } ); + } + + @Test + public void testAuditQueryWithJoinedInheritanceUsingWithSemanticsToOne(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + List results = AuditReaderFactory.get( em ).createQuery().forEntitiesAtRevision( EntityB.class, 1 ) + .add( + disjunction() + .add( property( "name" ).like( "b1" ) ) + .add( property( "name" ).like( "b2" ) ) ) + .traverseRelation( "relationToC", JoinType.INNER ) + .add( property( "foo" ).like( "bar" ) ) + .up() + .traverseRelation( "relationToD", JoinType.INNER ) + .add( property( "foo" ).like( "bar" ) ) + .getResultList(); + assertEquals( 2, results.size() ); + } ); + } + + @Test + public void testAuditQueryWithJoinedInheritanceSubclassPropertyProjectionWithRelationTraversal(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + // HHH-11383 + // This test was requested by the reporter so that we have a test that shows Hibernate is + // automatically adding "INNER JOIN EntityA_AUD" despite the fact whether the query uses + // the traverseRelation API or not. This test makes sure that if the SQL generation is + // changed in the future, Envers would properly fail if so. + List results = AuditReaderFactory.get( em ).createQuery().forEntitiesAtRevision( EntityB.class, 1 ) + .addProjection( property( "name" ) ) + .traverseRelation( "relationToC", JoinType.INNER ) + .add( property( "foo" ).like( "bar" ) ) + .getResultList(); + assertEquals( 2, results.size() ); + } ); + } + + @Entity(name = "EntityA") + @Audited + @Inheritance(strategy = InheritanceType.JOINED) + public static class EntityA { + @Id + private Integer id; + @ManyToOne + private EntityD relationToD; + @ManyToOne + private EntityC relationToC; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public EntityC getRelationToC() { + return relationToC; + } + + public void setRelationToC(EntityC relationToC) { + this.relationToC = relationToC; + } + + public EntityD getRelationToD() { + return relationToD; + } + + public void setRelationToD(EntityD relationToD) { + this.relationToD = relationToD; + } + } + + @Entity(name = "EntityB") + @Audited + public static class EntityB extends EntityA { + private String name; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + } + + @Entity(name = "EntityC") + @Audited + public static class EntityC { + @Id + private Integer id; + private String foo; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getFoo() { + return foo; + } + + public void setFoo(String foo) { + this.foo = foo; + } + } + + @Entity(name = "EntityD") + @Audited + public static class EntityD { + @Id + private Integer id; + private String foo; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getFoo() { + return foo; + } + + public void setFoo(String foo) { + this.foo = foo; + } + } +} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/JoinedInheritancePropertyJoinTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/JoinedInheritancePropertyJoinTest.java index ae5663fef54b..9cadb7ee864a 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/JoinedInheritancePropertyJoinTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/JoinedInheritancePropertyJoinTest.java @@ -13,48 +13,50 @@ import jakarta.persistence.OneToOne; import jakarta.persistence.criteria.JoinType; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.junit.Test; - +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; -import org.hibernate.testing.transaction.TransactionUtil; +import org.hibernate.testing.orm.junit.Jpa; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.junit.jupiter.api.Test; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Chris Cranford */ @JiraKey(value = "HHH-11416") -public class JoinedInheritancePropertyJoinTest extends BaseEnversJPAFunctionalTestCase { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { EntityA.class, EntityB.class, EntityC.class }; - } - - @Test - @Priority(10) - public void initData() { - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { +@Jpa(annotatedClasses = { + JoinedInheritancePropertyJoinTest.EntityA.class, + JoinedInheritancePropertyJoinTest.EntityB.class, + JoinedInheritancePropertyJoinTest.EntityC.class +}) +@EnversTest +public class JoinedInheritancePropertyJoinTest { + + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + scope.inTransaction( em -> { final EntityC c1 = new EntityC(); c1.setId( 1 ); c1.setName( "c1" ); c1.setFoo( "foo" ); c1.setPropB( "propB" ); c1.setPropC( "propC" ); - entityManager.persist( c1 ); + em.persist( c1 ); final EntityA a1 = new EntityA(); a1.setId( 1 ); a1.setRelationToC( c1 ); a1.setPropA( "propC" ); - entityManager.persist( a1 ); + em.persist( a1 ); } ); } @Test - public void testAuditQueryWithJoinedInheritanceUnrelatedPropertyJoin() { + public void testAuditQueryWithJoinedInheritanceUnrelatedPropertyJoin(EntityManagerFactoryScope scope) { // The problem is that this query succeeds on DefaultAuditStrategy, fails on ValidityAuditStrategy // // ValidityAuditStrategy @@ -84,17 +86,19 @@ public void testAuditQueryWithJoinedInheritanceUnrelatedPropertyJoin() { // Error: SQL Error: 42122, SQLState: 42S22 // Column "JOINEDINHE1_1_.REVEND" not found // - List results = getAuditReader().createQuery().forEntitiesAtRevision( EntityA.class, 1 ) - .traverseRelation( "relationToC", JoinType.INNER ) - .getResultList(); - assertEquals( 1, results.size() ); + scope.inEntityManager( em -> { + List results = AuditReaderFactory.get( em ).createQuery().forEntitiesAtRevision( EntityA.class, 1 ) + .traverseRelation( "relationToC", JoinType.INNER ) + .getResultList(); + assertEquals( 1, results.size() ); + } ); } @Test - public void testHibernateUnrelatedPropertyQuery() { + public void testHibernateUnrelatedPropertyQuery(EntityManagerFactoryScope scope) { final String queryString = "FROM EntityA a Inner Join EntityC c ON a.propA = c.propC Where c.propB = :propB"; - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - List results = entityManager.createQuery( queryString ).setParameter( "propB", "propB" ).getResultList(); + scope.inEntityManager( em -> { + List results = em.createQuery( queryString ).setParameter( "propB", "propB" ).getResultList(); assertEquals( 1, results.size() ); } ); } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/MaximalizePropertyQuery.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/MaximalizePropertyQuery.java index 0d97651faaa3..cb0c2466d22a 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/MaximalizePropertyQuery.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/MaximalizePropertyQuery.java @@ -8,194 +8,206 @@ import java.util.HashSet; import java.util.List; import java.util.Set; -import jakarta.persistence.EntityManager; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.RevisionType; import org.hibernate.envers.enhanced.SequenceIdRevisionEntity; import org.hibernate.envers.query.AuditEntity; import org.hibernate.envers.query.criteria.AuditDisjunction; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; import org.hibernate.orm.test.envers.entities.StrIntTestEntity; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Assert; -import org.junit.Test; +import org.hibernate.testing.orm.junit.Jpa; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.junit.jupiter.api.Assertions.fail; /** * @author Adam Warski (adam at warski dot org) * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) */ @SuppressWarnings("unchecked") -public class MaximalizePropertyQuery extends BaseEnversJPAFunctionalTestCase { +@Jpa(annotatedClasses = {StrIntTestEntity.class}) +@EnversTest +public class MaximalizePropertyQuery { Integer id1; Integer id2; Integer id3; Integer id4; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {StrIntTestEntity.class}; - } - - @Test - @Priority(10) - public void initData() { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); + scope.inEntityManager( em -> { + em.getTransaction().begin(); - StrIntTestEntity site1 = new StrIntTestEntity( "a", 10 ); - StrIntTestEntity site2 = new StrIntTestEntity( "b", 15 ); - StrIntTestEntity site3 = new StrIntTestEntity( "c", 42 ); - StrIntTestEntity site4 = new StrIntTestEntity( "d", 52 ); + StrIntTestEntity site1 = new StrIntTestEntity( "a", 10 ); + StrIntTestEntity site2 = new StrIntTestEntity( "b", 15 ); + StrIntTestEntity site3 = new StrIntTestEntity( "c", 42 ); + StrIntTestEntity site4 = new StrIntTestEntity( "d", 52 ); - em.persist( site1 ); - em.persist( site2 ); - em.persist( site3 ); - em.persist( site4 ); + em.persist( site1 ); + em.persist( site2 ); + em.persist( site3 ); + em.persist( site4 ); - id1 = site1.getId(); - id2 = site2.getId(); - id3 = site3.getId(); - id4 = site4.getId(); + id1 = site1.getId(); + id2 = site2.getId(); + id3 = site3.getId(); + id4 = site4.getId(); - em.getTransaction().commit(); + em.getTransaction().commit(); - // Revision 2 - em.getTransaction().begin(); + // Revision 2 + em.getTransaction().begin(); - site1 = em.find( StrIntTestEntity.class, id1 ); - site2 = em.find( StrIntTestEntity.class, id2 ); + StrIntTestEntity site1_2 = em.find( StrIntTestEntity.class, id1 ); + StrIntTestEntity site2_2 = em.find( StrIntTestEntity.class, id2 ); - site1.setStr1( "d" ); - site2.setNumber( 20 ); + site1_2.setStr1( "d" ); + site2_2.setNumber( 20 ); - em.getTransaction().commit(); + em.getTransaction().commit(); - // Revision 3 - em.getTransaction().begin(); + // Revision 3 + em.getTransaction().begin(); - site1 = em.find( StrIntTestEntity.class, id1 ); - site2 = em.find( StrIntTestEntity.class, id2 ); + StrIntTestEntity site1_3 = em.find( StrIntTestEntity.class, id1 ); + StrIntTestEntity site2_3 = em.find( StrIntTestEntity.class, id2 ); - site1.setNumber( 30 ); - site2.setStr1( "z" ); + site1_3.setNumber( 30 ); + site2_3.setStr1( "z" ); - em.getTransaction().commit(); + em.getTransaction().commit(); - // Revision 4 - em.getTransaction().begin(); + // Revision 4 + em.getTransaction().begin(); - site1 = em.find( StrIntTestEntity.class, id1 ); - site2 = em.find( StrIntTestEntity.class, id2 ); + StrIntTestEntity site1_4 = em.find( StrIntTestEntity.class, id1 ); + StrIntTestEntity site2_4 = em.find( StrIntTestEntity.class, id2 ); - site1.setNumber( 5 ); - site2.setStr1( "a" ); + site1_4.setNumber( 5 ); + site2_4.setStr1( "a" ); - em.getTransaction().commit(); + em.getTransaction().commit(); - // Revision 5 - em.getTransaction().begin(); - site4 = em.find( StrIntTestEntity.class, id4 ); - em.remove( site4 ); - em.getTransaction().commit(); + // Revision 5 + em.getTransaction().begin(); + StrIntTestEntity site4_5 = em.find( StrIntTestEntity.class, id4 ); + em.remove( site4_5 ); + em.getTransaction().commit(); + } ); } @Test - public void testMaximizeWithIdEq() { - List revs_id1 = getAuditReader().createQuery() - .forRevisionsOfEntity( StrIntTestEntity.class, false, true ) - .addProjection( AuditEntity.revisionNumber() ) - .add( - AuditEntity.property( "number" ).maximize() - .add( AuditEntity.id().eq( id2 ) ) - ) - .addOrder( AuditEntity.revisionNumber().asc() ) - .getResultList(); - - assert Arrays.asList( 2, 3, 4 ).equals( revs_id1 ); + public void testMaximizeWithIdEq(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + List revs_id1 = AuditReaderFactory.get( em ).createQuery() + .forRevisionsOfEntity( StrIntTestEntity.class, false, true ) + .addProjection( AuditEntity.revisionNumber() ) + .add( + AuditEntity.property( "number" ).maximize() + .add( AuditEntity.id().eq( id2 ) ) + ) + .addOrder( AuditEntity.revisionNumber().asc() ) + .getResultList(); + + assertEquals( Arrays.asList( 2, 3, 4 ), revs_id1 ); + } ); } @Test - public void testMinimizeWithPropertyEq() { - List result = getAuditReader().createQuery() - .forRevisionsOfEntity( StrIntTestEntity.class, false, true ) - .addProjection( AuditEntity.revisionNumber() ) - .add( - AuditEntity.property( "number" ).minimize() - .add( AuditEntity.property( "str1" ).eq( "a" ) ) - ) - .getResultList(); - - assert Arrays.asList( 1 ).equals( result ); + public void testMinimizeWithPropertyEq(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + List result = AuditReaderFactory.get( em ).createQuery() + .forRevisionsOfEntity( StrIntTestEntity.class, false, true ) + .addProjection( AuditEntity.revisionNumber() ) + .add( + AuditEntity.property( "number" ).minimize() + .add( AuditEntity.property( "str1" ).eq( "a" ) ) + ) + .getResultList(); + + assertEquals( Arrays.asList( 1 ), result ); + } ); } @Test - public void testMaximizeRevision() { - List result = getAuditReader().createQuery() - .forRevisionsOfEntity( StrIntTestEntity.class, false, true ) - .addProjection( AuditEntity.revisionNumber() ) - .add( - AuditEntity.revisionNumber().maximize() - .add( AuditEntity.property( "number" ).eq( 10 ) ) - ) - .getResultList(); - - assert Arrays.asList( 2 ).equals( result ); + public void testMaximizeRevision(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + List result = AuditReaderFactory.get( em ).createQuery() + .forRevisionsOfEntity( StrIntTestEntity.class, false, true ) + .addProjection( AuditEntity.revisionNumber() ) + .add( + AuditEntity.revisionNumber().maximize() + .add( AuditEntity.property( "number" ).eq( 10 ) ) + ) + .getResultList(); + + assertEquals( Arrays.asList( 2 ), result ); + } ); } @Test @JiraKey(value = "HHH-7800") - public void testMaximizeInDisjunction() { - List idsToQuery = Arrays.asList( id1, id3 ); - - AuditDisjunction disjunction = AuditEntity.disjunction(); - - for ( Integer id : idsToQuery ) { - disjunction.add( AuditEntity.revisionNumber().maximize().add( AuditEntity.id().eq( id ) ) ); - } - List result = getAuditReader().createQuery() - .forRevisionsOfEntity( StrIntTestEntity.class, true, true ) - .add( disjunction ) - .getResultList(); - - Set idsSeen = new HashSet(); - for ( Object o : result ) { - StrIntTestEntity entity = (StrIntTestEntity) o; - Integer id = entity.getId(); - Assert.assertTrue( "Entity with ID " + id + " returned but not queried for.", idsToQuery.contains( id ) ); - if ( !idsSeen.add( id ) ) { - Assert.fail( "Multiple revisions returned with ID " + id + "; expected only one." ); + public void testMaximizeInDisjunction(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + List idsToQuery = Arrays.asList( id1, id3 ); + + AuditDisjunction disjunction = AuditEntity.disjunction(); + + for ( Integer id : idsToQuery ) { + disjunction.add( AuditEntity.revisionNumber().maximize().add( AuditEntity.id().eq( id ) ) ); + } + List result = AuditReaderFactory.get( em ).createQuery() + .forRevisionsOfEntity( StrIntTestEntity.class, true, true ) + .add( disjunction ) + .getResultList(); + + Set idsSeen = new HashSet(); + for ( Object o : result ) { + StrIntTestEntity entity = (StrIntTestEntity) o; + Integer id = entity.getId(); + assertTrue( idsToQuery.contains( id ), "Entity with ID " + id + " returned but not queried for." ); + if ( !idsSeen.add( id ) ) { + fail( "Multiple revisions returned with ID " + id + "; expected only one." ); + } } - } + } ); } @Test @JiraKey(value = "HHH-7827") - public void testAllLatestRevisionsOfEntityType() { - List result = getAuditReader().createQuery() - .forRevisionsOfEntity( StrIntTestEntity.class, false, true ) - .add( AuditEntity.revisionNumber().maximize().computeAggregationInInstanceContext() ) - .addOrder( AuditEntity.property( "id" ).asc() ) - .getResultList(); - - Assert.assertEquals( 4, result.size() ); - - Object[] result1 = (Object[]) result.get( 0 ); - Object[] result2 = (Object[]) result.get( 1 ); - Object[] result3 = (Object[]) result.get( 2 ); - Object[] result4 = (Object[]) result.get( 3 ); - - checkRevisionData( result1, 4, RevisionType.MOD, new StrIntTestEntity( "d", 5, id1 ) ); - checkRevisionData( result2, 4, RevisionType.MOD, new StrIntTestEntity( "a", 20, id2 ) ); - checkRevisionData( result3, 1, RevisionType.ADD, new StrIntTestEntity( "c", 42, id3 ) ); - checkRevisionData( result4, 5, RevisionType.DEL, new StrIntTestEntity( null, null, id4 ) ); + public void testAllLatestRevisionsOfEntityType(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + List result = AuditReaderFactory.get( em ).createQuery() + .forRevisionsOfEntity( StrIntTestEntity.class, false, true ) + .add( AuditEntity.revisionNumber().maximize().computeAggregationInInstanceContext() ) + .addOrder( AuditEntity.property( "id" ).asc() ) + .getResultList(); + + assertEquals( 4, result.size() ); + + Object[] result1 = (Object[]) result.get( 0 ); + Object[] result2 = (Object[]) result.get( 1 ); + Object[] result3 = (Object[]) result.get( 2 ); + Object[] result4 = (Object[]) result.get( 3 ); + + checkRevisionData( result1, 4, RevisionType.MOD, new StrIntTestEntity( "d", 5, id1 ) ); + checkRevisionData( result2, 4, RevisionType.MOD, new StrIntTestEntity( "a", 20, id2 ) ); + checkRevisionData( result3, 1, RevisionType.ADD, new StrIntTestEntity( "c", 42, id3 ) ); + checkRevisionData( result4, 5, RevisionType.DEL, new StrIntTestEntity( null, null, id4 ) ); + } ); } private void checkRevisionData(Object[] result, int revision, RevisionType type, StrIntTestEntity entity) { - Assert.assertEquals( entity, result[0] ); - Assert.assertEquals( revision, ((SequenceIdRevisionEntity) result[1]).getId() ); - Assert.assertEquals( type, result[2] ); + assertEquals( entity, result[0] ); + assertEquals( revision, ((SequenceIdRevisionEntity) result[1]).getId() ); + assertEquals( type, result[2] ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/NestedComponentQueryTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/NestedComponentQueryTest.java index 8fee186e1cb7..f5893e48aeb3 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/NestedComponentQueryTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/NestedComponentQueryTest.java @@ -4,31 +4,40 @@ */ package org.hibernate.orm.test.envers.integration.query; -import static org.junit.Assert.assertEquals; - import java.util.Collections; import java.util.List; import jakarta.persistence.Embeddable; import jakarta.persistence.Embedded; import jakarta.persistence.Entity; -import jakarta.persistence.EntityManager; import jakarta.persistence.GeneratedValue; import jakarta.persistence.Id; import jakarta.persistence.criteria.JoinType; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.Audited; import org.hibernate.envers.query.AuditEntity; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; + +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; +import org.hibernate.testing.orm.junit.Jpa; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Felix Feisst (feisst dot felix at gmail dot com) */ @JiraKey(value = "HHH-11895") -public class NestedComponentQueryTest extends BaseEnversJPAFunctionalTestCase { +@Jpa(annotatedClasses = { + NestedComponentQueryTest.EntityOwner.class, + NestedComponentQueryTest.Component1.class, + NestedComponentQueryTest.Component2.class +}) +@EnversTest +public class NestedComponentQueryTest { @Embeddable public static class Component1 { @@ -97,60 +106,57 @@ public void setComponent1(Component1 component1) { } } - @Override - protected Class[] getAnnotatedClasses() { - return new Class[]{ EntityOwner.class, Component1.class, Component2.class }; - } - private EntityOwner owner1; private EntityOwner owner2; - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - owner1 = new EntityOwner(); - Component1 component1 = new Component1(); - component1.setName1( "X" ); - owner1.setComponent1( component1 ); - Component2 component2 = new Component2(); - component2.setName2( "Y" ); - component1.setComponent2( component2 ); - em.persist( owner1 ); - owner2 = new EntityOwner(); - Component1 component12 = new Component1(); - component12.setName1( "Z" ); - owner2.setComponent1( component12 ); - Component2 component22 = new Component2(); - component22.setName2( "Z" ); - component12.setComponent2( component22 ); - em.persist( owner2 ); - em.getTransaction().commit(); + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + scope.inTransaction( em -> { + owner1 = new EntityOwner(); + Component1 component1 = new Component1(); + component1.setName1( "X" ); + owner1.setComponent1( component1 ); + Component2 component2 = new Component2(); + component2.setName2( "Y" ); + component1.setComponent2( component2 ); + em.persist( owner1 ); + owner2 = new EntityOwner(); + Component1 component12 = new Component1(); + component12.setName1( "Z" ); + owner2.setComponent1( component12 ); + Component2 component22 = new Component2(); + component22.setName2( "Z" ); + component12.setComponent2( component22 ); + em.persist( owner2 ); + } ); } @Test - public void testQueryNestedComponent() { - List actual = getAuditReader().createQuery() - .forEntitiesAtRevision( EntityOwner.class, 1 ) - .addProjection( AuditEntity.id() ) - .traverseRelation( "component1", JoinType.INNER, "c1" ) - .traverseRelation( "component2", JoinType.INNER, "c2" ) - .add( AuditEntity.property( "c2", "name2" ).eq( "Y" ) ) - .getResultList(); - assertEquals( "Expected owner1 to be returned", Collections.singletonList( owner1.getId() ), actual ); + public void testQueryNestedComponent(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + List actual = AuditReaderFactory.get( em ).createQuery() + .forEntitiesAtRevision( EntityOwner.class, 1 ) + .addProjection( AuditEntity.id() ) + .traverseRelation( "component1", JoinType.INNER, "c1" ) + .traverseRelation( "component2", JoinType.INNER, "c2" ) + .add( AuditEntity.property( "c2", "name2" ).eq( "Y" ) ) + .getResultList(); + assertEquals( Collections.singletonList( owner1.getId() ), actual, "Expected owner1 to be returned" ); + } ); } @Test - public void testQueryNestedComponentWithPropertyEquals() { - List actual = getAuditReader().createQuery() - .forEntitiesAtRevision( EntityOwner.class, 1 ) - .addProjection( AuditEntity.id() ) - .traverseRelation( "component1", JoinType.INNER, "c1" ) - .traverseRelation( "component2", JoinType.INNER, "c2" ) - .add( AuditEntity.property( "c1", "name1" ).eqProperty( "c2", "name2" ) ) - .getResultList(); - assertEquals( "Expected owner2 to be returned", Collections.singletonList( owner2.getId() ), actual ); + public void testQueryNestedComponentWithPropertyEquals(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + List actual = AuditReaderFactory.get( em ).createQuery() + .forEntitiesAtRevision( EntityOwner.class, 1 ) + .addProjection( AuditEntity.id() ) + .traverseRelation( "component1", JoinType.INNER, "c1" ) + .traverseRelation( "component2", JoinType.INNER, "c2" ) + .add( AuditEntity.property( "c1", "name1" ).eqProperty( "c2", "name2" ) ) + .getResultList(); + assertEquals( Collections.singletonList( owner2.getId() ), actual, "Expected owner2 to be returned" ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/NotAuditedQueryTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/NotAuditedQueryTest.java index 379b4d3020e9..fad87c424f1f 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/NotAuditedQueryTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/NotAuditedQueryTest.java @@ -6,110 +6,72 @@ import jakarta.persistence.Entity; import jakarta.persistence.Id; - +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.exception.NotAuditedException; -import org.hibernate.orm.test.envers.BaseEnversFunctionalTestCase; -import org.junit.Test; - +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; -import static org.hibernate.testing.junit4.ExtraAssertions.assertTyping; -import static org.junit.Assert.fail; +import static org.junit.jupiter.api.Assertions.assertThrows; /** * @author Chris Cranford */ -public class NotAuditedQueryTest extends BaseEnversFunctionalTestCase { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { NonAuditedEntity.class }; - } +@Jpa(annotatedClasses = {NotAuditedQueryTest.NonAuditedEntity.class}) +@EnversTest +public class NotAuditedQueryTest { @Test @JiraKey(value = "HHH-11558") - public void testRevisionsOfEntityNotAuditedMultipleResults() { - try { - getAuditReader().createQuery() - .forRevisionsOfEntity( NonAuditedEntity.class, false, false ) - .getResultList(); - fail( "Expected a NotAuditedException" ); - } - catch ( Exception e ) { - assertTyping( NotAuditedException.class, e ); - } + public void testRevisionsOfEntityNotAuditedMultipleResults(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> assertThrows( NotAuditedException.class, () -> AuditReaderFactory.get( em ).createQuery() + .forRevisionsOfEntity( NonAuditedEntity.class, false, false ) + .getResultList() ) ); } @Test @JiraKey(value = "HHH-11558") - public void testRevisionsOfEntityNotAuditedSingleResult() { - try { - getAuditReader().createQuery() - .forRevisionsOfEntity( NonAuditedEntity.class, false, false ) - .setMaxResults( 1 ) - .getSingleResult(); - fail( "Expected a NotAuditedException" ); - } - catch ( Exception e ) { - assertTyping( NotAuditedException.class, e ); - } + public void testRevisionsOfEntityNotAuditedSingleResult(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> assertThrows( NotAuditedException.class, () -> AuditReaderFactory.get( em ).createQuery() + .forRevisionsOfEntity( NonAuditedEntity.class, false, false ) + .setMaxResults( 1 ) + .getSingleResult() ) ); } @Test @JiraKey(value = "HHH-11558") - public void testForEntitiesAtRevisionNotAuditedMultipleResults() { - try { - getAuditReader().createQuery() - .forEntitiesAtRevision( NonAuditedEntity.class, 1 ) - .getResultList(); - fail( "Expected a NotAuditedException" ); - } - catch ( Exception e ) { - assertTyping( NotAuditedException.class, e ); - } + public void testForEntitiesAtRevisionNotAuditedMultipleResults(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> assertThrows( NotAuditedException.class, () -> AuditReaderFactory.get( em ).createQuery() + .forEntitiesAtRevision( NonAuditedEntity.class, 1 ) + .getResultList() ) ); } @Test @JiraKey(value = "HHH-11558") - public void testForEntitiesAtRevisionNotAuditedSingleResult() { - try { - getAuditReader().createQuery() - .forEntitiesAtRevision( NonAuditedEntity.class, 1 ) - .setMaxResults( 1 ) - .getSingleResult(); - fail( "Expected a NotAuditedException" ); - } - catch ( Exception e ) { - assertTyping( NotAuditedException.class, e ); - } + public void testForEntitiesAtRevisionNotAuditedSingleResult(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> assertThrows( NotAuditedException.class, () -> AuditReaderFactory.get( em ).createQuery() + .forEntitiesAtRevision( NonAuditedEntity.class, 1 ) + .setMaxResults( 1 ) + .getSingleResult() ) ); } @Test @JiraKey(value = "HHH-11558") - public void testForEntitiesModifiedAtRevisionNotAuditedMultipleResults() { - try { - getAuditReader().createQuery() - .forEntitiesModifiedAtRevision( NonAuditedEntity.class, 1 ) - .getResultList(); - fail( "Expected a NotAuditedException" ); - } - catch ( Exception e ) { - assertTyping( NotAuditedException.class, e ); - } + public void testForEntitiesModifiedAtRevisionNotAuditedMultipleResults(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> assertThrows( NotAuditedException.class, () -> AuditReaderFactory.get( em ).createQuery() + .forEntitiesModifiedAtRevision( NonAuditedEntity.class, 1 ) + .getResultList() ) ); } @Test @JiraKey(value = "HHH-11558") - public void testForEntitiesModifiedAtRevisionNotAuditedSingleResult() { - try { - getAuditReader().createQuery() - .forEntitiesModifiedAtRevision( NonAuditedEntity.class, 1 ) - .setMaxResults( 1 ) - .getSingleResult(); - fail( "Expected a NotAuditedException" ); - } - catch ( Exception e ) { - assertTyping( NotAuditedException.class, e ); - } + public void testForEntitiesModifiedAtRevisionNotAuditedSingleResult(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> assertThrows( NotAuditedException.class, () -> AuditReaderFactory.get( em ).createQuery() + .forEntitiesModifiedAtRevision( NonAuditedEntity.class, 1 ) + .setMaxResults( 1 ) + .getSingleResult() ) ); } @Entity(name = "NonAuditedEntity") diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/NullPrecedenceTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/NullPrecedenceTest.java index dfcfd8eb89e9..4b09702e770f 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/NullPrecedenceTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/NullPrecedenceTest.java @@ -8,69 +8,72 @@ import java.util.Arrays; import java.util.List; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.query.AuditEntity; import org.hibernate.envers.query.order.NullPrecedence; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; import org.hibernate.orm.test.envers.entities.StrIntTestEntity; -import org.junit.Assert; -import org.junit.Test; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; -import org.hibernate.testing.transaction.TransactionUtil; +import org.hibernate.testing.orm.junit.Jpa; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; /** * Tests for the {@link NullPrecedence} query option on order-bys. * * @author Chris Cranford */ -@JiraKey( value = "HHH-14981" ) -public class NullPrecedenceTest extends BaseEnversJPAFunctionalTestCase { +@JiraKey(value = "HHH-14981") +@Jpa(annotatedClasses = {StrIntTestEntity.class}) +@EnversTest +public class NullPrecedenceTest { Integer id1; Integer id2; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { StrIntTestEntity.class }; - } - - @Test - @Priority(10) - public void initData() { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Revision 1 - id1 = TransactionUtil.doInJPA(this::entityManagerFactory, entityManager -> { + id1 = scope.fromTransaction( em -> { StrIntTestEntity entity1 = new StrIntTestEntity( null, 1 ); - entityManager.persist( entity1 ); + em.persist( entity1 ); return entity1.getId(); } ); // Revision 2 - id2 = TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { + id2 = scope.fromTransaction( em -> { StrIntTestEntity entity2 = new StrIntTestEntity( "two", 2 ); - entityManager.persist( entity2 ); + em.persist( entity2 ); return entity2.getId(); } ); } @Test - public void testNullPrecedenceFirst() { - List results = getAuditReader().createQuery().forRevisionsOfEntity( StrIntTestEntity.class, true, false ) - .addProjection( AuditEntity.property( "number" ) ) - .addOrder( AuditEntity.property( "str1" ).asc().nulls( NullPrecedence.FIRST ) ) - .getResultList(); - List expected = new ArrayList<>(); - expected.addAll( Arrays.asList( 1, 2 ) ); - Assert.assertEquals( expected, results ); + public void testNullPrecedenceFirst(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + List results = AuditReaderFactory.get( em ).createQuery().forRevisionsOfEntity( StrIntTestEntity.class, true, false ) + .addProjection( AuditEntity.property( "number" ) ) + .addOrder( AuditEntity.property( "str1" ).asc().nulls( NullPrecedence.FIRST ) ) + .getResultList(); + List expected = new ArrayList<>(); + expected.addAll( Arrays.asList( 1, 2 ) ); + assertEquals( expected, results ); + } ); } @Test - public void testNullPrecedenceLast() { - List results = getAuditReader().createQuery().forRevisionsOfEntity( StrIntTestEntity.class, true, false ) - .addProjection( AuditEntity.property( "number" ) ) - .addOrder( AuditEntity.property( "str1" ).asc().nulls( NullPrecedence.LAST ) ) - .getResultList(); - List expected = new ArrayList<>(); - expected.addAll( Arrays.asList( 2, 1 ) ); - Assert.assertEquals( expected, results ); + public void testNullPrecedenceLast(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + List results = AuditReaderFactory.get( em ).createQuery().forRevisionsOfEntity( StrIntTestEntity.class, true, false ) + .addProjection( AuditEntity.property( "number" ) ) + .addOrder( AuditEntity.property( "str1" ).asc().nulls( NullPrecedence.LAST ) ) + .getResultList(); + List expected = new ArrayList<>(); + expected.addAll( Arrays.asList( 2, 1 ) ); + assertEquals( expected, results ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/NullPropertyQuery.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/NullPropertyQuery.java index 57c450852164..2187fea79fd3 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/NullPropertyQuery.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/NullPropertyQuery.java @@ -4,11 +4,8 @@ */ package org.hibernate.orm.test.envers.integration.query; -import jakarta.persistence.EntityManager; - +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.query.AuditEntity; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; import org.hibernate.orm.test.envers.entities.StrIntTestEntity; import org.hibernate.orm.test.envers.entities.ids.EmbId; import org.hibernate.orm.test.envers.entities.onetomany.CollectionRefEdEntity; @@ -16,103 +13,114 @@ import org.hibernate.orm.test.envers.entities.onetomany.ids.SetRefEdEmbIdEntity; import org.hibernate.orm.test.envers.entities.onetomany.ids.SetRefIngEmbIdEntity; -import org.junit.Test; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) */ -public class NullPropertyQuery extends BaseEnversJPAFunctionalTestCase { +@Jpa(annotatedClasses = { + StrIntTestEntity.class, + SetRefEdEmbIdEntity.class, + SetRefIngEmbIdEntity.class, + CollectionRefEdEntity.class, + CollectionRefIngEntity.class +}) +@EnversTest +public class NullPropertyQuery { private Integer idSimplePropertyNull = null; private Integer idSimplePropertyNotNull = null; private EmbId idMulticolumnReferenceToParentNull = new EmbId( 0, 1 ); private Integer idReferenceToParentNotNull = 1; private Integer idParent = 1; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { - StrIntTestEntity.class, - SetRefEdEmbIdEntity.class, - SetRefIngEmbIdEntity.class, - CollectionRefEdEntity.class, - CollectionRefIngEntity.class - }; - } - - @Test - @Priority(10) - public void initData() { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - StrIntTestEntity nullSite = new StrIntTestEntity( null, 1 ); - StrIntTestEntity notNullSite = new StrIntTestEntity( "data", 2 ); - em.persist( nullSite ); - em.persist( notNullSite ); - idSimplePropertyNull = nullSite.getId(); - idSimplePropertyNotNull = notNullSite.getId(); - em.getTransaction().commit(); - - // Revision 2 - em.getTransaction().begin(); - SetRefIngEmbIdEntity nullParentSrieie = new SetRefIngEmbIdEntity( - idMulticolumnReferenceToParentNull, - "data", - null - ); - em.persist( nullParentSrieie ); - em.getTransaction().commit(); - - // Revision 3 - em.getTransaction().begin(); - CollectionRefEdEntity parent = new CollectionRefEdEntity( idParent, "data" ); - CollectionRefIngEntity notNullParentCrie = new CollectionRefIngEntity( - idReferenceToParentNotNull, - "data", - parent - ); - em.persist( parent ); - em.persist( notNullParentCrie ); - em.getTransaction().commit(); + scope.inEntityManager( em -> { + em.getTransaction().begin(); + StrIntTestEntity nullSite = new StrIntTestEntity( null, 1 ); + StrIntTestEntity notNullSite = new StrIntTestEntity( "data", 2 ); + em.persist( nullSite ); + em.persist( notNullSite ); + idSimplePropertyNull = nullSite.getId(); + idSimplePropertyNotNull = notNullSite.getId(); + em.getTransaction().commit(); + + // Revision 2 + em.getTransaction().begin(); + SetRefIngEmbIdEntity nullParentSrieie = new SetRefIngEmbIdEntity( + idMulticolumnReferenceToParentNull, + "data", + null + ); + em.persist( nullParentSrieie ); + em.getTransaction().commit(); + + // Revision 3 + em.getTransaction().begin(); + CollectionRefEdEntity parent = new CollectionRefEdEntity( idParent, "data" ); + CollectionRefIngEntity notNullParentCrie = new CollectionRefIngEntity( + idReferenceToParentNotNull, + "data", + parent + ); + em.persist( parent ); + em.persist( notNullParentCrie ); + em.getTransaction().commit(); + } ); } @Test - public void testSimplePropertyIsNullQuery() { - StrIntTestEntity ver = (StrIntTestEntity) getAuditReader().createQuery() - .forEntitiesAtRevision( StrIntTestEntity.class, 1 ) - .add( AuditEntity.property( "str1" ).isNull() ) - .getSingleResult(); - - assert ver.equals( new StrIntTestEntity( null, 1, idSimplePropertyNull ) ); + public void testSimplePropertyIsNullQuery(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + StrIntTestEntity ver = (StrIntTestEntity) AuditReaderFactory.get( em ).createQuery() + .forEntitiesAtRevision( StrIntTestEntity.class, 1 ) + .add( AuditEntity.property( "str1" ).isNull() ) + .getSingleResult(); + + assertEquals( new StrIntTestEntity( null, 1, idSimplePropertyNull ), ver ); + } ); } @Test - public void testSimplePropertyIsNotNullQuery() { - StrIntTestEntity ver = (StrIntTestEntity) getAuditReader().createQuery() - .forEntitiesAtRevision( StrIntTestEntity.class, 1 ) - .add( AuditEntity.property( "str1" ).isNotNull() ) - .getSingleResult(); - - assert ver.equals( new StrIntTestEntity( "data", 2, idSimplePropertyNotNull ) ); + public void testSimplePropertyIsNotNullQuery(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + StrIntTestEntity ver = (StrIntTestEntity) AuditReaderFactory.get( em ).createQuery() + .forEntitiesAtRevision( StrIntTestEntity.class, 1 ) + .add( AuditEntity.property( "str1" ).isNotNull() ) + .getSingleResult(); + + assertEquals( new StrIntTestEntity( "data", 2, idSimplePropertyNotNull ), ver ); + } ); } @Test - public void testReferenceMulticolumnPropertyIsNullQuery() { - SetRefIngEmbIdEntity ver = (SetRefIngEmbIdEntity) getAuditReader().createQuery() - .forEntitiesAtRevision( SetRefIngEmbIdEntity.class, 2 ) - .add( AuditEntity.property( "reference" ).isNull() ) - .getSingleResult(); - - assert ver.getId().equals( idMulticolumnReferenceToParentNull ); + public void testReferenceMulticolumnPropertyIsNullQuery(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + SetRefIngEmbIdEntity ver = (SetRefIngEmbIdEntity) AuditReaderFactory.get( em ).createQuery() + .forEntitiesAtRevision( SetRefIngEmbIdEntity.class, 2 ) + .add( AuditEntity.property( "reference" ).isNull() ) + .getSingleResult(); + + assertEquals( idMulticolumnReferenceToParentNull, ver.getId() ); + } ); } @Test - public void testReferencePropertyIsNotNullQuery() { - CollectionRefIngEntity ver = (CollectionRefIngEntity) getAuditReader().createQuery() - .forEntitiesAtRevision( CollectionRefIngEntity.class, 3 ) - .add( AuditEntity.property( "reference" ).isNotNull() ) - .getSingleResult(); - - assert ver.getId().equals( idReferenceToParentNotNull ); + public void testReferencePropertyIsNotNullQuery(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + CollectionRefIngEntity ver = (CollectionRefIngEntity) AuditReaderFactory.get( em ).createQuery() + .forEntitiesAtRevision( CollectionRefIngEntity.class, 3 ) + .add( AuditEntity.property( "reference" ).isNotNull() ) + .getSingleResult(); + + assertEquals( idReferenceToParentNotNull, ver.getId() ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/OrderByLimitQuery.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/OrderByLimitQuery.java new file mode 100644 index 000000000000..2b47910513d2 --- /dev/null +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/OrderByLimitQuery.java @@ -0,0 +1,128 @@ +/* + * SPDX-License-Identifier: Apache-2.0 + * Copyright Red Hat Inc. and Hibernate Authors + */ +package org.hibernate.orm.test.envers.integration.query; + +import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.envers.query.AuditEntity; +import org.hibernate.orm.test.envers.entities.IntTestEntity; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; + +import java.util.List; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +/** + * @author Adam Warski (adam at warski dot org) + */ +@EnversTest +@Jpa(annotatedClasses = {IntTestEntity.class}) +public class OrderByLimitQuery { + private Integer id1; + private Integer id2; + private Integer id3; + private Integer id4; + private Integer id5; + + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + scope.inTransaction( em -> { + // Revision 1 + IntTestEntity ite1 = new IntTestEntity( 12 ); + IntTestEntity ite2 = new IntTestEntity( 5 ); + IntTestEntity ite3 = new IntTestEntity( 8 ); + IntTestEntity ite4 = new IntTestEntity( 1 ); + + em.persist( ite1 ); + em.persist( ite2 ); + em.persist( ite3 ); + em.persist( ite4 ); + + id1 = ite1.getId(); + id2 = ite2.getId(); + id3 = ite3.getId(); + id4 = ite4.getId(); + } ); + + scope.inTransaction( em -> { + // Revision 2 + IntTestEntity ite5 = new IntTestEntity( 3 ); + em.persist( ite5 ); + id5 = ite5.getId(); + + final var ite1 = em.find( IntTestEntity.class, id1 ); + ite1.setNumber( 0 ); + + final var ite4 = em.find( IntTestEntity.class, id4 ); + ite4.setNumber( 15 ); + } ); + } + + @Test + public void testEntitiesOrderLimitByQueryRev1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + final var res_0_to_1 = auditReader.createQuery() + .forEntitiesAtRevision( IntTestEntity.class, 1 ) + .addOrder( AuditEntity.property( "number" ).desc() ) + .setFirstResult( 0 ) + .setMaxResults( 2 ) + .getResultList(); + + final var res_2_to_3 = auditReader.createQuery() + .forEntitiesAtRevision( IntTestEntity.class, 1 ) + .addOrder( AuditEntity.property( "number" ).desc() ) + .setFirstResult( 2 ) + .setMaxResults( 2 ) + .getResultList(); + + final var res_empty = auditReader.createQuery() + .forEntitiesAtRevision( IntTestEntity.class, 1 ) + .addOrder( AuditEntity.property( "number" ).desc() ) + .setFirstResult( 4 ) + .setMaxResults( 2 ) + .getResultList(); + + assertEquals( List.of( new IntTestEntity( 12, id1 ), new IntTestEntity( 8, id3 ) ), res_0_to_1 ); + assertEquals( List.of( new IntTestEntity( 5, id2 ), new IntTestEntity( 1, id4 ) ), res_2_to_3 ); + assertEquals( 0, res_empty.size() ); + } ); + } + + @Test + public void testEntitiesOrderLimitByQueryRev2(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + final var res_0_to_1 = auditReader.createQuery() + .forEntitiesAtRevision( IntTestEntity.class, 2 ) + .addOrder( AuditEntity.property( "number" ).desc() ) + .setFirstResult( 0 ) + .setMaxResults( 2 ) + .getResultList(); + + final var res_2_to_3 = auditReader.createQuery() + .forEntitiesAtRevision( IntTestEntity.class, 2 ) + .addOrder( AuditEntity.property( "number" ).desc() ) + .setFirstResult( 2 ) + .setMaxResults( 2 ) + .getResultList(); + + final var res_4 = auditReader.createQuery() + .forEntitiesAtRevision( IntTestEntity.class, 2 ) + .addOrder( AuditEntity.property( "number" ).desc() ) + .setFirstResult( 4 ) + .setMaxResults( 2 ) + .getResultList(); + + assertEquals( List.of( new IntTestEntity( 15, id4 ), new IntTestEntity( 8, id3 ) ), res_0_to_1 ); + assertEquals( List.of( new IntTestEntity( 5, id2 ), new IntTestEntity( 3, id5 ) ), res_2_to_3 ); + assertEquals( List.of( new IntTestEntity( 0, id1 ) ), res_4 ); + } ); + + } +} diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/query/OrderByOneAuditEntityTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/OrderByOneAuditEntityTest.java similarity index 54% rename from hibernate-envers/src/test/java/org/hibernate/envers/test/integration/query/OrderByOneAuditEntityTest.java rename to hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/OrderByOneAuditEntityTest.java index d252b89fb0de..2566d84ff2c8 100644 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/query/OrderByOneAuditEntityTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/OrderByOneAuditEntityTest.java @@ -2,7 +2,7 @@ * SPDX-License-Identifier: Apache-2.0 * Copyright Red Hat Inc. and Hibernate Authors */ -package org.hibernate.envers.test.integration.query; +package org.hibernate.orm.test.envers.integration.query; import java.util.ArrayList; import java.util.Arrays; @@ -21,17 +21,20 @@ import org.hibernate.annotations.BatchSize; import org.hibernate.annotations.Fetch; import org.hibernate.annotations.FetchMode; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.AuditMappedBy; import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.junit.Test; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; +import org.hibernate.testing.orm.junit.Jpa; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.junit.jupiter.api.Test; -import static org.hibernate.testing.transaction.TransactionUtil.doInJPA; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertTrue; /** * Test the use of the {@link OrderBy} annotation on a one-to-many collection where @@ -43,7 +46,12 @@ * @author Chris Cranford */ @JiraKey(value = "HHH-12992") -public class OrderByOneAuditEntityTest extends BaseEnversJPAFunctionalTestCase { +@Jpa(annotatedClasses = { + OrderByOneAuditEntityTest.Parent.class, + OrderByOneAuditEntityTest.Child.class +}) +@EnversTest +public class OrderByOneAuditEntityTest { @Entity(name = "Parent") @Audited public static class Parent { @@ -155,17 +163,12 @@ public String toString() { } } - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { Parent.class, Child.class }; - } - private Integer parentId; - @Test - public void initData() { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Rev 1 - this.parentId = doInJPA( this::entityManagerFactory, entityManager -> { + this.parentId = scope.fromTransaction( em -> { final Parent parent = new Parent(); final Child child1 = new Child(); @@ -182,14 +185,14 @@ public void initData() { child2.setParent( parent ); parent.getChildren().add( child2 ); - entityManager.persist( parent ); + em.persist( parent ); return parent.getId(); } ); // Rev 2 - doInJPA( this::entityManagerFactory, entityManager -> { - final Parent parent = entityManager.find( Parent.class, parentId ); + scope.inTransaction( em -> { + final Parent parent = em.find( Parent.class, parentId ); final Child child = new Child(); child.setId( 3 ); @@ -198,63 +201,73 @@ public void initData() { child.setParent( parent ); parent.getChildren().add( child ); - entityManager.merge( parent ); + em.merge( parent ); } ); // Rev 3 - doInJPA( this::entityManagerFactory, entityManager -> { - final Parent parent = entityManager.find( Parent.class, parentId ); + scope.inTransaction( em -> { + final Parent parent = em.find( Parent.class, parentId ); parent.getChildren().removeIf( c -> c.getIndex1() == 2 ); - entityManager.merge( parent ); + em.merge( parent ); } ); // Rev 4 - doInJPA( this::entityManagerFactory, entityManager -> { - final Parent parent = entityManager.find( Parent.class, parentId ); + scope.inTransaction( em -> { + final Parent parent = em.find( Parent.class, parentId ); parent.getChildren().clear(); - entityManager.merge( parent ); + em.merge( parent ); } ); } @Test - public void testRevisionCounts() { - assertEquals( Arrays.asList( 1, 2, 3, 4 ), getAuditReader().getRevisions( Parent.class, this.parentId ) ); - assertEquals( Arrays.asList( 1, 4 ), getAuditReader().getRevisions( Child.class, 1 ) ); - assertEquals( Arrays.asList( 1, 3 ), getAuditReader().getRevisions( Child.class, 2 ) ); - assertEquals( Arrays.asList( 2, 4 ), getAuditReader().getRevisions( Child.class, 3 ) ); + public void testRevisionCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + assertEquals( Arrays.asList( 1, 2, 3, 4 ), AuditReaderFactory.get( em ).getRevisions( Parent.class, this.parentId ) ); + assertEquals( Arrays.asList( 1, 4 ), AuditReaderFactory.get( em ).getRevisions( Child.class, 1 ) ); + assertEquals( Arrays.asList( 1, 3 ), AuditReaderFactory.get( em ).getRevisions( Child.class, 2 ) ); + assertEquals( Arrays.asList( 2, 4 ), AuditReaderFactory.get( em ).getRevisions( Child.class, 3 ) ); + } ); } @Test - public void testRevision1History() { - final Parent parent = getAuditReader().find( Parent.class, this.parentId, 1 ); - assertNotNull( parent ); - assertTrue( !parent.getChildren().isEmpty() ); - assertEquals( 2, parent.getChildren().size() ); - assertEquals( Arrays.asList( new Child( 1, 1 ), new Child( 2, 2 ) ), parent.getChildren() ); + public void testRevision1History(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final Parent parent = AuditReaderFactory.get( em ).find( Parent.class, this.parentId, 1 ); + assertNotNull( parent ); + assertTrue( !parent.getChildren().isEmpty() ); + assertEquals( 2, parent.getChildren().size() ); + assertEquals( Arrays.asList( new Child( 1, 1 ), new Child( 2, 2 ) ), parent.getChildren() ); + } ); } @Test - public void testRevision2History() { - final Parent parent = getAuditReader().find( Parent.class, this.parentId, 2 ); - assertNotNull( parent ); - assertTrue( !parent.getChildren().isEmpty() ); - assertEquals( 3, parent.getChildren().size() ); - assertEquals( Arrays.asList( new Child( 1, 1 ), new Child( 2, 2 ), new Child( 3, 3 ) ), parent.getChildren() ); + public void testRevision2History(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final Parent parent = AuditReaderFactory.get( em ).find( Parent.class, this.parentId, 2 ); + assertNotNull( parent ); + assertTrue( !parent.getChildren().isEmpty() ); + assertEquals( 3, parent.getChildren().size() ); + assertEquals( Arrays.asList( new Child( 1, 1 ), new Child( 2, 2 ), new Child( 3, 3 ) ), parent.getChildren() ); + } ); } @Test - public void testRevision3History() { - final Parent parent = getAuditReader().find( Parent.class, this.parentId, 3 ); - assertNotNull( parent ); - assertTrue( !parent.getChildren().isEmpty() ); - assertEquals( 2, parent.getChildren().size() ); - assertEquals( Arrays.asList( new Child( 1, 1 ), new Child( 3, 3 ) ), parent.getChildren() ); + public void testRevision3History(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final Parent parent = AuditReaderFactory.get( em ).find( Parent.class, this.parentId, 3 ); + assertNotNull( parent ); + assertTrue( !parent.getChildren().isEmpty() ); + assertEquals( 2, parent.getChildren().size() ); + assertEquals( Arrays.asList( new Child( 1, 1 ), new Child( 3, 3 ) ), parent.getChildren() ); + } ); } @Test - public void testRevision4History() { - final Parent parent = getAuditReader().find( Parent.class, this.parentId, 4 ); - assertNotNull( parent ); - assertTrue( parent.getChildren().isEmpty() ); + public void testRevision4History(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final Parent parent = AuditReaderFactory.get( em ).find( Parent.class, this.parentId, 4 ); + assertNotNull( parent ); + assertTrue( parent.getChildren().isEmpty() ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/query/OrderByThreeEntityTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/OrderByThreeEntityTest.java similarity index 53% rename from hibernate-envers/src/test/java/org/hibernate/envers/test/integration/query/OrderByThreeEntityTest.java rename to hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/OrderByThreeEntityTest.java index f66b1f150e4b..9b447a29bbc6 100644 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/query/OrderByThreeEntityTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/OrderByThreeEntityTest.java @@ -2,13 +2,7 @@ * SPDX-License-Identifier: Apache-2.0 * Copyright Red Hat Inc. and Hibernate Authors */ -package org.hibernate.envers.test.integration.query; - -import java.util.Arrays; -import java.util.HashMap; -import java.util.Iterator; -import java.util.Map; -import java.util.Objects; +package org.hibernate.orm.test.envers.integration.query; import jakarta.persistence.Column; import jakarta.persistence.ElementCollection; @@ -16,32 +10,45 @@ import jakarta.persistence.GeneratedValue; import jakarta.persistence.Id; import jakarta.persistence.OrderBy; - +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.junit.Test; - +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; +import org.hibernate.testing.orm.junit.Jpa; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.junit.jupiter.api.Test; -import static org.hibernate.testing.transaction.TransactionUtil.doInJPA; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; +import java.util.Arrays; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; +import java.util.Objects; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNotNull; /** * Test the use of the {@link OrderBy} annotation on a map-based element-collection * that uses entities for the key and value. - * + *

    * This mapping and association invokes the use of the ThreeEntityQueryGenerator which * we want to verify orders the collection results properly. - * + *

    * It's worth noting that a mapping like this orders the collection based on the value * and not the key. * * @author Chris Cranford */ +@Jpa(annotatedClasses = { + OrderByThreeEntityTest.Container.class, + OrderByThreeEntityTest.Key.class, + OrderByThreeEntityTest.Item.class +}) +@EnversTest @JiraKey(value = "HHH-12992") -public class OrderByThreeEntityTest extends BaseEnversJPAFunctionalTestCase { +public class OrderByThreeEntityTest { @Entity(name = "Container") @Audited public static class Container { @@ -112,7 +119,7 @@ public boolean equals(Object o) { } Key key = (Key) o; return Objects.equals( id, key.id ) && - Objects.equals( value, key.value ); + Objects.equals( value, key.value ); } @Override @@ -123,9 +130,9 @@ public int hashCode() { @Override public String toString() { return "Key{" + - "id=" + id + - ", value='" + value + '\'' + - '}'; + "id=" + id + + ", value='" + value + '\'' + + '}'; } } @@ -172,7 +179,7 @@ public boolean equals(Object o) { } Item item = (Item) o; return Objects.equals( id, item.id ) && - Objects.equals( value, item.value ); + Objects.equals( value, item.value ); } @Override @@ -183,23 +190,18 @@ public int hashCode() { @Override public String toString() { return "Item{" + - "id=" + id + - ", value='" + value + '\'' + - '}'; + "id=" + id + + ", value='" + value + '\'' + + '}'; } } - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { Container.class, Key.class, Item.class }; - } - private Integer containerId; - @Test - public void initData() { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Rev 1 - this.containerId = doInJPA( this::entityManagerFactory, entityManager -> { + this.containerId = scope.fromTransaction( entityManager -> { final Container container = new Container(); final Key key1 = new Key( 1, "A" ); @@ -221,7 +223,7 @@ public void initData() { } ); // Rev 2 - doInJPA( this::entityManagerFactory, entityManager -> { + scope.inTransaction( entityManager -> { final Container container = entityManager.find( Container.class, containerId ); final Key key = new Key( 3, "C" ); @@ -235,7 +237,7 @@ public void initData() { } ); // Rev 3 - doInJPA( this::entityManagerFactory, entityManager -> { + scope.inTransaction( entityManager -> { final Container container = entityManager.find( Container.class, containerId ); container.getData().keySet().forEach( key -> { @@ -251,7 +253,7 @@ public void initData() { } ); // Rev 4 - doInJPA( this::entityManagerFactory, entityManager -> { + scope.inTransaction( entityManager -> { final Container container = entityManager.find( Container.class, containerId ); container.getData().entrySet().forEach( entry -> { @@ -265,80 +267,39 @@ public void initData() { } @Test - public void testRevisionCounts() { - assertEquals( Arrays.asList( 1, 2, 3, 4 ), getAuditReader().getRevisions( Container.class, this.containerId ) ); - - assertEquals( Arrays.asList( 1, 4 ), getAuditReader().getRevisions( Key.class, 1 ) ); - assertEquals( Arrays.asList( 1, 3 ), getAuditReader().getRevisions( Key.class, 2 ) ); - assertEquals( Arrays.asList( 2, 4 ), getAuditReader().getRevisions( Key.class, 3 ) ); - - assertEquals( Arrays.asList( 1, 3 ), getAuditReader().getRevisions( Item.class, 1 ) ); - assertEquals( Arrays.asList( 1, 4 ), getAuditReader().getRevisions( Item.class, 2 ) ); - assertEquals( Arrays.asList( 2, 4 ), getAuditReader().getRevisions( Item.class, 3 ) ); - } - - @Test - public void testRevision1History() { - final Container container = getAuditReader().find( Container.class, this.containerId, 1 ); - assertNotNull( container ); - assertTrue( !container.getData().isEmpty() ); - assertEquals( 2, container.getData().size() ); - - final Iterator> iterator = container.getData().entrySet().iterator(); - - final Map.Entry first = iterator.next(); - assertEquals( new Key( 1, "A" ), first.getKey() ); - assertEquals( new Item( 2, "I2" ), first.getValue() ); - - final Map.Entry second = iterator.next(); - assertEquals( new Key( 2, "B" ), second.getKey() ); - assertEquals( new Item( 1, "I1" ), second.getValue() ); - } - - @Test - public void testRevision2History() { - final Container container = getAuditReader().find( Container.class, this.containerId, 2 ); - assertNotNull( container ); - assertTrue( !container.getData().isEmpty() ); - assertEquals( 3, container.getData().size() ); - - final Iterator> iterator = container.getData().entrySet().iterator(); - - final Map.Entry first = iterator.next(); - assertEquals( new Key( 3, "C" ), first.getKey() ); - assertEquals( new Item( 3, "I3" ), first.getValue() ); - - final Map.Entry second = iterator.next(); - assertEquals( new Key( 1, "A" ), second.getKey() ); - assertEquals( new Item( 2, "I2" ), second.getValue() ); - - final Map.Entry third = iterator.next(); - assertEquals( new Key( 2, "B" ), third.getKey() ); - assertEquals( new Item( 1, "I1" ), third.getValue() ); + public void testRevisionCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + assertEquals( Arrays.asList( 1, 2, 3, 4 ), + AuditReaderFactory.get( em ).getRevisions( Container.class, this.containerId ) ); + + assertEquals( Arrays.asList( 1, 4 ), AuditReaderFactory.get( em ).getRevisions( Key.class, 1 ) ); + assertEquals( Arrays.asList( 1, 3 ), AuditReaderFactory.get( em ).getRevisions( Key.class, 2 ) ); + assertEquals( Arrays.asList( 2, 4 ), AuditReaderFactory.get( em ).getRevisions( Key.class, 3 ) ); + + assertEquals( Arrays.asList( 1, 3 ), AuditReaderFactory.get( em ).getRevisions( Item.class, 1 ) ); + assertEquals( Arrays.asList( 1, 4 ), AuditReaderFactory.get( em ).getRevisions( Item.class, 2 ) ); + assertEquals( Arrays.asList( 2, 4 ), AuditReaderFactory.get( em ).getRevisions( Item.class, 3 ) ); + } ); } @Test - public void testRevision3History() { - final Container container = getAuditReader().find( Container.class, this.containerId, 3 ); - assertNotNull( container ); - assertTrue( !container.getData().isEmpty() ); - assertEquals( 2, container.getData().size() ); + public void testRevision1History(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final Container container = AuditReaderFactory.get( em ).find( Container.class, this.containerId, 1 ); - final Iterator> iterator = container.getData().entrySet().iterator(); + assertNotNull( container ); + assertFalse( container.getData().isEmpty() ); + assertEquals( 2, container.getData().size() ); - final Map.Entry first = iterator.next(); - assertEquals( new Key( 3, "C" ), first.getKey() ); - assertEquals( new Item( 3, "I3" ), first.getValue() ); + final Iterator> iterator = container.getData().entrySet().iterator(); - final Map.Entry second = iterator.next(); - assertEquals( new Key( 1, "A" ), second.getKey() ); - assertEquals( new Item( 2, "I2" ), second.getValue() ); - } + final Map.Entry first = iterator.next(); + assertEquals( new Key( 1, "A" ), first.getKey() ); + assertEquals( new Item( 2, "I2" ), first.getValue() ); - @Test - public void testRevision4History() { - final Container container = getAuditReader().find( Container.class, this.containerId, 4 ); - assertNotNull( container ); - assertTrue( container.getData().isEmpty() ); + final Map.Entry second = iterator.next(); + assertEquals( new Key( 2, "B" ), second.getKey() ); + assertEquals( new Item( 1, "I1" ), second.getValue() ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/query/OrderByTwoEntityOneAuditedTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/OrderByTwoEntityOneAuditedTest.java similarity index 55% rename from hibernate-envers/src/test/java/org/hibernate/envers/test/integration/query/OrderByTwoEntityOneAuditedTest.java rename to hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/OrderByTwoEntityOneAuditedTest.java index 7d51337c9290..8c21858425e1 100644 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/query/OrderByTwoEntityOneAuditedTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/OrderByTwoEntityOneAuditedTest.java @@ -2,7 +2,7 @@ * SPDX-License-Identifier: Apache-2.0 * Copyright Red Hat Inc. and Hibernate Authors */ -package org.hibernate.envers.test.integration.query; +package org.hibernate.orm.test.envers.integration.query; import java.util.ArrayList; import java.util.Arrays; @@ -20,17 +20,20 @@ import org.hibernate.annotations.BatchSize; import org.hibernate.annotations.Fetch; import org.hibernate.annotations.FetchMode; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.Audited; import org.hibernate.envers.RelationTargetAuditMode; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.junit.Test; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; +import org.hibernate.testing.orm.junit.Jpa; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.junit.jupiter.api.Test; -import static org.hibernate.testing.transaction.TransactionUtil.doInJPA; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertTrue; /** * Test the use of the {@link OrderBy} annotation on a many-to-many collection @@ -43,7 +46,12 @@ * @author Chris Cranford */ @JiraKey(value = "HHH-12992") -public class OrderByTwoEntityOneAuditedTest extends BaseEnversJPAFunctionalTestCase { +@Jpa(annotatedClasses = { + OrderByTwoEntityOneAuditedTest.Parent.class, + OrderByTwoEntityOneAuditedTest.Child.class +}) +@EnversTest +public class OrderByTwoEntityOneAuditedTest { @Entity(name = "Parent") @Audited public static class Parent { @@ -155,17 +163,12 @@ public String toString() { } } - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { Parent.class, Child.class }; - } - private Integer parentId; - @Test - public void initData() { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Rev 1 - this.parentId = doInJPA( this::entityManagerFactory, entityManager -> { + this.parentId = scope.fromTransaction( em -> { final Parent parent = new Parent(); final Child child1 = new Child(); @@ -182,14 +185,14 @@ public void initData() { child2.getParents().add( parent ); parent.getChildren().add( child2 ); - entityManager.persist( parent ); + em.persist( parent ); return parent.getId(); } ); // Rev 2 - doInJPA( this::entityManagerFactory, entityManager -> { - final Parent parent = entityManager.find( Parent.class, parentId ); + scope.inTransaction( em -> { + final Parent parent = em.find( Parent.class, parentId ); final Child child = new Child(); child.setId( 3 ); @@ -198,12 +201,12 @@ public void initData() { child.getParents().add( parent ); parent.getChildren().add( child ); - entityManager.merge( parent ); + em.merge( parent ); } ); // Rev 3 - doInJPA( this::entityManagerFactory, entityManager -> { - final Parent parent = entityManager.find( Parent.class, parentId ); + scope.inTransaction( em -> { + final Parent parent = em.find( Parent.class, parentId ); parent.getChildren().removeIf( c -> { if ( c.getIndex1() == 2 ) { c.getParents().remove( parent ); @@ -211,57 +214,67 @@ public void initData() { } return false; } ); - entityManager.merge( parent ); + em.merge( parent ); } ); // Rev 4 - doInJPA( this::entityManagerFactory, entityManager -> { - final Parent parent = entityManager.find( Parent.class, parentId ); + scope.inTransaction( em -> { + final Parent parent = em.find( Parent.class, parentId ); parent.getChildren().forEach( c -> c.getParents().clear() ); parent.getChildren().clear(); - entityManager.merge( parent ); + em.merge( parent ); } ); } @Test - public void testRevisionCounts() { - assertEquals( Arrays.asList( 1, 2, 3, 4 ), getAuditReader().getRevisions( Parent.class, this.parentId ) ); - assertEquals( Arrays.asList( 1, 4 ), getAuditReader().getRevisions( Child.class, 1 ) ); - assertEquals( Arrays.asList( 1, 3 ), getAuditReader().getRevisions( Child.class, 2 ) ); - assertEquals( Arrays.asList( 2, 4 ), getAuditReader().getRevisions( Child.class, 3 ) ); + public void testRevisionCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + assertEquals( Arrays.asList( 1, 2, 3, 4 ), AuditReaderFactory.get( em ).getRevisions( Parent.class, this.parentId ) ); + assertEquals( Arrays.asList( 1, 4 ), AuditReaderFactory.get( em ).getRevisions( Child.class, 1 ) ); + assertEquals( Arrays.asList( 1, 3 ), AuditReaderFactory.get( em ).getRevisions( Child.class, 2 ) ); + assertEquals( Arrays.asList( 2, 4 ), AuditReaderFactory.get( em ).getRevisions( Child.class, 3 ) ); + } ); } @Test - public void testRevision1History() { - final Parent parent = getAuditReader().find( Parent.class, this.parentId, 1 ); - assertNotNull( parent ); - assertTrue( !parent.getChildren().isEmpty() ); - assertEquals( 2, parent.getChildren().size() ); - assertEquals( Arrays.asList( new Child( 1, 1 ), new Child( 2, 2 ) ), parent.getChildren() ); + public void testRevision1History(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final Parent parent = AuditReaderFactory.get( em ).find( Parent.class, this.parentId, 1 ); + assertNotNull( parent ); + assertTrue( !parent.getChildren().isEmpty() ); + assertEquals( 2, parent.getChildren().size() ); + assertEquals( Arrays.asList( new Child( 1, 1 ), new Child( 2, 2 ) ), parent.getChildren() ); + } ); } @Test - public void testRevision2History() { - final Parent parent = getAuditReader().find( Parent.class, this.parentId, 2 ); - assertNotNull( parent ); - assertTrue( !parent.getChildren().isEmpty() ); - assertEquals( 3, parent.getChildren().size() ); - assertEquals( Arrays.asList( new Child( 1, 1 ), new Child( 2, 2 ), new Child( 3, 3 ) ), parent.getChildren() ); + public void testRevision2History(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final Parent parent = AuditReaderFactory.get( em ).find( Parent.class, this.parentId, 2 ); + assertNotNull( parent ); + assertTrue( !parent.getChildren().isEmpty() ); + assertEquals( 3, parent.getChildren().size() ); + assertEquals( Arrays.asList( new Child( 1, 1 ), new Child( 2, 2 ), new Child( 3, 3 ) ), parent.getChildren() ); + } ); } @Test - public void testRevision3History() { - final Parent parent = getAuditReader().find( Parent.class, this.parentId, 3 ); - assertNotNull( parent ); - assertTrue( !parent.getChildren().isEmpty() ); - assertEquals( 2, parent.getChildren().size() ); - assertEquals( Arrays.asList( new Child( 1, 1 ), new Child( 3, 3 ) ), parent.getChildren() ); + public void testRevision3History(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final Parent parent = AuditReaderFactory.get( em ).find( Parent.class, this.parentId, 3 ); + assertNotNull( parent ); + assertTrue( !parent.getChildren().isEmpty() ); + assertEquals( 2, parent.getChildren().size() ); + assertEquals( Arrays.asList( new Child( 1, 1 ), new Child( 3, 3 ) ), parent.getChildren() ); + } ); } @Test - public void testRevision4History() { - final Parent parent = getAuditReader().find( Parent.class, this.parentId, 4 ); - assertNotNull( parent ); - assertTrue( parent.getChildren().isEmpty() ); + public void testRevision4History(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final Parent parent = AuditReaderFactory.get( em ).find( Parent.class, this.parentId, 4 ); + assertNotNull( parent ); + assertTrue( parent.getChildren().isEmpty() ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/query/OrderByTwoEntityTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/OrderByTwoEntityTest.java similarity index 55% rename from hibernate-envers/src/test/java/org/hibernate/envers/test/integration/query/OrderByTwoEntityTest.java rename to hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/OrderByTwoEntityTest.java index 219e797ab209..c2637fc058dc 100644 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/query/OrderByTwoEntityTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/OrderByTwoEntityTest.java @@ -2,7 +2,7 @@ * SPDX-License-Identifier: Apache-2.0 * Copyright Red Hat Inc. and Hibernate Authors */ -package org.hibernate.envers.test.integration.query; +package org.hibernate.orm.test.envers.integration.query; import java.util.ArrayList; import java.util.Arrays; @@ -21,16 +21,19 @@ import org.hibernate.annotations.Fetch; import org.hibernate.annotations.FetchMode; import org.hibernate.envers.AuditMappedBy; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.junit.Test; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; +import org.hibernate.testing.orm.junit.Jpa; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.junit.jupiter.api.Test; -import static org.hibernate.testing.transaction.TransactionUtil.doInJPA; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertTrue; /** * Test the use of the {@link OrderBy} annotation on a many-to-many collection @@ -43,7 +46,12 @@ * @author Chris Cranford */ @JiraKey(value = "HHH-12992") -public class OrderByTwoEntityTest extends BaseEnversJPAFunctionalTestCase { +@Jpa(annotatedClasses = { + OrderByTwoEntityTest.Parent.class, + OrderByTwoEntityTest.Child.class +}) +@EnversTest +public class OrderByTwoEntityTest { @Entity(name = "Parent") @Audited public static class Parent { @@ -155,17 +163,12 @@ public String toString() { } } - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { Parent.class, Child.class }; - } - private Integer parentId; - @Test - public void initData() { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Rev 1 - this.parentId = doInJPA( this::entityManagerFactory, entityManager -> { + this.parentId = scope.fromTransaction( em -> { final Parent parent = new Parent(); final Child child1 = new Child(); @@ -182,14 +185,14 @@ public void initData() { child2.getParents().add( parent ); parent.getChildren().add( child2 ); - entityManager.persist( parent ); + em.persist( parent ); return parent.getId(); } ); // Rev 2 - doInJPA( this::entityManagerFactory, entityManager -> { - final Parent parent = entityManager.find( Parent.class, parentId ); + scope.inTransaction( em -> { + final Parent parent = em.find( Parent.class, parentId ); final Child child = new Child(); child.setId( 3 ); @@ -198,12 +201,12 @@ public void initData() { child.getParents().add( parent ); parent.getChildren().add( child ); - entityManager.merge( parent ); + em.merge( parent ); } ); // Rev 3 - doInJPA( this::entityManagerFactory, entityManager -> { - final Parent parent = entityManager.find( Parent.class, parentId ); + scope.inTransaction( em -> { + final Parent parent = em.find( Parent.class, parentId ); parent.getChildren().removeIf( c -> { if ( c.getIndex1() == 2 ) { c.getParents().remove( parent ); @@ -211,57 +214,67 @@ public void initData() { } return false; } ); - entityManager.merge( parent ); + em.merge( parent ); } ); // Rev 4 - doInJPA( this::entityManagerFactory, entityManager -> { - final Parent parent = entityManager.find( Parent.class, parentId ); + scope.inTransaction( em -> { + final Parent parent = em.find( Parent.class, parentId ); parent.getChildren().forEach( c -> c.getParents().clear() ); parent.getChildren().clear(); - entityManager.merge( parent ); + em.merge( parent ); } ); } @Test - public void testRevisionCounts() { - assertEquals( Arrays.asList( 1, 2, 3, 4 ), getAuditReader().getRevisions( Parent.class, this.parentId ) ); - assertEquals( Arrays.asList( 1, 4 ), getAuditReader().getRevisions( Child.class, 1 ) ); - assertEquals( Arrays.asList( 1, 3 ), getAuditReader().getRevisions( Child.class, 2 ) ); - assertEquals( Arrays.asList( 2, 4 ), getAuditReader().getRevisions( Child.class, 3 ) ); + public void testRevisionCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + assertEquals( Arrays.asList( 1, 2, 3, 4 ), AuditReaderFactory.get( em ).getRevisions( Parent.class, this.parentId ) ); + assertEquals( Arrays.asList( 1, 4 ), AuditReaderFactory.get( em ).getRevisions( Child.class, 1 ) ); + assertEquals( Arrays.asList( 1, 3 ), AuditReaderFactory.get( em ).getRevisions( Child.class, 2 ) ); + assertEquals( Arrays.asList( 2, 4 ), AuditReaderFactory.get( em ).getRevisions( Child.class, 3 ) ); + } ); } @Test - public void testRevision1History() { - final Parent parent = getAuditReader().find( Parent.class, this.parentId, 1 ); - assertNotNull( parent ); - assertTrue( !parent.getChildren().isEmpty() ); - assertEquals( 2, parent.getChildren().size() ); - assertEquals( Arrays.asList( new Child( 1, 1 ), new Child( 2, 2 ) ), parent.getChildren() ); + public void testRevision1History(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final Parent parent = AuditReaderFactory.get( em ).find( Parent.class, this.parentId, 1 ); + assertNotNull( parent ); + assertTrue( !parent.getChildren().isEmpty() ); + assertEquals( 2, parent.getChildren().size() ); + assertEquals( Arrays.asList( new Child( 1, 1 ), new Child( 2, 2 ) ), parent.getChildren() ); + } ); } @Test - public void testRevision2History() { - final Parent parent = getAuditReader().find( Parent.class, this.parentId, 2 ); - assertNotNull( parent ); - assertTrue( !parent.getChildren().isEmpty() ); - assertEquals( 3, parent.getChildren().size() ); - assertEquals( Arrays.asList( new Child( 1, 1 ), new Child( 2, 2 ), new Child( 3, 3 ) ), parent.getChildren() ); + public void testRevision2History(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final Parent parent = AuditReaderFactory.get( em ).find( Parent.class, this.parentId, 2 ); + assertNotNull( parent ); + assertTrue( !parent.getChildren().isEmpty() ); + assertEquals( 3, parent.getChildren().size() ); + assertEquals( Arrays.asList( new Child( 1, 1 ), new Child( 2, 2 ), new Child( 3, 3 ) ), parent.getChildren() ); + } ); } @Test - public void testRevision3History() { - final Parent parent = getAuditReader().find( Parent.class, this.parentId, 3 ); - assertNotNull( parent ); - assertTrue( !parent.getChildren().isEmpty() ); - assertEquals( 2, parent.getChildren().size() ); - assertEquals( Arrays.asList( new Child( 1, 1 ), new Child( 3, 3 ) ), parent.getChildren() ); + public void testRevision3History(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final Parent parent = AuditReaderFactory.get( em ).find( Parent.class, this.parentId, 3 ); + assertNotNull( parent ); + assertTrue( !parent.getChildren().isEmpty() ); + assertEquals( 2, parent.getChildren().size() ); + assertEquals( Arrays.asList( new Child( 1, 1 ), new Child( 3, 3 ) ), parent.getChildren() ); + } ); } @Test - public void testRevision4History() { - final Parent parent = getAuditReader().find( Parent.class, this.parentId, 4 ); - assertNotNull( parent ); - assertTrue( parent.getChildren().isEmpty() ); + public void testRevision4History(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final Parent parent = AuditReaderFactory.get( em ).find( Parent.class, this.parentId, 4 ); + assertNotNull( parent ); + assertTrue( parent.getChildren().isEmpty() ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/RevisionConstraintQuery.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/RevisionConstraintQuery.java index ccb90ba61514..2f96525eec2e 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/RevisionConstraintQuery.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/RevisionConstraintQuery.java @@ -7,196 +7,214 @@ import java.util.Arrays; import java.util.HashSet; import java.util.List; -import jakarta.persistence.EntityManager; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.RevisionType; import org.hibernate.envers.query.AuditEntity; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; import org.hibernate.orm.test.envers.entities.StrIntTestEntity; import org.hibernate.orm.test.envers.tools.TestTools; -import org.junit.Assert; -import org.junit.Test; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Adam Warski (adam at warski dot org) */ @SuppressWarnings("unchecked") -public class RevisionConstraintQuery extends BaseEnversJPAFunctionalTestCase { +@Jpa(annotatedClasses = {StrIntTestEntity.class}) +@EnversTest +public class RevisionConstraintQuery { private Integer id1; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {StrIntTestEntity.class}; - } - - @Test - @Priority(10) - public void initData() { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); + scope.inEntityManager( em -> { + em.getTransaction().begin(); - StrIntTestEntity site1 = new StrIntTestEntity( "a", 10 ); - StrIntTestEntity site2 = new StrIntTestEntity( "b", 15 ); + StrIntTestEntity site1 = new StrIntTestEntity( "a", 10 ); + StrIntTestEntity site2 = new StrIntTestEntity( "b", 15 ); - em.persist( site1 ); - em.persist( site2 ); + em.persist( site1 ); + em.persist( site2 ); - id1 = site1.getId(); - Integer id2 = site2.getId(); + id1 = site1.getId(); + Integer id2 = site2.getId(); - em.getTransaction().commit(); + em.getTransaction().commit(); - // Revision 2 - em.getTransaction().begin(); + // Revision 2 + em.getTransaction().begin(); - site1 = em.find( StrIntTestEntity.class, id1 ); - site2 = em.find( StrIntTestEntity.class, id2 ); + StrIntTestEntity site1_2 = em.find( StrIntTestEntity.class, id1 ); + StrIntTestEntity site2_2 = em.find( StrIntTestEntity.class, id2 ); - site1.setStr1( "d" ); - site2.setNumber( 20 ); + site1_2.setStr1( "d" ); + site2_2.setNumber( 20 ); - em.getTransaction().commit(); + em.getTransaction().commit(); - // Revision 3 - em.getTransaction().begin(); + // Revision 3 + em.getTransaction().begin(); - site1 = em.find( StrIntTestEntity.class, id1 ); - site2 = em.find( StrIntTestEntity.class, id2 ); + StrIntTestEntity site1_3 = em.find( StrIntTestEntity.class, id1 ); + StrIntTestEntity site2_3 = em.find( StrIntTestEntity.class, id2 ); - site1.setNumber( 1 ); - site2.setStr1( "z" ); + site1_3.setNumber( 1 ); + site2_3.setStr1( "z" ); - em.getTransaction().commit(); + em.getTransaction().commit(); - // Revision 4 - em.getTransaction().begin(); + // Revision 4 + em.getTransaction().begin(); - site1 = em.find( StrIntTestEntity.class, id1 ); - site2 = em.find( StrIntTestEntity.class, id2 ); + StrIntTestEntity site1_4 = em.find( StrIntTestEntity.class, id1 ); + StrIntTestEntity site2_4 = em.find( StrIntTestEntity.class, id2 ); - site1.setNumber( 5 ); - site2.setStr1( "a" ); + site1_4.setNumber( 5 ); + site2_4.setStr1( "a" ); - em.getTransaction().commit(); + em.getTransaction().commit(); + } ); } @Test - public void testRevisionsLtQuery() { - List result = getAuditReader().createQuery() - .forRevisionsOfEntity( StrIntTestEntity.class, false, true ) - .addProjection( AuditEntity.revisionNumber().distinct() ) - .add( AuditEntity.revisionNumber().lt( 3 ) ) - .addOrder( AuditEntity.revisionNumber().asc() ) - .getResultList(); - - Assert.assertEquals( Arrays.asList( 1, 2 ), result ); + public void testRevisionsLtQuery(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + List result = AuditReaderFactory.get( em ).createQuery() + .forRevisionsOfEntity( StrIntTestEntity.class, false, true ) + .addProjection( AuditEntity.revisionNumber().distinct() ) + .add( AuditEntity.revisionNumber().lt( 3 ) ) + .addOrder( AuditEntity.revisionNumber().asc() ) + .getResultList(); + + assertEquals( Arrays.asList( 1, 2 ), result ); + } ); } @Test - public void testRevisionsGeQuery() { - List result = getAuditReader().createQuery() - .forRevisionsOfEntity( StrIntTestEntity.class, false, true ) - .addProjection( AuditEntity.revisionNumber().distinct() ) - .add( AuditEntity.revisionNumber().ge( 2 ) ) - .addOrder( AuditEntity.revisionNumber().asc() ) - .getResultList(); - - Assert.assertEquals( TestTools.makeSet( 2, 3, 4 ), new HashSet( result ) ); + public void testRevisionsGeQuery(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + List result = AuditReaderFactory.get( em ).createQuery() + .forRevisionsOfEntity( StrIntTestEntity.class, false, true ) + .addProjection( AuditEntity.revisionNumber().distinct() ) + .add( AuditEntity.revisionNumber().ge( 2 ) ) + .addOrder( AuditEntity.revisionNumber().asc() ) + .getResultList(); + + assertEquals( TestTools.makeSet( 2, 3, 4 ), new HashSet( result ) ); + } ); } @Test - public void testRevisionsLeWithPropertyQuery() { - List result = getAuditReader().createQuery() - .forRevisionsOfEntity( StrIntTestEntity.class, false, true ) - .addProjection( AuditEntity.revisionNumber() ) - .add( AuditEntity.revisionNumber().le( 3 ) ) - .add( AuditEntity.property( "str1" ).eq( "a" ) ) - .getResultList(); - - Assert.assertEquals( Arrays.asList( 1 ), result ); + public void testRevisionsLeWithPropertyQuery(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + List result = AuditReaderFactory.get( em ).createQuery() + .forRevisionsOfEntity( StrIntTestEntity.class, false, true ) + .addProjection( AuditEntity.revisionNumber() ) + .add( AuditEntity.revisionNumber().le( 3 ) ) + .add( AuditEntity.property( "str1" ).eq( "a" ) ) + .getResultList(); + + assertEquals( Arrays.asList( 1 ), result ); + } ); } @Test - public void testRevisionsGtWithPropertyQuery() { - List result = getAuditReader().createQuery() - .forRevisionsOfEntity( StrIntTestEntity.class, false, true ) - .addProjection( AuditEntity.revisionNumber() ) - .add( AuditEntity.revisionNumber().gt( 1 ) ) - .add( AuditEntity.property( "number" ).lt( 10 ) ) - .getResultList(); - - Assert.assertEquals( TestTools.makeSet( 3, 4 ), new HashSet<>( result ) ); + public void testRevisionsGtWithPropertyQuery(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + List result = AuditReaderFactory.get( em ).createQuery() + .forRevisionsOfEntity( StrIntTestEntity.class, false, true ) + .addProjection( AuditEntity.revisionNumber() ) + .add( AuditEntity.revisionNumber().gt( 1 ) ) + .add( AuditEntity.property( "number" ).lt( 10 ) ) + .getResultList(); + + assertEquals( TestTools.makeSet( 3, 4 ), new HashSet<>( result ) ); + } ); } @Test - public void testRevisionProjectionQuery() { - Object[] result = (Object[]) getAuditReader().createQuery() - .forRevisionsOfEntity( StrIntTestEntity.class, false, true ) - .addProjection( AuditEntity.revisionNumber().max() ) - .addProjection( AuditEntity.revisionNumber().count() ) - .addProjection( AuditEntity.revisionNumber().countDistinct() ) - .addProjection( AuditEntity.revisionNumber().min() ) - .add( AuditEntity.id().eq( id1 ) ) - .getSingleResult(); - - Assert.assertEquals( Integer.valueOf( 4 ), result[0] ); - Assert.assertEquals( Long.valueOf( 4 ), result[1] ); - Assert.assertEquals( Long.valueOf( 4 ), result[2] ); - Assert.assertEquals( Integer.valueOf( 1 ), result[3] ); + public void testRevisionProjectionQuery(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + Object[] result = (Object[]) AuditReaderFactory.get( em ).createQuery() + .forRevisionsOfEntity( StrIntTestEntity.class, false, true ) + .addProjection( AuditEntity.revisionNumber().max() ) + .addProjection( AuditEntity.revisionNumber().count() ) + .addProjection( AuditEntity.revisionNumber().countDistinct() ) + .addProjection( AuditEntity.revisionNumber().min() ) + .add( AuditEntity.id().eq( id1 ) ) + .getSingleResult(); + + assertEquals( Integer.valueOf( 4 ), result[0] ); + assertEquals( Long.valueOf( 4 ), result[1] ); + assertEquals( Long.valueOf( 4 ), result[2] ); + assertEquals( Integer.valueOf( 1 ), result[3] ); + } ); } @Test - public void testRevisionOrderQuery() { - List result = getAuditReader().createQuery() - .forRevisionsOfEntity( StrIntTestEntity.class, false, true ) - .addProjection( AuditEntity.revisionNumber() ) - .add( AuditEntity.id().eq( id1 ) ) - .addOrder( AuditEntity.revisionNumber().desc() ) - .getResultList(); - - Assert.assertEquals( Arrays.asList( 4, 3, 2, 1 ), result ); + public void testRevisionOrderQuery(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + List result = AuditReaderFactory.get( em ).createQuery() + .forRevisionsOfEntity( StrIntTestEntity.class, false, true ) + .addProjection( AuditEntity.revisionNumber() ) + .add( AuditEntity.id().eq( id1 ) ) + .addOrder( AuditEntity.revisionNumber().desc() ) + .getResultList(); + + assertEquals( Arrays.asList( 4, 3, 2, 1 ), result ); + } ); } @Test - public void testRevisionCountQuery() { - // The query shouldn't be ordered as always, otherwise - we get an exception. - Object result = getAuditReader().createQuery() - .forRevisionsOfEntity( StrIntTestEntity.class, false, true ) - .addProjection( AuditEntity.revisionNumber().count() ) - .add( AuditEntity.id().eq( id1 ) ) - .getSingleResult(); - - Assert.assertEquals( Long.valueOf( 4 ), result ); + public void testRevisionCountQuery(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + // The query shouldn't be ordered as always, otherwise - we get an exception. + Object result = AuditReaderFactory.get( em ).createQuery() + .forRevisionsOfEntity( StrIntTestEntity.class, false, true ) + .addProjection( AuditEntity.revisionNumber().count() ) + .add( AuditEntity.id().eq( id1 ) ) + .getSingleResult(); + + assertEquals( Long.valueOf( 4 ), result ); + } ); } @Test - public void testRevisionTypeEqQuery() { - // The query shouldn't be ordered as always, otherwise - we get an exception. - List results = getAuditReader().createQuery() - .forRevisionsOfEntity( StrIntTestEntity.class, true, true ) - .add( AuditEntity.id().eq( id1 ) ) - .add( AuditEntity.revisionType().eq( RevisionType.MOD ) ) - .getResultList(); - - Assert.assertEquals( 3, results.size() ); - Assert.assertEquals( new StrIntTestEntity( "d", 10, id1 ), results.get( 0 ) ); - Assert.assertEquals( new StrIntTestEntity( "d", 1, id1 ), results.get( 1 ) ); - Assert.assertEquals( new StrIntTestEntity( "d", 5, id1 ), results.get( 2 ) ); + public void testRevisionTypeEqQuery(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + // The query shouldn't be ordered as always, otherwise - we get an exception. + List results = AuditReaderFactory.get( em ).createQuery() + .forRevisionsOfEntity( StrIntTestEntity.class, true, true ) + .add( AuditEntity.id().eq( id1 ) ) + .add( AuditEntity.revisionType().eq( RevisionType.MOD ) ) + .getResultList(); + + assertEquals( 3, results.size() ); + assertEquals( new StrIntTestEntity( "d", 10, id1 ), results.get( 0 ) ); + assertEquals( new StrIntTestEntity( "d", 1, id1 ), results.get( 1 ) ); + assertEquals( new StrIntTestEntity( "d", 5, id1 ), results.get( 2 ) ); + } ); } @Test - public void testRevisionTypeNeQuery() { - // The query shouldn't be ordered as always, otherwise - we get an exception. - List results = getAuditReader().createQuery() - .forRevisionsOfEntity( StrIntTestEntity.class, true, true ) - .add( AuditEntity.id().eq( id1 ) ) - .add( AuditEntity.revisionType().ne( RevisionType.MOD ) ) - .getResultList(); - - Assert.assertEquals( 1, results.size() ); - Assert.assertEquals( new StrIntTestEntity( "a", 10, id1 ), results.get( 0 ) ); + public void testRevisionTypeNeQuery(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + // The query shouldn't be ordered as always, otherwise - we get an exception. + List results = AuditReaderFactory.get( em ).createQuery() + .forRevisionsOfEntity( StrIntTestEntity.class, true, true ) + .add( AuditEntity.id().eq( id1 ) ) + .add( AuditEntity.revisionType().ne( RevisionType.MOD ) ) + .getResultList(); + + assertEquals( 1, results.size() ); + assertEquals( new StrIntTestEntity( "a", 10, id1 ), results.get( 0 ) ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/RevisionEntityQueryTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/RevisionEntityQueryTest.java index ea6f4cd312e4..afa877f39923 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/RevisionEntityQueryTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/RevisionEntityQueryTest.java @@ -4,141 +4,149 @@ */ package org.hibernate.orm.test.envers.integration.query; -import jakarta.persistence.EntityManager; import jakarta.persistence.criteria.CriteriaBuilder; import jakarta.persistence.criteria.CriteriaQuery; import jakarta.persistence.criteria.Root; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.enhanced.SequenceIdRevisionEntity; import org.hibernate.envers.query.AuditEntity; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; import org.hibernate.orm.test.envers.entities.StrIntTestEntity; import org.hibernate.orm.test.envers.entities.ids.EmbId; import org.hibernate.orm.test.envers.entities.ids.EmbIdTestEntity; import org.hibernate.orm.test.envers.entities.ids.MulId; import org.hibernate.orm.test.envers.entities.ids.MulIdTestEntity; -import org.junit.Test; -import org.junit.jupiter.api.Assertions; + +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.junit.jupiter.api.Test; import java.util.List; import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assertions.assertNotNull; /** * @author Marco Belladelli */ -public class RevisionEntityQueryTest extends BaseEnversJPAFunctionalTestCase { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {StrIntTestEntity.class, MulIdTestEntity.class, EmbIdTestEntity.class}; - } +@Jpa(annotatedClasses = {StrIntTestEntity.class, MulIdTestEntity.class, EmbIdTestEntity.class}) +@EnversTest +public class RevisionEntityQueryTest { - @Test - @Priority(10) - public void initData() { + private Integer id1; + private Integer id2; + private Integer id3; + + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Revision 1 - final EntityManager em = getEntityManager(); - em.getTransaction().begin(); + scope.inEntityManager( em -> { + em.getTransaction().begin(); - StrIntTestEntity site1 = new StrIntTestEntity( "a", 10 ); - StrIntTestEntity site2 = new StrIntTestEntity( "a", 10 ); - StrIntTestEntity site3 = new StrIntTestEntity( "b", 5 ); + StrIntTestEntity site1 = new StrIntTestEntity( "a", 10 ); + StrIntTestEntity site2 = new StrIntTestEntity( "a", 10 ); + StrIntTestEntity site3 = new StrIntTestEntity( "b", 5 ); - em.persist( site1 ); - em.persist( site2 ); - em.persist( site3 ); + em.persist( site1 ); + em.persist( site2 ); + em.persist( site3 ); - final Integer id1 = site1.getId(); - final Integer id2 = site2.getId(); - final Integer id3 = site3.getId(); + id1 = site1.getId(); + id2 = site2.getId(); + id3 = site3.getId(); - em.getTransaction().commit(); + em.getTransaction().commit(); - // Revision 2 - em.getTransaction().begin(); + // Revision 2 + em.getTransaction().begin(); - final MulId mulId1 = new MulId( 1, 2 ); - em.persist( new MulIdTestEntity( mulId1.getId1(), mulId1.getId2(), "data" ) ); + final MulId mulId1 = new MulId( 1, 2 ); + em.persist( new MulIdTestEntity( mulId1.getId1(), mulId1.getId2(), "data" ) ); - final EmbId embId1 = new EmbId( 3, 4 ); - em.persist( new EmbIdTestEntity( embId1, "something" ) ); + final EmbId embId1 = new EmbId( 3, 4 ); + em.persist( new EmbIdTestEntity( embId1, "something" ) ); - site1 = em.find( StrIntTestEntity.class, id1 ); - site2 = em.find( StrIntTestEntity.class, id2 ); + StrIntTestEntity site1_2 = em.find( StrIntTestEntity.class, id1 ); + StrIntTestEntity site2_2 = em.find( StrIntTestEntity.class, id2 ); - site1.setStr1( "aBc" ); - site2.setNumber( 20 ); + site1_2.setStr1( "aBc" ); + site2_2.setNumber( 20 ); - em.getTransaction().commit(); + em.getTransaction().commit(); - // Revision 3 - em.getTransaction().begin(); + // Revision 3 + em.getTransaction().begin(); - site3 = em.find( StrIntTestEntity.class, id3 ); + StrIntTestEntity site3_3 = em.find( StrIntTestEntity.class, id3 ); - site3.setStr1( "a" ); + site3_3.setStr1( "a" ); - em.getTransaction().commit(); + em.getTransaction().commit(); - // Revision 4 - em.getTransaction().begin(); + // Revision 4 + em.getTransaction().begin(); - site1 = em.find( StrIntTestEntity.class, id1 ); + StrIntTestEntity site1_4 = em.find( StrIntTestEntity.class, id1 ); - em.remove( site1 ); + em.remove( site1_4 ); - em.getTransaction().commit(); + em.getTransaction().commit(); + } ); } @Test - public void testRevisionEntityHqlQuery() { - final EntityManager em = getEntityManager(); - em.getTransaction().begin(); + public void testRevisionEntityHqlQuery(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + em.getTransaction().begin(); - final List resultList = em.createQuery( - "select e from SequenceIdRevisionEntity e", - SequenceIdRevisionEntity.class - ).getResultList(); + final List resultList = em.createQuery( + "select e from SequenceIdRevisionEntity e", + SequenceIdRevisionEntity.class + ).getResultList(); - assertThat( resultList ).hasSize( 4 ); + assertThat( resultList ).hasSize( 4 ); - assertThat( em.createQuery( - String.format( "select e from %s e", SequenceIdRevisionEntity.class.getName() ), - SequenceIdRevisionEntity.class - ).getResultList() ).containsAll( resultList ); + assertThat( em.createQuery( + String.format( "select e from %s e", SequenceIdRevisionEntity.class.getName() ), + SequenceIdRevisionEntity.class + ).getResultList() ).containsAll( resultList ); - em.getTransaction().commit(); + em.getTransaction().commit(); + } ); } @Test - public void testRevisionEntityCriteriaQuery() { - final EntityManager em = getEntityManager(); - em.getTransaction().begin(); + public void testRevisionEntityCriteriaQuery(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + em.getTransaction().begin(); - final CriteriaBuilder criteriaBuilder = em.getCriteriaBuilder(); - final CriteriaQuery query = criteriaBuilder.createQuery( Integer.class ); - final Root from = query.from( SequenceIdRevisionEntity.class ); - final List resultList = em.createQuery( query.select( from.get( "id" ) ) ).getResultList(); + final CriteriaBuilder criteriaBuilder = em.getCriteriaBuilder(); + final CriteriaQuery query = criteriaBuilder.createQuery( Integer.class ); + final Root from = query.from( SequenceIdRevisionEntity.class ); + final List resultList = em.createQuery( query.select( from.get( "id" ) ) ).getResultList(); - assertThat( resultList ).hasSize( 4 ).allSatisfy( Assertions::assertNotNull ); + assertThat( resultList ).hasSize( 4 ).allSatisfy( r -> assertNotNull( r ) ); - em.getTransaction().commit(); + em.getTransaction().commit(); + } ); } @Test - public void testQueryForRevisionsOfEntity() { - final EntityManager em = getEntityManager(); - em.getTransaction().begin(); + public void testQueryForRevisionsOfEntity(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + em.getTransaction().begin(); - //noinspection unchecked - final List resultList = getAuditReader().createQuery() - .forRevisionsOfEntity( StrIntTestEntity.class, true ) - .add( AuditEntity.id().eq( 1 ) ) - .add( AuditEntity.revisionNumber().between( 1, 3 ) ) - .getResultList(); + //noinspection unchecked + final List resultList = AuditReaderFactory.get( em ).createQuery() + .forRevisionsOfEntity( StrIntTestEntity.class, true ) + .add( AuditEntity.id().eq( id1 ) ) + .add( AuditEntity.revisionNumber().between( 1, 3 ) ) + .getResultList(); - assertThat( resultList ).hasSize( 2 ).allMatch( r -> r instanceof SequenceIdRevisionEntity ); + assertThat( resultList ).hasSize( 2 ).allMatch( r -> r instanceof SequenceIdRevisionEntity ); - em.getTransaction().commit(); + em.getTransaction().commit(); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/SimpleQuery.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/SimpleQuery.java index dadccb5a6d62..88bbd2149052 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/SimpleQuery.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/SimpleQuery.java @@ -7,14 +7,12 @@ import java.util.Arrays; import java.util.HashSet; import java.util.List; -import jakarta.persistence.EntityManager; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.RevisionType; import org.hibernate.envers.enhanced.SequenceIdRevisionEntity; import org.hibernate.envers.query.AuditEntity; import org.hibernate.envers.query.criteria.MatchMode; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; import org.hibernate.orm.test.envers.entities.StrIntTestEntity; import org.hibernate.orm.test.envers.entities.ids.EmbId; import org.hibernate.orm.test.envers.entities.ids.EmbIdTestEntity; @@ -22,423 +20,473 @@ import org.hibernate.orm.test.envers.entities.ids.MulIdTestEntity; import org.hibernate.orm.test.envers.tools.TestTools; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Assert; -import org.junit.Test; +import org.hibernate.testing.orm.junit.Jpa; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; /** * @author Adam Warski (adam at warski dot org) * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) */ @SuppressWarnings("unchecked") -public class SimpleQuery extends BaseEnversJPAFunctionalTestCase { +@Jpa(annotatedClasses = {StrIntTestEntity.class, MulIdTestEntity.class, EmbIdTestEntity.class}) +@EnversTest +public class SimpleQuery { private Integer id1; private Integer id2; private Integer id3; private MulId mulId1; private EmbId embId1; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { StrIntTestEntity.class, MulIdTestEntity.class, EmbIdTestEntity.class }; - } - - @Test - @Priority(10) - public void initData() { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); + scope.inEntityManager( em -> { + em.getTransaction().begin(); - StrIntTestEntity site1 = new StrIntTestEntity( "a", 10 ); - StrIntTestEntity site2 = new StrIntTestEntity( "a", 10 ); - StrIntTestEntity site3 = new StrIntTestEntity( "b", 5 ); + StrIntTestEntity site1 = new StrIntTestEntity( "a", 10 ); + StrIntTestEntity site2 = new StrIntTestEntity( "a", 10 ); + StrIntTestEntity site3 = new StrIntTestEntity( "b", 5 ); - em.persist( site1 ); - em.persist( site2 ); - em.persist( site3 ); + em.persist( site1 ); + em.persist( site2 ); + em.persist( site3 ); - id1 = site1.getId(); - id2 = site2.getId(); - id3 = site3.getId(); + id1 = site1.getId(); + id2 = site2.getId(); + id3 = site3.getId(); - em.getTransaction().commit(); + em.getTransaction().commit(); - // Revision 2 - em.getTransaction().begin(); + // Revision 2 + em.getTransaction().begin(); - mulId1 = new MulId( 1, 2 ); - em.persist( new MulIdTestEntity( mulId1.getId1(), mulId1.getId2(), "data" ) ); + mulId1 = new MulId( 1, 2 ); + em.persist( new MulIdTestEntity( mulId1.getId1(), mulId1.getId2(), "data" ) ); - embId1 = new EmbId( 3, 4 ); - em.persist( new EmbIdTestEntity( embId1, "something" ) ); + embId1 = new EmbId( 3, 4 ); + em.persist( new EmbIdTestEntity( embId1, "something" ) ); - site1 = em.find( StrIntTestEntity.class, id1 ); - site2 = em.find( StrIntTestEntity.class, id2 ); + StrIntTestEntity site1_2 = em.find( StrIntTestEntity.class, id1 ); + StrIntTestEntity site2_2 = em.find( StrIntTestEntity.class, id2 ); - site1.setStr1( "aBc" ); - site2.setNumber( 20 ); + site1_2.setStr1( "aBc" ); + site2_2.setNumber( 20 ); - em.getTransaction().commit(); + em.getTransaction().commit(); - // Revision 3 - em.getTransaction().begin(); + // Revision 3 + em.getTransaction().begin(); - site3 = em.find( StrIntTestEntity.class, id3 ); + StrIntTestEntity site3_3 = em.find( StrIntTestEntity.class, id3 ); - site3.setStr1( "a" ); + site3_3.setStr1( "a" ); - em.getTransaction().commit(); + em.getTransaction().commit(); - // Revision 4 - em.getTransaction().begin(); + // Revision 4 + em.getTransaction().begin(); - site1 = em.find( StrIntTestEntity.class, id1 ); + StrIntTestEntity site1_4 = em.find( StrIntTestEntity.class, id1 ); - em.remove( site1 ); + em.remove( site1_4 ); - em.getTransaction().commit(); + em.getTransaction().commit(); + } ); } @Test - public void testEntitiesIdQuery() { - StrIntTestEntity ver2 = (StrIntTestEntity) getAuditReader().createQuery() - .forEntitiesAtRevision( StrIntTestEntity.class, 2 ) - .add( AuditEntity.id().eq( id2 ) ) - .getSingleResult(); - - assert ver2.equals( new StrIntTestEntity( "a", 20, id2 ) ); + public void testEntitiesIdQuery(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + StrIntTestEntity ver2 = (StrIntTestEntity) AuditReaderFactory.get( em ).createQuery() + .forEntitiesAtRevision( StrIntTestEntity.class, 2 ) + .add( AuditEntity.id().eq( id2 ) ) + .getSingleResult(); + + assertEquals( new StrIntTestEntity( "a", 20, id2 ), ver2 ); + } ); } @Test - public void testEntitiesPropertyEqualsQuery() { - List ver1 = getAuditReader().createQuery() - .forEntitiesAtRevision( StrIntTestEntity.class, 1 ) - .add( AuditEntity.property( "str1" ).eq( "a" ) ) - .getResultList(); - - List ver2 = getAuditReader().createQuery() - .forEntitiesAtRevision( StrIntTestEntity.class, 2 ) - .add( AuditEntity.property( "str1" ).eq( "a" ) ) - .getResultList(); - - List ver3 = getAuditReader().createQuery() - .forEntitiesAtRevision( StrIntTestEntity.class, 3 ) - .add( AuditEntity.property( "str1" ).eq( "a" ) ) - .getResultList(); - - assert new HashSet( ver1 ).equals( - TestTools.makeSet( - new StrIntTestEntity( "a", 10, id1 ), - new StrIntTestEntity( "a", 10, id2 ) - ) - ); - assert new HashSet( ver2 ).equals( TestTools.makeSet( new StrIntTestEntity( "a", 20, id2 ) ) ); - assert new HashSet( ver3 ).equals( - TestTools.makeSet( - new StrIntTestEntity( "a", 20, id2 ), - new StrIntTestEntity( "a", 5, id3 ) - ) - ); + public void testEntitiesPropertyEqualsQuery(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + List ver1 = AuditReaderFactory.get( em ).createQuery() + .forEntitiesAtRevision( StrIntTestEntity.class, 1 ) + .add( AuditEntity.property( "str1" ).eq( "a" ) ) + .getResultList(); + + List ver2 = AuditReaderFactory.get( em ).createQuery() + .forEntitiesAtRevision( StrIntTestEntity.class, 2 ) + .add( AuditEntity.property( "str1" ).eq( "a" ) ) + .getResultList(); + + List ver3 = AuditReaderFactory.get( em ).createQuery() + .forEntitiesAtRevision( StrIntTestEntity.class, 3 ) + .add( AuditEntity.property( "str1" ).eq( "a" ) ) + .getResultList(); + + assertEquals( + TestTools.makeSet( + new StrIntTestEntity( "a", 10, id1 ), + new StrIntTestEntity( "a", 10, id2 ) + ), + new HashSet( ver1 ) + ); + assertEquals( TestTools.makeSet( new StrIntTestEntity( "a", 20, id2 ) ), new HashSet( ver2 ) ); + assertEquals( + TestTools.makeSet( + new StrIntTestEntity( "a", 20, id2 ), + new StrIntTestEntity( "a", 5, id3 ) + ), + new HashSet( ver3 ) + ); + } ); } @Test - public void testEntitiesPropertyLeQuery() { - List ver1 = getAuditReader().createQuery() - .forEntitiesAtRevision( StrIntTestEntity.class, 1 ) - .add( AuditEntity.property( "number" ).le( 10 ) ) - .getResultList(); - - List ver2 = getAuditReader().createQuery() - .forEntitiesAtRevision( StrIntTestEntity.class, 2 ) - .add( AuditEntity.property( "number" ).le( 10 ) ) - .getResultList(); - - List ver3 = getAuditReader().createQuery() - .forEntitiesAtRevision( StrIntTestEntity.class, 3 ) - .add( AuditEntity.property( "number" ).le( 10 ) ) - .getResultList(); - - assert new HashSet( ver1 ).equals( - TestTools.makeSet( - new StrIntTestEntity( "a", 10, id1 ), - new StrIntTestEntity( "a", 10, id2 ), new StrIntTestEntity( "b", 5, id3 ) - ) - ); - assert new HashSet( ver2 ).equals( - TestTools.makeSet( - new StrIntTestEntity( "aBc", 10, id1 ), - new StrIntTestEntity( "b", 5, id3 ) - ) - ); - assert new HashSet( ver3 ).equals( - TestTools.makeSet( - new StrIntTestEntity( "aBc", 10, id1 ), - new StrIntTestEntity( "a", 5, id3 ) - ) - ); + public void testEntitiesPropertyLeQuery(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + List ver1 = AuditReaderFactory.get( em ).createQuery() + .forEntitiesAtRevision( StrIntTestEntity.class, 1 ) + .add( AuditEntity.property( "number" ).le( 10 ) ) + .getResultList(); + + List ver2 = AuditReaderFactory.get( em ).createQuery() + .forEntitiesAtRevision( StrIntTestEntity.class, 2 ) + .add( AuditEntity.property( "number" ).le( 10 ) ) + .getResultList(); + + List ver3 = AuditReaderFactory.get( em ).createQuery() + .forEntitiesAtRevision( StrIntTestEntity.class, 3 ) + .add( AuditEntity.property( "number" ).le( 10 ) ) + .getResultList(); + + assertEquals( + TestTools.makeSet( + new StrIntTestEntity( "a", 10, id1 ), + new StrIntTestEntity( "a", 10, id2 ), new StrIntTestEntity( "b", 5, id3 ) + ), + new HashSet( ver1 ) + ); + assertEquals( + TestTools.makeSet( + new StrIntTestEntity( "aBc", 10, id1 ), + new StrIntTestEntity( "b", 5, id3 ) + ), + new HashSet( ver2 ) + ); + assertEquals( + TestTools.makeSet( + new StrIntTestEntity( "aBc", 10, id1 ), + new StrIntTestEntity( "a", 5, id3 ) + ), + new HashSet( ver3 ) + ); + } ); } @Test - public void testRevisionsPropertyEqQuery() { - List revs_id1 = getAuditReader().createQuery() - .forRevisionsOfEntity( StrIntTestEntity.class, false, true ) - .addProjection( AuditEntity.revisionNumber() ) - .add( AuditEntity.property( "str1" ).le( "a" ) ) - .add( AuditEntity.id().eq( id1 ) ) - .getResultList(); - - List revs_id2 = getAuditReader().createQuery() - .forRevisionsOfEntity( StrIntTestEntity.class, false, true ) - .addProjection( AuditEntity.revisionNumber() ) - .add( AuditEntity.property( "str1" ).le( "a" ) ) - .add( AuditEntity.id().eq( id2 ) ) - .addOrder( AuditEntity.revisionNumber().asc() ) - .getResultList(); - - List revs_id3 = getAuditReader().createQuery() - .forRevisionsOfEntity( StrIntTestEntity.class, false, true ) - .addProjection( AuditEntity.revisionNumber() ) - .add( AuditEntity.property( "str1" ).le( "a" ) ) - .add( AuditEntity.id().eq( id3 ) ) - .getResultList(); - - assert Arrays.asList( 1 ).equals( revs_id1 ); - assert Arrays.asList( 1, 2 ).equals( revs_id2 ); - assert Arrays.asList( 3 ).equals( revs_id3 ); + public void testRevisionsPropertyEqQuery(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + List revs_id1 = AuditReaderFactory.get( em ).createQuery() + .forRevisionsOfEntity( StrIntTestEntity.class, false, true ) + .addProjection( AuditEntity.revisionNumber() ) + .add( AuditEntity.property( "str1" ).le( "a" ) ) + .add( AuditEntity.id().eq( id1 ) ) + .getResultList(); + + List revs_id2 = AuditReaderFactory.get( em ).createQuery() + .forRevisionsOfEntity( StrIntTestEntity.class, false, true ) + .addProjection( AuditEntity.revisionNumber() ) + .add( AuditEntity.property( "str1" ).le( "a" ) ) + .add( AuditEntity.id().eq( id2 ) ) + .addOrder( AuditEntity.revisionNumber().asc() ) + .getResultList(); + + List revs_id3 = AuditReaderFactory.get( em ).createQuery() + .forRevisionsOfEntity( StrIntTestEntity.class, false, true ) + .addProjection( AuditEntity.revisionNumber() ) + .add( AuditEntity.property( "str1" ).le( "a" ) ) + .add( AuditEntity.id().eq( id3 ) ) + .getResultList(); + + assertEquals( Arrays.asList( 1 ), revs_id1 ); + assertEquals( Arrays.asList( 1, 2 ), revs_id2 ); + assertEquals( Arrays.asList( 3 ), revs_id3 ); + } ); } @Test - public void testSelectEntitiesQuery() { - List result = getAuditReader().createQuery() - .forRevisionsOfEntity( StrIntTestEntity.class, true, false ) - .add( AuditEntity.id().eq( id1 ) ) - .getResultList(); - - assert result.size() == 2; - - assert result.get( 0 ).equals( new StrIntTestEntity( "a", 10, id1 ) ); - assert result.get( 1 ).equals( new StrIntTestEntity( "aBc", 10, id1 ) ); + public void testSelectEntitiesQuery(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + List result = AuditReaderFactory.get( em ).createQuery() + .forRevisionsOfEntity( StrIntTestEntity.class, true, false ) + .add( AuditEntity.id().eq( id1 ) ) + .getResultList(); + + assertEquals( 2, result.size() ); + + assertEquals( new StrIntTestEntity( "a", 10, id1 ), result.get( 0 ) ); + assertEquals( new StrIntTestEntity( "aBc", 10, id1 ), result.get( 1 ) ); + } ); } @Test - public void testSelectEntitiesAndRevisionsQuery() { - List result = getAuditReader().createQuery() - .forRevisionsOfEntity( StrIntTestEntity.class, false, true ) - .add( AuditEntity.id().eq( id1 ) ) - .getResultList(); - - assert result.size() == 3; - - assert ((Object[]) result.get( 0 ))[0].equals( new StrIntTestEntity( "a", 10, id1 ) ); - assert ((Object[]) result.get( 1 ))[0].equals( new StrIntTestEntity( "aBc", 10, id1 ) ); - assert ((Object[]) result.get( 2 ))[0].equals( new StrIntTestEntity( null, null, id1 ) ); - - assert ((SequenceIdRevisionEntity) ((Object[]) result.get( 0 ))[1]).getId() == 1; - assert ((SequenceIdRevisionEntity) ((Object[]) result.get( 1 ))[1]).getId() == 2; - assert ((SequenceIdRevisionEntity) ((Object[]) result.get( 2 ))[1]).getId() == 4; - - assert ((Object[]) result.get( 0 ))[2].equals( RevisionType.ADD ); - assert ((Object[]) result.get( 1 ))[2].equals( RevisionType.MOD ); - assert ((Object[]) result.get( 2 ))[2].equals( RevisionType.DEL ); + public void testSelectEntitiesAndRevisionsQuery(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + List result = AuditReaderFactory.get( em ).createQuery() + .forRevisionsOfEntity( StrIntTestEntity.class, false, true ) + .add( AuditEntity.id().eq( id1 ) ) + .getResultList(); + + assertEquals( 3, result.size() ); + + assertEquals( new StrIntTestEntity( "a", 10, id1 ), ((Object[]) result.get( 0 ))[0] ); + assertEquals( new StrIntTestEntity( "aBc", 10, id1 ), ((Object[]) result.get( 1 ))[0] ); + assertEquals( new StrIntTestEntity( null, null, id1 ), ((Object[]) result.get( 2 ))[0] ); + + assertEquals( 1, ((SequenceIdRevisionEntity) ((Object[]) result.get( 0 ))[1]).getId() ); + assertEquals( 2, ((SequenceIdRevisionEntity) ((Object[]) result.get( 1 ))[1]).getId() ); + assertEquals( 4, ((SequenceIdRevisionEntity) ((Object[]) result.get( 2 ))[1]).getId() ); + + assertEquals( RevisionType.ADD, ((Object[]) result.get( 0 ))[2] ); + assertEquals( RevisionType.MOD, ((Object[]) result.get( 1 ))[2] ); + assertEquals( RevisionType.DEL, ((Object[]) result.get( 2 ))[2] ); + } ); } @Test - public void testSelectRevisionTypeQuery() { - List result = getAuditReader().createQuery() - .forRevisionsOfEntity( StrIntTestEntity.class, false, true ) - .addProjection( AuditEntity.revisionType() ) - .add( AuditEntity.id().eq( id1 ) ) - .addOrder( AuditEntity.revisionNumber().asc() ) - .getResultList(); - - assert result.size() == 3; - - assert result.get( 0 ).equals( RevisionType.ADD ); - assert result.get( 1 ).equals( RevisionType.MOD ); - assert result.get( 2 ).equals( RevisionType.DEL ); + public void testSelectRevisionTypeQuery(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + List result = AuditReaderFactory.get( em ).createQuery() + .forRevisionsOfEntity( StrIntTestEntity.class, false, true ) + .addProjection( AuditEntity.revisionType() ) + .add( AuditEntity.id().eq( id1 ) ) + .addOrder( AuditEntity.revisionNumber().asc() ) + .getResultList(); + + assertEquals( 3, result.size() ); + + assertEquals( RevisionType.ADD, result.get( 0 ) ); + assertEquals( RevisionType.MOD, result.get( 1 ) ); + assertEquals( RevisionType.DEL, result.get( 2 ) ); + } ); } @Test - public void testEmptyRevisionOfEntityQuery() { - List result = getAuditReader().createQuery() - .forRevisionsOfEntity( StrIntTestEntity.class, false, true ) - .getResultList(); - - assert result.size() == 7; + public void testEmptyRevisionOfEntityQuery(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + List result = AuditReaderFactory.get( em ).createQuery() + .forRevisionsOfEntity( StrIntTestEntity.class, false, true ) + .getResultList(); + + assertEquals( 7, result.size() ); + } ); } @Test - public void testEmptyConjunctionRevisionOfEntityQuery() { - List result = getAuditReader().createQuery() - .forRevisionsOfEntity( StrIntTestEntity.class, false, true ) - .add( AuditEntity.conjunction() ) - .getResultList(); - - assert result.size() == 7; + public void testEmptyConjunctionRevisionOfEntityQuery(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + List result = AuditReaderFactory.get( em ).createQuery() + .forRevisionsOfEntity( StrIntTestEntity.class, false, true ) + .add( AuditEntity.conjunction() ) + .getResultList(); + + assertEquals( 7, result.size() ); + } ); } @Test - public void testEmptyDisjunctionRevisionOfEntityQuery() { - List result = getAuditReader().createQuery() - .forRevisionsOfEntity( StrIntTestEntity.class, false, true ) - .add( AuditEntity.disjunction() ) - .getResultList(); - - assert result.size() == 0; + public void testEmptyDisjunctionRevisionOfEntityQuery(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + List result = AuditReaderFactory.get( em ).createQuery() + .forRevisionsOfEntity( StrIntTestEntity.class, false, true ) + .add( AuditEntity.disjunction() ) + .getResultList(); + + assertEquals( 0, result.size() ); + } ); } @Test - public void testEntitiesAddedAtRevision() { - StrIntTestEntity site1 = new StrIntTestEntity( "a", 10, id1 ); - StrIntTestEntity site2 = new StrIntTestEntity( "a", 10, id2 ); - StrIntTestEntity site3 = new StrIntTestEntity( "b", 5, id3 ); - - List result = getAuditReader().createQuery().forEntitiesModifiedAtRevision( - StrIntTestEntity.class, - StrIntTestEntity.class.getName(), - 1 - ).getResultList(); - RevisionType revisionType = (RevisionType) getAuditReader().createQuery().forEntitiesModifiedAtRevision( - StrIntTestEntity.class, - 1 - ) - .addProjection( AuditEntity.revisionType() ).add( AuditEntity.id().eq( id1 ) ) - .getSingleResult(); - - Assert.assertTrue( TestTools.checkCollection( result, site1, site2, site3 ) ); - Assert.assertEquals( revisionType, RevisionType.ADD ); + public void testEntitiesAddedAtRevision(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + StrIntTestEntity site1 = new StrIntTestEntity( "a", 10, id1 ); + StrIntTestEntity site2 = new StrIntTestEntity( "a", 10, id2 ); + StrIntTestEntity site3 = new StrIntTestEntity( "b", 5, id3 ); + + List result = AuditReaderFactory.get( em ).createQuery().forEntitiesModifiedAtRevision( + StrIntTestEntity.class, + StrIntTestEntity.class.getName(), + 1 + ).getResultList(); + RevisionType revisionType = (RevisionType) AuditReaderFactory.get( em ).createQuery().forEntitiesModifiedAtRevision( + StrIntTestEntity.class, + 1 + ) + .addProjection( AuditEntity.revisionType() ).add( AuditEntity.id().eq( id1 ) ) + .getSingleResult(); + + assertTrue( TestTools.checkCollection( result, site1, site2, site3 ) ); + assertEquals( RevisionType.ADD, revisionType ); + } ); } @Test - public void testEntitiesChangedAtRevision() { - StrIntTestEntity site1 = new StrIntTestEntity( "aBc", 10, id1 ); - StrIntTestEntity site2 = new StrIntTestEntity( "a", 20, id2 ); - - List result = getAuditReader().createQuery() - .forEntitiesModifiedAtRevision( StrIntTestEntity.class, 2 ) - .getResultList(); - RevisionType revisionType = (RevisionType) getAuditReader().createQuery().forEntitiesModifiedAtRevision( - StrIntTestEntity.class, - 2 - ) - .addProjection( AuditEntity.revisionType() ).add( AuditEntity.id().eq( id1 ) ) - .getSingleResult(); - - Assert.assertTrue( TestTools.checkCollection( result, site1, site2 ) ); - Assert.assertEquals( revisionType, RevisionType.MOD ); + public void testEntitiesChangedAtRevision(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + StrIntTestEntity site1 = new StrIntTestEntity( "aBc", 10, id1 ); + StrIntTestEntity site2 = new StrIntTestEntity( "a", 20, id2 ); + + List result = AuditReaderFactory.get( em ).createQuery() + .forEntitiesModifiedAtRevision( StrIntTestEntity.class, 2 ) + .getResultList(); + RevisionType revisionType = (RevisionType) AuditReaderFactory.get( em ).createQuery().forEntitiesModifiedAtRevision( + StrIntTestEntity.class, + 2 + ) + .addProjection( AuditEntity.revisionType() ).add( AuditEntity.id().eq( id1 ) ) + .getSingleResult(); + + assertTrue( TestTools.checkCollection( result, site1, site2 ) ); + assertEquals( RevisionType.MOD, revisionType ); + } ); } @Test - public void testEntitiesRemovedAtRevision() { - StrIntTestEntity site1 = new StrIntTestEntity( null, null, id1 ); - - List result = getAuditReader().createQuery() - .forEntitiesModifiedAtRevision( StrIntTestEntity.class, 4 ) - .getResultList(); - RevisionType revisionType = (RevisionType) getAuditReader().createQuery().forEntitiesModifiedAtRevision( - StrIntTestEntity.class, - 4 - ) - .addProjection( AuditEntity.revisionType() ).add( AuditEntity.id().eq( id1 ) ) - .getSingleResult(); - - Assert.assertTrue( TestTools.checkCollection( result, site1 ) ); - Assert.assertEquals( revisionType, RevisionType.DEL ); + public void testEntitiesRemovedAtRevision(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + StrIntTestEntity site1 = new StrIntTestEntity( null, null, id1 ); + + List result = AuditReaderFactory.get( em ).createQuery() + .forEntitiesModifiedAtRevision( StrIntTestEntity.class, 4 ) + .getResultList(); + RevisionType revisionType = (RevisionType) AuditReaderFactory.get( em ).createQuery().forEntitiesModifiedAtRevision( + StrIntTestEntity.class, + 4 + ) + .addProjection( AuditEntity.revisionType() ).add( AuditEntity.id().eq( id1 ) ) + .getSingleResult(); + + assertTrue( TestTools.checkCollection( result, site1 ) ); + assertEquals( RevisionType.DEL, revisionType ); + } ); } @Test - public void testEntityNotModifiedAtRevision() { - List result = getAuditReader().createQuery().forEntitiesModifiedAtRevision( StrIntTestEntity.class, 3 ) - .add( AuditEntity.id().eq( id1 ) ).getResultList(); - Assert.assertTrue( result.isEmpty() ); + public void testEntityNotModifiedAtRevision(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + List result = AuditReaderFactory.get( em ).createQuery().forEntitiesModifiedAtRevision( StrIntTestEntity.class, 3 ) + .add( AuditEntity.id().eq( id1 ) ).getResultList(); + assertTrue( result.isEmpty() ); + } ); } @Test - public void testNoEntitiesModifiedAtRevision() { - List result = getAuditReader().createQuery() - .forEntitiesModifiedAtRevision( StrIntTestEntity.class, 5 ) - .getResultList(); - Assert.assertTrue( result.isEmpty() ); + public void testNoEntitiesModifiedAtRevision(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + List result = AuditReaderFactory.get( em ).createQuery() + .forEntitiesModifiedAtRevision( StrIntTestEntity.class, 5 ) + .getResultList(); + assertTrue( result.isEmpty() ); + } ); } @Test @JiraKey(value = "HHH-7800") - public void testBetweenInsideDisjunction() { - List result = getAuditReader().createQuery() - .forRevisionsOfEntity( StrIntTestEntity.class, true, true ) - .add( - AuditEntity.disjunction() - .add( AuditEntity.property( "number" ).between( 0, 5 ) ) - .add( AuditEntity.property( "number" ).between( 20, 100 ) ) - ) - .getResultList(); - - for ( Object o : result ) { - StrIntTestEntity entity = (StrIntTestEntity) o; - int number = entity.getNumber(); - Assert.assertTrue( (number >= 0 && number <= 5) || (number >= 20 && number <= 100) ); - } + public void testBetweenInsideDisjunction(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + List result = AuditReaderFactory.get( em ).createQuery() + .forRevisionsOfEntity( StrIntTestEntity.class, true, true ) + .add( + AuditEntity.disjunction() + .add( AuditEntity.property( "number" ).between( 0, 5 ) ) + .add( AuditEntity.property( "number" ).between( 20, 100 ) ) + ) + .getResultList(); + + for ( Object o : result ) { + StrIntTestEntity entity = (StrIntTestEntity) o; + int number = entity.getNumber(); + assertTrue( (number >= 0 && number <= 5) || (number >= 20 && number <= 100) ); + } + } ); } @Test @JiraKey(value = "HHH-8495") - public void testIlike() { - StrIntTestEntity site1 = new StrIntTestEntity( "aBc", 10, id1 ); + public void testIlike(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + StrIntTestEntity site1 = new StrIntTestEntity( "aBc", 10, id1 ); - StrIntTestEntity result = (StrIntTestEntity) getAuditReader().createQuery() - .forRevisionsOfEntity( StrIntTestEntity.class, true, true ) - .add( AuditEntity.property( "str1" ).ilike( "abc" ) ) - .getSingleResult(); + StrIntTestEntity result = (StrIntTestEntity) AuditReaderFactory.get( em ).createQuery() + .forRevisionsOfEntity( StrIntTestEntity.class, true, true ) + .add( AuditEntity.property( "str1" ).ilike( "abc" ) ) + .getSingleResult(); - Assert.assertEquals( site1, result ); + assertEquals( site1, result ); + } ); } @Test @JiraKey(value = "HHH-8495") - public void testIlikeWithMatchMode() { - StrIntTestEntity site1 = new StrIntTestEntity( "aBc", 10, id1 ); + public void testIlikeWithMatchMode(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + StrIntTestEntity site1 = new StrIntTestEntity( "aBc", 10, id1 ); - StrIntTestEntity result = (StrIntTestEntity) getAuditReader().createQuery() - .forRevisionsOfEntity( StrIntTestEntity.class, true, true ) - .add( AuditEntity.property( "str1" ).ilike( "BC", MatchMode.ANYWHERE ) ) - .getSingleResult(); + StrIntTestEntity result = (StrIntTestEntity) AuditReaderFactory.get( em ).createQuery() + .forRevisionsOfEntity( StrIntTestEntity.class, true, true ) + .add( AuditEntity.property( "str1" ).ilike( "BC", MatchMode.ANYWHERE ) ) + .getSingleResult(); - Assert.assertEquals( site1, result ); + assertEquals( site1, result ); + } ); } @Test @JiraKey(value = "HHH-8567") - public void testIdPropertyRestriction() { - StrIntTestEntity ver2 = (StrIntTestEntity) getAuditReader().createQuery() - .forEntitiesAtRevision( StrIntTestEntity.class, 2 ) - .add( AuditEntity.property( "id" ).eq( id2 ) ) - .getSingleResult(); - - Assert.assertEquals( new StrIntTestEntity( "a", 20, id2 ), ver2 ); + public void testIdPropertyRestriction(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + StrIntTestEntity ver2 = (StrIntTestEntity) AuditReaderFactory.get( em ).createQuery() + .forEntitiesAtRevision( StrIntTestEntity.class, 2 ) + .add( AuditEntity.property( "id" ).eq( id2 ) ) + .getSingleResult(); + + assertEquals( new StrIntTestEntity( "a", 20, id2 ), ver2 ); + } ); } @Test @JiraKey(value = "HHH-8567") - public void testMultipleIdPropertyRestriction() { - MulIdTestEntity ver2 = (MulIdTestEntity) getAuditReader().createQuery() - .forEntitiesAtRevision( MulIdTestEntity.class, 2 ) - .add( AuditEntity.property( "id1" ).eq( mulId1.getId1() ) ) - .add( AuditEntity.property( "id2" ).eq( mulId1.getId2() ) ) - .getSingleResult(); - - Assert.assertEquals( new MulIdTestEntity( mulId1.getId1(), mulId1.getId2(), "data" ), ver2 ); + public void testMultipleIdPropertyRestriction(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + MulIdTestEntity ver2 = (MulIdTestEntity) AuditReaderFactory.get( em ).createQuery() + .forEntitiesAtRevision( MulIdTestEntity.class, 2 ) + .add( AuditEntity.property( "id1" ).eq( mulId1.getId1() ) ) + .add( AuditEntity.property( "id2" ).eq( mulId1.getId2() ) ) + .getSingleResult(); + + assertEquals( new MulIdTestEntity( mulId1.getId1(), mulId1.getId2(), "data" ), ver2 ); + } ); } @Test @JiraKey(value = "HHH-8567") - public void testEmbeddedIdPropertyRestriction() { - EmbIdTestEntity ver2 = (EmbIdTestEntity) getAuditReader().createQuery() - .forEntitiesAtRevision( EmbIdTestEntity.class, 2 ) - .add( AuditEntity.property( "id.x" ).eq( embId1.getX() ) ) - .add( AuditEntity.property( "id.y" ).eq( embId1.getY() ) ) - .getSingleResult(); - - Assert.assertEquals( new EmbIdTestEntity( embId1, "something" ), ver2 ); + public void testEmbeddedIdPropertyRestriction(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + EmbIdTestEntity ver2 = (EmbIdTestEntity) AuditReaderFactory.get( em ).createQuery() + .forEntitiesAtRevision( EmbIdTestEntity.class, 2 ) + .add( AuditEntity.property( "id.x" ).eq( embId1.getX() ) ) + .add( AuditEntity.property( "id.y" ).eq( embId1.getY() ) ) + .getSingleResult(); + + assertEquals( new EmbIdTestEntity( embId1, "something" ), ver2 ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/StrictJpaComplianceTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/StrictJpaComplianceTest.java new file mode 100644 index 000000000000..75f4417e1d9d --- /dev/null +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/StrictJpaComplianceTest.java @@ -0,0 +1,60 @@ +/* + * SPDX-License-Identifier: Apache-2.0 + * Copyright Red Hat Inc. and Hibernate Authors + */ +package org.hibernate.orm.test.envers.integration.query; + + +import org.hibernate.cfg.AvailableSettings; +import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.envers.Audited; + +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.Id; +import jakarta.persistence.Table; + +@SuppressWarnings("unchecked") +@Jpa( + annotatedClasses = {StrictJpaComplianceTest.Organization.class}, + integrationSettings = { + @org.hibernate.testing.orm.junit.Setting(name = AvailableSettings.JPA_QUERY_COMPLIANCE, value = "true") + } +) +@EnversTest +public class StrictJpaComplianceTest { + + @Test + public void testIt(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + AuditReaderFactory.get( em ).getRevisions( Organization.class, 1 ); + } ); + } + + /** + * @author Madhumita Sadhukhan + */ + @Entity + @Table(name = "ORG") + public static class Organization { + + @Id + @GeneratedValue + @Audited + private int id; + + @Audited + @Column(name = "ORG_NAME") + private String name; + + public Organization() { + } + + } +} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/embeddables/EmbeddableQuery.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/embeddables/EmbeddableQuery.java index 70f104a2d90e..391499a06511 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/embeddables/EmbeddableQuery.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/embeddables/EmbeddableQuery.java @@ -4,20 +4,21 @@ */ package org.hibernate.orm.test.envers.integration.query.embeddables; -import java.util.List; - -import jakarta.persistence.EntityManager; - +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.exception.AuditException; import org.hibernate.envers.query.AuditEntity; import org.hibernate.envers.query.AuditQuery; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; +import org.hibernate.testing.orm.junit.Jpa; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.junit.jupiter.api.Test; -import static org.hibernate.testing.junit4.ExtraAssertions.assertTyping; -import static org.junit.Assert.assertEquals; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertInstanceOf; /** * Test which supports using {@link AuditEntity} to test equality/inequality @@ -25,81 +26,84 @@ * * @author Chris Cranford */ +@Jpa(annotatedClasses = { + Person.class, + NameInfo.class +}) +@EnversTest @JiraKey(value = "HHH-9178") -public class EmbeddableQuery extends BaseEnversJPAFunctionalTestCase { +public class EmbeddableQuery { private Integer personId; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { Person.class, NameInfo.class }; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getOrCreateEntityManager(); - try { - // Revision 1 - em.getTransaction().begin(); + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + // Revision 1 + this.personId = scope.fromTransaction( entityManager -> { NameInfo ni = new NameInfo( "John", "Doe" ); Person person1 = new Person( "JDOE", ni ); - em.persist( person1 ); - em.getTransaction().commit(); + entityManager.persist( person1 ); + return person1.getId(); + } ); - // Revision 2 - em.getTransaction().begin(); - person1 = em.find( Person.class, person1.getId() ); + // Revision 2 + scope.inTransaction( entityManager -> { + Person person1 = entityManager.find( Person.class, personId ); person1.getNameInfo().setFirstName( "Jane" ); - em.merge( person1 ); - em.getTransaction().commit(); + entityManager.merge( person1 ); + } ); - // Revision 3 - em.getTransaction().begin(); - person1 = em.find( Person.class, person1.getId() ); + // Revision 3 + scope.inTransaction( entityManager -> { + Person person1 = entityManager.find( Person.class, personId ); person1.setName( "JDOE2" ); - em.merge( person1 ); - em.getTransaction().commit(); - - personId = person1.getId(); - } - finally { - em.close(); - } + entityManager.merge( person1 ); + } ); } @Test - public void testRevisionCounts() { - assertEquals( 3, getAuditReader().getRevisions( Person.class, personId ).size() ); + public void testRevisionCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + assertEquals( 3, AuditReaderFactory.get( em ).getRevisions( Person.class, personId ).size() ); + } ); } @Test - public void testAuditQueryUsingEmbeddableEquals() { - final NameInfo nameInfo = new NameInfo( "John", "Doe" ); - final AuditQuery query = getAuditReader().createQuery().forEntitiesAtRevision( Person.class, 1 ); - query.add( AuditEntity.property( "nameInfo" ).eq( nameInfo ) ); - List results = query.getResultList(); - assertEquals( 1, results.size() ); - final Person person = (Person) results.get( 0 ); - assertEquals( nameInfo, person.getNameInfo() ); + public void testAuditQueryUsingEmbeddableEquals(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final NameInfo nameInfo = new NameInfo( "John", "Doe" ); + final AuditQuery query = AuditReaderFactory.get( em ).createQuery() + .forEntitiesAtRevision( Person.class, 1 ); + query.add( AuditEntity.property( "nameInfo" ).eq( nameInfo ) ); + List results = query.getResultList(); + assertEquals( 1, results.size() ); + final Person person = (Person) results.get( 0 ); + assertEquals( nameInfo, person.getNameInfo() ); + } ); } @Test - public void testAuditQueryUsingEmbeddableNotEquals() { - final NameInfo nameInfo = new NameInfo( "Jane", "Doe" ); - final AuditQuery query = getAuditReader().createQuery().forEntitiesAtRevision( Person.class, 1 ); - query.add( AuditEntity.property( "nameInfo" ).ne( nameInfo ) ); - assertEquals( 0, query.getResultList().size() ); + public void testAuditQueryUsingEmbeddableNotEquals(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final NameInfo nameInfo = new NameInfo( "Jane", "Doe" ); + final AuditQuery query = AuditReaderFactory.get( em ).createQuery() + .forEntitiesAtRevision( Person.class, 1 ); + query.add( AuditEntity.property( "nameInfo" ).ne( nameInfo ) ); + assertEquals( 0, query.getResultList().size() ); + } ); } @Test - public void testAuditQueryUsingEmbeddableNonEqualityCheck() { - try { - final NameInfo nameInfo = new NameInfo( "John", "Doe" ); - final AuditQuery query = getAuditReader().createQuery().forEntitiesAtRevision( Person.class, 1 ); - query.add( AuditEntity.property( "nameInfo" ).le( nameInfo ) ); - } - catch ( Exception ex ) { - assertTyping( AuditException.class, ex ); - } + public void testAuditQueryUsingEmbeddableNonEqualityCheck(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + try { + final NameInfo nameInfo = new NameInfo( "John", "Doe" ); + final AuditQuery query = AuditReaderFactory.get( em ).createQuery() + .forEntitiesAtRevision( Person.class, 1 ); + query.add( AuditEntity.property( "nameInfo" ).le( nameInfo ) ); + } + catch (Exception ex) { + assertInstanceOf( AuditException.class, ex ); + } + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/ids/EmbIdOneToManyQuery.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/ids/EmbIdOneToManyQuery.java index 7c1e8aed7bd9..1ea358bdd449 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/ids/EmbIdOneToManyQuery.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/ids/EmbIdOneToManyQuery.java @@ -4,217 +4,221 @@ */ package org.hibernate.orm.test.envers.integration.query.ids; -import java.util.HashSet; -import java.util.List; -import java.util.Set; -import jakarta.persistence.EntityManager; - +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.query.AuditEntity; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; import org.hibernate.orm.test.envers.entities.ids.EmbId; import org.hibernate.orm.test.envers.entities.onetomany.ids.SetRefEdEmbIdEntity; import org.hibernate.orm.test.envers.entities.onetomany.ids.SetRefIngEmbIdEntity; import org.hibernate.orm.test.envers.tools.TestTools; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.junit.jupiter.api.Test; -import org.junit.Test; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Adam Warski (adam at warski dot org) */ +@Jpa(annotatedClasses = { + SetRefEdEmbIdEntity.class, + SetRefIngEmbIdEntity.class +}) +@EnversTest @SuppressWarnings("unchecked") -public class EmbIdOneToManyQuery extends BaseEnversJPAFunctionalTestCase { +public class EmbIdOneToManyQuery { private EmbId id1; private EmbId id2; private EmbId id3; private EmbId id4; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {SetRefEdEmbIdEntity.class, SetRefIngEmbIdEntity.class}; - } - - @Test - @Priority(10) - public void initData() { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { id1 = new EmbId( 0, 1 ); id2 = new EmbId( 10, 11 ); id3 = new EmbId( 20, 21 ); id4 = new EmbId( 30, 31 ); // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - - SetRefIngEmbIdEntity refIng1 = new SetRefIngEmbIdEntity( id1, "x", null ); - SetRefIngEmbIdEntity refIng2 = new SetRefIngEmbIdEntity( id2, "y", null ); - - em.persist( refIng1 ); - em.persist( refIng2 ); + scope.inTransaction( entityManager -> { + SetRefIngEmbIdEntity refIng1 = new SetRefIngEmbIdEntity( id1, "x", null ); + SetRefIngEmbIdEntity refIng2 = new SetRefIngEmbIdEntity( id2, "y", null ); - em.getTransaction().commit(); + entityManager.persist( refIng1 ); + entityManager.persist( refIng2 ); + } ); // Revision 2 - em.getTransaction().begin(); + scope.inTransaction( entityManager -> { + SetRefEdEmbIdEntity refEd3 = new SetRefEdEmbIdEntity( id3, "a" ); + SetRefEdEmbIdEntity refEd4 = new SetRefEdEmbIdEntity( id4, "a" ); - SetRefEdEmbIdEntity refEd3 = new SetRefEdEmbIdEntity( id3, "a" ); - SetRefEdEmbIdEntity refEd4 = new SetRefEdEmbIdEntity( id4, "a" ); + entityManager.persist( refEd3 ); + entityManager.persist( refEd4 ); - em.persist( refEd3 ); - em.persist( refEd4 ); + SetRefIngEmbIdEntity refIng1 = entityManager.find( SetRefIngEmbIdEntity.class, id1 ); + SetRefIngEmbIdEntity refIng2 = entityManager.find( SetRefIngEmbIdEntity.class, id2 ); - refIng1 = em.find( SetRefIngEmbIdEntity.class, id1 ); - refIng2 = em.find( SetRefIngEmbIdEntity.class, id2 ); - - refIng1.setReference( refEd3 ); - refIng2.setReference( refEd4 ); - - em.getTransaction().commit(); + refIng1.setReference( refEd3 ); + refIng2.setReference( refEd4 ); + } ); // Revision 3 - em.getTransaction().begin(); - - refEd3 = em.find( SetRefEdEmbIdEntity.class, id3 ); - refIng2 = em.find( SetRefIngEmbIdEntity.class, id2 ); - refIng2.setReference( refEd3 ); - - em.getTransaction().commit(); + scope.inTransaction( entityManager -> { + SetRefEdEmbIdEntity refEd3 = entityManager.find( SetRefEdEmbIdEntity.class, id3 ); + SetRefIngEmbIdEntity refIng2 = entityManager.find( SetRefIngEmbIdEntity.class, id2 ); + refIng2.setReference( refEd3 ); + } ); } @Test - public void testEntitiesReferencedToId3() { - Set rev1_related = new HashSet( - getAuditReader().createQuery() - .forEntitiesAtRevision( SetRefIngEmbIdEntity.class, 1 ) - .add( AuditEntity.relatedId( "reference" ).eq( id3 ) ) - .getResultList() - ); - - Set rev1 = new HashSet( - getAuditReader().createQuery() - .forEntitiesAtRevision( SetRefIngEmbIdEntity.class, 1 ) - .add( AuditEntity.property( "reference" ).eq( new SetRefEdEmbIdEntity( id3, null ) ) ) - .getResultList() - ); - - Set rev2_related = new HashSet( - getAuditReader().createQuery() - .forEntitiesAtRevision( SetRefIngEmbIdEntity.class, 2 ) - .add( AuditEntity.relatedId( "reference" ).eq( id3 ) ) - .getResultList() - ); - - Set rev2 = new HashSet( - getAuditReader().createQuery() - .forEntitiesAtRevision( SetRefIngEmbIdEntity.class, 2 ) - .add( AuditEntity.property( "reference" ).eq( new SetRefEdEmbIdEntity( id3, null ) ) ) - .getResultList() - ); - - Set rev3_related = new HashSet( - getAuditReader().createQuery() - .forEntitiesAtRevision( SetRefIngEmbIdEntity.class, 3 ) - .add( AuditEntity.relatedId( "reference" ).eq( id3 ) ) - .getResultList() - ); - - Set rev3 = new HashSet( - getAuditReader().createQuery() - .forEntitiesAtRevision( SetRefIngEmbIdEntity.class, 3 ) - .add( AuditEntity.property( "reference" ).eq( new SetRefEdEmbIdEntity( id3, null ) ) ) - .getResultList() - ); - - assert rev1.equals( rev1_related ); - assert rev2.equals( rev2_related ); - assert rev3.equals( rev3_related ); - - assert rev1.equals( TestTools.makeSet() ); - assert rev2.equals( TestTools.makeSet( new SetRefIngEmbIdEntity( id1, "x", null ) ) ); - assert rev3.equals( - TestTools.makeSet( - new SetRefIngEmbIdEntity( id1, "x", null ), - new SetRefIngEmbIdEntity( id2, "y", null ) - ) - ); + public void testEntitiesReferencedToId3(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + Set rev1_related = new HashSet( + AuditReaderFactory.get( em ).createQuery() + .forEntitiesAtRevision( SetRefIngEmbIdEntity.class, 1 ) + .add( AuditEntity.relatedId( "reference" ).eq( id3 ) ) + .getResultList() + ); + + Set rev1 = new HashSet( + AuditReaderFactory.get( em ).createQuery() + .forEntitiesAtRevision( SetRefIngEmbIdEntity.class, 1 ) + .add( AuditEntity.property( "reference" ).eq( new SetRefEdEmbIdEntity( id3, null ) ) ) + .getResultList() + ); + + Set rev2_related = new HashSet( + AuditReaderFactory.get( em ).createQuery() + .forEntitiesAtRevision( SetRefIngEmbIdEntity.class, 2 ) + .add( AuditEntity.relatedId( "reference" ).eq( id3 ) ) + .getResultList() + ); + + Set rev2 = new HashSet( + AuditReaderFactory.get( em ).createQuery() + .forEntitiesAtRevision( SetRefIngEmbIdEntity.class, 2 ) + .add( AuditEntity.property( "reference" ).eq( new SetRefEdEmbIdEntity( id3, null ) ) ) + .getResultList() + ); + + Set rev3_related = new HashSet( + AuditReaderFactory.get( em ).createQuery() + .forEntitiesAtRevision( SetRefIngEmbIdEntity.class, 3 ) + .add( AuditEntity.relatedId( "reference" ).eq( id3 ) ) + .getResultList() + ); + + Set rev3 = new HashSet( + AuditReaderFactory.get( em ).createQuery() + .forEntitiesAtRevision( SetRefIngEmbIdEntity.class, 3 ) + .add( AuditEntity.property( "reference" ).eq( new SetRefEdEmbIdEntity( id3, null ) ) ) + .getResultList() + ); + + assertEquals( rev1_related, rev1 ); + assertEquals( rev2_related, rev2 ); + assertEquals( rev3_related, rev3 ); + + assertEquals( TestTools.makeSet(), rev1 ); + assertEquals( TestTools.makeSet( new SetRefIngEmbIdEntity( id1, "x", null ) ), rev2 ); + assertEquals( + TestTools.makeSet( + new SetRefIngEmbIdEntity( id1, "x", null ), + new SetRefIngEmbIdEntity( id2, "y", null ) + ), + rev3 + ); + } ); } @Test - public void testEntitiesReferencedToId4() { - Set rev1_related = new HashSet( - getAuditReader().createQuery() - .forEntitiesAtRevision( SetRefIngEmbIdEntity.class, 1 ) - .add( AuditEntity.relatedId( "reference" ).eq( id4 ) ) - .getResultList() - ); - - Set rev2_related = new HashSet( - getAuditReader().createQuery() - .forEntitiesAtRevision( SetRefIngEmbIdEntity.class, 2 ) - .add( AuditEntity.relatedId( "reference" ).eq( id4 ) ) - .getResultList() - ); - - Set rev3_related = new HashSet( - getAuditReader().createQuery() - .forEntitiesAtRevision( SetRefIngEmbIdEntity.class, 3 ) - .add( AuditEntity.relatedId( "reference" ).eq( id4 ) ) - .getResultList() - ); - - assert rev1_related.equals( TestTools.makeSet() ); - assert rev2_related.equals( TestTools.makeSet( new SetRefIngEmbIdEntity( id2, "y", null ) ) ); - assert rev3_related.equals( TestTools.makeSet() ); + public void testEntitiesReferencedToId4(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + Set rev1_related = new HashSet( + AuditReaderFactory.get( em ).createQuery() + .forEntitiesAtRevision( SetRefIngEmbIdEntity.class, 1 ) + .add( AuditEntity.relatedId( "reference" ).eq( id4 ) ) + .getResultList() + ); + + Set rev2_related = new HashSet( + AuditReaderFactory.get( em ).createQuery() + .forEntitiesAtRevision( SetRefIngEmbIdEntity.class, 2 ) + .add( AuditEntity.relatedId( "reference" ).eq( id4 ) ) + .getResultList() + ); + + Set rev3_related = new HashSet( + AuditReaderFactory.get( em ).createQuery() + .forEntitiesAtRevision( SetRefIngEmbIdEntity.class, 3 ) + .add( AuditEntity.relatedId( "reference" ).eq( id4 ) ) + .getResultList() + ); + + assertEquals( TestTools.makeSet(), rev1_related ); + assertEquals( TestTools.makeSet( new SetRefIngEmbIdEntity( id2, "y", null ) ), rev2_related ); + assertEquals( TestTools.makeSet(), rev3_related ); + } ); } @Test - public void testEntitiesReferencedByIng1ToId3() { - List rev1_related = getAuditReader().createQuery() - .forEntitiesAtRevision( SetRefIngEmbIdEntity.class, 1 ) - .add( AuditEntity.relatedId( "reference" ).eq( id3 ) ) - .add( AuditEntity.id().eq( id1 ) ) - .getResultList(); - - Object rev2_related = getAuditReader().createQuery() - .forEntitiesAtRevision( SetRefIngEmbIdEntity.class, 2 ) - .add( AuditEntity.relatedId( "reference" ).eq( id3 ) ) - .add( AuditEntity.id().eq( id1 ) ) - .getSingleResult(); - - Object rev3_related = getAuditReader().createQuery() - .forEntitiesAtRevision( SetRefIngEmbIdEntity.class, 3 ) - .add( AuditEntity.relatedId( "reference" ).eq( id3 ) ) - .add( AuditEntity.id().eq( id1 ) ) - .getSingleResult(); - - assert rev1_related.size() == 0; - assert rev2_related.equals( new SetRefIngEmbIdEntity( id1, "x", null ) ); - assert rev3_related.equals( new SetRefIngEmbIdEntity( id1, "x", null ) ); + public void testEntitiesReferencedByIng1ToId3(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + List rev1_related = AuditReaderFactory.get( em ).createQuery() + .forEntitiesAtRevision( SetRefIngEmbIdEntity.class, 1 ) + .add( AuditEntity.relatedId( "reference" ).eq( id3 ) ) + .add( AuditEntity.id().eq( id1 ) ) + .getResultList(); + + Object rev2_related = AuditReaderFactory.get( em ).createQuery() + .forEntitiesAtRevision( SetRefIngEmbIdEntity.class, 2 ) + .add( AuditEntity.relatedId( "reference" ).eq( id3 ) ) + .add( AuditEntity.id().eq( id1 ) ) + .getSingleResult(); + + Object rev3_related = AuditReaderFactory.get( em ).createQuery() + .forEntitiesAtRevision( SetRefIngEmbIdEntity.class, 3 ) + .add( AuditEntity.relatedId( "reference" ).eq( id3 ) ) + .add( AuditEntity.id().eq( id1 ) ) + .getSingleResult(); + + assertEquals( 0, rev1_related.size() ); + assertEquals( new SetRefIngEmbIdEntity( id1, "x", null ), rev2_related ); + assertEquals( new SetRefIngEmbIdEntity( id1, "x", null ), rev3_related ); + } ); } @Test - public void testEntitiesReferencedByIng2ToId3() { - List rev1_related = getAuditReader().createQuery() - .forEntitiesAtRevision( SetRefIngEmbIdEntity.class, 1 ) - .add( AuditEntity.relatedId( "reference" ).eq( id3 ) ) - .add( AuditEntity.id().eq( id2 ) ) - .getResultList(); - - List rev2_related = getAuditReader().createQuery() - .forEntitiesAtRevision( SetRefIngEmbIdEntity.class, 2 ) - .add( AuditEntity.relatedId( "reference" ).eq( id3 ) ) - .add( AuditEntity.id().eq( id2 ) ) - .getResultList(); - - Object rev3_related = getAuditReader().createQuery() - .forEntitiesAtRevision( SetRefIngEmbIdEntity.class, 3 ) - .add( AuditEntity.relatedId( "reference" ).eq( id3 ) ) - .add( AuditEntity.id().eq( id2 ) ) - .getSingleResult(); - - assert rev1_related.size() == 0; - assert rev2_related.size() == 0; - assert rev3_related.equals( new SetRefIngEmbIdEntity( id2, "y", null ) ); + public void testEntitiesReferencedByIng2ToId3(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + List rev1_related = AuditReaderFactory.get( em ).createQuery() + .forEntitiesAtRevision( SetRefIngEmbIdEntity.class, 1 ) + .add( AuditEntity.relatedId( "reference" ).eq( id3 ) ) + .add( AuditEntity.id().eq( id2 ) ) + .getResultList(); + + List rev2_related = AuditReaderFactory.get( em ).createQuery() + .forEntitiesAtRevision( SetRefIngEmbIdEntity.class, 2 ) + .add( AuditEntity.relatedId( "reference" ).eq( id3 ) ) + .add( AuditEntity.id().eq( id2 ) ) + .getResultList(); + + Object rev3_related = AuditReaderFactory.get( em ).createQuery() + .forEntitiesAtRevision( SetRefIngEmbIdEntity.class, 3 ) + .add( AuditEntity.relatedId( "reference" ).eq( id3 ) ) + .add( AuditEntity.id().eq( id2 ) ) + .getSingleResult(); + + assertEquals( 0, rev1_related.size() ); + assertEquals( 0, rev2_related.size() ); + assertEquals( new SetRefIngEmbIdEntity( id2, "y", null ), rev3_related ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/query/ids/EmbeddedIdRelatedIdQueryTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/ids/EmbeddedIdRelatedIdQueryTest.java similarity index 64% rename from hibernate-envers/src/test/java/org/hibernate/envers/test/integration/query/ids/EmbeddedIdRelatedIdQueryTest.java rename to hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/ids/EmbeddedIdRelatedIdQueryTest.java index 90b809100f71..e8c80bcd601e 100644 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/query/ids/EmbeddedIdRelatedIdQueryTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/ids/EmbeddedIdRelatedIdQueryTest.java @@ -2,45 +2,45 @@ * SPDX-License-Identifier: Apache-2.0 * Copyright Red Hat Inc. and Hibernate Authors */ -package org.hibernate.envers.test.integration.query.ids; - -import java.io.Serializable; -import java.util.Arrays; -import java.util.List; +package org.hibernate.orm.test.envers.integration.query.ids; import jakarta.persistence.Embeddable; import jakarta.persistence.EmbeddedId; import jakarta.persistence.Entity; import jakarta.persistence.Id; import jakarta.persistence.ManyToOne; - +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.Audited; import org.hibernate.envers.RevisionType; import org.hibernate.envers.query.AuditEntity; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.junit.Test; - +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; -import org.hibernate.testing.transaction.TransactionUtil; +import org.hibernate.testing.orm.junit.Jpa; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.junit.jupiter.api.Test; + +import java.io.Serializable; +import java.util.Arrays; +import java.util.List; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNull; /** * @author Chris Cranford */ +@Jpa(annotatedClasses = { + EmbeddedIdRelatedIdQueryTest.Person.class, + EmbeddedIdRelatedIdQueryTest.Document.class, + EmbeddedIdRelatedIdQueryTest.PersonDocument.class +}) +@EnversTest @JiraKey(value = "HHH-11748") -public class EmbeddedIdRelatedIdQueryTest extends BaseEnversJPAFunctionalTestCase { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { Person.class, Document.class, PersonDocument.class }; - } - - @Test - @Priority(10) - public void initData() { - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { +public class EmbeddedIdRelatedIdQueryTest { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + scope.inTransaction( entityManager -> { final Person person = new Person( 1, "Chris" ); final Document document = new Document( 1, "DL" ); final PersonDocument pd = new PersonDocument( person, document ); @@ -49,7 +49,7 @@ public void initData() { entityManager.persist( pd ); } ); - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { + scope.inTransaction( entityManager -> { final Person person = entityManager.find( Person.class, 1 ); final Document document = new Document( 2, "Passport" ); final PersonDocument pd = new PersonDocument( person, document ); @@ -57,11 +57,12 @@ public void initData() { entityManager.persist( pd ); } ); - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { + scope.inTransaction( entityManager -> { final Person person = entityManager.find( Person.class, 1 ); final Document document = entityManager.find( Document.class, 1 ); final PersonDocument pd = entityManager - .createQuery( "FROM PersonDocument WHERE id.person.id = :person AND id.document.id = :document", PersonDocument.class ) + .createQuery( "FROM PersonDocument WHERE id.person.id = :person AND id.document.id = :document", + PersonDocument.class ) .setParameter( "person", person.getId() ) .setParameter( "document", document.getId() ) .getSingleResult(); @@ -72,53 +73,59 @@ public void initData() { } @Test - public void testRevisionCounts() { - assertEquals( Arrays.asList( 1 ), getAuditReader().getRevisions( Person.class, 1 ) ); - assertEquals( Arrays.asList( 1, 3 ), getAuditReader().getRevisions( Document.class, 1 ) ); - assertEquals( Arrays.asList( 2 ), getAuditReader().getRevisions( Document.class, 2 ) ); + public void testRevisionCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + assertEquals( Arrays.asList( 1 ), AuditReaderFactory.get( em ).getRevisions( Person.class, 1 ) ); + assertEquals( Arrays.asList( 1, 3 ), AuditReaderFactory.get( em ).getRevisions( Document.class, 1 ) ); + assertEquals( Arrays.asList( 2 ), AuditReaderFactory.get( em ).getRevisions( Document.class, 2 ) ); + } ); } @Test - public void testRelatedIdQueries() { - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - List results = getAuditReader().createQuery().forRevisionsOfEntity( PersonDocument.class, false, true ) + public void testRelatedIdQueries(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + List results = AuditReaderFactory.get( em ).createQuery() + .forRevisionsOfEntity( PersonDocument.class, false, true ) .add( AuditEntity.relatedId( "id.person" ).eq( 1 ) ) .add( AuditEntity.revisionNumber().eq( 1 ) ) .getResultList(); assertEquals( 1, results.size() ); - final Document document = ( (PersonDocument) ( (Object[]) results.get( 0 ) )[0] ).getId().getDocument(); + final Document document = ((PersonDocument) ((Object[]) results.get( 0 ))[0]).getId().getDocument(); assertEquals( "DL", document.getName() ); } ); - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - List results = getAuditReader().createQuery().forRevisionsOfEntity( PersonDocument.class, false, true ) + scope.inEntityManager( em -> { + List results = AuditReaderFactory.get( em ).createQuery() + .forRevisionsOfEntity( PersonDocument.class, false, true ) .add( AuditEntity.relatedId( "id.person" ).eq( 1 ) ) .add( AuditEntity.revisionNumber().eq( 2 ) ) .getResultList(); assertEquals( 1, results.size() ); - final Document document = ( (PersonDocument) ( (Object[]) results.get( 0 ) )[0] ).getId().getDocument(); + final Document document = ((PersonDocument) ((Object[]) results.get( 0 ))[0]).getId().getDocument(); assertEquals( "Passport", document.getName() ); } ); - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - List results = getAuditReader().createQuery().forRevisionsOfEntity( PersonDocument.class, false, true ) + scope.inEntityManager( em -> { + List results = AuditReaderFactory.get( em ).createQuery() + .forRevisionsOfEntity( PersonDocument.class, false, true ) .add( AuditEntity.relatedId( "id.person" ).eq( 1 ) ) .add( AuditEntity.revisionNumber().eq( 3 ) ) .getResultList(); assertEquals( 1, results.size() ); - final Document document = ( (PersonDocument) ( (Object[]) results.get( 0 ) )[0] ).getId().getDocument(); + final Document document = ((PersonDocument) ((Object[]) results.get( 0 ))[0]).getId().getDocument(); assertNull( document.getName() ); } ); - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - List results = getAuditReader().createQuery().forRevisionsOfEntity( PersonDocument.class, false, true ) + scope.inEntityManager( em -> { + List results = AuditReaderFactory.get( em ).createQuery() + .forRevisionsOfEntity( PersonDocument.class, false, true ) .add( AuditEntity.relatedId( "id.document" ).eq( 1 ) ) .getResultList(); assertEquals( 2, results.size() ); for ( Object result : results ) { Object[] row = (Object[]) result; final RevisionType revisionType = (RevisionType) row[2]; - final Document document = ( (PersonDocument) row[0] ).getId().getDocument(); + final Document document = ((PersonDocument) row[0]).getId().getDocument(); if ( RevisionType.ADD.equals( revisionType ) ) { assertEquals( "DL", document.getName() ); } @@ -128,15 +135,16 @@ else if ( RevisionType.DEL.equals( revisionType ) ) { } } ); - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - List results = getAuditReader().createQuery().forRevisionsOfEntity( PersonDocument.class, false, true ) + scope.inEntityManager( em -> { + List results = AuditReaderFactory.get( em ).createQuery() + .forRevisionsOfEntity( PersonDocument.class, false, true ) .add( AuditEntity.relatedId( "id.document" ).eq( 2 ) ) .getResultList(); assertEquals( 1, results.size() ); for ( Object result : results ) { Object[] row = (Object[]) result; final RevisionType revisionType = (RevisionType) row[2]; - final Document document = ( (PersonDocument) row[0] ).getId().getDocument(); + final Document document = ((PersonDocument) row[0]).getId().getDocument(); assertEquals( RevisionType.ADD, revisionType ); assertEquals( "Passport", document.getName() ); } diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/query/ids/IdClassRelatedIdQueryTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/ids/IdClassRelatedIdQueryTest.java similarity index 71% rename from hibernate-envers/src/test/java/org/hibernate/envers/test/integration/query/ids/IdClassRelatedIdQueryTest.java rename to hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/ids/IdClassRelatedIdQueryTest.java index b512542e395a..5ac2674559db 100644 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/query/ids/IdClassRelatedIdQueryTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/ids/IdClassRelatedIdQueryTest.java @@ -2,7 +2,7 @@ * SPDX-License-Identifier: Apache-2.0 * Copyright Red Hat Inc. and Hibernate Authors */ -package org.hibernate.envers.test.integration.query.ids; +package org.hibernate.orm.test.envers.integration.query.ids; import java.io.Serializable; import java.util.Arrays; @@ -14,32 +14,33 @@ import jakarta.persistence.ManyToOne; import org.hibernate.envers.Audited; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.RevisionType; import org.hibernate.envers.query.AuditEntity; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.junit.Test; - +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; -import org.hibernate.testing.transaction.TransactionUtil; +import org.hibernate.testing.orm.junit.Jpa; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.junit.jupiter.api.Test; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNull; /** * @author Chris Cranford */ +@Jpa(annotatedClasses = { + IdClassRelatedIdQueryTest.Person.class, + IdClassRelatedIdQueryTest.Document.class, + IdClassRelatedIdQueryTest.PersonDocument.class +}) +@EnversTest @JiraKey(value = "HHH-11748") -public class IdClassRelatedIdQueryTest extends BaseEnversJPAFunctionalTestCase { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { Person.class, Document.class, PersonDocument.class }; - } - - @Test - @Priority(10) - public void initData() { - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { +public class IdClassRelatedIdQueryTest { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + scope.inTransaction( entityManager -> { final Person person = new Person( 1, "Chris" ); final Document document = new Document( 1, "DL" ); final PersonDocument pd = new PersonDocument( person, document ); @@ -48,7 +49,7 @@ public void initData() { entityManager.persist( pd ); } ); - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { + scope.inTransaction( entityManager -> { final Person person = entityManager.find( Person.class, 1 ); final Document document = new Document( 2, "Passport" ); final PersonDocument pd = new PersonDocument( person, document ); @@ -56,7 +57,7 @@ public void initData() { entityManager.persist( pd ); } ); - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { + scope.inTransaction( entityManager -> { final Person person = entityManager.find( Person.class, 1 ); final Document document = entityManager.find( Document.class, 1 ); final PersonDocument pd = entityManager @@ -71,16 +72,18 @@ public void initData() { } @Test - public void testRevisionCounts() { - assertEquals( Arrays.asList( 1 ), getAuditReader().getRevisions( Person.class, 1 ) ); - assertEquals( Arrays.asList( 1, 3 ), getAuditReader().getRevisions( Document.class, 1 ) ); - assertEquals( Arrays.asList( 2 ), getAuditReader().getRevisions( Document.class, 2 ) ); + public void testRevisionCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + assertEquals( Arrays.asList( 1 ), AuditReaderFactory.get( em ).getRevisions( Person.class, 1 ) ); + assertEquals( Arrays.asList( 1, 3 ), AuditReaderFactory.get( em ).getRevisions( Document.class, 1 ) ); + assertEquals( Arrays.asList( 2 ), AuditReaderFactory.get( em ).getRevisions( Document.class, 2 ) ); + } ); } @Test - public void testRelatedIdQueries() { - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - List results = getAuditReader().createQuery().forRevisionsOfEntity( PersonDocument.class, false, true ) + public void testRelatedIdQueries(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + List results = AuditReaderFactory.get( em ).createQuery().forRevisionsOfEntity( PersonDocument.class, false, true ) .add( AuditEntity.relatedId( "person" ).eq( 1 ) ) .add( AuditEntity.revisionNumber().eq( 1 ) ) .getResultList(); @@ -89,8 +92,8 @@ public void testRelatedIdQueries() { assertEquals( "DL", document.getName() ); } ); - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - List results = getAuditReader().createQuery().forRevisionsOfEntity( PersonDocument.class, false, true ) + scope.inEntityManager( em -> { + List results = AuditReaderFactory.get( em ).createQuery().forRevisionsOfEntity( PersonDocument.class, false, true ) .add( AuditEntity.relatedId( "person" ).eq( 1 ) ) .add( AuditEntity.revisionNumber().eq( 2 ) ) .getResultList(); @@ -99,8 +102,8 @@ public void testRelatedIdQueries() { assertEquals( "Passport", document.getName() ); } ); - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - List results = getAuditReader().createQuery().forRevisionsOfEntity( PersonDocument.class, false, true ) + scope.inEntityManager( em -> { + List results = AuditReaderFactory.get( em ).createQuery().forRevisionsOfEntity( PersonDocument.class, false, true ) .add( AuditEntity.relatedId( "person" ).eq( 1 ) ) .add( AuditEntity.revisionNumber().eq( 3 ) ) .getResultList(); @@ -109,8 +112,8 @@ public void testRelatedIdQueries() { assertNull( document.getName() ); } ); - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - List results = getAuditReader().createQuery().forRevisionsOfEntity( PersonDocument.class, false, true ) + scope.inEntityManager( em -> { + List results = AuditReaderFactory.get( em ).createQuery().forRevisionsOfEntity( PersonDocument.class, false, true ) .add( AuditEntity.relatedId( "document" ).eq( 1 ) ) .getResultList(); assertEquals( 2, results.size() ); @@ -127,8 +130,8 @@ else if ( RevisionType.DEL.equals( revisionType ) ) { } } ); - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - List results = getAuditReader().createQuery().forRevisionsOfEntity( PersonDocument.class, false, true ) + scope.inEntityManager( em -> { + List results = AuditReaderFactory.get( em ).createQuery().forRevisionsOfEntity( PersonDocument.class, false, true ) .add( AuditEntity.relatedId( "document" ).eq( 2 ) ) .getResultList(); assertEquals( 1, results.size() ); diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/ids/MulIdOneToManyQuery.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/ids/MulIdOneToManyQuery.java index 12c684ef12c6..40e44fe54996 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/ids/MulIdOneToManyQuery.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/ids/MulIdOneToManyQuery.java @@ -7,211 +7,212 @@ import java.util.HashSet; import java.util.List; import java.util.Set; -import jakarta.persistence.EntityManager; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.query.AuditEntity; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; import org.hibernate.orm.test.envers.entities.ids.MulId; import org.hibernate.orm.test.envers.entities.onetomany.ids.SetRefEdMulIdEntity; import org.hibernate.orm.test.envers.entities.onetomany.ids.SetRefIngMulIdEntity; import org.hibernate.orm.test.envers.tools.TestTools; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.junit.jupiter.api.Test; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Adam Warski (adam at warski dot org) */ @SuppressWarnings("unchecked") -public class MulIdOneToManyQuery extends BaseEnversJPAFunctionalTestCase { +@Jpa(annotatedClasses = { + SetRefEdMulIdEntity.class, + SetRefIngMulIdEntity.class +}) +@EnversTest +public class MulIdOneToManyQuery { private MulId id1; private MulId id2; private MulId id3; private MulId id4; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {SetRefEdMulIdEntity.class, SetRefIngMulIdEntity.class}; - } - - @Test - @Priority(10) - public void initData() { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { id1 = new MulId( 0, 1 ); id2 = new MulId( 10, 11 ); id3 = new MulId( 20, 21 ); id4 = new MulId( 30, 31 ); // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - - SetRefIngMulIdEntity refIng1 = new SetRefIngMulIdEntity( id1, "x", null ); - SetRefIngMulIdEntity refIng2 = new SetRefIngMulIdEntity( id2, "y", null ); + scope.inTransaction( em -> { + SetRefIngMulIdEntity refIng1 = new SetRefIngMulIdEntity( id1, "x", null ); + SetRefIngMulIdEntity refIng2 = new SetRefIngMulIdEntity( id2, "y", null ); - em.persist( refIng1 ); - em.persist( refIng2 ); - - em.getTransaction().commit(); + em.persist( refIng1 ); + em.persist( refIng2 ); + } ); // Revision 2 - em.getTransaction().begin(); - - SetRefEdMulIdEntity refEd3 = new SetRefEdMulIdEntity( id3, "a" ); - SetRefEdMulIdEntity refEd4 = new SetRefEdMulIdEntity( id4, "a" ); - - em.persist( refEd3 ); - em.persist( refEd4 ); + scope.inTransaction( em -> { + SetRefEdMulIdEntity refEd3 = new SetRefEdMulIdEntity( id3, "a" ); + SetRefEdMulIdEntity refEd4 = new SetRefEdMulIdEntity( id4, "a" ); - refIng1 = em.find( SetRefIngMulIdEntity.class, id1 ); - refIng2 = em.find( SetRefIngMulIdEntity.class, id2 ); + em.persist( refEd3 ); + em.persist( refEd4 ); - refIng1.setReference( refEd3 ); - refIng2.setReference( refEd4 ); + SetRefIngMulIdEntity refIng1 = em.find( SetRefIngMulIdEntity.class, id1 ); + SetRefIngMulIdEntity refIng2 = em.find( SetRefIngMulIdEntity.class, id2 ); - em.getTransaction().commit(); + refIng1.setReference( refEd3 ); + refIng2.setReference( refEd4 ); + } ); // Revision 3 - em.getTransaction().begin(); - - refEd3 = em.find( SetRefEdMulIdEntity.class, id3 ); - refIng2 = em.find( SetRefIngMulIdEntity.class, id2 ); - refIng2.setReference( refEd3 ); - - em.getTransaction().commit(); + scope.inTransaction( em -> { + SetRefEdMulIdEntity refEd3 = em.find( SetRefEdMulIdEntity.class, id3 ); + SetRefIngMulIdEntity refIng2 = em.find( SetRefIngMulIdEntity.class, id2 ); + refIng2.setReference( refEd3 ); + } ); } @Test - public void testEntitiesReferencedToId3() { - Set rev1_related = new HashSet( - getAuditReader().createQuery() - .forEntitiesAtRevision( SetRefIngMulIdEntity.class, 1 ) - .add( AuditEntity.relatedId( "reference" ).eq( id3 ) ) - .getResultList() - ); - - Set rev1 = new HashSet( - getAuditReader().createQuery() - .forEntitiesAtRevision( SetRefIngMulIdEntity.class, 1 ) - .add( AuditEntity.property( "reference" ).eq( new SetRefEdMulIdEntity( id3, null ) ) ) - .getResultList() - ); - - Set rev2_related = new HashSet( - getAuditReader().createQuery() - .forEntitiesAtRevision( SetRefIngMulIdEntity.class, 2 ) - .add( AuditEntity.relatedId( "reference" ).eq( id3 ) ) - .getResultList() - ); - - Set rev2 = new HashSet( - getAuditReader().createQuery() - .forEntitiesAtRevision( SetRefIngMulIdEntity.class, 2 ) - .add( AuditEntity.property( "reference" ).eq( new SetRefEdMulIdEntity( id3, null ) ) ) - .getResultList() - ); - - Set rev3_related = new HashSet( - getAuditReader().createQuery() - .forEntitiesAtRevision( SetRefIngMulIdEntity.class, 3 ) - .add( AuditEntity.relatedId( "reference" ).eq( id3 ) ) - .getResultList() - ); - - Set rev3 = new HashSet( - getAuditReader().createQuery() - .forEntitiesAtRevision( SetRefIngMulIdEntity.class, 3 ) - .add( AuditEntity.property( "reference" ).eq( new SetRefEdMulIdEntity( id3, null ) ) ) - .getResultList() - ); - assertEquals( rev1, rev1_related ); - assertEquals( rev2, rev2_related ); - assertEquals( rev3, rev3_related ); - assertEquals( rev1, TestTools.makeSet() ); - assertEquals( rev2, TestTools.makeSet( new SetRefIngMulIdEntity( id1, "x", null ) ) ); - assertEquals( - rev3, TestTools.makeSet( - new SetRefIngMulIdEntity( id1, "x", null ), - new SetRefIngMulIdEntity( id2, "y", null ) - ) - ); + public void testEntitiesReferencedToId3(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + Set rev1_related = new HashSet( + AuditReaderFactory.get( em ).createQuery() + .forEntitiesAtRevision( SetRefIngMulIdEntity.class, 1 ) + .add( AuditEntity.relatedId( "reference" ).eq( id3 ) ) + .getResultList() + ); + + Set rev1 = new HashSet( + AuditReaderFactory.get( em ).createQuery() + .forEntitiesAtRevision( SetRefIngMulIdEntity.class, 1 ) + .add( AuditEntity.property( "reference" ).eq( new SetRefEdMulIdEntity( id3, null ) ) ) + .getResultList() + ); + + Set rev2_related = new HashSet( + AuditReaderFactory.get( em ).createQuery() + .forEntitiesAtRevision( SetRefIngMulIdEntity.class, 2 ) + .add( AuditEntity.relatedId( "reference" ).eq( id3 ) ) + .getResultList() + ); + + Set rev2 = new HashSet( + AuditReaderFactory.get( em ).createQuery() + .forEntitiesAtRevision( SetRefIngMulIdEntity.class, 2 ) + .add( AuditEntity.property( "reference" ).eq( new SetRefEdMulIdEntity( id3, null ) ) ) + .getResultList() + ); + + Set rev3_related = new HashSet( + AuditReaderFactory.get( em ).createQuery() + .forEntitiesAtRevision( SetRefIngMulIdEntity.class, 3 ) + .add( AuditEntity.relatedId( "reference" ).eq( id3 ) ) + .getResultList() + ); + + Set rev3 = new HashSet( + AuditReaderFactory.get( em ).createQuery() + .forEntitiesAtRevision( SetRefIngMulIdEntity.class, 3 ) + .add( AuditEntity.property( "reference" ).eq( new SetRefEdMulIdEntity( id3, null ) ) ) + .getResultList() + ); + assertEquals( rev1, rev1_related ); + assertEquals( rev2, rev2_related ); + assertEquals( rev3, rev3_related ); + assertEquals( rev1, TestTools.makeSet() ); + assertEquals( rev2, TestTools.makeSet( new SetRefIngMulIdEntity( id1, "x", null ) ) ); + assertEquals( + rev3, TestTools.makeSet( + new SetRefIngMulIdEntity( id1, "x", null ), + new SetRefIngMulIdEntity( id2, "y", null ) + ) + ); + } ); } @Test - public void testEntitiesReferencedToId4() { - Set rev1_related = new HashSet( - getAuditReader().createQuery() - .forEntitiesAtRevision( SetRefIngMulIdEntity.class, 1 ) - .add( AuditEntity.relatedId( "reference" ).eq( id4 ) ) - .getResultList() - ); - - Set rev2_related = new HashSet( - getAuditReader().createQuery() - .forEntitiesAtRevision( SetRefIngMulIdEntity.class, 2 ) - .add( AuditEntity.relatedId( "reference" ).eq( id4 ) ) - .getResultList() - ); - - Set rev3_related = new HashSet( - getAuditReader().createQuery() - .forEntitiesAtRevision( SetRefIngMulIdEntity.class, 3 ) - .add( AuditEntity.relatedId( "reference" ).eq( id4 ) ) - .getResultList() - ); - assertEquals( rev1_related, TestTools.makeSet() ); - assertEquals( rev2_related, TestTools.makeSet( new SetRefIngMulIdEntity( id2, "y", null ) ) ); - assertEquals( rev3_related, TestTools.makeSet() ); + public void testEntitiesReferencedToId4(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + Set rev1_related = new HashSet( + AuditReaderFactory.get( em ).createQuery() + .forEntitiesAtRevision( SetRefIngMulIdEntity.class, 1 ) + .add( AuditEntity.relatedId( "reference" ).eq( id4 ) ) + .getResultList() + ); + + Set rev2_related = new HashSet( + AuditReaderFactory.get( em ).createQuery() + .forEntitiesAtRevision( SetRefIngMulIdEntity.class, 2 ) + .add( AuditEntity.relatedId( "reference" ).eq( id4 ) ) + .getResultList() + ); + + Set rev3_related = new HashSet( + AuditReaderFactory.get( em ).createQuery() + .forEntitiesAtRevision( SetRefIngMulIdEntity.class, 3 ) + .add( AuditEntity.relatedId( "reference" ).eq( id4 ) ) + .getResultList() + ); + assertEquals( rev1_related, TestTools.makeSet() ); + assertEquals( rev2_related, TestTools.makeSet( new SetRefIngMulIdEntity( id2, "y", null ) ) ); + assertEquals( rev3_related, TestTools.makeSet() ); + } ); } @Test - public void testEntitiesReferencedByIng1ToId3() { - List rev1_related = getAuditReader().createQuery() - .forEntitiesAtRevision( SetRefIngMulIdEntity.class, 1 ) - .add( AuditEntity.relatedId( "reference" ).eq( id3 ) ) - .add( AuditEntity.id().eq( id1 ) ) - .getResultList(); - - Object rev2_related = getAuditReader().createQuery() - .forEntitiesAtRevision( SetRefIngMulIdEntity.class, 2 ) - .add( AuditEntity.relatedId( "reference" ).eq( id3 ) ) - .add( AuditEntity.id().eq( id1 ) ) - .getSingleResult(); - - Object rev3_related = getAuditReader().createQuery() - .forEntitiesAtRevision( SetRefIngMulIdEntity.class, 3 ) - .add( AuditEntity.relatedId( "reference" ).eq( id3 ) ) - .add( AuditEntity.id().eq( id1 ) ) - .getSingleResult(); - assertEquals( 0, rev1_related.size() ); - assertEquals( rev2_related, new SetRefIngMulIdEntity( id1, "x", null ) ); - assertEquals( rev3_related, new SetRefIngMulIdEntity( id1, "x", null ) ); + public void testEntitiesReferencedByIng1ToId3(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + List rev1_related = AuditReaderFactory.get( em ).createQuery() + .forEntitiesAtRevision( SetRefIngMulIdEntity.class, 1 ) + .add( AuditEntity.relatedId( "reference" ).eq( id3 ) ) + .add( AuditEntity.id().eq( id1 ) ) + .getResultList(); + + Object rev2_related = AuditReaderFactory.get( em ).createQuery() + .forEntitiesAtRevision( SetRefIngMulIdEntity.class, 2 ) + .add( AuditEntity.relatedId( "reference" ).eq( id3 ) ) + .add( AuditEntity.id().eq( id1 ) ) + .getSingleResult(); + + Object rev3_related = AuditReaderFactory.get( em ).createQuery() + .forEntitiesAtRevision( SetRefIngMulIdEntity.class, 3 ) + .add( AuditEntity.relatedId( "reference" ).eq( id3 ) ) + .add( AuditEntity.id().eq( id1 ) ) + .getSingleResult(); + assertEquals( 0, rev1_related.size() ); + assertEquals( rev2_related, new SetRefIngMulIdEntity( id1, "x", null ) ); + assertEquals( rev3_related, new SetRefIngMulIdEntity( id1, "x", null ) ); + } ); } @Test - public void testEntitiesReferencedByIng2ToId3() { - List rev1_related = getAuditReader().createQuery() - .forEntitiesAtRevision( SetRefIngMulIdEntity.class, 1 ) - .add( AuditEntity.relatedId( "reference" ).eq( id3 ) ) - .add( AuditEntity.id().eq( id2 ) ) - .getResultList(); - - List rev2_related = getAuditReader().createQuery() - .forEntitiesAtRevision( SetRefIngMulIdEntity.class, 2 ) - .add( AuditEntity.relatedId( "reference" ).eq( id3 ) ) - .add( AuditEntity.id().eq( id2 ) ) - .getResultList(); - - Object rev3_related = getAuditReader().createQuery() - .forEntitiesAtRevision( SetRefIngMulIdEntity.class, 3 ) - .add( AuditEntity.relatedId( "reference" ).eq( id3 ) ) - .add( AuditEntity.id().eq( id2 ) ) - .getSingleResult(); - assertEquals( 0, rev1_related.size() ); - assertEquals( 0, rev2_related.size() ); - assertEquals( new SetRefIngMulIdEntity( id2, "y", null ), rev3_related ); + public void testEntitiesReferencedByIng2ToId3(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + List rev1_related = AuditReaderFactory.get( em ).createQuery() + .forEntitiesAtRevision( SetRefIngMulIdEntity.class, 1 ) + .add( AuditEntity.relatedId( "reference" ).eq( id3 ) ) + .add( AuditEntity.id().eq( id2 ) ) + .getResultList(); + + List rev2_related = AuditReaderFactory.get( em ).createQuery() + .forEntitiesAtRevision( SetRefIngMulIdEntity.class, 2 ) + .add( AuditEntity.relatedId( "reference" ).eq( id3 ) ) + .add( AuditEntity.id().eq( id2 ) ) + .getResultList(); + + Object rev3_related = AuditReaderFactory.get( em ).createQuery() + .forEntitiesAtRevision( SetRefIngMulIdEntity.class, 3 ) + .add( AuditEntity.relatedId( "reference" ).eq( id3 ) ) + .add( AuditEntity.id().eq( id2 ) ) + .getSingleResult(); + assertEquals( 0, rev1_related.size() ); + assertEquals( 0, rev2_related.size() ); + assertEquals( new SetRefIngMulIdEntity( id2, "y", null ), rev3_related ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/query/ids/MultipleIdRelatedIdQueryTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/ids/MultipleIdRelatedIdQueryTest.java similarity index 70% rename from hibernate-envers/src/test/java/org/hibernate/envers/test/integration/query/ids/MultipleIdRelatedIdQueryTest.java rename to hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/ids/MultipleIdRelatedIdQueryTest.java index e2e3c5ccc352..5f6c6bfdf165 100644 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/query/ids/MultipleIdRelatedIdQueryTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/ids/MultipleIdRelatedIdQueryTest.java @@ -2,7 +2,7 @@ * SPDX-License-Identifier: Apache-2.0 * Copyright Red Hat Inc. and Hibernate Authors */ -package org.hibernate.envers.test.integration.query.ids; +package org.hibernate.orm.test.envers.integration.query.ids; import java.io.Serializable; import java.util.Arrays; @@ -12,35 +12,35 @@ import jakarta.persistence.Id; import jakarta.persistence.ManyToOne; -import org.hibernate.annotations.processing.Exclude; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.Audited; import org.hibernate.envers.RevisionType; import org.hibernate.envers.query.AuditEntity; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.junit.Test; - +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; -import org.hibernate.testing.transaction.TransactionUtil; +import org.hibernate.testing.orm.junit.Jpa; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.junit.jupiter.api.Test; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNull; /** * @author Chris Cranford */ @JiraKey(value = "HHH-11748") -@Exclude -public class MultipleIdRelatedIdQueryTest extends BaseEnversJPAFunctionalTestCase { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { Person.class, Document.class, PersonDocument.class }; - } - - @Test - @Priority(10) - public void initData() { - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { +@Jpa(annotatedClasses = { + MultipleIdRelatedIdQueryTest.Person.class, + MultipleIdRelatedIdQueryTest.Document.class, + MultipleIdRelatedIdQueryTest.PersonDocument.class +}) +@EnversTest +public class MultipleIdRelatedIdQueryTest { + + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + scope.inTransaction( entityManager -> { final Person person = new Person( 1, "Chris" ); final Document document = new Document( 1, "DL" ); final PersonDocument pd = new PersonDocument( person, document ); @@ -49,7 +49,7 @@ public void initData() { entityManager.persist( pd ); } ); - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { + scope.inTransaction( entityManager -> { final Person person = entityManager.find( Person.class, 1 ); final Document document = new Document( 2, "Passport" ); final PersonDocument pd = new PersonDocument( person, document ); @@ -57,7 +57,7 @@ public void initData() { entityManager.persist( pd ); } ); - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { + scope.inTransaction( entityManager -> { final Person person = entityManager.find( Person.class, 1 ); final Document document = entityManager.find( Document.class, 1 ); final PersonDocument pd = entityManager @@ -72,16 +72,18 @@ public void initData() { } @Test - public void testRevisionCounts() { - assertEquals( Arrays.asList( 1 ), getAuditReader().getRevisions( Person.class, 1 ) ); - assertEquals( Arrays.asList( 1, 3 ), getAuditReader().getRevisions( Document.class, 1 ) ); - assertEquals( Arrays.asList( 2 ), getAuditReader().getRevisions( Document.class, 2 ) ); + public void testRevisionCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + assertEquals( Arrays.asList( 1 ), AuditReaderFactory.get( em ).getRevisions( Person.class, 1 ) ); + assertEquals( Arrays.asList( 1, 3 ), AuditReaderFactory.get( em ).getRevisions( Document.class, 1 ) ); + assertEquals( Arrays.asList( 2 ), AuditReaderFactory.get( em ).getRevisions( Document.class, 2 ) ); + } ); } @Test - public void testRelatedIdQueries() { - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - List results = getAuditReader().createQuery().forRevisionsOfEntity( PersonDocument.class, false, true ) + public void testRelatedIdQueries(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + List results = AuditReaderFactory.get( em ).createQuery().forRevisionsOfEntity( PersonDocument.class, false, true ) .add( AuditEntity.relatedId( "person" ).eq( 1 ) ) .add( AuditEntity.revisionNumber().eq( 1 ) ) .getResultList(); @@ -90,8 +92,8 @@ public void testRelatedIdQueries() { assertEquals( "DL", document.getName() ); } ); - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - List results = getAuditReader().createQuery().forRevisionsOfEntity( PersonDocument.class, false, true ) + scope.inEntityManager( em -> { + List results = AuditReaderFactory.get( em ).createQuery().forRevisionsOfEntity( PersonDocument.class, false, true ) .add( AuditEntity.relatedId( "person" ).eq( 1 ) ) .add( AuditEntity.revisionNumber().eq( 2 ) ) .getResultList(); @@ -100,8 +102,8 @@ public void testRelatedIdQueries() { assertEquals( "Passport", document.getName() ); } ); - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - List results = getAuditReader().createQuery().forRevisionsOfEntity( PersonDocument.class, false, true ) + scope.inEntityManager( em -> { + List results = AuditReaderFactory.get( em ).createQuery().forRevisionsOfEntity( PersonDocument.class, false, true ) .add( AuditEntity.relatedId( "person" ).eq( 1 ) ) .add( AuditEntity.revisionNumber().eq( 3 ) ) .getResultList(); @@ -110,8 +112,8 @@ public void testRelatedIdQueries() { assertNull( document.getName() ); } ); - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - List results = getAuditReader().createQuery().forRevisionsOfEntity( PersonDocument.class, false, true ) + scope.inEntityManager( em -> { + List results = AuditReaderFactory.get( em ).createQuery().forRevisionsOfEntity( PersonDocument.class, false, true ) .add( AuditEntity.relatedId( "document" ).eq( 1 ) ) .getResultList(); assertEquals( 2, results.size() ); @@ -128,8 +130,8 @@ else if ( RevisionType.DEL.equals( revisionType ) ) { } } ); - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - List results = getAuditReader().createQuery().forRevisionsOfEntity( PersonDocument.class, false, true ) + scope.inEntityManager( em -> { + List results = AuditReaderFactory.get( em ).createQuery().forRevisionsOfEntity( PersonDocument.class, false, true ) .add( AuditEntity.relatedId( "document" ).eq( 2 ) ) .getResultList(); assertEquals( 1, results.size() ); diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/query/ids/RecordIdRelatedIdQueryTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/ids/RecordIdRelatedIdQueryTest.java similarity index 69% rename from hibernate-envers/src/test/java/org/hibernate/envers/test/integration/query/ids/RecordIdRelatedIdQueryTest.java rename to hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/ids/RecordIdRelatedIdQueryTest.java index bdd76747fee3..e37c1f6ced2b 100644 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/query/ids/RecordIdRelatedIdQueryTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/query/ids/RecordIdRelatedIdQueryTest.java @@ -2,7 +2,7 @@ * SPDX-License-Identifier: Apache-2.0 * Copyright Red Hat Inc. and Hibernate Authors */ -package org.hibernate.envers.test.integration.query.ids; +package org.hibernate.orm.test.envers.integration.query.ids; import java.io.Serializable; import java.util.Arrays; @@ -13,33 +13,30 @@ import jakarta.persistence.IdClass; import jakarta.persistence.ManyToOne; -import org.hibernate.annotations.processing.Exclude; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.Audited; import org.hibernate.envers.RevisionType; import org.hibernate.envers.query.AuditEntity; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.testing.orm.junit.Jira; -import org.junit.Test; - -import org.hibernate.testing.transaction.TransactionUtil; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -@Exclude -@Jira("https://hibernate.atlassian.net/browse/HHH-19393") -public class RecordIdRelatedIdQueryTest extends BaseEnversJPAFunctionalTestCase { - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { Person.class, Document.class, PersonDocument.class }; - } - - @Test - @Priority(10) - public void initData() { - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNull; + +@Jpa(annotatedClasses = { + RecordIdRelatedIdQueryTest.Person.class, + RecordIdRelatedIdQueryTest.Document.class, + RecordIdRelatedIdQueryTest.PersonDocument.class +}) +@EnversTest +public class RecordIdRelatedIdQueryTest { + + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + scope.inTransaction( entityManager -> { final Person person = new Person( 1, "Chris" ); final Document document = new Document( 1, "DL" ); final PersonDocument pd = new PersonDocument( person, document ); @@ -48,7 +45,7 @@ public void initData() { entityManager.persist( pd ); } ); - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { + scope.inTransaction( entityManager -> { final Person person = entityManager.find( Person.class, 1 ); final Document document = new Document( 2, "Passport" ); final PersonDocument pd = new PersonDocument( person, document ); @@ -56,7 +53,7 @@ public void initData() { entityManager.persist( pd ); } ); - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { + scope.inTransaction( entityManager -> { final Person person = entityManager.find( Person.class, 1 ); final Document document = entityManager.find( Document.class, 1 ); final PersonDocument pd = entityManager @@ -71,16 +68,18 @@ public void initData() { } @Test - public void testRevisionCounts() { - assertEquals( Arrays.asList( 1 ), getAuditReader().getRevisions( Person.class, 1 ) ); - assertEquals( Arrays.asList( 1, 3 ), getAuditReader().getRevisions( Document.class, 1 ) ); - assertEquals( Arrays.asList( 2 ), getAuditReader().getRevisions( Document.class, 2 ) ); + public void testRevisionCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + assertEquals( Arrays.asList( 1 ), AuditReaderFactory.get( em ).getRevisions( Person.class, 1 ) ); + assertEquals( Arrays.asList( 1, 3 ), AuditReaderFactory.get( em ).getRevisions( Document.class, 1 ) ); + assertEquals( Arrays.asList( 2 ), AuditReaderFactory.get( em ).getRevisions( Document.class, 2 ) ); + } ); } @Test - public void testRelatedIdQueries() { - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - List results = getAuditReader().createQuery().forRevisionsOfEntity( PersonDocument.class, false, true ) + public void testRelatedIdQueries(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + List results = AuditReaderFactory.get( em ).createQuery().forRevisionsOfEntity( PersonDocument.class, false, true ) .add( AuditEntity.relatedId( "person" ).eq( 1 ) ) .add( AuditEntity.revisionNumber().eq( 1 ) ) .getResultList(); @@ -89,8 +88,8 @@ public void testRelatedIdQueries() { assertEquals( "DL", document.getName() ); } ); - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - List results = getAuditReader().createQuery().forRevisionsOfEntity( PersonDocument.class, false, true ) + scope.inEntityManager( em -> { + List results = AuditReaderFactory.get( em ).createQuery().forRevisionsOfEntity( PersonDocument.class, false, true ) .add( AuditEntity.relatedId( "person" ).eq( 1 ) ) .add( AuditEntity.revisionNumber().eq( 2 ) ) .getResultList(); @@ -99,8 +98,8 @@ public void testRelatedIdQueries() { assertEquals( "Passport", document.getName() ); } ); - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - List results = getAuditReader().createQuery().forRevisionsOfEntity( PersonDocument.class, false, true ) + scope.inEntityManager( em -> { + List results = AuditReaderFactory.get( em ).createQuery().forRevisionsOfEntity( PersonDocument.class, false, true ) .add( AuditEntity.relatedId( "person" ).eq( 1 ) ) .add( AuditEntity.revisionNumber().eq( 3 ) ) .getResultList(); @@ -109,8 +108,8 @@ public void testRelatedIdQueries() { assertNull( document.getName() ); } ); - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - List results = getAuditReader().createQuery().forRevisionsOfEntity( PersonDocument.class, false, true ) + scope.inEntityManager( em -> { + List results = AuditReaderFactory.get( em ).createQuery().forRevisionsOfEntity( PersonDocument.class, false, true ) .add( AuditEntity.relatedId( "document" ).eq( 1 ) ) .getResultList(); assertEquals( 2, results.size() ); @@ -127,8 +126,8 @@ else if ( RevisionType.DEL.equals( revisionType ) ) { } } ); - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - List results = getAuditReader().createQuery().forRevisionsOfEntity( PersonDocument.class, false, true ) + scope.inEntityManager( em -> { + List results = AuditReaderFactory.get( em ).createQuery().forRevisionsOfEntity( PersonDocument.class, false, true ) .add( AuditEntity.relatedId( "document" ).eq( 2 ) ) .getResultList(); assertEquals( 1, results.size() ); diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/readwriteexpression/ReadWriteExpressionChange.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/readwriteexpression/ReadWriteExpressionChange.java new file mode 100644 index 000000000000..029bde5d8436 --- /dev/null +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/readwriteexpression/ReadWriteExpressionChange.java @@ -0,0 +1,59 @@ +/* + * SPDX-License-Identifier: Apache-2.0 + * Copyright Red Hat Inc. and Hibernate Authors + */ +package org.hibernate.orm.test.envers.integration.readwriteexpression; + +import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; + +import java.util.List; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +@EnversTest +@Jpa(annotatedClasses = {Staff.class}) +public class ReadWriteExpressionChange { + + private static final Double HEIGHT_INCHES = 73.0d; + private static final Double HEIGHT_CENTIMETERS = HEIGHT_INCHES * 2.54d; + + private Integer id; + + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + id = scope.fromTransaction( em -> { + Staff staff = new Staff( HEIGHT_INCHES, 1 ); + em.persist( staff ); + em.flush(); + return staff.getId(); + } ); + } + + @Test + public void shouldRespectWriteExpression(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var resultList = em.createNativeQuery( "select size_in_cm from t_staff_AUD where id =" + id ) + .getResultList(); + assertEquals( 1, resultList.size() ); + Double sizeInCm = (Double) resultList.get( 0 ); + assertEquals( HEIGHT_CENTIMETERS, sizeInCm.doubleValue(), 0.00000001 ); + } ); + } + + @Test + public void shouldRespectReadExpression(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + List revisions = auditReader.getRevisions( Staff.class, id ); + assertEquals( 1, revisions.size() ); + Number number = revisions.get( 0 ); + Staff staffRev = auditReader.find( Staff.class, id, number ); + assertEquals( HEIGHT_INCHES, staffRev.getSizeInInches(), 0.00000001 ); + } ); + } +} diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/readwriteexpression/Staff.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/readwriteexpression/Staff.java similarity index 93% rename from hibernate-envers/src/test/java/org/hibernate/envers/test/integration/readwriteexpression/Staff.java rename to hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/readwriteexpression/Staff.java index 8096bc3b7235..342847b7c000 100644 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/readwriteexpression/Staff.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/readwriteexpression/Staff.java @@ -2,7 +2,7 @@ * SPDX-License-Identifier: Apache-2.0 * Copyright Red Hat Inc. and Hibernate Authors */ -package org.hibernate.envers.test.integration.readwriteexpression; +package org.hibernate.orm.test.envers.integration.readwriteexpression; import jakarta.persistence.Column; import jakarta.persistence.Entity; diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reference/BidirectionalReference.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reference/BidirectionalReference.java index adeca91159ae..4d1472d38b99 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reference/BidirectionalReference.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reference/BidirectionalReference.java @@ -5,128 +5,129 @@ package org.hibernate.orm.test.envers.integration.reference; import java.util.Arrays; -import jakarta.persistence.EntityManager; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.orm.test.envers.tools.TestTools; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; -import org.junit.Test; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNull; /** * @author Adam Warski (adam at warski dot org) */ -public class BidirectionalReference extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {GreetingPO.class, GreetingSetPO.class}) +public class BidirectionalReference { private Long set1_id; private Long set2_id; private Long g1_id; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {GreetingPO.class, GreetingSetPO.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - GreetingSetPO set1 = new GreetingSetPO(); - set1.setName( "a1" ); - - GreetingSetPO set2 = new GreetingSetPO(); - set2.setName( "a2" ); - + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Revision 1 - em.getTransaction().begin(); + scope.inTransaction( em -> { + GreetingSetPO set1 = new GreetingSetPO(); + set1.setName( "a1" ); - em.persist( set1 ); - em.persist( set2 ); + GreetingSetPO set2 = new GreetingSetPO(); + set2.setName( "a2" ); - set1_id = set1.getId(); - set2_id = set2.getId(); + em.persist( set1 ); + em.persist( set2 ); - em.getTransaction().commit(); - em.clear(); + set1_id = set1.getId(); + set2_id = set2.getId(); + } ); // Revision 2 - em.getTransaction().begin(); + scope.inTransaction( em -> { + GreetingPO g1 = new GreetingPO(); + g1.setGreeting( "g1" ); + g1.setGreetingSet( em.getReference( GreetingSetPO.class, set1_id ) ); - GreetingPO g1 = new GreetingPO(); - g1.setGreeting( "g1" ); - g1.setGreetingSet( em.getReference( GreetingSetPO.class, set1_id ) ); - - em.persist( g1 ); - g1_id = g1.getId(); - - em.getTransaction().commit(); - em.clear(); + em.persist( g1 ); + g1_id = g1.getId(); + } ); // Revision 3 - em.getTransaction().begin(); - - g1 = em.find( GreetingPO.class, g1_id ); - - g1.setGreetingSet( em.getReference( GreetingSetPO.class, set2_id ) ); - - em.getTransaction().commit(); + scope.inTransaction( em -> { + GreetingPO g1 = em.find( GreetingPO.class, g1_id ); + g1.setGreetingSet( em.getReference( GreetingSetPO.class, set2_id ) ); + } ); } @Test - public void testRevisionsCounts() { - assert Arrays.asList( 2, 3 ).equals( getAuditReader().getRevisions( GreetingPO.class, g1_id ) ); - - assert Arrays.asList( 1, 2, 3 ).equals( getAuditReader().getRevisions( GreetingSetPO.class, set1_id ) ); - assert Arrays.asList( 1, 3 ).equals( getAuditReader().getRevisions( GreetingSetPO.class, set2_id ) ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 2, 3 ), auditReader.getRevisions( GreetingPO.class, g1_id ) ); + assertEquals( Arrays.asList( 1, 2, 3 ), auditReader.getRevisions( GreetingSetPO.class, set1_id ) ); + assertEquals( Arrays.asList( 1, 3 ), auditReader.getRevisions( GreetingSetPO.class, set2_id ) ); + } ); } @Test - public void testHistoryOfG1() { - GreetingPO rev1 = getAuditReader().find( GreetingPO.class, g1_id, 1 ); - GreetingPO rev2 = getAuditReader().find( GreetingPO.class, g1_id, 2 ); - GreetingPO rev3 = getAuditReader().find( GreetingPO.class, g1_id, 3 ); - - assert rev1 == null; - assert rev2.getGreetingSet().getName().equals( "a1" ); - assert rev3.getGreetingSet().getName().equals( "a2" ); + public void testHistoryOfG1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + GreetingPO rev1 = auditReader.find( GreetingPO.class, g1_id, 1 ); + GreetingPO rev2 = auditReader.find( GreetingPO.class, g1_id, 2 ); + GreetingPO rev3 = auditReader.find( GreetingPO.class, g1_id, 3 ); + + assertNull( rev1 ); + assertEquals( "a1", rev2.getGreetingSet().getName() ); + assertEquals( "a2", rev3.getGreetingSet().getName() ); + } ); } @Test - public void testHistoryOfSet1() { - GreetingSetPO rev1 = getAuditReader().find( GreetingSetPO.class, set1_id, 1 ); - GreetingSetPO rev2 = getAuditReader().find( GreetingSetPO.class, set1_id, 2 ); - GreetingSetPO rev3 = getAuditReader().find( GreetingSetPO.class, set1_id, 3 ); - - assert rev1.getName().equals( "a1" ); - assert rev2.getName().equals( "a1" ); - assert rev3.getName().equals( "a1" ); - - GreetingPO g1 = new GreetingPO(); - g1.setId( g1_id ); - g1.setGreeting( "g1" ); - - assert rev1.getGreetings().size() == 0; - assert rev2.getGreetings().equals( TestTools.makeSet( g1 ) ); - assert rev3.getGreetings().size() == 0; + public void testHistoryOfSet1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + GreetingSetPO rev1 = auditReader.find( GreetingSetPO.class, set1_id, 1 ); + GreetingSetPO rev2 = auditReader.find( GreetingSetPO.class, set1_id, 2 ); + GreetingSetPO rev3 = auditReader.find( GreetingSetPO.class, set1_id, 3 ); + + assertEquals( "a1", rev1.getName() ); + assertEquals( "a1", rev2.getName() ); + assertEquals( "a1", rev3.getName() ); + + GreetingPO g1 = new GreetingPO(); + g1.setId( g1_id ); + g1.setGreeting( "g1" ); + + assertEquals( 0, rev1.getGreetings().size() ); + assertEquals( TestTools.makeSet( g1 ), rev2.getGreetings() ); + assertEquals( 0, rev3.getGreetings().size() ); + } ); } @Test - public void testHistoryOfSet2() { - GreetingSetPO rev1 = getAuditReader().find( GreetingSetPO.class, set2_id, 1 ); - GreetingSetPO rev2 = getAuditReader().find( GreetingSetPO.class, set2_id, 2 ); - GreetingSetPO rev3 = getAuditReader().find( GreetingSetPO.class, set2_id, 3 ); - - assert rev1.getName().equals( "a2" ); - assert rev2.getName().equals( "a2" ); - assert rev3.getName().equals( "a2" ); - - GreetingPO g1 = new GreetingPO(); - g1.setId( g1_id ); - g1.setGreeting( "g1" ); - - assert rev1.getGreetings().size() == 0; - assert rev2.getGreetings().size() == 0; - assert rev3.getGreetings().equals( TestTools.makeSet( g1 ) ); + public void testHistoryOfSet2(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + GreetingSetPO rev1 = auditReader.find( GreetingSetPO.class, set2_id, 1 ); + GreetingSetPO rev2 = auditReader.find( GreetingSetPO.class, set2_id, 2 ); + GreetingSetPO rev3 = auditReader.find( GreetingSetPO.class, set2_id, 3 ); + + assertEquals( "a2", rev1.getName() ); + assertEquals( "a2", rev2.getName() ); + assertEquals( "a2", rev3.getName() ); + + GreetingPO g1 = new GreetingPO(); + g1.setId( g1_id ); + g1.setGreeting( "g1" ); + + assertEquals( 0, rev1.getGreetings().size() ); + assertEquals( 0, rev2.getGreetings().size() ); + assertEquals( TestTools.makeSet( g1 ), rev3.getGreetings() ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/Custom.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/Custom.java index 3bec1dabc688..0e96a397625f 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/Custom.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/Custom.java @@ -11,134 +11,155 @@ import java.util.HashSet; import java.util.Map; import java.util.Set; -import jakarta.persistence.EntityManager; -import org.hibernate.envers.AuditReader; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.exception.RevisionDoesNotExistException; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; import org.hibernate.orm.test.envers.entities.StrTestEntity; import org.hibernate.orm.test.envers.entities.reventity.CustomRevEntity; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; -import org.junit.Test; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertTrue; /** * @author Adam Warski (adam at warski dot org) */ -public class Custom extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {StrTestEntity.class, CustomRevEntity.class}) +public class Custom { private Integer id; private long timestamp1; private long timestamp2; private long timestamp3; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {StrTestEntity.class, CustomRevEntity.class}; - } - - @Test - @Priority(10) - public void initData() throws InterruptedException { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) throws InterruptedException { timestamp1 = System.currentTimeMillis(); Thread.sleep( 100 ); // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - StrTestEntity te = new StrTestEntity( "x" ); - em.persist( te ); - id = te.getId(); - em.getTransaction().commit(); + scope.inTransaction( em -> { + StrTestEntity te = new StrTestEntity( "x" ); + em.persist( te ); + id = te.getId(); + } ); timestamp2 = System.currentTimeMillis(); Thread.sleep( 100 ); // Revision 2 - em.getTransaction().begin(); - te = em.find( StrTestEntity.class, id ); - te.setStr( "y" ); - em.getTransaction().commit(); + scope.inTransaction( em -> { + StrTestEntity te = em.find( StrTestEntity.class, id ); + te.setStr( "y" ); + } ); timestamp3 = System.currentTimeMillis(); } - @Test(expected = RevisionDoesNotExistException.class) - public void testTimestamps1() { - getAuditReader().getRevisionNumberForDate( new Date( timestamp1 ) ); + @Test + public void testTimestamps1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertThrows( RevisionDoesNotExistException.class, + () -> auditReader.getRevisionNumberForDate( new Date( timestamp1 ) ) ); + } ); } @Test - public void testTimestamps() { - final Date date1 = new Date( timestamp2 ); - final Date date2 = new Date( timestamp3 ); - - assert getAuditReader().getRevisionNumberForDate( date1 ).intValue() == 1; - assert getAuditReader().getRevisionNumberForDate( date2 ).intValue() == 2; - - final LocalDateTime localDateTime1 = LocalDateTime.ofInstant( date1.toInstant(), ZoneId.systemDefault() ); - final LocalDateTime localDateTime2 = LocalDateTime.ofInstant( date2.toInstant(), ZoneId.systemDefault() ); - assert getAuditReader().getRevisionNumberForDate( localDateTime1 ).intValue() == 1; - assert getAuditReader().getRevisionNumberForDate( localDateTime2 ).intValue() == 2; + public void testTimestamps(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + final Date date1 = new Date( timestamp2 ); + final Date date2 = new Date( timestamp3 ); + + assertEquals( 1, auditReader.getRevisionNumberForDate( date1 ).intValue() ); + assertEquals( 2, auditReader.getRevisionNumberForDate( date2 ).intValue() ); + + final LocalDateTime localDateTime1 = LocalDateTime.ofInstant( date1.toInstant(), ZoneId.systemDefault() ); + final LocalDateTime localDateTime2 = LocalDateTime.ofInstant( date2.toInstant(), ZoneId.systemDefault() ); + assertEquals( 1, auditReader.getRevisionNumberForDate( localDateTime1 ).intValue() ); + assertEquals( 2, auditReader.getRevisionNumberForDate( localDateTime2 ).intValue() ); + } ); } @Test - public void testDatesForRevisions() { - AuditReader vr = getAuditReader(); - assert vr.getRevisionNumberForDate( vr.getRevisionDate( 1 ) ).intValue() == 1; - assert vr.getRevisionNumberForDate( vr.getRevisionDate( 2 ) ).intValue() == 2; + public void testDatesForRevisions(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( 1, auditReader.getRevisionNumberForDate( auditReader.getRevisionDate( 1 ) ).intValue() ); + assertEquals( 2, auditReader.getRevisionNumberForDate( auditReader.getRevisionDate( 2 ) ).intValue() ); + } ); } @Test - public void testRevisionsForDates() { - AuditReader vr = getAuditReader(); + public void testRevisionsForDates(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); - assert vr.getRevisionDate( vr.getRevisionNumberForDate( new Date( timestamp2 ) ) ).getTime() <= timestamp2; - assert vr.getRevisionDate( vr.getRevisionNumberForDate( new Date( timestamp2 ) ).intValue() + 1 ) - .getTime() > timestamp2; + assertTrue( auditReader.getRevisionDate( auditReader.getRevisionNumberForDate( new Date( timestamp2 ) ) ).getTime() <= timestamp2 ); + assertTrue( auditReader.getRevisionDate( auditReader.getRevisionNumberForDate( new Date( timestamp2 ) ).intValue() + 1 ) + .getTime() > timestamp2 ); - assert vr.getRevisionDate( vr.getRevisionNumberForDate( new Date( timestamp3 ) ) ).getTime() <= timestamp3; + assertTrue( auditReader.getRevisionDate( auditReader.getRevisionNumberForDate( new Date( timestamp3 ) ) ).getTime() <= timestamp3 ); + } ); } @Test - public void testFindRevision() { - AuditReader vr = getAuditReader(); - - long rev1Timestamp = vr.findRevision( CustomRevEntity.class, 1 ).getCustomTimestamp(); - assert rev1Timestamp > timestamp1; - assert rev1Timestamp <= timestamp2; - - long rev2Timestamp = vr.findRevision( CustomRevEntity.class, 2 ).getCustomTimestamp(); - assert rev2Timestamp > timestamp2; - assert rev2Timestamp <= timestamp3; + public void testFindRevision(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + + long rev1Timestamp = auditReader.findRevision( CustomRevEntity.class, 1 ).getCustomTimestamp(); + assertTrue( rev1Timestamp > timestamp1 ); + assertTrue( rev1Timestamp <= timestamp2 ); + + long rev2Timestamp = auditReader.findRevision( CustomRevEntity.class, 2 ).getCustomTimestamp(); + assertTrue( rev2Timestamp > timestamp2 ); + assertTrue( rev2Timestamp <= timestamp3 ); + } ); } @Test - public void testFindRevisions() { - AuditReader vr = getAuditReader(); - - Set revNumbers = new HashSet(); - revNumbers.add( 1 ); - revNumbers.add( 2 ); - - Map revisionMap = vr.findRevisions( CustomRevEntity.class, revNumbers ); - assert (revisionMap.size() == 2); - assert (revisionMap.get( 1 ).equals( vr.findRevision( CustomRevEntity.class, 1 ) )); - assert (revisionMap.get( 2 ).equals( vr.findRevision( CustomRevEntity.class, 2 ) )); + public void testFindRevisions(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + + Set revNumbers = new HashSet(); + revNumbers.add( 1 ); + revNumbers.add( 2 ); + + Map revisionMap = auditReader.findRevisions( CustomRevEntity.class, revNumbers ); + assertEquals( 2, revisionMap.size() ); + assertEquals( auditReader.findRevision( CustomRevEntity.class, 1 ), revisionMap.get( 1 ) ); + assertEquals( auditReader.findRevision( CustomRevEntity.class, 2 ), revisionMap.get( 2 ) ); + } ); } @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( StrTestEntity.class, id ) ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1, 2 ), auditReader.getRevisions( StrTestEntity.class, id ) ); + } ); } @Test - public void testHistoryOfId1() { - StrTestEntity ver1 = new StrTestEntity( "x", id ); - StrTestEntity ver2 = new StrTestEntity( "y", id ); - - assert getAuditReader().find( StrTestEntity.class, id, 1 ).equals( ver1 ); - assert getAuditReader().find( StrTestEntity.class, id, 2 ).equals( ver2 ); + public void testHistoryOfId1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + StrTestEntity ver1 = new StrTestEntity( "x", id ); + StrTestEntity ver2 = new StrTestEntity( "y", id ); + + assertEquals( ver1, auditReader.find( StrTestEntity.class, id, 1 ) ); + assertEquals( ver2, auditReader.find( StrTestEntity.class, id, 2 ) ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/CustomBoxed.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/CustomBoxed.java index e556f7f67a83..a308f8f9e6a5 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/CustomBoxed.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/CustomBoxed.java @@ -9,125 +9,146 @@ import java.util.HashSet; import java.util.Map; import java.util.Set; -import jakarta.persistence.EntityManager; -import org.hibernate.envers.AuditReader; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.exception.RevisionDoesNotExistException; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; import org.hibernate.orm.test.envers.entities.StrTestEntity; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; -import org.junit.Test; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertTrue; /** * @author Adam Warski (adam at warski dot org) */ -public class CustomBoxed extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {StrTestEntity.class, CustomBoxedRevEntity.class}) +public class CustomBoxed { private Integer id; private long timestamp1; private long timestamp2; private long timestamp3; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {StrTestEntity.class, CustomBoxedRevEntity.class}; - } - - @Test - @Priority(10) - public void initData() throws InterruptedException { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) throws InterruptedException { timestamp1 = System.currentTimeMillis(); Thread.sleep( 100 ); // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - StrTestEntity te = new StrTestEntity( "x" ); - em.persist( te ); - id = te.getId(); - em.getTransaction().commit(); + scope.inTransaction( em -> { + StrTestEntity te = new StrTestEntity( "x" ); + em.persist( te ); + id = te.getId(); + } ); timestamp2 = System.currentTimeMillis(); Thread.sleep( 100 ); // Revision 2 - em.getTransaction().begin(); - te = em.find( StrTestEntity.class, id ); - te.setStr( "y" ); - em.getTransaction().commit(); + scope.inTransaction( em -> { + StrTestEntity te = em.find( StrTestEntity.class, id ); + te.setStr( "y" ); + } ); timestamp3 = System.currentTimeMillis(); } - @Test(expected = RevisionDoesNotExistException.class) - public void testTimestamps1() { - getAuditReader().getRevisionNumberForDate( new Date( timestamp1 ) ); + @Test + public void testTimestamps1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertThrows( RevisionDoesNotExistException.class, + () -> auditReader.getRevisionNumberForDate( new Date( timestamp1 ) ) ); + } ); } @Test - public void testTimestamps() { - assert getAuditReader().getRevisionNumberForDate( new Date( timestamp2 ) ).intValue() == 1; - assert getAuditReader().getRevisionNumberForDate( new Date( timestamp3 ) ).intValue() == 2; + public void testTimestamps(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( 1, auditReader.getRevisionNumberForDate( new Date( timestamp2 ) ).intValue() ); + assertEquals( 2, auditReader.getRevisionNumberForDate( new Date( timestamp3 ) ).intValue() ); + } ); } @Test - public void testDatesForRevisions() { - AuditReader vr = getAuditReader(); - assert vr.getRevisionNumberForDate( vr.getRevisionDate( 1 ) ).intValue() == 1; - assert vr.getRevisionNumberForDate( vr.getRevisionDate( 2 ) ).intValue() == 2; + public void testDatesForRevisions(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( 1, auditReader.getRevisionNumberForDate( auditReader.getRevisionDate( 1 ) ).intValue() ); + assertEquals( 2, auditReader.getRevisionNumberForDate( auditReader.getRevisionDate( 2 ) ).intValue() ); + } ); } @Test - public void testRevisionsForDates() { - AuditReader vr = getAuditReader(); + public void testRevisionsForDates(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); - assert vr.getRevisionDate( vr.getRevisionNumberForDate( new Date( timestamp2 ) ) ).getTime() <= timestamp2; - assert vr.getRevisionDate( vr.getRevisionNumberForDate( new Date( timestamp2 ) ).intValue() + 1 ) - .getTime() > timestamp2; + assertTrue( auditReader.getRevisionDate( auditReader.getRevisionNumberForDate( new Date( timestamp2 ) ) ).getTime() <= timestamp2 ); + assertTrue( auditReader.getRevisionDate( auditReader.getRevisionNumberForDate( new Date( timestamp2 ) ).intValue() + 1 ) + .getTime() > timestamp2 ); - assert vr.getRevisionDate( vr.getRevisionNumberForDate( new Date( timestamp3 ) ) ).getTime() <= timestamp3; + assertTrue( auditReader.getRevisionDate( auditReader.getRevisionNumberForDate( new Date( timestamp3 ) ) ).getTime() <= timestamp3 ); + } ); } @Test - public void testFindRevision() { - AuditReader vr = getAuditReader(); - - long rev1Timestamp = vr.findRevision( CustomBoxedRevEntity.class, 1 ).getCustomTimestamp(); - assert rev1Timestamp > timestamp1; - assert rev1Timestamp <= timestamp2; - - long rev2Timestamp = vr.findRevision( CustomBoxedRevEntity.class, 2 ).getCustomTimestamp(); - assert rev2Timestamp > timestamp2; - assert rev2Timestamp <= timestamp3; + public void testFindRevision(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + + long rev1Timestamp = auditReader.findRevision( CustomBoxedRevEntity.class, 1 ).getCustomTimestamp(); + assertTrue( rev1Timestamp > timestamp1 ); + assertTrue( rev1Timestamp <= timestamp2 ); + + long rev2Timestamp = auditReader.findRevision( CustomBoxedRevEntity.class, 2 ).getCustomTimestamp(); + assertTrue( rev2Timestamp > timestamp2 ); + assertTrue( rev2Timestamp <= timestamp3 ); + } ); } @Test - public void testFindRevisions() { - AuditReader vr = getAuditReader(); - - Set revNumbers = new HashSet(); - revNumbers.add( 1 ); - revNumbers.add( 2 ); - - Map revisionMap = vr.findRevisions( CustomBoxedRevEntity.class, revNumbers ); - assert (revisionMap.size() == 2); - assert (revisionMap.get( 1 ).equals( vr.findRevision( CustomBoxedRevEntity.class, 1 ) )); - assert (revisionMap.get( 2 ).equals( vr.findRevision( CustomBoxedRevEntity.class, 2 ) )); + public void testFindRevisions(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + + Set revNumbers = new HashSet(); + revNumbers.add( 1 ); + revNumbers.add( 2 ); + + Map revisionMap = auditReader.findRevisions( CustomBoxedRevEntity.class, revNumbers ); + assertEquals( 2, revisionMap.size() ); + assertEquals( auditReader.findRevision( CustomBoxedRevEntity.class, 1 ), revisionMap.get( 1 ) ); + assertEquals( auditReader.findRevision( CustomBoxedRevEntity.class, 2 ), revisionMap.get( 2 ) ); + } ); } @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( StrTestEntity.class, id ) ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1, 2 ), auditReader.getRevisions( StrTestEntity.class, id ) ); + } ); } @Test - public void testHistoryOfId1() { - StrTestEntity ver1 = new StrTestEntity( "x", id ); - StrTestEntity ver2 = new StrTestEntity( "y", id ); - - assert getAuditReader().find( StrTestEntity.class, id, 1 ).equals( ver1 ); - assert getAuditReader().find( StrTestEntity.class, id, 2 ).equals( ver2 ); + public void testHistoryOfId1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + StrTestEntity ver1 = new StrTestEntity( "x", id ); + StrTestEntity ver2 = new StrTestEntity( "y", id ); + + assertEquals( ver1, auditReader.find( StrTestEntity.class, id, 1 ) ); + assertEquals( ver2, auditReader.find( StrTestEntity.class, id, 2 ) ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/CustomColumnMapping.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/CustomColumnMapping.java index 43cd2433a10b..36da72508820 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/CustomColumnMapping.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/CustomColumnMapping.java @@ -6,16 +6,21 @@ import java.util.Arrays; import java.util.Date; -import jakarta.persistence.EntityManager; -import org.hibernate.envers.AuditReader; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.exception.RevisionDoesNotExistException; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; import org.hibernate.orm.test.envers.entities.StrTestEntity; import org.hibernate.orm.test.envers.entities.reventity.CustomRevEntityColumnMapping; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; -import org.junit.Test; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertTrue; /** * Test which checks if auditing when the revision number in the revision entity has a @Column annotation with @@ -23,98 +28,112 @@ * * @author Adam Warski (adam at warski dot org) */ -public class CustomColumnMapping extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {StrTestEntity.class, CustomRevEntityColumnMapping.class}) +public class CustomColumnMapping { private Integer id; private long timestamp1; private long timestamp2; private long timestamp3; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {StrTestEntity.class, CustomRevEntityColumnMapping.class}; - } - - @Test - @Priority(10) - public void initData() throws InterruptedException { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) throws InterruptedException { timestamp1 = System.currentTimeMillis(); Thread.sleep( 100 ); // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - StrTestEntity te = new StrTestEntity( "x" ); - em.persist( te ); - id = te.getId(); - em.getTransaction().commit(); + scope.inTransaction( em -> { + StrTestEntity te = new StrTestEntity( "x" ); + em.persist( te ); + id = te.getId(); + } ); timestamp2 = System.currentTimeMillis(); Thread.sleep( 100 ); // Revision 2 - em.getTransaction().begin(); - te = em.find( StrTestEntity.class, id ); - te.setStr( "y" ); - em.getTransaction().commit(); + scope.inTransaction( em -> { + StrTestEntity te = em.find( StrTestEntity.class, id ); + te.setStr( "y" ); + } ); timestamp3 = System.currentTimeMillis(); } - @Test(expected = RevisionDoesNotExistException.class) - public void testTimestamps1() { - getAuditReader().getRevisionNumberForDate( new Date( timestamp1 ) ); + @Test + public void testTimestamps1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertThrows( RevisionDoesNotExistException.class, + () -> auditReader.getRevisionNumberForDate( new Date( timestamp1 ) ) ); + } ); } @Test - public void testTimestamps() { - assert getAuditReader().getRevisionNumberForDate( new Date( timestamp2 ) ).intValue() == 1; - assert getAuditReader().getRevisionNumberForDate( new Date( timestamp3 ) ).intValue() == 2; + public void testTimestamps(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( 1, auditReader.getRevisionNumberForDate( new Date( timestamp2 ) ).intValue() ); + assertEquals( 2, auditReader.getRevisionNumberForDate( new Date( timestamp3 ) ).intValue() ); + } ); } @Test - public void testDatesForRevisions() { - AuditReader vr = getAuditReader(); - assert vr.getRevisionNumberForDate( vr.getRevisionDate( 1l ) ).intValue() == 1; - assert vr.getRevisionNumberForDate( vr.getRevisionDate( 2l ) ).intValue() == 2; + public void testDatesForRevisions(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( 1, auditReader.getRevisionNumberForDate( auditReader.getRevisionDate( 1l ) ).intValue() ); + assertEquals( 2, auditReader.getRevisionNumberForDate( auditReader.getRevisionDate( 2l ) ).intValue() ); + } ); } @Test - public void testRevisionsForDates() { - AuditReader vr = getAuditReader(); + public void testRevisionsForDates(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); - assert vr.getRevisionDate( vr.getRevisionNumberForDate( new Date( timestamp2 ) ) ).getTime() <= timestamp2; - assert vr.getRevisionDate( vr.getRevisionNumberForDate( new Date( timestamp2 ) ).longValue() + 1l ) - .getTime() > timestamp2; + assertTrue( auditReader.getRevisionDate( auditReader.getRevisionNumberForDate( new Date( timestamp2 ) ) ).getTime() <= timestamp2 ); + assertTrue( auditReader.getRevisionDate( auditReader.getRevisionNumberForDate( new Date( timestamp2 ) ).longValue() + 1l ) + .getTime() > timestamp2 ); - assert vr.getRevisionDate( vr.getRevisionNumberForDate( new Date( timestamp3 ) ) ).getTime() <= timestamp3; + assertTrue( auditReader.getRevisionDate( auditReader.getRevisionNumberForDate( new Date( timestamp3 ) ) ).getTime() <= timestamp3 ); + } ); } @Test - public void testFindRevision() { - AuditReader vr = getAuditReader(); - - long rev1Timestamp = vr.findRevision( CustomRevEntityColumnMapping.class, 1l ).getCustomTimestamp(); - assert rev1Timestamp > timestamp1; - assert rev1Timestamp <= timestamp2; - - long rev2Timestamp = vr.findRevision( CustomRevEntityColumnMapping.class, 2l ).getCustomTimestamp(); - assert rev2Timestamp > timestamp2; - assert rev2Timestamp <= timestamp3; + public void testFindRevision(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + + long rev1Timestamp = auditReader.findRevision( CustomRevEntityColumnMapping.class, 1l ).getCustomTimestamp(); + assertTrue( rev1Timestamp > timestamp1 ); + assertTrue( rev1Timestamp <= timestamp2 ); + + long rev2Timestamp = auditReader.findRevision( CustomRevEntityColumnMapping.class, 2l ).getCustomTimestamp(); + assertTrue( rev2Timestamp > timestamp2 ); + assertTrue( rev2Timestamp <= timestamp3 ); + } ); } @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1l, 2l ).equals( getAuditReader().getRevisions( StrTestEntity.class, id ) ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1l, 2l ), auditReader.getRevisions( StrTestEntity.class, id ) ); + } ); } @Test - public void testHistoryOfId1() { - StrTestEntity ver1 = new StrTestEntity( "x", id ); - StrTestEntity ver2 = new StrTestEntity( "y", id ); - - assert getAuditReader().find( StrTestEntity.class, id, 1l ).equals( ver1 ); - assert getAuditReader().find( StrTestEntity.class, id, 2l ).equals( ver2 ); + public void testHistoryOfId1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + StrTestEntity ver1 = new StrTestEntity( "x", id ); + StrTestEntity ver2 = new StrTestEntity( "y", id ); + + assertEquals( ver1, auditReader.find( StrTestEntity.class, id, 1l ) ); + assertEquals( ver2, auditReader.find( StrTestEntity.class, id, 2l ) ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/CustomDate.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/CustomDate.java index 9ee2e4aec65e..436bcc23b29b 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/CustomDate.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/CustomDate.java @@ -6,48 +6,48 @@ import java.util.Arrays; import java.util.Date; -import jakarta.persistence.EntityManager; import org.hibernate.dialect.CockroachDialect; -import org.hibernate.envers.AuditReader; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.exception.RevisionDoesNotExistException; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; import org.hibernate.orm.test.envers.entities.StrTestEntity; import org.hibernate.orm.test.envers.entities.reventity.CustomDateRevEntity; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; +import org.hibernate.testing.orm.junit.SkipForDialect; -import org.hibernate.testing.SkipForDialect; -import org.junit.Test; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertTrue; /** * @author Adam Warski (adam at warski dot org) */ -public class CustomDate extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {StrTestEntity.class, CustomDateRevEntity.class}) +public class CustomDate { private Integer id; private long timestamp1; private long timestamp2; private long timestamp3; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {StrTestEntity.class, CustomDateRevEntity.class}; - } - - @Test - @Priority(10) - public void initData() throws InterruptedException { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) throws InterruptedException { timestamp1 = System.currentTimeMillis(); Thread.sleep( 1100 ); // CustomDateRevEntity.dateTimestamp field maps to date type which on some RDBMSs gets // truncated to seconds (for example MySQL 5.1). // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - StrTestEntity te = new StrTestEntity( "x" ); - em.persist( te ); - id = te.getId(); - em.getTransaction().commit(); + scope.inTransaction( em -> { + StrTestEntity te = new StrTestEntity( "x" ); + em.persist( te ); + id = te.getId(); + } ); timestamp2 = System.currentTimeMillis(); @@ -55,68 +55,87 @@ public void initData() throws InterruptedException { // truncated to seconds (for example MySQL 5.1). // Revision 2 - em.getTransaction().begin(); - te = em.find( StrTestEntity.class, id ); - te.setStr( "y" ); - em.getTransaction().commit(); + scope.inTransaction( em -> { + StrTestEntity te = em.find( StrTestEntity.class, id ); + te.setStr( "y" ); + } ); timestamp3 = System.currentTimeMillis(); } - @Test(expected = RevisionDoesNotExistException.class) - public void testTimestamps1() { - getAuditReader().getRevisionNumberForDate( new Date( timestamp1 ) ); + @Test + public void testTimestamps1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertThrows( RevisionDoesNotExistException.class, + () -> auditReader.getRevisionNumberForDate( new Date( timestamp1 ) ) ); + } ); } @Test - @SkipForDialect(value = CockroachDialect.class, comment = "Fails because of int size") - public void testTimestamps() { - assert getAuditReader().getRevisionNumberForDate( new Date( timestamp2 ) ).intValue() == 1; - assert getAuditReader().getRevisionNumberForDate( new Date( timestamp3 ) ).intValue() == 2; + @SkipForDialect(dialectClass = CockroachDialect.class, reason = "Fails because of int size") + public void testTimestamps(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( 1, auditReader.getRevisionNumberForDate( new Date( timestamp2 ) ).intValue() ); + assertEquals( 2, auditReader.getRevisionNumberForDate( new Date( timestamp3 ) ).intValue() ); + } ); } @Test - public void testDatesForRevisions() { - AuditReader vr = getAuditReader(); - assert vr.getRevisionNumberForDate( vr.getRevisionDate( 1 ) ).intValue() == 1; - assert vr.getRevisionNumberForDate( vr.getRevisionDate( 2 ) ).intValue() == 2; + public void testDatesForRevisions(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( 1, auditReader.getRevisionNumberForDate( auditReader.getRevisionDate( 1 ) ).intValue() ); + assertEquals( 2, auditReader.getRevisionNumberForDate( auditReader.getRevisionDate( 2 ) ).intValue() ); + } ); } @Test - public void testRevisionsForDates() { - AuditReader vr = getAuditReader(); + public void testRevisionsForDates(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); - assert vr.getRevisionDate( vr.getRevisionNumberForDate( new Date( timestamp2 ) ) ).getTime() <= timestamp2; - assert vr.getRevisionDate( vr.getRevisionNumberForDate( new Date( timestamp2 ) ).intValue() + 1 ) - .getTime() > timestamp2; + assertTrue( auditReader.getRevisionDate( auditReader.getRevisionNumberForDate( new Date( timestamp2 ) ) ).getTime() <= timestamp2 ); + assertTrue( auditReader.getRevisionDate( auditReader.getRevisionNumberForDate( new Date( timestamp2 ) ).intValue() + 1 ) + .getTime() > timestamp2 ); - assert vr.getRevisionDate( vr.getRevisionNumberForDate( new Date( timestamp3 ) ) ).getTime() <= timestamp3; + assertTrue( auditReader.getRevisionDate( auditReader.getRevisionNumberForDate( new Date( timestamp3 ) ) ).getTime() <= timestamp3 ); + } ); } @Test - public void testFindRevision() { - AuditReader vr = getAuditReader(); - - long rev1Timestamp = vr.findRevision( CustomDateRevEntity.class, 1 ).getDateTimestamp().getTime(); - assert rev1Timestamp > timestamp1; - assert rev1Timestamp <= timestamp2; - - long rev2Timestamp = vr.findRevision( CustomDateRevEntity.class, 2 ).getDateTimestamp().getTime(); - assert rev2Timestamp > timestamp2; - assert rev2Timestamp <= timestamp3; + public void testFindRevision(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + + long rev1Timestamp = auditReader.findRevision( CustomDateRevEntity.class, 1 ).getDateTimestamp().getTime(); + assertTrue( rev1Timestamp > timestamp1 ); + assertTrue( rev1Timestamp <= timestamp2 ); + + long rev2Timestamp = auditReader.findRevision( CustomDateRevEntity.class, 2 ).getDateTimestamp().getTime(); + assertTrue( rev2Timestamp > timestamp2 ); + assertTrue( rev2Timestamp <= timestamp3 ); + } ); } @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( StrTestEntity.class, id ) ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1, 2 ), auditReader.getRevisions( StrTestEntity.class, id ) ); + } ); } @Test - public void testHistoryOfId1() { - StrTestEntity ver1 = new StrTestEntity( "x", id ); - StrTestEntity ver2 = new StrTestEntity( "y", id ); - - assert getAuditReader().find( StrTestEntity.class, id, 1 ).equals( ver1 ); - assert getAuditReader().find( StrTestEntity.class, id, 2 ).equals( ver2 ); + public void testHistoryOfId1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + StrTestEntity ver1 = new StrTestEntity( "x", id ); + StrTestEntity ver2 = new StrTestEntity( "y", id ); + + assertEquals( ver1, auditReader.find( StrTestEntity.class, id, 1 ) ); + assertEquals( ver2, auditReader.find( StrTestEntity.class, id, 2 ) ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/CustomInstantRevEntityTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/CustomInstantRevEntityTest.java index 96ceb8e7cd40..5fd13fe7ffc5 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/CustomInstantRevEntityTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/CustomInstantRevEntityTest.java @@ -8,100 +8,114 @@ import java.util.Arrays; import java.util.Date; -import jakarta.persistence.EntityManager; import org.hibernate.dialect.CockroachDialect; -import org.hibernate.envers.AuditReader; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.exception.RevisionDoesNotExistException; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; import org.hibernate.orm.test.envers.entities.StrTestEntity; import org.hibernate.orm.test.envers.entities.reventity.CustomInstantRevEntity; -import org.hibernate.testing.SkipForDialect; -import org.junit.Test; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; +import org.hibernate.testing.orm.junit.SkipForDialect; +import org.hibernate.testing.envers.junit.EnversTest; +import org.junit.jupiter.api.Test; import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assertions.assertThrows; /** * @author Chris Cranford */ -public class CustomInstantRevEntityTest extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {StrTestEntity.class, CustomInstantRevEntity.class}) +public class CustomInstantRevEntityTest { private Integer id; private Instant instant1; private Instant instant2; private Instant instant3; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {StrTestEntity.class, CustomInstantRevEntity.class}; - } - - @Test - @Priority(10) - public void initData() throws InterruptedException { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) throws InterruptedException { instant1 = getCurrentInstant(); // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - StrTestEntity entity = new StrTestEntity( "x" ); - em.persist( entity ); - id = entity.getId(); - em.getTransaction().commit(); + scope.inTransaction( em -> { + StrTestEntity entity = new StrTestEntity( "x" ); + em.persist( entity ); + id = entity.getId(); + } ); instant2 = getCurrentInstant(); // Revision 2 - em.getTransaction().begin(); - entity = em.find( StrTestEntity.class, id ); - entity.setStr( "y" ); - em.getTransaction().commit(); + scope.inTransaction( em -> { + StrTestEntity entity = em.find( StrTestEntity.class, id ); + entity.setStr( "y" ); + } ); instant3 = getCurrentInstant(); } - @Test(expected = RevisionDoesNotExistException.class) - public void testInstant1() { - getAuditReader().getRevisionNumberForDate( new Date( instant1.toEpochMilli() ) ); + @Test + public void testInstant1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + assertThrows( RevisionDoesNotExistException.class, () -> { + AuditReaderFactory.get( em ).getRevisionNumberForDate( new Date( instant1.toEpochMilli() ) ); + } ); + } ); } @Test - @SkipForDialect(value = CockroachDialect.class, comment = "Fails because of int size") - public void testInstants() { - assertThat( getAuditReader().getRevisionNumberForDate( new Date( instant2.toEpochMilli() ) ).intValue() ).isEqualTo( 1 ); - assertThat( getAuditReader().getRevisionNumberForDate( new Date( instant3.toEpochMilli() ) ).intValue() ).isEqualTo( 2 ); - - assertThat( getAuditReader().getRevisionNumberForDate( instant2 ).intValue() ).isEqualTo( 1 ); - assertThat( getAuditReader().getRevisionNumberForDate( instant3 ).intValue() ).isEqualTo( 2 ); + @SkipForDialect(dialectClass = CockroachDialect.class, reason = "Fails because of int size") + public void testInstants(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertThat( auditReader.getRevisionNumberForDate( new Date( instant2.toEpochMilli() ) ).intValue() ).isEqualTo( 1 ); + assertThat( auditReader.getRevisionNumberForDate( new Date( instant3.toEpochMilli() ) ).intValue() ).isEqualTo( 2 ); + + assertThat( auditReader.getRevisionNumberForDate( instant2 ).intValue() ).isEqualTo( 1 ); + assertThat( auditReader.getRevisionNumberForDate( instant3 ).intValue() ).isEqualTo( 2 ); + } ); } @Test - public void testInstantsForRevisions() { - final AuditReader reader = getAuditReader(); - assertThat( reader.getRevisionNumberForDate( reader.getRevisionDate( 1 ) ).intValue() ).isEqualTo( 1 ); - assertThat( reader.getRevisionNumberForDate( reader.getRevisionDate( 2 ) ).intValue() ).isEqualTo( 2 ); + public void testInstantsForRevisions(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertThat( auditReader.getRevisionNumberForDate( auditReader.getRevisionDate( 1 ) ).intValue() ).isEqualTo( 1 ); + assertThat( auditReader.getRevisionNumberForDate( auditReader.getRevisionDate( 2 ) ).intValue() ).isEqualTo( 2 ); + } ); } @Test - public void testRevisionsForInstants() { - final Instant revInstant1 = getAuditReader().findRevision( CustomInstantRevEntity.class, 1 ).getInstantTimestamp(); - assertThat( revInstant1.toEpochMilli() ).isGreaterThan( instant1.toEpochMilli() ); - assertThat( revInstant1.toEpochMilli() ).isLessThanOrEqualTo( instant2.toEpochMilli() ); - - final Instant revInstant2 = getAuditReader().findRevision( CustomInstantRevEntity.class, 2 ).getInstantTimestamp(); - assertThat( revInstant2.toEpochMilli() ).isGreaterThan( instant2.toEpochMilli() ); - assertThat( revInstant2.toEpochMilli() ).isLessThanOrEqualTo( instant3.toEpochMilli() ); + public void testRevisionsForInstants(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + final Instant revInstant1 = auditReader.findRevision( CustomInstantRevEntity.class, 1 ).getInstantTimestamp(); + assertThat( revInstant1.toEpochMilli() ).isGreaterThan( instant1.toEpochMilli() ); + assertThat( revInstant1.toEpochMilli() ).isLessThanOrEqualTo( instant2.toEpochMilli() ); + + final Instant revInstant2 = auditReader.findRevision( CustomInstantRevEntity.class, 2 ).getInstantTimestamp(); + assertThat( revInstant2.toEpochMilli() ).isGreaterThan( instant2.toEpochMilli() ); + assertThat( revInstant2.toEpochMilli() ).isLessThanOrEqualTo( instant3.toEpochMilli() ); + } ); } @Test - public void testRevisionsCounts() { - assertThat( getAuditReader().getRevisions( StrTestEntity.class, id ) ).isEqualTo( Arrays.asList( 1, 2 ) ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + assertThat( AuditReaderFactory.get( em ).getRevisions( StrTestEntity.class, id ) ).isEqualTo( Arrays.asList( 1, 2 ) ); + } ); } @Test - public void testHistoryOfId1() { - assertThat( getAuditReader().find( StrTestEntity.class, id, 1 ) ).isEqualTo( new StrTestEntity( "x", id ) ); - assertThat( getAuditReader().find( StrTestEntity.class, id, 2 ) ).isEqualTo( new StrTestEntity( "y", id ) ); + public void testHistoryOfId1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertThat( auditReader.find( StrTestEntity.class, id, 1 ) ).isEqualTo( new StrTestEntity( "x", id ) ); + assertThat( auditReader.find( StrTestEntity.class, id, 2 ) ).isEqualTo( new StrTestEntity( "y", id ) ); + } ); } private Instant getCurrentInstant() throws InterruptedException { diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/CustomNoListener.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/CustomNoListener.java index e4b5d1a74adb..abb95cf6acd3 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/CustomNoListener.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/CustomNoListener.java @@ -5,112 +5,108 @@ package org.hibernate.orm.test.envers.integration.reventity; import java.util.Arrays; -import jakarta.persistence.EntityManager; -import org.hibernate.envers.AuditReader; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.orm.test.envers.entities.StrTestEntity; import org.hibernate.orm.test.envers.entities.reventity.CustomDataRevEntity; -import org.junit.Test; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; +import org.hibernate.testing.envers.junit.EnversTest; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Adam Warski (adam at warski dot org) */ -public class CustomNoListener extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {StrTestEntity.class, CustomDataRevEntity.class}) +public class CustomNoListener { private Integer id; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {StrTestEntity.class, CustomDataRevEntity.class}; - } - - @Test - @Priority(10) - public void initData() throws InterruptedException { - EntityManager em = getEntityManager(); - + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Revision 1 - em.getTransaction().begin(); - StrTestEntity te = new StrTestEntity( "x" ); - em.persist( te ); - id = te.getId(); - - // Setting the data on the revision entity - CustomDataRevEntity custom = getAuditReader().getCurrentRevision( CustomDataRevEntity.class, false ); - custom.setData( "data1" ); + scope.inTransaction( em -> { + StrTestEntity te = new StrTestEntity( "x" ); + em.persist( te ); + id = te.getId(); - em.getTransaction().commit(); + // Setting the data on the revision entity + CustomDataRevEntity custom = AuditReaderFactory.get( em ).getCurrentRevision( CustomDataRevEntity.class, false ); + custom.setData( "data1" ); + } ); // Revision 2 - em.getTransaction().begin(); - te = em.find( StrTestEntity.class, id ); - te.setStr( "y" ); - - // Setting the data on the revision entity - custom = getAuditReader().getCurrentRevision( CustomDataRevEntity.class, false ); - custom.setData( "data2" ); + scope.inTransaction( em -> { + StrTestEntity te = em.find( StrTestEntity.class, id ); + te.setStr( "y" ); - em.getTransaction().commit(); + // Setting the data on the revision entity + CustomDataRevEntity custom = AuditReaderFactory.get( em ).getCurrentRevision( CustomDataRevEntity.class, false ); + custom.setData( "data2" ); + } ); // Revision 3 - no changes, but rev entity should be persisted - em.getTransaction().begin(); - - // Setting the data on the revision entity - custom = getAuditReader().getCurrentRevision( CustomDataRevEntity.class, true ); - custom.setData( "data3" ); - - em.getTransaction().commit(); + scope.inTransaction( em -> { + // Setting the data on the revision entity + CustomDataRevEntity custom = AuditReaderFactory.get( em ).getCurrentRevision( CustomDataRevEntity.class, true ); + custom.setData( "data3" ); + } ); // No changes, rev entity won't be persisted - em.getTransaction().begin(); - - // Setting the data on the revision entity - custom = getAuditReader().getCurrentRevision( CustomDataRevEntity.class, false ); - custom.setData( "data4" ); - - em.getTransaction().commit(); + scope.inTransaction( em -> { + // Setting the data on the revision entity + CustomDataRevEntity custom = AuditReaderFactory.get( em ).getCurrentRevision( CustomDataRevEntity.class, false ); + custom.setData( "data4" ); + } ); // Revision 4 - em.getTransaction().begin(); - te = em.find( StrTestEntity.class, id ); - te.setStr( "z" ); - - // Setting the data on the revision entity - custom = getAuditReader().getCurrentRevision( CustomDataRevEntity.class, false ); - custom.setData( "data5" ); + scope.inTransaction( em -> { + StrTestEntity te = em.find( StrTestEntity.class, id ); + te.setStr( "z" ); - custom = getAuditReader().getCurrentRevision( CustomDataRevEntity.class, false ); - custom.setData( "data5bis" ); + // Setting the data on the revision entity + CustomDataRevEntity custom = AuditReaderFactory.get( em ).getCurrentRevision( CustomDataRevEntity.class, false ); + custom.setData( "data5" ); - em.getTransaction().commit(); + custom = AuditReaderFactory.get( em ).getCurrentRevision( CustomDataRevEntity.class, false ); + custom.setData( "data5bis" ); + } ); } @Test - public void testFindRevision() { - AuditReader vr = getAuditReader(); - - assert "data1".equals( vr.findRevision( CustomDataRevEntity.class, 1 ).getData() ); - assert "data2".equals( vr.findRevision( CustomDataRevEntity.class, 2 ).getData() ); - assert "data3".equals( vr.findRevision( CustomDataRevEntity.class, 3 ).getData() ); - assert "data5bis".equals( vr.findRevision( CustomDataRevEntity.class, 4 ).getData() ); + public void testFindRevision(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( "data1", auditReader.findRevision( CustomDataRevEntity.class, 1 ).getData() ); + assertEquals( "data2", auditReader.findRevision( CustomDataRevEntity.class, 2 ).getData() ); + assertEquals( "data3", auditReader.findRevision( CustomDataRevEntity.class, 3 ).getData() ); + assertEquals( "data5bis", auditReader.findRevision( CustomDataRevEntity.class, 4 ).getData() ); + } ); } @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2, 4 ).equals( getAuditReader().getRevisions( StrTestEntity.class, id ) ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + assertEquals( Arrays.asList( 1, 2, 4 ), AuditReaderFactory.get( em ).getRevisions( StrTestEntity.class, id ) ); + } ); } @Test - public void testHistoryOfId1() { - StrTestEntity ver1 = new StrTestEntity( "x", id ); - StrTestEntity ver2 = new StrTestEntity( "y", id ); - StrTestEntity ver3 = new StrTestEntity( "z", id ); - - assert getAuditReader().find( StrTestEntity.class, id, 1 ).equals( ver1 ); - assert getAuditReader().find( StrTestEntity.class, id, 2 ).equals( ver2 ); - assert getAuditReader().find( StrTestEntity.class, id, 3 ).equals( ver2 ); - assert getAuditReader().find( StrTestEntity.class, id, 4 ).equals( ver3 ); + public void testHistoryOfId1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + StrTestEntity ver1 = new StrTestEntity( "x", id ); + StrTestEntity ver2 = new StrTestEntity( "y", id ); + StrTestEntity ver3 = new StrTestEntity( "z", id ); + + assertEquals( ver1, auditReader.find( StrTestEntity.class, id, 1 ) ); + assertEquals( ver2, auditReader.find( StrTestEntity.class, id, 2 ) ); + assertEquals( ver2, auditReader.find( StrTestEntity.class, id, 3 ) ); + assertEquals( ver3, auditReader.find( StrTestEntity.class, id, 4 ) ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/CustomPropertyAccess.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/CustomPropertyAccess.java index e940a5ae1638..e6c0c7239803 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/CustomPropertyAccess.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/CustomPropertyAccess.java @@ -6,114 +6,133 @@ import java.util.Arrays; import java.util.Date; -import jakarta.persistence.EntityManager; import org.hibernate.dialect.CockroachDialect; -import org.hibernate.envers.AuditReader; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.exception.RevisionDoesNotExistException; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; import org.hibernate.orm.test.envers.entities.StrTestEntity; import org.hibernate.orm.test.envers.entities.reventity.CustomPropertyAccessRevEntity; -import org.hibernate.testing.SkipForDialect; -import org.junit.Test; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; +import org.hibernate.testing.orm.junit.SkipForDialect; +import org.hibernate.testing.envers.junit.EnversTest; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertTrue; /** * @author Adam Warski (adam at warski dot org) */ -public class CustomPropertyAccess extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {StrTestEntity.class, CustomPropertyAccessRevEntity.class}) +public class CustomPropertyAccess { private Integer id; private long timestamp1; private long timestamp2; private long timestamp3; - protected Class[] getAnnotatedClasses() { - return new Class[] {StrTestEntity.class, CustomPropertyAccessRevEntity.class}; - } - - @Test - @Priority(10) - public void initData() throws InterruptedException { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) throws InterruptedException { timestamp1 = System.currentTimeMillis(); Thread.sleep( 100 ); // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - StrTestEntity te = new StrTestEntity( "x" ); - em.persist( te ); - id = te.getId(); - em.getTransaction().commit(); + scope.inTransaction( em -> { + StrTestEntity te = new StrTestEntity( "x" ); + em.persist( te ); + id = te.getId(); + } ); timestamp2 = System.currentTimeMillis(); Thread.sleep( 100 ); // Revision 2 - em.getTransaction().begin(); - te = em.find( StrTestEntity.class, id ); - te.setStr( "y" ); - em.getTransaction().commit(); + scope.inTransaction( em -> { + StrTestEntity te = em.find( StrTestEntity.class, id ); + te.setStr( "y" ); + } ); timestamp3 = System.currentTimeMillis(); } - @Test(expected = RevisionDoesNotExistException.class) - public void testTimestamps1() { - getAuditReader().getRevisionNumberForDate( new Date( timestamp1 ) ); + @Test + public void testTimestamps1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + assertThrows( RevisionDoesNotExistException.class, () -> { + AuditReaderFactory.get( em ).getRevisionNumberForDate( new Date( timestamp1 ) ); + } ); + } ); } @Test - @SkipForDialect(value = CockroachDialect.class, comment = "Fails because of int size") - public void testTimestamps() { - assert getAuditReader().getRevisionNumberForDate( new Date( timestamp2 ) ).intValue() == 1; - assert getAuditReader().getRevisionNumberForDate( new Date( timestamp3 ) ).intValue() == 2; + @SkipForDialect(dialectClass = CockroachDialect.class, reason = "Fails because of int size") + public void testTimestamps(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( 1, auditReader.getRevisionNumberForDate( new Date( timestamp2 ) ).intValue() ); + assertEquals( 2, auditReader.getRevisionNumberForDate( new Date( timestamp3 ) ).intValue() ); + } ); } @Test - public void testDatesForRevisions() { - AuditReader vr = getAuditReader(); - assert vr.getRevisionNumberForDate( vr.getRevisionDate( 1 ) ).intValue() == 1; - assert vr.getRevisionNumberForDate( vr.getRevisionDate( 2 ) ).intValue() == 2; + public void testDatesForRevisions(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( 1, auditReader.getRevisionNumberForDate( auditReader.getRevisionDate( 1 ) ).intValue() ); + assertEquals( 2, auditReader.getRevisionNumberForDate( auditReader.getRevisionDate( 2 ) ).intValue() ); + } ); } @Test - public void testRevisionsForDates() { - AuditReader vr = getAuditReader(); + public void testRevisionsForDates(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); - assert vr.getRevisionDate( vr.getRevisionNumberForDate( new Date( timestamp2 ) ) ).getTime() <= timestamp2; - assert vr.getRevisionDate( vr.getRevisionNumberForDate( new Date( timestamp2 ) ).intValue() + 1 ) - .getTime() > timestamp2; + assertTrue( auditReader.getRevisionDate( auditReader.getRevisionNumberForDate( new Date( timestamp2 ) ) ).getTime() <= timestamp2 ); + assertTrue( auditReader.getRevisionDate( auditReader.getRevisionNumberForDate( new Date( timestamp2 ) ).intValue() + 1 ) + .getTime() > timestamp2 ); - assert vr.getRevisionDate( vr.getRevisionNumberForDate( new Date( timestamp3 ) ) ).getTime() <= timestamp3; + assertTrue( auditReader.getRevisionDate( auditReader.getRevisionNumberForDate( new Date( timestamp3 ) ) ).getTime() <= timestamp3 ); + } ); } @Test - public void testFindRevision() { - AuditReader vr = getAuditReader(); - - long rev1Timestamp = vr.findRevision( CustomPropertyAccessRevEntity.class, 1 ).getCustomTimestamp(); - assert rev1Timestamp > timestamp1; - assert rev1Timestamp <= timestamp2; - - long rev2Timestamp = vr.findRevision( CustomPropertyAccessRevEntity.class, 2 ).getCustomTimestamp(); - assert rev2Timestamp > timestamp2; - assert rev2Timestamp <= timestamp3; + public void testFindRevision(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + + long rev1Timestamp = auditReader.findRevision( CustomPropertyAccessRevEntity.class, 1 ).getCustomTimestamp(); + assertTrue( rev1Timestamp > timestamp1 ); + assertTrue( rev1Timestamp <= timestamp2 ); + + long rev2Timestamp = auditReader.findRevision( CustomPropertyAccessRevEntity.class, 2 ).getCustomTimestamp(); + assertTrue( rev2Timestamp > timestamp2 ); + assertTrue( rev2Timestamp <= timestamp3 ); + } ); } @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( StrTestEntity.class, id ) ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + assertEquals( Arrays.asList( 1, 2 ), AuditReaderFactory.get( em ).getRevisions( StrTestEntity.class, id ) ); + } ); } @Test - public void testHistoryOfId1() { - StrTestEntity ver1 = new StrTestEntity( "x", id ); - StrTestEntity ver2 = new StrTestEntity( "y", id ); - - assert getAuditReader().find( StrTestEntity.class, id, 1 ).equals( ver1 ); - assert getAuditReader().find( StrTestEntity.class, id, 2 ).equals( ver2 ); + public void testHistoryOfId1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + StrTestEntity ver1 = new StrTestEntity( "x", id ); + StrTestEntity ver2 = new StrTestEntity( "y", id ); + + assertEquals( ver1, auditReader.find( StrTestEntity.class, id, 1 ) ); + assertEquals( ver2, auditReader.find( StrTestEntity.class, id, 2 ) ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/DifferentDBSchemaTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/DifferentDBSchemaTest.java index 9825e6f5b3c2..21d86fc17a16 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/DifferentDBSchemaTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/DifferentDBSchemaTest.java @@ -4,20 +4,26 @@ */ package org.hibernate.orm.test.envers.integration.reventity; -import java.util.Arrays; -import java.util.Map; -import jakarta.persistence.EntityManager; - -import org.hibernate.cfg.Environment; import org.hibernate.dialect.H2Dialect; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.configuration.EnversSettings; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.StrTestEntity; import org.hibernate.mapping.Table; +import org.hibernate.orm.test.envers.entities.StrTestEntity; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.AfterClassTemplate; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.DomainModel; +import org.hibernate.testing.orm.junit.DomainModelScope; +import org.hibernate.testing.orm.junit.RequiresDialect; +import org.hibernate.testing.orm.junit.ServiceRegistry; +import org.hibernate.testing.orm.junit.SessionFactory; +import org.hibernate.testing.orm.junit.SessionFactoryScope; +import org.hibernate.testing.orm.junit.Setting; +import org.junit.jupiter.api.Test; -import org.hibernate.testing.RequiresDialect; -import org.junit.Test; +import java.util.Arrays; + +import static org.junit.jupiter.api.Assertions.assertEquals; /** * Tests simple auditing process (read and write operations) when REVINFO and audit tables @@ -26,64 +32,63 @@ * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) */ @RequiresDialect(H2Dialect.class) -public class DifferentDBSchemaTest extends BaseEnversJPAFunctionalTestCase { - private static final String SCHEMA_NAME = "ENVERS_AUDIT"; +@EnversTest +@DomainModel(annotatedClasses = {StrTestEntity.class}) +@ServiceRegistry(settings = @Setting(name = EnversSettings.DEFAULT_SCHEMA, value = DifferentDBSchemaTest.SCHEMA_NAME)) +@SessionFactory(exportSchema = false) +public class DifferentDBSchemaTest { + static final String SCHEMA_NAME = "ENVERS_AUDIT"; private Integer steId = null; - @Override - protected void addConfigOptions(Map options) { - super.addConfigOptions( options ); - // Creates new schema after establishing connection - options.putAll( Environment.getProperties() ); - options.put( EnversSettings.DEFAULT_SCHEMA, SCHEMA_NAME ); - } - - @Override - protected String createSecondSchema() { - return SCHEMA_NAME; - } - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {StrTestEntity.class}; - } + @BeforeClassTemplate + public void initData(SessionFactoryScope scope) { + // Create the schema used for audit tables as well + scope.getSessionFactory().getSchemaManager().create( true ); - @Test - @Priority(10) - public void initData() throws InterruptedException { // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - StrTestEntity ste = new StrTestEntity( "x" ); - em.persist( ste ); - steId = ste.getId(); - em.getTransaction().commit(); + scope.inTransaction( em -> { + StrTestEntity ste = new StrTestEntity( "x" ); + em.persist( ste ); + steId = ste.getId(); + } ); // Revision 2 - em.getTransaction().begin(); - ste = em.find( StrTestEntity.class, steId ); - ste.setStr( "y" ); - em.getTransaction().commit(); + scope.inTransaction( em -> { + StrTestEntity ste = em.find( StrTestEntity.class, steId ); + ste.setStr( "y" ); + } ); + } + + @AfterClassTemplate + public void cleanUp(SessionFactoryScope scope) { + // Drop the schema used for audit tables as well + scope.getSessionFactory().getSchemaManager().dropMappedObjects( true ); } @Test - public void testRevinfoSchemaName() { - Table revisionTable = metadata().getEntityBinding( "org.hibernate.envers.enhanced.SequenceIdRevisionEntity" ) - .getTable(); - assert SCHEMA_NAME.equals( revisionTable.getSchema() ); + public void testRevinfoSchemaName(DomainModelScope scope) { + Table revisionTable = scope.getDomainModel() + .getEntityBinding( "org.hibernate.envers.enhanced.SequenceIdRevisionEntity" ).getTable(); + assertEquals( SCHEMA_NAME, revisionTable.getSchema() ); } @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( StrTestEntity.class, steId ) ); + public void testRevisionsCounts(SessionFactoryScope scope) { + scope.inSession( em -> { + assertEquals( Arrays.asList( 1, 2 ), + AuditReaderFactory.get( em ).getRevisions( StrTestEntity.class, steId ) ); + } ); } @Test - public void testHistoryOfId1() { - StrTestEntity ver1 = new StrTestEntity( "x", steId ); - StrTestEntity ver2 = new StrTestEntity( "y", steId ); + public void testHistoryOfId1(SessionFactoryScope scope) { + scope.inSession( em -> { + final var auditReader = AuditReaderFactory.get( em ); + StrTestEntity ver1 = new StrTestEntity( "x", steId ); + StrTestEntity ver2 = new StrTestEntity( "y", steId ); - assert getAuditReader().find( StrTestEntity.class, steId, 1 ).equals( ver1 ); - assert getAuditReader().find( StrTestEntity.class, steId, 2 ).equals( ver2 ); + assertEquals( ver1, auditReader.find( StrTestEntity.class, steId, 1 ) ); + assertEquals( ver2, auditReader.find( StrTestEntity.class, steId, 2 ) ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/ExceptionListener.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/ExceptionListener.java index 772b64b16a8c..f37f95987841 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/ExceptionListener.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/ExceptionListener.java @@ -4,41 +4,42 @@ */ package org.hibernate.orm.test.envers.integration.reventity; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; import org.hibernate.orm.test.envers.entities.StrTestEntity; -import org.junit.Test; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; +import org.hibernate.testing.envers.junit.EnversTest; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; /** * @author Adam Warski (adam at warski dot org) */ -public class ExceptionListener extends BaseEnversJPAFunctionalTestCase { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {StrTestEntity.class, ExceptionListenerRevEntity.class}; - } +@EnversTest +@Jpa(annotatedClasses = {StrTestEntity.class, ExceptionListenerRevEntity.class}) +public class ExceptionListener { - @Test(expected = RuntimeException.class) - public void testTransactionRollback() throws InterruptedException { + @Test + public void testTransactionRollback(EntityManagerFactoryScope scope) { // Trying to persist an entity - however the listener should throw an exception, so the entity // shouldn't be persisted - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - StrTestEntity te = new StrTestEntity( "x" ); - em.persist( te ); - em.getTransaction().commit(); + assertThrows( RuntimeException.class, () -> { + scope.inTransaction( em -> { + StrTestEntity te = new StrTestEntity( "x" ); + em.persist( te ); + } ); + } ); } @Test - public void testDataNotPersisted() { + public void testDataNotPersisted(EntityManagerFactoryScope scope) { // Checking if the entity became persisted - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - Long count = (Long) em.createQuery( "select count(s) from StrTestEntity s where s.str = 'x'" ) - .getSingleResult(); - assert count == 0l; - em.getTransaction().commit(); + scope.inTransaction( em -> { + Long count = (Long) em.createQuery( "select count(s) from StrTestEntity s where s.str = 'x'" ) + .getSingleResult(); + assertEquals( 0L, count ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/GloballyConfiguredRevListenerTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/GloballyConfiguredRevListenerTest.java index c6059dc2caac..b205495144e4 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/GloballyConfiguredRevListenerTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/GloballyConfiguredRevListenerTest.java @@ -4,47 +4,35 @@ */ package org.hibernate.orm.test.envers.integration.reventity; -import java.util.Map; -import jakarta.persistence.EntityManager; - import org.hibernate.envers.configuration.EnversSettings; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; import org.hibernate.orm.test.envers.entities.StrTestEntity; - +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Assert; -import org.junit.Test; +import org.hibernate.testing.orm.junit.Jpa; +import org.hibernate.testing.orm.junit.Setting; + +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) */ @JiraKey(value = "HHH-6696") -public class GloballyConfiguredRevListenerTest extends BaseEnversJPAFunctionalTestCase { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {StrTestEntity.class}; - } - - @Override - protected void addConfigOptions(Map options) { - super.addConfigOptions( options ); - options.put( EnversSettings.REVISION_LISTENER, CountingRevisionListener.class.getName() ); - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - +@EnversTest +@Jpa(annotatedClasses = {StrTestEntity.class}, + integrationSettings = @Setting(name = EnversSettings.REVISION_LISTENER, value = "org.hibernate.orm.test.envers.integration.reventity.CountingRevisionListener")) +public class GloballyConfiguredRevListenerTest { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { CountingRevisionListener.revisionCount = 0; // Revision 1 - em.getTransaction().begin(); - StrTestEntity te = new StrTestEntity( "data" ); - em.persist( te ); - em.getTransaction().commit(); + scope.inTransaction( em -> { + StrTestEntity te = new StrTestEntity( "data" ); + em.persist( te ); + } ); - Assert.assertEquals( 1, CountingRevisionListener.revisionCount ); + assertEquals( 1, CountingRevisionListener.revisionCount ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/Inherited.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/Inherited.java index 51e6fbe161d7..ce998940c01f 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/Inherited.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/Inherited.java @@ -4,132 +4,155 @@ */ package org.hibernate.orm.test.envers.integration.reventity; +import org.hibernate.dialect.CockroachDialect; +import org.hibernate.envers.AuditReader; +import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.envers.exception.RevisionDoesNotExistException; +import org.hibernate.orm.test.envers.entities.StrTestEntity; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; +import org.hibernate.testing.orm.junit.SkipForDialect; +import org.junit.jupiter.api.Test; + import java.util.Arrays; import java.util.Date; import java.util.HashSet; import java.util.Map; import java.util.Set; -import jakarta.persistence.EntityManager; -import org.hibernate.dialect.CockroachDialect; -import org.hibernate.envers.AuditReader; -import org.hibernate.envers.exception.RevisionDoesNotExistException; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.StrTestEntity; - -import org.hibernate.testing.SkipForDialect; -import org.junit.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertTrue; /** * @author Adam Warski (adam at warski dot org) */ -public class Inherited extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {StrTestEntity.class, InheritedRevEntity.class}) +public class Inherited { private Integer id; private long timestamp1; private long timestamp2; private long timestamp3; - protected Class[] getAnnotatedClasses() { - return new Class[] {StrTestEntity.class, InheritedRevEntity.class}; - } - - @Test - @Priority(10) - public void initData() throws InterruptedException { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) throws InterruptedException { timestamp1 = System.currentTimeMillis(); Thread.sleep( 100 ); // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - StrTestEntity te = new StrTestEntity( "x" ); - em.persist( te ); - id = te.getId(); - em.getTransaction().commit(); + scope.inTransaction( em -> { + StrTestEntity te = new StrTestEntity( "x" ); + em.persist( te ); + id = te.getId(); + } ); timestamp2 = System.currentTimeMillis(); Thread.sleep( 100 ); // Revision 2 - em.getTransaction().begin(); - te = em.find( StrTestEntity.class, id ); - te.setStr( "y" ); - em.getTransaction().commit(); + scope.inTransaction( em -> { + StrTestEntity te = em.find( StrTestEntity.class, id ); + te.setStr( "y" ); + } ); timestamp3 = System.currentTimeMillis(); } - @Test(expected = RevisionDoesNotExistException.class) - public void testTimestamps1() { - getAuditReader().getRevisionNumberForDate( new Date( timestamp1 ) ); + @Test + public void testTimestamps1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertThrows( RevisionDoesNotExistException.class, + () -> auditReader.getRevisionNumberForDate( new Date( timestamp1 ) ) ); + } ); } @Test - @SkipForDialect(value = CockroachDialect.class, comment = "Fails because of int size") - public void testTimestamps() { - assert getAuditReader().getRevisionNumberForDate( new Date( timestamp2 ) ).intValue() == 1; - assert getAuditReader().getRevisionNumberForDate( new Date( timestamp3 ) ).intValue() == 2; + @SkipForDialect(dialectClass = CockroachDialect.class, reason = "Fails because of int size") + public void testTimestamps(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( 1, auditReader.getRevisionNumberForDate( new Date( timestamp2 ) ).intValue() ); + assertEquals( 2, auditReader.getRevisionNumberForDate( new Date( timestamp3 ) ).intValue() ); + } ); } @Test - public void testDatesForRevisions() { - AuditReader vr = getAuditReader(); - assert vr.getRevisionNumberForDate( vr.getRevisionDate( 1 ) ).intValue() == 1; - assert vr.getRevisionNumberForDate( vr.getRevisionDate( 2 ) ).intValue() == 2; + public void testDatesForRevisions(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + AuditReader vr = AuditReaderFactory.get( em ); + assertEquals( 1, vr.getRevisionNumberForDate( vr.getRevisionDate( 1 ) ).intValue() ); + assertEquals( 2, vr.getRevisionNumberForDate( vr.getRevisionDate( 2 ) ).intValue() ); + } ); } @Test - public void testRevisionsForDates() { - AuditReader vr = getAuditReader(); - - assert vr.getRevisionDate( vr.getRevisionNumberForDate( new Date( timestamp2 ) ) ).getTime() <= timestamp2; - assert vr.getRevisionDate( vr.getRevisionNumberForDate( new Date( timestamp2 ) ).intValue() + 1 ) - .getTime() > timestamp2; - - assert vr.getRevisionDate( vr.getRevisionNumberForDate( new Date( timestamp3 ) ) ).getTime() <= timestamp3; + public void testRevisionsForDates(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + AuditReader vr = AuditReaderFactory.get( em ); + + assertTrue( vr.getRevisionDate( vr.getRevisionNumberForDate( new Date( timestamp2 ) ) ) + .getTime() <= timestamp2 ); + assertTrue( vr.getRevisionDate( vr.getRevisionNumberForDate( new Date( timestamp2 ) ).intValue() + 1 ) + .getTime() > timestamp2 ); + + assertTrue( vr.getRevisionDate( vr.getRevisionNumberForDate( new Date( timestamp3 ) ) ) + .getTime() <= timestamp3 ); + } ); } @Test - public void testFindRevision() { - AuditReader vr = getAuditReader(); - - long rev1Timestamp = vr.findRevision( InheritedRevEntity.class, 1 ).getTimestamp(); - assert rev1Timestamp > timestamp1; - assert rev1Timestamp <= timestamp2; - - long rev2Timestamp = vr.findRevision( InheritedRevEntity.class, 2 ).getTimestamp(); - assert rev2Timestamp > timestamp2; - assert rev2Timestamp <= timestamp3; + public void testFindRevision(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + AuditReader vr = AuditReaderFactory.get( em ); + + long rev1Timestamp = vr.findRevision( InheritedRevEntity.class, 1 ).getTimestamp(); + assertTrue( rev1Timestamp > timestamp1 ); + assertTrue( rev1Timestamp <= timestamp2 ); + + long rev2Timestamp = vr.findRevision( InheritedRevEntity.class, 2 ).getTimestamp(); + assertTrue( rev2Timestamp > timestamp2 ); + assertTrue( rev2Timestamp <= timestamp3 ); + } ); } @Test - public void testFindRevisions() { - AuditReader vr = getAuditReader(); - - Set revNumbers = new HashSet(); - revNumbers.add( 1 ); - revNumbers.add( 2 ); - - Map revisionMap = vr.findRevisions( InheritedRevEntity.class, revNumbers ); - assert (revisionMap.size() == 2); - assert (revisionMap.get( 1 ).equals( vr.findRevision( InheritedRevEntity.class, 1 ) )); - assert (revisionMap.get( 2 ).equals( vr.findRevision( InheritedRevEntity.class, 2 ) )); + public void testFindRevisions(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + AuditReader vr = AuditReaderFactory.get( em ); + + Set revNumbers = new HashSet(); + revNumbers.add( 1 ); + revNumbers.add( 2 ); + + Map revisionMap = vr.findRevisions( InheritedRevEntity.class, revNumbers ); + assertEquals( 2, revisionMap.size() ); + assertEquals( vr.findRevision( InheritedRevEntity.class, 1 ), revisionMap.get( 1 ) ); + assertEquals( vr.findRevision( InheritedRevEntity.class, 2 ), revisionMap.get( 2 ) ); + } ); } @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( StrTestEntity.class, id ) ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + assertEquals( Arrays.asList( 1, 2 ), AuditReaderFactory.get( em ).getRevisions( StrTestEntity.class, id ) ); + } ); } @Test - public void testHistoryOfId1() { - StrTestEntity ver1 = new StrTestEntity( "x", id ); - StrTestEntity ver2 = new StrTestEntity( "y", id ); - - assert getAuditReader().find( StrTestEntity.class, id, 1 ).equals( ver1 ); - assert getAuditReader().find( StrTestEntity.class, id, 2 ).equals( ver2 ); + public void testHistoryOfId1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + StrTestEntity ver1 = new StrTestEntity( "x", id ); + StrTestEntity ver2 = new StrTestEntity( "y", id ); + + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( ver1, auditReader.find( StrTestEntity.class, id, 1 ) ); + assertEquals( ver2, auditReader.find( StrTestEntity.class, id, 2 ) ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/Listener.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/Listener.java index 2a1663676b4b..fea9df347cc6 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/Listener.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/Listener.java @@ -9,138 +9,157 @@ import java.util.HashSet; import java.util.Map; import java.util.Set; -import jakarta.persistence.EntityManager; import org.hibernate.envers.AuditReader; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.exception.RevisionDoesNotExistException; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; import org.hibernate.orm.test.envers.entities.StrTestEntity; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; -import org.junit.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertTrue; /** * @author Adam Warski (adam at warski dot org) */ -public class Listener extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {StrTestEntity.class, ListenerRevEntity.class}) +public class Listener { private Integer id; private long timestamp1; private long timestamp2; private long timestamp3; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {StrTestEntity.class, ListenerRevEntity.class}; - } - - @Test - @Priority(10) - public void initData() throws InterruptedException { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) throws InterruptedException { timestamp1 = System.currentTimeMillis(); Thread.sleep( 100 ); // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - - TestRevisionListener.data = "data1"; + scope.inTransaction( em -> { + TestRevisionListener.data = "data1"; - StrTestEntity te = new StrTestEntity( "x" ); - em.persist( te ); - id = te.getId(); - em.getTransaction().commit(); + StrTestEntity te = new StrTestEntity( "x" ); + em.persist( te ); + id = te.getId(); + } ); timestamp2 = System.currentTimeMillis(); Thread.sleep( 100 ); // Revision 2 - em.getTransaction().begin(); - te = em.find( StrTestEntity.class, id ); + scope.inTransaction( em -> { + StrTestEntity te = em.find( StrTestEntity.class, id ); - TestRevisionListener.data = "data2"; + TestRevisionListener.data = "data2"; - te.setStr( "y" ); - em.getTransaction().commit(); + te.setStr( "y" ); + } ); timestamp3 = System.currentTimeMillis(); } - @Test(expected = RevisionDoesNotExistException.class) - public void testTimestamps1() { - getAuditReader().getRevisionNumberForDate( new Date( timestamp1 ) ); + @Test + public void testTimestamps1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertThrows( RevisionDoesNotExistException.class, + () -> auditReader.getRevisionNumberForDate( new Date( timestamp1 ) ) ); + } ); } @Test - public void testTimestamps() { - assert getAuditReader().getRevisionNumberForDate( new Date( timestamp2 ) ).intValue() == 1; - assert getAuditReader().getRevisionNumberForDate( new Date( timestamp3 ) ).intValue() == 2; + public void testTimestamps(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( 1, auditReader.getRevisionNumberForDate( new Date( timestamp2 ) ).intValue() ); + assertEquals( 2, auditReader.getRevisionNumberForDate( new Date( timestamp3 ) ).intValue() ); + } ); } @Test - public void testDatesForRevisions() { - AuditReader vr = getAuditReader(); - assert vr.getRevisionNumberForDate( vr.getRevisionDate( 1 ) ).intValue() == 1; - assert vr.getRevisionNumberForDate( vr.getRevisionDate( 2 ) ).intValue() == 2; + public void testDatesForRevisions(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + AuditReader vr = AuditReaderFactory.get( em ); + assertEquals( 1, vr.getRevisionNumberForDate( vr.getRevisionDate( 1 ) ).intValue() ); + assertEquals( 2, vr.getRevisionNumberForDate( vr.getRevisionDate( 2 ) ).intValue() ); + } ); } @Test - public void testRevisionsForDates() { - AuditReader vr = getAuditReader(); + public void testRevisionsForDates(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + AuditReader vr = AuditReaderFactory.get( em ); - assert vr.getRevisionDate( vr.getRevisionNumberForDate( new Date( timestamp2 ) ) ).getTime() <= timestamp2; - assert vr.getRevisionDate( vr.getRevisionNumberForDate( new Date( timestamp2 ) ).intValue() + 1 ) - .getTime() > timestamp2; + assertTrue( vr.getRevisionDate( vr.getRevisionNumberForDate( new Date( timestamp2 ) ) ).getTime() <= timestamp2 ); + assertTrue( vr.getRevisionDate( vr.getRevisionNumberForDate( new Date( timestamp2 ) ).intValue() + 1 ) + .getTime() > timestamp2 ); - assert vr.getRevisionDate( vr.getRevisionNumberForDate( new Date( timestamp3 ) ) ).getTime() <= timestamp3; + assertTrue( vr.getRevisionDate( vr.getRevisionNumberForDate( new Date( timestamp3 ) ) ).getTime() <= timestamp3 ); + } ); } @Test - public void testFindRevision() { - AuditReader vr = getAuditReader(); + public void testFindRevision(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + AuditReader vr = AuditReaderFactory.get( em ); - ListenerRevEntity rev1Data = vr.findRevision( ListenerRevEntity.class, 1 ); - ListenerRevEntity rev2Data = vr.findRevision( ListenerRevEntity.class, 2 ); + ListenerRevEntity rev1Data = vr.findRevision( ListenerRevEntity.class, 1 ); + ListenerRevEntity rev2Data = vr.findRevision( ListenerRevEntity.class, 2 ); - long rev1Timestamp = rev1Data.getTimestamp(); - assert rev1Timestamp > timestamp1; - assert rev1Timestamp <= timestamp2; + long rev1Timestamp = rev1Data.getTimestamp(); + assertTrue( rev1Timestamp > timestamp1 ); + assertTrue( rev1Timestamp <= timestamp2 ); - assert "data1".equals( rev1Data.getData() ); + assertEquals( "data1", rev1Data.getData() ); - long rev2Timestamp = rev2Data.getTimestamp(); - assert rev2Timestamp > timestamp2; - assert rev2Timestamp <= timestamp3; + long rev2Timestamp = rev2Data.getTimestamp(); + assertTrue( rev2Timestamp > timestamp2 ); + assertTrue( rev2Timestamp <= timestamp3 ); - assert "data2".equals( rev2Data.getData() ); + assertEquals( "data2", rev2Data.getData() ); + } ); } @Test - public void testFindRevisions() { - AuditReader vr = getAuditReader(); - - Set revNumbers = new HashSet(); - revNumbers.add( 1 ); - revNumbers.add( 2 ); - - Map revisionMap = vr.findRevisions( ListenerRevEntity.class, revNumbers ); - assert (revisionMap.size() == 2); - assert (revisionMap.get( 1 ).equals( vr.findRevision( ListenerRevEntity.class, 1 ) )); - assert (revisionMap.get( 2 ).equals( vr.findRevision( ListenerRevEntity.class, 2 ) )); + public void testFindRevisions(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + AuditReader vr = AuditReaderFactory.get( em ); + + Set revNumbers = new HashSet(); + revNumbers.add( 1 ); + revNumbers.add( 2 ); + + Map revisionMap = vr.findRevisions( ListenerRevEntity.class, revNumbers ); + assertEquals( 2, revisionMap.size() ); + assertEquals( vr.findRevision( ListenerRevEntity.class, 1 ), revisionMap.get( 1 ) ); + assertEquals( vr.findRevision( ListenerRevEntity.class, 2 ), revisionMap.get( 2 ) ); + } ); } @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( StrTestEntity.class, id ) ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + assertEquals( Arrays.asList( 1, 2 ), AuditReaderFactory.get( em ).getRevisions( StrTestEntity.class, id ) ); + } ); } @Test - public void testHistoryOfId1() { - StrTestEntity ver1 = new StrTestEntity( "x", id ); - StrTestEntity ver2 = new StrTestEntity( "y", id ); - - assert getAuditReader().find( StrTestEntity.class, id, 1 ).equals( ver1 ); - assert getAuditReader().find( StrTestEntity.class, id, 2 ).equals( ver2 ); + public void testHistoryOfId1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + StrTestEntity ver1 = new StrTestEntity( "x", id ); + StrTestEntity ver2 = new StrTestEntity( "y", id ); + + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( ver1, auditReader.find( StrTestEntity.class, id, 1 ) ); + assertEquals( ver2, auditReader.find( StrTestEntity.class, id, 2 ) ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/LocalDateTimeTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/LocalDateTimeTest.java index ea0c8b17ce93..862879bcdc1a 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/LocalDateTimeTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/LocalDateTimeTest.java @@ -10,82 +10,67 @@ import java.time.temporal.ChronoUnit; import java.util.Date; -import jakarta.persistence.EntityManager; - +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.test.entities.reventity.CustomLocalDateTimeRevEntity; -import org.hibernate.testing.orm.junit.JiraKey; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; import org.hibernate.orm.test.envers.entities.StrTestEntity; -import org.junit.Test; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.JiraKey; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertTrue; /** * @author Chris Cranford */ -@JiraKey( value = "HHH-10496" ) -public class LocalDateTimeTest extends BaseEnversJPAFunctionalTestCase { +@JiraKey(value = "HHH-10496") +@EnversTest +@Jpa(annotatedClasses = {StrTestEntity.class, CustomLocalDateTimeRevEntity.class}) +public class LocalDateTimeTest { private Instant timestampStart; private Instant timestampEnd; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { - StrTestEntity.class, - CustomLocalDateTimeRevEntity.class - }; - } + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) throws InterruptedException { + timestampStart = Instant.now(); - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - try { - timestampStart = Instant.now(); - - // some DBMs truncate time to seconds. - Thread.sleep( 1100 ); + // some DBMs truncate time to seconds. + Thread.sleep( 1100 ); + // Revision 1 + scope.inTransaction( em -> { StrTestEntity entity = new StrTestEntity( "x" ); - - // Revision 1 - em.getTransaction().begin(); em.persist( entity ); - em.getTransaction().commit(); + } ); - timestampEnd = Instant.now().plus( 1L, ChronoUnit.SECONDS ); - } - catch( InterruptedException x ) { - fail( "Unexpected interrupted exception" ); - } - finally { - em.close(); - } + timestampEnd = Instant.now().plus( 1L, ChronoUnit.SECONDS ); } @Test - public void testTimestampsUsingDate() { - // expect just one revision prior to this timestamp. - assertEquals( 1, getAuditReader().getRevisionNumberForDate( Date.from( timestampEnd ) ) ); + public void testTimestampsUsingDate(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + // expect just one revision prior to this timestamp. + assertEquals( 1, AuditReaderFactory.get( em ).getRevisionNumberForDate( Date.from( timestampEnd ) ) ); + } ); } @Test - public void testRevisionEntityLocalDateTime() { - // get revision - CustomLocalDateTimeRevEntity revInfo = getAuditReader().findRevision( CustomLocalDateTimeRevEntity.class, 1 ); - assertNotNull( revInfo ); - // verify started before revision timestamp - final LocalDateTime started = LocalDateTime.ofInstant( timestampStart, ZoneId.systemDefault() ); - assertTrue( started.isBefore( revInfo.getLocalDateTimestamp() ) ); - // verify ended after revision timestamp - final LocalDateTime ended = LocalDateTime.ofInstant( timestampEnd, ZoneId.systemDefault() ); - assertTrue( ended.isAfter( revInfo.getLocalDateTimestamp() ) ); + public void testRevisionEntityLocalDateTime(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + // get revision + CustomLocalDateTimeRevEntity revInfo = AuditReaderFactory.get( em ).findRevision( CustomLocalDateTimeRevEntity.class, 1 ); + assertNotNull( revInfo ); + // verify started before revision timestamp + final LocalDateTime started = LocalDateTime.ofInstant( timestampStart, ZoneId.systemDefault() ); + assertTrue( started.isBefore( revInfo.getLocalDateTimestamp() ) ); + // verify ended after revision timestamp + final LocalDateTime ended = LocalDateTime.ofInstant( timestampEnd, ZoneId.systemDefault() ); + assertTrue( ended.isAfter( revInfo.getLocalDateTimestamp() ) ); + } ); } - } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/LongRevEntityInheritanceChildAuditing.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/LongRevEntityInheritanceChildAuditing.java new file mode 100644 index 000000000000..62848750bdb9 --- /dev/null +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/LongRevEntityInheritanceChildAuditing.java @@ -0,0 +1,59 @@ +/* + * SPDX-License-Identifier: Apache-2.0 + * Copyright Red Hat Inc. and Hibernate Authors + */ +package org.hibernate.orm.test.envers.integration.reventity; + +import java.util.List; + +import org.hibernate.mapping.Column; +import org.hibernate.mapping.Selectable; +import org.hibernate.orm.test.envers.integration.inheritance.joined.ChildEntity; +import org.hibernate.orm.test.envers.integration.inheritance.joined.ParentEntity; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.DomainModel; +import org.hibernate.testing.orm.junit.DomainModelScope; +import org.hibernate.testing.orm.junit.SessionFactory; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; + +/** + * A join-inheritance test using a custom revision entity where the revision number is a long, mapped in the database + * as an int. + * + * @author Adam Warski (adam at warski dot org) + */ +@EnversTest +@DomainModel(annotatedClasses = {ChildEntity.class, ParentEntity.class, LongRevNumberRevEntity.class}) +@SessionFactory +public class LongRevEntityInheritanceChildAuditing { + @Test + public void testChildRevColumnType(DomainModelScope scope) { + // Hibernate now sorts columns that are part of the key and therefore this test needs to test + // for the existence of the specific key column rather than the expectation that is exists at + // a specific order. + List childEntityKeyColumns = scope.getDomainModel() + .getEntityBinding( ChildEntity.class.getName() + "_AUD" ) + .getKey() + .getSelectables(); + + final String revisionColumnName = "REV"; // default revision field name + Column column = getColumnFromIteratorByName( childEntityKeyColumns, revisionColumnName ); + assertNotNull( column ); + assertEquals( "int", column.getSqlType() ); + } + + private Column getColumnFromIteratorByName(List selectables, String columnName) { + for ( Selectable selectable : selectables ) { + if ( selectable instanceof Column ) { + Column column = (Column) selectable; + if ( columnName.equals( column.getName() ) ) { + return column; + } + } + } + return null; + } +} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/LongRevNumber.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/LongRevNumber.java index 3e31a1046b60..681965585601 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/LongRevNumber.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/LongRevNumber.java @@ -8,77 +8,84 @@ import java.util.HashSet; import java.util.Map; import java.util.Set; -import jakarta.persistence.EntityManager; import org.hibernate.envers.AuditReader; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.orm.test.envers.entities.StrTestEntity; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; -import org.junit.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Adam Warski (adam at warski dot org) */ -public class LongRevNumber extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {StrTestEntity.class, LongRevNumberRevEntity.class}) +public class LongRevNumber { private Integer id; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {StrTestEntity.class, LongRevNumberRevEntity.class}; - } - - @Test - @Priority(10) - public void initData() throws InterruptedException { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - StrTestEntity te = new StrTestEntity( "x" ); - em.persist( te ); - id = te.getId(); - em.getTransaction().commit(); + scope.inTransaction( em -> { + StrTestEntity te = new StrTestEntity( "x" ); + em.persist( te ); + id = te.getId(); + } ); // Revision 2 - em.getTransaction().begin(); - te = em.find( StrTestEntity.class, id ); - te.setStr( "y" ); - em.getTransaction().commit(); + scope.inTransaction( em -> { + StrTestEntity te = em.find( StrTestEntity.class, id ); + te.setStr( "y" ); + } ); } @Test - public void testFindRevision() { - AuditReader vr = getAuditReader(); + public void testFindRevision(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + AuditReader vr = AuditReaderFactory.get( em ); - assert vr.findRevision( LongRevNumberRevEntity.class, 1l ).getCustomId() == 1l; - assert vr.findRevision( LongRevNumberRevEntity.class, 2l ).getCustomId() == 2l; + assertEquals( 1l, vr.findRevision( LongRevNumberRevEntity.class, 1l ).getCustomId() ); + assertEquals( 2l, vr.findRevision( LongRevNumberRevEntity.class, 2l ).getCustomId() ); + } ); } @Test - public void testFindRevisions() { - AuditReader vr = getAuditReader(); + public void testFindRevisions(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + AuditReader vr = AuditReaderFactory.get( em ); - Set revNumbers = new HashSet(); - revNumbers.add( 1l ); - revNumbers.add( 2l ); + Set revNumbers = new HashSet(); + revNumbers.add( 1l ); + revNumbers.add( 2l ); - Map revisionMap = vr.findRevisions( LongRevNumberRevEntity.class, revNumbers ); - assert (revisionMap.size() == 2); - assert (revisionMap.get( 1l ).equals( vr.findRevision( LongRevNumberRevEntity.class, 1l ) )); - assert (revisionMap.get( 2l ).equals( vr.findRevision( LongRevNumberRevEntity.class, 2l ) )); + Map revisionMap = vr.findRevisions( LongRevNumberRevEntity.class, revNumbers ); + assertEquals( 2, revisionMap.size() ); + assertEquals( vr.findRevision( LongRevNumberRevEntity.class, 1l ), revisionMap.get( 1l ) ); + assertEquals( vr.findRevision( LongRevNumberRevEntity.class, 2l ), revisionMap.get( 2l ) ); + } ); } @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1l, 2l ).equals( getAuditReader().getRevisions( StrTestEntity.class, id ) ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + assertEquals( Arrays.asList( 1l, 2l ), AuditReaderFactory.get( em ).getRevisions( StrTestEntity.class, id ) ); + } ); } @Test - public void testHistoryOfId1() { - StrTestEntity ver1 = new StrTestEntity( "x", id ); - StrTestEntity ver2 = new StrTestEntity( "y", id ); + public void testHistoryOfId1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + StrTestEntity ver1 = new StrTestEntity( "x", id ); + StrTestEntity ver2 = new StrTestEntity( "y", id ); - assert getAuditReader().find( StrTestEntity.class, id, 1l ).equals( ver1 ); - assert getAuditReader().find( StrTestEntity.class, id, 2l ).equals( ver2 ); + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( ver1, auditReader.find( StrTestEntity.class, id, 1l ) ); + assertEquals( ver2, auditReader.find( StrTestEntity.class, id, 2l ) ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/MonotonicRevisionNumberTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/MonotonicRevisionNumberTest.java index d33783363625..a210fe655653 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/MonotonicRevisionNumberTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/MonotonicRevisionNumberTest.java @@ -4,10 +4,6 @@ */ package org.hibernate.orm.test.envers.integration.reventity; -import static org.assertj.core.api.Assertions.assertThat; - -import java.util.Optional; - import org.hibernate.boot.model.relational.AuxiliaryDatabaseObject; import org.hibernate.boot.model.relational.Database; import org.hibernate.boot.model.relational.SqlStringGenerationContext; @@ -15,34 +11,41 @@ import org.hibernate.dialect.OracleDialect; import org.hibernate.envers.enhanced.OrderedSequenceGenerator; import org.hibernate.envers.enhanced.SequenceIdRevisionEntity; -import org.hibernate.orm.test.envers.BaseEnversFunctionalTestCase; -import org.hibernate.orm.test.envers.entities.StrIntTestEntity; import org.hibernate.id.IdentifierGenerator; +import org.hibernate.orm.test.envers.entities.StrIntTestEntity; import org.hibernate.persister.entity.EntityPersister; - -import org.hibernate.testing.RequiresDialect; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.DomainModel; +import org.hibernate.testing.orm.junit.DomainModelScope; import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Assert; -import org.junit.Test; +import org.hibernate.testing.orm.junit.RequiresDialect; +import org.hibernate.testing.orm.junit.SessionFactory; +import org.hibernate.testing.orm.junit.SessionFactoryScope; +import org.junit.jupiter.api.Test; + +import java.util.Optional; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assertions.assertTrue; /** * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) */ @JiraKey(value = "HHH-7669") @RequiresDialect(OracleDialect.class) -public class MonotonicRevisionNumberTest extends BaseEnversFunctionalTestCase { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {StrIntTestEntity.class}; // Otherwise revision entity is not generated. - } - +@EnversTest +@DomainModel(annotatedClasses = {StrIntTestEntity.class}) +@SessionFactory +public class MonotonicRevisionNumberTest { @Test - public void testOracleSequenceOrder() { - EntityPersister persister = sessionFactory().getMappingMetamodel().getEntityDescriptor(SequenceIdRevisionEntity.class.getName()); + public void testOracleSequenceOrder(SessionFactoryScope scope, DomainModelScope domainModelScope) { + EntityPersister persister = scope.getSessionFactory() + .getMappingMetamodel() + .getEntityDescriptor( SequenceIdRevisionEntity.class.getName() ); IdentifierGenerator generator = persister.getIdentifierGenerator(); - Assert.assertTrue( OrderedSequenceGenerator.class.isInstance( generator ) ); + assertTrue( OrderedSequenceGenerator.class.isInstance( generator ) ); - Database database = metadata().getDatabase(); + Database database = domainModelScope.getDomainModel().getDatabase(); SqlStringGenerationContext sqlStringGenerationContext = SqlStringGenerationContextImpl.forTests( database.getJdbcEnvironment() ); Optional sequenceOptional = database.getAuxiliaryDatabaseObjects().stream() @@ -50,9 +53,9 @@ public void testOracleSequenceOrder() { .findFirst(); assertThat( sequenceOptional ).isPresent(); String[] sqlCreateStrings = sequenceOptional.get().sqlCreateStrings( sqlStringGenerationContext ); - Assert.assertTrue( - "Oracle sequence needs to be ordered in RAC environment.", - sqlCreateStrings[0].toLowerCase().endsWith( " order" ) + assertTrue( + sqlCreateStrings[0].toLowerCase().endsWith( " order" ), + "Oracle sequence needs to be ordered in RAC environment." ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/OverrideCustomRevListenerTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/OverrideCustomRevListenerTest.java index 5ad9040ea170..50ce122eea50 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/OverrideCustomRevListenerTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/OverrideCustomRevListenerTest.java @@ -4,17 +4,17 @@ */ package org.hibernate.orm.test.envers.integration.reventity; -import org.hibernate.internal.util.collections.ArrayHelper; - +import org.hibernate.envers.configuration.EnversSettings; +import org.hibernate.orm.test.envers.entities.StrTestEntity; import org.hibernate.testing.orm.junit.JiraKey; +import org.hibernate.testing.orm.junit.Jpa; +import org.hibernate.testing.orm.junit.Setting; /** * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) */ @JiraKey(value = "HHH-6696") +@Jpa(annotatedClasses = {StrTestEntity.class, ListenerRevEntity.class}, + integrationSettings = @Setting(name = EnversSettings.REVISION_LISTENER, value = "org.hibernate.orm.test.envers.integration.reventity.CountingRevisionListener")) public class OverrideCustomRevListenerTest extends GloballyConfiguredRevListenerTest { - @Override - protected Class[] getAnnotatedClasses() { - return ArrayHelper.join( super.getAnnotatedClasses(), ListenerRevEntity.class ); - } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/OverrideDefaultRevListenerTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/OverrideDefaultRevListenerTest.java index f2ffbffcd2b0..bb442d6db7d1 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/OverrideDefaultRevListenerTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/OverrideDefaultRevListenerTest.java @@ -4,17 +4,22 @@ */ package org.hibernate.orm.test.envers.integration.reventity; -import org.hibernate.internal.util.collections.ArrayHelper; - +import org.hibernate.envers.configuration.EnversSettings; +import org.hibernate.orm.test.envers.entities.StrTestEntity; +import org.hibernate.testing.envers.junit.EnversTest; import org.hibernate.testing.orm.junit.JiraKey; +import org.hibernate.testing.orm.junit.Jpa; +import org.hibernate.testing.orm.junit.Setting; /** * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) */ @JiraKey(value = "HHH-6696") +@EnversTest +@Jpa( + annotatedClasses = {StrTestEntity.class, LongRevNumberRevEntity.class}, + integrationSettings = @Setting(name = EnversSettings.REVISION_LISTENER, + value = "org.hibernate.orm.test.envers.integration.reventity.TestRevisionListener") +) public class OverrideDefaultRevListenerTest extends GloballyConfiguredRevListenerTest { - @Override - protected Class[] getAnnotatedClasses() { - return ArrayHelper.join( super.getAnnotatedClasses(), LongRevNumberRevEntity.class ); - } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/RevisionNumberOverflowTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/RevisionNumberOverflowTest.java index 60ccbab7a835..553de2f7842d 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/RevisionNumberOverflowTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/RevisionNumberOverflowTest.java @@ -4,82 +4,82 @@ */ package org.hibernate.orm.test.envers.integration.reventity; -import java.util.List; -import java.util.Objects; - import jakarta.persistence.Entity; import jakarta.persistence.GeneratedValue; import jakarta.persistence.Id; - import org.hibernate.annotations.GenericGenerator; import org.hibernate.annotations.Parameter; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.RevisionEntity; import org.hibernate.envers.RevisionNumber; import org.hibernate.envers.RevisionTimestamp; import org.hibernate.envers.exception.AuditException; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.StrTestEntity; import org.hibernate.id.enhanced.TableGenerator; -import org.junit.Test; - +import org.hibernate.orm.test.envers.entities.StrTestEntity; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; + +import java.util.List; +import java.util.Objects; import static org.hibernate.testing.junit4.ExtraAssertions.assertTyping; -import static org.hibernate.testing.transaction.TransactionUtil.doInJPA; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * This test checks that when revision number overflow occurs an {@link AuditException} is thrown. - * + *

    * In order to test this use case, the {@code REVISION_GENERATOR} is explicitly initialized at * {@link Integer.MAX_VALUE} and we attempt to persist two entities that are audited. The * expectation is that the test should persist the first entity but the second should throw the * desired exception. - * + *

    * Revision numbers should always be positive values and always increasing, this is due to the * nature of how the {@link org.hibernate.envers.AuditReader} builds audit queries. * * @author Chris Cranford */ @JiraKey(value = "HHH-6615") -public class RevisionNumberOverflowTest extends BaseEnversJPAFunctionalTestCase { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { StrTestEntity.class, CustomCappedRevEntity.class }; - } - - @Priority(10) - @Test - public void initData() { +@EnversTest +@Jpa(annotatedClasses = {StrTestEntity.class, RevisionNumberOverflowTest.CustomCappedRevEntity.class}) +public class RevisionNumberOverflowTest { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Save entity with maximum possible revision number - doInJPA( this::entityManagerFactory, entityManager -> { + scope.inTransaction( entityManager -> { final StrTestEntity entity = new StrTestEntity( "test1" ); entityManager.persist( entity ); } ); // Save entity with overflow revision number try { - doInJPA( this::entityManagerFactory, entityManager -> { + scope.inTransaction( entityManager -> { final StrTestEntity entity = new StrTestEntity( "test2" ); entityManager.persist( entity ); } ); - } catch ( Exception e ) { + } + catch (Exception e) { assertRootCause( e, AuditException.class, "Negative revision numbers are not allowed" ); } } @Test - public void testRevisionExpectations() { + public void testRevisionExpectations(EntityManagerFactoryScope scope) { final StrTestEntity expected = new StrTestEntity( "test1", 1 ); - - // Verify there was only one entity instance saved - List results = getAuditReader().createQuery().forRevisionsOfEntity( StrTestEntity.class, true, true ).getResultList(); - assertEquals( 1, results.size() ); - assertEquals( expected, results.get( 0 ) ); - - // Verify entity instance saved has revision Integer.MAX_VALUE - assertEquals( expected, getAuditReader().find( StrTestEntity.class, 1, Integer.MAX_VALUE ) ); + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + // Verify there was only one entity instance saved + List results = auditReader.createQuery().forRevisionsOfEntity( StrTestEntity.class, true, true ) + .getResultList(); + assertEquals( 1, results.size() ); + assertEquals( expected, results.get( 0 ) ); + + // Verify entity instance saved has revision Integer.MAX_VALUE + assertEquals( expected, auditReader.find( StrTestEntity.class, 1, Integer.MAX_VALUE ) ); + } ); } private static void assertRootCause(Exception exception, Class type, String message) { @@ -100,11 +100,11 @@ private static void assertRootCause(Exception exception, Class type, String m @GenericGenerator(name = "EnversCappedRevisionNumberGenerator", strategy = "org.hibernate.id.enhanced.TableGenerator", parameters = { - @Parameter(name = TableGenerator.TABLE_PARAM, value = "REVISION_GENERATOR"), - @Parameter(name = TableGenerator.INITIAL_PARAM, value = "2147483647"), - @Parameter(name = TableGenerator.INCREMENT_PARAM, value = "1"), - @Parameter(name = TableGenerator.CONFIG_PREFER_SEGMENT_PER_ENTITY, value = "true") - }) + @Parameter(name = TableGenerator.TABLE_PARAM, value = "REVISION_GENERATOR"), + @Parameter(name = TableGenerator.INITIAL_PARAM, value = "2147483647"), + @Parameter(name = TableGenerator.INCREMENT_PARAM, value = "1"), + @Parameter(name = TableGenerator.CONFIG_PREFER_SEGMENT_PER_ENTITY, value = "true") + }) @RevisionEntity public static class CustomCappedRevEntity { @Id @@ -141,7 +141,7 @@ public boolean equals(Object o) { } CustomCappedRevEntity that = (CustomCappedRevEntity) o; return rev == that.rev && - timestamp == that.timestamp; + timestamp == that.timestamp; } @Override diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/removal/AbstractRevisionEntityRemovalTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/removal/AbstractRevisionEntityRemovalTest.java index 209fe5c42afc..9bdb8d75b3c4 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/removal/AbstractRevisionEntityRemovalTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/removal/AbstractRevisionEntityRemovalTest.java @@ -4,107 +4,86 @@ */ package org.hibernate.orm.test.envers.integration.reventity.removal; -import java.util.ArrayList; -import java.util.Map; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; import org.hibernate.orm.test.envers.entities.StrTestEntity; import org.hibernate.orm.test.envers.entities.manytomany.ListOwnedEntity; import org.hibernate.orm.test.envers.entities.manytomany.ListOwningEntity; - -import org.hibernate.testing.DialectChecks; -import org.hibernate.testing.RequiresDialectFeature; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.DialectFeatureChecks; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Assert; -import org.junit.Test; +import org.hibernate.testing.orm.junit.RequiresDialectFeature; +import org.junit.jupiter.api.Test; + +import java.util.ArrayList; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertNull; /** * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) */ -@JiraKey( value = "HHH-7807" ) -@RequiresDialectFeature(DialectChecks.SupportsCascadeDeleteCheck.class) -public abstract class AbstractRevisionEntityRemovalTest extends BaseEnversJPAFunctionalTestCase { - @Override - protected void addConfigOptions(Map options) { - options.put( "org.hibernate.envers.cascade_delete_revision", "true" ); - } - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { - StrTestEntity.class, ListOwnedEntity.class, ListOwningEntity.class - }; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); +@JiraKey(value = "HHH-7807") +@RequiresDialectFeature(feature = DialectFeatureChecks.SupportsCascadeDeleteCheck.class) +@EnversTest +public abstract class AbstractRevisionEntityRemovalTest { + + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + // Initial state - no revisions + scope.inTransaction( em -> { + assertEquals( 0, countRecords( em, "STR_TEST_AUD" ) ); + assertEquals( 0, countRecords( em, "ListOwned_AUD" ) ); + assertEquals( 0, countRecords( em, "ListOwning_AUD" ) ); + assertEquals( 0, countRecords( em, "ListOwning_ListOwned_AUD" ) ); + } ); // Revision 1 - simple entity - em.getTransaction().begin(); - em.persist( new StrTestEntity( "data" ) ); - em.getTransaction().commit(); + scope.inTransaction( em -> { + em.persist( new StrTestEntity( "data" ) ); + } ); // Revision 2 - many-to-many relation - em.getTransaction().begin(); - ListOwnedEntity owned = new ListOwnedEntity( 1, "data" ); - ListOwningEntity owning = new ListOwningEntity( 1, "data" ); - owned.setReferencing( new ArrayList() ); - owning.setReferences( new ArrayList() ); - owned.getReferencing().add( owning ); - owning.getReferences().add( owned ); - em.persist( owned ); - em.persist( owning ); - em.getTransaction().commit(); - - em.getTransaction().begin(); - Assert.assertEquals( 1, countRecords( em, "STR_TEST_AUD" ) ); - Assert.assertEquals( 1, countRecords( em, "ListOwned_AUD" ) ); - Assert.assertEquals( 1, countRecords( em, "ListOwning_AUD" ) ); - Assert.assertEquals( 1, countRecords( em, "ListOwning_ListOwned_AUD" ) ); - em.getTransaction().commit(); - - em.close(); + scope.inTransaction( em -> { + ListOwnedEntity owned = new ListOwnedEntity( 1, "data" ); + ListOwningEntity owning = new ListOwningEntity( 1, "data" ); + owned.setReferencing( new ArrayList() ); + owning.setReferences( new ArrayList() ); + owned.getReferencing().add( owning ); + owning.getReferences().add( owned ); + em.persist( owned ); + em.persist( owning ); + } ); + + scope.inTransaction( em -> { + assertEquals( 1, countRecords( em, "STR_TEST_AUD" ) ); + assertEquals( 1, countRecords( em, "ListOwned_AUD" ) ); + assertEquals( 1, countRecords( em, "ListOwning_AUD" ) ); + assertEquals( 1, countRecords( em, "ListOwning_ListOwned_AUD" ) ); + } ); } @Test - @Priority(9) - public void testRemoveExistingRevisions() { - EntityManager em = getEntityManager(); - removeRevision( em, 1 ); - removeRevision( em, 2 ); - em.close(); + public void testRemoveExistingRevisions(EntityManagerFactoryScope scope) { + removeRevision( scope, 1 ); + removeRevision( scope, 2 ); } - @Test - @Priority(8) - public void testEmptyAuditTables() { - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - - Assert.assertEquals( 0, countRecords( em, "STR_TEST_AUD" ) ); - Assert.assertEquals( 0, countRecords( em, "ListOwned_AUD" ) ); - Assert.assertEquals( 0, countRecords( em, "ListOwning_AUD" ) ); - Assert.assertEquals( 0, countRecords( em, "ListOwning_ListOwned_AUD" ) ); - - em.getTransaction().commit(); - em.close(); + private int countRecords(jakarta.persistence.EntityManager em, String tableName) { + return ((Number) em.createNativeQuery( "SELECT COUNT(*) FROM " + tableName ).getSingleResult()).intValue(); } - private int countRecords(EntityManager em, String tableName) { - return ( (Number) em.createNativeQuery( "SELECT COUNT(*) FROM " + tableName ).getSingleResult() ).intValue(); - } + private void removeRevision(EntityManagerFactoryScope scope, Number number) { + scope.inTransaction( em -> { + Object entity = em.find( getRevisionEntityClass(), number ); + assertNotNull( entity ); + em.remove( entity ); + } ); - private void removeRevision(EntityManager em, Number number) { - em.getTransaction().begin(); - Object entity = em.find( getRevisionEntityClass(), number ); - Assert.assertNotNull( entity ); - em.remove( entity ); - em.getTransaction().commit(); - Assert.assertNull( em.find( getRevisionEntityClass(), number ) ); + scope.inEntityManager( em -> { + assertNull( em.find( getRevisionEntityClass(), number ) ); + } ); } protected abstract Class getRevisionEntityClass(); diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/removal/RemoveDefaultRevisionEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/removal/RemoveDefaultRevisionEntity.java index dbae5455ac9c..e1a8f573acf0 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/removal/RemoveDefaultRevisionEntity.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/removal/RemoveDefaultRevisionEntity.java @@ -5,14 +5,18 @@ package org.hibernate.orm.test.envers.integration.reventity.removal; import org.hibernate.envers.enhanced.SequenceIdRevisionEntity; - -import org.hibernate.testing.DialectChecks; -import org.hibernate.testing.RequiresDialectFeature; +import org.hibernate.orm.test.envers.entities.StrTestEntity; +import org.hibernate.orm.test.envers.entities.manytomany.ListOwnedEntity; +import org.hibernate.orm.test.envers.entities.manytomany.ListOwningEntity; +import org.hibernate.testing.orm.junit.Jpa; +import org.hibernate.testing.orm.junit.Setting; /** * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) */ -@RequiresDialectFeature(DialectChecks.SupportsCascadeDeleteCheck.class) +@Jpa(annotatedClasses = { + StrTestEntity.class, ListOwnedEntity.class, ListOwningEntity.class +}, integrationSettings = @Setting(name = "org.hibernate.envers.cascade_delete_revision", value = "true")) public class RemoveDefaultRevisionEntity extends AbstractRevisionEntityRemovalTest { @Override protected Class getRevisionEntityClass() { diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/removal/RemoveTrackingRevisionEntity.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/removal/RemoveTrackingRevisionEntity.java index b83df8db8420..04b8d3c4acde 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/removal/RemoveTrackingRevisionEntity.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/removal/RemoveTrackingRevisionEntity.java @@ -4,23 +4,23 @@ */ package org.hibernate.orm.test.envers.integration.reventity.removal; -import java.util.Map; - import org.hibernate.envers.enhanced.SequenceIdTrackingModifiedEntitiesRevisionEntity; - -import org.hibernate.testing.DialectChecks; -import org.hibernate.testing.RequiresDialectFeature; +import org.hibernate.orm.test.envers.entities.StrTestEntity; +import org.hibernate.orm.test.envers.entities.manytomany.ListOwnedEntity; +import org.hibernate.orm.test.envers.entities.manytomany.ListOwningEntity; +import org.hibernate.testing.orm.junit.Jpa; +import org.hibernate.testing.orm.junit.Setting; /** * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) */ -@RequiresDialectFeature(DialectChecks.SupportsCascadeDeleteCheck.class) +@Jpa(annotatedClasses = { + StrTestEntity.class, ListOwnedEntity.class, ListOwningEntity.class +}, integrationSettings = { + @Setting(name = "org.hibernate.envers.cascade_delete_revision", value = "true"), + @Setting(name = "org.hibernate.envers.track_entities_changed_in_revision", value = "true") +}) public class RemoveTrackingRevisionEntity extends AbstractRevisionEntityRemovalTest { - @Override - public void addConfigOptions(Map configuration) { - super.addConfigOptions( configuration ); - configuration.put("org.hibernate.envers.track_entities_changed_in_revision", "true"); - } @Override protected Class getRevisionEntityClass() { diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/trackmodifiedentities/AnnotatedTrackingEntitiesTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/trackmodifiedentities/AnnotatedTrackingEntitiesTest.java index e15f5d6b54e7..3a0119af0466 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/trackmodifiedentities/AnnotatedTrackingEntitiesTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/trackmodifiedentities/AnnotatedTrackingEntitiesTest.java @@ -4,27 +4,25 @@ */ package org.hibernate.orm.test.envers.integration.reventity.trackmodifiedentities; -import java.util.Map; - import org.hibernate.envers.ModifiedEntityNames; import org.hibernate.envers.configuration.EnversSettings; +import org.hibernate.orm.test.envers.entities.StrIntTestEntity; +import org.hibernate.orm.test.envers.entities.StrTestEntity; import org.hibernate.orm.test.envers.entities.reventity.trackmodifiedentities.AnnotatedTrackingRevisionEntity; -import org.hibernate.internal.util.collections.ArrayHelper; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.DomainModel; +import org.hibernate.testing.orm.junit.ServiceRegistry; +import org.hibernate.testing.orm.junit.SessionFactory; +import org.hibernate.testing.orm.junit.Setting; /** * Tests proper behavior of revision entity that utilizes {@link ModifiedEntityNames} annotation. * * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) */ +@EnversTest +@DomainModel(annotatedClasses = {StrTestEntity.class, StrIntTestEntity.class, AnnotatedTrackingRevisionEntity.class}) +@ServiceRegistry(settings = @Setting(name = EnversSettings.TRACK_ENTITIES_CHANGED_IN_REVISION, value = "false")) +@SessionFactory public class AnnotatedTrackingEntitiesTest extends DefaultTrackingEntitiesTest { - @Override - protected Class[] getAnnotatedClasses() { - return ArrayHelper.join( super.getAnnotatedClasses(), AnnotatedTrackingRevisionEntity.class ); - } - - @Override - public void addConfigOptions(Map configuration) { - super.addConfigOptions( configuration ); - configuration.put( EnversSettings.TRACK_ENTITIES_CHANGED_IN_REVISION, "false" ); - } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/trackmodifiedentities/CustomTrackingEntitiesTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/trackmodifiedentities/CustomTrackingEntitiesTest.java index 16703fd7dece..32d1dccce39c 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/trackmodifiedentities/CustomTrackingEntitiesTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/trackmodifiedentities/CustomTrackingEntitiesTest.java @@ -4,21 +4,25 @@ */ package org.hibernate.orm.test.envers.integration.reventity.trackmodifiedentities; -import jakarta.persistence.EntityManager; - +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.EntityTrackingRevisionListener; import org.hibernate.envers.exception.AuditException; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; import org.hibernate.orm.test.envers.entities.StrIntTestEntity; import org.hibernate.orm.test.envers.entities.StrTestEntity; import org.hibernate.orm.test.envers.entities.reventity.trackmodifiedentities.CustomTrackingRevisionEntity; import org.hibernate.orm.test.envers.entities.reventity.trackmodifiedentities.CustomTrackingRevisionListener; import org.hibernate.orm.test.envers.entities.reventity.trackmodifiedentities.ModifiedEntityTypeEntity; import org.hibernate.orm.test.envers.tools.TestTools; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; -import org.junit.Test; +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertThrows; /** * Tests proper behavior of entity listener that implements {@link EntityTrackingRevisionListener} @@ -27,87 +31,94 @@ * * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) */ -public class CustomTrackingEntitiesTest extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = { + ModifiedEntityTypeEntity.class, + StrTestEntity.class, + StrIntTestEntity.class, + CustomTrackingRevisionEntity.class +}) +public class CustomTrackingEntitiesTest { private Integer steId = null; private Integer siteId = null; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { - ModifiedEntityTypeEntity.class, - StrTestEntity.class, - StrIntTestEntity.class, - CustomTrackingRevisionEntity.class - }; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Revision 1 - Adding two entities - em.getTransaction().begin(); - StrTestEntity ste = new StrTestEntity( "x" ); - StrIntTestEntity site = new StrIntTestEntity( "y", 1 ); - em.persist( ste ); - em.persist( site ); - steId = ste.getId(); - siteId = site.getId(); - em.getTransaction().commit(); + scope.inTransaction( em -> { + StrTestEntity ste = new StrTestEntity( "x" ); + StrIntTestEntity site = new StrIntTestEntity( "y", 1 ); + em.persist( ste ); + em.persist( site ); + steId = ste.getId(); + siteId = site.getId(); + } ); // Revision 2 - Modifying one entity - em.getTransaction().begin(); - site = em.find( StrIntTestEntity.class, siteId ); - site.setNumber( 2 ); - em.getTransaction().commit(); + scope.inTransaction( em -> { + StrIntTestEntity site = em.find( StrIntTestEntity.class, siteId ); + site.setNumber( 2 ); + } ); // Revision 3 - Deleting both entities - em.getTransaction().begin(); - ste = em.find( StrTestEntity.class, steId ); - site = em.find( StrIntTestEntity.class, siteId ); - em.remove( ste ); - em.remove( site ); - em.getTransaction().commit(); + scope.inTransaction( em -> { + StrTestEntity ste = em.find( StrTestEntity.class, steId ); + StrIntTestEntity site = em.find( StrIntTestEntity.class, siteId ); + em.remove( ste ); + em.remove( site ); + } ); } @Test - public void testTrackAddedEntities() { + public void testTrackAddedEntities(EntityManagerFactoryScope scope) { ModifiedEntityTypeEntity steDescriptor = new ModifiedEntityTypeEntity( StrTestEntity.class.getName() ); ModifiedEntityTypeEntity siteDescriptor = new ModifiedEntityTypeEntity( StrIntTestEntity.class.getName() ); - CustomTrackingRevisionEntity ctre = getAuditReader().findRevision( CustomTrackingRevisionEntity.class, 1 ); + scope.inEntityManager( em -> { + CustomTrackingRevisionEntity ctre = AuditReaderFactory.get( em ) + .findRevision( CustomTrackingRevisionEntity.class, 1 ); - assert ctre.getModifiedEntityTypes() != null; - assert ctre.getModifiedEntityTypes().size() == 2; - assert TestTools.makeSet( steDescriptor, siteDescriptor ).equals( ctre.getModifiedEntityTypes() ); + assertNotNull( ctre.getModifiedEntityTypes() ); + assertEquals( 2, ctre.getModifiedEntityTypes().size() ); + assertEquals( TestTools.makeSet( steDescriptor, siteDescriptor ), ctre.getModifiedEntityTypes() ); + } ); } @Test - public void testTrackModifiedEntities() { + public void testTrackModifiedEntities(EntityManagerFactoryScope scope) { ModifiedEntityTypeEntity siteDescriptor = new ModifiedEntityTypeEntity( StrIntTestEntity.class.getName() ); - CustomTrackingRevisionEntity ctre = getAuditReader().findRevision( CustomTrackingRevisionEntity.class, 2 ); + scope.inEntityManager( em -> { + CustomTrackingRevisionEntity ctre = AuditReaderFactory.get( em ) + .findRevision( CustomTrackingRevisionEntity.class, 2 ); - assert ctre.getModifiedEntityTypes() != null; - assert ctre.getModifiedEntityTypes().size() == 1; - assert TestTools.makeSet( siteDescriptor ).equals( ctre.getModifiedEntityTypes() ); + assertNotNull( ctre.getModifiedEntityTypes() ); + assertEquals( 1, ctre.getModifiedEntityTypes().size() ); + assertEquals( TestTools.makeSet( siteDescriptor ), ctre.getModifiedEntityTypes() ); + } ); } @Test - public void testTrackDeletedEntities() { + public void testTrackDeletedEntities(EntityManagerFactoryScope scope) { ModifiedEntityTypeEntity steDescriptor = new ModifiedEntityTypeEntity( StrTestEntity.class.getName() ); ModifiedEntityTypeEntity siteDescriptor = new ModifiedEntityTypeEntity( StrIntTestEntity.class.getName() ); - CustomTrackingRevisionEntity ctre = getAuditReader().findRevision( CustomTrackingRevisionEntity.class, 3 ); + scope.inEntityManager( em -> { + CustomTrackingRevisionEntity ctre = AuditReaderFactory.get( em ) + .findRevision( CustomTrackingRevisionEntity.class, 3 ); - assert ctre.getModifiedEntityTypes() != null; - assert ctre.getModifiedEntityTypes().size() == 2; - assert TestTools.makeSet( steDescriptor, siteDescriptor ).equals( ctre.getModifiedEntityTypes() ); + assertNotNull( ctre.getModifiedEntityTypes() ); + assertEquals( 2, ctre.getModifiedEntityTypes().size() ); + assertEquals( TestTools.makeSet( steDescriptor, siteDescriptor ), ctre.getModifiedEntityTypes() ); + } ); } - @Test(expected = AuditException.class) - public void testFindEntitiesChangedInRevisionException() { - getAuditReader().getCrossTypeRevisionChangesReader(); + @Test + public void testFindEntitiesChangedInRevisionException(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + assertThrows( AuditException.class, () -> { + AuditReaderFactory.get( em ).getCrossTypeRevisionChangesReader(); + } ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/trackmodifiedentities/DefaultTrackingEntitiesTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/trackmodifiedentities/DefaultTrackingEntitiesTest.java index 09cb42c46ab4..0bb7917bcf17 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/trackmodifiedentities/DefaultTrackingEntitiesTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/trackmodifiedentities/DefaultTrackingEntitiesTest.java @@ -4,23 +4,33 @@ */ package org.hibernate.orm.test.envers.integration.reventity.trackmodifiedentities; -import java.util.List; -import java.util.Map; -import jakarta.persistence.EntityManager; - +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.CrossTypeRevisionChangesReader; import org.hibernate.envers.RevisionType; import org.hibernate.envers.configuration.EnversSettings; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.StrIntTestEntity; -import org.hibernate.orm.test.envers.entities.StrTestEntity; -import org.hibernate.orm.test.envers.tools.TestTools; import org.hibernate.envers.tools.Pair; import org.hibernate.mapping.Column; import org.hibernate.mapping.Table; +import org.hibernate.orm.test.envers.entities.StrIntTestEntity; +import org.hibernate.orm.test.envers.entities.StrTestEntity; +import org.hibernate.orm.test.envers.tools.TestTools; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.DomainModel; +import org.hibernate.testing.orm.junit.DomainModelScope; +import org.hibernate.testing.orm.junit.ServiceRegistry; +import org.hibernate.testing.orm.junit.SessionFactory; +import org.hibernate.testing.orm.junit.SessionFactoryScope; +import org.hibernate.testing.orm.junit.Setting; +import org.junit.jupiter.api.Test; -import org.junit.Test; +import java.util.List; +import java.util.Map; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.junit.jupiter.api.Assertions.fail; /** * Tests proper behavior of tracking modified entity names when {@code org.hibernate.envers.track_entities_changed_in_revision} @@ -28,178 +38,211 @@ * * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) */ -@SuppressWarnings("unchecked") -public class DefaultTrackingEntitiesTest extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@DomainModel(annotatedClasses = {StrTestEntity.class, StrIntTestEntity.class}) +@ServiceRegistry(settings = @Setting(name = EnversSettings.TRACK_ENTITIES_CHANGED_IN_REVISION, value = "true")) +@SessionFactory +public class DefaultTrackingEntitiesTest { private Integer steId = null; private Integer siteId = null; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {StrTestEntity.class, StrIntTestEntity.class}; - } - - @Override - public void addConfigOptions(Map configuration) { - super.addConfigOptions( configuration ); - configuration.put( EnversSettings.TRACK_ENTITIES_CHANGED_IN_REVISION, "true" ); + @BeforeClassTemplate + public void initData(SessionFactoryScope scope) { + scope.inSession( em -> { + // Revision 1 - Adding two entities + em.getTransaction().begin(); + StrTestEntity ste = new StrTestEntity( "x" ); + StrIntTestEntity site = new StrIntTestEntity( "y", 1 ); + em.persist( ste ); + em.persist( site ); + steId = ste.getId(); + siteId = site.getId(); + em.getTransaction().commit(); + + // Revision 2 - Modifying one entity + em.getTransaction().begin(); + site = em.find( StrIntTestEntity.class, siteId ); + site.setNumber( 2 ); + em.getTransaction().commit(); + + // Revision 3 - Deleting both entities + em.getTransaction().begin(); + ste = em.find( StrTestEntity.class, steId ); + site = em.find( StrIntTestEntity.class, siteId ); + em.remove( ste ); + em.remove( site ); + em.getTransaction().commit(); + } ); } @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - // Revision 1 - Adding two entities - em.getTransaction().begin(); - StrTestEntity ste = new StrTestEntity( "x" ); - StrIntTestEntity site = new StrIntTestEntity( "y", 1 ); - em.persist( ste ); - em.persist( site ); - steId = ste.getId(); - siteId = site.getId(); - em.getTransaction().commit(); - - // Revision 2 - Modifying one entity - em.getTransaction().begin(); - site = em.find( StrIntTestEntity.class, siteId ); - site.setNumber( 2 ); - em.getTransaction().commit(); - - // Revision 3 - Deleting both entities - em.getTransaction().begin(); - ste = em.find( StrTestEntity.class, steId ); - site = em.find( StrIntTestEntity.class, siteId ); - em.remove( ste ); - em.remove( site ); - em.getTransaction().commit(); - } - - @Test - public void testRevEntityTableCreation() { - for ( Table table : metadata().collectTableMappings() ) { + public void testRevEntityTableCreation(DomainModelScope scope) { + for ( Table table : scope.getDomainModel().collectTableMappings() ) { if ( "REVCHANGES".equals( table.getName() ) ) { - assert table.getColumnSpan() == 2; - assert table.getColumn( new Column( "REV" ) ) != null; - assert table.getColumn( new Column( "ENTITYNAME" ) ) != null; + assertEquals( 2, table.getColumnSpan() ); + assertNotNull( table.getColumn( new Column( "REV" ) ) ); + assertNotNull( table.getColumn( new Column( "ENTITYNAME" ) ) ); return; } } - assert false; + fail( "REVCHANGES table not found" ); } @Test - public void testTrackAddedEntities() { + public void testTrackAddedEntities(SessionFactoryScope scope) { StrTestEntity ste = new StrTestEntity( "x", steId ); StrIntTestEntity site = new StrIntTestEntity( "y", 1, siteId ); - assert TestTools.checkCollection( getCrossTypeRevisionChangesReader().findEntities( 1 ), ste, site ); + scope.inSession( em -> { + assertTrue( TestTools.checkCollection( + getCrossTypeRevisionChangesReader( em ).findEntities( 1 ), + ste, + site + ) ); + } ); } @Test - public void testTrackModifiedEntities() { + public void testTrackModifiedEntities(SessionFactoryScope scope) { StrIntTestEntity site = new StrIntTestEntity( "y", 2, siteId ); - assert TestTools.checkCollection( getCrossTypeRevisionChangesReader().findEntities( 2 ), site ); + scope.inSession( em -> { + assertTrue( TestTools.checkCollection( + getCrossTypeRevisionChangesReader( em ).findEntities( 2 ), + site + ) ); + } ); } @Test - public void testTrackDeletedEntities() { + public void testTrackDeletedEntities(SessionFactoryScope scope) { StrTestEntity ste = new StrTestEntity( null, steId ); StrIntTestEntity site = new StrIntTestEntity( null, null, siteId ); - assert TestTools.checkCollection( getCrossTypeRevisionChangesReader().findEntities( 3 ), site, ste ); + scope.inSession( em -> { + assertTrue( TestTools.checkCollection( + getCrossTypeRevisionChangesReader( em ).findEntities( 3 ), + site, + ste + ) ); + } ); } @Test - public void testFindChangesInInvalidRevision() { - assert getCrossTypeRevisionChangesReader().findEntities( 4 ).isEmpty(); + public void testFindChangesInInvalidRevision(SessionFactoryScope scope) { + scope.inSession( em -> { + assertTrue( getCrossTypeRevisionChangesReader( em ).findEntities( 4 ).isEmpty() ); + } ); } @Test - public void testTrackAddedEntitiesGroupByRevisionType() { + public void testTrackAddedEntitiesGroupByRevisionType(SessionFactoryScope scope) { StrTestEntity ste = new StrTestEntity( "x", steId ); StrIntTestEntity site = new StrIntTestEntity( "y", 1, siteId ); - Map> result = getCrossTypeRevisionChangesReader().findEntitiesGroupByRevisionType( 1 ); - assert TestTools.checkCollection( result.get( RevisionType.ADD ), site, ste ); - assert TestTools.checkCollection( result.get( RevisionType.MOD ) ); - assert TestTools.checkCollection( result.get( RevisionType.DEL ) ); + scope.inSession( em -> { + Map> result = getCrossTypeRevisionChangesReader( em ) + .findEntitiesGroupByRevisionType( 1 ); + assertTrue( TestTools.checkCollection( result.get( RevisionType.ADD ), site, ste ) ); + assertTrue( TestTools.checkCollection( result.get( RevisionType.MOD ) ) ); + assertTrue( TestTools.checkCollection( result.get( RevisionType.DEL ) ) ); + } ); } @Test - public void testTrackModifiedEntitiesGroupByRevisionType() { + public void testTrackModifiedEntitiesGroupByRevisionType(SessionFactoryScope scope) { StrIntTestEntity site = new StrIntTestEntity( "y", 2, siteId ); - Map> result = getCrossTypeRevisionChangesReader().findEntitiesGroupByRevisionType( 2 ); - assert TestTools.checkCollection( result.get( RevisionType.ADD ) ); - assert TestTools.checkCollection( result.get( RevisionType.MOD ), site ); - assert TestTools.checkCollection( result.get( RevisionType.DEL ) ); + scope.inSession( em -> { + Map> result = getCrossTypeRevisionChangesReader( em ) + .findEntitiesGroupByRevisionType( 2 ); + assertTrue( TestTools.checkCollection( result.get( RevisionType.ADD ) ) ); + assertTrue( TestTools.checkCollection( result.get( RevisionType.MOD ), site ) ); + assertTrue( TestTools.checkCollection( result.get( RevisionType.DEL ) ) ); + } ); } @Test - public void testTrackDeletedEntitiesGroupByRevisionType() { + public void testTrackDeletedEntitiesGroupByRevisionType(SessionFactoryScope scope) { StrTestEntity ste = new StrTestEntity( null, steId ); StrIntTestEntity site = new StrIntTestEntity( null, null, siteId ); - Map> result = getCrossTypeRevisionChangesReader().findEntitiesGroupByRevisionType( 3 ); - assert TestTools.checkCollection( result.get( RevisionType.ADD ) ); - assert TestTools.checkCollection( result.get( RevisionType.MOD ) ); - assert TestTools.checkCollection( result.get( RevisionType.DEL ), site, ste ); + scope.inSession( em -> { + Map> result = getCrossTypeRevisionChangesReader( em ) + .findEntitiesGroupByRevisionType( 3 ); + assertTrue( TestTools.checkCollection( result.get( RevisionType.ADD ) ) ); + assertTrue( TestTools.checkCollection( result.get( RevisionType.MOD ) ) ); + assertTrue( TestTools.checkCollection( result.get( RevisionType.DEL ), site, ste ) ); + } ); } @Test - public void testFindChangedEntitiesByRevisionTypeADD() { + public void testFindChangedEntitiesByRevisionTypeADD(SessionFactoryScope scope) { StrTestEntity ste = new StrTestEntity( "x", steId ); StrIntTestEntity site = new StrIntTestEntity( "y", 1, siteId ); - assert TestTools.checkCollection( - getCrossTypeRevisionChangesReader().findEntities( 1, RevisionType.ADD ), - ste, - site - ); + scope.inSession( em -> { + assertTrue( TestTools.checkCollection( + getCrossTypeRevisionChangesReader( em ).findEntities( 1, RevisionType.ADD ), + ste, + site + ) ); + } ); } @Test - public void testFindChangedEntitiesByRevisionTypeMOD() { + public void testFindChangedEntitiesByRevisionTypeMOD(SessionFactoryScope scope) { StrIntTestEntity site = new StrIntTestEntity( "y", 2, siteId ); - assert TestTools.checkCollection( - getCrossTypeRevisionChangesReader().findEntities( 2, RevisionType.MOD ), - site - ); + scope.inSession( em -> { + assertTrue( TestTools.checkCollection( + getCrossTypeRevisionChangesReader( em ).findEntities( 2, RevisionType.MOD ), + site + ) ); + } ); } @Test - public void testFindChangedEntitiesByRevisionTypeDEL() { + public void testFindChangedEntitiesByRevisionTypeDEL(SessionFactoryScope scope) { StrTestEntity ste = new StrTestEntity( null, steId ); StrIntTestEntity site = new StrIntTestEntity( null, null, siteId ); - assert TestTools.checkCollection( - getCrossTypeRevisionChangesReader().findEntities( 3, RevisionType.DEL ), - ste, - site - ); + scope.inSession( em -> { + assertTrue( TestTools.checkCollection( + getCrossTypeRevisionChangesReader( em ).findEntities( 3, RevisionType.DEL ), + ste, + site + ) ); + } ); } @Test - public void testFindEntityTypesChangedInRevision() { - assert TestTools.makeSet( - Pair.make( StrTestEntity.class.getName(), StrTestEntity.class ), - Pair.make( StrIntTestEntity.class.getName(), StrIntTestEntity.class ) - ) - .equals( getCrossTypeRevisionChangesReader().findEntityTypes( 1 ) ); - - assert TestTools.makeSet( Pair.make( StrIntTestEntity.class.getName(), StrIntTestEntity.class ) ) - .equals( getCrossTypeRevisionChangesReader().findEntityTypes( 2 ) ); - - assert TestTools.makeSet( - Pair.make( StrTestEntity.class.getName(), StrTestEntity.class ), - Pair.make( StrIntTestEntity.class.getName(), StrIntTestEntity.class ) - ) - .equals( getCrossTypeRevisionChangesReader().findEntityTypes( 3 ) ); - } - - private CrossTypeRevisionChangesReader getCrossTypeRevisionChangesReader() { - return getAuditReader().getCrossTypeRevisionChangesReader(); + public void testFindEntityTypesChangedInRevision(SessionFactoryScope scope) { + scope.inSession( em -> { + assertEquals( + TestTools.makeSet( + Pair.make( StrTestEntity.class.getName(), StrTestEntity.class ), + Pair.make( StrIntTestEntity.class.getName(), StrIntTestEntity.class ) + ), + getCrossTypeRevisionChangesReader( em ).findEntityTypes( 1 ) + ); + + assertEquals( + TestTools.makeSet( Pair.make( StrIntTestEntity.class.getName(), StrIntTestEntity.class ) ), + getCrossTypeRevisionChangesReader( em ).findEntityTypes( 2 ) + ); + + assertEquals( + TestTools.makeSet( + Pair.make( StrTestEntity.class.getName(), StrTestEntity.class ), + Pair.make( StrIntTestEntity.class.getName(), StrIntTestEntity.class ) + ), + getCrossTypeRevisionChangesReader( em ).findEntityTypes( 3 ) + ); + } ); + } + + private CrossTypeRevisionChangesReader getCrossTypeRevisionChangesReader(jakarta.persistence.EntityManager em) { + return AuditReaderFactory.get( em ).getCrossTypeRevisionChangesReader(); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/trackmodifiedentities/EntityNamesTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/trackmodifiedentities/EntityNamesTest.java index c81a3ab3cd0f..ec7711bbf422 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/trackmodifiedentities/EntityNamesTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/trackmodifiedentities/EntityNamesTest.java @@ -4,82 +4,81 @@ */ package org.hibernate.orm.test.envers.integration.reventity.trackmodifiedentities; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - +import org.hibernate.Session; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.configuration.EnversSettings; -import org.hibernate.orm.test.envers.BaseEnversFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.tools.Pair; import org.hibernate.orm.test.envers.integration.entityNames.manyToManyAudited.Car; import org.hibernate.orm.test.envers.integration.entityNames.manyToManyAudited.Person; import org.hibernate.orm.test.envers.tools.TestTools; -import org.hibernate.envers.tools.Pair; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; +import org.hibernate.testing.orm.junit.Setting; +import org.junit.jupiter.api.Test; + +import java.util.ArrayList; +import java.util.List; -import org.junit.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) */ -public class EntityNamesTest extends BaseEnversFunctionalTestCase { - @Override - protected String[] getMappings() { - return new String[] {"mappings/entityNames/manyToManyAudited/mappings.hbm.xml"}; - } +@EnversTest +@Jpa(xmlMappings = "mappings/entityNames/manyToManyAudited/mappings.hbm.xml", + integrationSettings = @Setting(name = EnversSettings.TRACK_ENTITIES_CHANGED_IN_REVISION, value = "true")) +public class EntityNamesTest { + private Long person1Id; - @Override - protected void addSettings(Map settings) { - super.addSettings( settings ); - - settings.put( EnversSettings.TRACK_ENTITIES_CHANGED_IN_REVISION, "true" ); - } - - @Test - @Priority(10) - public void initData() { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { Person pers1 = new Person( "Hernan", 28 ); Person pers2 = new Person( "Leandro", 29 ); Person pers3 = new Person( "Barba", 32 ); Person pers4 = new Person( "Camomo", 15 ); - // Revision 1 - getSession().getTransaction().begin(); - List owners = new ArrayList(); - owners.add( pers1 ); - owners.add( pers2 ); - owners.add( pers3 ); - Car car1 = new Car( 5, owners ); - getSession().persist( car1 ); - getSession().getTransaction().commit(); - long person1Id = pers1.getId(); + scope.inEntityManager( em -> { + // Revision 1 + em.getTransaction().begin(); + List owners = new ArrayList(); + owners.add( pers1 ); + owners.add( pers2 ); + owners.add( pers3 ); + Car car1 = new Car( 5, owners ); + em.persist( car1 ); + em.getTransaction().commit(); + long person1Id = pers1.getId(); - // Revision 2 - owners = new ArrayList(); - owners.add( pers2 ); - owners.add( pers3 ); - owners.add( pers4 ); - Car car2 = new Car( 27, owners ); - getSession().getTransaction().begin(); - Person person1 = (Person) getSession().get( "Personaje", person1Id ); - person1.setName( "Hernan David" ); - person1.setAge( 40 ); - getSession().persist( car1 ); - getSession().persist( car2 ); - getSession().getTransaction().commit(); + // Revision 2 + owners = new ArrayList(); + owners.add( pers2 ); + owners.add( pers3 ); + owners.add( pers4 ); + Car car2 = new Car( 27, owners ); + em.getTransaction().begin(); + Person person1 = (Person) em.unwrap( Session.class ).get( "Personaje", person1Id ); + person1.setName( "Hernan David" ); + person1.setAge( 40 ); + em.persist( car1 ); + em.persist( car2 ); + em.getTransaction().commit(); + } ); } @Test - @SuppressWarnings("unchecked") - public void testModifiedEntityTypes() { - assert TestTools.makeSet( - Pair.make( Car.class.getName(), Car.class ), - Pair.make( "Personaje", Person.class ) - ) - .equals( getAuditReader().getCrossTypeRevisionChangesReader().findEntityTypes( 1 ) ); - assert TestTools.makeSet( - Pair.make( Car.class.getName(), Car.class ), - Pair.make( "Personaje", Person.class ) - ) - .equals( getAuditReader().getCrossTypeRevisionChangesReader().findEntityTypes( 2 ) ); + public void testModifiedEntityTypes(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + assertEquals( TestTools.makeSet( + Pair.make( Car.class.getName(), Car.class ), + Pair.make( "Personaje", Person.class ) + ), AuditReaderFactory.get( em ).getCrossTypeRevisionChangesReader().findEntityTypes( 1 ) ); + + assertEquals( TestTools.makeSet( + Pair.make( Car.class.getName(), Car.class ), + Pair.make( "Personaje", Person.class ) + ), AuditReaderFactory.get( em ).getCrossTypeRevisionChangesReader().findEntityTypes( 2 ) ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/trackmodifiedentities/ExtendedRevisionEntityTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/trackmodifiedentities/ExtendedRevisionEntityTest.java index 506d1322a165..ef2bc0d7c051 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/trackmodifiedentities/ExtendedRevisionEntityTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/trackmodifiedentities/ExtendedRevisionEntityTest.java @@ -4,38 +4,40 @@ */ package org.hibernate.orm.test.envers.integration.reventity.trackmodifiedentities; -import java.util.Map; - +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.DefaultTrackingModifiedEntitiesRevisionEntity; import org.hibernate.envers.configuration.EnversSettings; +import org.hibernate.orm.test.envers.entities.StrIntTestEntity; +import org.hibernate.orm.test.envers.entities.StrTestEntity; import org.hibernate.orm.test.envers.entities.reventity.trackmodifiedentities.ExtendedRevisionEntity; import org.hibernate.orm.test.envers.entities.reventity.trackmodifiedentities.ExtendedRevisionListener; -import org.hibernate.internal.util.collections.ArrayHelper; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.DomainModel; +import org.hibernate.testing.orm.junit.ServiceRegistry; +import org.hibernate.testing.orm.junit.SessionFactory; +import org.hibernate.testing.orm.junit.SessionFactoryScope; +import org.hibernate.testing.orm.junit.Setting; +import org.junit.jupiter.api.Test; -import org.junit.Assert; -import org.junit.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * Tests proper behavior of revision entity that extends {@link DefaultTrackingModifiedEntitiesRevisionEntity}. * * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) */ +@EnversTest +@DomainModel(annotatedClasses = {StrTestEntity.class, StrIntTestEntity.class, ExtendedRevisionEntity.class}) +@ServiceRegistry(settings = @Setting(name = EnversSettings.TRACK_ENTITIES_CHANGED_IN_REVISION, value = "false")) +@SessionFactory public class ExtendedRevisionEntityTest extends DefaultTrackingEntitiesTest { - @Override - protected Class[] getAnnotatedClasses() { - return ArrayHelper.join( super.getAnnotatedClasses(), ExtendedRevisionEntity.class ); - } - - @Override - public void addConfigOptions(Map configuration) { - super.addConfigOptions( configuration ); - configuration.put( EnversSettings.TRACK_ENTITIES_CHANGED_IN_REVISION, "false" ); - } - @Test - public void testCommentPropertyValue() { - ExtendedRevisionEntity ere = getAuditReader().findRevision( ExtendedRevisionEntity.class, 1 ); + public void testCommentPropertyValue(SessionFactoryScope scope) { + scope.inSession( session -> { + ExtendedRevisionEntity ere = AuditReaderFactory.get( session ) + .findRevision( ExtendedRevisionEntity.class, 1 ); - Assert.assertEquals( ExtendedRevisionListener.COMMENT_VALUE, ere.getComment() ); + assertEquals( ExtendedRevisionListener.COMMENT_VALUE, ere.getComment() ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/trackmodifiedentities/TrackingEntitiesMultipleChangesTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/trackmodifiedentities/TrackingEntitiesMultipleChangesTest.java index 6b2f2c066f22..65ab62852ede 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/trackmodifiedentities/TrackingEntitiesMultipleChangesTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/reventity/trackmodifiedentities/TrackingEntitiesMultipleChangesTest.java @@ -5,102 +5,100 @@ package org.hibernate.orm.test.envers.integration.reventity.trackmodifiedentities; import java.util.HashSet; -import java.util.Map; -import jakarta.persistence.EntityManager; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.CrossTypeRevisionChangesReader; import org.hibernate.envers.configuration.EnversSettings; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; import org.hibernate.orm.test.envers.entities.StrTestEntity; import org.hibernate.orm.test.envers.tools.TestTools; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; +import org.hibernate.testing.orm.junit.Setting; -import org.junit.Assert; -import org.junit.Test; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) */ -public class TrackingEntitiesMultipleChangesTest extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {StrTestEntity.class}, + integrationSettings = @Setting(name = EnversSettings.TRACK_ENTITIES_CHANGED_IN_REVISION, value = "true")) +public class TrackingEntitiesMultipleChangesTest { private Integer steId1 = null; private Integer steId2 = null; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {StrTestEntity.class}; - } - - @Override - protected void addConfigOptions(Map options) { - super.addConfigOptions( options ); - options.put( EnversSettings.TRACK_ENTITIES_CHANGED_IN_REVISION, "true" ); - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Revision 1 - Adding two entities - em.getTransaction().begin(); - StrTestEntity ste1 = new StrTestEntity( "x" ); - StrTestEntity ste2 = new StrTestEntity( "y" ); - em.persist( ste1 ); - em.persist( ste2 ); - steId1 = ste1.getId(); - steId2 = ste2.getId(); - em.getTransaction().commit(); + scope.inTransaction( em -> { + StrTestEntity ste1 = new StrTestEntity( "x" ); + StrTestEntity ste2 = new StrTestEntity( "y" ); + em.persist( ste1 ); + em.persist( ste2 ); + steId1 = ste1.getId(); + steId2 = ste2.getId(); + } ); // Revision 2 - Adding first and removing second entity - em.getTransaction().begin(); - ste1 = em.find( StrTestEntity.class, steId1 ); - ste2 = em.find( StrTestEntity.class, steId2 ); - ste1.setStr( "z" ); - em.remove( ste2 ); - em.getTransaction().commit(); + scope.inTransaction( em -> { + StrTestEntity ste1 = em.find( StrTestEntity.class, steId1 ); + StrTestEntity ste2 = em.find( StrTestEntity.class, steId2 ); + ste1.setStr( "z" ); + em.remove( ste2 ); + } ); // Revision 3 - Modifying and removing the same entity. - em.getTransaction().begin(); - ste1 = em.find( StrTestEntity.class, steId1 ); - ste1.setStr( "a" ); - em.merge( ste1 ); - em.remove( ste1 ); - em.getTransaction().commit(); + scope.inTransaction( em -> { + StrTestEntity ste1 = em.find( StrTestEntity.class, steId1 ); + ste1.setStr( "a" ); + em.merge( ste1 ); + em.remove( ste1 ); + } ); } @Test - public void testTrackAddedTwoEntities() { + public void testTrackAddedTwoEntities(EntityManagerFactoryScope scope) { StrTestEntity ste1 = new StrTestEntity( "x", steId1 ); StrTestEntity ste2 = new StrTestEntity( "y", steId2 ); - Assert.assertEquals( - TestTools.makeSet( ste1, ste2 ), - new HashSet( getCrossTypeRevisionChangesReader().findEntities( 1 ) ) - ); + scope.inEntityManager( em -> { + assertEquals( + TestTools.makeSet( ste1, ste2 ), + new HashSet( getCrossTypeRevisionChangesReader( em ).findEntities( 1 ) ) + ); + } ); } @Test - public void testTrackUpdateAndRemoveDifferentEntities() { + public void testTrackUpdateAndRemoveDifferentEntities(EntityManagerFactoryScope scope) { StrTestEntity ste1 = new StrTestEntity( "z", steId1 ); StrTestEntity ste2 = new StrTestEntity( null, steId2 ); - Assert.assertEquals( - TestTools.makeSet( ste1, ste2 ), - new HashSet( getCrossTypeRevisionChangesReader().findEntities( 2 ) ) - ); + scope.inEntityManager( em -> { + assertEquals( + TestTools.makeSet( ste1, ste2 ), + new HashSet( getCrossTypeRevisionChangesReader( em ).findEntities( 2 ) ) + ); + } ); } @Test - public void testTrackUpdateAndRemoveTheSameEntity() { + public void testTrackUpdateAndRemoveTheSameEntity(EntityManagerFactoryScope scope) { StrTestEntity ste1 = new StrTestEntity( null, steId1 ); - Assert.assertEquals( - TestTools.makeSet( ste1 ), - new HashSet( getCrossTypeRevisionChangesReader().findEntities( 3 ) ) - ); + scope.inEntityManager( em -> { + assertEquals( + TestTools.makeSet( ste1 ), + new HashSet( getCrossTypeRevisionChangesReader( em ).findEntities( 3 ) ) + ); + } ); } - private CrossTypeRevisionChangesReader getCrossTypeRevisionChangesReader() { - return getAuditReader().getCrossTypeRevisionChangesReader(); + private CrossTypeRevisionChangesReader getCrossTypeRevisionChangesReader(jakarta.persistence.EntityManager em) { + return AuditReaderFactory.get( em ).getCrossTypeRevisionChangesReader(); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/revfordate/RevisionForDate.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/revfordate/RevisionForDate.java index db559ab11b9e..a0821c18d6b3 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/revfordate/RevisionForDate.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/revfordate/RevisionForDate.java @@ -5,134 +5,154 @@ package org.hibernate.orm.test.envers.integration.revfordate; import java.util.Date; -import jakarta.persistence.EntityManager; import org.hibernate.dialect.CockroachDialect; -import org.hibernate.envers.AuditReader; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.exception.RevisionDoesNotExistException; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; import org.hibernate.orm.test.envers.entities.StrTestEntity; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; +import org.hibernate.testing.orm.junit.SkipForDialect; -import org.hibernate.testing.SkipForDialect; -import org.junit.Test; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertTrue; /** * @author Adam Warski (adam at warski dot org) */ -public class RevisionForDate extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {StrTestEntity.class}) +public class RevisionForDate { private long timestamp1; private long timestamp2; private long timestamp3; private long timestamp4; private Integer id; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {StrTestEntity.class}; - } - - @Test - @Priority(10) - public void initData() throws InterruptedException { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) throws InterruptedException { timestamp1 = System.currentTimeMillis(); Thread.sleep( 100 ); // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - StrTestEntity rfd = new StrTestEntity( "x" ); - em.persist( rfd ); - id = rfd.getId(); - em.getTransaction().commit(); + scope.inTransaction( em -> { + StrTestEntity rfd = new StrTestEntity( "x" ); + em.persist( rfd ); + id = rfd.getId(); + } ); timestamp2 = System.currentTimeMillis(); Thread.sleep( 100 ); // Revision 2 - em.getTransaction().begin(); - rfd = em.find( StrTestEntity.class, id ); - rfd.setStr( "y" ); - em.getTransaction().commit(); + scope.inTransaction( em -> { + StrTestEntity rfd = em.find( StrTestEntity.class, id ); + rfd.setStr( "y" ); + } ); timestamp3 = System.currentTimeMillis(); Thread.sleep( 100 ); // Revision 3 - em.getTransaction().begin(); - rfd = em.find( StrTestEntity.class, id ); - rfd.setStr( "z" ); - em.getTransaction().commit(); + scope.inTransaction( em -> { + StrTestEntity rfd = em.find( StrTestEntity.class, id ); + rfd.setStr( "z" ); + } ); timestamp4 = System.currentTimeMillis(); } - @Test(expected = RevisionDoesNotExistException.class) - public void testTimestamps1() { - getAuditReader().getRevisionNumberForDate( new Date( timestamp1 ) ); + @Test + public void testTimestamps1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertThrows( RevisionDoesNotExistException.class, + () -> auditReader.getRevisionNumberForDate( new Date( timestamp1 ) ) ); + } ); } - @Test(expected = RevisionDoesNotExistException.class) - public void testTimestampslWithFind() { - getAuditReader().find( StrTestEntity.class, id, new Date( timestamp1 ) ); + @Test + public void testTimestampslWithFind(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertThrows( RevisionDoesNotExistException.class, + () -> auditReader.find( StrTestEntity.class, id, new Date( timestamp1 ) ) ); + } ); } @Test - @SkipForDialect(value = CockroachDialect.class, comment = "Fails because of int size") - public void testTimestamps() { - assert getAuditReader().getRevisionNumberForDate( new Date( timestamp2 ) ).intValue() == 1; - assert getAuditReader().getRevisionNumberForDate( new Date( timestamp3 ) ).intValue() == 2; - assert getAuditReader().getRevisionNumberForDate( new Date( timestamp4 ) ).intValue() == 3; + @SkipForDialect(dialectClass = CockroachDialect.class, reason = "Fails because of int size") + public void testTimestamps(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( 1, auditReader.getRevisionNumberForDate( new Date( timestamp2 ) ).intValue() ); + assertEquals( 2, auditReader.getRevisionNumberForDate( new Date( timestamp3 ) ).intValue() ); + assertEquals( 3, auditReader.getRevisionNumberForDate( new Date( timestamp4 ) ).intValue() ); + } ); } @Test - @SkipForDialect(value = CockroachDialect.class, comment = "Fails because of int size") - public void testEntitiesForTimestamps() { - assert "x".equals( getAuditReader().find( StrTestEntity.class, id, new Date( timestamp2 ) ).getStr() ); - assert "y".equals( getAuditReader().find( StrTestEntity.class, id, new Date( timestamp3 ) ).getStr() ); - assert "z".equals( getAuditReader().find( StrTestEntity.class, id, new Date( timestamp4 ) ).getStr() ); + @SkipForDialect(dialectClass = CockroachDialect.class, reason = "Fails because of int size") + public void testEntitiesForTimestamps(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( "x", auditReader.find( StrTestEntity.class, id, new Date( timestamp2 ) ).getStr() ); + assertEquals( "y", auditReader.find( StrTestEntity.class, id, new Date( timestamp3 ) ).getStr() ); + assertEquals( "z", auditReader.find( StrTestEntity.class, id, new Date( timestamp4 ) ).getStr() ); + } ); } @Test - public void testDatesForRevisions() { - AuditReader vr = getAuditReader(); - assert vr.getRevisionNumberForDate( vr.getRevisionDate( 1 ) ).intValue() == 1; - assert vr.getRevisionNumberForDate( vr.getRevisionDate( 2 ) ).intValue() == 2; - assert vr.getRevisionNumberForDate( vr.getRevisionDate( 3 ) ).intValue() == 3; + public void testDatesForRevisions(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( 1, auditReader.getRevisionNumberForDate( auditReader.getRevisionDate( 1 ) ).intValue() ); + assertEquals( 2, auditReader.getRevisionNumberForDate( auditReader.getRevisionDate( 2 ) ).intValue() ); + assertEquals( 3, auditReader.getRevisionNumberForDate( auditReader.getRevisionDate( 3 ) ).intValue() ); + } ); } @Test - @SkipForDialect(value = CockroachDialect.class, comment = "Fails because of int size") - public void testRevisionsForDates() { - AuditReader vr = getAuditReader(); + @SkipForDialect(dialectClass = CockroachDialect.class, reason = "Fails because of int size") + public void testRevisionsForDates(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); - assert vr.getRevisionDate( vr.getRevisionNumberForDate( new Date( timestamp2 ) ) ).getTime() <= timestamp2; - assert vr.getRevisionDate( vr.getRevisionNumberForDate( new Date( timestamp2 ) ).intValue() + 1 ) - .getTime() > timestamp2; + assertTrue( auditReader.getRevisionDate( auditReader.getRevisionNumberForDate( new Date( timestamp2 ) ) ).getTime() <= timestamp2 ); + assertTrue( auditReader.getRevisionDate( auditReader.getRevisionNumberForDate( new Date( timestamp2 ) ).intValue() + 1 ) + .getTime() > timestamp2 ); - assert vr.getRevisionDate( vr.getRevisionNumberForDate( new Date( timestamp3 ) ) ).getTime() <= timestamp3; - assert vr.getRevisionDate( vr.getRevisionNumberForDate( new Date( timestamp3 ) ).intValue() + 1 ) - .getTime() > timestamp3; + assertTrue( auditReader.getRevisionDate( auditReader.getRevisionNumberForDate( new Date( timestamp3 ) ) ).getTime() <= timestamp3 ); + assertTrue( auditReader.getRevisionDate( auditReader.getRevisionNumberForDate( new Date( timestamp3 ) ).intValue() + 1 ) + .getTime() > timestamp3 ); - assert vr.getRevisionDate( vr.getRevisionNumberForDate( new Date( timestamp4 ) ) ).getTime() <= timestamp4; + assertTrue( auditReader.getRevisionDate( auditReader.getRevisionNumberForDate( new Date( timestamp4 ) ) ).getTime() <= timestamp4 ); + } ); } @Test - @SkipForDialect(value = CockroachDialect.class, comment = "Fails because of int size") - public void testRevisionsForInstant() { - AuditReader vr = getAuditReader(); + @SkipForDialect(dialectClass = CockroachDialect.class, reason = "Fails because of int size") + public void testRevisionsForInstant(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); - assert vr.getRevisionDate( vr.getRevisionNumberForDate( new Date( timestamp2 ).toInstant() ) ).getTime() <= timestamp2; - assert vr.getRevisionDate( vr.getRevisionNumberForDate( new Date( timestamp2 ).toInstant() ).intValue() + 1 ) - .getTime() > timestamp2; + assertTrue( auditReader.getRevisionDate( auditReader.getRevisionNumberForDate( new Date( timestamp2 ).toInstant() ) ).getTime() <= timestamp2 ); + assertTrue( auditReader.getRevisionDate( auditReader.getRevisionNumberForDate( new Date( timestamp2 ).toInstant() ).intValue() + 1 ) + .getTime() > timestamp2 ); - assert vr.getRevisionDate( vr.getRevisionNumberForDate( new Date( timestamp3 ).toInstant() ) ).getTime() <= timestamp3; - assert vr.getRevisionDate( vr.getRevisionNumberForDate( new Date( timestamp3 ).toInstant() ).intValue() + 1 ) - .getTime() > timestamp3; + assertTrue( auditReader.getRevisionDate( auditReader.getRevisionNumberForDate( new Date( timestamp3 ).toInstant() ) ).getTime() <= timestamp3 ); + assertTrue( auditReader.getRevisionDate( auditReader.getRevisionNumberForDate( new Date( timestamp3 ).toInstant() ).intValue() + 1 ) + .getTime() > timestamp3 ); - assert vr.getRevisionDate( vr.getRevisionNumberForDate( new Date( timestamp4 ).toInstant() ) ).getTime() <= timestamp4; + assertTrue( auditReader.getRevisionDate( auditReader.getRevisionNumberForDate( new Date( timestamp4 ).toInstant() ) ).getTime() <= timestamp4 ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/sameids/SameIds.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/sameids/SameIds.java index 6115f01e90cb..93a6446b02e8 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/sameids/SameIds.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/sameids/SameIds.java @@ -5,12 +5,16 @@ package org.hibernate.orm.test.envers.integration.sameids; import java.util.Arrays; -import jakarta.persistence.EntityManager; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; -import org.junit.Test; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; /** * A test which checks that if we add two different entities with the same ids in one revision, they @@ -18,53 +22,58 @@ * * @author Adam Warski (adam at warski dot org) */ -public class SameIds extends BaseEnversJPAFunctionalTestCase { - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {SameIdTestEntity1.class, SameIdTestEntity2.class}; - } +@EnversTest +@Jpa(annotatedClasses = {SameIdTestEntity1.class, SameIdTestEntity2.class}) +public class SameIds { - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - SameIdTestEntity1 site1 = new SameIdTestEntity1( 1, "str1" ); - SameIdTestEntity2 site2 = new SameIdTestEntity2( 1, "str1" ); + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + scope.inTransaction( em -> { + SameIdTestEntity1 site1 = new SameIdTestEntity1( 1, "str1" ); + SameIdTestEntity2 site2 = new SameIdTestEntity2( 1, "str1" ); - em.persist( site1 ); - em.persist( site2 ); - em.getTransaction().commit(); + em.persist( site1 ); + em.persist( site2 ); + } ); - em.getTransaction().begin(); - site1 = em.find( SameIdTestEntity1.class, 1 ); - site2 = em.find( SameIdTestEntity2.class, 1 ); - site1.setStr1( "str2" ); - site2.setStr1( "str2" ); - em.getTransaction().commit(); + scope.inTransaction( em -> { + SameIdTestEntity1 site1 = em.find( SameIdTestEntity1.class, 1 ); + SameIdTestEntity2 site2 = em.find( SameIdTestEntity2.class, 1 ); + site1.setStr1( "str2" ); + site2.setStr1( "str2" ); + } ); } @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( SameIdTestEntity1.class, 1 ) ); - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( SameIdTestEntity2.class, 1 ) ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1, 2 ), auditReader.getRevisions( SameIdTestEntity1.class, 1 ) ); + assertEquals( Arrays.asList( 1, 2 ), auditReader.getRevisions( SameIdTestEntity2.class, 1 ) ); + } ); } @Test - public void testHistoryOfSite1() { + public void testHistoryOfSite1(EntityManagerFactoryScope scope) { SameIdTestEntity1 ver1 = new SameIdTestEntity1( 1, "str1" ); SameIdTestEntity1 ver2 = new SameIdTestEntity1( 1, "str2" ); - assert getAuditReader().find( SameIdTestEntity1.class, 1, 1 ).equals( ver1 ); - assert getAuditReader().find( SameIdTestEntity1.class, 1, 2 ).equals( ver2 ); + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( ver1, auditReader.find( SameIdTestEntity1.class, 1, 1 ) ); + assertEquals( ver2, auditReader.find( SameIdTestEntity1.class, 1, 2 ) ); + } ); } @Test - public void testHistoryOfSite2() { + public void testHistoryOfSite2(EntityManagerFactoryScope scope) { SameIdTestEntity2 ver1 = new SameIdTestEntity2( 1, "str1" ); SameIdTestEntity2 ver2 = new SameIdTestEntity2( 1, "str2" ); - assert getAuditReader().find( SameIdTestEntity2.class, 1, 1 ).equals( ver1 ); - assert getAuditReader().find( SameIdTestEntity2.class, 1, 2 ).equals( ver2 ); + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( ver1, auditReader.find( SameIdTestEntity2.class, 1, 1 ) ); + assertEquals( ver2, auditReader.find( SameIdTestEntity2.class, 1, 2 ) ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/secondary/BasicSecondary.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/secondary/BasicSecondary.java index 211e1800aa93..9b4cfbb5dd04 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/secondary/BasicSecondary.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/secondary/BasicSecondary.java @@ -4,75 +4,71 @@ */ package org.hibernate.orm.test.envers.integration.secondary; -import java.util.Arrays; -import jakarta.persistence.EntityManager; +import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.DomainModel; +import org.hibernate.testing.orm.junit.DomainModelScope; +import org.hibernate.testing.orm.junit.SessionFactory; +import org.hibernate.testing.orm.junit.SessionFactoryScope; +import org.junit.jupiter.api.Test; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import java.util.Arrays; -import org.junit.Assert; -import org.junit.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Adam Warski (adam at warski dot org) */ -public class BasicSecondary extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@DomainModel(annotatedClasses = {SecondaryTestEntity.class}) +@SessionFactory +public class BasicSecondary { private Integer id; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {SecondaryTestEntity.class}; - } - - @Test - @Priority(10) - public void initData() { + @BeforeClassTemplate + public void initData(SessionFactoryScope scope) { SecondaryTestEntity ste = new SecondaryTestEntity( "a", "1" ); // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - - em.persist( ste ); - - em.getTransaction().commit(); + scope.inTransaction( em -> { + em.persist( ste ); + } ); // Revision 2 - em.getTransaction().begin(); - - ste = em.find( SecondaryTestEntity.class, ste.getId() ); - ste.setS1( "b" ); - ste.setS2( "2" ); - - em.getTransaction().commit(); - - // + scope.inTransaction( em -> { + SecondaryTestEntity entity = em.find( SecondaryTestEntity.class, ste.getId() ); + entity.setS1( "b" ); + entity.setS2( "2" ); + } ); id = ste.getId(); } @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( SecondaryTestEntity.class, id ) ); + public void testRevisionsCounts(SessionFactoryScope scope) { + scope.inSession( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1, 2 ), auditReader.getRevisions( SecondaryTestEntity.class, id ) ); + } ); } @Test - public void testHistoryOfId() { + public void testHistoryOfId(SessionFactoryScope scope) { SecondaryTestEntity ver1 = new SecondaryTestEntity( id, "a", "1" ); SecondaryTestEntity ver2 = new SecondaryTestEntity( id, "b", "2" ); - assert getAuditReader().find( SecondaryTestEntity.class, id, 1 ).equals( ver1 ); - assert getAuditReader().find( SecondaryTestEntity.class, id, 2 ).equals( ver2 ); + scope.inSession( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( ver1, auditReader.find( SecondaryTestEntity.class, id, 1 ) ); + assertEquals( ver2, auditReader.find( SecondaryTestEntity.class, id, 2 ) ); + } ); } - @SuppressWarnings("unchecked") @Test - public void testTableNames() { - Assert.assertEquals("secondary_AUD", - metadata().getEntityBinding( - "org.hibernate.orm.test.envers.integration.secondary.SecondaryTestEntity_AUD" - ) - .getJoins().get( 0 ).getTable().getName() - ); + public void testTableNames(DomainModelScope scope) { + assertEquals( "secondary_AUD", scope.getDomainModel() + .getEntityBinding( "org.hibernate.orm.test.envers.integration.secondary.SecondaryTestEntity_AUD" ) + .getJoins().get( 0 ).getTable().getName() ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/secondary/NamingSecondary.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/secondary/NamingSecondary.java index 048feace61c1..0c11253d426e 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/secondary/NamingSecondary.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/secondary/NamingSecondary.java @@ -4,75 +4,71 @@ */ package org.hibernate.orm.test.envers.integration.secondary; -import java.util.Arrays; -import jakarta.persistence.EntityManager; +import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.DomainModel; +import org.hibernate.testing.orm.junit.DomainModelScope; +import org.hibernate.testing.orm.junit.SessionFactory; +import org.hibernate.testing.orm.junit.SessionFactoryScope; +import org.junit.jupiter.api.Test; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import java.util.Arrays; -import org.junit.Assert; -import org.junit.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Adam Warski (adam at warski dot org) */ -public class NamingSecondary extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@DomainModel(annotatedClasses = {SecondaryNamingTestEntity.class}) +@SessionFactory +public class NamingSecondary { private Integer id; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {SecondaryNamingTestEntity.class}; - } - - @Test - @Priority(10) - public void initData() { + @BeforeClassTemplate + public void initData(SessionFactoryScope scope) { SecondaryNamingTestEntity ste = new SecondaryNamingTestEntity( "a", "1" ); // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - - em.persist( ste ); - - em.getTransaction().commit(); + scope.inTransaction( em -> { + em.persist( ste ); + } ); // Revision 2 - em.getTransaction().begin(); - - ste = em.find( SecondaryNamingTestEntity.class, ste.getId() ); - ste.setS1( "b" ); - ste.setS2( "2" ); - - em.getTransaction().commit(); - - // + scope.inTransaction( em -> { + SecondaryNamingTestEntity entity = em.find( SecondaryNamingTestEntity.class, ste.getId() ); + entity.setS1( "b" ); + entity.setS2( "2" ); + } ); id = ste.getId(); } @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( SecondaryNamingTestEntity.class, id ) ); + public void testRevisionsCounts(SessionFactoryScope scope) { + scope.inSession( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1, 2 ), auditReader.getRevisions( SecondaryNamingTestEntity.class, id ) ); + } ); } @Test - public void testHistoryOfId() { + public void testHistoryOfId(SessionFactoryScope scope) { SecondaryNamingTestEntity ver1 = new SecondaryNamingTestEntity( id, "a", "1" ); SecondaryNamingTestEntity ver2 = new SecondaryNamingTestEntity( id, "b", "2" ); - assert getAuditReader().find( SecondaryNamingTestEntity.class, id, 1 ).equals( ver1 ); - assert getAuditReader().find( SecondaryNamingTestEntity.class, id, 2 ).equals( ver2 ); + scope.inSession( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( ver1, auditReader.find( SecondaryNamingTestEntity.class, id, 1 ) ); + assertEquals( ver2, auditReader.find( SecondaryNamingTestEntity.class, id, 2 ) ); + } ); } - @SuppressWarnings("unchecked") @Test - public void testTableNames() { - Assert.assertEquals( "sec_versions", - metadata().getEntityBinding( - "org.hibernate.orm.test.envers.integration.secondary.SecondaryNamingTestEntity_AUD" - ) - .getJoins().get( 0 ).getTable().getName() - ); + public void testTableNames(DomainModelScope scope) { + assertEquals( "sec_versions", scope.getDomainModel() + .getEntityBinding( "org.hibernate.orm.test.envers.integration.secondary.SecondaryNamingTestEntity_AUD" ) + .getJoins().get( 0 ).getTable().getName() ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/secondary/ids/EmbIdSecondary.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/secondary/ids/EmbIdSecondary.java index c01c6fdbbc8a..c01f33267868 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/secondary/ids/EmbIdSecondary.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/secondary/ids/EmbIdSecondary.java @@ -4,73 +4,72 @@ */ package org.hibernate.orm.test.envers.integration.secondary.ids; -import java.util.Arrays; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.orm.test.envers.entities.ids.EmbId; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.DomainModel; +import org.hibernate.testing.orm.junit.DomainModelScope; +import org.hibernate.testing.orm.junit.SessionFactory; +import org.hibernate.testing.orm.junit.SessionFactoryScope; +import org.junit.jupiter.api.Test; + +import java.util.Arrays; -import org.junit.Assert; -import org.junit.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Adam Warski (adam at warski dot org) */ -public class EmbIdSecondary extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@DomainModel(annotatedClasses = {SecondaryEmbIdTestEntity.class}) +@SessionFactory +public class EmbIdSecondary { private EmbId id; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {SecondaryEmbIdTestEntity.class}; - } - - @Test - @Priority(10) - public void initData() { + @BeforeClassTemplate + public void initData(SessionFactoryScope scope) { id = new EmbId( 1, 2 ); SecondaryEmbIdTestEntity ste = new SecondaryEmbIdTestEntity( id, "a", "1" ); // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - - em.persist( ste ); - - em.getTransaction().commit(); + scope.inTransaction( em -> { + em.persist( ste ); + } ); // Revision 2 - em.getTransaction().begin(); - - ste = em.find( SecondaryEmbIdTestEntity.class, ste.getId() ); - ste.setS1( "b" ); - ste.setS2( "2" ); - - em.getTransaction().commit(); + scope.inTransaction( em -> { + SecondaryEmbIdTestEntity entity = em.find( SecondaryEmbIdTestEntity.class, ste.getId() ); + entity.setS1( "b" ); + entity.setS2( "2" ); + } ); } @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( SecondaryEmbIdTestEntity.class, id ) ); + public void testRevisionsCounts(SessionFactoryScope scope) { + scope.inSession( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1, 2 ), auditReader.getRevisions( SecondaryEmbIdTestEntity.class, id ) ); + } ); } @Test - public void testHistoryOfId() { + public void testHistoryOfId(SessionFactoryScope scope) { SecondaryEmbIdTestEntity ver1 = new SecondaryEmbIdTestEntity( id, "a", "1" ); SecondaryEmbIdTestEntity ver2 = new SecondaryEmbIdTestEntity( id, "b", "2" ); - assert getAuditReader().find( SecondaryEmbIdTestEntity.class, id, 1 ).equals( ver1 ); - assert getAuditReader().find( SecondaryEmbIdTestEntity.class, id, 2 ).equals( ver2 ); + scope.inSession( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( ver1, auditReader.find( SecondaryEmbIdTestEntity.class, id, 1 ) ); + assertEquals( ver2, auditReader.find( SecondaryEmbIdTestEntity.class, id, 2 ) ); + } ); } - @SuppressWarnings("unchecked") @Test - public void testTableNames() { - Assert.assertEquals( "sec_embid_versions", - metadata().getEntityBinding( - "org.hibernate.orm.test.envers.integration.secondary.ids.SecondaryEmbIdTestEntity_AUD" - ).getJoins().get( 0 ).getTable().getName() - ); + public void testTableNames(DomainModelScope scope) { + assertEquals( "sec_embid_versions", scope.getDomainModel().getEntityBinding( + "org.hibernate.orm.test.envers.integration.secondary.ids.SecondaryEmbIdTestEntity_AUD" ).getJoins() + .get( 0 ).getTable().getName() ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/secondary/ids/MulIdSecondary.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/secondary/ids/MulIdSecondary.java index b5eb5ab850fb..529071eb369e 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/secondary/ids/MulIdSecondary.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/secondary/ids/MulIdSecondary.java @@ -4,75 +4,72 @@ */ package org.hibernate.orm.test.envers.integration.secondary.ids; -import java.util.Arrays; - -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.orm.test.envers.entities.ids.MulId; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.DomainModel; +import org.hibernate.testing.orm.junit.DomainModelScope; +import org.hibernate.testing.orm.junit.SessionFactory; +import org.hibernate.testing.orm.junit.SessionFactoryScope; +import org.junit.jupiter.api.Test; -import org.junit.Assert; -import org.junit.Test; +import java.util.Arrays; + +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Adam Warski (adam at warski dot org) */ -public class MulIdSecondary extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@DomainModel(annotatedClasses = {SecondaryMulIdTestEntity.class}) +@SessionFactory +public class MulIdSecondary { private MulId id; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { SecondaryMulIdTestEntity.class }; - } - - @Test - @Priority(10) - public void initData() { + @BeforeClassTemplate + public void initData(SessionFactoryScope scope) { id = new MulId( 1, 2 ); SecondaryMulIdTestEntity ste = new SecondaryMulIdTestEntity( id, "a", "1" ); // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - - em.persist( ste ); - - em.getTransaction().commit(); + scope.inTransaction( em -> { + em.persist( ste ); + } ); // Revision 2 - em.getTransaction().begin(); - - ste = em.find( SecondaryMulIdTestEntity.class, id ); - ste.setS1( "b" ); - ste.setS2( "2" ); - - em.getTransaction().commit(); + scope.inTransaction( em -> { + SecondaryMulIdTestEntity entity = em.find( SecondaryMulIdTestEntity.class, id ); + entity.setS1( "b" ); + entity.setS2( "2" ); + } ); } @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2 ).equals( getAuditReader().getRevisions( SecondaryMulIdTestEntity.class, id ) ); + public void testRevisionsCounts(SessionFactoryScope scope) { + scope.inSession( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1, 2 ), auditReader.getRevisions( SecondaryMulIdTestEntity.class, id ) ); + } ); } @Test - public void testHistoryOfId() { + public void testHistoryOfId(SessionFactoryScope scope) { SecondaryMulIdTestEntity ver1 = new SecondaryMulIdTestEntity( id, "a", "1" ); SecondaryMulIdTestEntity ver2 = new SecondaryMulIdTestEntity( id, "b", "2" ); - assert getAuditReader().find( SecondaryMulIdTestEntity.class, id, 1 ).equals( ver1 ); - assert getAuditReader().find( SecondaryMulIdTestEntity.class, id, 2 ).equals( ver2 ); + scope.inSession( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( ver1, auditReader.find( SecondaryMulIdTestEntity.class, id, 1 ) ); + assertEquals( ver2, auditReader.find( SecondaryMulIdTestEntity.class, id, 2 ) ); + } ); } - @SuppressWarnings("unchecked") @Test - public void testTableNames() { - Assert.assertEquals( - "sec_mulid_versions", - metadata().getEntityBinding( - "org.hibernate.orm.test.envers.integration.secondary.ids.SecondaryMulIdTestEntity_AUD" - ).getJoins().get( 0 ).getTable().getName() - ); + public void testTableNames(DomainModelScope scope) { + assertEquals( "sec_mulid_versions", scope.getDomainModel().getEntityBinding( + "org.hibernate.orm.test.envers.integration.secondary.ids.SecondaryMulIdTestEntity_AUD" ).getJoins() + .get( 0 ).getTable().getName() ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/serialization/SerializingCollection.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/serialization/SerializingCollection.java index 5bdc61500c17..b00c844bd0d6 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/serialization/SerializingCollection.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/serialization/SerializingCollection.java @@ -4,69 +4,69 @@ */ package org.hibernate.orm.test.envers.integration.serialization; +import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.orm.test.envers.entities.onetomany.CollectionRefEdEntity; +import org.hibernate.orm.test.envers.entities.onetomany.CollectionRefIngEntity; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; + import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; -import jakarta.persistence.EntityManager; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.onetomany.CollectionRefEdEntity; -import org.hibernate.orm.test.envers.entities.onetomany.CollectionRefIngEntity; - -import org.junit.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.junit.jupiter.api.Assertions.fail; /** * @author Adam Warski (adam at warski dot org) */ -public class SerializingCollection extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {CollectionRefEdEntity.class, CollectionRefIngEntity.class}) +public class SerializingCollection { private Integer ed1_id; private Integer ing1_id; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {CollectionRefEdEntity.class, CollectionRefIngEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - - CollectionRefEdEntity ed1 = new CollectionRefEdEntity( 1, "data_ed_1" ); - - CollectionRefIngEntity ing1 = new CollectionRefIngEntity( 3, "data_ing_1", ed1 ); - - // Revision 1 - em.getTransaction().begin(); - - em.persist( ed1 ); - em.persist( ing1 ); - - em.getTransaction().commit(); + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + scope.inTransaction( em -> { + CollectionRefEdEntity ed1 = new CollectionRefEdEntity( 1, "data_ed_1" ); + CollectionRefIngEntity ing1 = new CollectionRefIngEntity( 3, "data_ing_1", ed1 ); - // + em.persist( ed1 ); + em.persist( ing1 ); - ed1_id = ed1.getId(); - ing1_id = ing1.getId(); + ed1_id = ed1.getId(); + ing1_id = ing1.getId(); + } ); } @Test - public void testDetach() throws Exception { - CollectionRefIngEntity ing1 = getEntityManager().find( CollectionRefIngEntity.class, ing1_id ); - CollectionRefEdEntity rev1 = getAuditReader().find( CollectionRefEdEntity.class, ed1_id, 1 ); - - // First forcing loading of the collection - assert rev1.getReffering().size() == 1; - - // Now serializing and de-serializing the - rev1 = serializeDeserialize( rev1 ); - - // And checking the colleciton again - assert rev1.getReffering().contains( ing1 ); - assert rev1.getReffering().size() == 1; - + public void testDetach(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + CollectionRefIngEntity ing1 = em.find( CollectionRefIngEntity.class, ing1_id ); + CollectionRefEdEntity rev1 = AuditReaderFactory.get( em ).find( CollectionRefEdEntity.class, ed1_id, 1 ); + + // First forcing loading of the collection + assertEquals( 1, rev1.getReffering().size() ); + + // Now serializing and de-serializing the + CollectionRefEdEntity deserialized = null; + try { + deserialized = serializeDeserialize( rev1 ); + } + catch (Exception e) { + fail( "Serialization / deserialization failed", e ); + } + + // And checking the collection again + assertTrue( deserialized.getReffering().contains( ing1 ) ); + assertEquals( 1, deserialized.getReffering().size() ); + } ); } @SuppressWarnings("unchecked") diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/strategy/AbstractRevisionEndTimestampTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/strategy/AbstractRevisionEndTimestampTest.java index 830298a0c5aa..930ef26f48bf 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/strategy/AbstractRevisionEndTimestampTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/strategy/AbstractRevisionEndTimestampTest.java @@ -4,43 +4,36 @@ */ package org.hibernate.orm.test.envers.integration.strategy; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; +import org.hibernate.dialect.SybaseDialect; +import org.hibernate.engine.jdbc.spi.JdbcServices; +import org.hibernate.engine.spi.SessionFactoryImplementor; +import org.hibernate.envers.enhanced.SequenceIdRevisionEntity; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import java.util.Date; import java.util.List; import java.util.Map; -import org.hibernate.dialect.Dialect; -import org.hibernate.dialect.SybaseDialect; -import org.hibernate.envers.configuration.EnversSettings; -import org.hibernate.envers.enhanced.SequenceIdRevisionEntity; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNull; /** * @author Chris Cranford */ -public abstract class AbstractRevisionEndTimestampTest extends BaseEnversJPAFunctionalTestCase { +public abstract class AbstractRevisionEndTimestampTest { - private static final String TIMESTAMP_FIELD = "REVEND_TSTMP"; - - @Override - @SuppressWarnings("unchecked") - public void addConfigOptions(Map options) { - options.put( EnversSettings.AUDIT_TABLE_SUFFIX, "_AUD" ); - options.put( EnversSettings.AUDIT_STRATEGY_VALIDITY_REVEND_TIMESTAMP_FIELD_NAME, TIMESTAMP_FIELD ); - options.put( EnversSettings.AUDIT_STRATEGY_VALIDITY_STORE_REVEND_TIMESTAMP, "true" ); - options.put( EnversSettings.AUDIT_STRATEGY_VALIDITY_REVEND_TIMESTAMP_LEGACY_PLACEMENT, "false" ); - } + protected static final String TIMESTAMP_FIELD = "REVEND_TSTMP"; @SuppressWarnings("unchecked") - protected List> getRevisions(Class clazz, Integer id) { + protected List> getRevisions(EntityManagerFactoryScope scope, Class clazz, Integer id) { String sql = String.format( "SELECT e FROM %s_AUD e WHERE e.originalId.id = :id", clazz.getName() ); - return getEntityManager().createQuery( sql ).setParameter( "id", id ).getResultList(); + return scope.fromEntityManager( em -> + em.createQuery( sql ).setParameter( "id", id ).getResultList() + ); } - protected void verifyRevisionEndTimestampsInSubclass(Class clazz, Integer id) { - final List> entities = getRevisions( clazz, id ); + protected void verifyRevisionEndTimestampsInSubclass(EntityManagerFactoryScope scope, Class clazz, Integer id) { + final List> entities = getRevisions( scope, clazz, id ); for ( Map entity : entities ) { Object timestampParentClass = entity.get( TIMESTAMP_FIELD ); Object timestampSubclass = entity.get( TIMESTAMP_FIELD + "_" + clazz.getSimpleName() + "_AUD" ); @@ -55,7 +48,8 @@ protected void verifyRevisionEndTimestampsInSubclass(Class clazz, Integer id) // Verify that the timestamp in the revision entity matches that in the parent entity's // revision end timestamp field as well. final Date timestamp = (Date) timestampParentClass; - final Dialect dialect = getDialect(); + final var dialect = scope.getEntityManagerFactory().unwrap( SessionFactoryImplementor.class ) + .getServiceRegistry().getService( JdbcServices.class ).getDialect(); if ( dialect instanceof SybaseDialect ) { // Sybase DATETIME are accurate to 1/300 second on platforms that support that level of // granularity. diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/strategy/AuditStraegySelectorTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/strategy/AuditStraegySelectorTest.java index 49054089c682..368eee114ddf 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/strategy/AuditStraegySelectorTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/strategy/AuditStraegySelectorTest.java @@ -17,7 +17,7 @@ import org.hibernate.envers.strategy.DefaultAuditStrategy; import org.hibernate.envers.strategy.ValidityAuditStrategy; import org.hibernate.service.ServiceRegistry; -import org.junit.Test; +import org.junit.jupiter.api.Test; import org.hibernate.testing.ServiceRegistryBuilder; import org.hibernate.testing.orm.junit.JiraKey; diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/strategy/IdentifierReuseTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/strategy/IdentifierReuseTest.java index d02c49da7eed..daf09b1ebe90 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/strategy/IdentifierReuseTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/strategy/IdentifierReuseTest.java @@ -5,19 +5,20 @@ package org.hibernate.orm.test.envers.integration.strategy; import java.util.Arrays; -import java.util.Map; -import jakarta.persistence.EntityManager; -import jakarta.persistence.EntityTransaction; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.configuration.EnversSettings; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; import org.hibernate.orm.test.envers.entities.IntNoAutoIdTestEntity; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; +import org.hibernate.testing.orm.junit.Jpa; +import org.hibernate.testing.orm.junit.Setting; +import org.junit.jupiter.api.Test; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; /** * Tests that reusing identifiers doesn't cause auditing misbehavior. @@ -25,52 +26,44 @@ * @author adar */ @JiraKey(value = "HHH-8280") -public class IdentifierReuseTest extends BaseEnversJPAFunctionalTestCase { - @Override - protected void addConfigOptions(Map options) { - options.put( EnversSettings.ALLOW_IDENTIFIER_REUSE, "true" ); - } - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { IntNoAutoIdTestEntity.class }; - } +@EnversTest +@Jpa(annotatedClasses = {IntNoAutoIdTestEntity.class}, + integrationSettings = @Setting(name = EnversSettings.ALLOW_IDENTIFIER_REUSE, value = "true")) +public class IdentifierReuseTest { @Test - public void testIdentifierReuse() { + public void testIdentifierReuse(EntityManagerFactoryScope scope) { final Integer reusedId = 1; - EntityManager entityManager = getEntityManager(); - saveUpdateAndRemoveEntity( entityManager, reusedId ); - saveUpdateAndRemoveEntity( entityManager, reusedId ); - entityManager.close(); + saveUpdateAndRemoveEntity( scope, reusedId ); + saveUpdateAndRemoveEntity( scope, reusedId ); - assertEquals( - Arrays.asList( 1, 2, 3, 4, 5, 6 ), - getAuditReader().getRevisions( IntNoAutoIdTestEntity.class, reusedId ) - ); + scope.inEntityManager( em -> { + assertEquals( + Arrays.asList( 1, 2, 3, 4, 5, 6 ), + AuditReaderFactory.get( em ).getRevisions( IntNoAutoIdTestEntity.class, reusedId ) + ); + } ); } - private void saveUpdateAndRemoveEntity(EntityManager entityManager, Integer id) { - EntityTransaction transaction = entityManager.getTransaction(); - - transaction.begin(); - IntNoAutoIdTestEntity entity = new IntNoAutoIdTestEntity( 0, id ); - entityManager.persist( entity ); - assertEquals( id, entity.getId() ); - transaction.commit(); + private void saveUpdateAndRemoveEntity(EntityManagerFactoryScope scope, Integer id) { + scope.inTransaction( em -> { + IntNoAutoIdTestEntity entity = new IntNoAutoIdTestEntity( 0, id ); + em.persist( entity ); + assertEquals( id, entity.getId() ); + } ); - transaction.begin(); - entity = entityManager.find( IntNoAutoIdTestEntity.class, id ); - entity.setNumVal( 1 ); - entity = entityManager.merge( entity ); - assertEquals( id, entity.getId() ); - transaction.commit(); + scope.inTransaction( em -> { + IntNoAutoIdTestEntity entity = em.find( IntNoAutoIdTestEntity.class, id ); + entity.setNumVal( 1 ); + entity = em.merge( entity ); + assertEquals( id, entity.getId() ); + } ); - transaction.begin(); - entity = entityManager.find( IntNoAutoIdTestEntity.class, id ); - assertNotNull( entity ); - entityManager.remove( entity ); - transaction.commit(); + scope.inTransaction( em -> { + IntNoAutoIdTestEntity entity = em.find( IntNoAutoIdTestEntity.class, id ); + assertNotNull( entity ); + em.remove( entity ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/strategy/RevisionEndNumericTypeTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/strategy/RevisionEndNumericTypeTest.java index a2dc933d7798..563559b3e381 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/strategy/RevisionEndNumericTypeTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/strategy/RevisionEndNumericTypeTest.java @@ -4,24 +4,25 @@ */ package org.hibernate.orm.test.envers.integration.strategy; -import static org.hibernate.testing.junit4.ExtraAssertions.assertTyping; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; - -import java.util.Map; - import org.hibernate.envers.configuration.EnversSettings; - import org.hibernate.envers.strategy.internal.ValidityAuditStrategy; import org.hibernate.mapping.PersistentClass; import org.hibernate.mapping.Property; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; import org.hibernate.orm.test.envers.entities.StrTestEntity; +import org.hibernate.testing.envers.RequiresAuditStrategy; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.DomainModel; +import org.hibernate.testing.orm.junit.DomainModelScope; +import org.hibernate.testing.orm.junit.JiraKey; +import org.hibernate.testing.orm.junit.ServiceRegistry; +import org.hibernate.testing.orm.junit.SessionFactory; +import org.hibernate.testing.orm.junit.Setting; import org.hibernate.type.BasicType; -import org.junit.Test; +import org.junit.jupiter.api.Test; -import org.hibernate.testing.orm.junit.JiraKey; -import org.hibernate.testing.envers.RequiresAuditStrategy; +import static org.hibernate.testing.junit4.ExtraAssertions.assertTyping; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; /** * Tests the {@code REVEND} functionality using a {@code LONG} data type. @@ -29,31 +30,25 @@ * * @author Chris Cranford */ -@JiraKey( value = "HHH-6210" ) -@RequiresAuditStrategy( value = ValidityAuditStrategy.class, jiraKey = "HHH-6210" ) -public class RevisionEndNumericTypeTest extends BaseEnversJPAFunctionalTestCase { - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { StrTestEntity.class }; - } - - @Override - protected void addConfigOptions(Map options) { - super.addConfigOptions( options ); - options.put( EnversSettings.AUDIT_STRATEGY_VALIDITY_STORE_REVEND_TIMESTAMP, "true" ); - options.put( EnversSettings.AUDIT_STRATEGY_VALIDITY_REVEND_TIMESTAMP_NUMERIC, "true" ); - } - +@JiraKey(value = "HHH-6210") +@RequiresAuditStrategy(value = ValidityAuditStrategy.class, jiraKey = "HHH-6210") +@EnversTest +@DomainModel(annotatedClasses = {StrTestEntity.class}) +@ServiceRegistry(settings = { + @Setting(name = EnversSettings.AUDIT_STRATEGY_VALIDITY_STORE_REVEND_TIMESTAMP, value = "true"), + @Setting(name = EnversSettings.AUDIT_STRATEGY_VALIDITY_REVEND_TIMESTAMP_NUMERIC, value = "true") +}) +@SessionFactory +public class RevisionEndNumericTypeTest { @Test - public void testRevisionEndTimestampIsTimestampType() { + public void testRevisionEndTimestampIsTimestampType(DomainModelScope scope) { // get the entity and verify the revision end timestamp property exists - final PersistentClass clazz = metadata().getEntityBinding( StrTestEntity.class.getName() + "_AUD" ); + final PersistentClass clazz = scope.getDomainModel().getEntityBinding( StrTestEntity.class.getName() + "_AUD" ); assertTrue( clazz.hasProperty( "REVEND_TSTMP" ) ); final Property property = clazz.getProperty( "REVEND_TSTMP" ); assertTyping( BasicType.class, clazz.getProperty( "REVEND_TSTMP" ).getType() ); - assertEquals( Long.class, ( (BasicType) property.getType() ).getJavaType() ); + assertEquals( Long.class, ((BasicType) property.getType()).getJavaType() ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/strategy/RevisionEndTimestampJoinedInheritanceTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/strategy/RevisionEndTimestampJoinedInheritanceTest.java index 62c8c0f508c9..8ab80de38b43 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/strategy/RevisionEndTimestampJoinedInheritanceTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/strategy/RevisionEndTimestampJoinedInheritanceTest.java @@ -5,81 +5,84 @@ package org.hibernate.orm.test.envers.integration.strategy; import org.hibernate.envers.Audited; -import org.hibernate.envers.strategy.ValidityAuditStrategy; -import org.hibernate.orm.test.envers.Priority; -import org.junit.Test; +import org.hibernate.envers.configuration.EnversSettings; +import org.hibernate.envers.strategy.internal.ValidityAuditStrategy; -import org.hibernate.testing.orm.junit.JiraKey; import org.hibernate.testing.envers.RequiresAuditStrategy; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.JiraKey; +import org.hibernate.testing.orm.junit.Jpa; +import org.hibernate.testing.orm.junit.Setting; +import org.junit.jupiter.api.Test; import jakarta.persistence.DiscriminatorColumn; import jakarta.persistence.DiscriminatorValue; import jakarta.persistence.Entity; -import jakarta.persistence.EntityManager; import jakarta.persistence.GeneratedValue; import jakarta.persistence.Id; import jakarta.persistence.Inheritance; import jakarta.persistence.InheritanceType; +import static org.hibernate.orm.test.envers.integration.strategy.AbstractRevisionEndTimestampTest.TIMESTAMP_FIELD; + /** * @author Chris Cranford */ @JiraKey( value = "HHH-9092" ) @RequiresAuditStrategy( ValidityAuditStrategy.class ) +@EnversTest +@Jpa(annotatedClasses = { + RevisionEndTimestampJoinedInheritanceTest.Employee.class, + RevisionEndTimestampJoinedInheritanceTest.FullTimeEmployee.class, + RevisionEndTimestampJoinedInheritanceTest.Contractor.class, + RevisionEndTimestampJoinedInheritanceTest.Executive.class +}, integrationSettings = { + @Setting( name = EnversSettings.AUDIT_TABLE_SUFFIX, value = "_AUD" ), + @Setting( name = EnversSettings.AUDIT_STRATEGY_VALIDITY_REVEND_TIMESTAMP_FIELD_NAME, value = TIMESTAMP_FIELD ), + @Setting( name = EnversSettings.AUDIT_STRATEGY_VALIDITY_STORE_REVEND_TIMESTAMP, value = "true" ), + @Setting( name = EnversSettings.AUDIT_STRATEGY_VALIDITY_REVEND_TIMESTAMP_LEGACY_PLACEMENT, value = "false" ) +}) public class RevisionEndTimestampJoinedInheritanceTest extends AbstractRevisionEndTimestampTest { private Integer fullTimeEmployeeId; private Integer contractorId; private Integer executiveId; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { Employee.class, FullTimeEmployee.class, Contractor.class, Executive.class }; - } - - @Test - @Priority(10) - public void initData() { - EntityManager entityManager = getEntityManager(); - try { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + scope.inTransaction( em -> { FullTimeEmployee fullTimeEmployee = new FullTimeEmployee( "Employee", 50000 ); Contractor contractor = new Contractor( "Contractor", 45 ); Executive executive = new Executive( "Executive", 100000, "CEO" ); - // Revision 1 - entityManager.getTransaction().begin(); - entityManager.persist( fullTimeEmployee ); - entityManager.persist( contractor ); - entityManager.persist( executive ); - entityManager.getTransaction().commit(); - - // Revision 2 - raises for everyone! - entityManager.getTransaction().begin(); - fullTimeEmployee.setSalary( 60000 ); - contractor.setHourlyRate( 47 ); - executive.setSalary( 125000 ); - entityManager.getTransaction().commit(); + em.persist( fullTimeEmployee ); + em.persist( contractor ); + em.persist( executive ); fullTimeEmployeeId = fullTimeEmployee.getId(); contractorId = contractor.getId(); executiveId = executive.getId(); - } - catch ( Exception e ) { - if ( entityManager.getTransaction().isActive() ) { - entityManager.getTransaction().rollback(); - } - throw e; - } - finally { - entityManager.close(); - } + } ); + + // Revision 2 - raises for everyone! + scope.inTransaction( em -> { + FullTimeEmployee fullTimeEmployee = em.find( FullTimeEmployee.class, fullTimeEmployeeId ); + Contractor contractor = em.find( Contractor.class, contractorId ); + Executive executive = em.find( Executive.class, executiveId ); + + fullTimeEmployee.setSalary( 60000 ); + contractor.setHourlyRate( 47 ); + executive.setSalary( 125000 ); + } ); } @Test - public void testRevisionEndTimestamps() { - verifyRevisionEndTimestampsInSubclass(FullTimeEmployee.class, fullTimeEmployeeId ); - verifyRevisionEndTimestampsInSubclass(Contractor.class, contractorId ); - verifyRevisionEndTimestampsInSubclass(Executive.class, executiveId ); + public void testRevisionEndTimestamps(EntityManagerFactoryScope scope) { + verifyRevisionEndTimestampsInSubclass(scope, FullTimeEmployee.class, fullTimeEmployeeId ); + verifyRevisionEndTimestampsInSubclass(scope, Contractor.class, contractorId ); + verifyRevisionEndTimestampsInSubclass(scope, Executive.class, executiveId ); } @Audited @@ -235,7 +238,7 @@ public boolean equals(Object object) { @Audited @Entity(name = "Executive") @DiscriminatorValue("EXEC") - public class Executive extends FullTimeEmployee { + public static class Executive extends FullTimeEmployee { private String title; Executive() { diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/strategy/RevisionEndTimestampTypeTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/strategy/RevisionEndTimestampTypeTest.java index f2b659b24d1b..d20c35202068 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/strategy/RevisionEndTimestampTypeTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/strategy/RevisionEndTimestampTypeTest.java @@ -4,24 +4,26 @@ */ package org.hibernate.orm.test.envers.integration.strategy; -import static org.hibernate.testing.junit4.ExtraAssertions.assertTyping; -import static org.junit.Assert.assertEquals; - -import java.sql.Timestamp; -import java.util.Map; - import org.hibernate.envers.configuration.EnversSettings; - import org.hibernate.envers.strategy.internal.ValidityAuditStrategy; import org.hibernate.mapping.PersistentClass; import org.hibernate.mapping.Property; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; import org.hibernate.orm.test.envers.entities.StrTestEntity; +import org.hibernate.testing.envers.RequiresAuditStrategy; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.DomainModel; +import org.hibernate.testing.orm.junit.DomainModelScope; +import org.hibernate.testing.orm.junit.JiraKey; +import org.hibernate.testing.orm.junit.ServiceRegistry; +import org.hibernate.testing.orm.junit.SessionFactory; +import org.hibernate.testing.orm.junit.Setting; import org.hibernate.type.BasicType; -import org.junit.Test; +import org.junit.jupiter.api.Test; -import org.hibernate.testing.orm.junit.JiraKey; -import org.hibernate.testing.envers.RequiresAuditStrategy; +import java.sql.Timestamp; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertInstanceOf; /** * Tests the {@code REVEND} functionality using a {@code LONG} data type. @@ -29,27 +31,21 @@ * * @author Chris Cranford */ -@JiraKey( value = "HHH-6210" ) -@RequiresAuditStrategy( value = ValidityAuditStrategy.class, jiraKey = "HHH-6210" ) -public class RevisionEndTimestampTypeTest extends BaseEnversJPAFunctionalTestCase { - - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { StrTestEntity.class }; - } - - @Override - protected void addConfigOptions(Map options) { - options.put( EnversSettings.AUDIT_STRATEGY_VALIDITY_STORE_REVEND_TIMESTAMP, "true" ); - } +@JiraKey(value = "HHH-6210") +@RequiresAuditStrategy(value = ValidityAuditStrategy.class, jiraKey = "HHH-6210") +@EnversTest +@DomainModel(annotatedClasses = {StrTestEntity.class}) +@ServiceRegistry(settings = @Setting(name = EnversSettings.AUDIT_STRATEGY_VALIDITY_STORE_REVEND_TIMESTAMP, value = "true")) +@SessionFactory +public class RevisionEndTimestampTypeTest { @Test - public void testRevisionEndTimestampIsLongType() { + public void testRevisionEndTimestampIsLongType(DomainModelScope scope) { // get the entity and verify the revision end timestamp property exists - final PersistentClass clazz = metadata().getEntityBinding( StrTestEntity.class.getName() + "_AUD" ); + final PersistentClass clazz = scope.getDomainModel().getEntityBinding(StrTestEntity.class.getName() + "_AUD"); - final Property property = clazz.getProperty( "REVEND_TSTMP" ); - assertTyping( BasicType.class, property.getType() ); - assertEquals( Timestamp.class, ( (BasicType) property.getType() ).getJavaType() ); + final Property property = clazz.getProperty("REVEND_TSTMP"); + assertInstanceOf(BasicType.class, property.getType()); + assertEquals(Timestamp.class, ((BasicType) property.getType()).getJavaType()); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/strategy/ValidityAuditStrategyComponentCollectionRevEndTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/strategy/ValidityAuditStrategyComponentCollectionRevEndTest.java index 31abd8ff8ae7..736937d24680 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/strategy/ValidityAuditStrategyComponentCollectionRevEndTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/strategy/ValidityAuditStrategyComponentCollectionRevEndTest.java @@ -7,7 +7,6 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; -import java.util.Map; import jakarta.persistence.CollectionTable; import jakarta.persistence.Column; @@ -18,90 +17,95 @@ import jakarta.persistence.JoinColumn; import jakarta.persistence.OrderColumn; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.Audited; import org.hibernate.envers.configuration.EnversSettings; -import org.hibernate.envers.strategy.ValidityAuditStrategy; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; -import org.hibernate.testing.transaction.TransactionUtil; -import org.junit.Test; +import org.hibernate.testing.orm.junit.Jpa; +import org.hibernate.testing.orm.junit.Setting; +import org.junit.jupiter.api.Test; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; /** - * A {@link ValidityAuditStrategy} test that verifies that the {@code REVEND} field + * A {@link org.hibernate.envers.strategy.ValidityAuditStrategy} test that verifies that the {@code REVEND} field * for embedded component collection entries is updated when the component contains * {@code null} properties and is removed from the component collection. * * @author Chris Cranford */ @JiraKey(value = "HHH-11214") -public class ValidityAuditStrategyComponentCollectionRevEndTest extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {ValidityAuditStrategyComponentCollectionRevEndTest.Product.class}, + integrationSettings = @Setting(name = EnversSettings.AUDIT_STRATEGY, value = "org.hibernate.envers.strategy.ValidityAuditStrategy")) +public class ValidityAuditStrategyComponentCollectionRevEndTest { private Integer productId; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { Product.class }; - } - - @Override - protected void addConfigOptions(Map options) { - super.addConfigOptions( options ); - options.put( EnversSettings.AUDIT_STRATEGY, ValidityAuditStrategy.class.getName() ); - } - - @Test - @Priority(10) - public void initData() { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Revision 1 - this.productId = TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - Product product = new Product( 1 , "Test" ); - product.getItems().add( new Item( "bread", null ) ); - entityManager.persist( product ); + this.productId = scope.fromTransaction(entityManager -> { + Product product = new Product(1, "Test"); + product.getItems().add(new Item("bread", null)); + entityManager.persist(product); return product.getId(); - } ); + }); // Revision 2 - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - Product product = entityManager.find( Product.class, productId ); - product.getItems().add( new Item( "bread2", 2 ) ); - entityManager.merge( product ); - } ); + scope.inTransaction(entityManager -> { + Product product = entityManager.find(Product.class, productId); + product.getItems().add(new Item("bread2", 2)); + entityManager.merge(product); + }); // Revision 3 - TransactionUtil.doInJPA( this::entityManagerFactory, entityManager -> { - Product product = entityManager.find( Product.class, productId ); - product.getItems().remove( 0 ); - entityManager.merge( product ); - } ); + scope.inTransaction(entityManager -> { + Product product = entityManager.find(Product.class, productId); + product.getItems().remove(0); + entityManager.merge(product); + }); } @Test - public void testRevisionCounts() { - assertEquals( Arrays.asList( 1, 2, 3 ), getAuditReader().getRevisions( Product.class, productId ) ); + public void testRevisionCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager(entityManager -> { + final var auditReader = AuditReaderFactory.get(entityManager); + assertEquals(Arrays.asList(1, 2, 3), auditReader.getRevisions(Product.class, productId)); + }); } @Test - public void testRevision1() { - final Product product = getAuditReader().find( Product.class, productId, 1 ); - assertEquals( 1, product.getItems().size() ); - assertEquals( "bread", product.getItems().get( 0 ).getName() ); + public void testRevision1(EntityManagerFactoryScope scope) { + scope.inEntityManager(entityManager -> { + final var auditReader = AuditReaderFactory.get(entityManager); + final Product product = auditReader.find(Product.class, productId, 1); + assertEquals(1, product.getItems().size()); + assertEquals("bread", product.getItems().get(0).getName()); + }); } @Test - public void testRevision2() { - final Product product = getAuditReader().find( Product.class, productId, 2 ); - assertEquals( 2, product.getItems().size() ); - assertEquals( "bread", product.getItems().get( 0 ).getName() ); - assertEquals( "bread2", product.getItems().get( 1 ).getName() ); + public void testRevision2(EntityManagerFactoryScope scope) { + scope.inEntityManager(entityManager -> { + final var auditReader = AuditReaderFactory.get(entityManager); + final Product product = auditReader.find(Product.class, productId, 2); + assertEquals(2, product.getItems().size()); + assertEquals("bread", product.getItems().get(0).getName()); + assertEquals("bread2", product.getItems().get(1).getName()); + }); } @Test - public void testRevision3() { - final Product product = getAuditReader().find( Product.class, productId, 3 ); - assertEquals( 1, product.getItems().size() ); - assertEquals( "bread2", product.getItems().get( 0 ).getName() ); + public void testRevision3(EntityManagerFactoryScope scope) { + scope.inEntityManager(entityManager -> { + final var auditReader = AuditReaderFactory.get(entityManager); + final Product product = auditReader.find(Product.class, productId, 3); + assertEquals(1, product.getItems().size()); + assertEquals("bread2", product.getItems().get(0).getName()); + }); } @Entity(name = "Product") @@ -153,28 +157,28 @@ public void setItems(List items) { @Override public int hashCode() { int result = id != null ? id.hashCode() : 0; - result = 31 * result + ( name != null ? name.hashCode() : 0 ); - result = 31 * result + ( items != null ? items.hashCode() : 0 ); + result = 31 * result + (name != null ? name.hashCode() : 0); + result = 31 * result + (items != null ? items.hashCode() : 0); return result; } @Override public boolean equals(Object object) { - if ( this == object ) { + if (this == object) { return true; } - if ( object == null | getClass() != object.getClass() ) { + if (object == null || getClass() != object.getClass()) { return false; } Product that = (Product) object; - if ( id != null ? !id.equals( that.id ) : that.id != null ) { + if (id != null ? !id.equals(that.id) : that.id != null) { return false; } - if ( name != null ? !name.equals( that.name ) : that.name != null ) { + if (name != null ? !name.equals(that.name) : that.name != null) { return false; } - return !( items != null ? !items.equals( that.items ) : that.items != null ); + return !(items != null ? !items.equals(that.items) : that.items != null); } } @@ -213,24 +217,24 @@ public void setValue(Integer value) { @Override public int hashCode() { int result = name != null ? name.hashCode() : 0; - result = 31 * result + ( value != null ? value.hashCode() : 0 ); + result = 31 * result + (value != null ? value.hashCode() : 0); return result; } @Override public boolean equals(Object object) { - if ( this == object ) { + if (this == object) { return true; } - if ( object == null || getClass() != object.getClass() ) { + if (object == null || getClass() != object.getClass()) { return false; } Item that = (Item) object; - if ( name != null ? !name.equals( that.name ) : that.name != null ) { + if (name != null ? !name.equals(that.name) : that.name != null) { return false; } - return !( value != null ? !value.equals( that.value ) : that.value != null ); + return !(value != null ? !value.equals(that.value) : that.value != null); } } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/strategy/ValidityAuditStrategyManyToManyTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/strategy/ValidityAuditStrategyManyToManyTest.java index 96e678ac3000..1f7c60486beb 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/strategy/ValidityAuditStrategyManyToManyTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/strategy/ValidityAuditStrategyManyToManyTest.java @@ -6,18 +6,19 @@ import java.util.Arrays; import java.util.HashSet; -import java.util.Map; -import jakarta.persistence.EntityManager; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.configuration.EnversSettings; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; import org.hibernate.orm.test.envers.entities.manytomany.SetOwnedEntity; import org.hibernate.orm.test.envers.entities.manytomany.SetOwningEntity; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; +import org.hibernate.testing.orm.junit.Setting; +import org.junit.jupiter.api.Test; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * Tests the ValidityAuditStrategy on many-to-many Sets. @@ -28,143 +29,125 @@ * @author Oliver Lorenz * @since 3.6.5 */ -public class ValidityAuditStrategyManyToManyTest extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {SetOwningEntity.class, SetOwnedEntity.class}, + integrationSettings = @Setting(name = EnversSettings.AUDIT_STRATEGY, value = "org.hibernate.envers.strategy.ValidityAuditStrategy")) +public class ValidityAuditStrategyManyToManyTest { private Integer ing_id; - private Integer ed_id; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {SetOwningEntity.class, SetOwnedEntity.class}; - } - - @Override - protected void addConfigOptions(Map options) { - options.put( EnversSettings.AUDIT_STRATEGY, "org.hibernate.envers.strategy.ValidityAuditStrategy" ); - } - - @Test - @Priority(10) - public void initData() { - final EntityManager em = getEntityManager(); - - final SetOwningEntity setOwningEntity = new SetOwningEntity( 1, "parent" ); - final SetOwnedEntity setOwnedEntity = new SetOwnedEntity( 2, "child" ); + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + final SetOwningEntity setOwningEntity = new SetOwningEntity(1, "parent"); + final SetOwnedEntity setOwnedEntity = new SetOwnedEntity(2, "child"); // Revision 1: Initial persist - em.getTransaction().begin(); - - em.persist( setOwningEntity ); - em.persist( setOwnedEntity ); - - em.getTransaction().commit(); - em.clear(); + scope.inTransaction(em -> { + em.persist(setOwningEntity); + em.persist(setOwnedEntity); + }); ing_id = setOwningEntity.getId(); ed_id = setOwnedEntity.getId(); - } - - @Test - @Priority(5) - public void testMultipleAddAndRemove() { - final EntityManager em = getEntityManager(); // Revision 2: add child for first time - em.getTransaction().begin(); - - SetOwningEntity owningEntity = getEntityManager().find( SetOwningEntity.class, ing_id ); - SetOwnedEntity ownedEntity = getEntityManager().find( SetOwnedEntity.class, ed_id ); - - owningEntity.setReferences( new HashSet() ); - owningEntity.getReferences().add( ownedEntity ); + scope.inTransaction(em -> { + SetOwningEntity owningEntity = em.find(SetOwningEntity.class, ing_id); + SetOwnedEntity ownedEntity = em.find(SetOwnedEntity.class, ed_id); - em.getTransaction().commit(); - em.clear(); + owningEntity.setReferences(new HashSet()); + owningEntity.getReferences().add(ownedEntity); + }); // Revision 3: remove child - em.getTransaction().begin(); + scope.inTransaction(em -> { + SetOwningEntity owningEntity = em.find(SetOwningEntity.class, ing_id); + SetOwnedEntity ownedEntity = em.find(SetOwnedEntity.class, ed_id); - owningEntity = getEntityManager().find( SetOwningEntity.class, ing_id ); - ownedEntity = getEntityManager().find( SetOwnedEntity.class, ed_id ); - - owningEntity.getReferences().remove( ownedEntity ); - - em.getTransaction().commit(); - em.clear(); + owningEntity.getReferences().remove(ownedEntity); + }); // Revision 4: add child again - em.getTransaction().begin(); - - owningEntity = getEntityManager().find( SetOwningEntity.class, ing_id ); - ownedEntity = getEntityManager().find( SetOwnedEntity.class, ed_id ); + scope.inTransaction(em -> { + SetOwningEntity owningEntity = em.find(SetOwningEntity.class, ing_id); + SetOwnedEntity ownedEntity = em.find(SetOwnedEntity.class, ed_id); - owningEntity.getReferences().add( ownedEntity ); - - em.getTransaction().commit(); - em.clear(); + owningEntity.getReferences().add(ownedEntity); + }); // Revision 5: remove child again - em.getTransaction().begin(); - - owningEntity = getEntityManager().find( SetOwningEntity.class, ing_id ); - ownedEntity = getEntityManager().find( SetOwnedEntity.class, ed_id ); - - owningEntity.getReferences().remove( ownedEntity ); + scope.inTransaction(em -> { + SetOwningEntity owningEntity = em.find(SetOwningEntity.class, ing_id); + SetOwnedEntity ownedEntity = em.find(SetOwnedEntity.class, ed_id); - em.getTransaction().commit(); - em.clear(); + owningEntity.getReferences().remove(ownedEntity); + }); + } + @Test + public void testMultipleAddAndRemove(EntityManagerFactoryScope scope) { // now the set owning entity list should be empty again - owningEntity = getEntityManager().find( SetOwningEntity.class, ing_id ); - assertEquals( owningEntity.getReferences().size(), 0 ); + scope.inEntityManager(em -> { + SetOwningEntity owningEntity = em.find(SetOwningEntity.class, ing_id); + assertEquals(0, owningEntity.getReferences().size()); + }); } @Test - public void testRevisionsCounts() { - assertEquals( getAuditReader().getRevisions( SetOwningEntity.class, ing_id ), Arrays.asList( 1, 2, 3, 4, 5 ) ); - assertEquals( getAuditReader().getRevisions( SetOwnedEntity.class, ed_id ), Arrays.asList( 1, 2, 3, 4, 5 ) ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager(em -> { + final var auditReader = AuditReaderFactory.get(em); + assertEquals(Arrays.asList(1, 2, 3, 4, 5), auditReader.getRevisions(SetOwningEntity.class, ing_id)); + assertEquals(Arrays.asList(1, 2, 3, 4, 5), auditReader.getRevisions(SetOwnedEntity.class, ed_id)); + }); } @Test - public void testHistoryOfIng1() { - SetOwningEntity ver_empty = createOwningEntity(); - SetOwningEntity ver_child = createOwningEntity( new SetOwnedEntity( ed_id, "child" ) ); - - assertEquals( getAuditReader().find( SetOwningEntity.class, ing_id, 1 ), ver_empty ); - assertEquals( getAuditReader().find( SetOwningEntity.class, ing_id, 2 ), ver_child ); - assertEquals( getAuditReader().find( SetOwningEntity.class, ing_id, 3 ), ver_empty ); - assertEquals( getAuditReader().find( SetOwningEntity.class, ing_id, 4 ), ver_child ); - assertEquals( getAuditReader().find( SetOwningEntity.class, ing_id, 5 ), ver_empty ); + public void testHistoryOfIng1(EntityManagerFactoryScope scope) { + scope.inEntityManager(em -> { + final var auditReader = AuditReaderFactory.get(em); + SetOwningEntity ver_empty = createOwningEntity(); + SetOwningEntity ver_child = createOwningEntity(new SetOwnedEntity(ed_id, "child")); + + assertEquals(ver_empty, auditReader.find(SetOwningEntity.class, ing_id, 1)); + assertEquals(ver_child, auditReader.find(SetOwningEntity.class, ing_id, 2)); + assertEquals(ver_empty, auditReader.find(SetOwningEntity.class, ing_id, 3)); + assertEquals(ver_child, auditReader.find(SetOwningEntity.class, ing_id, 4)); + assertEquals(ver_empty, auditReader.find(SetOwningEntity.class, ing_id, 5)); + }); } @Test - public void testHistoryOfEd1() { - SetOwnedEntity ver_empty = createOwnedEntity(); - SetOwnedEntity ver_child = createOwnedEntity( new SetOwningEntity( ing_id, "parent" ) ); - - assertEquals( getAuditReader().find( SetOwnedEntity.class, ed_id, 1 ), ver_empty ); - assertEquals( getAuditReader().find( SetOwnedEntity.class, ed_id, 2 ), ver_child ); - assertEquals( getAuditReader().find( SetOwnedEntity.class, ed_id, 3 ), ver_empty ); - assertEquals( getAuditReader().find( SetOwnedEntity.class, ed_id, 4 ), ver_child ); - assertEquals( getAuditReader().find( SetOwnedEntity.class, ed_id, 5 ), ver_empty ); + public void testHistoryOfEd1(EntityManagerFactoryScope scope) { + scope.inEntityManager(em -> { + final var auditReader = AuditReaderFactory.get(em); + SetOwnedEntity ver_empty = createOwnedEntity(); + SetOwnedEntity ver_child = createOwnedEntity(new SetOwningEntity(ing_id, "parent")); + + assertEquals(ver_empty, auditReader.find(SetOwnedEntity.class, ed_id, 1)); + assertEquals(ver_child, auditReader.find(SetOwnedEntity.class, ed_id, 2)); + assertEquals(ver_empty, auditReader.find(SetOwnedEntity.class, ed_id, 3)); + assertEquals(ver_child, auditReader.find(SetOwnedEntity.class, ed_id, 4)); + assertEquals(ver_empty, auditReader.find(SetOwnedEntity.class, ed_id, 5)); + }); } private SetOwningEntity createOwningEntity(SetOwnedEntity... owned) { - SetOwningEntity result = new SetOwningEntity( ing_id, "parent" ); - result.setReferences( new HashSet() ); - for ( SetOwnedEntity setOwnedEntity : owned ) { - result.getReferences().add( setOwnedEntity ); + SetOwningEntity result = new SetOwningEntity(ing_id, "parent"); + result.setReferences(new HashSet()); + for (SetOwnedEntity setOwnedEntity : owned) { + result.getReferences().add(setOwnedEntity); } return result; } private SetOwnedEntity createOwnedEntity(SetOwningEntity... owning) { - SetOwnedEntity result = new SetOwnedEntity( ed_id, "child" ); - result.setReferencing( new HashSet() ); - for ( SetOwningEntity setOwningEntity : owning ) { - result.getReferencing().add( setOwningEntity ); + SetOwnedEntity result = new SetOwnedEntity(ed_id, "child"); + result.setReferencing(new HashSet()); + for (SetOwningEntity setOwningEntity : owning) { + result.getReferencing().add(setOwningEntity); } return result; diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/strategy/ValidityAuditStrategyPartialFlushCountTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/strategy/ValidityAuditStrategyPartialFlushCountTest.java index 966318259427..83e5ed442c19 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/strategy/ValidityAuditStrategyPartialFlushCountTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/strategy/ValidityAuditStrategyPartialFlushCountTest.java @@ -4,22 +4,22 @@ */ package org.hibernate.orm.test.envers.integration.strategy; -import jakarta.persistence.EntityManager; import org.hibernate.FlushMode; import org.hibernate.Session; import org.hibernate.engine.internal.StatisticalLoggingSessionEventListener; import org.hibernate.engine.spi.SessionImplementor; import org.hibernate.envers.configuration.EnversSettings; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; import org.hibernate.orm.test.envers.entities.collection.EmbeddableListEntity1; import org.hibernate.orm.test.envers.entities.components.Component3; import org.hibernate.orm.test.envers.entities.components.Component4; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; -import org.hibernate.testing.transaction.TransactionUtil; -import org.junit.Test; +import org.hibernate.testing.orm.junit.Jpa; +import org.hibernate.testing.orm.junit.Setting; +import org.junit.jupiter.api.Test; import java.util.List; -import java.util.Map; import java.util.concurrent.atomic.AtomicInteger; import static org.assertj.core.api.Assertions.assertThat; @@ -31,36 +31,29 @@ * @author Vincent Stradiot */ @JiraKey("HHH-17442") -public class ValidityAuditStrategyPartialFlushCountTest extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {EmbeddableListEntity1.class}, + integrationSettings = @Setting(name = EnversSettings.AUDIT_STRATEGY, value = "org.hibernate.envers.strategy.ValidityAuditStrategy")) +public class ValidityAuditStrategyPartialFlushCountTest { private final AtomicInteger partialFlushEntityCount = new AtomicInteger(); private final AtomicInteger partialFlushCollectionCount = new AtomicInteger(); - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {EmbeddableListEntity1.class}; - } - - @Override - protected void addConfigOptions(Map options) { - options.put( EnversSettings.AUDIT_STRATEGY, "org.hibernate.envers.strategy.ValidityAuditStrategy" ); - } - @Test - public void testPartialFlushCount() { - TransactionUtil.doInJPA(this::entityManagerFactory, entityManager -> { + public void testPartialFlushCount(EntityManagerFactoryScope scope) { + scope.inTransaction(entityManager -> { givenHibernateFlushModeAuto(entityManager); recordPartialFlushCount(entityManager); final Component3 c3_1 = new Component3( - "str1_1", - new Component4("key_1", "value_1", "descr_1"), - new Component4("key_2", "value_2", "descr_2")); + "str1_1", + new Component4("key_1", "value_1", "descr_1"), + new Component4("key_2", "value_2", "descr_2")); final Component3 c3_2 = new Component3( - "str1_2", - new Component4("key_3", "value_3", "descr_3"), - new Component4("key_4", "value_4", "descr_4")); + "str1_2", + new Component4("key_3", "value_3", "descr_3"), + new Component4("key_4", "value_4", "descr_4")); final EmbeddableListEntity1 el = new EmbeddableListEntity1(); el.setOtherData("other_data"); @@ -73,11 +66,11 @@ public void testPartialFlushCount() { assertThat(partialFlushCollectionCount.get()).isZero(); } - private void givenHibernateFlushModeAuto(final EntityManager entityManager) { + private void givenHibernateFlushModeAuto(final jakarta.persistence.EntityManager entityManager) { entityManager.unwrap(Session.class).setHibernateFlushMode(FlushMode.AUTO); } - private void recordPartialFlushCount(final EntityManager entityManager) { + private void recordPartialFlushCount(final jakarta.persistence.EntityManager entityManager) { entityManager.unwrap(SessionImplementor.class).getEventListenerManager().addListener(new StatisticalLoggingSessionEventListener() { @Override @@ -87,6 +80,6 @@ public void partialFlushEnd(final int numberOfEntities, final int numberOfCollec partialFlushCollectionCount.getAndAdd(numberOfCollections); } - } ); + }); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/strategy/ValidityAuditStrategyRevEndTestCustomRevEnt.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/strategy/ValidityAuditStrategyRevEndTestCustomRevEnt.java index 8b5d1824eb02..589bcf6b8137 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/strategy/ValidityAuditStrategyRevEndTestCustomRevEnt.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/strategy/ValidityAuditStrategyRevEndTestCustomRevEnt.java @@ -14,20 +14,26 @@ import jakarta.persistence.EntityManager; import jakarta.persistence.Query; -import org.hibernate.Session; import org.hibernate.engine.spi.SessionImplementor; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.configuration.EnversSettings; import org.hibernate.envers.strategy.ValidityAuditStrategy; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; import org.hibernate.orm.test.envers.entities.manytomany.sametable.Child1Entity; import org.hibernate.orm.test.envers.entities.manytomany.sametable.Child2Entity; import org.hibernate.orm.test.envers.entities.manytomany.sametable.ParentEntity; import org.hibernate.orm.test.envers.entities.reventity.CustomDateRevEntity; import org.hibernate.orm.test.envers.tools.TestTools; -import org.hibernate.type.descriptor.sql.spi.DdlTypeRegistry; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; +import org.hibernate.testing.orm.junit.Setting; -import org.junit.Test; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertTrue; /** * Test which checks that the revision end timestamp is correctly set for @@ -35,7 +41,20 @@ * * @author Erik-Berndt Scheper */ -public class ValidityAuditStrategyRevEndTestCustomRevEnt extends BaseEnversJPAFunctionalTestCase { +@EnversTest(auditStrategies = ValidityAuditStrategy.class) +@Jpa( + annotatedClasses = { + ParentEntity.class, + Child1Entity.class, + Child2Entity.class, + CustomDateRevEntity.class + }, + integrationSettings = { + @Setting(name = EnversSettings.AUDIT_STRATEGY_VALIDITY_STORE_REVEND_TIMESTAMP, value = "true"), + @Setting(name = EnversSettings.AUDIT_STRATEGY_VALIDITY_REVEND_TIMESTAMP_FIELD_NAME, value = "REVEND_TIMESTAMP") + } +) +public class ValidityAuditStrategyRevEndTestCustomRevEnt { private final String revendTimestampColumName = "REVEND_TIMESTAMP"; private Integer p1_id; @@ -46,57 +65,37 @@ public class ValidityAuditStrategyRevEndTestCustomRevEnt extends BaseEnversJPAFu private Integer c2_2_id; private Map revisions; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { - ParentEntity.class, - Child1Entity.class, - Child2Entity.class, - CustomDateRevEntity.class - }; - } - - @Override - protected void addConfigOptions(Map options) { - super.addConfigOptions( options ); - options.put( EnversSettings.AUDIT_STRATEGY, "org.hibernate.envers.strategy.ValidityAuditStrategy" ); - options.put( EnversSettings.AUDIT_STRATEGY_VALIDITY_STORE_REVEND_TIMESTAMP, "true" ); - options.put( EnversSettings.AUDIT_STRATEGY_VALIDITY_REVEND_TIMESTAMP_FIELD_NAME, revendTimestampColumName ); - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - DdlTypeRegistry ddlTypeRegistry = em.unwrap( SessionImplementor.class ).getTypeConfiguration() - .getDdlTypeRegistry(); + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + EntityManager em = scope.getEntityManagerFactory().createEntityManager(); + final var session = em.unwrap( SessionImplementor.class ); + final var ddlTypeRegistry = session.getTypeConfiguration().getDdlTypeRegistry(); + final var dialect = session.getDialect(); // We need first to modify the columns in the middle (join table) to // allow null values. Hbm2ddl doesn't seem // to allow this. em.getTransaction().begin(); - Session session = (Session) em.getDelegate(); session.createNativeQuery( "DROP TABLE children" ).executeUpdate(); session.createNativeQuery( "DROP TABLE children_AUD" ).executeUpdate(); em.getTransaction().commit(); em.clear(); em.getTransaction().begin(); - session = (Session) em.getDelegate(); session.createNativeQuery( - "CREATE TABLE children ( parent_id " + ddlTypeRegistry.getTypeName( Types.INTEGER, getDialect() ) + - ", child1_id " + ddlTypeRegistry.getTypeName( Types.INTEGER, getDialect() ) + getDialect().getNullColumnString() + - ", child2_id " + ddlTypeRegistry.getTypeName( Types.INTEGER, getDialect() ) + getDialect().getNullColumnString() + " )" + "CREATE TABLE children ( parent_id " + ddlTypeRegistry.getTypeName( Types.INTEGER, dialect ) + + ", child1_id " + ddlTypeRegistry.getTypeName( Types.INTEGER, dialect ) + dialect.getNullColumnString() + + ", child2_id " + ddlTypeRegistry.getTypeName( Types.INTEGER, dialect ) + dialect.getNullColumnString() + " )" ) .executeUpdate(); session.createNativeQuery( - "CREATE TABLE children_AUD ( REV " + ddlTypeRegistry.getTypeName( Types.INTEGER, getDialect() ) + " NOT NULL" + - ", REVEND " + ddlTypeRegistry.getTypeName( Types.INTEGER, getDialect() ) + - ", " + revendTimestampColumName + " " + ddlTypeRegistry.getTypeName( Types.TIMESTAMP, getDialect() ) + - ", REVTYPE " + ddlTypeRegistry.getTypeName( Types.TINYINT, getDialect() ) + - ", parent_id " + ddlTypeRegistry.getTypeName( Types.INTEGER, getDialect() ) + - ", child1_id " + ddlTypeRegistry.getTypeName( Types.INTEGER, getDialect() ) + getDialect().getNullColumnString() + - ", child2_id " + ddlTypeRegistry.getTypeName( Types.INTEGER, getDialect() ) + getDialect().getNullColumnString() + " )" + "CREATE TABLE children_AUD ( REV " + ddlTypeRegistry.getTypeName( Types.INTEGER, dialect ) + " NOT NULL" + + ", REVEND " + ddlTypeRegistry.getTypeName( Types.INTEGER, dialect ) + + ", " + revendTimestampColumName + " " + ddlTypeRegistry.getTypeName( Types.TIMESTAMP, dialect ) + + ", REVTYPE " + ddlTypeRegistry.getTypeName( Types.TINYINT, dialect ) + + ", parent_id " + ddlTypeRegistry.getTypeName( Types.INTEGER, dialect ) + + ", child1_id " + ddlTypeRegistry.getTypeName( Types.INTEGER, dialect ) + dialect.getNullColumnString() + + ", child2_id " + ddlTypeRegistry.getTypeName( Types.INTEGER, dialect ) + dialect.getNullColumnString() + " )" ) .executeUpdate(); em.getTransaction().commit(); @@ -195,264 +194,225 @@ public void initData() { Set revisionNumbers = new HashSet(); revisionNumbers.addAll( Arrays.asList( 1, 2, 3, 4, 5 ) ); - revisions = getAuditReader().findRevisions( + revisions = AuditReaderFactory.get( em ).findRevisions( CustomDateRevEntity.class, revisionNumbers ); - assert revisions.size() == 5; + assertEquals( 5, revisions.size() ); + em.close(); } @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2, 3, 4 ).equals( - getAuditReader().getRevisions( ParentEntity.class, p1_id ) - ); - assert Arrays.asList( 1, 2, 3, 4 ).equals( - getAuditReader().getRevisions( ParentEntity.class, p2_id ) - ); - - assert Arrays.asList( 1 ).equals( - getAuditReader().getRevisions( Child1Entity.class, c1_1_id ) - ); - assert Arrays.asList( 1, 5 ).equals( - getAuditReader().getRevisions( Child1Entity.class, c1_2_id ) - ); - - assert Arrays.asList( 1 ).equals( - getAuditReader().getRevisions( Child2Entity.class, c2_1_id ) - ); - assert Arrays.asList( 1, 5 ).equals( - getAuditReader().getRevisions( Child2Entity.class, c2_2_id ) - ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1, 2, 3, 4 ), + auditReader.getRevisions( ParentEntity.class, p1_id ) ); + assertEquals( Arrays.asList( 1, 2, 3, 4 ), + auditReader.getRevisions( ParentEntity.class, p2_id ) ); + + assertEquals( Arrays.asList( 1 ), + auditReader.getRevisions( Child1Entity.class, c1_1_id ) ); + assertEquals( Arrays.asList( 1, 5 ), + auditReader.getRevisions( Child1Entity.class, c1_2_id ) ); + + assertEquals( Arrays.asList( 1 ), + auditReader.getRevisions( Child2Entity.class, c2_1_id ) ); + assertEquals( Arrays.asList( 1, 5 ), + auditReader.getRevisions( Child2Entity.class, c2_2_id ) ); + } ); } @Test - public void testAllRevEndTimeStamps() { - List> p1RevList = getRevisions( - ParentEntity.class, - p1_id - ); - List> p2RevList = getRevisions( - ParentEntity.class, - p2_id - ); - List> c1_1_List = getRevisions( - Child1Entity.class, - c1_1_id - ); - List> c1_2_List = getRevisions( - Child1Entity.class, - c1_2_id - ); - List> c2_1_List = getRevisions( - Child2Entity.class, - c2_1_id - ); - List> c2_2_List = getRevisions( - Child2Entity.class, - c2_2_id - ); - - verifyRevEndTimeStamps( "ParentEntity: " + p1_id, p1RevList ); - verifyRevEndTimeStamps( "ParentEntity: " + p2_id, p2RevList ); - verifyRevEndTimeStamps( "Child1Entity: " + c1_1_id, c1_1_List ); - verifyRevEndTimeStamps( "Child1Entity: " + c1_2_id, c1_2_List ); - verifyRevEndTimeStamps( "Child2Entity: " + c2_1_id, c2_1_List ); - verifyRevEndTimeStamps( "Child2Entity: " + c2_2_id, c2_2_List ); - + public void testAllRevEndTimeStamps(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + List> p1RevList = getRevisions( + em, + ParentEntity.class, + p1_id + ); + List> p2RevList = getRevisions( + em, + ParentEntity.class, + p2_id + ); + List> c1_1_List = getRevisions( + em, + Child1Entity.class, + c1_1_id + ); + List> c1_2_List = getRevisions( + em, + Child1Entity.class, + c1_2_id + ); + List> c2_1_List = getRevisions( + em, + Child2Entity.class, + c2_1_id + ); + List> c2_2_List = getRevisions( + em, + Child2Entity.class, + c2_2_id + ); + + verifyRevEndTimeStamps( "ParentEntity: " + p1_id, p1RevList ); + verifyRevEndTimeStamps( "ParentEntity: " + p2_id, p2RevList ); + verifyRevEndTimeStamps( "Child1Entity: " + c1_1_id, c1_1_List ); + verifyRevEndTimeStamps( "Child1Entity: " + c1_2_id, c1_2_List ); + verifyRevEndTimeStamps( "Child2Entity: " + c2_1_id, c2_1_List ); + verifyRevEndTimeStamps( "Child2Entity: " + c2_2_id, c2_2_List ); + } ); } @Test - public void testHistoryOfParent1() { - - Child1Entity c1_1 = getEntityManager() - .find( Child1Entity.class, c1_1_id ); - Child1Entity c1_2 = getEntityManager() - .find( Child1Entity.class, c1_2_id ); - Child2Entity c2_2 = getEntityManager() - .find( Child2Entity.class, c2_2_id ); - - ParentEntity rev1 = getAuditReader().find( ParentEntity.class, p1_id, 1 ); - ParentEntity rev2 = getAuditReader().find( ParentEntity.class, p1_id, 2 ); - ParentEntity rev3 = getAuditReader().find( ParentEntity.class, p1_id, 3 ); - ParentEntity rev4 = getAuditReader().find( ParentEntity.class, p1_id, 4 ); - ParentEntity rev5 = getAuditReader().find( ParentEntity.class, p1_id, 5 ); - - assert TestTools.checkCollection( rev1.getChildren1() ); - assert TestTools.checkCollection( rev2.getChildren1(), c1_1 ); - assert TestTools.checkCollection( rev3.getChildren1(), c1_1, c1_2 ); - assert TestTools.checkCollection( rev4.getChildren1(), c1_2 ); - assert TestTools.checkCollection( rev5.getChildren1() ); - - assert TestTools.checkCollection( rev1.getChildren2() ); - assert TestTools.checkCollection( rev2.getChildren2() ); - assert TestTools.checkCollection( rev3.getChildren2(), c2_2 ); - assert TestTools.checkCollection( rev4.getChildren2(), c2_2 ); - assert TestTools.checkCollection( rev5.getChildren2(), c2_2 ); + public void testHistoryOfParent1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + + Child1Entity c1_1 = em.find( Child1Entity.class, c1_1_id ); + Child1Entity c1_2 = em.find( Child1Entity.class, c1_2_id ); + Child2Entity c2_2 = em.find( Child2Entity.class, c2_2_id ); + + ParentEntity rev1 = auditReader.find( ParentEntity.class, p1_id, 1 ); + ParentEntity rev2 = auditReader.find( ParentEntity.class, p1_id, 2 ); + ParentEntity rev3 = auditReader.find( ParentEntity.class, p1_id, 3 ); + ParentEntity rev4 = auditReader.find( ParentEntity.class, p1_id, 4 ); + ParentEntity rev5 = auditReader.find( ParentEntity.class, p1_id, 5 ); + + assertTrue( TestTools.checkCollection( rev1.getChildren1() ) ); + assertTrue( TestTools.checkCollection( rev2.getChildren1(), c1_1 ) ); + assertTrue( TestTools.checkCollection( rev3.getChildren1(), c1_1, c1_2 ) ); + assertTrue( TestTools.checkCollection( rev4.getChildren1(), c1_2 ) ); + assertTrue( TestTools.checkCollection( rev5.getChildren1() ) ); + + assertTrue( TestTools.checkCollection( rev1.getChildren2() ) ); + assertTrue( TestTools.checkCollection( rev2.getChildren2() ) ); + assertTrue( TestTools.checkCollection( rev3.getChildren2(), c2_2 ) ); + assertTrue( TestTools.checkCollection( rev4.getChildren2(), c2_2 ) ); + assertTrue( TestTools.checkCollection( rev5.getChildren2(), c2_2 ) ); + } ); } @Test - public void testHistoryOfParent2() { - Child1Entity c1_1 = getEntityManager() - .find( Child1Entity.class, c1_1_id ); - Child2Entity c2_1 = getEntityManager() - .find( Child2Entity.class, c2_1_id ); - Child2Entity c2_2 = getEntityManager() - .find( Child2Entity.class, c2_2_id ); - - ParentEntity rev1 = getAuditReader().find( ParentEntity.class, p2_id, 1 ); - ParentEntity rev2 = getAuditReader().find( ParentEntity.class, p2_id, 2 ); - ParentEntity rev3 = getAuditReader().find( ParentEntity.class, p2_id, 3 ); - ParentEntity rev4 = getAuditReader().find( ParentEntity.class, p2_id, 4 ); - ParentEntity rev5 = getAuditReader().find( ParentEntity.class, p2_id, 5 ); - - assert TestTools.checkCollection( rev1.getChildren1() ); - assert TestTools.checkCollection( rev2.getChildren1() ); - assert TestTools.checkCollection( rev3.getChildren1(), c1_1 ); - assert TestTools.checkCollection( rev4.getChildren1(), c1_1 ); - assert TestTools.checkCollection( rev5.getChildren1(), c1_1 ); - - assert TestTools.checkCollection( rev1.getChildren2() ); - assert TestTools.checkCollection( rev2.getChildren2(), c2_1 ); - assert TestTools.checkCollection( rev3.getChildren2(), c2_1 ); - assert TestTools.checkCollection( rev4.getChildren2(), c2_1, c2_2 ); - assert TestTools.checkCollection( rev5.getChildren2(), c2_1 ); + public void testHistoryOfParent2(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + + Child1Entity c1_1 = em.find( Child1Entity.class, c1_1_id ); + Child2Entity c2_1 = em.find( Child2Entity.class, c2_1_id ); + Child2Entity c2_2 = em.find( Child2Entity.class, c2_2_id ); + + ParentEntity rev1 = auditReader.find( ParentEntity.class, p2_id, 1 ); + ParentEntity rev2 = auditReader.find( ParentEntity.class, p2_id, 2 ); + ParentEntity rev3 = auditReader.find( ParentEntity.class, p2_id, 3 ); + ParentEntity rev4 = auditReader.find( ParentEntity.class, p2_id, 4 ); + ParentEntity rev5 = auditReader.find( ParentEntity.class, p2_id, 5 ); + + assertTrue( TestTools.checkCollection( rev1.getChildren1() ) ); + assertTrue( TestTools.checkCollection( rev2.getChildren1() ) ); + assertTrue( TestTools.checkCollection( rev3.getChildren1(), c1_1 ) ); + assertTrue( TestTools.checkCollection( rev4.getChildren1(), c1_1 ) ); + assertTrue( TestTools.checkCollection( rev5.getChildren1(), c1_1 ) ); + + assertTrue( TestTools.checkCollection( rev1.getChildren2() ) ); + assertTrue( TestTools.checkCollection( rev2.getChildren2(), c2_1 ) ); + assertTrue( TestTools.checkCollection( rev3.getChildren2(), c2_1 ) ); + assertTrue( TestTools.checkCollection( rev4.getChildren2(), c2_1, c2_2 ) ); + assertTrue( TestTools.checkCollection( rev5.getChildren2(), c2_1 ) ); + } ); } @Test - public void testHistoryOfChild1_1() { - ParentEntity p1 = getEntityManager().find( ParentEntity.class, p1_id ); - ParentEntity p2 = getEntityManager().find( ParentEntity.class, p2_id ); - - Child1Entity rev1 = getAuditReader().find( - Child1Entity.class, c1_1_id, - 1 - ); - Child1Entity rev2 = getAuditReader().find( - Child1Entity.class, c1_1_id, - 2 - ); - Child1Entity rev3 = getAuditReader().find( - Child1Entity.class, c1_1_id, - 3 - ); - Child1Entity rev4 = getAuditReader().find( - Child1Entity.class, c1_1_id, - 4 - ); - Child1Entity rev5 = getAuditReader().find( - Child1Entity.class, c1_1_id, - 5 - ); - - assert TestTools.checkCollection( rev1.getParents() ); - assert TestTools.checkCollection( rev2.getParents(), p1 ); - assert TestTools.checkCollection( rev3.getParents(), p1, p2 ); - assert TestTools.checkCollection( rev4.getParents(), p2 ); - assert TestTools.checkCollection( rev5.getParents(), p2 ); + public void testHistoryOfChild1_1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + + ParentEntity p1 = em.find( ParentEntity.class, p1_id ); + ParentEntity p2 = em.find( ParentEntity.class, p2_id ); + + Child1Entity rev1 = auditReader.find( Child1Entity.class, c1_1_id, 1 ); + Child1Entity rev2 = auditReader.find( Child1Entity.class, c1_1_id, 2 ); + Child1Entity rev3 = auditReader.find( Child1Entity.class, c1_1_id, 3 ); + Child1Entity rev4 = auditReader.find( Child1Entity.class, c1_1_id, 4 ); + Child1Entity rev5 = auditReader.find( Child1Entity.class, c1_1_id, 5 ); + + assertTrue( TestTools.checkCollection( rev1.getParents() ) ); + assertTrue( TestTools.checkCollection( rev2.getParents(), p1 ) ); + assertTrue( TestTools.checkCollection( rev3.getParents(), p1, p2 ) ); + assertTrue( TestTools.checkCollection( rev4.getParents(), p2 ) ); + assertTrue( TestTools.checkCollection( rev5.getParents(), p2 ) ); + } ); } - // TODO: this was disabled? @Test - public void testHistoryOfChild1_2() { - ParentEntity p1 = getEntityManager().find( ParentEntity.class, p1_id ); - - Child1Entity rev1 = getAuditReader().find( - Child1Entity.class, c1_2_id, - 1 - ); - Child1Entity rev2 = getAuditReader().find( - Child1Entity.class, c1_2_id, - 2 - ); - Child1Entity rev3 = getAuditReader().find( - Child1Entity.class, c1_2_id, - 3 - ); - Child1Entity rev4 = getAuditReader().find( - Child1Entity.class, c1_2_id, - 4 - ); - Child1Entity rev5 = getAuditReader().find( - Child1Entity.class, c1_2_id, - 5 - ); - - assert TestTools.checkCollection( rev1.getParents() ); - assert TestTools.checkCollection( rev2.getParents() ); - assert TestTools.checkCollection( rev3.getParents(), p1 ); - assert TestTools.checkCollection( rev4.getParents(), p1 ); - assert TestTools.checkCollection( rev5.getParents() ); + public void testHistoryOfChild1_2(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + + ParentEntity p1 = em.find( ParentEntity.class, p1_id ); + + Child1Entity rev1 = auditReader.find( Child1Entity.class, c1_2_id, 1 ); + Child1Entity rev2 = auditReader.find( Child1Entity.class, c1_2_id, 2 ); + Child1Entity rev3 = auditReader.find( Child1Entity.class, c1_2_id, 3 ); + Child1Entity rev4 = auditReader.find( Child1Entity.class, c1_2_id, 4 ); + Child1Entity rev5 = auditReader.find( Child1Entity.class, c1_2_id, 5 ); + + assertTrue( TestTools.checkCollection( rev1.getParents() ) ); + assertTrue( TestTools.checkCollection( rev2.getParents() ) ); + assertTrue( TestTools.checkCollection( rev3.getParents(), p1 ) ); + assertTrue( TestTools.checkCollection( rev4.getParents(), p1 ) ); + assertTrue( TestTools.checkCollection( rev5.getParents() ) ); + } ); } @Test - public void testHistoryOfChild2_1() { - ParentEntity p2 = getEntityManager().find( ParentEntity.class, p2_id ); - - Child2Entity rev1 = getAuditReader().find( - Child2Entity.class, c2_1_id, - 1 - ); - Child2Entity rev2 = getAuditReader().find( - Child2Entity.class, c2_1_id, - 2 - ); - Child2Entity rev3 = getAuditReader().find( - Child2Entity.class, c2_1_id, - 3 - ); - Child2Entity rev4 = getAuditReader().find( - Child2Entity.class, c2_1_id, - 4 - ); - Child2Entity rev5 = getAuditReader().find( - Child2Entity.class, c2_1_id, - 5 - ); - - assert TestTools.checkCollection( rev1.getParents() ); - assert TestTools.checkCollection( rev2.getParents(), p2 ); - assert TestTools.checkCollection( rev3.getParents(), p2 ); - assert TestTools.checkCollection( rev4.getParents(), p2 ); - assert TestTools.checkCollection( rev5.getParents(), p2 ); + public void testHistoryOfChild2_1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + + ParentEntity p2 = em.find( ParentEntity.class, p2_id ); + + Child2Entity rev1 = auditReader.find( Child2Entity.class, c2_1_id, 1 ); + Child2Entity rev2 = auditReader.find( Child2Entity.class, c2_1_id, 2 ); + Child2Entity rev3 = auditReader.find( Child2Entity.class, c2_1_id, 3 ); + Child2Entity rev4 = auditReader.find( Child2Entity.class, c2_1_id, 4 ); + Child2Entity rev5 = auditReader.find( Child2Entity.class, c2_1_id, 5 ); + + assertTrue( TestTools.checkCollection( rev1.getParents() ) ); + assertTrue( TestTools.checkCollection( rev2.getParents(), p2 ) ); + assertTrue( TestTools.checkCollection( rev3.getParents(), p2 ) ); + assertTrue( TestTools.checkCollection( rev4.getParents(), p2 ) ); + assertTrue( TestTools.checkCollection( rev5.getParents(), p2 ) ); + } ); } @Test - public void testHistoryOfChild2_2() { - ParentEntity p1 = getEntityManager().find( ParentEntity.class, p1_id ); - ParentEntity p2 = getEntityManager().find( ParentEntity.class, p2_id ); - - Child2Entity rev1 = getAuditReader().find( - Child2Entity.class, c2_2_id, - 1 - ); - Child2Entity rev2 = getAuditReader().find( - Child2Entity.class, c2_2_id, - 2 - ); - Child2Entity rev3 = getAuditReader().find( - Child2Entity.class, c2_2_id, - 3 - ); - Child2Entity rev4 = getAuditReader().find( - Child2Entity.class, c2_2_id, - 4 - ); - Child2Entity rev5 = getAuditReader().find( - Child2Entity.class, c2_2_id, - 5 - ); - - assert TestTools.checkCollection( rev1.getParents() ); - assert TestTools.checkCollection( rev2.getParents() ); - assert TestTools.checkCollection( rev3.getParents(), p1 ); - assert TestTools.checkCollection( rev4.getParents(), p1, p2 ); - assert TestTools.checkCollection( rev5.getParents(), p1 ); + public void testHistoryOfChild2_2(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + + ParentEntity p1 = em.find( ParentEntity.class, p1_id ); + ParentEntity p2 = em.find( ParentEntity.class, p2_id ); + + Child2Entity rev1 = auditReader.find( Child2Entity.class, c2_2_id, 1 ); + Child2Entity rev2 = auditReader.find( Child2Entity.class, c2_2_id, 2 ); + Child2Entity rev3 = auditReader.find( Child2Entity.class, c2_2_id, 3 ); + Child2Entity rev4 = auditReader.find( Child2Entity.class, c2_2_id, 4 ); + Child2Entity rev5 = auditReader.find( Child2Entity.class, c2_2_id, 5 ); + + assertTrue( TestTools.checkCollection( rev1.getParents() ) ); + assertTrue( TestTools.checkCollection( rev2.getParents() ) ); + assertTrue( TestTools.checkCollection( rev3.getParents(), p1 ) ); + assertTrue( TestTools.checkCollection( rev4.getParents(), p1, p2 ) ); + assertTrue( TestTools.checkCollection( rev5.getParents(), p1 ) ); + } ); } private List> getRevisions( - Class originalEntityClazz, Integer originalEntityId) { + EntityManager em, Class originalEntityClazz, Integer originalEntityId) { // Build the query: // select auditEntity from // org.hibernate.orm.test.envers.entities.manytomany.sametable.ParentEntity_AUD @@ -463,7 +423,7 @@ private List> getRevisions( .append( "_AUD auditEntity" ); builder.append( " where auditEntity.originalId.id = :originalEntityId" ); - Query qry = getEntityManager().createQuery( builder.toString() ); + Query qry = em.createQuery( builder.toString() ); qry.setParameter( "originalEntityId", originalEntityId ); @SuppressWarnings("unchecked") @@ -482,10 +442,10 @@ private void verifyRevEndTimeStamps( .get( "REVEND" ); if ( revendTimestamp == null ) { - assert revEnd == null; + assertNull( revEnd ); } else { - assert revendTimestamp.getTime() == revEnd.getDateTimestamp().getTime(); + assertEquals( revendTimestamp.getTime(), revEnd.getDateTimestamp().getTime() ); } } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/strategy/ValidityAuditStrategyRevEndTsTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/strategy/ValidityAuditStrategyRevEndTsTest.java index ca2b243db0dd..4e9996d3c749 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/strategy/ValidityAuditStrategyRevEndTsTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/strategy/ValidityAuditStrategyRevEndTsTest.java @@ -4,35 +4,39 @@ */ package org.hibernate.orm.test.envers.integration.strategy; -import java.sql.Types; -import java.util.Arrays; -import java.util.Date; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; import jakarta.persistence.EntityManager; import jakarta.persistence.Query; - -import org.hibernate.Session; import org.hibernate.dialect.Dialect; import org.hibernate.dialect.MariaDBDialect; import org.hibernate.dialect.MySQLDialect; import org.hibernate.dialect.SybaseASEDialect; import org.hibernate.engine.spi.SessionImplementor; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.configuration.EnversSettings; import org.hibernate.envers.enhanced.SequenceIdRevisionEntity; import org.hibernate.envers.strategy.ValidityAuditStrategy; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; import org.hibernate.orm.test.envers.entities.manytomany.sametable.Child1Entity; import org.hibernate.orm.test.envers.entities.manytomany.sametable.Child2Entity; import org.hibernate.orm.test.envers.entities.manytomany.sametable.ParentEntity; import org.hibernate.orm.test.envers.tools.TestTools; -import org.hibernate.type.descriptor.sql.spi.DdlTypeRegistry; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; +import org.hibernate.testing.orm.junit.Setting; +import org.junit.jupiter.api.Test; -import org.junit.Assert; -import org.junit.Test; +import java.sql.Types; +import java.util.Arrays; +import java.util.Date; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertTrue; /** * Test which checks that the revision end timestamp is correctly set for @@ -40,7 +44,16 @@ * * @author Erik-Berndt Scheper */ -public class ValidityAuditStrategyRevEndTsTest extends BaseEnversJPAFunctionalTestCase { +@EnversTest(auditStrategies = ValidityAuditStrategy.class) +@Jpa( + annotatedClasses = {ParentEntity.class, Child1Entity.class, Child2Entity.class}, + integrationSettings = { + @Setting(name = EnversSettings.AUDIT_STRATEGY_VALIDITY_STORE_REVEND_TIMESTAMP, value = "true"), + @Setting(name = EnversSettings.AUDIT_STRATEGY_VALIDITY_REVEND_TIMESTAMP_FIELD_NAME, + value = "REVEND_TIMESTAMP") + } +) +public class ValidityAuditStrategyRevEndTsTest { private final String revendTimestampColumName = "REVEND_TIMESTAMP"; private Integer p1_id; @@ -51,52 +64,42 @@ public class ValidityAuditStrategyRevEndTsTest extends BaseEnversJPAFunctionalTe private Integer c2_2_id; private Map revisions; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {ParentEntity.class, Child1Entity.class, Child2Entity.class}; - } - - @Override - protected void addConfigOptions(Map options) { - super.addConfigOptions( options ); - options.put( EnversSettings.AUDIT_STRATEGY, "org.hibernate.envers.strategy.ValidityAuditStrategy" ); - options.put( EnversSettings.AUDIT_STRATEGY_VALIDITY_STORE_REVEND_TIMESTAMP, "true" ); - options.put( EnversSettings.AUDIT_STRATEGY_VALIDITY_REVEND_TIMESTAMP_FIELD_NAME, revendTimestampColumName ); - } + private Dialect dialect; - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - DdlTypeRegistry ddlTypeRegistry = em.unwrap( SessionImplementor.class ).getTypeConfiguration() - .getDdlTypeRegistry(); + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { + EntityManager em = scope.getEntityManagerFactory().createEntityManager(); + final var session = em.unwrap( SessionImplementor.class ); + final var ddlTypeRegistry = session.getTypeConfiguration().getDdlTypeRegistry(); + dialect = session.getJdbcServices().getDialect(); // We need first to modify the columns in the middle (join table) to // allow null values. Hbm2ddl doesn't seem // to allow this. em.getTransaction().begin(); - Session session = (Session) em.getDelegate(); session.createNativeQuery( "DROP TABLE children" ).executeUpdate(); session.createNativeQuery( "DROP TABLE children_AUD" ).executeUpdate(); em.getTransaction().commit(); em.clear(); em.getTransaction().begin(); - session = (Session) em.getDelegate(); session.createNativeQuery( - "CREATE TABLE children ( parent_id " + ddlTypeRegistry.getTypeName( Types.INTEGER, getDialect() ) + - ", child1_id " + ddlTypeRegistry.getTypeName( Types.INTEGER, getDialect() ) + getDialect().getNullColumnString() + - ", child2_id " + ddlTypeRegistry.getTypeName( Types.INTEGER, getDialect() ) + getDialect().getNullColumnString() + " )" + "CREATE TABLE children ( parent_id " + ddlTypeRegistry.getTypeName( Types.INTEGER, dialect ) + + ", child1_id " + ddlTypeRegistry.getTypeName( Types.INTEGER, dialect ) + dialect.getNullColumnString() + + ", child2_id " + ddlTypeRegistry.getTypeName( Types.INTEGER, + dialect ) + dialect.getNullColumnString() + " )" ) .executeUpdate(); session.createNativeQuery( - "CREATE TABLE children_AUD ( REV " + ddlTypeRegistry.getTypeName( Types.INTEGER, getDialect() ) + " NOT NULL" + - ", REVEND " + ddlTypeRegistry.getTypeName( Types.INTEGER, getDialect() ) + - ", " + revendTimestampColumName + " " + ddlTypeRegistry.getTypeName( Types.TIMESTAMP, getDialect() ) + - ", REVTYPE " + ddlTypeRegistry.getTypeName( Types.TINYINT, getDialect() ) + - ", parent_id " + ddlTypeRegistry.getTypeName( Types.INTEGER, getDialect() ) + - ", child1_id " + ddlTypeRegistry.getTypeName( Types.INTEGER, getDialect() ) + getDialect().getNullColumnString() + - ", child2_id " + ddlTypeRegistry.getTypeName( Types.INTEGER, getDialect() ) + getDialect().getNullColumnString() + " )" + "CREATE TABLE children_AUD ( REV " + ddlTypeRegistry.getTypeName( Types.INTEGER, + dialect ) + " NOT NULL" + + ", REVEND " + ddlTypeRegistry.getTypeName( Types.INTEGER, dialect ) + + ", " + revendTimestampColumName + " " + ddlTypeRegistry.getTypeName( Types.TIMESTAMP, dialect ) + + ", REVTYPE " + ddlTypeRegistry.getTypeName( Types.TINYINT, dialect ) + + ", parent_id " + ddlTypeRegistry.getTypeName( Types.INTEGER, dialect ) + + ", child1_id " + ddlTypeRegistry.getTypeName( Types.INTEGER, dialect ) + dialect.getNullColumnString() + + ", child2_id " + ddlTypeRegistry.getTypeName( Types.INTEGER, + dialect ) + dialect.getNullColumnString() + " )" ) .executeUpdate(); em.getTransaction().commit(); @@ -195,264 +198,201 @@ public void initData() { Set revisionNumbers = new HashSet(); revisionNumbers.addAll( Arrays.asList( 1, 2, 3, 4, 5 ) ); - revisions = getAuditReader().findRevisions( + revisions = AuditReaderFactory.get( em ).findRevisions( SequenceIdRevisionEntity.class, revisionNumbers ); - assert revisions.size() == 5; + assertEquals( 5, revisions.size() ); + em.close(); } @Test - public void testRevisionsCounts() { - assert Arrays.asList( 1, 2, 3, 4 ).equals( - getAuditReader().getRevisions( ParentEntity.class, p1_id ) - ); - assert Arrays.asList( 1, 2, 3, 4 ).equals( - getAuditReader().getRevisions( ParentEntity.class, p2_id ) - ); - - assert Arrays.asList( 1 ).equals( - getAuditReader().getRevisions( Child1Entity.class, c1_1_id ) - ); - assert Arrays.asList( 1, 5 ).equals( - getAuditReader().getRevisions( Child1Entity.class, c1_2_id ) - ); - - assert Arrays.asList( 1 ).equals( - getAuditReader().getRevisions( Child2Entity.class, c2_1_id ) - ); - assert Arrays.asList( 1, 5 ).equals( - getAuditReader().getRevisions( Child2Entity.class, c2_2_id ) - ); + public void testRevisionsCounts(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1, 2, 3, 4 ), + auditReader.getRevisions( ParentEntity.class, p1_id ) ); + assertEquals( Arrays.asList( 1, 2, 3, 4 ), + auditReader.getRevisions( ParentEntity.class, p2_id ) ); + + assertEquals( Arrays.asList( 1 ), + auditReader.getRevisions( Child1Entity.class, c1_1_id ) ); + assertEquals( Arrays.asList( 1, 5 ), + auditReader.getRevisions( Child1Entity.class, c1_2_id ) ); + + assertEquals( Arrays.asList( 1 ), + auditReader.getRevisions( Child2Entity.class, c2_1_id ) ); + assertEquals( Arrays.asList( 1, 5 ), + auditReader.getRevisions( Child2Entity.class, c2_2_id ) ); + } ); } @Test - public void testAllRevEndTimeStamps() { - List> p1RevList = getRevisions( - ParentEntity.class, - p1_id - ); - List> p2RevList = getRevisions( - ParentEntity.class, - p2_id - ); - List> c1_1_List = getRevisions( - Child1Entity.class, - c1_1_id - ); - List> c1_2_List = getRevisions( - Child1Entity.class, - c1_2_id - ); - List> c2_1_List = getRevisions( - Child2Entity.class, - c2_1_id - ); - List> c2_2_List = getRevisions( - Child2Entity.class, - c2_2_id - ); - - verifyRevEndTimeStamps( "ParentEntity: " + p1_id, p1RevList ); - verifyRevEndTimeStamps( "ParentEntity: " + p2_id, p2RevList ); - verifyRevEndTimeStamps( "Child1Entity: " + c1_1_id, c1_1_List ); - verifyRevEndTimeStamps( "Child1Entity: " + c1_2_id, c1_2_List ); - verifyRevEndTimeStamps( "Child2Entity: " + c2_1_id, c2_1_List ); - verifyRevEndTimeStamps( "Child2Entity: " + c2_2_id, c2_2_List ); - + public void testAllRevEndTimeStamps(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + List> p1RevList = getRevisions( em, ParentEntity.class, p1_id ); + List> p2RevList = getRevisions( em, ParentEntity.class, p2_id ); + List> c1_1_List = getRevisions( em, Child1Entity.class, c1_1_id ); + List> c1_2_List = getRevisions( em, Child1Entity.class, c1_2_id ); + List> c2_1_List = getRevisions( em, Child2Entity.class, c2_1_id ); + List> c2_2_List = getRevisions( em, Child2Entity.class, c2_2_id ); + + verifyRevEndTimeStamps( "ParentEntity: " + p1_id, p1RevList ); + verifyRevEndTimeStamps( "ParentEntity: " + p2_id, p2RevList ); + verifyRevEndTimeStamps( "Child1Entity: " + c1_1_id, c1_1_List ); + verifyRevEndTimeStamps( "Child1Entity: " + c1_2_id, c1_2_List ); + verifyRevEndTimeStamps( "Child2Entity: " + c2_1_id, c2_1_List ); + verifyRevEndTimeStamps( "Child2Entity: " + c2_2_id, c2_2_List ); + } ); } @Test - public void testHistoryOfParent1() { - - Child1Entity c1_1 = getEntityManager() - .find( Child1Entity.class, c1_1_id ); - Child1Entity c1_2 = getEntityManager() - .find( Child1Entity.class, c1_2_id ); - Child2Entity c2_2 = getEntityManager() - .find( Child2Entity.class, c2_2_id ); - - ParentEntity rev1 = getAuditReader().find( ParentEntity.class, p1_id, 1 ); - ParentEntity rev2 = getAuditReader().find( ParentEntity.class, p1_id, 2 ); - ParentEntity rev3 = getAuditReader().find( ParentEntity.class, p1_id, 3 ); - ParentEntity rev4 = getAuditReader().find( ParentEntity.class, p1_id, 4 ); - ParentEntity rev5 = getAuditReader().find( ParentEntity.class, p1_id, 5 ); - - assert TestTools.checkCollection( rev1.getChildren1() ); - assert TestTools.checkCollection( rev2.getChildren1(), c1_1 ); - assert TestTools.checkCollection( rev3.getChildren1(), c1_1, c1_2 ); - assert TestTools.checkCollection( rev4.getChildren1(), c1_2 ); - assert TestTools.checkCollection( rev5.getChildren1() ); - - assert TestTools.checkCollection( rev1.getChildren2() ); - assert TestTools.checkCollection( rev2.getChildren2() ); - assert TestTools.checkCollection( rev3.getChildren2(), c2_2 ); - assert TestTools.checkCollection( rev4.getChildren2(), c2_2 ); - assert TestTools.checkCollection( rev5.getChildren2(), c2_2 ); + public void testHistoryOfParent1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + + Child1Entity c1_1 = em.find( Child1Entity.class, c1_1_id ); + Child1Entity c1_2 = em.find( Child1Entity.class, c1_2_id ); + Child2Entity c2_2 = em.find( Child2Entity.class, c2_2_id ); + + ParentEntity rev1 = auditReader.find( ParentEntity.class, p1_id, 1 ); + ParentEntity rev2 = auditReader.find( ParentEntity.class, p1_id, 2 ); + ParentEntity rev3 = auditReader.find( ParentEntity.class, p1_id, 3 ); + ParentEntity rev4 = auditReader.find( ParentEntity.class, p1_id, 4 ); + ParentEntity rev5 = auditReader.find( ParentEntity.class, p1_id, 5 ); + + assertTrue( TestTools.checkCollection( rev1.getChildren1() ) ); + assertTrue( TestTools.checkCollection( rev2.getChildren1(), c1_1 ) ); + assertTrue( TestTools.checkCollection( rev3.getChildren1(), c1_1, c1_2 ) ); + assertTrue( TestTools.checkCollection( rev4.getChildren1(), c1_2 ) ); + assertTrue( TestTools.checkCollection( rev5.getChildren1() ) ); + + assertTrue( TestTools.checkCollection( rev1.getChildren2() ) ); + assertTrue( TestTools.checkCollection( rev2.getChildren2() ) ); + assertTrue( TestTools.checkCollection( rev3.getChildren2(), c2_2 ) ); + assertTrue( TestTools.checkCollection( rev4.getChildren2(), c2_2 ) ); + assertTrue( TestTools.checkCollection( rev5.getChildren2(), c2_2 ) ); + } ); } @Test - public void testHistoryOfParent2() { - Child1Entity c1_1 = getEntityManager() - .find( Child1Entity.class, c1_1_id ); - Child2Entity c2_1 = getEntityManager() - .find( Child2Entity.class, c2_1_id ); - Child2Entity c2_2 = getEntityManager() - .find( Child2Entity.class, c2_2_id ); - - ParentEntity rev1 = getAuditReader().find( ParentEntity.class, p2_id, 1 ); - ParentEntity rev2 = getAuditReader().find( ParentEntity.class, p2_id, 2 ); - ParentEntity rev3 = getAuditReader().find( ParentEntity.class, p2_id, 3 ); - ParentEntity rev4 = getAuditReader().find( ParentEntity.class, p2_id, 4 ); - ParentEntity rev5 = getAuditReader().find( ParentEntity.class, p2_id, 5 ); - - assert TestTools.checkCollection( rev1.getChildren1() ); - assert TestTools.checkCollection( rev2.getChildren1() ); - assert TestTools.checkCollection( rev3.getChildren1(), c1_1 ); - assert TestTools.checkCollection( rev4.getChildren1(), c1_1 ); - assert TestTools.checkCollection( rev5.getChildren1(), c1_1 ); - - assert TestTools.checkCollection( rev1.getChildren2() ); - assert TestTools.checkCollection( rev2.getChildren2(), c2_1 ); - assert TestTools.checkCollection( rev3.getChildren2(), c2_1 ); - assert TestTools.checkCollection( rev4.getChildren2(), c2_1, c2_2 ); - assert TestTools.checkCollection( rev5.getChildren2(), c2_1 ); + public void testHistoryOfParent2(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + + Child1Entity c1_1 = em.find( Child1Entity.class, c1_1_id ); + Child2Entity c2_1 = em.find( Child2Entity.class, c2_1_id ); + Child2Entity c2_2 = em.find( Child2Entity.class, c2_2_id ); + + ParentEntity rev1 = auditReader.find( ParentEntity.class, p2_id, 1 ); + ParentEntity rev2 = auditReader.find( ParentEntity.class, p2_id, 2 ); + ParentEntity rev3 = auditReader.find( ParentEntity.class, p2_id, 3 ); + ParentEntity rev4 = auditReader.find( ParentEntity.class, p2_id, 4 ); + ParentEntity rev5 = auditReader.find( ParentEntity.class, p2_id, 5 ); + + assertTrue( TestTools.checkCollection( rev1.getChildren1() ) ); + assertTrue( TestTools.checkCollection( rev2.getChildren1() ) ); + assertTrue( TestTools.checkCollection( rev3.getChildren1(), c1_1 ) ); + assertTrue( TestTools.checkCollection( rev4.getChildren1(), c1_1 ) ); + assertTrue( TestTools.checkCollection( rev5.getChildren1(), c1_1 ) ); + + assertTrue( TestTools.checkCollection( rev1.getChildren2() ) ); + assertTrue( TestTools.checkCollection( rev2.getChildren2(), c2_1 ) ); + assertTrue( TestTools.checkCollection( rev3.getChildren2(), c2_1 ) ); + assertTrue( TestTools.checkCollection( rev4.getChildren2(), c2_1, c2_2 ) ); + assertTrue( TestTools.checkCollection( rev5.getChildren2(), c2_1 ) ); + } ); } @Test - public void testHistoryOfChild1_1() { - ParentEntity p1 = getEntityManager().find( ParentEntity.class, p1_id ); - ParentEntity p2 = getEntityManager().find( ParentEntity.class, p2_id ); - - Child1Entity rev1 = getAuditReader().find( - Child1Entity.class, c1_1_id, - 1 - ); - Child1Entity rev2 = getAuditReader().find( - Child1Entity.class, c1_1_id, - 2 - ); - Child1Entity rev3 = getAuditReader().find( - Child1Entity.class, c1_1_id, - 3 - ); - Child1Entity rev4 = getAuditReader().find( - Child1Entity.class, c1_1_id, - 4 - ); - Child1Entity rev5 = getAuditReader().find( - Child1Entity.class, c1_1_id, - 5 - ); - - assert TestTools.checkCollection( rev1.getParents() ); - assert TestTools.checkCollection( rev2.getParents(), p1 ); - assert TestTools.checkCollection( rev3.getParents(), p1, p2 ); - assert TestTools.checkCollection( rev4.getParents(), p2 ); - assert TestTools.checkCollection( rev5.getParents(), p2 ); + public void testHistoryOfChild1_1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + + ParentEntity p1 = em.find( ParentEntity.class, p1_id ); + ParentEntity p2 = em.find( ParentEntity.class, p2_id ); + + Child1Entity rev1 = auditReader.find( Child1Entity.class, c1_1_id, 1 ); + Child1Entity rev2 = auditReader.find( Child1Entity.class, c1_1_id, 2 ); + Child1Entity rev3 = auditReader.find( Child1Entity.class, c1_1_id, 3 ); + Child1Entity rev4 = auditReader.find( Child1Entity.class, c1_1_id, 4 ); + Child1Entity rev5 = auditReader.find( Child1Entity.class, c1_1_id, 5 ); + + assertTrue( TestTools.checkCollection( rev1.getParents() ) ); + assertTrue( TestTools.checkCollection( rev2.getParents(), p1 ) ); + assertTrue( TestTools.checkCollection( rev3.getParents(), p1, p2 ) ); + assertTrue( TestTools.checkCollection( rev4.getParents(), p2 ) ); + assertTrue( TestTools.checkCollection( rev5.getParents(), p2 ) ); + } ); } - // TODO: this was disabled? @Test - public void testHistoryOfChild1_2() { - ParentEntity p1 = getEntityManager().find( ParentEntity.class, p1_id ); - - Child1Entity rev1 = getAuditReader().find( - Child1Entity.class, c1_2_id, - 1 - ); - Child1Entity rev2 = getAuditReader().find( - Child1Entity.class, c1_2_id, - 2 - ); - Child1Entity rev3 = getAuditReader().find( - Child1Entity.class, c1_2_id, - 3 - ); - Child1Entity rev4 = getAuditReader().find( - Child1Entity.class, c1_2_id, - 4 - ); - Child1Entity rev5 = getAuditReader().find( - Child1Entity.class, c1_2_id, - 5 - ); - - assert TestTools.checkCollection( rev1.getParents() ); - assert TestTools.checkCollection( rev2.getParents() ); - assert TestTools.checkCollection( rev3.getParents(), p1 ); - assert TestTools.checkCollection( rev4.getParents(), p1 ); - assert TestTools.checkCollection( rev5.getParents() ); + public void testHistoryOfChild1_2(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + + ParentEntity p1 = em.find( ParentEntity.class, p1_id ); + + Child1Entity rev1 = auditReader.find( Child1Entity.class, c1_2_id, 1 ); + Child1Entity rev2 = auditReader.find( Child1Entity.class, c1_2_id, 2 ); + Child1Entity rev3 = auditReader.find( Child1Entity.class, c1_2_id, 3 ); + Child1Entity rev4 = auditReader.find( Child1Entity.class, c1_2_id, 4 ); + Child1Entity rev5 = auditReader.find( Child1Entity.class, c1_2_id, 5 ); + + assertTrue( TestTools.checkCollection( rev1.getParents() ) ); + assertTrue( TestTools.checkCollection( rev2.getParents() ) ); + assertTrue( TestTools.checkCollection( rev3.getParents(), p1 ) ); + assertTrue( TestTools.checkCollection( rev4.getParents(), p1 ) ); + assertTrue( TestTools.checkCollection( rev5.getParents() ) ); + } ); } @Test - public void testHistoryOfChild2_1() { - ParentEntity p2 = getEntityManager().find( ParentEntity.class, p2_id ); - - Child2Entity rev1 = getAuditReader().find( - Child2Entity.class, c2_1_id, - 1 - ); - Child2Entity rev2 = getAuditReader().find( - Child2Entity.class, c2_1_id, - 2 - ); - Child2Entity rev3 = getAuditReader().find( - Child2Entity.class, c2_1_id, - 3 - ); - Child2Entity rev4 = getAuditReader().find( - Child2Entity.class, c2_1_id, - 4 - ); - Child2Entity rev5 = getAuditReader().find( - Child2Entity.class, c2_1_id, - 5 - ); - - assert TestTools.checkCollection( rev1.getParents() ); - assert TestTools.checkCollection( rev2.getParents(), p2 ); - assert TestTools.checkCollection( rev3.getParents(), p2 ); - assert TestTools.checkCollection( rev4.getParents(), p2 ); - assert TestTools.checkCollection( rev5.getParents(), p2 ); + public void testHistoryOfChild2_1(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + + ParentEntity p2 = em.find( ParentEntity.class, p2_id ); + + Child2Entity rev1 = auditReader.find( Child2Entity.class, c2_1_id, 1 ); + Child2Entity rev2 = auditReader.find( Child2Entity.class, c2_1_id, 2 ); + Child2Entity rev3 = auditReader.find( Child2Entity.class, c2_1_id, 3 ); + Child2Entity rev4 = auditReader.find( Child2Entity.class, c2_1_id, 4 ); + Child2Entity rev5 = auditReader.find( Child2Entity.class, c2_1_id, 5 ); + + assertTrue( TestTools.checkCollection( rev1.getParents() ) ); + assertTrue( TestTools.checkCollection( rev2.getParents(), p2 ) ); + assertTrue( TestTools.checkCollection( rev3.getParents(), p2 ) ); + assertTrue( TestTools.checkCollection( rev4.getParents(), p2 ) ); + assertTrue( TestTools.checkCollection( rev5.getParents(), p2 ) ); + } ); } @Test - public void testHistoryOfChild2_2() { - ParentEntity p1 = getEntityManager().find( ParentEntity.class, p1_id ); - ParentEntity p2 = getEntityManager().find( ParentEntity.class, p2_id ); - - Child2Entity rev1 = getAuditReader().find( - Child2Entity.class, c2_2_id, - 1 - ); - Child2Entity rev2 = getAuditReader().find( - Child2Entity.class, c2_2_id, - 2 - ); - Child2Entity rev3 = getAuditReader().find( - Child2Entity.class, c2_2_id, - 3 - ); - Child2Entity rev4 = getAuditReader().find( - Child2Entity.class, c2_2_id, - 4 - ); - Child2Entity rev5 = getAuditReader().find( - Child2Entity.class, c2_2_id, - 5 - ); - - assert TestTools.checkCollection( rev1.getParents() ); - assert TestTools.checkCollection( rev2.getParents() ); - assert TestTools.checkCollection( rev3.getParents(), p1 ); - assert TestTools.checkCollection( rev4.getParents(), p1, p2 ); - assert TestTools.checkCollection( rev5.getParents(), p1 ); + public void testHistoryOfChild2_2(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + + ParentEntity p1 = em.find( ParentEntity.class, p1_id ); + ParentEntity p2 = em.find( ParentEntity.class, p2_id ); + + Child2Entity rev1 = auditReader.find( Child2Entity.class, c2_2_id, 1 ); + Child2Entity rev2 = auditReader.find( Child2Entity.class, c2_2_id, 2 ); + Child2Entity rev3 = auditReader.find( Child2Entity.class, c2_2_id, 3 ); + Child2Entity rev4 = auditReader.find( Child2Entity.class, c2_2_id, 4 ); + Child2Entity rev5 = auditReader.find( Child2Entity.class, c2_2_id, 5 ); + + assertTrue( TestTools.checkCollection( rev1.getParents() ) ); + assertTrue( TestTools.checkCollection( rev2.getParents() ) ); + assertTrue( TestTools.checkCollection( rev3.getParents(), p1 ) ); + assertTrue( TestTools.checkCollection( rev4.getParents(), p1, p2 ) ); + assertTrue( TestTools.checkCollection( rev5.getParents(), p1 ) ); + } ); } private List> getRevisions( - Class originalEntityClazz, Integer originalEntityId) { + EntityManager em, Class originalEntityClazz, Integer originalEntityId) { // Build the query: // select auditEntity from // org.hibernate.orm.test.envers.entities.manytomany.sametable.ParentEntity_AUD @@ -463,7 +403,7 @@ private List> getRevisions( .append( "_AUD auditEntity" ); builder.append( " where auditEntity.originalId.id = :originalEntityId" ); - Query qry = getEntityManager().createQuery( builder.toString() ); + Query qry = em.createQuery( builder.toString() ); qry.setParameter( "originalEntityId", originalEntityId ); @SuppressWarnings("unchecked") @@ -477,29 +417,28 @@ private void verifyRevEndTimeStamps(String debugInfo, List> SequenceIdRevisionEntity revEnd = (SequenceIdRevisionEntity) revisionEntity.get( "REVEND" ); if ( revendTimestamp == null ) { - Assert.assertNull( revEnd ); + assertNull( revEnd ); } else { - final Dialect dialect = getDialect(); if ( dialect instanceof MySQLDialect - && dialect.getVersion().isBefore( 5, 7 ) - && !( dialect instanceof MariaDBDialect ) ) { + && dialect.getVersion().isBefore( 5, 7 ) + && !(dialect instanceof MariaDBDialect) ) { // MySQL5 DATETIME column type does not contain milliseconds. // MySQL 5.7 supports milliseconds and when MySQL57InnoDBDialect is used, it is assumed that // the column is defined as DATETIME(6). - Assert.assertEquals( + assertEquals( revendTimestamp.getTime(), (revEnd.getTimestamp() - (revEnd.getTimestamp() % 1000)) ); } else if ( dialect instanceof SybaseASEDialect ) { // Sybase "DATETIME values are accurate to 1/300 second on platforms that support this level of granularity". - Assert.assertEquals( + assertEquals( revendTimestamp.getTime() / 1000.0, revEnd.getTimestamp() / 1000.0, 1.0 / 300.0 ); } else { - Assert.assertEquals( revendTimestamp.getTime(), revEnd.getTimestamp() ); + assertEquals( revendTimestamp.getTime(), revEnd.getTimestamp() ); } } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditAtMethodSuperclassLevel/auditAllSubclass/MappedSubclassingAllAuditedTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditAtMethodSuperclassLevel/auditAllSubclass/MappedSubclassingAllAuditedTest.java index 862fbda7394d..5f8ac2d4e84d 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditAtMethodSuperclassLevel/auditAllSubclass/MappedSubclassingAllAuditedTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditAtMethodSuperclassLevel/auditAllSubclass/MappedSubclassingAllAuditedTest.java @@ -5,102 +5,100 @@ package org.hibernate.orm.test.envers.integration.superclass.auditAtMethodSuperclassLevel.auditAllSubclass; import java.util.Arrays; -import jakarta.persistence.EntityManager; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.exception.NotAuditedException; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; import org.hibernate.orm.test.envers.integration.superclass.auditAtMethodSuperclassLevel.AuditedMethodMappedSuperclass; import org.hibernate.orm.test.envers.integration.superclass.auditAtMethodSuperclassLevel.NotAuditedSubclassEntity; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; -import org.junit.Test; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertThrows; /** * @author Adam Warski (adam at warski dot org) * @author Hern&aacut;n Chanfreau */ -public class MappedSubclassingAllAuditedTest extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = { + AuditedMethodMappedSuperclass.class, + AuditedAllSubclassEntity.class, + NotAuditedSubclassEntity.class +}) +public class MappedSubclassingAllAuditedTest { private Integer id2_1; private Integer id1_1; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { - AuditedMethodMappedSuperclass.class, - AuditedAllSubclassEntity.class, - NotAuditedSubclassEntity.class - }; - } - - @Test - @Priority(10) - public void initData() { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - NotAuditedSubclassEntity nas = new NotAuditedSubclassEntity( "nae", "super str", "not audited str" ); - em.persist( nas ); - AuditedAllSubclassEntity ae = new AuditedAllSubclassEntity( "ae", "super str", "audited str" ); - em.persist( ae ); - id1_1 = ae.getId(); - id2_1 = nas.getId(); - em.getTransaction().commit(); + scope.inTransaction( em -> { + NotAuditedSubclassEntity nas = new NotAuditedSubclassEntity( "nae", "super str", "not audited str" ); + em.persist( nas ); + AuditedAllSubclassEntity ae = new AuditedAllSubclassEntity( "ae", "super str", "audited str" ); + em.persist( ae ); + id1_1 = ae.getId(); + id2_1 = nas.getId(); + } ); // Revision 2 - em.getTransaction().begin(); - ae = em.find( AuditedAllSubclassEntity.class, id1_1 ); - ae.setStr( "ae new" ); - ae.setSubAuditedStr( "audited str new" ); - nas = em.find( NotAuditedSubclassEntity.class, id2_1 ); - nas.setStr( "nae new" ); - nas.setNotAuditedStr( "not aud str new" ); - em.getTransaction().commit(); + scope.inTransaction( em -> { + AuditedAllSubclassEntity ae = em.find( AuditedAllSubclassEntity.class, id1_1 ); + ae.setStr( "ae new" ); + ae.setSubAuditedStr( "audited str new" ); + NotAuditedSubclassEntity nas = em.find( NotAuditedSubclassEntity.class, id2_1 ); + nas.setStr( "nae new" ); + nas.setNotAuditedStr( "not aud str new" ); + } ); } @Test - public void testRevisionsCountsForAudited() { - assert Arrays.asList( 1, 2 ).equals( - getAuditReader().getRevisions( AuditedAllSubclassEntity.class, id1_1 ) - ); + public void testRevisionsCountsForAudited(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + assertEquals( Arrays.asList( 1, 2 ), + AuditReaderFactory.get( em ).getRevisions( AuditedAllSubclassEntity.class, id1_1 ) ); + } ); } - @Test(expected = NotAuditedException.class) - public void testRevisionsCountsForNotAudited() { - try { - getAuditReader().getRevisions( NotAuditedSubclassEntity.class, id2_1 ); - assert (false); - } - catch (NotAuditedException nae) { - throw nae; - } + @Test + public void testRevisionsCountsForNotAudited(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + assertThrows( NotAuditedException.class, () -> { + AuditReaderFactory.get( em ).getRevisions( NotAuditedSubclassEntity.class, id2_1 ); + } ); + } ); } - @Test - public void testHistoryOfAudited() { + public void testHistoryOfAudited(EntityManagerFactoryScope scope) { AuditedAllSubclassEntity ver1 = new AuditedAllSubclassEntity( id1_1, "ae", "super str", "audited str" ); AuditedAllSubclassEntity ver2 = new AuditedAllSubclassEntity( id1_1, "ae new", "super str", "audited str new" ); - AuditedAllSubclassEntity rev1 = getAuditReader().find( AuditedAllSubclassEntity.class, id1_1, 1 ); - AuditedAllSubclassEntity rev2 = getAuditReader().find( AuditedAllSubclassEntity.class, id1_1, 2 ); + scope.inEntityManager( em -> { + AuditedAllSubclassEntity rev1 = AuditReaderFactory.get( em ).find( AuditedAllSubclassEntity.class, id1_1, 1 ); + AuditedAllSubclassEntity rev2 = AuditReaderFactory.get( em ).find( AuditedAllSubclassEntity.class, id1_1, 2 ); - //this property is not audited on superclass - assert (rev1.getOtherStr() == null); - assert (rev2.getOtherStr() == null); + //this property is not audited on superclass + assertNull( rev1.getOtherStr() ); + assertNull( rev2.getOtherStr() ); - assert rev1.equals( ver1 ); - assert rev2.equals( ver2 ); + assertEquals( ver1, rev1 ); + assertEquals( ver2, rev2 ); + } ); } - @Test(expected = NotAuditedException.class) - public void testHistoryOfNotAudited() { - try { - getAuditReader().find( NotAuditedSubclassEntity.class, id2_1, 1 ); - assert (false); - } - catch (NotAuditedException nae) { - throw nae; - } + @Test + public void testHistoryOfNotAudited(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + assertThrows( NotAuditedException.class, () -> { + AuditReaderFactory.get( em ).find( NotAuditedSubclassEntity.class, id2_1, 1 ); + } ); + } ); } - } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditAtMethodSuperclassLevel/auditMethodSubclass/MappedSubclassingMethodAuditedTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditAtMethodSuperclassLevel/auditMethodSubclass/MappedSubclassingMethodAuditedTest.java index 1250e6eb1e78..ef6f10722230 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditAtMethodSuperclassLevel/auditMethodSubclass/MappedSubclassingMethodAuditedTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditAtMethodSuperclassLevel/auditMethodSubclass/MappedSubclassingMethodAuditedTest.java @@ -5,79 +5,78 @@ package org.hibernate.orm.test.envers.integration.superclass.auditAtMethodSuperclassLevel.auditMethodSubclass; import java.util.Arrays; -import jakarta.persistence.EntityManager; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.exception.NotAuditedException; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; import org.hibernate.orm.test.envers.integration.superclass.auditAtMethodSuperclassLevel.AuditedMethodMappedSuperclass; import org.hibernate.orm.test.envers.integration.superclass.auditAtMethodSuperclassLevel.NotAuditedSubclassEntity; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; -import org.junit.Test; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertThrows; /** * @author Adam Warski (adam at warski dot org) * @author Hern&aacut;n Chanfreau */ -public class MappedSubclassingMethodAuditedTest extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = { + AuditedMethodMappedSuperclass.class, + AuditedMethodSubclassEntity.class, + NotAuditedSubclassEntity.class +}) +public class MappedSubclassingMethodAuditedTest { private Integer id2_1; private Integer id1_1; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { - AuditedMethodMappedSuperclass.class, - AuditedMethodSubclassEntity.class, - NotAuditedSubclassEntity.class - }; - } - - @Test - @Priority(10) - public void initData() { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - NotAuditedSubclassEntity nas = new NotAuditedSubclassEntity( "nae", "super str", "not audited str" ); - em.persist( nas ); - AuditedMethodSubclassEntity ae = new AuditedMethodSubclassEntity( "ae", "super str", "audited str" ); - em.persist( ae ); - id1_1 = ae.getId(); - id2_1 = nas.getId(); - em.getTransaction().commit(); + scope.inTransaction( em -> { + NotAuditedSubclassEntity nas = new NotAuditedSubclassEntity( "nae", "super str", "not audited str" ); + em.persist( nas ); + AuditedMethodSubclassEntity ae = new AuditedMethodSubclassEntity( "ae", "super str", "audited str" ); + em.persist( ae ); + id1_1 = ae.getId(); + id2_1 = nas.getId(); + } ); // Revision 2 - em.getTransaction().begin(); - ae = em.find( AuditedMethodSubclassEntity.class, id1_1 ); - ae.setStr( "ae new" ); - ae.setSubAuditedStr( "audited str new" ); - nas = em.find( NotAuditedSubclassEntity.class, id2_1 ); - nas.setStr( "nae new" ); - nas.setNotAuditedStr( "not aud str new" ); - em.getTransaction().commit(); + scope.inTransaction( em -> { + AuditedMethodSubclassEntity ae = em.find( AuditedMethodSubclassEntity.class, id1_1 ); + ae.setStr( "ae new" ); + ae.setSubAuditedStr( "audited str new" ); + NotAuditedSubclassEntity nas = em.find( NotAuditedSubclassEntity.class, id2_1 ); + nas.setStr( "nae new" ); + nas.setNotAuditedStr( "not aud str new" ); + } ); } @Test - public void testRevisionsCountsForAudited() { - assert Arrays.asList( 1, 2 ).equals( - getAuditReader().getRevisions( AuditedMethodSubclassEntity.class, id1_1 ) - ); + public void testRevisionsCountsForAudited(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + assertEquals( Arrays.asList( 1, 2 ), + AuditReaderFactory.get( em ).getRevisions( AuditedMethodSubclassEntity.class, id1_1 ) ); + } ); } - @Test(expected = NotAuditedException.class) - public void testRevisionsCountsForNotAudited() { - try { - getAuditReader().getRevisions( NotAuditedSubclassEntity.class, id2_1 ); - assert (false); - } - catch (NotAuditedException nae) { - throw nae; - } + @Test + public void testRevisionsCountsForNotAudited(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + assertThrows( NotAuditedException.class, () -> { + AuditReaderFactory.get( em ).getRevisions( NotAuditedSubclassEntity.class, id2_1 ); + } ); + } ); } - @Test - public void testHistoryOfAudited() { + public void testHistoryOfAudited(EntityManagerFactoryScope scope) { AuditedMethodSubclassEntity ver1 = new AuditedMethodSubclassEntity( id1_1, "ae", "super str", "audited str" ); AuditedMethodSubclassEntity ver2 = new AuditedMethodSubclassEntity( id1_1, @@ -86,26 +85,25 @@ public void testHistoryOfAudited() { "audited str new" ); - AuditedMethodSubclassEntity rev1 = getAuditReader().find( AuditedMethodSubclassEntity.class, id1_1, 1 ); - AuditedMethodSubclassEntity rev2 = getAuditReader().find( AuditedMethodSubclassEntity.class, id1_1, 2 ); + scope.inEntityManager( em -> { + AuditedMethodSubclassEntity rev1 = AuditReaderFactory.get( em ).find( AuditedMethodSubclassEntity.class, id1_1, 1 ); + AuditedMethodSubclassEntity rev2 = AuditReaderFactory.get( em ).find( AuditedMethodSubclassEntity.class, id1_1, 2 ); - //this property is not audited on superclass - assert (rev1.getOtherStr() == null); - assert (rev2.getOtherStr() == null); + //this property is not audited on superclass + assertNull( rev1.getOtherStr() ); + assertNull( rev2.getOtherStr() ); - assert rev1.equals( ver1 ); - assert rev2.equals( ver2 ); + assertEquals( ver1, rev1 ); + assertEquals( ver2, rev2 ); + } ); } - @Test(expected = NotAuditedException.class) - public void testHistoryOfNotAudited() { - try { - getAuditReader().find( NotAuditedSubclassEntity.class, id2_1, 1 ); - assert (false); - } - catch (NotAuditedException nae) { - throw nae; - } + @Test + public void testHistoryOfNotAudited(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + assertThrows( NotAuditedException.class, () -> { + AuditReaderFactory.get( em ).find( NotAuditedSubclassEntity.class, id2_1, 1 ); + } ); + } ); } - } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditedAtSuperclassLevel/auditAllSubclass/MappedSubclassingAllAuditedTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditedAtSuperclassLevel/auditAllSubclass/MappedSubclassingAllAuditedTest.java index 202d60bb71de..2e3d864c78bc 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditedAtSuperclassLevel/auditAllSubclass/MappedSubclassingAllAuditedTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditedAtSuperclassLevel/auditAllSubclass/MappedSubclassingAllAuditedTest.java @@ -5,101 +5,99 @@ package org.hibernate.orm.test.envers.integration.superclass.auditedAtSuperclassLevel.auditAllSubclass; import java.util.Arrays; -import jakarta.persistence.EntityManager; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.exception.NotAuditedException; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; import org.hibernate.orm.test.envers.integration.superclass.auditedAtSuperclassLevel.AuditedAllMappedSuperclass; import org.hibernate.orm.test.envers.integration.superclass.auditedAtSuperclassLevel.NotAuditedSubclassEntity; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; -import org.junit.Test; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertThrows; /** * @author Adam Warski (adam at warski dot org) * @author Hern&aacut;n Chanfreau */ -public class MappedSubclassingAllAuditedTest extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = { + AuditedAllMappedSuperclass.class, + AuditedAllSubclassEntity.class, + NotAuditedSubclassEntity.class +}) +public class MappedSubclassingAllAuditedTest { private Integer id2_1; private Integer id1_1; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { - AuditedAllMappedSuperclass.class, - AuditedAllSubclassEntity.class, - NotAuditedSubclassEntity.class - }; - } - - @Test - @Priority(10) - public void initData() { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - NotAuditedSubclassEntity nas = new NotAuditedSubclassEntity( "nae", "super str", "not audited str" ); - em.persist( nas ); - AuditedAllSubclassEntity ae = new AuditedAllSubclassEntity( "ae", "super str", "audited str" ); - em.persist( ae ); - id1_1 = ae.getId(); - id2_1 = nas.getId(); - em.getTransaction().commit(); + scope.inTransaction( em -> { + NotAuditedSubclassEntity nas = new NotAuditedSubclassEntity( "nae", "super str", "not audited str" ); + em.persist( nas ); + AuditedAllSubclassEntity ae = new AuditedAllSubclassEntity( "ae", "super str", "audited str" ); + em.persist( ae ); + id1_1 = ae.getId(); + id2_1 = nas.getId(); + } ); // Revision 2 - em.getTransaction().begin(); - ae = em.find( AuditedAllSubclassEntity.class, id1_1 ); - ae.setStr( "ae new" ); - ae.setSubAuditedStr( "audited str new" ); - nas = em.find( NotAuditedSubclassEntity.class, id2_1 ); - nas.setStr( "nae new" ); - nas.setNotAuditedStr( "not aud str new" ); - em.getTransaction().commit(); + scope.inTransaction( em -> { + AuditedAllSubclassEntity ae = em.find( AuditedAllSubclassEntity.class, id1_1 ); + ae.setStr( "ae new" ); + ae.setSubAuditedStr( "audited str new" ); + NotAuditedSubclassEntity nas = em.find( NotAuditedSubclassEntity.class, id2_1 ); + nas.setStr( "nae new" ); + nas.setNotAuditedStr( "not aud str new" ); + } ); } @Test - public void testRevisionsCountsForAudited() { - assert Arrays.asList( 1, 2 ).equals( - getAuditReader().getRevisions( AuditedAllSubclassEntity.class, id1_1 ) - ); + public void testRevisionsCountsForAudited(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + assertEquals( Arrays.asList( 1, 2 ), + AuditReaderFactory.get( em ).getRevisions( AuditedAllSubclassEntity.class, id1_1 ) ); + } ); } - @Test(expected = NotAuditedException.class) - public void testRevisionsCountsForNotAudited() { - try { - getAuditReader().getRevisions( NotAuditedSubclassEntity.class, id2_1 ); - assert (false); - } - catch (NotAuditedException nae) { - throw nae; - } + @Test + public void testRevisionsCountsForNotAudited(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + assertThrows( NotAuditedException.class, () -> { + AuditReaderFactory.get( em ).getRevisions( NotAuditedSubclassEntity.class, id2_1 ); + } ); + } ); } - @Test - public void testHistoryOfAudited() { + public void testHistoryOfAudited(EntityManagerFactoryScope scope) { AuditedAllSubclassEntity ver1 = new AuditedAllSubclassEntity( id1_1, "ae", "super str", "audited str" ); AuditedAllSubclassEntity ver2 = new AuditedAllSubclassEntity( id1_1, "ae new", "super str", "audited str new" ); - AuditedAllSubclassEntity rev1 = getAuditReader().find( AuditedAllSubclassEntity.class, id1_1, 1 ); - AuditedAllSubclassEntity rev2 = getAuditReader().find( AuditedAllSubclassEntity.class, id1_1, 2 ); + scope.inEntityManager( em -> { + AuditedAllSubclassEntity rev1 = AuditReaderFactory.get( em ).find( AuditedAllSubclassEntity.class, id1_1, 1 ); + AuditedAllSubclassEntity rev2 = AuditReaderFactory.get( em ).find( AuditedAllSubclassEntity.class, id1_1, 2 ); - assert (rev1.getOtherStr() != null); - assert (rev2.getOtherStr() != null); + assertNotNull( rev1.getOtherStr() ); + assertNotNull( rev2.getOtherStr() ); - assert rev1.equals( ver1 ); - assert rev2.equals( ver2 ); + assertEquals( ver1, rev1 ); + assertEquals( ver2, rev2 ); + } ); } - @Test(expected = NotAuditedException.class) - public void testHistoryOfNotAudited() { - try { - getAuditReader().find( NotAuditedSubclassEntity.class, id2_1, 1 ); - assert (false); - } - catch (NotAuditedException nae) { - throw nae; - } + @Test + public void testHistoryOfNotAudited(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + assertThrows( NotAuditedException.class, () -> { + AuditReaderFactory.get( em ).find( NotAuditedSubclassEntity.class, id2_1, 1 ); + } ); + } ); } - } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditedAtSuperclassLevel/auditMethodSubclass/MappedSubclassingMethodAuditedTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditedAtSuperclassLevel/auditMethodSubclass/MappedSubclassingMethodAuditedTest.java index 9e9b5480915b..d079fb5337d7 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditedAtSuperclassLevel/auditMethodSubclass/MappedSubclassingMethodAuditedTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditedAtSuperclassLevel/auditMethodSubclass/MappedSubclassingMethodAuditedTest.java @@ -5,79 +5,78 @@ package org.hibernate.orm.test.envers.integration.superclass.auditedAtSuperclassLevel.auditMethodSubclass; import java.util.Arrays; -import jakarta.persistence.EntityManager; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.exception.NotAuditedException; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; import org.hibernate.orm.test.envers.integration.superclass.auditedAtSuperclassLevel.AuditedAllMappedSuperclass; import org.hibernate.orm.test.envers.integration.superclass.auditedAtSuperclassLevel.NotAuditedSubclassEntity; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; -import org.junit.Test; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertThrows; /** * @author Adam Warski (adam at warski dot org) * @author Hern&aacut;n Chanfreau */ -public class MappedSubclassingMethodAuditedTest extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = { + AuditedAllMappedSuperclass.class, + AuditedMethodSubclassEntity.class, + NotAuditedSubclassEntity.class +}) +public class MappedSubclassingMethodAuditedTest { private Integer id2_1; private Integer id1_1; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { - AuditedAllMappedSuperclass.class, - AuditedMethodSubclassEntity.class, - NotAuditedSubclassEntity.class - }; - } - - @Test - @Priority(10) - public void initData() { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Revision 1 - EntityManager em = getEntityManager(); - em.getTransaction().begin(); - NotAuditedSubclassEntity nas = new NotAuditedSubclassEntity( "nae", "super str", "not audited str" ); - em.persist( nas ); - AuditedMethodSubclassEntity ae = new AuditedMethodSubclassEntity( "ae", "super str", "audited str" ); - em.persist( ae ); - id1_1 = ae.getId(); - id2_1 = nas.getId(); - em.getTransaction().commit(); + scope.inTransaction( em -> { + NotAuditedSubclassEntity nas = new NotAuditedSubclassEntity( "nae", "super str", "not audited str" ); + em.persist( nas ); + AuditedMethodSubclassEntity ae = new AuditedMethodSubclassEntity( "ae", "super str", "audited str" ); + em.persist( ae ); + id1_1 = ae.getId(); + id2_1 = nas.getId(); + } ); // Revision 2 - em.getTransaction().begin(); - ae = em.find( AuditedMethodSubclassEntity.class, id1_1 ); - ae.setStr( "ae new" ); - ae.setSubAuditedStr( "audited str new" ); - nas = em.find( NotAuditedSubclassEntity.class, id2_1 ); - nas.setStr( "nae new" ); - nas.setNotAuditedStr( "not aud str new" ); - em.getTransaction().commit(); + scope.inTransaction( em -> { + AuditedMethodSubclassEntity ae = em.find( AuditedMethodSubclassEntity.class, id1_1 ); + ae.setStr( "ae new" ); + ae.setSubAuditedStr( "audited str new" ); + NotAuditedSubclassEntity nas = em.find( NotAuditedSubclassEntity.class, id2_1 ); + nas.setStr( "nae new" ); + nas.setNotAuditedStr( "not aud str new" ); + } ); } @Test - public void testRevisionsCountsForAudited() { - assert Arrays.asList( 1, 2 ).equals( - getAuditReader().getRevisions( AuditedMethodSubclassEntity.class, id1_1 ) - ); + public void testRevisionsCountsForAudited(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + assertEquals( Arrays.asList( 1, 2 ), + AuditReaderFactory.get( em ).getRevisions( AuditedMethodSubclassEntity.class, id1_1 ) ); + } ); } - @Test(expected = NotAuditedException.class) - public void testRevisionsCountsForNotAudited() { - try { - getAuditReader().getRevisions( NotAuditedSubclassEntity.class, id2_1 ); - assert (false); - } - catch (NotAuditedException nae) { - throw nae; - } + @Test + public void testRevisionsCountsForNotAudited(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + assertThrows( NotAuditedException.class, () -> { + AuditReaderFactory.get( em ).getRevisions( NotAuditedSubclassEntity.class, id2_1 ); + } ); + } ); } - @Test - public void testHistoryOfAudited() { + public void testHistoryOfAudited(EntityManagerFactoryScope scope) { AuditedMethodSubclassEntity ver1 = new AuditedMethodSubclassEntity( id1_1, "ae", "super str", "audited str" ); AuditedMethodSubclassEntity ver2 = new AuditedMethodSubclassEntity( id1_1, @@ -86,25 +85,24 @@ public void testHistoryOfAudited() { "audited str new" ); - AuditedMethodSubclassEntity rev1 = getAuditReader().find( AuditedMethodSubclassEntity.class, id1_1, 1 ); - AuditedMethodSubclassEntity rev2 = getAuditReader().find( AuditedMethodSubclassEntity.class, id1_1, 2 ); + scope.inEntityManager( em -> { + AuditedMethodSubclassEntity rev1 = AuditReaderFactory.get( em ).find( AuditedMethodSubclassEntity.class, id1_1, 1 ); + AuditedMethodSubclassEntity rev2 = AuditReaderFactory.get( em ).find( AuditedMethodSubclassEntity.class, id1_1, 2 ); - assert (rev1.getOtherStr() != null); - assert (rev2.getOtherStr() != null); + assertNotNull( rev1.getOtherStr() ); + assertNotNull( rev2.getOtherStr() ); - assert rev1.equals( ver1 ); - assert rev2.equals( ver2 ); + assertEquals( ver1, rev1 ); + assertEquals( ver2, rev2 ); + } ); } - @Test(expected = NotAuditedException.class) - public void testHistoryOfNotAudited() { - try { - getAuditReader().find( NotAuditedSubclassEntity.class, id2_1, 1 ); - assert (false); - } - catch (NotAuditedException nae) { - throw nae; - } + @Test + public void testHistoryOfNotAudited(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + assertThrows( NotAuditedException.class, () -> { + AuditReaderFactory.get( em ).find( NotAuditedSubclassEntity.class, id2_1, 1 ); + } ); + } ); } - } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditoverride/AuditClassOverrideTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditoverride/AuditClassOverrideTest.java index a940fea4cb3c..78a1a45464d3 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditoverride/AuditClassOverrideTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditoverride/AuditClassOverrideTest.java @@ -4,97 +4,103 @@ */ package org.hibernate.orm.test.envers.integration.superclass.auditoverride; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.mapping.Column; import org.hibernate.mapping.Table; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.DomainModel; +import org.hibernate.testing.orm.junit.DomainModelScope; +import org.hibernate.testing.orm.junit.SessionFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Assert; -import org.junit.Test; +import org.hibernate.testing.orm.junit.SessionFactory; +import org.hibernate.testing.orm.junit.SessionFactoryScope; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertNull; /** * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) */ @JiraKey(value = "HHH-4439") -public class AuditClassOverrideTest extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@DomainModel(annotatedClasses = {ClassOverrideAuditedEntity.class, ClassOverrideNotAuditedEntity.class}) +@SessionFactory +public class AuditClassOverrideTest { private Integer classAuditedEntityId = null; private Integer classNotAuditedEntityId = null; private Table classAuditedTable = null; private Table classNotAuditedTable = null; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {ClassOverrideAuditedEntity.class, ClassOverrideNotAuditedEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - + @BeforeClassTemplate + public void initData(SessionFactoryScope scope, DomainModelScope dms) { // Revision 1 - em.getTransaction().begin(); - ClassOverrideAuditedEntity classOverrideAuditedEntity = new ClassOverrideAuditedEntity( "data 1", 1, "data 2" ); - em.persist( classOverrideAuditedEntity ); - em.getTransaction().commit(); - classAuditedEntityId = classOverrideAuditedEntity.getId(); + scope.inTransaction( em -> { + ClassOverrideAuditedEntity classOverrideAuditedEntity = new ClassOverrideAuditedEntity( "data 1", 1, "data 2" ); + em.persist( classOverrideAuditedEntity ); + classAuditedEntityId = classOverrideAuditedEntity.getId(); + } ); // Revision 2 - em.getTransaction().begin(); - ClassOverrideNotAuditedEntity classOverrideNotAuditedEntity = new ClassOverrideNotAuditedEntity( - "data 1", - 1, - "data 2" - ); - em.persist( classOverrideNotAuditedEntity ); - em.getTransaction().commit(); - classNotAuditedEntityId = classOverrideNotAuditedEntity.getId(); + scope.inTransaction( em -> { + ClassOverrideNotAuditedEntity classOverrideNotAuditedEntity = new ClassOverrideNotAuditedEntity( + "data 1", + 1, + "data 2" + ); + em.persist( classOverrideNotAuditedEntity ); + classNotAuditedEntityId = classOverrideNotAuditedEntity.getId(); + } ); - classAuditedTable = metadata().getEntityBinding( + classAuditedTable = dms.getDomainModel().getEntityBinding( "org.hibernate.orm.test.envers.integration.superclass.auditoverride.ClassOverrideAuditedEntity_AUD" ).getTable(); - classNotAuditedTable = metadata().getEntityBinding( + classNotAuditedTable = dms.getDomainModel().getEntityBinding( "org.hibernate.orm.test.envers.integration.superclass.auditoverride.ClassOverrideNotAuditedEntity_AUD" ).getTable(); } @Test public void testAuditedProperty() { - Assert.assertNotNull( classAuditedTable.getColumn( new Column( "number1" ) ) ); - Assert.assertNotNull( classAuditedTable.getColumn( new Column( "str1" ) ) ); - Assert.assertNotNull( classAuditedTable.getColumn( new Column( "str2" ) ) ); - Assert.assertNotNull( classNotAuditedTable.getColumn( new Column( "str2" ) ) ); + assertNotNull( classAuditedTable.getColumn( new Column( "number1" ) ) ); + assertNotNull( classAuditedTable.getColumn( new Column( "str1" ) ) ); + assertNotNull( classAuditedTable.getColumn( new Column( "str2" ) ) ); + assertNotNull( classNotAuditedTable.getColumn( new Column( "str2" ) ) ); } @Test public void testNotAuditedProperty() { - Assert.assertNull( classNotAuditedTable.getColumn( new Column( "number1" ) ) ); - Assert.assertNull( classNotAuditedTable.getColumn( new Column( "str1" ) ) ); + assertNull( classNotAuditedTable.getColumn( new Column( "number1" ) ) ); + assertNull( classNotAuditedTable.getColumn( new Column( "str1" ) ) ); } @Test - public void testHistoryOfClassOverrideAuditedEntity() { - ClassOverrideAuditedEntity ver1 = new ClassOverrideAuditedEntity( "data 1", 1, classAuditedEntityId, "data 2" ); - Assert.assertEquals( ver1, getAuditReader().find( ClassOverrideAuditedEntity.class, classAuditedEntityId, 1 ) ); + public void testHistoryOfClassOverrideAuditedEntity(SessionFactoryScope scope) { + scope.inSession( em -> { + ClassOverrideAuditedEntity ver1 = new ClassOverrideAuditedEntity( "data 1", 1, classAuditedEntityId, "data 2" ); + assertEquals( ver1, AuditReaderFactory.get( em ).find( ClassOverrideAuditedEntity.class, classAuditedEntityId, 1 ) ); + } ); } @Test - public void testHistoryOfClassOverrideNotAuditedEntity() { - ClassOverrideNotAuditedEntity ver1 = new ClassOverrideNotAuditedEntity( - null, - null, - classNotAuditedEntityId, - "data 2" - ); - Assert.assertEquals( - ver1, getAuditReader().find( - ClassOverrideNotAuditedEntity.class, - classNotAuditedEntityId, - 2 - ) - ); + public void testHistoryOfClassOverrideNotAuditedEntity(SessionFactoryScope scope) { + scope.inSession( em -> { + ClassOverrideNotAuditedEntity ver1 = new ClassOverrideNotAuditedEntity( + null, + null, + classNotAuditedEntityId, + "data 2" + ); + assertEquals( + ver1, AuditReaderFactory.get( em ).find( + ClassOverrideNotAuditedEntity.class, + classNotAuditedEntityId, + 2 + ) + ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditoverride/AuditOverrideAuditJoinTableTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditoverride/AuditOverrideAuditJoinTableTest.java index f421650eb360..12da7a2afc2a 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditoverride/AuditOverrideAuditJoinTableTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditoverride/AuditOverrideAuditJoinTableTest.java @@ -21,43 +21,40 @@ import org.hibernate.envers.AuditJoinTable; import org.hibernate.envers.AuditOverride; import org.hibernate.envers.AuditOverrides; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.Audited; import org.hibernate.envers.NotAudited; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.junit.Test; - +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; import static org.hibernate.orm.test.envers.tools.TestTools.checkCollection; -import static org.hibernate.testing.transaction.TransactionUtil.doInJPA; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.fail; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.fail; /** * @author Chris Cranford */ @JiraKey(value = "HHH-12913") -public class AuditOverrideAuditJoinTableTest extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = { + AuditOverrideAuditJoinTableTest.OtherAuditedEntity.class, + AuditOverrideAuditJoinTableTest.OtherOverrideAuditedEntity.class, + AuditOverrideAuditJoinTableTest.OtherAuditParentsAuditEntity.class +}) +public class AuditOverrideAuditJoinTableTest { private Long entityId; private Long overrideEntityId; private Long auditParentsEntityId; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { - OtherAuditedEntity.class, - OtherOverrideAuditedEntity.class, - OtherAuditParentsAuditEntity.class - }; - } - - @Test - @Priority(10) - public void initData() { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Revision 1 - Persist audited subclass with non-audited super-type - entityId = doInJPA( this::entityManagerFactory, entityManager -> { + entityId = scope.fromTransaction( em -> { final OtherAuditedEntity entity = new OtherAuditedEntity(); entity.setId( 1 ); entity.setVersion( Timestamp.valueOf( LocalDateTime.now() ) ); @@ -70,13 +67,13 @@ public void initData() { list.add( "Entry2" ); entity.setSuperStringList( list ); - entityManager.persist( entity ); + em.persist( entity ); return entity.getId(); } ); // Revision 2 - Persist audited subclass with audit-override non-audited super-type - overrideEntityId = doInJPA( this::entityManagerFactory, entityManager -> { + overrideEntityId = scope.fromTransaction( em -> { final OtherOverrideAuditedEntity entity = new OtherOverrideAuditedEntity(); entity.setId( 1 ); entity.setVersion( Timestamp.valueOf( LocalDateTime.now() ) ); @@ -89,13 +86,13 @@ public void initData() { list.add( "Entry2" ); entity.setSuperStringList( list ); - entityManager.persist( entity ); + em.persist( entity ); return entity.getId(); } ); // Revision 3 - Persist audited subclass with audit-parents on non-audited super-type - auditParentsEntityId = doInJPA( this::entityManagerFactory, entityManager -> { + auditParentsEntityId = scope.fromTransaction( em -> { final OtherAuditParentsAuditEntity entity = new OtherAuditParentsAuditEntity(); entity.setId( 1 ); entity.setVersion( Timestamp.valueOf( LocalDateTime.now() ) ); @@ -108,16 +105,16 @@ public void initData() { list.add( "Entry2" ); entity.setSuperStringList( list ); - entityManager.persist( entity ); + em.persist( entity ); return entity.getId(); } ); } @Test - public void testMetadataAuditSuperClassWithAuditJoinTable() { + public void testMetadataAuditSuperClassWithAuditJoinTable(EntityManagerFactoryScope scope) { try { - entityManagerFactory().unwrap( SessionFactoryImplementor.class ) + scope.getEntityManagerFactory().unwrap( SessionFactoryImplementor.class ) .getMappingMetamodel() .getEntityDescriptor( "SuperClass_StringList" ); } @@ -127,9 +124,9 @@ public void testMetadataAuditSuperClassWithAuditJoinTable() { } @Test - public void testMetadataNonAuditedSuperClassWithOverrideAuditJoinTable() { + public void testMetadataNonAuditedSuperClassWithOverrideAuditJoinTable(EntityManagerFactoryScope scope) { try { - entityManagerFactory().unwrap( SessionFactoryImplementor.class ) + scope.getEntityManagerFactory().unwrap( SessionFactoryImplementor.class ) .getMappingMetamodel() .getEntityDescriptor( "OOAE_StringList" ); } @@ -139,9 +136,9 @@ public void testMetadataNonAuditedSuperClassWithOverrideAuditJoinTable() { } @Test - public void testMetadataNonAuditedSuperClassWithAuditParentsOverrideAuditJoinTable() { + public void testMetadataNonAuditedSuperClassWithAuditParentsOverrideAuditJoinTable(EntityManagerFactoryScope scope) { try { - entityManagerFactory().unwrap( SessionFactoryImplementor.class ) + scope.getEntityManagerFactory().unwrap( SessionFactoryImplementor.class ) .getMappingMetamodel() .getEntityDescriptor( "OAPAE_StringList" ); } @@ -151,33 +148,42 @@ public void testMetadataNonAuditedSuperClassWithAuditParentsOverrideAuditJoinTab } @Test - public void testNonAuditedSuperclassAuditJoinTableHistory() { - assertEquals( Arrays.asList( 1 ), getAuditReader().getRevisions( OtherAuditedEntity.class, entityId ) ); - - OtherAuditedEntity rev = getAuditReader().find( OtherAuditedEntity.class, entityId, 1 ); - assertNotNull( rev ); - assertEquals( 2, rev.getSuperStringList().size() ); - checkCollection( rev.getSuperStringList(), "Entry1", "Entry2" ); + public void testNonAuditedSuperclassAuditJoinTableHistory(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 1 ), auditReader.getRevisions( OtherAuditedEntity.class, entityId ) ); + + OtherAuditedEntity rev = auditReader.find( OtherAuditedEntity.class, entityId, 1 ); + assertNotNull( rev ); + assertEquals( 2, rev.getSuperStringList().size() ); + checkCollection( rev.getSuperStringList(), "Entry1", "Entry2" ); + } ); } @Test - public void testNonAuditedSuperclassWithOverrideAuditJoinTableHistory() { - assertEquals( Arrays.asList( 2 ), getAuditReader().getRevisions( OtherOverrideAuditedEntity.class, overrideEntityId ) ); - - OtherOverrideAuditedEntity rev = getAuditReader().find( OtherOverrideAuditedEntity.class, overrideEntityId, 2 ); - assertNotNull( rev ); - assertEquals( 2, rev.getSuperStringList().size() ); - checkCollection( rev.getSuperStringList(), "Entry1", "Entry2" ); + public void testNonAuditedSuperclassWithOverrideAuditJoinTableHistory(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 2 ), auditReader.getRevisions( OtherOverrideAuditedEntity.class, overrideEntityId ) ); + + OtherOverrideAuditedEntity rev = auditReader.find( OtherOverrideAuditedEntity.class, overrideEntityId, 2 ); + assertNotNull( rev ); + assertEquals( 2, rev.getSuperStringList().size() ); + checkCollection( rev.getSuperStringList(), "Entry1", "Entry2" ); + } ); } @Test - public void testNonAuditedSuperclassWithAuditParentsOverrideAuditJoinTableHistory() { - assertEquals( Arrays.asList( 3 ), getAuditReader().getRevisions( OtherAuditParentsAuditEntity.class, auditParentsEntityId ) ); - - OtherAuditParentsAuditEntity rev = getAuditReader().find( OtherAuditParentsAuditEntity.class, auditParentsEntityId, 3 ); - assertNotNull( rev ); - assertEquals( 2, rev.getSuperStringList().size() ); - checkCollection( rev.getSuperStringList(), "Entry1", "Entry2" ); + public void testNonAuditedSuperclassWithAuditParentsOverrideAuditJoinTableHistory(EntityManagerFactoryScope scope) { + scope.inEntityManager( em -> { + final var auditReader = AuditReaderFactory.get( em ); + assertEquals( Arrays.asList( 3 ), auditReader.getRevisions( OtherAuditParentsAuditEntity.class, auditParentsEntityId ) ); + + OtherAuditParentsAuditEntity rev = auditReader.find( OtherAuditParentsAuditEntity.class, auditParentsEntityId, 3 ); + assertNotNull( rev ); + assertEquals( 2, rev.getSuperStringList().size() ); + checkCollection( rev.getSuperStringList(), "Entry1", "Entry2" ); + } ); } @MappedSuperclass diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditoverride/AuditPropertyOverrideTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditoverride/AuditPropertyOverrideTest.java index 25e257507ff3..8d854cb0d2ab 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditoverride/AuditPropertyOverrideTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditoverride/AuditPropertyOverrideTest.java @@ -4,22 +4,31 @@ */ package org.hibernate.orm.test.envers.integration.superclass.auditoverride; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.mapping.Column; import org.hibernate.mapping.Table; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.DomainModel; +import org.hibernate.testing.orm.junit.DomainModelScope; import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Assert; -import org.junit.Test; +import org.hibernate.testing.orm.junit.SessionFactory; +import org.hibernate.testing.orm.junit.SessionFactoryScope; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertNull; /** * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) */ @JiraKey(value = "HHH-4439") -public class AuditPropertyOverrideTest extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@DomainModel(annotatedClasses = {PropertyOverrideEntity.class, TransitiveOverrideEntity.class, AuditedSpecialEntity.class}) +@SessionFactory +public class AuditPropertyOverrideTest { private Integer propertyEntityId = null; private Integer transitiveEntityId = null; private Integer auditedEntityId = null; @@ -27,88 +36,86 @@ public class AuditPropertyOverrideTest extends BaseEnversJPAFunctionalTestCase { private Table transitiveTable = null; private Table auditedTable = null; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {PropertyOverrideEntity.class, TransitiveOverrideEntity.class, AuditedSpecialEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - + @BeforeClassTemplate + public void initData(SessionFactoryScope scope, DomainModelScope dms) { // Revision 1 - em.getTransaction().begin(); - PropertyOverrideEntity propertyEntity = new PropertyOverrideEntity( "data 1", 1, "data 2" ); - em.persist( propertyEntity ); - em.getTransaction().commit(); - propertyEntityId = propertyEntity.getId(); + scope.inTransaction( em -> { + PropertyOverrideEntity propertyEntity = new PropertyOverrideEntity( "data 1", 1, "data 2" ); + em.persist( propertyEntity ); + 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(); + scope.inTransaction( em -> { + TransitiveOverrideEntity transitiveEntity = new TransitiveOverrideEntity( "data 1", 1, "data 2", 2, "data 3" ); + em.persist( transitiveEntity ); + 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(); + scope.inTransaction( em -> { + AuditedSpecialEntity auditedEntity = new AuditedSpecialEntity( "data 1", 1, "data 2" ); + em.persist( auditedEntity ); + auditedEntityId = auditedEntity.getId(); + } ); - propertyTable = metadata().getEntityBinding( + propertyTable = dms.getDomainModel().getEntityBinding( "org.hibernate.orm.test.envers.integration.superclass.auditoverride.PropertyOverrideEntity_AUD" ).getTable(); - transitiveTable = metadata().getEntityBinding( + transitiveTable = dms.getDomainModel().getEntityBinding( "org.hibernate.orm.test.envers.integration.superclass.auditoverride.TransitiveOverrideEntity_AUD" ).getTable(); - auditedTable = metadata().getEntityBinding( + auditedTable = dms.getDomainModel().getEntityBinding( "org.hibernate.orm.test.envers.integration.superclass.auditoverride.AuditedSpecialEntity_AUD" ).getTable(); } @Test public void testNotAuditedProperty() { - Assert.assertNull( propertyTable.getColumn( new Column( "str1" ) ) ); + 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" ) ) ); + assertNotNull( propertyTable.getColumn( new Column( "number1" ) ) ); + assertNotNull( transitiveTable.getColumn( new Column( "number2" ) ) ); + assertNotNull( auditedTable.getColumn( new Column( "str1" ) ) ); } @Test public void testTransitiveAuditedProperty() { - Assert.assertNotNull( transitiveTable.getColumn( new Column( "number1" ) ) ); - Assert.assertNotNull( transitiveTable.getColumn( new Column( "str1" ) ) ); + assertNotNull( transitiveTable.getColumn( new Column( "number1" ) ) ); + 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 ) ); + public void testHistoryOfPropertyOverrideEntity(SessionFactoryScope scope) { + scope.inSession( em -> { + PropertyOverrideEntity ver1 = new PropertyOverrideEntity( null, 1, propertyEntityId, "data 2" ); + assertEquals( ver1, AuditReaderFactory.get( em ).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 ) ); + public void testHistoryOfTransitiveOverrideEntity(SessionFactoryScope scope) { + scope.inSession( em -> { + TransitiveOverrideEntity ver1 = new TransitiveOverrideEntity( + "data 1", + 1, + transitiveEntityId, + "data 2", + 2, + "data 3" + ); + assertEquals( ver1, AuditReaderFactory.get( em ).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 ) ); + public void testHistoryOfAuditedSpecialEntity(SessionFactoryScope scope) { + scope.inSession( em -> { + AuditedSpecialEntity ver1 = new AuditedSpecialEntity( "data 1", null, auditedEntityId, "data 2" ); + assertEquals( ver1, AuditReaderFactory.get( em ).find( AuditedSpecialEntity.class, auditedEntityId, 3 ) ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditoverride/EmbeddableTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditoverride/EmbeddableTest.java index 08dd204a619f..3af8053d5861 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditoverride/EmbeddableTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditoverride/EmbeddableTest.java @@ -8,23 +8,26 @@ import jakarta.persistence.Embeddable; import jakarta.persistence.Embedded; import jakarta.persistence.Entity; -import jakarta.persistence.EntityManager; import jakarta.persistence.GeneratedValue; import jakarta.persistence.Id; import jakarta.persistence.MappedSuperclass; - import org.hibernate.envers.AuditOverride; import org.hibernate.envers.AuditOverrides; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.Audited; import org.hibernate.envers.NotAudited; import org.hibernate.mapping.PersistentClass; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.DomainModel; +import org.hibernate.testing.orm.junit.DomainModelScope; import org.hibernate.testing.orm.junit.JiraKey; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.junit.Test; +import org.hibernate.testing.orm.junit.SessionFactory; +import org.hibernate.testing.orm.junit.SessionFactoryScope; +import org.junit.jupiter.api.Test; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; /** * This class addresses numerous issues with Embeddable annotated classes @@ -32,7 +35,23 @@ * * @author Chris Cranford */ -public class EmbeddableTest extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@DomainModel(annotatedClasses = { + EmbeddableTest.AuditedEmbeddable.class, + EmbeddableTest.AuditedEmbeddableOverrideEntity.class, + EmbeddableTest.FullOverrideEmbeddable.class, + EmbeddableTest.FullOverrideEmbeddableEntity.class, + EmbeddableTest.NotAuditedEmbeddableEntity.class, + EmbeddableTest.OverrideEmbeddable.class, + EmbeddableTest.OverrideEmbeddableEntity.class, + EmbeddableTest.SimpleAbstractMappedSuperclass.class, + EmbeddableTest.SimpleEmbeddable.class, + EmbeddableTest.SimpleEmbeddableEntity.class, + EmbeddableTest.SimpleEmbeddableWithOverrideEntity.class, + EmbeddableTest.SimpleEmbeddableWithPropertyOverrideEntity.class +}) +@SessionFactory +public class EmbeddableTest { private Integer simpleId; private Integer simpleOverrideId; private Integer simplePropertyId; @@ -41,30 +60,9 @@ public class EmbeddableTest extends BaseEnversJPAFunctionalTestCase { private Integer overridedId; private Integer auditedId; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { - AuditedEmbeddable.class, - AuditedEmbeddableOverrideEntity.class, - FullOverrideEmbeddable.class, - FullOverrideEmbeddableEntity.class, - NotAuditedEmbeddableEntity.class, - OverrideEmbeddable.class, - OverrideEmbeddableEntity.class, - SimpleAbstractMappedSuperclass.class, - SimpleEmbeddable.class, - SimpleEmbeddableEntity.class, - SimpleEmbeddableWithOverrideEntity.class, - SimpleEmbeddableWithPropertyOverrideEntity.class - }; - } - - @Test - @Priority( 10 ) - public void initData() { - EntityManager entityManager = getEntityManager(); - try { - + @BeforeClassTemplate + public void initData(SessionFactoryScope scope) { + scope.inTransaction( em -> { // entity 1 SimpleEmbeddableEntity simple = new SimpleEmbeddableEntity(); simple.setEmbeddable( new SimpleEmbeddable() ); @@ -108,15 +106,13 @@ public void initData() { audited.getEmbeddable().setIntValue( 35 ); audited.getEmbeddable().setValue( 1024 ); - entityManager.getTransaction().begin(); - entityManager.persist( simple ); - entityManager.persist( simpleOverride ); - entityManager.persist( simpleProperty ); - entityManager.persist( fullOverride ); - entityManager.persist( notAudited ); - entityManager.persist( overrided ); - entityManager.persist( audited ); - entityManager.getTransaction().commit(); + em.persist( simple ); + em.persist( simpleOverride ); + em.persist( simpleProperty ); + em.persist( fullOverride ); + em.persist( notAudited ); + em.persist( overrided ); + em.persist( audited ); this.simpleId = simple.getId(); this.simpleOverrideId = simpleOverride.getId(); @@ -125,16 +121,13 @@ public void initData() { this.notAuditedId = notAudited.getId(); this.overridedId = overrided.getId(); this.auditedId = audited.getId(); - } - finally { - entityManager.close(); - } + } ); } @Test - @JiraKey( value = "HHH-9228" ) - public void testAuditOverrideOnAuditedEmbeddable() { - final PersistentClass clazz = getPersistentClass( AuditedEmbeddableOverrideEntity.class, auditedId, 1 ); + @JiraKey(value = "HHH-9228") + public void testAuditOverrideOnAuditedEmbeddable(DomainModelScope dm, SessionFactoryScope sf) { + final PersistentClass clazz = getPersistentClass( dm, sf, AuditedEmbeddableOverrideEntity.class, auditedId, 1 ); assertTrue( clazz.hasProperty( "name" ) ); // verify non-audited fields are excluded from mappings. assertFalse( clazz.hasProperty( "embeddable_value" ) ); @@ -143,42 +136,45 @@ public void testAuditOverrideOnAuditedEmbeddable() { } @Test - @JiraKey( value = "HHH-9229" ) - public void testEmptyEmbeddableWithFullAudit() { - final PersistentClass clazz = getPersistentClass( FullOverrideEmbeddableEntity.class, fullOverrideId, 1 ); + @JiraKey(value = "HHH-9229") + public void testEmptyEmbeddableWithFullAudit(DomainModelScope dm, SessionFactoryScope sf) { + final PersistentClass clazz = getPersistentClass( dm, sf, FullOverrideEmbeddableEntity.class, fullOverrideId, + 1 ); assertTrue( clazz.hasProperty( "embeddable_intValue" ) ); assertTrue( clazz.hasProperty( "embeddable_strValue" ) ); } @Test - @JiraKey( value = "HHH-9229" ) - public void testEmptyEmbeddableWithNoAudited() { - final PersistentClass clazz = getPersistentClass( NotAuditedEmbeddableEntity.class, notAuditedId, 1 ); + @JiraKey(value = "HHH-9229") + public void testEmptyEmbeddableWithNoAudited(DomainModelScope dm, SessionFactoryScope sf) { + final PersistentClass clazz = getPersistentClass( dm, sf, NotAuditedEmbeddableEntity.class, notAuditedId, 1 ); // not mapped because @NotAudited should override any other behavior. assertFalse( clazz.hasProperty( "embeddable_intValue" ) ); assertFalse( clazz.hasProperty( "embeddable_strValue" ) ); } @Test - @JiraKey( value = "HHH-9229" ) - public void testEmptyEmbeddableWithAuditOverride() { - final PersistentClass clazz = getPersistentClass( OverrideEmbeddableEntity.class, overridedId, 1 ); + @JiraKey(value = "HHH-9229") + public void testEmptyEmbeddableWithAuditOverride(DomainModelScope dm, SessionFactoryScope sf) { + final PersistentClass clazz = getPersistentClass( dm, sf, OverrideEmbeddableEntity.class, overridedId, 1 ); assertFalse( clazz.hasProperty( "embeddable_strValue" ) ); assertTrue( clazz.hasProperty( "embeddable_intValue" ) ); } @Test - @JiraKey( value = "HHH-9229" ) - public void testEmptyEmbeddableNoAuditOverrides() { - final PersistentClass clazz = getPersistentClass( SimpleEmbeddableEntity.class, simpleId, 1 ); + @JiraKey(value = "HHH-9229") + public void testEmptyEmbeddableNoAuditOverrides(DomainModelScope dm, SessionFactoryScope sf) { + final PersistentClass clazz = getPersistentClass( dm, sf, SimpleEmbeddableEntity.class, simpleId, 1 ); assertFalse( clazz.hasProperty( "embeddable_strValue" ) ); assertFalse( clazz.hasProperty( "embeddable_intValue" ) ); } @Test - @JiraKey( value = "HHH-9229" ) - public void testEmptyEmbeddableWithAuditOverrideForMappedSuperclass() { + @JiraKey(value = "HHH-9229") + public void testEmptyEmbeddableWithAuditOverrideForMappedSuperclass(DomainModelScope dm, SessionFactoryScope sf) { final PersistentClass clazz = getPersistentClass( + dm, + sf, SimpleEmbeddableWithOverrideEntity.class, simpleOverrideId, 1 @@ -188,9 +184,11 @@ public void testEmptyEmbeddableWithAuditOverrideForMappedSuperclass() { } @Test - @JiraKey( value = "HHH-9229" ) - public void testEmptyEmbeddableWithPropertyAuditOverride() { + @JiraKey(value = "HHH-9229") + public void testEmptyEmbeddableWithPropertyAuditOverride(DomainModelScope dm, SessionFactoryScope sf) { final PersistentClass clazz = getPersistentClass( + dm, + sf, SimpleEmbeddableWithPropertyOverrideEntity.class, simplePropertyId, 1 @@ -456,8 +454,17 @@ public void setId(Integer id) { } } - private PersistentClass getPersistentClass(Class clazz, Object id, Number revision) { - final Object entity = getAuditReader().find( clazz, id, revision ); - return metadata().getEntityBinding( getAuditReader().getEntityName( id, revision, entity ) + "_AUD" ); + private PersistentClass getPersistentClass( + DomainModelScope dm, + SessionFactoryScope sf, + Class clazz, + Object id, + Number revision) { + return sf.fromSession( session -> { + final var auditReader = AuditReaderFactory.get( session ); + final Object entity = auditReader.find( clazz, id, revision ); + return dm.getDomainModel() + .getEntityBinding( auditReader.getEntityName( id, revision, entity ) + "_AUD" ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditoverride/MixedOverrideTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditoverride/MixedOverrideTest.java index 4cf9fd7cfc29..78be0c9e1402 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditoverride/MixedOverrideTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditoverride/MixedOverrideTest.java @@ -4,61 +4,65 @@ */ package org.hibernate.orm.test.envers.integration.superclass.auditoverride; -import jakarta.persistence.EntityManager; - -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.mapping.Column; import org.hibernate.mapping.Table; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.DomainModel; +import org.hibernate.testing.orm.junit.DomainModelScope; +import org.hibernate.testing.orm.junit.SessionFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Assert; -import org.junit.Test; +import org.hibernate.testing.orm.junit.SessionFactory; +import org.hibernate.testing.orm.junit.SessionFactoryScope; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertNull; /** * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) */ @JiraKey(value = "HHH-4439") -public class MixedOverrideTest extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@DomainModel(annotatedClasses = {MixedOverrideEntity.class}) +@SessionFactory +public class MixedOverrideTest { private Integer mixedEntityId = null; private Table mixedTable = null; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {MixedOverrideEntity.class}; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - + @BeforeClassTemplate + public void initData(SessionFactoryScope scope, DomainModelScope dms) { // Revision 1 - em.getTransaction().begin(); - MixedOverrideEntity mixedEntity = new MixedOverrideEntity( "data 1", 1, "data 2" ); - em.persist( mixedEntity ); - em.getTransaction().commit(); - mixedEntityId = mixedEntity.getId(); + scope.inTransaction( em -> { + MixedOverrideEntity mixedEntity = new MixedOverrideEntity( "data 1", 1, "data 2" ); + em.persist( mixedEntity ); + mixedEntityId = mixedEntity.getId(); + } ); - mixedTable = metadata().getEntityBinding( + mixedTable = dms.getDomainModel().getEntityBinding( "org.hibernate.orm.test.envers.integration.superclass.auditoverride.MixedOverrideEntity_AUD" ).getTable(); } @Test public void testAuditedProperty() { - Assert.assertNotNull( mixedTable.getColumn( new Column( "number1" ) ) ); - Assert.assertNotNull( mixedTable.getColumn( new Column( "str2" ) ) ); + assertNotNull( mixedTable.getColumn( new Column( "number1" ) ) ); + assertNotNull( mixedTable.getColumn( new Column( "str2" ) ) ); } @Test public void testNotAuditedProperty() { - Assert.assertNull( mixedTable.getColumn( new Column( "str1" ) ) ); + assertNull( mixedTable.getColumn( new Column( "str1" ) ) ); } @Test - public void testHistoryOfMixedEntity() { - MixedOverrideEntity ver1 = new MixedOverrideEntity( null, 1, mixedEntityId, "data 2" ); - Assert.assertEquals( ver1, getAuditReader().find( MixedOverrideEntity.class, mixedEntityId, 1 ) ); + public void testHistoryOfMixedEntity(SessionFactoryScope scope) { + scope.inSession( em -> { + MixedOverrideEntity ver1 = new MixedOverrideEntity( null, 1, mixedEntityId, "data 2" ); + assertEquals( ver1, AuditReaderFactory.get( em ).find( MixedOverrideEntity.class, mixedEntityId, 1 ) ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditparents/MultipleAuditParentsTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditparents/MultipleAuditParentsTest.java index 81000ebc3142..4e5fa22813a9 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditparents/MultipleAuditParentsTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditparents/MultipleAuditParentsTest.java @@ -4,20 +4,24 @@ */ package org.hibernate.orm.test.envers.integration.superclass.auditparents; -import java.util.Set; -import jakarta.persistence.EntityManager; import jakarta.persistence.MappedSuperclass; - +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.StrIntTestEntity; -import org.hibernate.orm.test.envers.tools.TestTools; import org.hibernate.mapping.Column; -import org.hibernate.mapping.Table; +import org.hibernate.orm.test.envers.entities.StrIntTestEntity; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.DomainModel; +import org.hibernate.testing.orm.junit.DomainModelScope; +import org.hibernate.testing.orm.junit.SessionFactory; +import org.hibernate.testing.orm.junit.SessionFactoryScope; +import org.junit.jupiter.api.Test; -import org.junit.Assert; -import org.junit.Test; +import java.util.Set; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertNull; /** * Tests mapping of child entity that declares all of its ancestors as audited with {@link Audited#auditParents()} property. @@ -25,82 +29,80 @@ * * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) */ -public class MultipleAuditParentsTest extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@DomainModel(annotatedClasses = { + MappedGrandparentEntity.class, + MappedParentEntity.class, + ChildMultipleParentsEntity.class, + StrIntTestEntity.class +}) +@SessionFactory +public class MultipleAuditParentsTest { private long childMultipleId = 1L; private Integer siteMultipleId = null; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { - MappedGrandparentEntity.class, - MappedParentEntity.class, - ChildMultipleParentsEntity.class, - StrIntTestEntity.class - }; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); + @BeforeClassTemplate + public void initData(SessionFactoryScope scope) { // Revision 1 - em.getTransaction().begin(); - StrIntTestEntity siteMultiple = new StrIntTestEntity( "data 1", 1 ); - em.persist( siteMultiple ); - em.persist( - new ChildMultipleParentsEntity( - childMultipleId, - "grandparent 1", - "notAudited 1", - "parent 1", - "child 1", - siteMultiple - ) - ); - em.getTransaction().commit(); - siteMultipleId = siteMultiple.getId(); + scope.inTransaction( em -> { + StrIntTestEntity siteMultiple = new StrIntTestEntity( "data 1", 1 ); + em.persist( siteMultiple ); + em.persist( + new ChildMultipleParentsEntity( + childMultipleId, + "grandparent 1", + "notAudited 1", + "parent 1", + "child 1", + siteMultiple + ) + ); + siteMultipleId = siteMultiple.getId(); + } ); } @Test - public void testCreatedAuditTable() { - Set expectedColumns = TestTools.makeSet( "child", "parent", "relation_id", "grandparent", "id" ); - Set unexpectedColumns = TestTools.makeSet( "notAudited" ); + public void testCreatedAuditTable(DomainModelScope scope) { + final var expectedColumns = Set.of( "child", "parent", "relation_id", "grandparent", "id" ); + final var unexpectedColumns = Set.of( "notAudited" ); - Table table = metadata().getEntityBinding( + final var table = scope.getDomainModel().getEntityBinding( "org.hibernate.orm.test.envers.integration.superclass.auditparents.ChildMultipleParentsEntity_AUD" ).getTable(); for ( String columnName : expectedColumns ) { // Check whether expected column exists. - Assert.assertNotNull( table.getColumn( new Column( columnName ) ) ); + assertNotNull( table.getColumn( new Column( columnName ) ) ); } for ( String columnName : unexpectedColumns ) { // Check whether unexpected column does not exist. - Assert.assertNull( table.getColumn( new Column( columnName ) ) ); + assertNull( table.getColumn( new Column( columnName ) ) ); } } @Test - public void testMultipleAuditParents() { - // expectedMultipleChild.notAudited shall be null, because it is not audited. - ChildMultipleParentsEntity expectedMultipleChild = new ChildMultipleParentsEntity( - childMultipleId, - "grandparent 1", - null, - "parent 1", - "child 1", - new StrIntTestEntity( - "data 1", - 1, - siteMultipleId - ) - ); - ChildMultipleParentsEntity child = getAuditReader().find( - ChildMultipleParentsEntity.class, - childMultipleId, - 1 - ); - Assert.assertEquals( expectedMultipleChild, child ); - Assert.assertEquals( expectedMultipleChild.getRelation().getId(), child.getRelation().getId() ); + public void testMultipleAuditParents(SessionFactoryScope scope) { + scope.inSession( em -> { + // expectedMultipleChild.notAudited shall be null, because it is not audited. + ChildMultipleParentsEntity expectedMultipleChild = new ChildMultipleParentsEntity( + childMultipleId, + "grandparent 1", + null, + "parent 1", + "child 1", + new StrIntTestEntity( + "data 1", + 1, + siteMultipleId + ) + ); + ChildMultipleParentsEntity child = AuditReaderFactory.get( em ).find( + ChildMultipleParentsEntity.class, + childMultipleId, + 1 + ); + assertEquals( expectedMultipleChild, child ); + assertEquals( expectedMultipleChild.getRelation().getId(), child.getRelation().getId() ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditparents/SingleAuditParentsTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditparents/SingleAuditParentsTest.java index df4a23477863..b3985ed0ffe4 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditparents/SingleAuditParentsTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditparents/SingleAuditParentsTest.java @@ -5,19 +5,24 @@ package org.hibernate.orm.test.envers.integration.superclass.auditparents; import java.util.Set; -import jakarta.persistence.EntityManager; import jakarta.persistence.MappedSuperclass; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.entities.StrIntTestEntity; -import org.hibernate.orm.test.envers.tools.TestTools; import org.hibernate.mapping.Column; -import org.hibernate.mapping.Table; +import org.hibernate.orm.test.envers.entities.StrIntTestEntity; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.DomainModel; +import org.hibernate.testing.orm.junit.DomainModelScope; + +import org.hibernate.testing.orm.junit.SessionFactory; +import org.hibernate.testing.orm.junit.SessionFactoryScope; +import org.junit.jupiter.api.Test; -import org.junit.Assert; -import org.junit.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertNull; /** * Tests mapping of child entity that declares one of its ancestors as audited with {@link Audited#auditParents()} property. @@ -25,75 +30,72 @@ * * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) */ -public class SingleAuditParentsTest extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@DomainModel(annotatedClasses = { + MappedGrandparentEntity.class, + MappedParentEntity.class, + ChildSingleParentEntity.class, + StrIntTestEntity.class +}) +@SessionFactory +public class SingleAuditParentsTest { private long childSingleId = 1L; private Integer siteSingleId = null; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { - MappedGrandparentEntity.class, - MappedParentEntity.class, - ChildSingleParentEntity.class, - StrIntTestEntity.class - }; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); + @BeforeClassTemplate + public void initData(SessionFactoryScope scope) { // Revision 1 - em.getTransaction().begin(); - StrIntTestEntity siteSingle = new StrIntTestEntity( "data 1", 1 ); - em.persist( siteSingle ); - em.persist( - new ChildSingleParentEntity( - childSingleId, - "grandparent 1", - "notAudited 1", - "parent 1", - "child 1", - siteSingle - ) - ); - em.getTransaction().commit(); - siteSingleId = siteSingle.getId(); - em.close(); + scope.inTransaction( em -> { + StrIntTestEntity siteSingle = new StrIntTestEntity( "data 1", 1 ); + em.persist( siteSingle ); + em.persist( + new ChildSingleParentEntity( + childSingleId, + "grandparent 1", + "notAudited 1", + "parent 1", + "child 1", + siteSingle + ) + ); + siteSingleId = siteSingle.getId(); + } ); } @Test - public void testCreatedAuditTable() { - Set expectedColumns = TestTools.makeSet( "child", "grandparent", "id" ); - Set unexpectedColumns = TestTools.makeSet( "parent", "relation_id", "notAudited" ); + public void testCreatedAuditTable(DomainModelScope scope) { + final var expectedColumns = Set.of( "child", "grandparent", "id" ); + final var unexpectedColumns = Set.of( "parent", "relation_id", "notAudited" ); - Table table = metadata().getEntityBinding( + final var table = scope.getDomainModel().getEntityBinding( "org.hibernate.orm.test.envers.integration.superclass.auditparents.ChildSingleParentEntity_AUD" ).getTable(); for ( String columnName : expectedColumns ) { // Check whether expected column exists. - Assert.assertNotNull( table.getColumn( new Column( columnName ) ) ); + assertNotNull( table.getColumn( new Column( columnName ) ) ); } for ( String columnName : unexpectedColumns ) { // Check whether unexpected column does not exist. - Assert.assertNull( table.getColumn( new Column( columnName ) ) ); + assertNull( table.getColumn( new Column( columnName ) ) ); } } @Test - public void testSingleAuditParent() { - // expectedSingleChild.parent, expectedSingleChild.relation and expectedSingleChild.notAudited shall be null, because they are not audited. - ChildSingleParentEntity expectedSingleChild = new ChildSingleParentEntity( - childSingleId, - "grandparent 1", - null, - null, - "child 1", - null - ); - ChildSingleParentEntity child = getAuditReader().find( ChildSingleParentEntity.class, childSingleId, 1 ); - Assert.assertEquals( expectedSingleChild, child ); - Assert.assertNull( child.getRelation() ); + public void testSingleAuditParent(SessionFactoryScope scope) { + scope.inSession( em -> { + // expectedSingleChild.parent, expectedSingleChild.relation and expectedSingleChild.notAudited shall be null, because they are not audited. + ChildSingleParentEntity expectedSingleChild = new ChildSingleParentEntity( + childSingleId, + "grandparent 1", + null, + null, + "child 1", + null + ); + ChildSingleParentEntity child = AuditReaderFactory.get( em ).find( ChildSingleParentEntity.class, childSingleId, 1 ); + assertEquals( expectedSingleChild, child ); + assertNull( child.getRelation() ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditparents/TotalAuditParentsTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditparents/TotalAuditParentsTest.java index 0e489d01740a..2292a56317d8 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditparents/TotalAuditParentsTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditparents/TotalAuditParentsTest.java @@ -5,18 +5,23 @@ package org.hibernate.orm.test.envers.integration.superclass.auditparents; import java.util.Set; -import jakarta.persistence.EntityManager; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; import org.hibernate.orm.test.envers.entities.StrIntTestEntity; -import org.hibernate.orm.test.envers.tools.TestTools; import org.hibernate.mapping.Column; -import org.hibernate.mapping.Table; -import org.junit.Assert; -import org.junit.Test; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.DomainModel; +import org.hibernate.testing.orm.junit.DomainModelScope; +import org.hibernate.testing.orm.junit.SessionFactory; +import org.hibernate.testing.orm.junit.SessionFactoryScope; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertNull; /** * Tests mapping of baby entity which declares its parent as audited with {@link Audited#auditParents()} property. @@ -25,47 +30,43 @@ * * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) */ -public class TotalAuditParentsTest extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@DomainModel(annotatedClasses = { + MappedGrandparentEntity.class, + MappedParentEntity.class, + StrIntTestEntity.class, + ChildCompleteEntity.class, + BabyCompleteEntity.class +}) +@SessionFactory +public class TotalAuditParentsTest { private long babyCompleteId = 1L; private Integer siteCompleteId = null; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { - MappedGrandparentEntity.class, - MappedParentEntity.class, - StrIntTestEntity.class, - ChildCompleteEntity.class, - BabyCompleteEntity.class - }; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - // Revision 1 - em.getTransaction().begin(); - StrIntTestEntity siteComplete = new StrIntTestEntity( "data 1", 1 ); - em.persist( siteComplete ); - em.persist( - new BabyCompleteEntity( - babyCompleteId, - "grandparent 1", - "notAudited 1", - "parent 1", - "child 1", - siteComplete, - "baby 1" - ) - ); - em.getTransaction().commit(); - siteCompleteId = siteComplete.getId(); + @BeforeClassTemplate + public void initData(SessionFactoryScope scope) { + scope.inTransaction( session -> { + StrIntTestEntity siteComplete = new StrIntTestEntity( "data 1", 1 ); + session.persist( siteComplete ); + session.persist( + new BabyCompleteEntity( + babyCompleteId, + "grandparent 1", + "notAudited 1", + "parent 1", + "child 1", + siteComplete, + "baby 1" + ) + ); + session.flush(); + siteCompleteId = siteComplete.getId(); + } ); } @Test - public void testCreatedAuditTable() { - Set expectedColumns = TestTools.makeSet( + public void testCreatedAuditTable(DomainModelScope scope) { + final var expectedColumns = Set.of( "baby", "child", "parent", @@ -73,36 +74,38 @@ public void testCreatedAuditTable() { "grandparent", "id" ); - Set unexpectedColumns = TestTools.makeSet( "notAudited" ); + final var unexpectedColumns = Set.of( "notAudited" ); - Table table = metadata().getEntityBinding( + final var table = scope.getDomainModel().getEntityBinding( "org.hibernate.orm.test.envers.integration.superclass.auditparents.BabyCompleteEntity_AUD" ).getTable(); for ( String columnName : expectedColumns ) { // Check whether expected column exists. - Assert.assertNotNull( table.getColumn( new Column( columnName ) ) ); + assertNotNull( table.getColumn( new Column( columnName ) ) ); } for ( String columnName : unexpectedColumns ) { // Check whether unexpected column does not exist. - Assert.assertNull( table.getColumn( new Column( columnName ) ) ); + assertNull( table.getColumn( new Column( columnName ) ) ); } } @Test - public void testCompleteAuditParents() { - // expectedBaby.notAudited shall be null, because it is not audited. - BabyCompleteEntity expectedBaby = new BabyCompleteEntity( - babyCompleteId, - "grandparent 1", - null, - "parent 1", - "child 1", - new StrIntTestEntity( "data 1", 1, siteCompleteId ), - "baby 1" - ); - BabyCompleteEntity baby = getAuditReader().find( BabyCompleteEntity.class, babyCompleteId, 1 ); - Assert.assertEquals( expectedBaby, baby ); - Assert.assertEquals( expectedBaby.getRelation().getId(), baby.getRelation().getId() ); + public void testCompleteAuditParents(SessionFactoryScope scope) { + scope.inSession( em -> { + // expectedBaby.notAudited shall be null, because it is not audited. + BabyCompleteEntity expectedBaby = new BabyCompleteEntity( + babyCompleteId, + "grandparent 1", + null, + "parent 1", + "child 1", + new StrIntTestEntity( "data 1", 1, siteCompleteId ), + "baby 1" + ); + BabyCompleteEntity baby = AuditReaderFactory.get( em ).find( BabyCompleteEntity.class, babyCompleteId, 1 ); + assertEquals( expectedBaby, baby ); + assertEquals( expectedBaby.getRelation().getId(), baby.getRelation().getId() ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditparents/TransitiveAuditParentsTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditparents/TransitiveAuditParentsTest.java index 8f2916969d02..72f2c4d89b74 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditparents/TransitiveAuditParentsTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/superclass/auditparents/TransitiveAuditParentsTest.java @@ -5,17 +5,24 @@ package org.hibernate.orm.test.envers.integration.superclass.auditparents; import java.util.Set; -import jakarta.persistence.EntityManager; import org.hibernate.envers.Audited; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; -import org.hibernate.orm.test.envers.tools.TestTools; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.mapping.Column; import org.hibernate.mapping.Table; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.DomainModel; +import org.hibernate.testing.orm.junit.DomainModelScope; +import org.hibernate.testing.orm.junit.SessionFactoryScope; -import org.junit.Assert; -import org.junit.Test; +import org.hibernate.testing.orm.junit.SessionFactory; +import org.hibernate.testing.orm.junit.SessionFactoryScope; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertNull; /** * Tests mapping of child entity which parent declares one of its ancestors as audited with {@link Audited#auditParents()} @@ -23,69 +30,65 @@ * * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) */ -public class TransitiveAuditParentsTest extends BaseEnversJPAFunctionalTestCase { +@EnversTest +@DomainModel(annotatedClasses = { + MappedGrandparentEntity.class, + TransitiveParentEntity.class, + ImplicitTransitiveChildEntity.class, + ExplicitTransitiveChildEntity.class +}) +@SessionFactory +public class TransitiveAuditParentsTest { private long childImpTransId = 1L; private long childExpTransId = 2L; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { - MappedGrandparentEntity.class, - TransitiveParentEntity.class, - ImplicitTransitiveChildEntity.class, - ExplicitTransitiveChildEntity.class - }; - } - - @Test - @Priority(10) - public void initData() { - EntityManager em = getEntityManager(); - + @BeforeClassTemplate + public void initData(SessionFactoryScope scope) { // Revision 1 - em.getTransaction().begin(); - em.persist( - new ImplicitTransitiveChildEntity( - childImpTransId, - "grandparent 1", - "notAudited 1", - "parent 1", - "child 1" - ) - ); - em.getTransaction().commit(); + scope.inTransaction( em -> { + em.persist( + new ImplicitTransitiveChildEntity( + childImpTransId, + "grandparent 1", + "notAudited 1", + "parent 1", + "child 1" + ) + ); + } ); // Revision 2 - em.getTransaction().begin(); - em.persist( - new ExplicitTransitiveChildEntity( - childExpTransId, - "grandparent 2", - "notAudited 2", - "parent 2", - "child 2" - ) - ); - em.getTransaction().commit(); + scope.inTransaction( em -> { + em.persist( + new ExplicitTransitiveChildEntity( + childExpTransId, + "grandparent 2", + "notAudited 2", + "parent 2", + "child 2" + ) + ); + } ); } @Test - public void testCreatedAuditTables() { - Table explicitTransChildTable = metadata().getEntityBinding( + public void testCreatedAuditTables(DomainModelScope scope) { + final var domainModel = scope.getDomainModel(); + final var explicitTransChildTable = domainModel.getEntityBinding( "org.hibernate.orm.test.envers.integration.superclass.auditparents.ExplicitTransitiveChildEntity_AUD" ).getTable(); checkTableColumns( - TestTools.makeSet( "child", "parent", "grandparent", "id" ), - TestTools.makeSet( "notAudited" ), + Set.of( "child", "parent", "grandparent", "id" ), + Set.of( "notAudited" ), explicitTransChildTable ); - Table implicitTransChildTable = metadata().getEntityBinding( + final var implicitTransChildTable = domainModel.getEntityBinding( "org.hibernate.orm.test.envers.integration.superclass.auditparents.ImplicitTransitiveChildEntity_AUD" ).getTable(); checkTableColumns( - TestTools.makeSet( "child", "parent", "grandparent", "id" ), - TestTools.makeSet( "notAudited" ), + Set.of( "child", "parent", "grandparent", "id" ), + Set.of( "notAudited" ), implicitTransChildTable ); } @@ -93,47 +96,51 @@ public void testCreatedAuditTables() { private void checkTableColumns(Set expectedColumns, Set unexpectedColumns, Table table) { for ( String columnName : expectedColumns ) { // Check whether expected column exists. - Assert.assertNotNull( table.getColumn( new Column( columnName ) ) ); + assertNotNull( table.getColumn( new Column( columnName ) ) ); } for ( String columnName : unexpectedColumns ) { // Check whether unexpected column does not exist. - Assert.assertNull( table.getColumn( new Column( columnName ) ) ); + assertNull( table.getColumn( new Column( columnName ) ) ); } } @Test - public void testImplicitTransitiveAuditParents() { - // expectedChild.notAudited shall be null, because it is not audited. - ImplicitTransitiveChildEntity expectedChild = new ImplicitTransitiveChildEntity( - childImpTransId, - "grandparent 1", - null, - "parent 1", - "child 1" - ); - ImplicitTransitiveChildEntity child = getAuditReader().find( - ImplicitTransitiveChildEntity.class, - childImpTransId, - 1 - ); - Assert.assertEquals( expectedChild, child ); + public void testImplicitTransitiveAuditParents(SessionFactoryScope scope) { + scope.inSession( em -> { + // expectedChild.notAudited shall be null, because it is not audited. + ImplicitTransitiveChildEntity expectedChild = new ImplicitTransitiveChildEntity( + childImpTransId, + "grandparent 1", + null, + "parent 1", + "child 1" + ); + ImplicitTransitiveChildEntity child = AuditReaderFactory.get( em ).find( + ImplicitTransitiveChildEntity.class, + childImpTransId, + 1 + ); + assertEquals( expectedChild, child ); + } ); } @Test - public void testExplicitTransitiveAuditParents() { - // expectedChild.notAudited shall be null, because it is not audited. - ExplicitTransitiveChildEntity expectedChild = new ExplicitTransitiveChildEntity( - childExpTransId, - "grandparent 2", - null, - "parent 2", - "child 2" - ); - ExplicitTransitiveChildEntity child = getAuditReader().find( - ExplicitTransitiveChildEntity.class, - childExpTransId, - 2 - ); - Assert.assertEquals( expectedChild, child ); + public void testExplicitTransitiveAuditParents(SessionFactoryScope scope) { + scope.inSession( em -> { + // expectedChild.notAudited shall be null, because it is not audited. + ExplicitTransitiveChildEntity expectedChild = new ExplicitTransitiveChildEntity( + childExpTransId, + "grandparent 2", + null, + "parent 2", + "child 2" + ); + ExplicitTransitiveChildEntity child = AuditReaderFactory.get( em ).find( + ExplicitTransitiveChildEntity.class, + childExpTransId, + 2 + ); + assertEquals( expectedChild, child ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/tm/SessionFactoryInterceptorTransactionTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/tm/SessionFactoryInterceptorTransactionTest.java new file mode 100644 index 000000000000..871882d30b76 --- /dev/null +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/tm/SessionFactoryInterceptorTransactionTest.java @@ -0,0 +1,73 @@ +/* + * SPDX-License-Identifier: Apache-2.0 + * Copyright Red Hat Inc. and Hibernate Authors + */ +package org.hibernate.orm.test.envers.integration.tm; + +import org.hibernate.FlushMode; +import org.hibernate.Session; +import org.hibernate.cfg.AvailableSettings; +import org.hibernate.orm.test.envers.entities.StrTestEntity; + +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.jta.TestingJtaBootstrap; +import org.hibernate.testing.jta.TestingJtaPlatformImpl; +import org.hibernate.testing.orm.junit.AfterClassTemplate; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; +import org.hibernate.testing.orm.junit.Setting; +import org.hibernate.testing.orm.junit.SettingConfiguration; +import org.junit.jupiter.api.Test; + +import jakarta.transaction.TransactionManager; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +/** + * @author Chris Cranford + */ +@EnversTest +@Jpa( + annotatedClasses = { StrTestEntity.class }, + integrationSettings = { + @Setting(name = AvailableSettings.ALLOW_JTA_TRANSACTION_ACCESS, value = "true"), + @Setting(name = AvailableSettings.INTERCEPTOR, value = "org.hibernate.orm.test.envers.integration.tm.TestInterceptor") + }, + settingConfigurations = { @SettingConfiguration(configurer = TestingJtaBootstrap.class) } +) +public class SessionFactoryInterceptorTransactionTest { + + private TransactionManager tm; + + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) throws Exception { + tm = TestingJtaPlatformImpl.INSTANCE.getTransactionManager(); + // ensure schema is created before manually starting transactions + final var emf = scope.getEntityManagerFactory(); + + // Revision 1 + final var em = emf.createEntityManager(); + // Explicitly use manual flush to trigger separate temporary session write via Envers + em.unwrap( Session.class ).setHibernateFlushMode( FlushMode.MANUAL ); + tm.begin(); + final var entity = new StrTestEntity( "Test" ); + em.persist( entity ); + em.flush(); + tm.commit(); + } + + @AfterClassTemplate + public void cleanupData() { + TestInterceptor.reset(); + } + + @Test + public void testInterceptorInvocations() { + // The interceptor should only be created once and should only be invoked twice + // Once for the original session, and follow-up for the Envers temporary session + final var invocationMap = TestInterceptor.getBeforeCompletionCallbacks(); + assertEquals( 1, invocationMap.size() ); + invocationMap.values().forEach( c -> assertEquals( 2, c.intValue() ) ); + } +} diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/tm/SessionInterceptorTransactionTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/tm/SessionInterceptorTransactionTest.java new file mode 100644 index 000000000000..b3c395f3353b --- /dev/null +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/tm/SessionInterceptorTransactionTest.java @@ -0,0 +1,72 @@ +/* + * SPDX-License-Identifier: Apache-2.0 + * Copyright Red Hat Inc. and Hibernate Authors + */ +package org.hibernate.orm.test.envers.integration.tm; + +import org.hibernate.FlushMode; +import org.hibernate.Session; +import org.hibernate.cfg.AvailableSettings; +import org.hibernate.orm.test.envers.entities.StrTestEntity; + +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.jta.TestingJtaBootstrap; +import org.hibernate.testing.jta.TestingJtaPlatformImpl; +import org.hibernate.testing.orm.junit.AfterClassTemplate; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; +import org.hibernate.testing.orm.junit.Jpa; +import org.hibernate.testing.orm.junit.Setting; +import org.hibernate.testing.orm.junit.SettingConfiguration; +import org.junit.jupiter.api.Test; + +import jakarta.transaction.TransactionManager; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +/** + * @author Chris Cranford + */ +@EnversTest +@Jpa( + annotatedClasses = { StrTestEntity.class }, + integrationSettings = { + @Setting(name = AvailableSettings.SESSION_SCOPED_INTERCEPTOR, value = "org.hibernate.orm.test.envers.integration.tm.TestInterceptor"), + @Setting(name = AvailableSettings.ALLOW_JTA_TRANSACTION_ACCESS, value = "true"), + }, + settingConfigurations = { @SettingConfiguration(configurer = TestingJtaBootstrap.class) } +) +public class SessionInterceptorTransactionTest { + + private TransactionManager tm; + + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) throws Exception { + tm = TestingJtaPlatformImpl.INSTANCE.getTransactionManager(); + // ensure schema is created before manually starting transactions + final var emf = scope.getEntityManagerFactory(); + + // Revision 1 + final var em = emf.createEntityManager(); + // Explicitly use manual flush to trigger separate temporary session write via Envers + em.unwrap( Session.class ).setHibernateFlushMode( FlushMode.MANUAL ); + tm.begin(); + StrTestEntity entity = new StrTestEntity( "Test" ); + em.persist( entity ); + em.flush(); + tm.commit(); + } + + @AfterClassTemplate + public void cleanUp() { + TestInterceptor.reset(); + } + + @Test + public void testInterceptorInvocations() { + // The interceptor should be created one and should only be invoked once + final var invocationMap = TestInterceptor.getBeforeCompletionCallbacks(); + assertEquals( 1, invocationMap.size() ); + invocationMap.values().forEach( c -> assertEquals( 1, c.intValue() ) ); + } +} diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/tm/TestInterceptor.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/tm/TestInterceptor.java similarity index 94% rename from hibernate-envers/src/test/java/org/hibernate/envers/test/integration/tm/TestInterceptor.java rename to hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/tm/TestInterceptor.java index e0e7876d3042..705a20d45f43 100644 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/integration/tm/TestInterceptor.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/tm/TestInterceptor.java @@ -2,7 +2,7 @@ * SPDX-License-Identifier: Apache-2.0 * Copyright Red Hat Inc. and Hibernate Authors */ -package org.hibernate.envers.test.integration.tm; +package org.hibernate.orm.test.envers.integration.tm; import java.util.HashMap; import java.util.Map; diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/tools/OrderSequenceGenerationTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/tools/OrderSequenceGenerationTest.java index b40d2838095d..23ef4a0aff7c 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/tools/OrderSequenceGenerationTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/tools/OrderSequenceGenerationTest.java @@ -6,22 +6,26 @@ import java.io.File; import java.nio.file.Files; -import java.util.Map; - -import jakarta.persistence.EntityManager; import org.hibernate.cfg.AvailableSettings; +import org.hibernate.cfg.Configuration; import org.hibernate.dialect.OracleDialect; -import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase; +import org.hibernate.engine.spi.SessionFactoryImplementor; +import org.hibernate.envers.AuditReaderFactory; +import org.hibernate.envers.configuration.EnversSettings; import org.hibernate.orm.test.envers.entities.StrTestEntity; -import org.hibernate.testing.DialectChecks; -import org.hibernate.testing.RequiresDialectFeature; +import org.hibernate.testing.orm.junit.DialectFeatureChecks; import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Test; +import org.hibernate.testing.orm.junit.RequiresDialectFeature; +import org.hibernate.testing.util.ServiceRegistryUtil; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestInstance; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; /** * Test verifies that the sequence is created properly both for database operations and export @@ -31,69 +35,76 @@ * @author Chris Cranford */ @JiraKey(value = "HHH-11131") -@RequiresDialectFeature( DialectChecks.SupportsSequences.class ) -public class OrderSequenceGenerationTest extends BaseEnversJPAFunctionalTestCase { +@RequiresDialectFeature(feature = DialectFeatureChecks.SupportsSequences.class) +@TestInstance(TestInstance.Lifecycle.PER_CLASS) +public class OrderSequenceGenerationTest { + + private SessionFactoryImplementor sf; private File createSchema; private File dropSchema; + private Integer entityId; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] { StrTestEntity.class }; - } - - @Override - public void buildEntityManagerFactory() throws Exception { + @BeforeAll + public void initData() throws Exception { createSchema = File.createTempFile( "create_schema", ".sql" ); + createSchema.deleteOnExit(); + dropSchema = File.createTempFile( "drop_schema", ".sql" ); - super.buildEntityManagerFactory(); + dropSchema.deleteOnExit(); + + final var cfg = new Configuration(); + cfg.addAnnotatedClass( StrTestEntity.class ); + final var ssrb = cfg.getStandardServiceRegistryBuilder(); + ServiceRegistryUtil.applySettings( ssrb ); + // Configure settings for DDL script generation + ssrb.applySetting( AvailableSettings.JAKARTA_HBM2DDL_SCRIPTS_CREATE_TARGET, createSchema.toPath() ); + ssrb.applySetting( AvailableSettings.JAKARTA_HBM2DDL_SCRIPTS_DROP_TARGET, dropSchema.toPath() ); + ssrb.applySetting( AvailableSettings.JAKARTA_HBM2DDL_SCRIPTS_ACTION, "drop-and-create" ); + ssrb.applySetting( AvailableSettings.JAKARTA_HBM2DDL_DATABASE_ACTION, "create-drop" ); + ssrb.applySetting( AvailableSettings.HBM2DDL_AUTO, "create-drop" ); + // Standard envers test settings + ssrb.applySetting( EnversSettings.USE_REVISION_ENTITY_WITH_NATIVE_ID, "false" ); + ssrb.applySetting( EnversSettings.REVISION_SEQUENCE_NOCACHE, "true" ); + + sf = cfg.buildSessionFactory().unwrap( SessionFactoryImplementor.class ); + + sf.inTransaction( em -> { + StrTestEntity e = new StrTestEntity( "Acme" ); + em.persist( e ); + entityId = e.getId(); + } ); } - @Override - protected void addConfigOptions(Map options) { - super.addConfigOptions( options ); - options.put( AvailableSettings.JAKARTA_HBM2DDL_SCRIPTS_CREATE_TARGET, createSchema.toPath() ); - options.put( AvailableSettings.JAKARTA_HBM2DDL_SCRIPTS_DROP_TARGET, dropSchema.toPath() ); - options.put( AvailableSettings.JAKARTA_HBM2DDL_SCRIPTS_ACTION, "drop-and-create" ); - options.put( AvailableSettings.JAKARTA_HBM2DDL_DATABASE_ACTION, "create-drop" ); - options.put( AvailableSettings.HBM2DDL_AUTO, "create-drop" ); + @AfterAll + public void cleanUp() { + if ( sf != null ) { + sf.close(); + } } @Test public void testCreateSequenceExportScripts() throws Exception { - final String[] createStrings = getDialect().getSequenceSupport().getCreateSequenceStrings( "REVISION_GENERATOR", 1, 1 ); + final var dialect = sf.getJdbcServices().getDialect(); + final String[] createStrings = dialect + .getSequenceSupport() + .getCreateSequenceStrings( "REVISION_GENERATOR", 1, 1 ); final String content = new String( Files.readAllBytes( createSchema.toPath() ) ).toLowerCase(); - for ( int i = 0; i < createStrings.length; ++i ) { - if ( getDialect() instanceof OracleDialect ) { - assertTrue( content.contains( ( createStrings[ i ] + " NOCACHE ORDER" ).toLowerCase() ) ); + for ( final var createString : createStrings ) { + if ( dialect instanceof OracleDialect ) { + assertTrue( content.contains( ( createString + " NOCACHE ORDER" ).toLowerCase() ) ); } else { - assertTrue( content.contains( createStrings[ i ].toLowerCase() ) ); + assertTrue( content.contains( createString.toLowerCase() ) ); } } } @Test - public void testBasicPersistAndAuditFetch() throws Exception { - EntityManager entityManager = getOrCreateEntityManager(); - try { - StrTestEntity e = new StrTestEntity( "Acme" ); - entityManager.getTransaction().begin(); - entityManager.persist( e ); - entityManager.getTransaction().commit(); - entityManager.clear(); - - StrTestEntity rev1 = getAuditReader().find ( StrTestEntity.class, e.getId(), 1 ); - assertEquals( e, rev1 ); - } - catch ( Exception e ) { - if ( entityManager.getTransaction().isActive() ) { - entityManager.getTransaction().rollback(); - } - throw e; - } - finally { - entityManager.close(); - } + public void testBasicPersistAndAuditFetch() { + sf.inSession( session -> { + StrTestEntity rev1 = AuditReaderFactory.get( session ).find( StrTestEntity.class, entityId, 1 ); + assertEquals( new StrTestEntity( "Acme", entityId ), rev1 ); + } ); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/tools/SchemaExportTest.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/tools/SchemaExportTest.java index 9c8a4101a11c..1b63a6eef563 100644 --- a/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/tools/SchemaExportTest.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/tools/SchemaExportTest.java @@ -6,44 +6,43 @@ import java.util.Arrays; -import org.hibernate.Session; -import org.hibernate.orm.test.envers.BaseEnversFunctionalTestCase; -import org.hibernate.orm.test.envers.Priority; +import org.hibernate.envers.AuditReaderFactory; import org.hibernate.orm.test.envers.entities.StrTestEntity; +import org.hibernate.testing.envers.junit.EnversTest; +import org.hibernate.testing.orm.junit.BeforeClassTemplate; +import org.hibernate.testing.orm.junit.EntityManagerFactoryScope; import org.hibernate.testing.orm.junit.JiraKey; -import org.junit.Assert; -import org.junit.Test; +import org.hibernate.testing.orm.junit.Jpa; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com) */ @JiraKey(value = "HHH-7106") -public class SchemaExportTest extends BaseEnversFunctionalTestCase { +@EnversTest +@Jpa(annotatedClasses = {StrTestEntity.class}) +public class SchemaExportTest { private Integer id = null; - @Override - protected Class[] getAnnotatedClasses() { - return new Class[] {StrTestEntity.class}; - } - - @Test - @Priority(10) - public void testSchemaCreation() { + @BeforeClassTemplate + public void initData(EntityManagerFactoryScope scope) { // Populate database with test data. - Session session = getSession(); - session.getTransaction().begin(); - StrTestEntity entity = new StrTestEntity( "data" ); - session.persist( entity ); - session.getTransaction().commit(); - - id = entity.getId(); + scope.inTransaction(em -> { + StrTestEntity entity = new StrTestEntity("data"); + em.persist(entity); + id = entity.getId(); + }); } @Test - @Priority(9) - public void testAuditDataRetrieval() { - Assert.assertEquals( Arrays.asList( 1 ), getAuditReader().getRevisions( StrTestEntity.class, id ) ); - Assert.assertEquals( new StrTestEntity( "data", id ), getAuditReader().find( StrTestEntity.class, id, 1 ) ); + public void testAuditDataRetrieval(EntityManagerFactoryScope scope) { + scope.inEntityManager(em -> { + final var auditReader = AuditReaderFactory.get(em); + assertEquals(Arrays.asList(1), auditReader.getRevisions(StrTestEntity.class, id)); + assertEquals(new StrTestEntity("data", id), auditReader.find(StrTestEntity.class, id, 1)); + }); } } diff --git a/hibernate-envers/src/test/java/org/hibernate/envers/test/stateless/SimpleStatelessSessionTests.java b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/stateless/SimpleStatelessSessionTests.java similarity index 90% rename from hibernate-envers/src/test/java/org/hibernate/envers/test/stateless/SimpleStatelessSessionTests.java rename to hibernate-envers/src/test/java/org/hibernate/orm/test/envers/stateless/SimpleStatelessSessionTests.java index 5cf60f683f82..90fd8d0c6300 100644 --- a/hibernate-envers/src/test/java/org/hibernate/envers/test/stateless/SimpleStatelessSessionTests.java +++ b/hibernate-envers/src/test/java/org/hibernate/orm/test/envers/stateless/SimpleStatelessSessionTests.java @@ -2,7 +2,7 @@ * SPDX-License-Identifier: Apache-2.0 * Copyright Red Hat Inc. and Hibernate Authors */ -package org.hibernate.envers.test.stateless; +package org.hibernate.orm.test.envers.stateless; import jakarta.persistence.Entity; import jakarta.persistence.Id; @@ -42,8 +42,11 @@ void simpleSession(SessionFactoryScope factoryScope) { checkCallbackCounts( 1, 0, 0 ); factoryScope.inTransaction( (session) -> { - final Long count = session.createQuery( "select count(*) from org.hibernate.envers.test.stateless.SimpleStatelessSessionTests$Person_AUD", Long.class ) - .getSingleResult(); + final Long count = session.createQuery( String.format( + "select count(*) from %s_AUD", + SimpleStatelessSessionTests.Person.class.getName() ), + Long.class + ).getSingleResult(); assertThat( count ).isEqualTo( 1 ); } ); @@ -73,8 +76,11 @@ void simpleStatelessSession(SessionFactoryScope factoryScope) { checkCallbackCounts( 1, 0, 0 ); factoryScope.inTransaction( (session) -> { - final Long count = session.createQuery( "select count(*) from org.hibernate.envers.test.stateless.SimpleStatelessSessionTests$Person_AUD", Long.class ) - .getSingleResult(); + final Long count = session.createQuery( String.format( + "select count(*) from %s_AUD", + SimpleStatelessSessionTests.Person.class.getName() ), + Long.class + ).getSingleResult(); assertThat( count ).isEqualTo( 1 ); } ); diff --git a/hibernate-envers/src/test/java/org/hibernate/testing/envers/EnversEntityManagerFactoryScope.java b/hibernate-envers/src/test/java/org/hibernate/testing/envers/EnversEntityManagerFactoryScope.java index 3fabfe983aea..f535cbebf0b2 100644 --- a/hibernate-envers/src/test/java/org/hibernate/testing/envers/EnversEntityManagerFactoryScope.java +++ b/hibernate-envers/src/test/java/org/hibernate/testing/envers/EnversEntityManagerFactoryScope.java @@ -11,6 +11,10 @@ import jakarta.persistence.EntityManager; import jakarta.persistence.EntityManagerFactory; +import org.hibernate.Session; +import org.hibernate.engine.spi.SessionImplementor; +import org.hibernate.envers.boot.internal.EnversService; +import org.hibernate.envers.strategy.spi.AuditStrategy; import org.hibernate.testing.jta.TestingJtaPlatformImpl; /** @@ -222,4 +226,33 @@ public R inJPA(EntityManagerFactory factory, Function acti entityManager.close(); } } + + public static AuditStrategy getAuditStrategy(EntityManager entityManager) { + if ( entityManager.getDelegate() instanceof Session ) { + return getAuditStrategy( (Session) entityManager.getDelegate() ); + } + else if ( entityManager.getDelegate() instanceof EntityManager ) { + return getAuditStrategy( (EntityManager) entityManager.getDelegate() ); + } + else { + throw new IllegalArgumentException( "Could not resolve AuditStrategy" ); + } + } + + public static AuditStrategy getAuditStrategy(Session session) { + SessionImplementor sessionImpl; + if ( !(session instanceof SessionImplementor) ) { + sessionImpl = (SessionImplementor) session.getSessionFactory().getCurrentSession(); + } + else { + sessionImpl = (SessionImplementor) session; + } + final var enversService = sessionImpl.getFactory() + .getServiceRegistry() + .getService( EnversService.class ); + if ( enversService == null ) { + throw new IllegalArgumentException( "EnversService is not available in the provided Session" ); + } + return enversService.getAuditStrategy(); + } } diff --git a/hibernate-envers/src/test/java/org/hibernate/testing/envers/junit/AuditStrategyConditionExtension.java b/hibernate-envers/src/test/java/org/hibernate/testing/envers/junit/AuditStrategyConditionExtension.java new file mode 100644 index 000000000000..78af1e57a0ba --- /dev/null +++ b/hibernate-envers/src/test/java/org/hibernate/testing/envers/junit/AuditStrategyConditionExtension.java @@ -0,0 +1,49 @@ +/* + * SPDX-License-Identifier: Apache-2.0 + * Copyright Red Hat Inc. and Hibernate Authors + */ +package org.hibernate.testing.envers.junit; + +import org.hibernate.envers.strategy.internal.DefaultAuditStrategy; +import org.hibernate.envers.strategy.spi.AuditStrategy; +import org.hibernate.testing.envers.RequiresAuditStrategy; +import org.junit.jupiter.api.extension.ConditionEvaluationResult; +import org.junit.jupiter.api.extension.ExecutionCondition; +import org.junit.jupiter.api.extension.ExtensionContext; +import org.junit.platform.commons.util.AnnotationUtils; + +public record AuditStrategyConditionExtension(String auditStrategyInUse) implements ExecutionCondition { + @Override + public ConditionEvaluationResult evaluateExecutionCondition(ExtensionContext context) { + // get the annotation from the test method or class + var annotation = AnnotationUtils.findAnnotation( context.getElement(), RequiresAuditStrategy.class ); + if ( annotation.isEmpty() ) { + annotation = AnnotationUtils.findAnnotation( context.getTestClass(), RequiresAuditStrategy.class ); + } + + if ( annotation.isEmpty() ) { + return ConditionEvaluationResult.enabled( "No audit strategy requirement" ); + } + + String strategyNameInUse = getStrategySimpleName( auditStrategyInUse ); + + for ( Class strategy : annotation.get().value() ) { + if ( strategy.getSimpleName().equals( strategyNameInUse ) ) { + return ConditionEvaluationResult.enabled( + "Audit strategy " + strategyNameInUse + " is allowed" + ); + } + } + + return ConditionEvaluationResult.disabled( + "Required audit strategy not available: " + strategyNameInUse + ); + } + + private String getStrategySimpleName(String fullName) { + if ( fullName == null ) { + return DefaultAuditStrategy.class.getSimpleName(); + } + return fullName.substring( fullName.lastIndexOf( '.' ) + 1 ); + } +} diff --git a/hibernate-envers/src/test/java/org/hibernate/testing/envers/junit/EnversAuditStrategyExtension.java b/hibernate-envers/src/test/java/org/hibernate/testing/envers/junit/EnversAuditStrategyExtension.java new file mode 100644 index 000000000000..4f4218b15f67 --- /dev/null +++ b/hibernate-envers/src/test/java/org/hibernate/testing/envers/junit/EnversAuditStrategyExtension.java @@ -0,0 +1,111 @@ +/* + * SPDX-License-Identifier: Apache-2.0 + * Copyright Red Hat Inc. and Hibernate Authors + */ +package org.hibernate.testing.envers.junit; + +import org.hibernate.envers.configuration.EnversSettings; +import org.hibernate.envers.strategy.internal.DefaultAuditStrategy; +import org.hibernate.envers.strategy.spi.AuditStrategy; +import org.hibernate.testing.orm.junit.DomainModelExtension; +import org.hibernate.testing.orm.junit.EntityManagerFactoryExtension; +import org.hibernate.testing.orm.junit.Jpa; +import org.hibernate.testing.orm.junit.ServiceRegistryExtension; +import org.hibernate.testing.orm.junit.SessionFactoryExtension; +import org.junit.jupiter.api.extension.ClassTemplateInvocationContext; +import org.junit.jupiter.api.extension.ClassTemplateInvocationContextProvider; +import org.junit.jupiter.api.extension.Extension; +import org.junit.jupiter.api.extension.ExtensionContext; + +import java.lang.reflect.AnnotatedElement; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.stream.Stream; + +import static org.hibernate.internal.util.NullnessUtil.castNonNull; +import static org.junit.platform.commons.support.AnnotationSupport.findAnnotation; + +public class EnversAuditStrategyExtension implements ClassTemplateInvocationContextProvider { + @Override + public boolean supportsClassTemplate(ExtensionContext context) { + return true; + } + + @Override + public Stream provideClassTemplateInvocationContexts(ExtensionContext context) { + // Try to find @AuditStrategies on the test element (method/class) or the test class + EnversTest ann = null; + Optional elementOpt = context.getElement(); + if ( elementOpt.isPresent() ) { + ann = elementOpt.get().getAnnotation( EnversTest.class ); + } + if ( ann == null ) { + Optional> testClassOpt = context.getTestClass(); + if ( testClassOpt.isPresent() ) { + ann = testClassOpt.get().getAnnotation( EnversTest.class ); + } + } + + Class[] strategyClasses = castNonNull( ann ).auditStrategies(); + + List contexts = new ArrayList<>(); + for ( Class cls : strategyClasses ) { + String auditStrategyName = DefaultAuditStrategy.class.equals( cls ) ? null : cls.getName(); + contexts.add( new AuditStrategyInvocationContext( auditStrategyName ) ); + } + + return contexts.stream(); + } + + private record AuditStrategyInvocationContext(String auditStrategy) implements ClassTemplateInvocationContext { + @Override + public String getDisplayName(int invocationIndex) { + String strategyName = auditStrategy != null + ? auditStrategy.substring( auditStrategy.lastIndexOf( '.' ) + 1 ) + : DefaultAuditStrategy.class.getSimpleName(); + return "[" + strategyName + "]"; + } + + @Override + public List getAdditionalExtensions() { + return List.of( new AuditStrategyConditionExtension( auditStrategy ) ); + } + + @Override + public void prepareInvocation(ExtensionContext context) { + final var testInstance = context.getRequiredTestInstance(); + final Map settings; + // release the existing EMF/SF so that a new one is built with the proper audit strategy + final var emScope = EntityManagerFactoryExtension.findEntityManagerFactoryScope( + testInstance, + findAnnotation( context.getRequiredTestClass(), Jpa.class ), + context + ); + if ( emScope != null ) { + settings = EntityManagerFactoryExtension.getIntegrationSettings( testInstance, context ); + emScope.releaseEntityManagerFactory(); + } + else { + final var sfScope = SessionFactoryExtension.findSessionFactoryScope( + testInstance, + context + ); + sfScope.releaseSessionFactory(); + final var domainModelScope = DomainModelExtension.findDomainModelScope( testInstance, context ); + domainModelScope.releaseModel(); + final var registryScope = ServiceRegistryExtension.findServiceRegistryScope( testInstance, context ); + registryScope.releaseRegistry(); + settings = registryScope.getAdditionalSettings(); + } + // integrate settings with envers-specific configuration + if ( auditStrategy != null ) { + settings.put( EnversSettings.AUDIT_STRATEGY, auditStrategy ); + } + settings.putIfAbsent( EnversSettings.USE_REVISION_ENTITY_WITH_NATIVE_ID, "false" ); + // Envers tests expect sequences to not skip values... + settings.putIfAbsent( EnversSettings.REVISION_SEQUENCE_NOCACHE, "true" ); + } + } +} diff --git a/hibernate-envers/src/test/java/org/hibernate/testing/envers/junit/EnversTest.java b/hibernate-envers/src/test/java/org/hibernate/testing/envers/junit/EnversTest.java new file mode 100644 index 000000000000..b252719d53ab --- /dev/null +++ b/hibernate-envers/src/test/java/org/hibernate/testing/envers/junit/EnversTest.java @@ -0,0 +1,46 @@ +/* + * SPDX-License-Identifier: Apache-2.0 + * Copyright Red Hat Inc. and Hibernate Authors + */ +package org.hibernate.testing.envers.junit; + +import org.hibernate.envers.strategy.internal.DefaultAuditStrategy; +import org.hibernate.envers.strategy.internal.ValidityAuditStrategy; +import org.hibernate.envers.strategy.spi.AuditStrategy; +import org.hibernate.testing.orm.junit.ClassTemplateInvocationListenersExtension; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.ClassTemplate; +import org.junit.jupiter.api.extension.ExtendWith; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Inherited; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * Use in the Hibernate Envers test suite to run tests via JUnit's APIs. + * Use in conjunction with the {@link org.hibernate.testing.orm.junit.Jpa} + * annotation to bootstrap the JPA environment. + *

    + * Note since this is taking advantage of {@link ClassTemplate} to run all + * tests with different {@link AuditStrategy audit strategies}, the test class + * must not use {@link BeforeAll} or {@link AfterAll} methods to set up / tear-down + * test data, as they will only be run once for all class template invocations. + * Instead, use {@link org.hibernate.testing.orm.junit.BeforeClassTemplate} + * and {@link org.hibernate.testing.orm.junit.AfterClassTemplate} to have + * methods called before and after each invocation. + */ +@Inherited +@Target({ElementType.TYPE, ElementType.METHOD}) +@Retention(RetentionPolicy.RUNTIME) +@ClassTemplate +@ExtendWith(EnversAuditStrategyExtension.class) +@ExtendWith(ClassTemplateInvocationListenersExtension.class) +public @interface EnversTest { + Class[] auditStrategies() default { + DefaultAuditStrategy.class, + ValidityAuditStrategy.class + }; +} diff --git a/hibernate-envers/src/test/resources/hibernate.properties b/hibernate-envers/src/test/resources/hibernate.properties index 0b61b5cd7ea2..bbb68aa7e4a2 100644 --- a/hibernate-envers/src/test/resources/hibernate.properties +++ b/hibernate-envers/src/test/resources/hibernate.properties @@ -14,7 +14,9 @@ hibernate.connection.initial_pool_size 0 hibernate.connection.pool_size 5 -hibernate.show_sql false +hibernate.show_sql true +hibernate.format_sql true +hibernate.highlight_sql true hibernate.max_fetch_depth 5 diff --git a/hibernate-envers/src/test/resources/log4j2.properties b/hibernate-envers/src/test/resources/log4j2.properties index 7f5f9334c4e0..eb1c7a525fd9 100644 --- a/hibernate-envers/src/test/resources/log4j2.properties +++ b/hibernate-envers/src/test/resources/log4j2.properties @@ -19,12 +19,12 @@ logger.test.name=org.hibernate.test logger.test.level=info # SQL Logging - HHH-6833 -logger.sql.name=org.hibernate.SQL -logger.sql.level=debug - -logger.hbm2ddl.name=org.hibernate.tool.hbm2ddl -logger.hbm2ddl.level=trace -logger.hbm2ddl.appenderRef.stdout.ref=DDL +#logger.sql.name=org.hibernate.SQL +#logger.sql.level=debug +# +#logger.hbm2ddl.name=org.hibernate.tool.hbm2ddl +#logger.hbm2ddl.level=trace +#logger.hbm2ddl.appenderRef.stdout.ref=DDL logger.type-basic-binder.name=org.hibernate.type.descriptor.jdbc.BasicBinder logger.type-basic-binder.level=trace diff --git a/hibernate-envers/src/test/resources/mappings/customType/mappings.hbm.xml b/hibernate-envers/src/test/resources/mappings/customType/mappings.hbm.xml index 6bfc18a274e0..9c885a2e4910 100644 --- a/hibernate-envers/src/test/resources/mappings/customType/mappings.hbm.xml +++ b/hibernate-envers/src/test/resources/mappings/customType/mappings.hbm.xml @@ -10,14 +10,14 @@ - + org.hibernate.orm.test.envers.entities.customtype.UnspecifiedEnumTypeEntity$E1 - + org.hibernate.orm.test.envers.entities.customtype.UnspecifiedEnumTypeEntity$E2 diff --git a/hibernate-testing/src/main/java/org/hibernate/testing/bytecode/enhancement/extension/engine/BytecodeEnhancedTestEngine.java b/hibernate-testing/src/main/java/org/hibernate/testing/bytecode/enhancement/extension/engine/BytecodeEnhancedTestEngine.java index 6caaf1395c0a..be6692912152 100644 --- a/hibernate-testing/src/main/java/org/hibernate/testing/bytecode/enhancement/extension/engine/BytecodeEnhancedTestEngine.java +++ b/hibernate-testing/src/main/java/org/hibernate/testing/bytecode/enhancement/extension/engine/BytecodeEnhancedTestEngine.java @@ -40,6 +40,7 @@ import org.junit.jupiter.engine.JupiterTestEngine; import org.junit.jupiter.engine.config.JupiterConfiguration; import org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor; +import org.junit.jupiter.engine.descriptor.ClassTemplateTestDescriptor; import org.junit.jupiter.engine.descriptor.ClassTestDescriptor; import org.junit.jupiter.engine.descriptor.JupiterEngineDescriptor; import org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor; @@ -176,17 +177,28 @@ private void replaceWithEnhanced(Class enhanced, ClassBasedTestDescriptor des throws NoSuchMethodException { DelegatingJupiterConfiguration configuration = new DelegatingJupiterConfiguration( jc, enhancementContextId ); - ClassTestDescriptor updated = new ClassTestDescriptor( + final ClassTestDescriptor updatedClassDescriptor = new ClassTestDescriptor( convertUniqueId( descriptor.getUniqueId(), enhancementContextId ), enhanced, configuration ); + final ClassBasedTestDescriptor updated; + if ( descriptor instanceof ClassTemplateTestDescriptor ) { + updated = new ClassTemplateTestDescriptor( + convertUniqueId( descriptor.getUniqueId(), enhancementContextId ), + updatedClassDescriptor + ); + } + else { + updated = updatedClassDescriptor; + } + for ( TestDescriptor child : children ) { // this needs more cases for parameterized tests, test templates and so on ... // for now it'll only work with simple @Test tests - if ( child instanceof TestMethodTestDescriptor ) { - Method testMethod = ( (TestMethodTestDescriptor) child ).getTestMethod(); + if ( child instanceof TestMethodTestDescriptor testMethodDescriptor ) { + Method testMethod = testMethodDescriptor.getTestMethod(); updated.addChild( new TestMethodTestDescriptor( convertUniqueId( child.getUniqueId(), enhancementContextId ), @@ -198,8 +210,8 @@ private void replaceWithEnhanced(Class enhanced, ClassBasedTestDescriptor des ); } - if ( child instanceof TestTemplateTestDescriptor ) { - Method testMethod = ( (TestTemplateTestDescriptor) child ).getTestMethod(); + if ( child instanceof TestTemplateTestDescriptor testTemplateDescriptor ) { + Method testMethod = testTemplateDescriptor.getTestMethod(); updated.addChild( new TestTemplateTestDescriptor( convertUniqueId( child.getUniqueId(), enhancementContextId ), updated.getTestClass(), @@ -225,7 +237,7 @@ private UniqueId convertUniqueId(UniqueId id, Object enhancementContextId) { return uniqueId; } - private Method findMethodReplacement(ClassTestDescriptor updated, Method testMethod) throws NoSuchMethodException { + private Method findMethodReplacement(ClassBasedTestDescriptor updated, Method testMethod) throws NoSuchMethodException { String name = testMethod.getDeclaringClass().getName(); Class testClass = updated.getTestClass(); diff --git a/hibernate-testing/src/main/java/org/hibernate/testing/jta/TestingJtaBootstrap.java b/hibernate-testing/src/main/java/org/hibernate/testing/jta/TestingJtaBootstrap.java index e107db7a1f97..bc8d1c74dc40 100644 --- a/hibernate-testing/src/main/java/org/hibernate/testing/jta/TestingJtaBootstrap.java +++ b/hibernate-testing/src/main/java/org/hibernate/testing/jta/TestingJtaBootstrap.java @@ -21,6 +21,7 @@ public final class TestingJtaBootstrap implements SettingConfiguration.Configure public static final TestingJtaBootstrap INSTANCE = new TestingJtaBootstrap(); public static void prepare(Map configValues) { + configValues.put( TRANSACTION_COORDINATOR_STRATEGY, "jta" ); configValues.put( AvailableSettings.JTA_PLATFORM, TestingJtaPlatformImpl.INSTANCE ); configValues.put( AvailableSettings.CONNECTION_PROVIDER, JtaAwareConnectionProviderImpl.class.getName() ); configValues.put( @@ -52,7 +53,11 @@ public TestingJtaBootstrap() { @Override public void applySettings(StandardServiceRegistryBuilder registryBuilder) { - registryBuilder.applySetting( TRANSACTION_COORDINATOR_STRATEGY, "jta" ); prepare( registryBuilder ); } + + @Override + public void applySettings(Map configValues) { + prepare( configValues ); + } } diff --git a/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/AbstractEntityManagerFactoryScope.java b/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/AbstractEntityManagerFactoryScope.java index 1cb29e89157b..9399d22ca6bb 100644 --- a/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/AbstractEntityManagerFactoryScope.java +++ b/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/AbstractEntityManagerFactoryScope.java @@ -70,6 +70,7 @@ public void close() { releaseEntityManagerFactory(); } + @Override public void releaseEntityManagerFactory() { if ( emf != null ) { log.debug( "Releasing SessionFactory" ); diff --git a/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/DomainModelExtension.java b/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/DomainModelExtension.java index 634847d3495d..b27c498003bb 100644 --- a/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/DomainModelExtension.java +++ b/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/DomainModelExtension.java @@ -332,7 +332,7 @@ public DomainModelScopeImpl( this.serviceRegistryScope = serviceRegistryScope; this.producer = producer; - this.model = createDomainModel(); + model = createDomainModel(); } private MetadataImplementor createDomainModel() { @@ -366,6 +366,7 @@ public void close() { releaseModel(); } + @Override public void releaseModel() { model = null; } diff --git a/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/DomainModelScope.java b/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/DomainModelScope.java index 5630deb3853d..fed37ad6d759 100644 --- a/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/DomainModelScope.java +++ b/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/DomainModelScope.java @@ -16,6 +16,7 @@ */ public interface DomainModelScope { MetadataImplementor getDomainModel(); + void releaseModel(); default void visitHierarchies(Consumer action) { getDomainModel().getEntityBindings().forEach( diff --git a/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/EntityManagerFactoryExtension.java b/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/EntityManagerFactoryExtension.java index 16c28c6ad797..9fa73de56052 100644 --- a/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/EntityManagerFactoryExtension.java +++ b/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/EntityManagerFactoryExtension.java @@ -51,6 +51,7 @@ public class EntityManagerFactoryExtension private static final Logger log = Logger.getLogger( EntityManagerFactoryExtension.class ); private static final String EMF_KEY = EntityManagerFactoryScope.class.getName(); + private static final String INTEGRATION_SETTINGS_KEY = EntityManagerFactoryScope.class.getName() + "#INTEGRATION_SETTINGS"; private static ExtensionContext.Store locateExtensionStore(Object testScope, ExtensionContext context) { return JUnitHelper.locateExtensionStore( EntityManagerFactoryExtension.class, context, testScope ); @@ -58,7 +59,6 @@ private static ExtensionContext.Store locateExtensionStore(Object testScope, Ext public static EntityManagerFactoryScope findEntityManagerFactoryScope( Object testScope, Optional optionalJpa, ExtensionContext context) { - if ( optionalJpa.isEmpty() ) { // No annotation on the test class, should be on the test methods return null; @@ -79,6 +79,8 @@ public static EntityManagerFactoryScope findEntityManagerFactoryScope( collectProperties( pui, jpa ); managedClassesAndMappings( jpa, pui ); final Map integrationSettings = collectIntegrationSettings( jpa ); + // Make the integration settings available in the store for other extensions + store.put( INTEGRATION_SETTINGS_KEY, integrationSettings ); // statement inspector setupStatementInspector( jpa, integrationSettings ); ServiceRegistryUtil.applySettings( integrationSettings ); @@ -88,6 +90,12 @@ public static EntityManagerFactoryScope findEntityManagerFactoryScope( return scope; } + public static Map getIntegrationSettings(Object testScope, ExtensionContext context) { + final ExtensionContext.Store store = locateExtensionStore( testScope, context ); + //noinspection unchecked + return (Map) store.get( INTEGRATION_SETTINGS_KEY, Map.class ); + } + private static void collectProperties(PersistenceUnitInfoImpl pui, Jpa jpa) { final Properties properties = pui.getProperties(); properties.putAll( Environment.getProperties() ); @@ -176,6 +184,17 @@ private static Map collectIntegrationSettings(Jpa jpa) { log.error( "Error obtaining setting provider for " + providerImpl.getName(), e ); } } + for ( SettingConfiguration settingConfiguration : jpa.settingConfigurations() ) { + try { + final SettingConfiguration.Configurer configurer = settingConfiguration.configurer() + .getDeclaredConstructor().newInstance(); + configurer.applySettings( integrationSettings ); + } + catch (InstantiationException | IllegalAccessException | InvocationTargetException | + NoSuchMethodException e) { + throw new RuntimeException( e ); + } + } return integrationSettings; } diff --git a/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/Jpa.java b/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/Jpa.java index c8681ce2864c..dda723686c5f 100644 --- a/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/Jpa.java +++ b/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/Jpa.java @@ -54,6 +54,8 @@ SettingProvider[] settingProviders() default {}; + SettingConfiguration[] settingConfigurations() default {}; + boolean generateStatistics() default false; boolean exportSchema() default true; diff --git a/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/ServiceRegistryExtension.java b/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/ServiceRegistryExtension.java index 02c846731751..181c2aeba343 100644 --- a/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/ServiceRegistryExtension.java +++ b/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/ServiceRegistryExtension.java @@ -4,12 +4,6 @@ */ package org.hibernate.testing.orm.junit; -import java.lang.reflect.Constructor; -import java.lang.reflect.InvocationTargetException; -import java.util.ArrayList; -import java.util.List; -import java.util.Optional; - import org.hibernate.boot.registry.BootstrapServiceRegistryBuilder; import org.hibernate.boot.registry.StandardServiceInitiator; import org.hibernate.boot.registry.StandardServiceRegistry; @@ -20,18 +14,24 @@ import org.hibernate.query.sqm.mutation.internal.temptable.LocalTemporaryTableMutationStrategy; import org.hibernate.query.sqm.mutation.internal.temptable.PersistentTableStrategy; import org.hibernate.service.spi.ServiceContributor; - import org.hibernate.testing.boot.ExtraJavaServicesClassLoaderService; import org.hibernate.testing.boot.ExtraJavaServicesClassLoaderService.JavaServiceDescriptor; import org.hibernate.testing.jdbc.SQLStatementInspector; import org.hibernate.testing.util.ServiceRegistryUtil; +import org.jboss.logging.Logger; import org.junit.jupiter.api.extension.BeforeEachCallback; import org.junit.jupiter.api.extension.ExtensionContext; import org.junit.jupiter.api.extension.TestExecutionExceptionHandler; import org.junit.jupiter.api.extension.TestInstancePostProcessor; import org.junit.platform.commons.support.AnnotationSupport; -import org.jboss.logging.Logger; +import java.lang.reflect.Constructor; +import java.lang.reflect.InvocationTargetException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Optional; /** * JUnit extension used to manage the StandardServiceRegistry used by a test including @@ -43,6 +43,7 @@ public class ServiceRegistryExtension implements TestInstancePostProcessor, BeforeEachCallback, TestExecutionExceptionHandler { private static final Logger log = Logger.getLogger( ServiceRegistryExtension.class ); private static final String REGISTRY_KEY = ServiceRegistryScope.class.getName(); + private static final String ADDITIONAL_SETTINGS_KEY = ServiceRegistryExtension.class.getName() + "#ADDITIONAL_SETTINGS"; @Override public void postProcessTestInstance(Object testInstance, ExtensionContext context) { @@ -341,8 +342,9 @@ public void handleTestExecutionException(ExtensionContext context, Throwable thr } private static class ServiceRegistryScopeImpl implements ServiceRegistryScope, AutoCloseable { - private BootstrapServiceRegistryProducer bsrProducer; - private ServiceRegistryProducer ssrProducer; + private final BootstrapServiceRegistryProducer bsrProducer; + private final ServiceRegistryProducer ssrProducer; + private Map additionalSettings; private StandardServiceRegistry registry; private boolean active = true; @@ -355,7 +357,7 @@ public ServiceRegistryScopeImpl(BootstrapServiceRegistryProducer bsrProducer, Se private StandardServiceRegistry createRegistry() { BootstrapServiceRegistryBuilder bsrb = new BootstrapServiceRegistryBuilder().enableAutoClose(); bsrb.applyClassLoader( Thread.currentThread().getContextClassLoader() ); - ssrProducer.prepareBootstrapRegistryBuilder(bsrb); + ssrProducer.prepareBootstrapRegistryBuilder( bsrb ); final org.hibernate.boot.registry.BootstrapServiceRegistry bsr = bsrProducer.produceServiceRegistry( bsrb ); try { @@ -363,6 +365,10 @@ private StandardServiceRegistry createRegistry() { // we will close it ourselves explicitly. ssrb.disableAutoClose(); + if ( additionalSettings != null ) { + ssrb.applySettings( additionalSettings ); + } + return registry = ssrProducer.produceServiceRegistry( ssrb ); } catch (Throwable t) { @@ -390,7 +396,7 @@ public StandardServiceRegistry getRegistry() { @Override public void close() { - if ( ! active ) { + if ( !active ) { return; } @@ -404,7 +410,8 @@ public void close() { } } - private void releaseRegistry() { + @Override + public void releaseRegistry() { if ( registry == null ) { return; } @@ -418,7 +425,14 @@ private void releaseRegistry() { } finally { registry = null; + additionalSettings = null; } } + + @Override + public Map getAdditionalSettings() { + final Map s; + return (s = additionalSettings) == null ? (additionalSettings = new HashMap<>()) : s; + } } } diff --git a/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/ServiceRegistryScope.java b/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/ServiceRegistryScope.java index 90caaaa14fc2..41f1c51f2e61 100644 --- a/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/ServiceRegistryScope.java +++ b/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/ServiceRegistryScope.java @@ -4,6 +4,7 @@ */ package org.hibernate.testing.orm.junit; +import java.util.Map; import java.util.function.Consumer; import java.util.function.Function; import java.util.function.Supplier; @@ -23,12 +24,24 @@ public interface ServiceRegistryScope { */ static void using(Supplier ssrProducer, Consumer action) { try (final StandardServiceRegistry ssr = ssrProducer.get()) { - action.accept( () -> ssr ); + action.accept( new ServiceRegistryScope() { + @Override + public StandardServiceRegistry getRegistry() { + return ssr; + } + + @Override + public void releaseRegistry() { + ssr.close(); + } + } ); } } StandardServiceRegistry getRegistry(); + void releaseRegistry(); + default void withService(Class role, Consumer action) { assert role != null; @@ -63,4 +76,7 @@ default HibernatePersistenceConfiguration createPersistenceConfiguration(String return configuration; } + default Map getAdditionalSettings() { + throw new UnsupportedOperationException( "This service registry scope doesn't support additional settings." ); + } } diff --git a/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/SessionFactoryExtension.java b/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/SessionFactoryExtension.java index d985538590c5..5c7a51c971e6 100644 --- a/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/SessionFactoryExtension.java +++ b/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/SessionFactoryExtension.java @@ -287,6 +287,7 @@ public void close() { releaseSessionFactory(); } + @Override public void releaseSessionFactory() { if ( sessionFactory != null ) { log.debug( "Releasing SessionFactory" ); diff --git a/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/SessionFactoryScope.java b/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/SessionFactoryScope.java index bc6030422b8f..7443b044d1a1 100644 --- a/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/SessionFactoryScope.java +++ b/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/SessionFactoryScope.java @@ -24,6 +24,7 @@ public interface SessionFactoryScope { StatementInspector getStatementInspector(); T getStatementInspector(Class type); SQLStatementInspector getCollectingStatementInspector(); + void releaseSessionFactory(); default void withSessionFactory(Consumer action) { action.accept( getSessionFactory() ); diff --git a/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/SettingConfiguration.java b/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/SettingConfiguration.java index 7dd4e4866140..efd785fe6172 100644 --- a/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/SettingConfiguration.java +++ b/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/SettingConfiguration.java @@ -4,6 +4,9 @@ */ package org.hibernate.testing.orm.junit; +import java.util.HashMap; +import java.util.Map; + import org.hibernate.boot.registry.StandardServiceRegistryBuilder; /** @@ -15,6 +18,12 @@ Class configurer(); interface Configurer { - void applySettings(StandardServiceRegistryBuilder registryBuilder); + default void applySettings(StandardServiceRegistryBuilder registryBuilder) { + final Map temp = new HashMap<>(); + applySettings( temp ); + registryBuilder.applySettings( temp ); + } + + default void applySettings(Map configValues) {} } }