From c6d10d3ab8a8ee1555aae8da53c41b420f444765 Mon Sep 17 00:00:00 2001 From: Brian Clozel Date: Mon, 7 Mar 2022 22:42:36 +0100 Subject: [PATCH] Check for missing errors in GraphQlTester#executeAndVerify Prior to this commit, the `GraphQlTester#executeAndVerify` method would check that an `"$.errors"` JSON path exists within the response and contains no value. This should fail with valid GraphQL responses, as the spec says that a response with no error should not contain the errors map at all: http://spec.graphql.org/draft/#sec-Errors This commit changes the assertion and instead checks for the absence of the errors map in the response. Fixes gh-318 --- .../graphql/test/tester/DefaultGraphQlTester.java | 2 +- .../graphql/test/tester/GraphQlTesterTests.java | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/spring-graphql-test/src/main/java/org/springframework/graphql/test/tester/DefaultGraphQlTester.java b/spring-graphql-test/src/main/java/org/springframework/graphql/test/tester/DefaultGraphQlTester.java index 41e59655..8349d6e3 100644 --- a/spring-graphql-test/src/main/java/org/springframework/graphql/test/tester/DefaultGraphQlTester.java +++ b/spring-graphql-test/src/main/java/org/springframework/graphql/test/tester/DefaultGraphQlTester.java @@ -170,7 +170,7 @@ final class DefaultGraphQlTester implements GraphQlTester { @Override public void executeAndVerify() { - execute().path("$.errors").valueIsEmpty(); + execute().path("$.errors").pathDoesNotExist(); } @Override diff --git a/spring-graphql-test/src/test/java/org/springframework/graphql/test/tester/GraphQlTesterTests.java b/spring-graphql-test/src/test/java/org/springframework/graphql/test/tester/GraphQlTesterTests.java index d0114e8b..d5a2a865 100644 --- a/spring-graphql-test/src/test/java/org/springframework/graphql/test/tester/GraphQlTesterTests.java +++ b/spring-graphql-test/src/test/java/org/springframework/graphql/test/tester/GraphQlTesterTests.java @@ -186,6 +186,17 @@ public class GraphQlTesterTests extends GraphQlTesterTestSupport { assertThat(input.getVariables()).containsEntry("keyOnly", null); } + @Test + void errorsEmptyOnExecuteAndVerify() { + + String document = "{me {name, friends}}"; + setMockResponse("{\"me\": {\"name\":\"Luke Skywalker\", \"friends\":[]}}"); + + graphQlTester().document(document).executeAndVerify(); + + assertThat(requestInput().getDocument()).contains(document); + } + @Test void errorsCheckedOnExecuteAndVerify() {