Skip to content

Commit ac8159c

Browse files
mbelladesebersole
authored andcommitted
HHH-19258 Add test for issue
1 parent e037587 commit ac8159c

File tree

3 files changed

+91
-57
lines changed

3 files changed

+91
-57
lines changed

hibernate-envers/src/test/java/org/hibernate/orm/test/envers/JpaStaticMetamodelTest.java

Lines changed: 0 additions & 31 deletions
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
/*
2+
* SPDX-License-Identifier: Apache-2.0
3+
* Copyright Red Hat Inc. and Hibernate Authors
4+
*/
5+
package org.hibernate.orm.test.envers.integration.metamodel;
6+
7+
import jakarta.persistence.Entity;
8+
import org.hibernate.envers.RevisionEntity;
9+
import org.hibernate.envers.RevisionMapping;
10+
11+
@Entity(name = "CustomRevisionEntity")
12+
@RevisionEntity
13+
class CustomRevisionEntity extends RevisionMapping {
14+
private String username;
15+
16+
public String getUsername() {
17+
return username;
18+
}
19+
20+
public void setUsername(String username) {
21+
this.username = username;
22+
}
23+
}

hibernate-envers/src/test/java/org/hibernate/orm/test/envers/integration/metamodel/RevisionEntitiesMetamodelTest.java

Lines changed: 68 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,21 @@
1212
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
1313
import org.hibernate.engine.spi.SessionFactoryImplementor;
1414
import org.hibernate.envers.Audited;
15+
import org.hibernate.envers.RevisionMapping_;
16+
import org.hibernate.envers.TrackingModifiedEntitiesRevisionMapping_;
1517
import org.hibernate.envers.configuration.EnversSettings;
18+
import org.hibernate.envers.enhanced.SequenceIdRevisionMapping_;
19+
import org.hibernate.envers.enhanced.SequenceIdTrackingModifiedEntitiesRevisionMapping_;
1620
import org.hibernate.internal.CoreMessageLogger;
1721
import org.hibernate.metamodel.internal.MetadataContext;
1822
import org.hibernate.testing.logger.LogInspectionHelper;
1923
import org.hibernate.testing.logger.TriggerOnPrefixLogListener;
2024
import org.hibernate.testing.orm.junit.Jira;
2125
import org.hibernate.testing.util.ServiceRegistryUtil;
2226
import org.jboss.logging.Logger;
27+
import org.junit.jupiter.api.AfterAll;
2328
import org.junit.jupiter.api.BeforeAll;
29+
import org.junit.jupiter.api.BeforeEach;
2430
import org.junit.jupiter.api.Test;
2531
import org.junit.jupiter.api.TestInstance;
2632

@@ -32,76 +38,112 @@
3238
/**
3339
* @author Marco Belladelli
3440
*/
35-
@Jira( "https://hibernate.atlassian.net/browse/HHH-17612" )
36-
@TestInstance( TestInstance.Lifecycle.PER_CLASS )
41+
@Jira("https://hibernate.atlassian.net/browse/HHH-17612")
42+
@Jira("https://hibernate.atlassian.net/browse/HHH-19258")
43+
@Jira("https://hibernate.atlassian.net/browse/HHH-10068")
44+
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
3745
public class RevisionEntitiesMetamodelTest {
38-
private TriggerOnPrefixLogListener trigger;
46+
private CoreMessageLogger logger;
47+
private TriggerOnPrefixLogListener t1;
48+
private TriggerOnPrefixLogListener t2;
3949

4050
@BeforeAll
4151
public void setUp() {
42-
trigger = new TriggerOnPrefixLogListener( "HHH015007: Illegal argument on static metamodel field injection" );
43-
LogInspectionHelper.registerListener(
44-
trigger,
45-
Logger.getMessageLogger(
46-
MethodHandles.lookup(),
47-
CoreMessageLogger.class,
48-
MetadataContext.class.getName()
49-
)
52+
logger = Logger.getMessageLogger(
53+
MethodHandles.lookup(),
54+
CoreMessageLogger.class,
55+
MetadataContext.class.getName()
5056
);
57+
// HHH-17612 - Injecting the class_ type field fails
58+
t1 = new TriggerOnPrefixLogListener( "HHH015007: Illegal argument on static metamodel field injection" );
59+
LogInspectionHelper.registerListener( t1, logger );
60+
// HHH-19259 - Injecting the actual attributes fails
61+
t2 = new TriggerOnPrefixLogListener( "HHH015011: Unable to locate static metamodel field" );
62+
LogInspectionHelper.registerListener( t2, logger );
63+
}
64+
65+
@BeforeEach
66+
public void clear() {
67+
t1.reset();
68+
t2.reset();
69+
}
70+
71+
@AfterAll
72+
public void tearDown() {
73+
LogInspectionHelper.clearAllListeners( logger );
5174
}
5275

5376
@Test
5477
public void testDefaultRevisionEntity() {
55-
try (final SessionFactoryImplementor ignored = buildSessionFactory( false, true )) {
56-
assertThat( trigger.wasTriggered() ).isFalse();
78+
try (final SessionFactoryImplementor ignored = buildSessionFactory( false, true, Customer.class )) {
79+
assertListeners();
80+
assertThat( RevisionMapping_.class ).isNotNull();
5781
}
5882
}
5983

6084
@Test
6185
public void testSequenceIdRevisionEntity() {
62-
try (final SessionFactoryImplementor ignored = buildSessionFactory( false, false )) {
63-
assertThat( trigger.wasTriggered() ).isFalse();
86+
try (final SessionFactoryImplementor ignored = buildSessionFactory( false, false, Customer.class )) {
87+
assertListeners();
88+
assertThat( SequenceIdRevisionMapping_.class ).isNotNull();
6489
}
6590
}
6691

6792
@Test
6893
public void testDefaultTrackingModifiedEntitiesRevisionEntity() {
69-
try (final SessionFactoryImplementor ignored = buildSessionFactory( true, true )) {
70-
assertThat( trigger.wasTriggered() ).isFalse();
94+
try (final SessionFactoryImplementor ignored = buildSessionFactory( true, true, Customer.class )) {
95+
assertListeners();
96+
assertThat( TrackingModifiedEntitiesRevisionMapping_.class ).isNotNull();
7197
}
7298
}
7399

74100
@Test
75101
public void testSequenceIdTrackingModifiedEntitiesRevisionEntity() {
76-
try (final SessionFactoryImplementor ignored = buildSessionFactory( true, false )) {
77-
assertThat( trigger.wasTriggered() ).isFalse();
102+
try (final SessionFactoryImplementor ignored = buildSessionFactory( true, false, Customer.class )) {
103+
assertListeners();
104+
assertListeners();
105+
assertThat( SequenceIdTrackingModifiedEntitiesRevisionMapping_.class ).isNotNull().isNotNull();
106+
}
107+
}
108+
109+
@Test
110+
public void testCustomRevisionEntity() {
111+
try (final SessionFactoryImplementor ignored = buildSessionFactory( false, true, Customer.class,
112+
CustomRevisionEntity.class )) {
113+
assertListeners();
114+
assertThat( CustomRevisionEntity_.class ).isNotNull();
78115
}
79116
}
80117

81-
@SuppressWarnings( "resource" )
82-
private static SessionFactoryImplementor buildSessionFactory(boolean trackEntities, boolean nativeId) {
118+
@SuppressWarnings("resource")
119+
private static SessionFactoryImplementor buildSessionFactory(boolean trackEntities, boolean nativeId, Class<?>... classes) {
83120
final StandardServiceRegistryBuilder registryBuilder = ServiceRegistryUtil.serviceRegistryBuilder();
84121
registryBuilder.applySetting( EnversSettings.TRACK_ENTITIES_CHANGED_IN_REVISION, trackEntities );
85122
registryBuilder.applySetting( EnversSettings.USE_REVISION_ENTITY_WITH_NATIVE_ID, nativeId );
86123
return new MetadataSources( registryBuilder.build() )
87-
.addAnnotatedClasses( Customer.class )
124+
.addAnnotatedClasses( classes )
88125
.buildMetadata()
89126
.buildSessionFactory()
90127
.unwrap( SessionFactoryImplementor.class );
91128
}
92129

130+
private void assertListeners() {
131+
assertThat( t1.wasTriggered() ).as( "HHH015007 was triggered" ).isFalse();
132+
assertThat( t2.wasTriggered() ).as( "HHH015011 was triggered" ).isFalse();
133+
}
134+
93135
@Audited
94-
@Entity( name = "Customer" )
95-
@SuppressWarnings( "unused" )
96-
public static class Customer {
136+
@Entity(name = "Customer")
137+
@SuppressWarnings("unused")
138+
static class Customer {
97139
@Id
98140
private Long id;
99141

100142
private String firstName;
101143

102144
private String lastName;
103145

104-
@Column( name = "created_on" )
146+
@Column(name = "created_on")
105147
@CreationTimestamp
106148
private Instant createdOn;
107149
}

0 commit comments

Comments
 (0)