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));
        }
Beispiel #2
0
        public void DuplicatesWillBeIgnoredOnFieldMerging()
        {
            // arrange
            ISchema schema = SchemaBuilder.New()
                             .AddStarWarsTypes()
                             .Create();

            DocumentNode document = Utf8GraphQLParser.Parse(
                FileResource.Open("InvalidIntrospectionQuery.graphql"));

            var originalOperation = ((OperationDefinitionNode)document.Definitions[0]);
            OperationDefinitionNode operationWithDuplicates = originalOperation.WithSelectionSet(
                originalOperation.SelectionSet.WithSelections(
                    new List <ISelectionNode>
            {
                originalOperation.SelectionSet.Selections[0],
                originalOperation.SelectionSet.Selections[0]
            }));

            document = document.WithDefinitions(
                new List <IDefinitionNode>(document.Definitions.Skip(1))
            {
                operationWithDuplicates
            });

            ServiceProvider services = new ServiceCollection()
                                       .AddValidation()
                                       .Services
                                       .BuildServiceProvider();

            IDocumentValidatorFactory factory   = services.GetRequiredService <IDocumentValidatorFactory>();
            IDocumentValidator        validator = factory.CreateValidator();

            // act
            DocumentValidatorResult result = validator.Validate(schema, document);

            // assert
            Assert.False(result.HasErrors);
        }