Skip to content

Commit 9d8d626

Browse files
committed
HHH-16895 Add test for issue
1 parent 9bb1327 commit 9d8d626

File tree

1 file changed

+108
-0
lines changed

1 file changed

+108
-0
lines changed
Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
package org.hibernate.orm.test.schemaupdate;
2+
3+
import java.io.File;
4+
import java.io.IOException;
5+
import java.nio.file.Files;
6+
import java.util.EnumSet;
7+
8+
import org.hibernate.annotations.Check;
9+
import org.hibernate.boot.MetadataSources;
10+
import org.hibernate.boot.registry.StandardServiceRegistry;
11+
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
12+
import org.hibernate.boot.spi.MetadataImplementor;
13+
import org.hibernate.tool.hbm2ddl.SchemaExport;
14+
import org.hibernate.tool.schema.TargetType;
15+
16+
import org.hibernate.testing.orm.junit.BaseUnitTest;
17+
import org.hibernate.testing.orm.junit.DialectFeatureChecks;
18+
import org.hibernate.testing.orm.junit.JiraKey;
19+
import org.hibernate.testing.orm.junit.RequiresDialectFeature;
20+
import org.junit.jupiter.api.AfterEach;
21+
import org.junit.jupiter.api.BeforeEach;
22+
import org.junit.jupiter.api.Test;
23+
24+
import jakarta.persistence.Column;
25+
import jakarta.persistence.Entity;
26+
import jakarta.persistence.Id;
27+
28+
import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
29+
30+
@BaseUnitTest
31+
@JiraKey("HHH-16895")
32+
@RequiresDialectFeature(feature = DialectFeatureChecks.SupportsColumnCheck.class)
33+
public class CheckConstraintsTest {
34+
static final String CONSTRAINTS = "my_value <> null";
35+
36+
private File output;
37+
private StandardServiceRegistry ssr;
38+
private MetadataImplementor metadata;
39+
40+
@BeforeEach
41+
public void setUp() throws IOException {
42+
output = File.createTempFile( "update_script", ".sql" );
43+
output.deleteOnExit();
44+
ssr = new StandardServiceRegistryBuilder().build();
45+
}
46+
47+
@AfterEach
48+
public void tearsDown() {
49+
output.delete();
50+
StandardServiceRegistryBuilder.destroy( ssr );
51+
}
52+
53+
@Test
54+
public void testCheckConstraintsAtEntityLevelAreApplied() throws Exception {
55+
createSchema( EntityLevelCheck.class );
56+
String fileContent = new String( Files.readAllBytes( output.toPath() ) ).toLowerCase()
57+
.replace( System.lineSeparator(), "" );
58+
assertThat( fileContent ).contains( CONSTRAINTS );
59+
}
60+
61+
@Test
62+
public void testCheckConstraintsAtFieldLevelAreApplied() throws Exception {
63+
createSchema( FieldLevelCheck.class );
64+
String fileContent = new String( Files.readAllBytes( output.toPath() ) ).toLowerCase()
65+
.replace( System.lineSeparator(), "" );
66+
assertThat( fileContent ).contains( CONSTRAINTS );
67+
}
68+
69+
private void createSchema(Class... annotatedClasses) {
70+
final MetadataSources metadataSources = new MetadataSources( ssr );
71+
72+
for ( Class c : annotatedClasses ) {
73+
metadataSources.addAnnotatedClass( c );
74+
}
75+
metadata = (MetadataImplementor) metadataSources.buildMetadata();
76+
metadata.orderColumns( false );
77+
metadata.validate();
78+
new SchemaExport()
79+
.setHaltOnError( true )
80+
.setOutputFile( output.getAbsolutePath() )
81+
.setFormat( false )
82+
.create( EnumSet.of( TargetType.SCRIPT ), metadata );
83+
}
84+
85+
86+
@Entity(name = "EntityLevelCheck")
87+
@Check(constraints = CONSTRAINTS)
88+
public static class EntityLevelCheck {
89+
90+
@Id
91+
private Long id;
92+
93+
@Column(name = "my_value")
94+
private String myValue;
95+
}
96+
97+
@Entity(name = "FieldLevelCheck")
98+
public static class FieldLevelCheck {
99+
100+
@Id
101+
private Long id;
102+
103+
@Column(name = "my_value")
104+
@Check(constraints = CONSTRAINTS)
105+
private String myValue;
106+
107+
}
108+
}

0 commit comments

Comments
 (0)