Skip to content

Commit e8a3b69

Browse files
christophstroblmp911de
authored andcommitted
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.
1 parent 3a97b3f commit e8a3b69

File tree

2 files changed

+20
-1
lines changed

2 files changed

+20
-1
lines changed

spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/MongoTemplate.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1721,7 +1721,7 @@ public DeleteResult doInCollection(MongoCollection<Document> collection)
17211721
: collection;
17221722

17231723
DeleteResult result = multi ? collectionToUse.deleteMany(removeQuery, options)
1724-
: collection.deleteOne(removeQuery, options);
1724+
: collectionToUse.deleteOne(removeQuery, options);
17251725

17261726
maybeEmitEvent(new AfterDeleteEvent<>(queryObject, entityClass, collectionName));
17271727

spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/MongoTemplateUnitTests.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@
8383
import com.mongodb.MongoException;
8484
import com.mongodb.MongoNamespace;
8585
import com.mongodb.ReadPreference;
86+
import com.mongodb.WriteConcern;
8687
import com.mongodb.client.AggregateIterable;
8788
import com.mongodb.client.FindIterable;
8889
import com.mongodb.client.MapReduceIterable;
@@ -96,6 +97,7 @@
9697
import com.mongodb.client.model.MapReduceAction;
9798
import com.mongodb.client.model.ReplaceOptions;
9899
import com.mongodb.client.model.UpdateOptions;
100+
import com.mongodb.client.result.DeleteResult;
99101
import com.mongodb.client.result.UpdateResult;
100102

101103
/**
@@ -114,11 +116,13 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests {
114116
@Mock MongoClient mongo;
115117
@Mock MongoDatabase db;
116118
@Mock MongoCollection<Document> collection;
119+
@Mock MongoCollection<Document> collectionWithWriteConcern;
117120
@Mock MongoCursor<Document> cursor;
118121
@Mock FindIterable<Document> findIterable;
119122
@Mock AggregateIterable aggregateIterable;
120123
@Mock MapReduceIterable mapReduceIterable;
121124
@Mock UpdateResult updateResult;
125+
@Mock DeleteResult deleteResult;
122126

123127
Document commandResultDocument = new Document();
124128

@@ -141,6 +145,8 @@ public void setUp() {
141145
when(collection.aggregate(any(List.class), any())).thenReturn(aggregateIterable);
142146
when(collection.withReadPreference(any())).thenReturn(collection);
143147
when(collection.replaceOne(any(), any(), any(ReplaceOptions.class))).thenReturn(updateResult);
148+
when(collection.withWriteConcern(any())).thenReturn(collectionWithWriteConcern);
149+
when(collectionWithWriteConcern.deleteOne(any(Bson.class), any())).thenReturn(deleteResult);
144150
when(findIterable.projection(any())).thenReturn(findIterable);
145151
when(findIterable.sort(any(org.bson.Document.class))).thenReturn(findIterable);
146152
when(findIterable.collation(any())).thenReturn(findIterable);
@@ -731,6 +737,19 @@ public void findAndRemoveShouldUseCollationWhenPresent() {
731737
assertThat(options.getValue().getCollation().getLocale(), is("fr"));
732738
}
733739

740+
@Test // DATAMONGO-2196
741+
public void removeShouldApplyWriteConcern() {
742+
743+
Person person = new Person();
744+
person.id = "id-1";
745+
746+
template.setWriteConcern(WriteConcern.UNACKNOWLEDGED);
747+
template.remove(person);
748+
749+
verify(collection).withWriteConcern(eq(WriteConcern.UNACKNOWLEDGED));
750+
verify(collectionWithWriteConcern).deleteOne(any(Bson.class), any());
751+
}
752+
734753
@Test // DATAMONGO-1518
735754
public void findAndRemoveManyShouldUseCollationWhenPresent() {
736755

0 commit comments

Comments
 (0)