From 49d012e7139202afca04996df9a03d766d654ac0 Mon Sep 17 00:00:00 2001 From: Brad Baker Date: Tue, 2 Aug 2022 19:38:48 +1000 Subject: [PATCH] Defaults Locale when calling validation (#2908) --- src/main/java/graphql/GraphQL.java | 4 +++- src/main/java/graphql/ParseAndValidate.java | 13 +++++++------ src/test/groovy/graphql/GraphQLTest.groovy | 11 +++++++++++ 3 files changed, 21 insertions(+), 7 deletions(-) diff --git a/src/main/java/graphql/GraphQL.java b/src/main/java/graphql/GraphQL.java index 558e98f55f..0c9e5e70d3 100644 --- a/src/main/java/graphql/GraphQL.java +++ b/src/main/java/graphql/GraphQL.java @@ -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; @@ -625,7 +626,8 @@ private List validate(ExecutionInput executionInput, Document d validationCtx.onDispatched(cf); Predicate> validationRulePredicate = executionInput.getGraphQLContext().getOrDefault(ParseAndValidate.INTERNAL_VALIDATION_PREDICATE_HINT, r -> true); - List validationErrors = ParseAndValidate.validate(graphQLSchema, document, validationRulePredicate, executionInput.getLocale()); + Locale locale = executionInput.getLocale() != null ? executionInput.getLocale() : Locale.getDefault(); + List validationErrors = ParseAndValidate.validate(graphQLSchema, document, validationRulePredicate, locale); validationCtx.onCompleted(validationErrors, null); cf.complete(validationErrors); diff --git a/src/main/java/graphql/ParseAndValidate.java b/src/main/java/graphql/ParseAndValidate.java index cc6bec3929..63c29edad2 100644 --- a/src/main/java/graphql/ParseAndValidate.java +++ b/src/main/java/graphql/ParseAndValidate.java @@ -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; @@ -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 errors = validate(graphQLSchema, result.getDocument(), executionInput.getLocale()); @@ -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 @@ -80,7 +81,7 @@ public static ParseAndValidateResult parse(ExecutionInput executionInput) { * * @return a result object that indicates how this operation went */ - public static List validate(GraphQLSchema graphQLSchema, Document parsedDocument, Locale locale) { + public static List validate(@NotNull GraphQLSchema graphQLSchema, @NotNull Document parsedDocument, @NotNull Locale locale) { return validate(graphQLSchema, parsedDocument, ruleClass -> true, locale); } @@ -92,7 +93,7 @@ public static List validate(GraphQLSchema graphQLSchema, Docume * * @return a result object that indicates how this operation went */ - public static List validate(GraphQLSchema graphQLSchema, Document parsedDocument) { + public static List validate(@NotNull GraphQLSchema graphQLSchema, @NotNull Document parsedDocument) { return validate(graphQLSchema, parsedDocument, ruleClass -> true, Locale.getDefault()); } @@ -106,7 +107,7 @@ public static List validate(GraphQLSchema graphQLSchema, Docume * * @return a result object that indicates how this operation went */ - public static List validate(GraphQLSchema graphQLSchema, Document parsedDocument, Predicate> rulePredicate, Locale locale) { + public static List validate(@NotNull GraphQLSchema graphQLSchema, @NotNull Document parsedDocument, @NotNull Predicate> rulePredicate, @NotNull Locale locale) { Validator validator = new Validator(); return validator.validateDocument(graphQLSchema, parsedDocument, rulePredicate, locale); } @@ -120,7 +121,7 @@ public static List validate(GraphQLSchema graphQLSchema, Docume * * @return a result object that indicates how this operation went */ - public static List validate(GraphQLSchema graphQLSchema, Document parsedDocument, Predicate> rulePredicate) { + public static List validate(@NotNull GraphQLSchema graphQLSchema, @NotNull Document parsedDocument, @NotNull Predicate> rulePredicate) { Validator validator = new Validator(); return validator.validateDocument(graphQLSchema, parsedDocument, rulePredicate, Locale.getDefault()); } diff --git a/src/test/groovy/graphql/GraphQLTest.groovy b/src/test/groovy/graphql/GraphQLTest.groovy index ff320234eb..0ae487f569 100644 --- a/src/test/groovy/graphql/GraphQLTest.groovy +++ b/src/test/groovy/graphql/GraphQLTest.groovy @@ -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() + } }