Skip to content

Commit 9c47bac

Browse files
committed
refactoring, better test
1 parent 991c4c6 commit 9c47bac

File tree

2 files changed

+17
-20
lines changed

2 files changed

+17
-20
lines changed

src/main/java/graphql/visitor/QueryTraversal.java

Lines changed: 11 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,7 @@
1515
import graphql.schema.GraphQLFieldsContainer;
1616
import graphql.schema.GraphQLSchema;
1717

18-
import java.util.ArrayList;
1918
import java.util.LinkedHashMap;
20-
import java.util.List;
2119
import java.util.Map;
2220

2321
public class QueryTraversal {
@@ -48,44 +46,40 @@ public QueryTraversal(Document document,
4846
}
4947

5048
public void traverse() {
51-
visit(operationDefinition.getSelectionSet(), new ArrayList<>(), schema.getQueryType());
49+
visit(operationDefinition.getSelectionSet(), schema.getQueryType());
5250
}
5351

5452

55-
private void visit(SelectionSet selectionSet, List<String> visitedFragments, GraphQLCompositeType type) {
53+
private void visit(SelectionSet selectionSet, GraphQLCompositeType type) {
5654

5755
for (Selection selection : selectionSet.getSelections()) {
5856
if (selection instanceof Field) {
5957
GraphQLFieldsContainer fieldsContainer = (GraphQLFieldsContainer) type;
6058
GraphQLFieldDefinition fieldDefinition = fieldsContainer.getFieldDefinition(((Field) selection).getName());
61-
visitField((Field) selection, visitedFragments, fieldDefinition);
59+
visitField((Field) selection, fieldDefinition);
6260
} else if (selection instanceof InlineFragment) {
63-
visitInlineFragment(visitedFragments, (InlineFragment) selection, type);
61+
visitInlineFragment((InlineFragment) selection, type);
6462
} else if (selection instanceof FragmentSpread) {
65-
visitFragmentSpread(visitedFragments, (FragmentSpread) selection);
63+
visitFragmentSpread((FragmentSpread) selection);
6664
}
6765
}
6866
}
6967

70-
private void visitFragmentSpread(List<String> visitedFragments, FragmentSpread fragmentSpread) {
71-
if (visitedFragments.contains(fragmentSpread.getName())) {
72-
return;
73-
}
68+
private void visitFragmentSpread(FragmentSpread fragmentSpread) {
7469
if (!conditionalNodes.shouldInclude(this.variables, fragmentSpread.getDirectives())) {
7570
return;
7671
}
77-
// visitedFragments.add(fragmentSpread.getName());
7872
FragmentDefinition fragmentDefinition = fragmentsByName.get(fragmentSpread.getName());
7973

8074
if (!conditionalNodes.shouldInclude(variables, fragmentDefinition.getDirectives())) {
8175
return;
8276
}
8377
GraphQLCompositeType typeCondition = (GraphQLCompositeType) schema.getType(fragmentDefinition.getTypeCondition().getName());
84-
visit(fragmentDefinition.getSelectionSet(), visitedFragments, typeCondition);
78+
visit(fragmentDefinition.getSelectionSet(), typeCondition);
8579
}
8680

8781

88-
private void visitInlineFragment(List<String> visitedFragments, InlineFragment inlineFragment, GraphQLCompositeType parentType) {
82+
private void visitInlineFragment(InlineFragment inlineFragment, GraphQLCompositeType parentType) {
8983
if (!conditionalNodes.shouldInclude(variables, inlineFragment.getDirectives())) {
9084
return;
9185
}
@@ -98,16 +92,16 @@ private void visitInlineFragment(List<String> visitedFragments, InlineFragment i
9892
fragmentCondition = parentType;
9993
}
10094
// for unions we only have other fragments inside
101-
visit(inlineFragment.getSelectionSet(), visitedFragments, fragmentCondition);
95+
visit(inlineFragment.getSelectionSet(), fragmentCondition);
10296
}
10397

104-
private void visitField(Field field, List<String> visitedFragments, GraphQLFieldDefinition fieldDefinition) {
98+
private void visitField(Field field, GraphQLFieldDefinition fieldDefinition) {
10599
if (!conditionalNodes.shouldInclude(variables, field.getDirectives())) {
106100
return;
107101
}
108102
visitor.visitField(field, fieldDefinition);
109103
if (fieldDefinition.getType() instanceof GraphQLCompositeType) {
110-
visit(field.getSelectionSet(), visitedFragments, (GraphQLCompositeType) fieldDefinition.getType());
104+
visit(field.getSelectionSet(), (GraphQLCompositeType) fieldDefinition.getType());
111105
}
112106
}
113107

src/test/groovy/graphql/visitor/QueryTraversalTest.groovy

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,8 @@ class QueryTraversalTest extends Specification {
2828
return queryTraversal
2929
}
3030

31-
def "test "() {
31+
32+
def "simple query"() {
3233
given:
3334
def schema = TestUtil.schema("""
3435
type Query{
@@ -48,7 +49,9 @@ class QueryTraversalTest extends Specification {
4849
queryTraversal.traverse()
4950

5051
then:
51-
3 * visitor.visitField(_, _)
52-
52+
1 * visitor.visitField({ it.name == "foo" }, { it.type.name == "Foo" })
53+
1 * visitor.visitField({ it.name == "bar" }, { it.type.name == "String" })
54+
1 * visitor.visitField({ it.name == "subFoo" }, { it.type.name == "String" })
5355
}
56+
5457
}

0 commit comments

Comments
 (0)