Exemplo n.º 1
0
        public Task ParseQueryMiddleware_InvalidQuery_DocumentNull()
        {
            // arrange
            Schema schema = CreateSchema();

            IReadOnlyQueryRequest request = new QueryRequest("{");

            var context = new QueryContext
                          (
                schema,
                MiddlewareTools.CreateEmptyRequestServiceScope(),
                request,
                fs => fs.Field.Middleware
                          );

            var diagnostics = new QueryExecutionDiagnostics(
                new DiagnosticListener("Foo"),
                new IDiagnosticObserver[0]);

            var middleware = new ParseQueryMiddleware(
                c => Task.CompletedTask,
                new DefaultQueryParser(),
                new Cache <DocumentNode>(10),
                diagnostics);

            // act
            Func <Task> invoke = () => middleware.InvokeAsync(context);

            // assert
            return(Assert.ThrowsAsync <SyntaxException>(invoke));
        }
Exemplo n.º 2
0
        public QueryExecutor(
            ISchema schema,
            IServiceProvider applicationServices,
            QueryDelegate queryDelegate,
            FieldMiddleware fieldMiddleware)
        {
            Schema = schema
                     ?? throw new ArgumentNullException(nameof(schema));
            _applicationServices = applicationServices
                                   ?? throw new ArgumentNullException(nameof(applicationServices));
            _queryDelegate = queryDelegate
                             ?? throw new ArgumentNullException(nameof(queryDelegate));

            if (Schema.Services != null)
            {
                IEnumerable <IDiagnosticObserver> observers = Schema.Services
                                                              .GetService <IEnumerable <IDiagnosticObserver> >();

                if (observers != null)
                {
                    QueryExecutionDiagnostics diagnosticEvents = _applicationServices
                                                                 .GetService <QueryExecutionDiagnostics>();
                    diagnosticEvents.Subscribe(observers);
                }
            }

            _fieldMiddlewareCompiler = new FieldMiddlewareCompiler(
                schema, fieldMiddleware);
        }
Exemplo n.º 3
0
        public async Task ParseQueryMiddleware_ValidQuery_DocumentIsSet()
        {
            // arrange
            Schema schema = CreateSchema();

            IReadOnlyQueryRequest request = new QueryRequest("{ a }");

            var context = new QueryContext
                          (
                schema,
                MiddlewareTools.CreateEmptyRequestServiceScope(),
                request,
                fs => fs.Field.Middleware
                          );

            var diagnostics = new QueryExecutionDiagnostics(
                new DiagnosticListener("Foo"),
                new IDiagnosticObserver[0]);

            var middleware = new ParseQueryMiddleware(
                c => Task.CompletedTask,
                new DefaultQueryParser(),
                new Cache <DocumentNode>(10),
                diagnostics);

            // act
            await middleware.InvokeAsync(context);

            // assert
            Assert.NotNull(context.Document);
            context.Document.Snapshot();
        }
Exemplo n.º 4
0
 public InstrumentationMiddleware(
     QueryDelegate next,
     QueryExecutionDiagnostics diagnosticEvents)
 {
     _next             = next ?? throw new ArgumentNullException(nameof(next));
     _diagnosticEvents = diagnosticEvents
                         ?? throw new ArgumentNullException(nameof(diagnosticEvents));
 }
Exemplo n.º 5
0
        public void CloneExecutionContext()
        {
            // arrange
            var schema = Schema.Create(
                "type Query { foo: String }",
                c => c.Use(next => context => Task.CompletedTask));

            DocumentNode query = Utf8GraphQLParser.Parse("{ foo }");

            var errorHandler = new Mock <IErrorHandler>();

            var services = new Mock <IServiceProvider>();

            services.Setup(t => t.GetService(typeof(IErrorHandler)))
            .Returns(errorHandler.Object);

            IRequestServiceScope serviceScope = services.Object
                                                .CreateRequestServiceScope();

            var variables = new Mock <IVariableValueCollection>();

            var operation = new Mock <IOperation>();

            operation.Setup(t => t.Document).Returns(query);
            operation.Setup(t => t.Variables).Returns(variables.Object);

            var contextData = new Dictionary <string, object>
            {
                { "abc", "123" }
            };

            var diagnostics = new QueryExecutionDiagnostics(
                new DiagnosticListener("Foo"),
                new IDiagnosticObserver[0]);

            var requestContext = new RequestContext(
                serviceScope,
                (f, s) => null,
                new CachedQuery("{ foo }", Utf8GraphQLParser.Parse("{ foo }")),
                contextData,
                diagnostics);

            // act
            var executionContext = new ExecutionContext(
                schema, operation.Object, requestContext,
                CancellationToken.None);

            IExecutionContext cloned = executionContext.Clone();

            // assert
            Assert.Equal(contextData, executionContext.ContextData);
            Assert.Equal(contextData, cloned.ContextData);
            Assert.False(object.ReferenceEquals(
                             executionContext.Result, cloned.Result));
            Assert.False(object.ReferenceEquals(
                             executionContext.ContextData, cloned.ContextData));
        }
Exemplo n.º 6
0
 public ValidateQueryMiddleware(
     QueryDelegate next,
     IQueryValidator validator,
     Cache <QueryValidationResult> validatorCache,
     QueryExecutionDiagnostics diagnostics)
 {
     _next = next ??
             throw new ArgumentNullException(nameof(next));
     _validator = validator ??
                  throw new ArgumentNullException(nameof(validator));
     _validatorCache = validatorCache ??
                       new Cache <QueryValidationResult>(Defaults.CacheSize);
     _diagnostics = diagnostics ??
                    throw new ArgumentNullException(nameof(diagnostics));
 }
Exemplo n.º 7
0
 public RequestContext(
     IRequestServiceScope serviceScope,
     Func <FieldSelection, FieldDelegate> middlewareResolver,
     IDictionary <string, object> contextData,
     QueryExecutionDiagnostics diagnostics)
 {
     ServiceScope = serviceScope
                    ?? throw new ArgumentNullException(nameof(serviceScope));
     _resolveMiddleware = middlewareResolver
                          ?? throw new ArgumentNullException(nameof(middlewareResolver));
     ContextData = contextData
                   ?? throw new ArgumentNullException(nameof(contextData));
     Diagnostics = diagnostics
                   ?? throw new ArgumentNullException(nameof(diagnostics));
 }
 public ExecuteOperationMiddleware(
     QueryDelegate next,
     IExecutionStrategyResolver strategyResolver,
     Cache <DirectiveMiddlewareCompiler> directiveCache,
     QueryExecutionDiagnostics diagnosticEvents)
 {
     _next = next ??
             throw new ArgumentNullException(nameof(next));
     _strategyResolver = strategyResolver ??
                         throw new ArgumentNullException(nameof(strategyResolver));
     _cache = directiveCache ??
              throw new ArgumentNullException(nameof(directiveCache));
     _diagnosticEvents = diagnosticEvents ??
                         throw new ArgumentNullException(nameof(diagnosticEvents));
 }
Exemplo n.º 9
0
 public ParseQueryMiddleware(
     QueryDelegate next,
     IQueryParser parser,
     Cache <ICachedQuery> queryCache,
     QueryExecutionDiagnostics diagnosticEvents)
 {
     _next = next
             ?? throw new ArgumentNullException(nameof(next));
     _parser = parser
               ?? throw new ArgumentNullException(nameof(parser));
     _queryCache = queryCache
                   ?? throw new ArgumentNullException(nameof(queryCache));
     _diagnosticEvents = diagnosticEvents
                         ?? throw new ArgumentNullException(nameof(diagnosticEvents));
 }
        public ValidateQueryMiddleware(
            QueryDelegate next,
            IDocumentValidatorFactory validatorFactory,
            Cache <DocumentValidatorResult> validatorCache,
            QueryExecutionDiagnostics diagnostics)
        {
            if (validatorFactory == null)
            {
                throw new ArgumentNullException(nameof(validatorFactory));
            }

            _next           = next ?? throw new ArgumentNullException(nameof(next));
            _validator      = validatorFactory.CreateValidator();
            _validatorCache = validatorCache ??
                              new Cache <DocumentValidatorResult>(Defaults.CacheSize);
            _diagnostics = diagnostics ?? throw new ArgumentNullException(nameof(diagnostics));
        }
Exemplo n.º 11
0
 public RequestContext(
     IRequestServiceScope serviceScope,
     Func <ObjectField, FieldNode, FieldDelegate> middlewareFactory,
     ICachedQuery cachedQuery,
     IDictionary <string, object> contextData,
     QueryExecutionDiagnostics diagnostics)
 {
     ServiceScope = serviceScope
                    ?? throw new ArgumentNullException(nameof(serviceScope));
     _factory = middlewareFactory
                ?? throw new ArgumentNullException(nameof(middlewareFactory));
     CachedQuery = cachedQuery
                   ?? throw new ArgumentNullException(nameof(cachedQuery));
     ContextData = contextData
                   ?? throw new ArgumentNullException(nameof(contextData));
     Diagnostics = diagnostics
                   ?? throw new ArgumentNullException(nameof(diagnostics));
 }
        public async Task ExecuteOperationMiddleware_Mutation_ExecutedSerially()
        {
            // arrange
            var state = 0;

            var schema = Schema.Create(
                FileResource.Open("MutationExecutionSchema.graphql"),
                cnf =>
            {
                cnf.BindResolver(() => state)
                .To("Query", "state");
                cnf.BindResolver(() => state)
                .To("CurrentState", "theNumber");
                cnf.BindResolver(
                    ctx => state = ctx.Argument <int>("newNumber"))
                .To("Mutation", "changeTheNumber");
            });

            DocumentNode query = Parser.Default.Parse(
                FileResource.Open("MutationExecutionQuery.graphql"));

            OperationDefinitionNode operationNode = query.Definitions
                                                    .OfType <OperationDefinitionNode>()
                                                    .FirstOrDefault();

            var operation = new Operation
                            (
                query,
                operationNode,
                new VariableValueBuilder(
                    schema,
                    operationNode)
                .CreateValues(new Dictionary <string, object>()),
                schema.MutationType,
                null
                            );

            IReadOnlyQueryRequest request = new QueryRequest("{ a }");

            var observable = new DiagnosticListener("Foo");

            var services = new DictionaryServiceProvider(
                new KeyValuePair <Type, object>(
                    typeof(IErrorHandler),
                    ErrorHandler.Default),
                new KeyValuePair <Type, object>(
                    typeof(DiagnosticListener),
                    observable),
                new KeyValuePair <Type, object>(
                    typeof(DiagnosticSource),
                    observable));

            var context = new QueryContext
                          (
                schema,
                services.CreateRequestServiceScope(),
                request,
                fs => fs.Field.Middleware
                          )
            {
                Document  = query,
                Operation = operation
            };

            var options          = new QueryExecutionOptions();
            var strategyResolver = new ExecutionStrategyResolver(options);

            var diagnostics = new QueryExecutionDiagnostics(
                new DiagnosticListener("Foo"),
                new IDiagnosticObserver[0],
                TracingPreference.Never);

            var middleware = new ExecuteOperationMiddleware(
                c => Task.CompletedTask,
                strategyResolver,
                new Cache <DirectiveMiddlewareCompiler>(10),
                diagnostics);

            // act
            await middleware.InvokeAsync(context);

            // assert
            Assert.NotNull(context.Result);
            context.Result.Snapshot();
        }