Update reference docs for access to HTTP headers

Also rename existing methods for request headers to be consistent with
those for response headers and use "Http" in the name.

Closes gh-74
This commit is contained in:
Rossen Stoyanchev
2021-10-01 17:35:40 +01:00
parent 762b9f06c2
commit 21d9791484
7 changed files with 45 additions and 21 deletions

View File

@@ -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>");
}

View File

@@ -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>");
}

View File

@@ -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]]

View File

@@ -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<HttpHeaders> headersConsumer) {
public WebRequestSpec httpHeaders(Consumer<HttpHeaders> headersConsumer) {
headersConsumer.accept(this.headers);
return this;
}

View File

@@ -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<HttpHeaders> headersConsumer) {
public WebGraphQlTester.Builder defaultHttpHeaders(Consumer<HttpHeaders> headersConsumer) {
this.headers = (this.headers != null ? this.headers : new HttpHeaders());
headersConsumer.accept(this.headers);
return this;

View File

@@ -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<HttpHeaders> headersConsumer);
Builder defaultHttpHeaders(Consumer<HttpHeaders> 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<HttpHeaders> headersConsumer);
WebRequestSpec httpHeaders(Consumer<HttpHeaders> headersConsumer);
/**

View File

@@ -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();