Skip to content

Commit a1879bd

Browse files
committed
Forbid skip and include on subscription root
1 parent fe715cc commit a1879bd

7 files changed

Lines changed: 834 additions & 30 deletions

File tree

src/main/java/graphql/validation/OperationValidator.java

Lines changed: 307 additions & 29 deletions
Large diffs are not rendered by default.

src/main/java/graphql/validation/ValidationErrorType.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ public enum ValidationErrorType implements ValidationErrorClassification {
4444
NullValueForNonNullArgument,
4545
SubscriptionMultipleRootFields,
4646
SubscriptionIntrospectionRootField,
47+
ForbidSkipAndIncludeOnSubscriptionRoot,
4748
UniqueObjectFieldName,
4849
UnknownOperation,
4950
MaxQueryDepthExceeded,

src/main/resources/i18n/Validation.properties

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ ScalarLeaves.subselectionRequired=Validation error ({0}) : Subselection required
6969
#
7070
SubscriptionUniqueRootField.multipleRootFields=Validation error ({0}) : Subscription operation ''{1}'' must have exactly one root field
7171
SubscriptionUniqueRootField.multipleRootFieldsWithFragment=Validation error ({0}) : Subscription operation ''{1}'' must have exactly one root field with fragments
72+
SubscriptionUniqueRootField.skipIncludeNotAllowed=Validation error ({0}) : Subscription operation ''{1}'' must not use @skip or @include directives in the top level selection
7273
SubscriptionIntrospectionRootField.introspectionRootField=Validation error ({0}) : Subscription operation ''{1}'' root field ''{2}'' cannot be an introspection field
7374
SubscriptionIntrospectionRootField.introspectionRootFieldWithFragment=Validation error ({0}) : Subscription operation ''{1}'' fragment root field ''{2}'' cannot be an introspection field
7475
#
@@ -115,4 +116,4 @@ ArgumentValidationUtil.handleExtraFieldError=Validation error ({0}) : argument '
115116
ArgumentValidationUtil.extraOneOfFieldsError=Validation error ({0}) : Exactly one key must be specified for OneOf type ''{3}''.
116117
#
117118
MaxQueryDepthExceeded.message=Query depth {1} exceeds maximum allowed depth {0}
118-
MaxQueryFieldsExceeded.message=Query has {1} fields which exceeds maximum allowed {0}
119+
MaxQueryFieldsExceeded.message=Query has {1} fields which exceeds maximum allowed {0}

src/main/resources/i18n/Validation_de.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ ScalarLeaves.subselectionRequired=Validierungsfehler ({0}) : Unterauswahl erford
6161
#
6262
SubscriptionUniqueRootField.multipleRootFields=Validierungsfehler ({0}) : Subscription operation ''{1}'' muss genau ein root field haben
6363
SubscriptionUniqueRootField.multipleRootFieldsWithFragment=Validierungsfehler ({0}) : Subscription operation ''{1}'' muss genau ein root field mit Fragmenten haben
64+
SubscriptionUniqueRootField.skipIncludeNotAllowed=Validierungsfehler ({0}) : Subscription operation ''{1}'' darf @skip oder @include directives nicht in der top level selection verwenden
6465
SubscriptionIntrospectionRootField.introspectionRootField=Validierungsfehler ({0}) : Subscription operation ''{1}'' root field ''{2}'' kann kein introspection field sein
6566
SubscriptionIntrospectionRootField.introspectionRootFieldWithFragment=Validierungsfehler ({0}) : Subscription operation ''{1}'' fragment root field ''{2}'' kann kein introspection field sein
6667
#

src/main/resources/i18n/Validation_nl.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ ScalarLeaves.subselectionRequired=Validatiefout ({0}) : Sub-selectie verplicht v
5959
#
6060
SubscriptionUniqueRootField.multipleRootFields=Validatiefout ({0}) : Subscription operation ''{1}'' moet exact één root field hebben
6161
SubscriptionUniqueRootField.multipleRootFieldsWithFragment=Validatiefout ({0}) : Subscription operation ''{1}'' moet exact één root field met fragmenten hebben
62+
SubscriptionUniqueRootField.skipIncludeNotAllowed=Validatiefout ({0}) : Subscription operation ''{1}'' mag geen @skip of @include directives in de top level selection gebruiken
6263
SubscriptionIntrospectionRootField.introspectionRootField=Validatiefout ({0}) : Subscription operation ''{1}'' root field ''{2}'' kan geen introspectieveld zijn
6364
SubscriptionIntrospectionRootField.introspectionRootFieldWithFragment=Validatiefout ({0}) : Subscription operation ''{1}'' fragment root field ''{2}'' kan geen introspectieveld zijn
6465
#
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package graphql.execution
2+
3+
import graphql.TestUtil
4+
import spock.lang.Specification
5+
6+
class MergedSelectionSetTest extends Specification {
7+
8+
def "returns sub fields as a list in insertion order"() {
9+
given:
10+
def first = TestUtil.mergedField(TestUtil.parseField("first"))
11+
def second = TestUtil.mergedField(TestUtil.parseField("second"))
12+
def subFields = new LinkedHashMap<String, MergedField>()
13+
subFields.put("first", first)
14+
subFields.put("second", second)
15+
16+
when:
17+
def selectionSet = MergedSelectionSet.newMergedSelectionSet()
18+
.subFields(subFields)
19+
.build()
20+
21+
then:
22+
selectionSet.subFieldsList == [first, second]
23+
!selectionSet.empty
24+
}
25+
}

0 commit comments

Comments
 (0)