-
Notifications
You must be signed in to change notification settings - Fork 96
Hibernate Validator integration test #1919
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from all commits
Commits
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
119 changes: 119 additions & 0 deletions
119
integration-tests/hibernate-validator-postgres-it/build.gradle
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,119 @@ | ||
buildscript { | ||
repositories { | ||
// Example: ./gradlew build -PenableMavenLocalRepo | ||
if ( project.hasProperty( 'enableMavenLocalRepo' ) ) { | ||
// Useful for local development, it should be disabled otherwise | ||
mavenLocal() | ||
} | ||
mavenCentral() | ||
} | ||
} | ||
|
||
plugins { | ||
id "org.hibernate.orm" version "${hibernateOrmGradlePluginVersion}" | ||
} | ||
|
||
description = 'Quarkus QE integration tests' | ||
|
||
ext { | ||
log4jVersion = '2.20.0' | ||
assertjVersion = '3.24.2' | ||
} | ||
|
||
dependencies { | ||
implementation project(':hibernate-reactive-core') | ||
implementation "org.hibernate.validator:hibernate-validator:8.0.1.Final" | ||
runtimeOnly 'org.glassfish.expressly:expressly:5.0.0' | ||
|
||
// JPA metamodel generation for criteria queries (optional) | ||
annotationProcessor "org.hibernate.orm:hibernate-jpamodelgen:${hibernateOrmVersion}" | ||
|
||
// Testing on one database should be enough | ||
runtimeOnly "io.vertx:vertx-pg-client:${vertxSqlClientVersion}" | ||
|
||
// Allow authentication to PostgreSQL using SCRAM: | ||
runtimeOnly 'com.ongres.scram:client:2.1' | ||
|
||
// logging | ||
runtimeOnly "org.apache.logging.log4j:log4j-core:${log4jVersion}" | ||
|
||
// Testcontainers | ||
testImplementation "org.testcontainers:postgresql:${testcontainersVersion}" | ||
|
||
// Testing | ||
testImplementation "org.assertj:assertj-core:${assertjVersion}" | ||
testImplementation "io.vertx:vertx-junit5:${vertxSqlClientVersion}" | ||
} | ||
|
||
// Optional: enable the bytecode enhancements | ||
//hibernate { enhancement } | ||
|
||
// Print a summary of the results of the tests (number of failures, successes and skipped) | ||
// This is the same as the one in hibernate-reactive-core | ||
def loggingSummary(db, result, desc) { | ||
if ( !desc.parent ) { // will match the outermost suite | ||
def output = "${db} results: ${result.resultType} (${result.testCount} tests, ${result.successfulTestCount} passed, ${result.failedTestCount} failed, ${result.skippedTestCount} skipped)" | ||
def repeatLength = output.length() + 1 | ||
logger.lifecycle '\n' + ('-' * repeatLength) + '\n' + output + '\n' + ('-' * repeatLength) | ||
} | ||
} | ||
|
||
// Example: | ||
// gradle test -Pdb=MySQL | ||
test { | ||
def selectedDb = project.hasProperty( 'db' ) | ||
? project.properties['db'] | ||
: 'PostgreSQL' | ||
doFirst { | ||
systemProperty 'db', selectedDb | ||
} | ||
afterSuite { desc, result -> | ||
loggingSummary( selectedDb, result, desc ) | ||
} | ||
} | ||
|
||
// Configuration for the tests | ||
tasks.withType( Test ).configureEach { | ||
defaultCharacterEncoding = "UTF-8" | ||
useJUnitPlatform() | ||
testLogging { | ||
displayGranularity 1 | ||
showStandardStreams = project.hasProperty('showStandardOutput') | ||
showStackTraces = true | ||
exceptionFormat = 'full' | ||
events 'PASSED', 'FAILED', 'SKIPPED' | ||
} | ||
systemProperty 'docker', project.hasProperty( 'docker' ) ? 'true' : 'false' | ||
systemProperty 'org.hibernate.reactive.common.InternalStateAssertions.ENFORCE', 'true' | ||
|
||
if ( project.hasProperty( 'includeTests' ) ) { | ||
// Example: ./gradlew testAll -PincludeTests=DefaultPortTest | ||
filter { | ||
includeTestsMatching project.properties['includeTests'] ?: '*' as String | ||
} | ||
} | ||
} | ||
|
||
|
||
// Rule to recognize calls to testDb<dbName> | ||
// and run the tests on the selected db | ||
// Example: | ||
// gradle testDbMySQL testDbDB2 | ||
tasks.addRule( "Pattern testDb<id>" ) { String taskName -> | ||
if ( taskName.startsWith( "testDb" ) ) { | ||
tasks.register( taskName, Test ) { | ||
def dbName = taskName.substring( "testDb".length() ) | ||
description = "Run tests for ${dbName}" | ||
|
||
// We only want to test this on Postgres | ||
onlyIf { dbName.toLowerCase().startsWith( 'p' ) } | ||
doFirst() { | ||
systemProperty 'db', dbName | ||
} | ||
afterSuite { desc, result -> | ||
loggingSummary( dbName, result, desc ) | ||
} | ||
|
||
} | ||
} | ||
} |
5 changes: 5 additions & 0 deletions
5
integration-tests/hibernate-validator-postgres-it/spotless.license.java
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
/* Hibernate, Relational Persistence for Idiomatic Java | ||
* | ||
* SPDX-License-Identifier: Apache-2.0 | ||
* Copyright: Red Hat Inc. and Hibernate Authors | ||
*/ |
75 changes: 75 additions & 0 deletions
75
...dator-postgres-it/src/main/java/org/hibernate/reactive/it/quarkus/qe/database/Author.java
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,75 @@ | ||
/* Hibernate, Relational Persistence for Idiomatic Java | ||
* | ||
* SPDX-License-Identifier: Apache-2.0 | ||
* Copyright: Red Hat Inc. and Hibernate Authors | ||
*/ | ||
package org.hibernate.reactive.it.quarkus.qe.database; | ||
|
||
import static jakarta.persistence.CascadeType.PERSIST; | ||
|
||
import java.util.ArrayList; | ||
import java.util.List; | ||
|
||
|
||
import jakarta.persistence.Entity; | ||
import jakarta.persistence.GeneratedValue; | ||
import jakarta.persistence.Id; | ||
import jakarta.persistence.JoinColumn; | ||
import jakarta.persistence.OneToMany; | ||
import jakarta.persistence.Table; | ||
import jakarta.validation.constraints.NotNull; | ||
import jakarta.validation.constraints.Size; | ||
|
||
|
||
@Entity | ||
@Table(name = "authors") | ||
public class Author { | ||
|
||
@Id | ||
@GeneratedValue | ||
private Long id; | ||
|
||
@NotNull | ||
@Size(max = 10) | ||
private String name; | ||
|
||
@OneToMany(cascade = PERSIST) | ||
@JoinColumn(name = "author") | ||
private List<Book> books = new ArrayList<>(); | ||
|
||
public Author(String name) { | ||
this.name = name; | ||
} | ||
|
||
public Author() { | ||
} | ||
|
||
public Long getId() { | ||
return id; | ||
} | ||
|
||
public void setId(Long id) { | ||
this.id = id; | ||
} | ||
|
||
public @NotNull @Size(max = 10) String getName() { | ||
return name; | ||
} | ||
|
||
public void setName(@NotNull @Size(max = 10) String name) { | ||
this.name = name; | ||
} | ||
|
||
public List<Book> getBooks() { | ||
return books; | ||
} | ||
|
||
public void setBooks(List<Book> books) { | ||
this.books = books; | ||
} | ||
|
||
@Override | ||
public String toString() { | ||
return id + ":" + name; | ||
} | ||
} |
83 changes: 83 additions & 0 deletions
83
...lidator-postgres-it/src/main/java/org/hibernate/reactive/it/quarkus/qe/database/Book.java
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,83 @@ | ||
/* Hibernate, Relational Persistence for Idiomatic Java | ||
* | ||
* SPDX-License-Identifier: Apache-2.0 | ||
* Copyright: Red Hat Inc. and Hibernate Authors | ||
*/ | ||
package org.hibernate.reactive.it.quarkus.qe.database; | ||
|
||
import jakarta.persistence.Convert; | ||
import jakarta.persistence.Entity; | ||
import jakarta.persistence.GeneratedValue; | ||
import jakarta.persistence.GenerationType; | ||
import jakarta.persistence.Id; | ||
import jakarta.persistence.ManyToOne; | ||
import jakarta.persistence.NamedQuery; | ||
import jakarta.persistence.Table; | ||
import jakarta.validation.constraints.NotNull; | ||
import jakarta.validation.constraints.Size; | ||
|
||
|
||
@Entity | ||
@Table(name = "books") | ||
@NamedQuery(name = "find_by_title_prefix", query = "from Book where title like :prefix") | ||
public class Book { | ||
|
||
@Id | ||
@GeneratedValue(strategy = GenerationType.IDENTITY) | ||
private Integer id; | ||
|
||
@NotNull | ||
@Size(max = 10) | ||
private String title; | ||
|
||
@NotNull | ||
@ManyToOne | ||
private Author author; | ||
|
||
@Convert(converter = ISBNConverter.class) | ||
private long isbn; | ||
|
||
public Book() { | ||
} | ||
|
||
public Book(String title) { | ||
this.title = title; | ||
} | ||
|
||
public Integer getId() { | ||
return id; | ||
} | ||
|
||
public void setId(Integer id) { | ||
this.id = id; | ||
} | ||
|
||
public @NotNull @Size(max = 10) String getTitle() { | ||
return title; | ||
} | ||
|
||
public void setTitle(@NotNull @Size(max = 10) String title) { | ||
this.title = title; | ||
} | ||
|
||
public @NotNull Author getAuthor() { | ||
return author; | ||
} | ||
|
||
public void setAuthor(@NotNull Author author) { | ||
this.author = author; | ||
} | ||
|
||
public long getIsbn() { | ||
return isbn; | ||
} | ||
|
||
public void setIsbn(long isbn) { | ||
this.isbn = isbn; | ||
} | ||
|
||
@Override | ||
public String toString() { | ||
return id + ":" + title + ":" + isbn + ":" + author; | ||
} | ||
} |
44 changes: 44 additions & 0 deletions
44
...ostgres-it/src/main/java/org/hibernate/reactive/it/quarkus/qe/database/ISBNConverter.java
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,44 @@ | ||
/* Hibernate, Relational Persistence for Idiomatic Java | ||
* | ||
* SPDX-License-Identifier: Apache-2.0 | ||
* Copyright: Red Hat Inc. and Hibernate Authors | ||
*/ | ||
package org.hibernate.reactive.it.quarkus.qe.database; | ||
|
||
import jakarta.persistence.AttributeConverter; | ||
import jakarta.persistence.Converter; | ||
|
||
@Converter | ||
public class ISBNConverter implements AttributeConverter<Long, String> { | ||
|
||
private static final int ISBN_MAX_LENGTH = 13; | ||
|
||
@Override | ||
/** | ||
* Canonical ISBN format: 978-3-16-148410-0, can be prefixed with zeroes if there is less than 13 digits | ||
*/ | ||
public String convertToDatabaseColumn(Long number) { | ||
String s = number.toString(); | ||
StringBuilder result = new StringBuilder( s ); | ||
if ( s.length() > ISBN_MAX_LENGTH ) { | ||
throw new IllegalStateException( "ISBN " + s + " has a wrong length: " + number ); | ||
} | ||
int paddingLength = ISBN_MAX_LENGTH - s.length(); | ||
result.insert( 0, "0".repeat( paddingLength ) ); | ||
result.insert( 3, '-' ); | ||
result.insert( 5, '-' ); | ||
result.insert( 8, '-' ); | ||
result.insert( 15, '-' ); | ||
return result.toString(); | ||
} | ||
|
||
@Override | ||
public Long convertToEntityAttribute(String s) { | ||
if ( s == null ) { | ||
return 0L; | ||
} | ||
else { | ||
return Long.parseLong( s.replaceAll( "-", "" ) ); | ||
} | ||
} | ||
} |
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Check notice
Code scanning / CodeQL
Missing catch of NumberFormatException Note