Skip to content

Commit d8ca73e

Browse files
Maksim Krautsourstam
authored andcommitted
CSHARP-1836: Added additional check for default 'VersionReturned' property value and added unit tests.
1 parent b4114d2 commit d8ca73e

File tree

2 files changed

+21
-2
lines changed

2 files changed

+21
-2
lines changed

src/MongoDB.Driver.Legacy/MongoCollection.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -574,7 +574,7 @@ public virtual FindAndModifyResult FindAndModify(FindAndModifyArgs args)
574574
var resultSerializer = BsonDocumentSerializer.Instance;
575575
var messageEncoderSettings = GetMessageEncoderSettings();
576576
var projection = args.Fields == null ? null : new BsonDocumentWrapper(args.Fields);
577-
var returnDocument = args.VersionReturned == FindAndModifyDocumentVersion.Original
577+
var returnDocument = !args.VersionReturned.HasValue || args.VersionReturned.Value == FindAndModifyDocumentVersion.Original
578578
? Core.Operations.ReturnDocument.Before
579579
: Core.Operations.ReturnDocument.After;
580580
var sort = args.SortBy == null ? null : new BsonDocumentWrapper(args.SortBy);

tests/MongoDB.Driver.Legacy.Tests/MongoCollectionTests.cs

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -908,19 +908,38 @@ public void TestFindAndModify()
908908
_collection.RemoveAll();
909909
_collection.Insert(new BsonDocument { { "_id", 1 }, { "priority", 1 }, { "inprogress", false }, { "name", "abc" } });
910910
_collection.Insert(new BsonDocument { { "_id", 2 }, { "priority", 2 }, { "inprogress", false }, { "name", "def" } });
911+
_collection.Insert(new BsonDocument { { "_id", 3 }, { "priority", 3 }, { "inprogress", false }, { "name", "ghi" } });
911912

912913

913914
var started = DateTime.UtcNow;
914915
started = started.AddTicks(-(started.Ticks % 10000)); // adjust for MongoDB DateTime precision
915916
var args = new FindAndModifyArgs
917+
{
918+
BypassDocumentValidation = true,
919+
Query = Query.EQ("inprogress", false),
920+
SortBy = SortBy.Descending("priority"),
921+
Update = Update.Set("inprogress", true).Set("started", started)
922+
};
923+
var result = _collection.FindAndModify(args);
924+
925+
Assert.True(result.Ok);
926+
Assert.Equal(3, result.ModifiedDocument["_id"].AsInt32);
927+
Assert.Equal(3, result.ModifiedDocument["priority"].AsInt32);
928+
Assert.Equal(false, result.ModifiedDocument["inprogress"].AsBoolean);
929+
Assert.Equal("ghi", result.ModifiedDocument["name"].AsString);
930+
Assert.False(result.ModifiedDocument.Contains("started"));
931+
932+
started = DateTime.UtcNow;
933+
started = started.AddTicks(-(started.Ticks % 10000)); // adjust for MongoDB DateTime precision
934+
args = new FindAndModifyArgs
916935
{
917936
BypassDocumentValidation = true,
918937
Query = Query.EQ("inprogress", false),
919938
SortBy = SortBy.Descending("priority"),
920939
Update = Update.Set("inprogress", true).Set("started", started),
921940
VersionReturned = FindAndModifyDocumentVersion.Original
922941
};
923-
var result = _collection.FindAndModify(args);
942+
result = _collection.FindAndModify(args);
924943

925944
Assert.True(result.Ok);
926945
Assert.Equal(2, result.ModifiedDocument["_id"].AsInt32);

0 commit comments

Comments
 (0)