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.
This commit is contained in:
Christoph Strobl
2019-01-31 13:03:48 +01:00
committed by Mark Paluch
parent 3a97b3fbf1
commit e8a3b6935e
2 changed files with 20 additions and 1 deletions

View File

@@ -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));

View File

@@ -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<Document> collection;
@Mock MongoCollection<Document> collectionWithWriteConcern;
@Mock MongoCursor<Document> cursor;
@Mock FindIterable<Document> 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() {