Browse Source

Polishing.

Restructure test.
Remove redundant code.
Formatting.

Original pull request #1876
See #1842
3.2.x
Jens Schauder 1 year ago
parent
commit
56260ede55
No known key found for this signature in database
GPG Key ID: 74F6C554AE971567
  1. 17
      spring-data-relational/src/main/java/org/springframework/data/relational/core/conversion/MappingRelationalConverter.java
  2. 45
      spring-data-relational/src/test/java/org/springframework/data/relational/core/conversion/MappingRelationalConverterUnitTests.java

17
spring-data-relational/src/main/java/org/springframework/data/relational/core/conversion/MappingRelationalConverter.java

@ -41,16 +41,7 @@ import org.springframework.data.mapping.PersistentProperty; @@ -41,16 +41,7 @@ import org.springframework.data.mapping.PersistentProperty;
import org.springframework.data.mapping.PersistentPropertyAccessor;
import org.springframework.data.mapping.PersistentPropertyPathAccessor;
import org.springframework.data.mapping.context.MappingContext;
import org.springframework.data.mapping.model.ConvertingPropertyAccessor;
import org.springframework.data.mapping.model.DefaultSpELExpressionEvaluator;
import org.springframework.data.mapping.model.EntityInstantiator;
import org.springframework.data.mapping.model.ParameterValueProvider;
import org.springframework.data.mapping.model.PersistentEntityParameterValueProvider;
import org.springframework.data.mapping.model.PropertyValueProvider;
import org.springframework.data.mapping.model.SimpleTypeHolder;
import org.springframework.data.mapping.model.SpELContext;
import org.springframework.data.mapping.model.SpELExpressionEvaluator;
import org.springframework.data.mapping.model.SpELExpressionParameterValueProvider;
import org.springframework.data.mapping.model.*;
import org.springframework.data.projection.EntityProjection;
import org.springframework.data.projection.EntityProjectionIntrospector;
import org.springframework.data.projection.EntityProjectionIntrospector.ProjectionPredicate;
@ -82,6 +73,7 @@ import org.springframework.util.ObjectUtils; @@ -82,6 +73,7 @@ import org.springframework.util.ObjectUtils;
* @author Chirag Tailor
* @author Vincent Galloy
* @author Chanhyeong Cho
* @author Lukáš Křečan
* @see org.springframework.data.mapping.context.MappingContext
* @see SimpleTypeHolder
* @see CustomConversions
@ -678,8 +670,9 @@ public class MappingRelationalConverter extends AbstractRelationalConverter impl @@ -678,8 +670,9 @@ public class MappingRelationalConverter extends AbstractRelationalConverter impl
if (getConversions().isSimpleType(value.getClass())) {
Optional<Class<?>> customWriteTarget = getConversions().hasCustomWriteTarget(value.getClass(), type.getType())
? getConversions().getCustomWriteTarget(value.getClass(), type.getType())
: getConversions().getCustomWriteTarget(type.getType());
? getConversions().getCustomWriteTarget(value.getClass(), type.getType())
: getConversions().getCustomWriteTarget(type.getType());
if (customWriteTarget.isPresent()) {
return getConversionService().convert(value, customWriteTarget.get());
}

45
spring-data-relational/src/test/java/org/springframework/data/relational/core/conversion/MappingRelationalConverterUnitTests.java

@ -24,10 +24,10 @@ import java.util.List; @@ -24,10 +24,10 @@ import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.UUID;
import org.junit.jupiter.api.Test;
import org.assertj.core.api.SoftAssertions;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.convert.TypeDescriptor;
import org.springframework.core.convert.converter.Converter;
@ -52,6 +52,8 @@ import org.springframework.data.util.TypeInformation; @@ -52,6 +52,8 @@ import org.springframework.data.util.TypeInformation;
* Unit tests for {@link MappingRelationalConverter}.
*
* @author Mark Paluch
* @author Lukáš Křečan
* @author Jens Schauder
*/
class MappingRelationalConverterUnitTests {
@ -92,7 +94,7 @@ class MappingRelationalConverterUnitTests { @@ -92,7 +94,7 @@ class MappingRelationalConverterUnitTests {
}
@Test
// GH-1689
// GH-1689
void shouldApplySimpleTypeConverterSimpleType() {
converter = new MappingRelationalConverter(converter.getMappingContext(),
@ -214,25 +216,24 @@ class MappingRelationalConverterUnitTests { @@ -214,25 +216,24 @@ class MappingRelationalConverterUnitTests {
assertThat(person.getAddresses()).extracting(Address::getStreet).hasSize(1).containsOnly("hwy");
}
@SuppressWarnings("unchecked")
@Test
@Test // GH-1842
void shouldApplyGenericTypeConverter() {
converter = new MappingRelationalConverter(converter.getMappingContext(),
new CustomConversions(StoreConversions.NONE, List.of(GenericTypeConverter.INSTANCE)));
new CustomConversions(StoreConversions.NONE, List.of(GenericTypeConverter.INSTANCE)));
UUID uuid = UUID.randomUUID();
GenericClass<UUID> wrappedUuid = new GenericClass<>(uuid);
GenericClass<String> wrappedString = new GenericClass<>("test");
var stringResult = (GenericClass<String>) converter.writeValue("test", TypeInformation.of(GenericClass.class));
var uuidResult = (GenericClass<UUID>) converter.writeValue(UUID.fromString("1234567-8910-1112-1314-151617181920"), TypeInformation.of(GenericClass.class));
SoftAssertions.assertSoftly(softly -> {
var stringGeneric = new GenericClass<>("test");
var stringGenericResult = (String) converter.writeValue(stringGeneric, TypeInformation.of(String.class));
var uuidGeneric = new GenericClass<>(UUID.fromString("1234567-8910-1112-1314-151617181920"));
var uuidGenericResult = (UUID) converter.writeValue(uuidGeneric, TypeInformation.of(UUID.class));
softly.assertThat(converter.writeValue(uuid, TypeInformation.of(GenericClass.class))).isEqualTo(wrappedUuid);
softly.assertThat(converter.writeValue(wrappedUuid, TypeInformation.of(UUID.class))).isEqualTo(uuid);
assertThat(stringResult.value()).isEqualTo("test");
assertThat(uuidResult.value()).isEqualTo(UUID.fromString("1234567-8910-1112-1314-151617181920"));
assertThat(stringGenericResult).isEqualTo("test");
assertThat(uuidGenericResult).isEqualTo(UUID.fromString("1234567-8910-1112-1314-151617181920"));
softly.assertThat(converter.writeValue("test", TypeInformation.of(GenericClass.class))).isEqualTo(wrappedString);
softly.assertThat(converter.writeValue(wrappedString, TypeInformation.of(String.class))).isEqualTo("test");
});
}
static class SimpleType {
@ -397,12 +398,9 @@ class MappingRelationalConverterUnitTests { @@ -397,12 +398,9 @@ class MappingRelationalConverterUnitTests {
@Override
public Set<ConvertiblePair> getConvertibleTypes() {
return Set.of(
new ConvertiblePair(String.class, GenericClass.class),
new ConvertiblePair(UUID.class, GenericClass.class),
new ConvertiblePair(GenericClass.class, String.class),
new ConvertiblePair(GenericClass.class, UUID.class)
);
return Set.of(new ConvertiblePair(String.class, GenericClass.class),
new ConvertiblePair(UUID.class, GenericClass.class), new ConvertiblePair(GenericClass.class, String.class),
new ConvertiblePair(GenericClass.class, UUID.class));
}
@Override
@ -415,6 +413,7 @@ class MappingRelationalConverterUnitTests { @@ -415,6 +413,7 @@ class MappingRelationalConverterUnitTests {
}
public record GenericClass<T>(T value) { }
public record GenericClass<T>(T value) {
}
}

Loading…
Cancel
Save