protected override void Given()
        {
            Require.MinimumServerVersion("2.7.6");

            var command = new BsonDocument("count", CollectionNamespace.CollectionName);

            _subject = new ExplainOperation(DatabaseNamespace, command, MessageEncoderSettings);
        }
        public void Constructor_should_initialize_subject()
        {
            var subject = new ExplainOperation(_databaseNamespace, _command, _messageEncoderSettings);

            subject.DatabaseNamespace.Should().Be(_databaseNamespace);
            subject.Command.Should().Be(_command);
            subject.MessageEncoderSettings.Should().BeEquivalentTo(_messageEncoderSettings);
            subject.Verbosity.Should().Be(ExplainVerbosity.QueryPlanner);
        }
        public void CreateCommand_should_return_expected_result(ExplainVerbosity verbosity, string verbosityString)
        {
            var subject = new ExplainOperation(_databaseNamespace, _command, _messageEncoderSettings)
            {
                Verbosity = verbosity
            };

            var expectedResult = new BsonDocument
            {
                { "explain", _command },
                { "verbosity", verbosityString }
            };

            var result = subject.CreateCommand();

            result.Should().Be(expectedResult);
        }
        public void Execute_should_not_throw_when_collection_does_not_exist(
            [Values(false, true)]
            bool async)
        {
            RequireServer.Where(minimumVersion: "2.7.6");
            EnsureCollectionExists();
            var subject = new ExplainOperation(_databaseNamespace, _command, _messageEncoderSettings);

            var result = ExecuteOperation((IReadOperation<BsonDocument>)subject, async);

            result.Should().NotBeNull();
        }
        public async Task ExecuteAsync_should_not_throw_when_collection_does_not_exist()
        {
            var subject = new ExplainOperation(_databaseNamespace, _command, _messageEncoderSettings);

            var result = await ExecuteOperationAsync((IReadOperation<BsonDocument>)subject);

            result.Should().NotBeNull();
        }
        public void Execute_should_not_throw_when_collection_does_not_exist(
            [Values(false, true)]
            bool async)
        {
            var subject = new ExplainOperation(_databaseNamespace, _command, _messageEncoderSettings);

            var result = ExecuteOperation((IReadOperation<BsonDocument>)subject, async);

            result.Should().NotBeNull();
        }