public void CreateView_should_execute_a_CreateViewOperation_with_the_expected_SerializerRegistry( [Values(false, true)] bool isSerializerRegistryNull, [Values(false, true)] bool async) { var mockPipeline = new Mock<PipelineDefinition<BsonDocument, BsonDocument>>(); var documentSerializer = BsonSerializer.SerializerRegistry.GetSerializer<BsonDocument>(); var mockSerializerRegistry = new Mock<IBsonSerializerRegistry>(); mockSerializerRegistry.Setup(r => r.GetSerializer(typeof(BsonDocument))).Returns(BsonDocumentSerializer.Instance); mockSerializerRegistry.Setup(r => r.GetSerializer<BsonDocument>()).Returns(BsonDocumentSerializer.Instance); var serializerRegistry = isSerializerRegistryNull ? null : mockSerializerRegistry.Object; var stages = new[] { new BsonDocument("$match", new BsonDocument("x", 1)) }; var renderedPipeline = new RenderedPipelineDefinition<BsonDocument>(stages, BsonDocumentSerializer.Instance); mockPipeline.Setup(p => p.Render(documentSerializer, serializerRegistry ?? BsonSerializer.SerializerRegistry)).Returns(renderedPipeline); var options = new CreateViewOptions<BsonDocument> { SerializerRegistry = serializerRegistry }; if (async) { _subject.CreateViewAsync<BsonDocument, BsonDocument>("viewName", "viewOn", mockPipeline.Object, options, CancellationToken.None).GetAwaiter().GetResult(); } else { _subject.CreateView<BsonDocument, BsonDocument>("viewName", "viewOn", mockPipeline.Object, options, CancellationToken.None); } var call = _operationExecutor.GetWriteCall<BsonDocument>(); var operation = call.Operation.Should().BeOfType<CreateViewOperation>().Subject; operation.Pipeline.Should().Equal(stages); // test output of call to Render }
public static Task <BsonDocument> ExplainAggregation <TDocument, TResult>( this IMongoCollection <TDocument> collection , PipelineDefinition <TDocument, TResult> aggregationPipeline, ExplainVerbosity verbosity) { IBsonSerializerRegistry serializerRegistry = collection.Settings.SerializerRegistry; IBsonSerializer <TDocument> serializer = serializerRegistry.GetSerializer <TDocument>(); MessageEncoderSettings encoderSettings = collection.GetMessageEncoderSettings(); RenderedPipelineDefinition <TResult> renderedDefinition = aggregationPipeline.Render(serializer, serializerRegistry); IReadOperation <BsonDocument> explainOperation = new AggregateOperation <TResult>( collection.CollectionNamespace, renderedDefinition.Documents, renderedDefinition.OutputSerializer, encoderSettings) .ToExplainOperation(verbosity); ICluster cluster = GetCluster(collection); ICoreSessionHandle session = NoCoreSession.NewHandle(); using (IReadBinding binding = new ReadPreferenceBinding(cluster, collection.Settings.ReadPreference, session)) { var cancelToken = new CancellationToken(); return(explainOperation.ExecuteAsync(binding, cancelToken)); } }