Beispiel #1
0
        public void ExtractField_WithCustomRewriters()
        {
            // arrange
            ISchema schema = Schema.Create(
                FileResource.Open("Stitching.graphql"),
                c =>
            {
                c.RegisterType <DateTimeType>();
                c.RegisterDirective <DelegateDirectiveType>();
                c.RegisterDirective <ComputedDirectiveType>();
                c.Use(next => context => Task.CompletedTask);
            });

            DocumentNode query = Utf8GraphQLParser.Parse(
                FileResource.Open("StitchingQuery.graphql"));

            OperationDefinitionNode operation = query.Definitions
                                                .OfType <OperationDefinitionNode>().Single();

            FieldNode selection = operation
                                  .SelectionSet.Selections
                                  .OfType <FieldNode>().First();

            var rewriters = new List <IQueryDelegationRewriter>
            {
                new DummyRewriter()
            };

            // act
            var rewriter = new ExtractFieldQuerySyntaxRewriter(
                schema, rewriters);

            ExtractedField extractedField = rewriter.ExtractField(
                "customer", query, operation, selection,
                schema.GetType <ObjectType>("Query"));

            // assert
            DocumentNode document = RemoteQueryBuilder.New()
                                    .SetRequestField(extractedField.Field)
                                    .AddFragmentDefinitions(extractedField.Fragments)
                                    .AddVariables(extractedField.Variables)
                                    .Build();

            QuerySyntaxSerializer.Serialize(document)
            .MatchSnapshot();
        }
Beispiel #2
0
        private static IReadOnlyQueryRequest CreateQuery(
            IMiddlewareContext context,
            NameString schemaName,
            IImmutableStack <SelectionPathComponent> path)
        {
            var fieldRewriter = new ExtractFieldQuerySyntaxRewriter(
                context.Schema,
                context.Service <IEnumerable <IQueryDelegationRewriter> >());

            OperationType operationType =
                context.Schema.IsRootType(context.ObjectType)
                    ? context.Operation.Operation
                    : OperationType.Query;

            ExtractedField extractedField = fieldRewriter.ExtractField(
                schemaName, context.Document, context.Operation,
                context.FieldSelection, context.ObjectType);

            IEnumerable <VariableValue> scopedVariables =
                ResolveScopedVariables(
                    context, schemaName, operationType, path);

            IReadOnlyCollection <VariableValue> variableValues =
                CreateVariableValues(
                    context, scopedVariables, extractedField);

            DocumentNode query = RemoteQueryBuilder.New()
                                 .SetOperation(operationType)
                                 .SetSelectionPath(path)
                                 .SetRequestField(extractedField.Field)
                                 .AddVariables(CreateVariableDefs(variableValues))
                                 .AddFragmentDefinitions(extractedField.Fragments)
                                 .Build();

            var requestBuilder = QueryRequestBuilder.New();

            AddVariables(context, schemaName,
                         requestBuilder, query, variableValues);

            requestBuilder.SetQuery(query);
            requestBuilder.AddProperty(
                WellKnownProperties.IsAutoGenerated,
                true);

            return(requestBuilder.Create());
        }
        public void ExtractField(string schemaFile, string queryFile)
        {
            // arrange
            ISchema schema = Schema.Create(
                FileResource.Open(schemaFile),
                c =>
            {
                c.RegisterType <DateTimeType>();
                c.RegisterDirective <DelegateDirectiveType>();
                c.RegisterDirective <ComputedDirectiveType>();
                c.Use(next => context => Task.CompletedTask);
            });

            DocumentNode query = Parser.Default.Parse(
                FileResource.Open(queryFile));

            OperationDefinitionNode operation = query.Definitions
                                                .OfType <OperationDefinitionNode>().Single();

            FieldNode selection = operation
                                  .SelectionSet.Selections
                                  .OfType <FieldNode>().First();

            // act
            var rewriter = new ExtractFieldQuerySyntaxRewriter(schema,
                                                               Array.Empty <IQueryDelegationRewriter>());
            ExtractedField extractedField = rewriter.ExtractField(
                "customer", query, operation, selection,
                schema.GetType <ObjectType>("Query"));

            // assert
            DocumentNode document = RemoteQueryBuilder.New()
                                    .SetRequestField(extractedField.Field)
                                    .AddFragmentDefinitions(extractedField.Fragments)
                                    .AddVariables(extractedField.Variables)
                                    .Build();

            QuerySyntaxSerializer.Serialize(document)
            .MatchSnapshot(new SnapshotNameExtension(
                               schemaFile, queryFile));
        }