public void Constructor_should_initialize_object() { var subject = new FindOneAndDeleteOperation<BsonDocument>(_collectionNamespace, _filter, BsonDocumentSerializer.Instance, _messageEncoderSettings); subject.CollectionNamespace.Should().Be(_collectionNamespace); subject.Filter.Should().Be(_filter); subject.ResultSerializer.Should().NotBeNull(); subject.MessageEncoderSettings.Should().BeEquivalentTo(_messageEncoderSettings); }
public void Constructor_should_initialize_object() { var subject = new FindOneAndDeleteOperation<BsonDocument>(_collectionNamespace, _filter, BsonDocumentSerializer.Instance, _messageEncoderSettings); subject.CollectionNamespace.Should().BeSameAs(_collectionNamespace); subject.Filter.Should().BeSameAs(_filter); subject.ResultSerializer.Should().BeSameAs(BsonDocumentSerializer.Instance); subject.MessageEncoderSettings.Should().BeSameAs(_messageEncoderSettings); subject.Collation.Should().BeNull(); subject.MaxTime.Should().NotHaveValue(); subject.Projection.Should().BeNull(); subject.Sort.Should().BeNull(); subject.WriteConcern.Should().BeNull(); }
public override Task <TProjection> FindOneAndDeleteAsync <TProjection>(FilterDefinition <TDocument> filter, FindOneAndDeleteOptions <TDocument, TProjection> options, CancellationToken cancellationToken) { Ensure.IsNotNull(filter, nameof(filter)); options = options ?? new FindOneAndDeleteOptions <TDocument, TProjection>(); var projection = options.Projection ?? new ClientSideDeserializationProjectionDefinition <TDocument, TProjection>(); var renderedProjection = projection.Render(_documentSerializer, _settings.SerializerRegistry); var operation = new FindOneAndDeleteOperation <TProjection>( _collectionNamespace, filter.Render(_documentSerializer, _settings.SerializerRegistry), new FindAndModifyValueDeserializer <TProjection>(renderedProjection.ProjectionSerializer), _messageEncoderSettings) { MaxTime = options.MaxTime, Projection = renderedProjection.Document, Sort = options.Sort == null ? null : options.Sort.Render(_documentSerializer, _settings.SerializerRegistry), WriteConcern = _settings.WriteConcern }; return(ExecuteWriteOperationAsync(operation, cancellationToken)); }
public void Execute_should_throw_when_Collation_is_set_and_not_supported( [Values(false, true)] bool async) { RequireServer.Check().DoesNotSupport(Feature.Collation); var subject = new FindOneAndDeleteOperation<BsonDocument>(_collectionNamespace, _filter, _findAndModifyValueDeserializer, _messageEncoderSettings) { Collation = new Collation("en_US") }; var exception = Record.Exception(() => ExecuteOperation(subject, async)); exception.Should().BeOfType<NotSupportedException>(); }
public void Execute_should_return_expected_result_when_Collation_is_set( [Values(false, true)] bool async) { RequireServer.Check().Supports(Feature.Collation); EnsureTestData(); var filter = BsonDocument.Parse("{ y : 'a' }"); var subject = new FindOneAndDeleteOperation<BsonDocument>(_collectionNamespace, filter, _findAndModifyValueDeserializer, _messageEncoderSettings) { Collation = new Collation("en_US", caseLevel: false, strength: CollationStrength.Primary), Sort = BsonDocument.Parse("{ _id : -1 }") }; var result = ExecuteOperation(subject, async); result.Should().Be("{ _id : 11, x : 2, y : 'A' }"); ReadAllFromCollection().Should().HaveCount(1); }
public void Execute_should_return_expected_result( [Values(false, true)] bool async) { RequireServer.Check(); EnsureTestData(); var filter = BsonDocument.Parse("{ x : 1 }"); var subject = new FindOneAndDeleteOperation<BsonDocument>(_collectionNamespace, filter, _findAndModifyValueDeserializer, _messageEncoderSettings); var result = ExecuteOperation(subject, async); result.Should().Be("{ _id : 10, x : 1, y : 'a' }"); ReadAllFromCollection().Should().HaveCount(1); }
public async Task ExecuteAsync_when_document_does_not_exist() { var subject = new FindOneAndDeleteOperation<BsonDocument>( _collectionNamespace, BsonDocument.Parse("{x: 2}"), new FindAndModifyValueDeserializer<BsonDocument>(BsonDocumentSerializer.Instance), _messageEncoderSettings); var result = await ExecuteOperationAsync(subject); result.Should().BeNull(); var serverList = await ReadAllFromCollectionAsync(); serverList.Should().HaveCount(1); }
public void Execute_should_throw_when_there_is_a_write_concern_error( [Values(false, true)] bool async) { var subject = new FindOneAndDeleteOperation<BsonDocument>( _collectionNamespace, BsonDocument.Parse("{ x : 1 }"), new FindAndModifyValueDeserializer<BsonDocument>(BsonDocumentSerializer.Instance), _messageEncoderSettings) { WriteConcern = new WriteConcern(9) }; Action action = () => ExecuteOperation(subject, async); var exception = action.ShouldThrow<MongoWriteConcernException>().Which; var commandResult = exception.Result; var result = commandResult["value"].AsBsonDocument; result.Should().Be("{_id: 10, x: 1}"); var serverList = ReadAllFromCollection(async); serverList.Should().BeEmpty(); }
public void Collation_get_and_set_should_work( [Values(null, "en_US", "fr_CA")] string locale) { var subject = new FindOneAndDeleteOperation<BsonDocument>(_collectionNamespace, _filter, BsonDocumentSerializer.Instance, _messageEncoderSettings); var value = locale == null ? null : new Collation(locale); subject.Collation = value; var result = subject.Collation; result.Should().BeSameAs(value); }
public void CreateCommand_should_return_the_expected_result_when_Collation_is_set( [Values(null, "en_US", "fr_CA")] string locale) { var collation = locale == null ? null : new Collation(locale); var subject = new FindOneAndDeleteOperation<BsonDocument>(_collectionNamespace, _filter, BsonDocumentSerializer.Instance, _messageEncoderSettings) { Collation = collation }; var result = subject.CreateCommand(Feature.Collation.FirstSupportedVersion); var expectedResult = new BsonDocument { { "findAndModify", _collectionNamespace.CollectionName }, { "query", _filter }, { "remove", true }, { "collation", () => collation.ToBsonDocument(), collation != null } }; result.Should().Be(expectedResult); }
public void CreateCommand_should_return_the_expected_result() { var subject = new FindOneAndDeleteOperation<BsonDocument>(_collectionNamespace, _filter, BsonDocumentSerializer.Instance, _messageEncoderSettings); var result = subject.CreateCommand(null); var expectedResult = new BsonDocument { { "findAndModify", _collectionNamespace.CollectionName }, { "query", _filter }, { "remove", true } }; result.Should().Be(expectedResult); }
public void WriteConcern_get_and_set_should_work( [Values(null, 1, 2)] int? w) { var subject = new FindOneAndDeleteOperation<BsonDocument>(_collectionNamespace, _filter, BsonDocumentSerializer.Instance, _messageEncoderSettings); var value = w.HasValue ? new WriteConcern(w.Value) : null; subject.WriteConcern = value; var result = subject.WriteConcern; result.Should().BeSameAs(value); }
public void Sort_get_and_set_should_work( [Values(null, "{ x : 1 }", "{ y : 1 }")] string valueString) { var subject = new FindOneAndDeleteOperation<BsonDocument>(_collectionNamespace, _filter, BsonDocumentSerializer.Instance, _messageEncoderSettings); var value = valueString == null ? null : BsonDocument.Parse(valueString); subject.Sort = value; var result = subject.Sort; result.Should().BeSameAs(value); }
public void MaxTime_get_and_set_should_work( [Values(null, 1, 2)] int? seconds) { var subject = new FindOneAndDeleteOperation<BsonDocument>(_collectionNamespace, _filter, BsonDocumentSerializer.Instance, _messageEncoderSettings); var value = seconds.HasValue ? TimeSpan.FromSeconds(seconds.Value) : (TimeSpan?)null; subject.MaxTime = value; var result = subject.MaxTime; result.Should().Be(value); }
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) { var projectionDoc = projection == null ? (BsonDocument)null : BsonDocument.Parse(projection); var sortDoc = sort == null ? (BsonDocument)null : BsonDocument.Parse(sort); var subject = new FindOneAndDeleteOperation<BsonDocument>(_collectionNamespace, _filter, BsonDocumentSerializer.Instance, _messageEncoderSettings) { MaxTime = maxTimeMS.HasValue ? TimeSpan.FromMilliseconds(maxTimeMS.Value) : (TimeSpan?)null, Projection = projectionDoc, Sort = sortDoc }; var expectedResult = new BsonDocument { { "findAndModify", _collectionNamespace.CollectionName }, { "query", _filter }, { "sort", sortDoc, sortDoc != null }, { "remove", true }, { "fields", projectionDoc, projectionDoc != null }, { "maxTimeMS", () => maxTimeMS.Value, maxTimeMS.HasValue } }; var result = subject.CreateCommand(); result.Should().Be(expectedResult); }
public void Execute_should_throw_when_there_is_a_write_concern_error( [Values(false, true)] bool async) { RequireServer.Check().Supports(Feature.FindAndModifyWriteConcern).ClusterType(ClusterType.ReplicaSet); EnsureTestData(); var filter = BsonDocument.Parse("{ x : 1 }"); var resultSerializer = new FindAndModifyValueDeserializer<BsonDocument>(BsonDocumentSerializer.Instance); var subject = new FindOneAndDeleteOperation<BsonDocument>(_collectionNamespace, filter, resultSerializer, _messageEncoderSettings) { WriteConcern = new WriteConcern(9) }; var exception = Record.Exception(() => ExecuteOperation(subject, async)); var writeConcernException = exception.Should().BeOfType<MongoWriteConcernException>().Subject; var commandResult = writeConcernException.Result; var result = commandResult["value"].AsBsonDocument; result.Should().Be("{ _id : 10, x : 1, y : 'a' }"); ReadAllFromCollection().Should().HaveCount(1); }
public void CreateCommand_should_return_the_expected_result_when_MaxTime_is_set( [Values(null, 1, 2)] int? seconds) { var maxTime = seconds.HasValue ? TimeSpan.FromSeconds(seconds.Value) : (TimeSpan?)null; var subject = new FindOneAndDeleteOperation<BsonDocument>(_collectionNamespace, _filter, BsonDocumentSerializer.Instance, _messageEncoderSettings) { MaxTime = maxTime }; var result = subject.CreateCommand(null); var expectedResult = new BsonDocument { { "findAndModify", _collectionNamespace.CollectionName }, { "query", _filter }, { "remove", true }, { "maxTimeMS", () => seconds.Value * 1000, seconds.HasValue } }; result.Should().Be(expectedResult); }
public void CreateCommand_should_return_the_expected_result_when_Sort_is_set( [Values(null, "{ x : 1 }", "{ y : 1 }")] string sortString) { var sort = sortString == null ? null : BsonDocument.Parse(sortString); var subject = new FindOneAndDeleteOperation<BsonDocument>(_collectionNamespace, _filter, BsonDocumentSerializer.Instance, _messageEncoderSettings) { Sort = sort }; var result = subject.CreateCommand(null); var expectedResult = new BsonDocument { { "findAndModify", _collectionNamespace.CollectionName }, { "query", _filter }, { "remove", true }, { "sort", sort, sort != null } }; result.Should().Be(expectedResult); }
public void Execute_against_an_existing_document( [Values(false, true)] bool async) { var subject = new FindOneAndDeleteOperation<BsonDocument>( _collectionNamespace, BsonDocument.Parse("{x: 1}"), new FindAndModifyValueDeserializer<BsonDocument>(BsonDocumentSerializer.Instance), _messageEncoderSettings); var result = ExecuteOperation(subject, async); result.Should().Be("{_id: 10, x: 1}"); var serverList = ReadAllFromCollection(async); serverList.Should().BeEmpty(); }
public void CreateCommand_should_return_the_expected_result_when_WriteConcern_is_set( [Values(null, 1, 2)] int? w) { var writeConcern = w.HasValue ? new WriteConcern(w.Value) : null; var subject = new FindOneAndDeleteOperation<BsonDocument>(_collectionNamespace, _filter, BsonDocumentSerializer.Instance, _messageEncoderSettings) { WriteConcern = writeConcern }; var result = subject.CreateCommand(Feature.FindAndModifyWriteConcern.FirstSupportedVersion); var expectedResult = new BsonDocument { { "findAndModify", _collectionNamespace.CollectionName }, { "query", _filter }, { "remove", true }, { "writeConcern", () => writeConcern.ToBsonDocument(), writeConcern != null } }; result.Should().Be(expectedResult); }
public void Execute_when_document_does_not_exist( [Values(false, true)] bool async) { var subject = new FindOneAndDeleteOperation<BsonDocument>( _collectionNamespace, BsonDocument.Parse("{x: 2}"), new FindAndModifyValueDeserializer<BsonDocument>(BsonDocumentSerializer.Instance), _messageEncoderSettings); var result = ExecuteOperation(subject, async); result.Should().BeNull(); var serverList = ReadAllFromCollection(async); serverList.Should().HaveCount(1); }
public void CreateCommand_should_throw_when_Collation_is_set_and_not_supported() { var subject = new FindOneAndDeleteOperation<BsonDocument>(_collectionNamespace, _filter, BsonDocumentSerializer.Instance, _messageEncoderSettings) { Collation = new Collation("en_US") }; var exception = Record.Exception(() => subject.CreateCommand(Feature.Collation.LastNotSupportedVersion)); exception.Should().BeOfType<NotSupportedException>(); }
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 async Task ExecuteAsync_against_an_existing_document() { var subject = new FindOneAndDeleteOperation<BsonDocument>( _collectionNamespace, BsonDocument.Parse("{x: 1}"), new FindAndModifyValueDeserializer<BsonDocument>(BsonDocumentSerializer.Instance), _messageEncoderSettings); var result = await ExecuteOperationAsync(subject); result.Should().Be("{_id: 10, x: 1}"); var serverList = await ReadAllFromCollectionAsync(); serverList.Should().BeEmpty(); }