Skip to content

Commit b3842cc

Browse files
committed
Add failing test case for missing fragment name
1 parent 7bd01a5 commit b3842cc

4 files changed

Lines changed: 30 additions & 2 deletions

File tree

src/main/java/graphql/validation/RulesVisitor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ private void checkFragmentSpread(FragmentSpread fragmentSpread, List<AbstractRul
112112
List<AbstractRule> rulesVisitingFragmentSpreads = getRulesVisitingFragmentSpreads(rules);
113113
if (rulesVisitingFragmentSpreads.size() > 0) {
114114
FragmentDefinition fragment = validationContext.getFragment(fragmentSpread.getName());
115-
if(!ancestors.contains(fragment)){
115+
if (fragment != null && !ancestors.contains(fragment)) {
116116
new LanguageTraversal(ancestors).traverse(fragment, new RulesVisitor(validationContext, rulesVisitingFragmentSpreads, true));
117117
}
118118
}

src/main/java/graphql/validation/rules/NoUnusedFragments.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,9 @@ private void collectUsedFragmentsInDefinition(List<String> result, String fragme
6767
if (result.contains(fragmentName)) return;
6868
result.add(fragmentName);
6969
List<String> spreadList = spreadsInDefinition.get(fragmentName);
70+
if (spreadList == null) {
71+
return;
72+
}
7073
for (String fragment : spreadList) {
7174
collectUsedFragmentsInDefinition(result, fragment);
7275
}

src/test/groovy/graphql/validation/RulesVisitorTest.groovy

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ package graphql.validation
33
import graphql.TestUtil
44
import graphql.language.Document
55
import graphql.parser.Parser
6-
import graphql.validation.rules.NoFragmentCycles
76
import graphql.validation.rules.NoUnusedVariables
87
import spock.lang.Specification
98

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package graphql.validation
2+
/**
3+
* validation examples used in the spec in given section
4+
* http://facebook.github.io/graphql/#sec-Validation
5+
* @author dwinsor
6+
*
7+
*/
8+
class SpecValidation5421Test extends SpecValidationBase {
9+
10+
def '5.4.2.1 Fragment spread target defined '() {
11+
def query = """
12+
query getDogName {
13+
dog {
14+
... FragmentDoesNotExist
15+
}
16+
}
17+
"""
18+
when:
19+
def validationErrors = validate(query)
20+
21+
then:
22+
!validationErrors.empty
23+
validationErrors.size() == 1
24+
validationErrors.get(0).getValidationErrorType() == ValidationErrorType.UndefinedFragment
25+
}
26+
}

0 commit comments

Comments
 (0)