diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/ReactiveMongoTemplateUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/ReactiveMongoTemplateUnitTests.java index 974fdb6bc..0cc335690 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/ReactiveMongoTemplateUnitTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/ReactiveMongoTemplateUnitTests.java @@ -33,7 +33,6 @@ import org.bson.Document; import org.bson.conversions.Bson; import org.bson.types.ObjectId; import org.junit.Before; -import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.ArgumentCaptor; @@ -47,6 +46,7 @@ import org.springframework.data.mongodb.core.convert.MappingMongoConverter; import org.springframework.data.mongodb.core.convert.NoOpDbRefResolver; import org.springframework.data.mongodb.core.mapping.Field; import org.springframework.data.mongodb.core.mapping.MongoMappingContext; +import org.springframework.data.mongodb.core.mapreduce.MapReduceOptions; import org.springframework.data.mongodb.core.query.BasicQuery; import org.springframework.data.mongodb.core.query.Collation; import org.springframework.data.mongodb.core.query.Criteria; @@ -63,6 +63,7 @@ import com.mongodb.client.model.ReplaceOptions; import com.mongodb.client.model.UpdateOptions; import com.mongodb.reactivestreams.client.AggregatePublisher; import com.mongodb.reactivestreams.client.FindPublisher; +import com.mongodb.reactivestreams.client.MapReducePublisher; import com.mongodb.reactivestreams.client.MongoClient; import com.mongodb.reactivestreams.client.MongoCollection; import com.mongodb.reactivestreams.client.MongoDatabase; @@ -87,6 +88,7 @@ public class ReactiveMongoTemplateUnitTests { @Mock Publisher runCommandPublisher; @Mock Publisher updatePublisher; @Mock Publisher findAndUpdatePublisher; + @Mock MapReducePublisher mapReducePublisher; MongoExceptionTranslator exceptionTranslator = new MongoExceptionTranslator(); MappingMongoConverter converter; @@ -106,7 +108,9 @@ public class ReactiveMongoTemplateUnitTests { when(collection.aggregate(anyList(), any(Class.class))).thenReturn(aggregatePublisher); when(collection.count(any(), any(CountOptions.class))).thenReturn(Mono.just(0L)); when(collection.updateOne(any(), any(), any(UpdateOptions.class))).thenReturn(updatePublisher); - when(collection.findOneAndUpdate(any(), any(), any(FindOneAndUpdateOptions.class))).thenReturn(findAndUpdatePublisher); + when(collection.findOneAndUpdate(any(), any(), any(FindOneAndUpdateOptions.class))) + .thenReturn(findAndUpdatePublisher); + when(collection.mapReduce(anyString(), anyString(), any())).thenReturn(mapReducePublisher); when(findPublisher.projection(any())).thenReturn(findPublisher); when(findPublisher.limit(anyInt())).thenReturn(findPublisher); when(findPublisher.collation(any())).thenReturn(findPublisher); @@ -271,14 +275,13 @@ public class ReactiveMongoTemplateUnitTests { assertThat(options.getValue().getCollation().getLocale(), is("fr")); } - @Ignore("currently no mapReduce") - @Test // DATAMONGO-1518 + @Test // DATAMONGO-1518, DATAMONGO-2257 public void mapReduceShouldUseCollationWhenPresent() { - // template.mapReduce("", "", "", MapReduceOptions.options().collation(Collation.of("fr")), - // AutogenerateableId.class).subscribe(); - // - // verify(mapReduceIterable).collation(eq(com.mongodb.client.model.Collation.builder().locale("fr").build())); + template.mapReduce(new BasicQuery("{}"), AutogenerateableId.class, AutogenerateableId.class, "", "", + MapReduceOptions.options().collation(Collation.of("fr"))).subscribe(); + + verify(mapReducePublisher).collation(eq(com.mongodb.client.model.Collation.builder().locale("fr").build())); } @Test // DATAMONGO-1518 diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/ReactiveSessionBoundMongoTemplateUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/ReactiveSessionBoundMongoTemplateUnitTests.java index 2d4c21d58..9f4d03308 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/ReactiveSessionBoundMongoTemplateUnitTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/ReactiveSessionBoundMongoTemplateUnitTests.java @@ -44,6 +44,8 @@ import org.springframework.data.mongodb.core.aggregation.Aggregation; import org.springframework.data.mongodb.core.convert.MappingMongoConverter; import org.springframework.data.mongodb.core.convert.NoOpDbRefResolver; import org.springframework.data.mongodb.core.mapping.MongoMappingContext; +import org.springframework.data.mongodb.core.mapreduce.MapReduceOptions; +import org.springframework.data.mongodb.core.query.BasicQuery; import org.springframework.data.mongodb.core.query.NearQuery; import org.springframework.data.mongodb.core.query.Query; import org.springframework.data.mongodb.core.query.Update; @@ -56,6 +58,7 @@ import com.mongodb.reactivestreams.client.AggregatePublisher; import com.mongodb.reactivestreams.client.ClientSession; import com.mongodb.reactivestreams.client.DistinctPublisher; import com.mongodb.reactivestreams.client.FindPublisher; +import com.mongodb.reactivestreams.client.MapReducePublisher; import com.mongodb.reactivestreams.client.MongoClient; import com.mongodb.reactivestreams.client.MongoCollection; import com.mongodb.reactivestreams.client.MongoDatabase; @@ -85,6 +88,7 @@ public class ReactiveSessionBoundMongoTemplateUnitTests { @Mock AggregatePublisher aggregatePublisher; @Mock DistinctPublisher distinctPublisher; @Mock Publisher resultPublisher; + @Mock MapReducePublisher mapReducePublisher; @Mock MongoClient client; @Mock CodecRegistry codecRegistry; @@ -115,6 +119,7 @@ public class ReactiveSessionBoundMongoTemplateUnitTests { when(collection.updateMany(any(ClientSession.class), any(), any(), any(UpdateOptions.class))) .thenReturn(resultPublisher); when(collection.dropIndex(any(ClientSession.class), anyString())).thenReturn(resultPublisher); + when(collection.mapReduce(any(ClientSession.class), any(), any(), any())).thenReturn(mapReducePublisher); when(findPublisher.projection(any())).thenReturn(findPublisher); when(findPublisher.limit(anyInt())).thenReturn(findPublisher); when(findPublisher.collation(any())).thenReturn(findPublisher); @@ -269,11 +274,11 @@ public class ReactiveSessionBoundMongoTemplateUnitTests { verify(database).runCommand(eq(clientSession), any(), eq(Document.class)); } - @Test // DATAMONGO-1880, DATAMONGO-1890 - @Ignore("No map reduce yet on template - DATAMONGO-1890") + @Test // DATAMONGO-1880, DATAMONGO-1890, DATAMONGO-257 public void mapReduceShouldUseProxiedCollection() { - // template.mapReduce(COLLECTION_NAME, "foo", "bar", Person.class); + template.mapReduce(new BasicQuery("{}"), Person.class, COLLECTION_NAME, Person.class, "foo", "bar", + MapReduceOptions.options()).subscribe(); verify(collection).mapReduce(eq(clientSession), anyString(), anyString(), eq(Document.class)); } diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/AbstractPersonRepositoryIntegrationTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/AbstractPersonRepositoryIntegrationTests.java index aa79b2694..eceb95b6a 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/AbstractPersonRepositoryIntegrationTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/AbstractPersonRepositoryIntegrationTests.java @@ -36,7 +36,6 @@ import java.util.stream.Stream; import org.hamcrest.Matchers; import org.junit.Before; -import org.junit.Ignore; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; @@ -1274,15 +1273,8 @@ public abstract class AbstractPersonRepositoryIntegrationTests { assertThat(target.getShippingAddresses()).hasSize(1); } - @Test // DATAMONGO-2149, DATAMONGO-2154 - @Ignore("This one fails due to Json parse exception within MongoDB") + @Test // DATAMONGO-2149, DATAMONGO-2154, DATAMONGO-2199 public void annotatedQueryShouldAllowPositionalParameterInFieldsProjectionWithDbRef() { - - // the following needs to be added to PersonRepository. - - // @Query(value = "{ 'fans' : { '$elemMatch' : { '$ref' : 'user' } } }", fields = "{ 'fans.$': ?0 }") - // Person findWithArrayPositionInProjectionWithDbRef(int position); - List userList = IntStream.range(0, 10).mapToObj(it -> { User user = new User(); @@ -1297,9 +1289,9 @@ public abstract class AbstractPersonRepositoryIntegrationTests { alicia.setFans(userList); operations.save(alicia); - // Person target = repository.findWithArrayPositionInProjectionWithDbRef(1); - // - // assertThat(target).isNotNull(); - // assertThat(target.getShippingAddresses()).hasSize(1); + Person target = repository.findWithArrayPositionInProjectionWithDbRef(1); + + assertThat(target).isNotNull(); + assertThat(target.getFans()).hasSize(1); } } diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/PersonRepository.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/PersonRepository.java index 175cfcdc7..41d8b65f0 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/PersonRepository.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/PersonRepository.java @@ -362,4 +362,7 @@ public interface PersonRepository extends MongoRepository, Query @Query(value = "{ 'shippingAddresses' : { '$elemMatch' : { 'city' : { '$eq' : 'lnz' } } } }", fields = "{ 'shippingAddresses.$': ?0 }") Person findWithArrayPositionInProjection(int position); + + @Query(value = "{ 'fans' : { '$elemMatch' : { '$ref' : 'user' } } }", fields = "{ 'fans.$': ?0 }") + Person findWithArrayPositionInProjectionWithDbRef(int position); }