From 741429a452757f954c8bb71fa657bf1df7120f0d Mon Sep 17 00:00:00 2001 From: Oliver Gierke Date: Mon, 17 Feb 2014 11:17:47 +0100 Subject: [PATCH] DATAMONGO-410 - Added test case to show that UpdateMapper considers custom converter. Original pull request: #124. --- .../core/convert/UpdateMapperUnitTests.java | 64 ++++++++++++++++++- 1 file changed, 62 insertions(+), 2 deletions(-) diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/UpdateMapperUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/UpdateMapperUnitTests.java index f453cea54..819c2b059 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/UpdateMapperUnitTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/UpdateMapperUnitTests.java @@ -17,20 +17,26 @@ package org.springframework.data.mongodb.core.convert; import static org.hamcrest.CoreMatchers.*; import static org.junit.Assert.*; +import static org.mockito.Mockito.*; import static org.springframework.data.mongodb.core.DBObjectUtils.*; +import java.util.Arrays; import java.util.List; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; +import org.mockito.Mockito; import org.mockito.runners.MockitoJUnitRunner; +import org.springframework.core.convert.converter.Converter; +import org.springframework.data.convert.WritingConverter; import org.springframework.data.mongodb.MongoDbFactory; import org.springframework.data.mongodb.core.mapping.Field; import org.springframework.data.mongodb.core.mapping.MongoMappingContext; import org.springframework.data.mongodb.core.query.Update; +import com.mongodb.BasicDBObject; import com.mongodb.DBObject; /** @@ -45,11 +51,26 @@ public class UpdateMapperUnitTests { @Mock MongoDbFactory factory; MappingMongoConverter converter; MongoMappingContext context; + UpdateMapper mapper; + private Converter writingConverterSpy; + + @SuppressWarnings("unchecked") @Before public void setUp() { - context = new MongoMappingContext(); - converter = new MappingMongoConverter(factory, context); + + this.writingConverterSpy = Mockito.spy(new NestedEntityWriteConverter()); + CustomConversions conversions = new CustomConversions(Arrays.asList(writingConverterSpy)); + + this.context = new MongoMappingContext(); + this.context.setSimpleTypeHolder(conversions.getSimpleTypeHolder()); + this.context.initialize(); + + this.converter = new MappingMongoConverter(factory, context); + this.converter.setCustomConversions(conversions); + this.converter.afterPropertiesSet(); + + this.mapper = new UpdateMapper(converter); } /** @@ -174,6 +195,22 @@ public class UpdateMapperUnitTests { assertThat(someObject.get("value"), is((Object) "bubu")); } + /** + * @see DATAMONGO-410 + */ + @Test + public void testUpdateMapperShouldConsiderCustomWriteTarget() { + + List someValues = Arrays.asList(new NestedEntity("spring"), new NestedEntity("data"), + new NestedEntity("mongodb")); + NestedEntity[] array = new NestedEntity[someValues.size()]; + + Update update = new Update().pushAll("collectionOfNestedEntities", someValues.toArray(array)); + mapper.getMappedObject(update.getUpdateObject(), context.getPersistentEntity(DomainEntity.class)); + + verify(writingConverterSpy, times(3)).convert(Mockito.any(NestedEntity.class)); + } + static interface Model {} static class ModelImpl implements Model { @@ -221,4 +258,27 @@ public class UpdateMapperUnitTests { super(id, value); } } + + static class DomainEntity { + List collectionOfNestedEntities; + } + + static class NestedEntity { + String name; + + public NestedEntity(String name) { + super(); + this.name = name; + } + + } + + @WritingConverter + static class NestedEntityWriteConverter implements Converter { + + @Override + public DBObject convert(NestedEntity source) { + return new BasicDBObject(); + } + } }