diff --git a/samples/webflux-security/src/test/java/io/spring/sample/graphql/SampleApplicationTests.java b/samples/webflux-security/src/test/java/io/spring/sample/graphql/SampleApplicationTests.java index e945580b..ad99c569 100644 --- a/samples/webflux-security/src/test/java/io/spring/sample/graphql/SampleApplicationTests.java +++ b/samples/webflux-security/src/test/java/io/spring/sample/graphql/SampleApplicationTests.java @@ -57,7 +57,7 @@ class SampleApplicationTests { @Test void userRoleThenForbidden() { this.graphQlTester.queryName("employeesNamesAndSalaries") - .headers(headers -> headers.setBasicAuth("rob", "rob")) + .httpHeaders(headers -> headers.setBasicAuth("rob", "rob")) .execute() .errors() .satisfy(errors -> { @@ -87,7 +87,7 @@ class SampleApplicationTests { @Test void canQuerySalaryAsAdmin() { this.graphQlTester.queryName("employeesNamesAndSalaries") - .headers(headers -> headers.setBasicAuth("admin", "admin")) + .httpHeaders(headers -> headers.setBasicAuth("admin", "admin")) .execute() .path("employees[0].name").entity(String.class).isEqualTo("Andi") .path("employees[0].salary").entity(int.class).isEqualTo(42); @@ -97,7 +97,7 @@ class SampleApplicationTests { void invalidCredentials() { assertThatThrownBy(() -> this.graphQlTester.queryName("employeesNamesAndSalaries") - .headers(headers -> headers.setBasicAuth("admin", "INVALID")) + .httpHeaders(headers -> headers.setBasicAuth("admin", "INVALID")) .executeAndVerify()) .hasMessage("Status expected:<200 OK> but was:<401 UNAUTHORIZED>"); } diff --git a/samples/webmvc-http-security/src/test/java/io/spring/sample/graphql/SampleApplicationTests.java b/samples/webmvc-http-security/src/test/java/io/spring/sample/graphql/SampleApplicationTests.java index eada64f3..6fc703aa 100644 --- a/samples/webmvc-http-security/src/test/java/io/spring/sample/graphql/SampleApplicationTests.java +++ b/samples/webmvc-http-security/src/test/java/io/spring/sample/graphql/SampleApplicationTests.java @@ -42,7 +42,7 @@ class SampleApplicationTests { @Test void userRoleThenForbidden() { this.graphQlTester.queryName("employeesNamesAndSalaries") - .headers(headers -> headers.setBasicAuth("rob", "rob")) + .httpHeaders(headers -> headers.setBasicAuth("rob", "rob")) .execute() .errors() .satisfy(errors -> { @@ -72,7 +72,7 @@ class SampleApplicationTests { @Test void canQuerySalaryAsAdmin() { this.graphQlTester.queryName("employeesNamesAndSalaries") - .headers(headers -> headers.setBasicAuth("admin", "admin")) + .httpHeaders(headers -> headers.setBasicAuth("admin", "admin")) .execute() .path("employees[0].name").entity(String.class).isEqualTo("Andi") .path("employees[0].salary").entity(int.class).isEqualTo(42); @@ -82,7 +82,7 @@ class SampleApplicationTests { void invalidCredentials() { assertThatThrownBy(() -> this.graphQlTester.queryName("employeesNamesAndSalaries") - .headers(headers -> headers.setBasicAuth("admin", "INVALID")) + .httpHeaders(headers -> headers.setBasicAuth("admin", "INVALID")) .executeAndVerify()) .hasMessage("Status expected:<200 OK> but was:<401 UNAUTHORIZED>"); } diff --git a/spring-graphql-docs/src/docs/asciidoc/testing.adoc b/spring-graphql-docs/src/docs/asciidoc/testing.adoc index 9a05f4c9..e10b20d9 100644 --- a/spring-graphql-docs/src/docs/asciidoc/testing.adoc +++ b/spring-graphql-docs/src/docs/asciidoc/testing.adoc @@ -88,6 +88,30 @@ For tests against a live, running server: WebGraphQlTester tester = WebGraphQlTester.builder(client).build(); ---- +`WebGraphQlTester` supports setting HTTP request headers and access to HTTP response +headers. This may be useful to inspect or set security related headers. + +[source,java,indent=0,subs="verbatim,quotes"] +---- + this.graphQlTester.queryName("{ myQuery }") + .httpHeaders(headers -> headers.setBasicAuth("rob", "...")) + .execute() + .httpHeadersSatisfy(headers -> { + // check response headers + }) + .path("myQuery.field1").entity(String.class).isEqualTo("value1") + .path("myQuery.field2").entity(String.class).isEqualTo("value2"); +---- + +You can also set default request headers at the builder level: + +[source,java,indent=0,subs="verbatim,quotes"] +---- + WebGraphQlTester tester = WebGraphQlTester.builder(client) + .defaultHttpHeaders(headers -> headers.setBasicAuth("rob", "...")) + .build(); +---- + [[testing-queries]] diff --git a/spring-graphql-test/src/main/java/org/springframework/graphql/test/tester/DefaultWebGraphQlTester.java b/spring-graphql-test/src/main/java/org/springframework/graphql/test/tester/DefaultWebGraphQlTester.java index 96bbd7de..08adbd02 100644 --- a/spring-graphql-test/src/main/java/org/springframework/graphql/test/tester/DefaultWebGraphQlTester.java +++ b/spring-graphql-test/src/main/java/org/springframework/graphql/test/tester/DefaultWebGraphQlTester.java @@ -123,7 +123,7 @@ class DefaultWebGraphQlTester implements WebGraphQlTester { } @Override - public WebRequestSpec header(String headerName, String... headerValues) { + public WebRequestSpec httpHeader(String headerName, String... headerValues) { for (String headerValue : headerValues) { this.headers.add(headerName, headerValue); } @@ -131,7 +131,7 @@ class DefaultWebGraphQlTester implements WebGraphQlTester { } @Override - public WebRequestSpec headers(Consumer headersConsumer) { + public WebRequestSpec httpHeaders(Consumer headersConsumer) { headersConsumer.accept(this.headers); return this; } diff --git a/spring-graphql-test/src/main/java/org/springframework/graphql/test/tester/DefaultWebGraphQlTesterBuilder.java b/spring-graphql-test/src/main/java/org/springframework/graphql/test/tester/DefaultWebGraphQlTesterBuilder.java index 0e37662c..0fc76e65 100644 --- a/spring-graphql-test/src/main/java/org/springframework/graphql/test/tester/DefaultWebGraphQlTesterBuilder.java +++ b/spring-graphql-test/src/main/java/org/springframework/graphql/test/tester/DefaultWebGraphQlTesterBuilder.java @@ -79,7 +79,7 @@ final class DefaultWebGraphQlTesterBuilder } @Override - public DefaultWebGraphQlTesterBuilder defaultHeader(String headerName, String... headerValues) { + public DefaultWebGraphQlTesterBuilder defaultHttpHeader(String headerName, String... headerValues) { this.headers = (this.headers != null ? this.headers : new HttpHeaders()); for (String headerValue : headerValues) { this.headers.add(headerName, headerValue); @@ -88,7 +88,7 @@ final class DefaultWebGraphQlTesterBuilder } @Override - public WebGraphQlTester.Builder defaultHeaders(Consumer headersConsumer) { + public WebGraphQlTester.Builder defaultHttpHeaders(Consumer headersConsumer) { this.headers = (this.headers != null ? this.headers : new HttpHeaders()); headersConsumer.accept(this.headers); return this; diff --git a/spring-graphql-test/src/main/java/org/springframework/graphql/test/tester/WebGraphQlTester.java b/spring-graphql-test/src/main/java/org/springframework/graphql/test/tester/WebGraphQlTester.java index eb6eb2eb..969e065a 100644 --- a/spring-graphql-test/src/main/java/org/springframework/graphql/test/tester/WebGraphQlTester.java +++ b/spring-graphql-test/src/main/java/org/springframework/graphql/test/tester/WebGraphQlTester.java @@ -147,14 +147,14 @@ public interface WebGraphQlTester extends GraphQlTester { * @param headerName the header name * @param headerValues the header values */ - Builder defaultHeader(String headerName, String... headerValues); + Builder defaultHttpHeader(String headerName, String... headerValues); /** - * Variant of {@link #defaultHeader(String, String...)} that provides + * Variant of {@link #defaultHttpHeader(String, String...)} that provides * access to the underlying headers to inspect or modify directly. * @param headersConsumer a function that consumes the {@code HttpHeaders} */ - Builder defaultHeaders(Consumer headersConsumer); + Builder defaultHttpHeaders(Consumer headersConsumer); /** * Build the {@code WebGraphQlTester}. @@ -177,7 +177,7 @@ public interface WebGraphQlTester extends GraphQlTester { * @param headerValues the header value(s) * @return the same instance */ - WebRequestSpec header(String headerName, String... headerValues); + WebRequestSpec httpHeader(String headerName, String... headerValues); /** * Manipulate the request's headers with the given consumer. The @@ -188,7 +188,7 @@ public interface WebGraphQlTester extends GraphQlTester { * @param headersConsumer a function that consumes the {@code HttpHeaders} * @return this builder */ - WebRequestSpec headers(Consumer headersConsumer); + WebRequestSpec httpHeaders(Consumer headersConsumer); /** diff --git a/spring-graphql-test/src/test/java/org/springframework/graphql/test/tester/WebGraphQlTesterTests.java b/spring-graphql-test/src/test/java/org/springframework/graphql/test/tester/WebGraphQlTesterTests.java index 21d1999c..59096515 100644 --- a/spring-graphql-test/src/test/java/org/springframework/graphql/test/tester/WebGraphQlTesterTests.java +++ b/spring-graphql-test/src/test/java/org/springframework/graphql/test/tester/WebGraphQlTesterTests.java @@ -80,9 +80,9 @@ public class WebGraphQlTesterTests { setup.response("{\"me\": {\"name\":\"Luke Skywalker\", \"friends\":[]}}"); GraphQlTester.ResponseSpec spec = setup.graphQlTester().query(query) - .header("myHeader1", "myValue1a") - .header("myHeader1", "myValue1b") - .headers(headers -> headers.add("myHeader2", "myValue2")) + .httpHeader("myHeader1", "myValue1a") + .httpHeader("myHeader1", "myValue1b") + .httpHeaders(headers -> headers.add("myHeader2", "myValue2")) .execute(); spec.path("me.name").entity(String.class).isEqualTo("Luke Skywalker"); @@ -103,9 +103,9 @@ public class WebGraphQlTesterTests { setup.response("{\"me\": {\"name\":\"Luke Skywalker\", \"friends\":[]}}"); GraphQlTester.ResponseSpec spec = setup.graphQlTesterBuilder() - .defaultHeader("myHeader1", "myValue1a") - .defaultHeader("myHeader1", "myValue1b") - .defaultHeaders(headers -> headers.add("myHeader2", "myValue2")) + .defaultHttpHeader("myHeader1", "myValue1a") + .defaultHttpHeader("myHeader1", "myValue1b") + .defaultHttpHeaders(headers -> headers.add("myHeader2", "myValue2")) .build() .query(query) .execute();