From d3d6242a16d77478e41fbf872250c44d9af3e980 Mon Sep 17 00:00:00 2001 From: Christoph Strobl Date: Tue, 5 Sep 2017 10:07:16 +0200 Subject: [PATCH] DATAMONGO-1774 - Fix infinite loop in ReactiveMongoOperations#remove(Mono, String). Original pull request: #498. --- .../mongodb/core/ReactiveMongoTemplate.java | 2 +- .../core/ReactiveMongoTemplateTests.java | 46 +++++++++++++++++++ 2 files changed, 47 insertions(+), 1 deletion(-) diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/ReactiveMongoTemplate.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/ReactiveMongoTemplate.java index 6019229e3..921e31ee5 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/ReactiveMongoTemplate.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/ReactiveMongoTemplate.java @@ -1446,7 +1446,7 @@ public class ReactiveMongoTemplate implements ReactiveMongoOperations, Applicati */ @Override public Mono remove(Mono objectToRemove, String collection) { - return objectToRemove.flatMap(o -> remove(objectToRemove, collection)); + return objectToRemove.flatMap(it -> remove(it, collection)); } /* diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/ReactiveMongoTemplateTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/ReactiveMongoTemplateTests.java index 0998c6936..6d69a1ed3 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/ReactiveMongoTemplateTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/ReactiveMongoTemplateTests.java @@ -461,6 +461,52 @@ public class ReactiveMongoTemplateTests { StepVerifier.create(template.findOne(new Query(), Sample.class)).expectNext(data).verifyComplete(); } + @Test // DATAMONGO-1774 + public void removeWithEmptyMonoShouldDoNothing() { + + Sample spring = new Sample("100", "spring"); + Sample data = new Sample("200", "data"); + Sample mongodb = new Sample("300", "mongodb"); + + StepVerifier.create(template.insert(Arrays.asList(spring, data, mongodb), Sample.class)) // + .expectNextCount(3) // + .verifyComplete(); + + StepVerifier.create(template.remove(Mono.empty())).verifyComplete(); + StepVerifier.create(template.count(new Query(), Sample.class)).expectNext(3L).verifyComplete(); + } + + @Test // DATAMONGO-1774 + public void removeWithMonoShouldDeleteElement() { + + Sample spring = new Sample("100", "spring"); + Sample data = new Sample("200", "data"); + Sample mongodb = new Sample("300", "mongodb"); + + StepVerifier.create(template.insert(Arrays.asList(spring, data, mongodb), Sample.class)) // + .expectNextCount(3) // + .verifyComplete(); + + StepVerifier.create(template.remove(Mono.just(spring))).expectNextCount(1).verifyComplete(); + StepVerifier.create(template.count(new Query(), Sample.class)).expectNext(2L).verifyComplete(); + } + + @Test // DATAMONGO-1774 + public void removeWithMonoAndCollectionShouldDeleteElement() { + + Sample spring = new Sample("100", "spring"); + Sample data = new Sample("200", "data"); + Sample mongodb = new Sample("300", "mongodb"); + + StepVerifier.create(template.insert(Arrays.asList(spring, data, mongodb), Sample.class)) // + .expectNextCount(3) // + .verifyComplete(); + + StepVerifier.create(template.remove(Mono.just(spring), template.determineCollectionName(Sample.class))) + .expectNextCount(1).verifyComplete(); + StepVerifier.create(template.count(new Query(), Sample.class)).expectNext(2L).verifyComplete(); + } + @Test // DATAMONGO-1444 public void optimisticLockingHandling() {