public void FindUndeclaredVariablesFragmentDefinition() { // arrange ISchema schema = SchemaBuilder.New() .AddStarWarsTypes() .Create(); DocumentNode document = Utf8GraphQLParser.Parse( @" query getHero { ... q } fragment q on Query { hero(episode: $ep) { name } } "); OperationDefinitionNode operation = document.Definitions .OfType <OperationDefinitionNode>() .First(); var visitor = new CollectVariablesVisitor(schema); var visitationMap = new CollectVariablesVisitationMap(); visitationMap.Initialize( document.Definitions.OfType <FragmentDefinitionNode>() .ToDictionary(t => t.Name.Value)); // act operation.Accept( visitor, visitationMap, node => VisitorAction.Continue); // assert var variables = operation.VariableDefinitions.ToList(); variables.AddRange(visitor.VariableDeclarations); operation = operation.WithVariableDefinitions(variables); var definitions = new List <IDefinitionNode>(); definitions.Add(operation); definitions.AddRange( document.Definitions.OfType <FragmentDefinitionNode>()); QuerySyntaxSerializer.Serialize( new DocumentNode( definitions)).MatchSnapshot(); }
public void FindUndeclaredVariablesInlineFragment() { // arrange ISchema schema = SchemaBuilder.New() .AddStarWarsTypes() .Create(); DocumentNode document = Utf8GraphQLParser.Parse( @" query getHero { ... on Query { hero(episode: $ep) { name } } }"); OperationDefinitionNode operation = document.Definitions .OfType <OperationDefinitionNode>() .First(); var visitor = new CollectVariablesVisitor(schema); var visitationMap = new CollectVariablesVisitationMap(); // act operation.Accept( visitor, visitationMap, node => VisitorAction.Continue); // assert var variables = operation.VariableDefinitions.ToList(); variables.AddRange(visitor.VariableDeclarations); operation = operation.WithVariableDefinitions(variables); new DocumentNode( new IDefinitionNode[] { operation }).Print().MatchSnapshot(); }