Skip to content

Commit b25c7df

Browse files
marko-bekhtagsmet
authored andcommitted
Adjust the json formatter checks to detect when bypassing Quarkus OM would actually match the default one
1 parent 16bd9c7 commit b25c7df

13 files changed

+363
-6
lines changed
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package io.quarkus.hibernate.orm.formatmapper;
2+
3+
import static org.assertj.core.api.Assertions.assertThat;
4+
5+
import jakarta.inject.Inject;
6+
7+
import org.hibernate.SessionFactory;
8+
import org.junit.jupiter.api.Test;
9+
import org.junit.jupiter.api.extension.RegisterExtension;
10+
11+
import io.quarkus.hibernate.orm.SchemaUtil;
12+
import io.quarkus.hibernate.orm.SmokeTestUtils;
13+
import io.quarkus.test.QuarkusUnitTest;
14+
15+
public class FormatMapperBehaviorJsonObjectMapperAdjustedPropertiesTest {
16+
@RegisterExtension
17+
static QuarkusUnitTest TEST = new QuarkusUnitTest()
18+
.withApplicationRoot((jar) -> jar
19+
.addClasses(MyJsonEntity.class)
20+
.addClasses(SchemaUtil.class, SmokeTestUtils.class))
21+
.withConfigurationResource("application.properties")
22+
.overrideConfigKey("quarkus.jackson.write-dates-as-timestamps", "true") // to keep Jackson's defaults
23+
.overrideConfigKey("quarkus.jackson.write-durations-as-timestamps", "true") // to keep Jackson's defaults
24+
.overrideConfigKey("quarkus.jackson.accept-case-insensitive-enums", "false") // to keep Jackson's defaults
25+
// .overrideConfigKey( "quarkus.jackson.timezone", "UTC" ) // to keep Jackson's defaults (this is already Quarkus' default)
26+
;
27+
28+
@Inject
29+
SessionFactory sessionFactory;
30+
31+
@Test
32+
void smoke() {
33+
// We really just care ot see if the SF is built successfully here or not;
34+
assertThat(SchemaUtil.getColumnNames(sessionFactory, MyJsonEntity.class))
35+
.contains("properties", "amount1", "amount2")
36+
.doesNotContain("amountDifference");
37+
}
38+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package io.quarkus.hibernate.orm.formatmapper;
2+
3+
import static org.assertj.core.api.Assertions.assertThat;
4+
5+
import org.junit.jupiter.api.Test;
6+
import org.junit.jupiter.api.extension.RegisterExtension;
7+
8+
import io.quarkus.hibernate.orm.SchemaUtil;
9+
import io.quarkus.hibernate.orm.SmokeTestUtils;
10+
import io.quarkus.test.QuarkusUnitTest;
11+
12+
public class FormatMapperBehaviorJsonObjectMapperCustomizerTest {
13+
@RegisterExtension
14+
static QuarkusUnitTest TEST = new QuarkusUnitTest()
15+
.withApplicationRoot((jar) -> jar
16+
.addClasses(MyJsonEntity.class, MyObjectMapperCustomizer.class)
17+
.addClasses(SchemaUtil.class, SmokeTestUtils.class))
18+
.withConfigurationResource("application.properties")
19+
.assertException(ex -> assertThat(ex).hasCauseInstanceOf(IllegalStateException.class)
20+
.cause()
21+
.hasMessageContaining("set \"quarkus.hibernate-orm.mapping.format.global=ignore\""));
22+
23+
@Test
24+
void smoke() {
25+
}
26+
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package io.quarkus.hibernate.orm.formatmapper;
2+
3+
import static org.assertj.core.api.Assertions.assertThat;
4+
5+
import jakarta.inject.Inject;
6+
7+
import org.hibernate.SessionFactory;
8+
import org.junit.jupiter.api.Test;
9+
import org.junit.jupiter.api.extension.RegisterExtension;
10+
11+
import io.quarkus.hibernate.orm.SchemaUtil;
12+
import io.quarkus.hibernate.orm.SmokeTestUtils;
13+
import io.quarkus.test.QuarkusUnitTest;
14+
15+
public class FormatMapperBehaviorJsonObjectMapperCustomizerWithIgnoreTest {
16+
@RegisterExtension
17+
static QuarkusUnitTest TEST = new QuarkusUnitTest()
18+
.withApplicationRoot((jar) -> jar
19+
.addClasses(MyJsonEntity.class, MyObjectMapperCustomizer.class)
20+
.addClasses(SchemaUtil.class, SmokeTestUtils.class))
21+
.withConfigurationResource("application.properties")
22+
.overrideConfigKey("quarkus.hibernate-orm.mapping.format.global", "ignore");
23+
24+
@Inject
25+
SessionFactory sessionFactory;
26+
27+
@Test
28+
void smoke() {
29+
// We really just care ot see if the SF is built successfully here or not;
30+
assertThat(SchemaUtil.getColumnNames(sessionFactory, MyJsonEntity.class))
31+
.contains("properties", "amount1", "amount2")
32+
.doesNotContain("amountDifference");
33+
}
34+
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package io.quarkus.hibernate.orm.formatmapper;
2+
3+
import static org.assertj.core.api.Assertions.assertThat;
4+
5+
import jakarta.inject.Inject;
6+
7+
import org.hibernate.SessionFactory;
8+
import org.junit.jupiter.api.Test;
9+
import org.junit.jupiter.api.extension.RegisterExtension;
10+
11+
import io.quarkus.hibernate.orm.SchemaUtil;
12+
import io.quarkus.hibernate.orm.SmokeTestUtils;
13+
import io.quarkus.test.QuarkusUnitTest;
14+
15+
public class FormatMapperBehaviorTest {
16+
@RegisterExtension
17+
static QuarkusUnitTest TEST = new QuarkusUnitTest()
18+
.withApplicationRoot((jar) -> jar
19+
.addClasses(MyJsonEntity.class, MyXmlEntity.class)
20+
.addClasses(SchemaUtil.class, SmokeTestUtils.class))
21+
.withConfigurationResource("application.properties")
22+
.overrideConfigKey("quarkus.hibernate-orm.mapping.format.global", "ignore");
23+
24+
@Inject
25+
SessionFactory sessionFactory;
26+
27+
@Test
28+
void smoke() {
29+
// We really just care ot see if the SF is built successfully here or not;
30+
assertThat(SchemaUtil.getColumnNames(sessionFactory, MyJsonEntity.class))
31+
.contains("properties", "amount1", "amount2")
32+
.doesNotContain("amountDifference");
33+
assertThat(SchemaUtil.getColumnNames(sessionFactory, MyXmlEntity.class))
34+
.contains("properties", "amount1", "amount2")
35+
.doesNotContain("amountDifference");
36+
}
37+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package io.quarkus.hibernate.orm.formatmapper;
2+
3+
import static org.assertj.core.api.Assertions.assertThat;
4+
5+
import jakarta.inject.Inject;
6+
7+
import org.hibernate.SessionFactory;
8+
import org.junit.jupiter.api.Test;
9+
import org.junit.jupiter.api.extension.RegisterExtension;
10+
11+
import io.quarkus.hibernate.orm.SchemaUtil;
12+
import io.quarkus.hibernate.orm.SmokeTestUtils;
13+
import io.quarkus.test.QuarkusUnitTest;
14+
15+
public class FormatMapperBehaviorWithFormatMapperTest {
16+
@RegisterExtension
17+
static QuarkusUnitTest TEST = new QuarkusUnitTest()
18+
.withApplicationRoot((jar) -> jar
19+
.addClasses(MyJsonEntity.class, MyJsonFormatMapper.class)
20+
.addClasses(SchemaUtil.class, SmokeTestUtils.class))
21+
.withConfigurationResource("application.properties");
22+
23+
@Inject
24+
SessionFactory sessionFactory;
25+
26+
@Test
27+
void smoke() {
28+
// We really just care ot see if the SF is built successfully here or not;
29+
assertThat(SchemaUtil.getColumnNames(sessionFactory, MyJsonEntity.class))
30+
.contains("properties", "amount1", "amount2")
31+
.doesNotContain("amountDifference");
32+
}
33+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package io.quarkus.hibernate.orm.formatmapper;
2+
3+
import static org.assertj.core.api.Assertions.assertThat;
4+
5+
import jakarta.inject.Inject;
6+
7+
import org.hibernate.SessionFactory;
8+
import org.junit.jupiter.api.Test;
9+
import org.junit.jupiter.api.extension.RegisterExtension;
10+
11+
import io.quarkus.hibernate.orm.SchemaUtil;
12+
import io.quarkus.hibernate.orm.SmokeTestUtils;
13+
import io.quarkus.test.QuarkusUnitTest;
14+
15+
public class FormatMapperBehaviorXmlFailsByDefaultTest {
16+
@RegisterExtension
17+
static QuarkusUnitTest TEST = new QuarkusUnitTest()
18+
.withApplicationRoot((jar) -> jar
19+
.addClasses(MyXmlEntity.class)
20+
.addClasses(SchemaUtil.class, SmokeTestUtils.class))
21+
.withConfigurationResource("application.properties")
22+
.assertException(ex -> assertThat(ex).hasCauseInstanceOf(IllegalStateException.class)
23+
.cause()
24+
.hasMessageContaining("set \"quarkus.hibernate-orm.mapping.format.global=ignore\""));
25+
26+
@Inject
27+
SessionFactory sessionFactory;
28+
29+
@Test
30+
void smoke() {
31+
}
32+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package io.quarkus.hibernate.orm.formatmapper;
2+
3+
import static org.assertj.core.api.Assertions.assertThat;
4+
5+
import jakarta.inject.Inject;
6+
7+
import org.hibernate.SessionFactory;
8+
import org.junit.jupiter.api.Test;
9+
import org.junit.jupiter.api.extension.RegisterExtension;
10+
11+
import io.quarkus.hibernate.orm.SchemaUtil;
12+
import io.quarkus.hibernate.orm.SmokeTestUtils;
13+
import io.quarkus.test.QuarkusUnitTest;
14+
15+
public class FormatMapperBehaviorXmlWorksWithUserDefinedMapperTest {
16+
@RegisterExtension
17+
static QuarkusUnitTest TEST = new QuarkusUnitTest()
18+
.withApplicationRoot((jar) -> jar
19+
.addClasses(MyXmlFormatMapper.class, MyXmlEntity.class)
20+
.addClasses(SchemaUtil.class, SmokeTestUtils.class))
21+
.withConfigurationResource("application.properties");
22+
23+
@Inject
24+
SessionFactory sessionFactory;
25+
26+
@Test
27+
void smoke() {
28+
// We really just care ot see if the SF is built successfully here or not;
29+
assertThat(SchemaUtil.getColumnNames(sessionFactory, MyXmlEntity.class))
30+
.contains("properties", "amount1", "amount2")
31+
.doesNotContain("amountDifference");
32+
}
33+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package io.quarkus.hibernate.orm.formatmapper;
2+
3+
import java.util.Map;
4+
5+
import jakarta.persistence.Entity;
6+
import jakarta.persistence.Id;
7+
8+
import org.hibernate.annotations.Formula;
9+
import org.hibernate.annotations.JdbcTypeCode;
10+
import org.hibernate.type.SqlTypes;
11+
12+
@Entity
13+
public class MyJsonEntity {
14+
15+
@Id
16+
public Long id;
17+
18+
@JdbcTypeCode(SqlTypes.JSON)
19+
public Map<String, String> properties;
20+
21+
public int amount1;
22+
public int amount2;
23+
24+
@Formula("amount2 - amount1")
25+
public int amountDifference;
26+
27+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package io.quarkus.hibernate.orm.formatmapper;
2+
3+
import org.hibernate.type.descriptor.WrapperOptions;
4+
import org.hibernate.type.descriptor.java.JavaType;
5+
import org.hibernate.type.format.FormatMapper;
6+
7+
import io.quarkus.hibernate.orm.JsonFormat;
8+
import io.quarkus.hibernate.orm.PersistenceUnitExtension;
9+
10+
@JsonFormat
11+
@PersistenceUnitExtension
12+
public class MyJsonFormatMapper implements FormatMapper {
13+
14+
@Override
15+
public <T> T fromString(CharSequence charSequence, JavaType<T> javaType, WrapperOptions wrapperOptions) {
16+
throw new UnsupportedOperationException();
17+
}
18+
19+
@Override
20+
public <T> String toString(T value, JavaType<T> javaType, WrapperOptions wrapperOptions) {
21+
throw new UnsupportedOperationException();
22+
}
23+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package io.quarkus.hibernate.orm.formatmapper;
2+
3+
import jakarta.inject.Singleton;
4+
5+
import com.fasterxml.jackson.databind.ObjectMapper;
6+
7+
import io.quarkus.jackson.ObjectMapperCustomizer;
8+
9+
@Singleton
10+
public class MyObjectMapperCustomizer implements ObjectMapperCustomizer {
11+
@Override
12+
public void customize(ObjectMapper objectMapper) {
13+
// we don't really have to do anything here, it is enough that we have the customizer...
14+
}
15+
}

0 commit comments

Comments
 (0)