@@ -539,6 +539,125 @@ class QueryTraversalTest extends Specification {
539539
540540 }
541541
542+ @Unroll
543+ def "skipped Fragment (#order)"() {
544+ given:
545+ def schema = TestUtil.schema("""
546+ type Query {
547+ foo : Foo1
548+ bar : String
549+ }
550+ type Foo1 {
551+ string : String
552+ subFoo : Foo2
553+ }
554+ type Foo2 {
555+ otherString : String
556+ }
557+ """ )
558+ def visitor = Mock(FieldVisitor)
559+ def query = createQuery("""
560+ query MyQuery (\$variableFoo : Boolean ) {
561+ bar
562+ .. . Test @include (if: \$variableFoo)
563+ }
564+ fragment Test on Query {
565+ bar
566+ }
567+ """ )
568+ QueryTraversal queryTraversal = createQueryTraversal(query, schema, [variableFoo: false])
569+ when:
570+ queryTraversal."$visitFn "(visitor)
571+
572+ then:
573+ 1 * visitor.visitField({ QueryVisitorEnvironment it -> it.field.name == "bar" && it.fieldDefinition.type.name == "String" && it.parentType.name == "Query" })
574+ 0 * visitor.visitField(_)
575+
576+ where:
577+ order | visitFn
578+ 'postOrder' | 'visitPostOrder'
579+ 'preOrder' | 'visitPreOrder'
580+
581+ }
582+
583+ @Unroll
584+ def "skipped inline Fragment (#order)"() {
585+ given:
586+ def schema = TestUtil.schema("""
587+ type Query {
588+ foo : Foo1
589+ bar : String
590+ }
591+ type Foo1 {
592+ string : String
593+ subFoo : Foo2
594+ }
595+ type Foo2 {
596+ otherString : String
597+ }
598+ """ )
599+ def visitor = Mock(FieldVisitor)
600+ def query = createQuery("""
601+ query MyQuery (\$variableFoo : Boolean ) {
602+ bar
603+ .. . @include(if : \$variableFoo) {
604+ foo
605+ }
606+ }
607+ """ )
608+ QueryTraversal queryTraversal = createQueryTraversal(query, schema, [variableFoo: false])
609+ when:
610+ queryTraversal."$visitFn "(visitor)
611+
612+ then:
613+ 1 * visitor.visitField({ QueryVisitorEnvironment it -> it.field.name == "bar" && it.fieldDefinition.type.name == "String" && it.parentType.name == "Query" })
614+ 0 * visitor.visitField(_)
615+
616+ where:
617+ order | visitFn
618+ 'postOrder' | 'visitPostOrder'
619+ 'preOrder' | 'visitPreOrder'
620+
621+ }
622+
623+ @Unroll
624+ def "skipped Field (#order)"() {
625+ given:
626+ def schema = TestUtil.schema("""
627+ type Query {
628+ foo : Foo1
629+ bar : String
630+ }
631+ type Foo1 {
632+ string : String
633+ subFoo : Foo2
634+ }
635+ type Foo2 {
636+ otherString : String
637+ }
638+ """ )
639+ def visitor = Mock(FieldVisitor)
640+ def query = createQuery("""
641+ query MyQuery (\$variableFoo : Boolean ) {
642+ bar
643+ foo @include (if: \$variableFoo)
644+ }
645+ """ )
646+ QueryTraversal queryTraversal = createQueryTraversal(query, schema, [variableFoo: false])
647+ when:
648+ queryTraversal."$visitFn "(visitor)
649+
650+ then:
651+ 1 * visitor.visitField({ QueryVisitorEnvironment it -> it.field.name == "bar" && it.fieldDefinition.type.name == "String" && it.parentType.name == "Query" })
652+ 0 * visitor.visitField(_)
653+
654+ where:
655+ order | visitFn
656+ 'postOrder' | 'visitPostOrder'
657+ 'preOrder' | 'visitPreOrder'
658+
659+ }
660+
542661
543662 def "reduce preOrder"() {
544663 given:
0 commit comments