示例#1
0
        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);
        }
示例#3
0
        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);
        }