private static IResolveFieldContext CreateResolveFieldContext(ISchema schema, string query) { var documentBuilder = new GraphQLDocumentBuilder(); var document = documentBuilder.Build(query); schema.Initialize(); var executionContext = new ExecutionContext { Document = document, Schema = schema, Fragments = document.Fragments, Operation = document.Operations.First() }; var root = new RootExecutionNode(schema.Query) { Result = executionContext.RootValue }; var fields = ExecutionHelper.CollectFields(executionContext, schema.Query, executionContext.Operation.SelectionSet); ExecutionStrategy.SetSubFieldNodes(executionContext, root, fields); var subNode = root.SubFields.FirstOrDefault(); return(new ReadonlyResolveFieldContext(subNode.Value, executionContext)); }
public void MergeFieldAndFragment() { var fragment = new FragmentDefinition(new NameNode("fragment")); var fragmentSelection = new SelectionSet(); fragmentSelection.Add(FirstTestField); fragment.SelectionSet = fragmentSelection; fragment.Type = new GraphQL.Language.AST.NamedType( new NameNode("Person")); var fragments = new Fragments { fragment }; var schema = new Schema(); schema.RegisterType(new PersonType()); var context = new ExecutionContext { Fragments = fragments, Schema = schema }; var fragSpread = new FragmentSpread(new NameNode("fragment")); var outerSelection = new SelectionSet(); outerSelection.Add(fragSpread); outerSelection.Add(SecondTestField); var fields = ExecutionHelper.CollectFields( context, new PersonType(), outerSelection); fields.ShouldHaveSingleItem(); fields["test"].SelectionSet.Selections.ShouldContain(x => x.IsEqualTo(FirstInnerField)); fields["test"].SelectionSet.Selections.ShouldContain(x => x.IsEqualTo(SecondInnerField)); }
public void BeMergedCorrectlyInCaseOfFields() { var outerSelection = new SelectionSet(); outerSelection.Add(FirstTestField); outerSelection.Add(SecondTestField); var fields = ExecutionHelper.CollectFields(new ExecutionContext(), null, outerSelection); fields.ContainsKey("test").ShouldBeTrue(); fields["test"].SelectionSet.Selections.ShouldContain(x => x.IsEqualTo(FirstInnerField)); fields["test"].SelectionSet.Selections.ShouldContain(x => x.IsEqualTo(SecondInnerField)); }
public void NotMergeAliasedFields() { var outerSelection = new SelectionSet(); outerSelection.Add(FirstTestField); outerSelection.Add(AliasedTestField); var fields = ExecutionHelper.CollectFields(new ExecutionContext(), null, outerSelection); fields["test"].SelectionSet.Selections.ShouldHaveSingleItem(); fields["test"].SelectionSet.Selections.ShouldContain(x => x.IsEqualTo(FirstInnerField)); fields["alias"].SelectionSet.Selections.ShouldHaveSingleItem(); fields["alias"].SelectionSet.Selections.ShouldContain(x => x.IsEqualTo(SecondInnerField)); }