Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package io.quarkus.hibernate.orm.formatmapper;

import static org.assertj.core.api.Assertions.assertThat;

import jakarta.inject.Inject;

import org.hibernate.SessionFactory;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;

import io.quarkus.hibernate.orm.SchemaUtil;
import io.quarkus.hibernate.orm.SmokeTestUtils;
import io.quarkus.test.QuarkusUnitTest;

public class FormatMapperBehaviorJsonObjectMapperAdjustedPropertiesTest {
@RegisterExtension
static QuarkusUnitTest TEST = new QuarkusUnitTest()
.withApplicationRoot((jar) -> jar
.addClasses(MyJsonEntity.class)
.addClasses(SchemaUtil.class, SmokeTestUtils.class))
.withConfigurationResource("application.properties")
.overrideConfigKey("quarkus.jackson.write-dates-as-timestamps", "true") // to keep Jackson's defaults
.overrideConfigKey("quarkus.jackson.write-durations-as-timestamps", "true") // to keep Jackson's defaults
.overrideConfigKey("quarkus.jackson.accept-case-insensitive-enums", "false") // to keep Jackson's defaults
// .overrideConfigKey( "quarkus.jackson.timezone", "UTC" ) // to keep Jackson's defaults (this is already Quarkus' default)
;

@Inject
SessionFactory sessionFactory;

@Test
void smoke() {
// We really just care ot see if the SF is built successfully here or not;
assertThat(SchemaUtil.getColumnNames(sessionFactory, MyJsonEntity.class))
.contains("properties", "amount1", "amount2")
.doesNotContain("amountDifference");
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package io.quarkus.hibernate.orm.formatmapper;

import static org.assertj.core.api.Assertions.assertThat;

import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;

import io.quarkus.hibernate.orm.SchemaUtil;
import io.quarkus.hibernate.orm.SmokeTestUtils;
import io.quarkus.test.QuarkusUnitTest;

public class FormatMapperBehaviorJsonObjectMapperCustomizerTest {
@RegisterExtension
static QuarkusUnitTest TEST = new QuarkusUnitTest()
.withApplicationRoot((jar) -> jar
.addClasses(MyJsonEntity.class, MyObjectMapperCustomizer.class)
.addClasses(SchemaUtil.class, SmokeTestUtils.class))
.withConfigurationResource("application.properties")
.assertException(ex -> assertThat(ex).hasCauseInstanceOf(IllegalStateException.class)
.cause()
.hasMessageContaining("set \"quarkus.hibernate-orm.mapping.format.global=ignore\""));

@Test
void smoke() {
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package io.quarkus.hibernate.orm.formatmapper;

import static org.assertj.core.api.Assertions.assertThat;

import jakarta.inject.Inject;

import org.hibernate.SessionFactory;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;

import io.quarkus.hibernate.orm.SchemaUtil;
import io.quarkus.hibernate.orm.SmokeTestUtils;
import io.quarkus.test.QuarkusUnitTest;

public class FormatMapperBehaviorJsonObjectMapperCustomizerWithIgnoreTest {
@RegisterExtension
static QuarkusUnitTest TEST = new QuarkusUnitTest()
.withApplicationRoot((jar) -> jar
.addClasses(MyJsonEntity.class, MyObjectMapperCustomizer.class)
.addClasses(SchemaUtil.class, SmokeTestUtils.class))
.withConfigurationResource("application.properties")
.overrideConfigKey("quarkus.hibernate-orm.mapping.format.global", "ignore");

@Inject
SessionFactory sessionFactory;

@Test
void smoke() {
// We really just care ot see if the SF is built successfully here or not;
assertThat(SchemaUtil.getColumnNames(sessionFactory, MyJsonEntity.class))
.contains("properties", "amount1", "amount2")
.doesNotContain("amountDifference");
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package io.quarkus.hibernate.orm.formatmapper;

import static org.assertj.core.api.Assertions.assertThat;

import jakarta.inject.Inject;

import org.hibernate.SessionFactory;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;

import io.quarkus.hibernate.orm.SchemaUtil;
import io.quarkus.hibernate.orm.SmokeTestUtils;
import io.quarkus.test.QuarkusUnitTest;

public class FormatMapperBehaviorTest {
@RegisterExtension
static QuarkusUnitTest TEST = new QuarkusUnitTest()
.withApplicationRoot((jar) -> jar
.addClasses(MyJsonEntity.class, MyXmlEntity.class)
.addClasses(SchemaUtil.class, SmokeTestUtils.class))
.withConfigurationResource("application.properties")
.overrideConfigKey("quarkus.hibernate-orm.mapping.format.global", "ignore");

@Inject
SessionFactory sessionFactory;

@Test
void smoke() {
// We really just care ot see if the SF is built successfully here or not;
assertThat(SchemaUtil.getColumnNames(sessionFactory, MyJsonEntity.class))
.contains("properties", "amount1", "amount2")
.doesNotContain("amountDifference");
assertThat(SchemaUtil.getColumnNames(sessionFactory, MyXmlEntity.class))
.contains("properties", "amount1", "amount2")
.doesNotContain("amountDifference");
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package io.quarkus.hibernate.orm.formatmapper;

import static org.assertj.core.api.Assertions.assertThat;

import jakarta.inject.Inject;

import org.hibernate.SessionFactory;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;

import io.quarkus.hibernate.orm.SchemaUtil;
import io.quarkus.hibernate.orm.SmokeTestUtils;
import io.quarkus.test.QuarkusUnitTest;

public class FormatMapperBehaviorWithFormatMapperTest {
@RegisterExtension
static QuarkusUnitTest TEST = new QuarkusUnitTest()
.withApplicationRoot((jar) -> jar
.addClasses(MyJsonEntity.class, MyJsonFormatMapper.class)
.addClasses(SchemaUtil.class, SmokeTestUtils.class))
.withConfigurationResource("application.properties");

@Inject
SessionFactory sessionFactory;

@Test
void smoke() {
// We really just care ot see if the SF is built successfully here or not;
assertThat(SchemaUtil.getColumnNames(sessionFactory, MyJsonEntity.class))
.contains("properties", "amount1", "amount2")
.doesNotContain("amountDifference");
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package io.quarkus.hibernate.orm.formatmapper;

import static org.assertj.core.api.Assertions.assertThat;

import jakarta.inject.Inject;

import org.hibernate.SessionFactory;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;

import io.quarkus.hibernate.orm.SchemaUtil;
import io.quarkus.hibernate.orm.SmokeTestUtils;
import io.quarkus.test.QuarkusUnitTest;

public class FormatMapperBehaviorXmlFailsByDefaultTest {
@RegisterExtension
static QuarkusUnitTest TEST = new QuarkusUnitTest()
.withApplicationRoot((jar) -> jar
.addClasses(MyXmlEntity.class)
.addClasses(SchemaUtil.class, SmokeTestUtils.class))
.withConfigurationResource("application.properties")
.assertException(ex -> assertThat(ex).hasCauseInstanceOf(IllegalStateException.class)
.cause()
.hasMessageContaining("set \"quarkus.hibernate-orm.mapping.format.global=ignore\""));

@Inject
SessionFactory sessionFactory;

@Test
void smoke() {
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package io.quarkus.hibernate.orm.formatmapper;

import static org.assertj.core.api.Assertions.assertThat;

import jakarta.inject.Inject;

import org.hibernate.SessionFactory;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;

import io.quarkus.hibernate.orm.SchemaUtil;
import io.quarkus.hibernate.orm.SmokeTestUtils;
import io.quarkus.test.QuarkusUnitTest;

public class FormatMapperBehaviorXmlWorksWithUserDefinedMapperTest {
@RegisterExtension
static QuarkusUnitTest TEST = new QuarkusUnitTest()
.withApplicationRoot((jar) -> jar
.addClasses(MyXmlFormatMapper.class, MyXmlEntity.class)
.addClasses(SchemaUtil.class, SmokeTestUtils.class))
.withConfigurationResource("application.properties");

@Inject
SessionFactory sessionFactory;

@Test
void smoke() {
// We really just care ot see if the SF is built successfully here or not;
assertThat(SchemaUtil.getColumnNames(sessionFactory, MyXmlEntity.class))
.contains("properties", "amount1", "amount2")
.doesNotContain("amountDifference");
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package io.quarkus.hibernate.orm.formatmapper;

import java.util.Map;

import jakarta.persistence.Entity;
import jakarta.persistence.Id;

import org.hibernate.annotations.Formula;
import org.hibernate.annotations.JdbcTypeCode;
import org.hibernate.type.SqlTypes;

@Entity
public class MyJsonEntity {

@Id
public Long id;

@JdbcTypeCode(SqlTypes.JSON)
public Map<String, String> properties;

public int amount1;
public int amount2;

@Formula("amount2 - amount1")
public int amountDifference;

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package io.quarkus.hibernate.orm.formatmapper;

import org.hibernate.type.descriptor.WrapperOptions;
import org.hibernate.type.descriptor.java.JavaType;
import org.hibernate.type.format.FormatMapper;

import io.quarkus.hibernate.orm.JsonFormat;
import io.quarkus.hibernate.orm.PersistenceUnitExtension;

@JsonFormat
@PersistenceUnitExtension
public class MyJsonFormatMapper implements FormatMapper {

@Override
public <T> T fromString(CharSequence charSequence, JavaType<T> javaType, WrapperOptions wrapperOptions) {
throw new UnsupportedOperationException();
}

@Override
public <T> String toString(T value, JavaType<T> javaType, WrapperOptions wrapperOptions) {
throw new UnsupportedOperationException();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package io.quarkus.hibernate.orm.formatmapper;

import jakarta.inject.Singleton;

import com.fasterxml.jackson.databind.ObjectMapper;

import io.quarkus.jackson.ObjectMapperCustomizer;

@Singleton
public class MyObjectMapperCustomizer implements ObjectMapperCustomizer {
@Override
public void customize(ObjectMapper objectMapper) {
// we don't really have to do anything here, it is enough that we have the customizer...
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package io.quarkus.hibernate.orm.formatmapper;

import java.util.Map;

import jakarta.persistence.Entity;
import jakarta.persistence.Id;

import org.hibernate.annotations.Formula;
import org.hibernate.annotations.JdbcTypeCode;
import org.hibernate.type.SqlTypes;

@Entity
public class MyXmlEntity {

@Id
public Long id;

@JdbcTypeCode(SqlTypes.SQLXML)
public Map<String, String> properties;

public int amount1;
public int amount2;

@Formula("amount2 - amount1")
public int amountDifference;

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package io.quarkus.hibernate.orm.formatmapper;

import org.hibernate.type.descriptor.WrapperOptions;
import org.hibernate.type.descriptor.java.JavaType;
import org.hibernate.type.format.FormatMapper;

import io.quarkus.hibernate.orm.PersistenceUnitExtension;
import io.quarkus.hibernate.orm.XmlFormat;

@XmlFormat
@PersistenceUnitExtension
public class MyXmlFormatMapper implements FormatMapper {

@Override
public <T> T fromString(CharSequence charSequence, JavaType<T> javaType, WrapperOptions wrapperOptions) {
throw new UnsupportedOperationException();
}

@Override
public <T> String toString(T value, JavaType<T> javaType, WrapperOptions wrapperOptions) {
throw new UnsupportedOperationException();
}
}
Loading
Loading