Skip to content

Commit

Permalink
fix: Input object null fields validation (#1090)
Browse files Browse the repository at this point in the history
  • Loading branch information
frekw authored Oct 14, 2021
1 parent c7589ac commit 6e9ae05
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 1 deletion.
2 changes: 1 addition & 1 deletion core/src/main/scala/caliban/validation/Validator.scala
Original file line number Diff line number Diff line change
Expand Up @@ -472,7 +472,7 @@ object Validator {
IO.when(
inputField.defaultValue.isEmpty &&
inputField.`type`().kind == __TypeKind.NON_NULL &&
!fields.contains(inputField.name)
fields.get(inputField.name).getOrElse(NullValue) == NullValue
)(
failValidation(
s"Required field '${inputField.name}' on object '${inputType.name.getOrElse("?")}' was not provided.",
Expand Down
32 changes: 32 additions & 0 deletions core/src/test/scala/caliban/validation/InputObjectSpec.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package caliban.validation

import caliban.CalibanError
import caliban.GraphQL._
import caliban.RootResolver
import zio.test.Assertion._
import zio.test._
import zio.test.environment.TestEnvironment

object InputObjectSpec extends DefaultRunnableSpec {
override def spec: ZSpec[TestEnvironment, Any] =
suite("InputObjectSpec")(
testM("fails if a non-null field on an input object is null") {
val query =
"""query {
| query(input: {string: null})
|}""".stripMargin

case class TestInputObject(string: String)
case class TestInput(input: TestInputObject)
case class Query(query: TestInput => String)
val gql = graphQL(RootResolver(Query(_.input.string)))

for {
int <- gql.interpreter
res <- int.execute(query)
} yield assert(res.errors.headOption)(
isSome((isSubtype[CalibanError.ValidationError](anything)))
)
}
)
}

0 comments on commit 6e9ae05

Please sign in to comment.