Skip to content

Commit

Permalink
Defaults Locale when calling validation (#2908)
Browse files Browse the repository at this point in the history
  • Loading branch information
bbakerman committed Aug 2, 2022
1 parent 35ff68d commit 49d012e
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 7 deletions.
4 changes: 3 additions & 1 deletion src/main/java/graphql/GraphQL.java
Expand Up @@ -34,6 +34,7 @@

import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Optional;
import java.util.concurrent.CompletableFuture;
Expand Down Expand Up @@ -625,7 +626,8 @@ private List<ValidationError> validate(ExecutionInput executionInput, Document d
validationCtx.onDispatched(cf);

Predicate<Class<?>> validationRulePredicate = executionInput.getGraphQLContext().getOrDefault(ParseAndValidate.INTERNAL_VALIDATION_PREDICATE_HINT, r -> true);
List<ValidationError> validationErrors = ParseAndValidate.validate(graphQLSchema, document, validationRulePredicate, executionInput.getLocale());
Locale locale = executionInput.getLocale() != null ? executionInput.getLocale() : Locale.getDefault();
List<ValidationError> validationErrors = ParseAndValidate.validate(graphQLSchema, document, validationRulePredicate, locale);

validationCtx.onCompleted(validationErrors, null);
cf.complete(validationErrors);
Expand Down
13 changes: 7 additions & 6 deletions src/main/java/graphql/ParseAndValidate.java
Expand Up @@ -7,6 +7,7 @@
import graphql.schema.GraphQLSchema;
import graphql.validation.ValidationError;
import graphql.validation.Validator;
import org.jetbrains.annotations.NotNull;

import java.util.List;
import java.util.Locale;
Expand Down Expand Up @@ -40,7 +41,7 @@ public class ParseAndValidate {
*
* @return a result object that indicates how this operation went
*/
public static ParseAndValidateResult parseAndValidate(GraphQLSchema graphQLSchema, ExecutionInput executionInput) {
public static ParseAndValidateResult parseAndValidate(@NotNull GraphQLSchema graphQLSchema, @NotNull ExecutionInput executionInput) {
ParseAndValidateResult result = parse(executionInput);
if (!result.isFailure()) {
List<ValidationError> errors = validate(graphQLSchema, result.getDocument(), executionInput.getLocale());
Expand All @@ -56,7 +57,7 @@ public static ParseAndValidateResult parseAndValidate(GraphQLSchema graphQLSchem
*
* @return a result object that indicates how this operation went
*/
public static ParseAndValidateResult parse(ExecutionInput executionInput) {
public static ParseAndValidateResult parse(@NotNull ExecutionInput executionInput) {
try {
//
// we allow the caller to specify new parser options by context
Expand All @@ -80,7 +81,7 @@ public static ParseAndValidateResult parse(ExecutionInput executionInput) {
*
* @return a result object that indicates how this operation went
*/
public static List<ValidationError> validate(GraphQLSchema graphQLSchema, Document parsedDocument, Locale locale) {
public static List<ValidationError> validate(@NotNull GraphQLSchema graphQLSchema, @NotNull Document parsedDocument, @NotNull Locale locale) {
return validate(graphQLSchema, parsedDocument, ruleClass -> true, locale);
}

Expand All @@ -92,7 +93,7 @@ public static List<ValidationError> validate(GraphQLSchema graphQLSchema, Docume
*
* @return a result object that indicates how this operation went
*/
public static List<ValidationError> validate(GraphQLSchema graphQLSchema, Document parsedDocument) {
public static List<ValidationError> validate(@NotNull GraphQLSchema graphQLSchema, @NotNull Document parsedDocument) {
return validate(graphQLSchema, parsedDocument, ruleClass -> true, Locale.getDefault());
}

Expand All @@ -106,7 +107,7 @@ public static List<ValidationError> validate(GraphQLSchema graphQLSchema, Docume
*
* @return a result object that indicates how this operation went
*/
public static List<ValidationError> validate(GraphQLSchema graphQLSchema, Document parsedDocument, Predicate<Class<?>> rulePredicate, Locale locale) {
public static List<ValidationError> validate(@NotNull GraphQLSchema graphQLSchema, @NotNull Document parsedDocument, @NotNull Predicate<Class<?>> rulePredicate, @NotNull Locale locale) {
Validator validator = new Validator();
return validator.validateDocument(graphQLSchema, parsedDocument, rulePredicate, locale);
}
Expand All @@ -120,7 +121,7 @@ public static List<ValidationError> validate(GraphQLSchema graphQLSchema, Docume
*
* @return a result object that indicates how this operation went
*/
public static List<ValidationError> validate(GraphQLSchema graphQLSchema, Document parsedDocument, Predicate<Class<?>> rulePredicate) {
public static List<ValidationError> validate(@NotNull GraphQLSchema graphQLSchema, @NotNull Document parsedDocument, @NotNull Predicate<Class<?>> rulePredicate) {
Validator validator = new Validator();
return validator.validateDocument(graphQLSchema, parsedDocument, rulePredicate, Locale.getDefault());
}
Expand Down
11 changes: 11 additions & 0 deletions src/test/groovy/graphql/GraphQLTest.groovy
Expand Up @@ -1352,4 +1352,15 @@ many lines''']
graphQL.getMutationStrategy() instanceof AsyncSerialExecutionStrategy
graphQL.getSubscriptionStrategy() instanceof SubscriptionExecutionStrategy
}
def "null locale on input is handled under the covers"() {
def graphQL = GraphQL.newGraphQL(StarWarsSchema.starWarsSchema).build()
def ei = newExecutionInput("query q { validationError } ").locale(null).build()
when:
def er = graphQL.execute(ei)
then:
! er.errors.isEmpty()
}
}

0 comments on commit 49d012e

Please sign in to comment.