public void CreateCommand_should_create_the_correct_command( [Values(null, 10)] int?maxTimeMS, [Values(null, "{a: 1}")] string projection, [Values(null, "{b: 1}")] string sort, [Values(null, "{ w : 2 }")] string writeConcernString, [Values("3.0.0", "3.1.1")] string serverVersionString) { var projectionDoc = projection == null ? (BsonDocument)null : BsonDocument.Parse(projection); var sortDoc = sort == null ? (BsonDocument)null : BsonDocument.Parse(sort); var writeConcern = writeConcernString == null ? null : WriteConcern.FromBsonDocument(BsonDocument.Parse(writeConcernString)); var serverVersion = SemanticVersion.Parse(serverVersionString); var subject = new FindOneAndDeleteOperation <BsonDocument>(_collectionNamespace, _filter, BsonDocumentSerializer.Instance, _messageEncoderSettings) { MaxTime = maxTimeMS.HasValue ? TimeSpan.FromMilliseconds(maxTimeMS.Value) : (TimeSpan?)null, Projection = projectionDoc, Sort = sortDoc, WriteConcern = writeConcern }; var expectedResult = new BsonDocument { { "findAndModify", _collectionNamespace.CollectionName }, { "query", _filter }, { "sort", sortDoc, sortDoc != null }, { "remove", true }, { "fields", projectionDoc, projectionDoc != null }, { "maxTimeMS", () => maxTimeMS.Value, maxTimeMS.HasValue }, { "writeConcern", () => writeConcern.ToBsonDocument(), writeConcern != null && SupportedFeatures.IsFindAndModifyWriteConcernSupported(serverVersion) } }; var result = subject.CreateCommand(serverVersion); result.Should().Be(expectedResult); }
public void GetWriteConcernForWriteCommand_should_return_expected_result( bool isInTransaction, string writeConcernJson, string expectedResult) { var session = CreateSession(isInTransaction: isInTransaction); var writeConcern = writeConcernJson == null ? null : WriteConcern.FromBsonDocument(BsonDocument.Parse(writeConcernJson)); var result = WriteConcernHelper.GetEffectiveWriteConcern(session, writeConcern); result.Should().Be(expectedResult); }
public void GetWriteConcernForCommandThatWrites_should_return_expected_result( bool isInTransaction, string writeConcernJson, bool featureIsSupported, string expectedResult) { var session = CreateSession(isInTransaction: isInTransaction); var writeConcern = writeConcernJson == null ? null : WriteConcern.FromBsonDocument(BsonDocument.Parse(writeConcernJson)); var serverVersion = Feature.CommandsThatWriteAcceptWriteConcern.SupportedOrNotSupportedVersion(featureIsSupported); var result = WriteConcernHelper.GetWriteConcernForCommandThatWrites(session, writeConcern, serverVersion); result.Should().Be(expectedResult); }
public void CreateCommand_should_create_the_correct_command( [Values(null, false, true)] bool?bypassDocumentValidation, [Values(false, true)] bool isUpsert, [Values(null, 10)] int?maxTimeMS, [Values(null, "{a: 1}")] string projection, [Values(ReturnDocument.Before, ReturnDocument.After)] ReturnDocument returnDocument, [Values(null, "{b: 1}")] string sort, [Values(null, "{ w : 2 }")] string writeConcernString, [Values("3.0.0", "3.1.1")] string serverVersionString) { var projectionDoc = projection == null ? (BsonDocument)null : BsonDocument.Parse(projection); var sortDoc = sort == null ? (BsonDocument)null : BsonDocument.Parse(sort); var writeConcern = writeConcernString == null ? null : WriteConcern.FromBsonDocument(BsonDocument.Parse(writeConcernString)); var serverVersion = SemanticVersion.Parse(serverVersionString); var subject = new FindOneAndReplaceOperation <BsonDocument>(_collectionNamespace, _filter, _replacement, BsonDocumentSerializer.Instance, _messageEncoderSettings) { BypassDocumentValidation = bypassDocumentValidation, IsUpsert = isUpsert, MaxTime = maxTimeMS.HasValue ? TimeSpan.FromMilliseconds(maxTimeMS.Value) : (TimeSpan?)null, Projection = projectionDoc, ReturnDocument = returnDocument, Sort = sortDoc, WriteConcern = writeConcern }; var expectedResult = new BsonDocument { { "findAndModify", _collectionNamespace.CollectionName }, { "query", _filter }, { "sort", sortDoc, sortDoc != null }, { "update", _replacement, _replacement != null }, { "new", returnDocument == ReturnDocument.After }, { "fields", projectionDoc, projectionDoc != null }, { "upsert", isUpsert }, { "maxTimeMS", () => maxTimeMS.Value, maxTimeMS.HasValue }, { "writeConcern", () => writeConcern.ToBsonDocument(), writeConcern != null && SupportedFeatures.IsFindAndModifyWriteConcernSupported(serverVersion) }, { "bypassDocumentValidation", () => bypassDocumentValidation.Value, bypassDocumentValidation.HasValue&& SupportedFeatures.IsBypassDocumentValidationSupported(serverVersion) } }; var result = subject.CreateCommand(serverVersion); result.Should().Be(expectedResult); }