From 65274bbc5a3c0a22c89e739247a4bc82daec9d75 Mon Sep 17 00:00:00 2001 From: Moncef Date: Sun, 1 Nov 2020 23:46:01 +0100 Subject: [PATCH] refactor: skip running validation on null value resolve #29 --- README.md | 1 + .../constraints/AbstractDirectiveConstraint.java | 6 +++++- .../standard/NoEmptyBlankConstraintTest.groovy | 14 +++++++------- .../constraints/standard/SizeConstraintTest.groovy | 4 ++-- 4 files changed, 15 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 18dba22..504ae12 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,7 @@ # Extended Validation for graphql-java [![Build Status](https://api.travis-ci.org/graphql-java/graphql-java-extended-validation.svg?branch=master)](https://api.travis-ci.org/graphql-java/graphql-java-extended-validation.svg?branch=master)   +[![Download](https://api.bintray.com/packages/graphql-java/graphql-java/graphql-java-extended-validation/images/download.svg) ](https://bintray.com/graphql-java/graphql-java/graphql-java-extended-validation/_latestVersion) [![MIT licensed](https://img.shields.io/badge/license-MIT-green)](https://github.com/graphql-java/graphql-java-extended-validation/blob/master/LICENSE)   diff --git a/src/main/java/graphql/validation/constraints/AbstractDirectiveConstraint.java b/src/main/java/graphql/validation/constraints/AbstractDirectiveConstraint.java index 09853c1..698d589 100644 --- a/src/main/java/graphql/validation/constraints/AbstractDirectiveConstraint.java +++ b/src/main/java/graphql/validation/constraints/AbstractDirectiveConstraint.java @@ -21,6 +21,7 @@ import java.math.BigDecimal; import java.util.ArrayList; import java.util.Collection; +import java.util.Collections; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -112,11 +113,14 @@ public List runValidation(ValidationEnvironment validationEnvironm } Object validatedValue = validationEnvironment.getValidatedValue(); - // // all the directives validation code does NOT care for NULL ness since the graphql engine covers that. // eg a @NonNull validation directive makes no sense in graphql like it might in Java // + if (validatedValue == null) { + return Collections.emptyList(); + } + GraphQLInputType inputType = Util.unwrapNonNull(validationEnvironment.getValidatedType()); validationEnvironment = validationEnvironment.transform(b -> b.validatedType(inputType)); diff --git a/src/test/groovy/graphql/validation/constraints/standard/NoEmptyBlankConstraintTest.groovy b/src/test/groovy/graphql/validation/constraints/standard/NoEmptyBlankConstraintTest.groovy index a23851f..e5a82cc 100644 --- a/src/test/groovy/graphql/validation/constraints/standard/NoEmptyBlankConstraintTest.groovy +++ b/src/test/groovy/graphql/validation/constraints/standard/NoEmptyBlankConstraintTest.groovy @@ -24,13 +24,13 @@ class NoEmptyBlankConstraintTest extends BaseConstraintTestSupport { 'field( arg : String @NotBlank ) : ID' | "\t\n\r " | 'NotBlank;path=/arg;val:\t\n\r ;\t' 'field( arg : String @NotBlank ) : ID' | "" | 'NotBlank;path=/arg;val:;\t' 'field( arg : String @NotBlank ) : ID' | "\t\n\r X" | '' - 'field( arg : String @NotBlank ) : ID' | null | 'NotBlank;path=/arg;val:null;\t' + 'field( arg : String @NotBlank ) : ID' | null | '' // IDs 'field( arg : ID @NotBlank ) : ID' | "\t\n\r " | 'NotBlank;path=/arg;val:\t\n\r ;\t' 'field( arg : ID @NotBlank ) : ID' | "" | 'NotBlank;path=/arg;val:;\t' 'field( arg : ID @NotBlank ) : ID' | "\t\n\r X" | '' - 'field( arg : ID @NotBlank ) : ID' | null | 'NotBlank;path=/arg;val:null;\t' + 'field( arg : ID @NotBlank ) : ID' | null | '' } @Unroll @@ -48,28 +48,28 @@ class NoEmptyBlankConstraintTest extends BaseConstraintTestSupport { fieldDeclaration | argVal | expectedMessage // strings 'field( arg : String @NotEmpty ) : ID' | "" | 'NotEmpty;path=/arg;val:;\t' - 'field( arg : String @NotEmpty ) : ID' | null | 'NotEmpty;path=/arg;val:null;\t' + 'field( arg : String @NotEmpty ) : ID' | null | '' 'field( arg : String @NotEmpty ) : ID' | "\t\n\r" | '' 'field( arg : String @NotEmpty ) : ID' | "ABC" | '' // IDs 'field( arg : ID @NotEmpty ) : ID' | "" | 'NotEmpty;path=/arg;val:;\t' - 'field( arg : ID @NotEmpty ) : ID' | null | 'NotEmpty;path=/arg;val:null;\t' + 'field( arg : ID @NotEmpty ) : ID' | null | '' 'field( arg : ID @NotEmpty ) : ID' | "\t\n\r" | '' 'field( arg : ID @NotEmpty ) : ID' | "ABC" | '' // objects 'field( arg : InputObject @NotEmpty ) : ID' | [:] | 'NotEmpty;path=/arg;val:[:];\t' - 'field( arg : InputObject @NotEmpty ) : ID' | null | 'NotEmpty;path=/arg;val:null;\t' + 'field( arg : InputObject @NotEmpty ) : ID' | null | '' 'field( arg : InputObject @NotEmpty ) : ID' | [name: "x"] | '' // lists 'field( arg : [String] @NotEmpty ) : ID' | [] | 'NotEmpty;path=/arg;val:[];\t' - 'field( arg : [String] @NotEmpty ) : ID' | null | 'NotEmpty;path=/arg;val:null;\t' + 'field( arg : [String] @NotEmpty ) : ID' | null | '' 'field( arg : [String] @NotEmpty ) : ID' | ["x"] | '' 'field( arg : [ID] @NotEmpty ) : ID' | [] | 'NotEmpty;path=/arg;val:[];\t' - 'field( arg : [ID] @NotEmpty ) : ID' | null | 'NotEmpty;path=/arg;val:null;\t' + 'field( arg : [ID] @NotEmpty ) : ID' | null | '' 'field( arg : [ID] @NotEmpty ) : ID' | ["x"] | '' } diff --git a/src/test/groovy/graphql/validation/constraints/standard/SizeConstraintTest.groovy b/src/test/groovy/graphql/validation/constraints/standard/SizeConstraintTest.groovy index 3c9316a..b34f24a 100644 --- a/src/test/groovy/graphql/validation/constraints/standard/SizeConstraintTest.groovy +++ b/src/test/groovy/graphql/validation/constraints/standard/SizeConstraintTest.groovy @@ -26,7 +26,7 @@ class SizeConstraintTest extends BaseConstraintTestSupport { "field( arg : String @Size(max : 10, min : 5) ) : ID" | "123" | "Size;path=/arg;val:123;\t" 'field( arg : String @Size(min : 5, message : "custom") ) : ID' | "123" | "custom;path=/arg;val:123;\t" - "field( arg : String @Size(min : 5) ) : ID" | null | "Size;path=/arg;val:null;\t" + "field( arg : String @Size(min : 5) ) : ID" | null | "" //IDs "field( arg : ID @Size(max : 10) ) : ID" | "1234567891011" | "Size;path=/arg;val:1234567891011;\t" @@ -34,6 +34,6 @@ class SizeConstraintTest extends BaseConstraintTestSupport { "field( arg : ID @Size(max : 10, min : 5) ) : ID" | "123" | "Size;path=/arg;val:123;\t" 'field( arg : ID @Size(min : 5, message : "custom") ) : ID' | "123" | "custom;path=/arg;val:123;\t" - "field( arg : ID @Size(min : 5) ) : ID" | null | "Size;path=/arg;val:null;\t" + "field( arg : ID @Size(min : 5) ) : ID" | null | "" } } \ No newline at end of file