From e8a3b6935e9eafe2e8b5aed32b634323d9dbc05d Mon Sep 17 00:00:00 2001 From: Christoph Strobl Date: Thu, 31 Jan 2019 13:03:48 +0100 Subject: [PATCH] DATAMONGO-2196 - Remove applies WriteConcern to single Document delete operations. We now make sure to apply the WriteConcern correctly when calling deleteOne on MongoCollection. Original pull request: #641. --- .../data/mongodb/core/MongoTemplate.java | 2 +- .../mongodb/core/MongoTemplateUnitTests.java | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/MongoTemplate.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/MongoTemplate.java index 94fe71d4c..7ed5a1883 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/MongoTemplate.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/MongoTemplate.java @@ -1721,7 +1721,7 @@ public class MongoTemplate implements MongoOperations, ApplicationContextAware, : collection; DeleteResult result = multi ? collectionToUse.deleteMany(removeQuery, options) - : collection.deleteOne(removeQuery, options); + : collectionToUse.deleteOne(removeQuery, options); maybeEmitEvent(new AfterDeleteEvent<>(queryObject, entityClass, collectionName)); diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/MongoTemplateUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/MongoTemplateUnitTests.java index 480dbebc0..41699e641 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/MongoTemplateUnitTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/MongoTemplateUnitTests.java @@ -83,6 +83,7 @@ import com.mongodb.MongoClient; import com.mongodb.MongoException; import com.mongodb.MongoNamespace; import com.mongodb.ReadPreference; +import com.mongodb.WriteConcern; import com.mongodb.client.AggregateIterable; import com.mongodb.client.FindIterable; import com.mongodb.client.MapReduceIterable; @@ -96,6 +97,7 @@ import com.mongodb.client.model.FindOneAndUpdateOptions; import com.mongodb.client.model.MapReduceAction; import com.mongodb.client.model.ReplaceOptions; import com.mongodb.client.model.UpdateOptions; +import com.mongodb.client.result.DeleteResult; import com.mongodb.client.result.UpdateResult; /** @@ -114,11 +116,13 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { @Mock MongoClient mongo; @Mock MongoDatabase db; @Mock MongoCollection collection; + @Mock MongoCollection collectionWithWriteConcern; @Mock MongoCursor cursor; @Mock FindIterable findIterable; @Mock AggregateIterable aggregateIterable; @Mock MapReduceIterable mapReduceIterable; @Mock UpdateResult updateResult; + @Mock DeleteResult deleteResult; Document commandResultDocument = new Document(); @@ -141,6 +145,8 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { when(collection.aggregate(any(List.class), any())).thenReturn(aggregateIterable); when(collection.withReadPreference(any())).thenReturn(collection); when(collection.replaceOne(any(), any(), any(ReplaceOptions.class))).thenReturn(updateResult); + when(collection.withWriteConcern(any())).thenReturn(collectionWithWriteConcern); + when(collectionWithWriteConcern.deleteOne(any(Bson.class), any())).thenReturn(deleteResult); when(findIterable.projection(any())).thenReturn(findIterable); when(findIterable.sort(any(org.bson.Document.class))).thenReturn(findIterable); when(findIterable.collation(any())).thenReturn(findIterable); @@ -731,6 +737,19 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { assertThat(options.getValue().getCollation().getLocale(), is("fr")); } + @Test // DATAMONGO-2196 + public void removeShouldApplyWriteConcern() { + + Person person = new Person(); + person.id = "id-1"; + + template.setWriteConcern(WriteConcern.UNACKNOWLEDGED); + template.remove(person); + + verify(collection).withWriteConcern(eq(WriteConcern.UNACKNOWLEDGED)); + verify(collectionWithWriteConcern).deleteOne(any(Bson.class), any()); + } + @Test // DATAMONGO-1518 public void findAndRemoveManyShouldUseCollationWhenPresent() {