Skip to content

Commit 2dcaca9

Browse files
committed
HBX-3000: Maven GenerateJava Mojo should generate annotated entities by default
- Remove the default initialization of the GenerateJavaMojo#ejb3 field and adapt the unit test - Add required dependencies to maven/pom.xml Signed-off-by: Koen Aers <[email protected]>
1 parent ba3cda3 commit 2dcaca9

File tree

2 files changed

+138
-0
lines changed

2 files changed

+138
-0
lines changed

maven/pom.xml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,16 @@
8888
<groupId>org.hibernate.tool</groupId>
8989
<artifactId>hibernate-tools-orm</artifactId>
9090
</dependency>
91+
<dependency>
92+
<groupId>org.junit.jupiter</groupId>
93+
<artifactId>junit-jupiter-engine</artifactId>
94+
<scope>test</scope>
95+
</dependency>
96+
<dependency>
97+
<groupId>com.h2database</groupId>
98+
<artifactId>h2</artifactId>
99+
<scope>test</scope>
100+
</dependency>
91101
<!-- Maven Plugins -->
92102
<dependency>
93103
<groupId>org.apache.maven</groupId>
Lines changed: 128 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,128 @@
1+
package org.hibernate.tool.maven;
2+
3+
import static org.junit.jupiter.api.Assertions.assertFalse;
4+
import static org.junit.jupiter.api.Assertions.assertTrue;
5+
6+
import java.io.File;
7+
import java.lang.reflect.Field;
8+
import java.nio.file.Files;
9+
import java.sql.DriverManager;
10+
import java.util.Properties;
11+
12+
import org.apache.maven.project.MavenProject;
13+
import org.hibernate.tool.api.metadata.MetadataDescriptor;
14+
import org.hibernate.tool.api.metadata.MetadataDescriptorFactory;
15+
import org.junit.jupiter.api.AfterEach;
16+
import org.junit.jupiter.api.BeforeEach;
17+
import org.junit.jupiter.api.Test;
18+
import org.junit.jupiter.api.io.TempDir;
19+
20+
public class GenerateJavaMojoTest {
21+
22+
private static final String JDBC_CONNECTION = "jdbc:h2:mem:test";
23+
private static final String CREATE_PERSON_TABLE =
24+
"create table PERSON (ID int not null, NAME varchar(20), primary key (ID))";
25+
private static final String DROP_PERSON_TABLE =
26+
"drop table PERSON";
27+
28+
@TempDir
29+
private File tempDir;
30+
31+
private File outputDirectory;
32+
private GenerateJavaMojo generateJavaMojo;
33+
34+
@BeforeEach
35+
public void beforeEach() throws Exception {
36+
createDatabase();
37+
createOutputDirectory();
38+
createGenerateJavaMojo();
39+
}
40+
41+
@AfterEach
42+
public void afterEach() throws Exception {
43+
dropDatabase();
44+
}
45+
46+
@Test
47+
public void testGenerateAnnotatedJava() throws Exception {
48+
File personJavaFile = new File(outputDirectory, "Person.java");
49+
// Person.java should not exist
50+
assertFalse(personJavaFile.exists());
51+
// Set value of field 'ejb3' to 'true' and execute mojo
52+
Field ejb3Field = GenerateJavaMojo.class.getDeclaredField("ejb3");
53+
ejb3Field.setAccessible(true);
54+
ejb3Field.set(generateJavaMojo, true);
55+
// Execute mojo
56+
generateJavaMojo.executeExporter(createMetadataDescriptor());
57+
// Person.java should exist
58+
assertTrue(personJavaFile.exists());
59+
// Person.java should be an annotated entity
60+
byte[] raw = Files.readAllBytes(personJavaFile.toPath());
61+
assertTrue(new String(raw).contains("import jakarta.persistence.Entity;"));
62+
}
63+
64+
@Test
65+
public void testGenerateNonAnnotatedJava() throws Exception {
66+
File personJavaFile = new File(outputDirectory, "Person.java");
67+
// Person.java should not exist
68+
assertFalse(personJavaFile.exists());
69+
// Set value of field 'ejb3' to 'false' and execute mojo
70+
Field ejb3Field = GenerateJavaMojo.class.getDeclaredField("ejb3");
71+
ejb3Field.setAccessible(true);
72+
ejb3Field.set(generateJavaMojo, false);
73+
// Execute mojo
74+
generateJavaMojo.executeExporter(createMetadataDescriptor());
75+
// Person.java should exist
76+
assertTrue(personJavaFile.exists());
77+
// Person.java should be an annotated entity
78+
byte[] raw = Files.readAllBytes(personJavaFile.toPath());
79+
assertFalse(new String(raw).contains("import jakarta.persistence.Entity;"));
80+
}
81+
82+
private void createDatabase() throws Exception {
83+
DriverManager
84+
.getConnection(JDBC_CONNECTION)
85+
.createStatement()
86+
.execute(CREATE_PERSON_TABLE);
87+
}
88+
89+
private void dropDatabase() throws Exception {
90+
DriverManager
91+
.getConnection(JDBC_CONNECTION)
92+
.createStatement()
93+
.execute(DROP_PERSON_TABLE);
94+
}
95+
96+
private void createGenerateJavaMojo() throws Exception {
97+
generateJavaMojo = new GenerateJavaMojo();
98+
Field projectField = AbstractGenerationMojo.class.getDeclaredField("project");
99+
projectField.setAccessible(true);
100+
projectField.set(generateJavaMojo, new MavenProject());
101+
Field propertyFileField = AbstractGenerationMojo.class.getDeclaredField("propertyFile");
102+
propertyFileField.setAccessible(true);
103+
propertyFileField.set(generateJavaMojo, new File(tempDir, "hibernate.properties"));
104+
Field outputDirectoryField = GenerateJavaMojo.class.getDeclaredField("outputDirectory");
105+
outputDirectoryField.setAccessible(true);
106+
outputDirectoryField.set(generateJavaMojo, outputDirectory);
107+
}
108+
109+
private void createOutputDirectory() {
110+
outputDirectory = new File(tempDir, "generated");
111+
outputDirectory.mkdir();
112+
}
113+
114+
private MetadataDescriptor createMetadataDescriptor() {
115+
return MetadataDescriptorFactory.createReverseEngineeringDescriptor(
116+
null,
117+
createProperties());
118+
}
119+
120+
private Properties createProperties() {
121+
Properties result = new Properties();
122+
result.put("hibernate.connection.url", JDBC_CONNECTION);
123+
result.put("hibernate.default_catalog", "TEST");
124+
result.put("hibernate.default_schema", "PUBLIC");
125+
return result;
126+
}
127+
128+
}

0 commit comments

Comments
 (0)