Introduce GraphQlResponse
Replace the use of ExecutionResult on the client side where we are dealing with a response map rather, and also incorporate it into the server-side hierarchy where it wraps an ExecutionResult instead. See gh-10
This commit is contained in:
@@ -25,6 +25,7 @@ import reactor.core.publisher.Flux;
|
||||
import reactor.core.publisher.Mono;
|
||||
|
||||
import org.springframework.graphql.GraphQlRequest;
|
||||
import org.springframework.graphql.GraphQlResponse;
|
||||
import org.springframework.graphql.RequestOutput;
|
||||
import org.springframework.graphql.client.GraphQlTransport;
|
||||
import org.springframework.test.util.AssertionErrors;
|
||||
@@ -45,22 +46,23 @@ abstract class AbstractDirectTransport implements GraphQlTransport {
|
||||
|
||||
|
||||
@Override
|
||||
public Mono<ExecutionResult> execute(GraphQlRequest request) {
|
||||
return executeInternal(request).cast(ExecutionResult.class);
|
||||
public Mono<GraphQlResponse> execute(GraphQlRequest request) {
|
||||
return executeInternal(request).cast(GraphQlResponse.class);
|
||||
}
|
||||
|
||||
@SuppressWarnings({"ConstantConditions", "unchecked"})
|
||||
@Override
|
||||
public Flux<ExecutionResult> executeSubscription(GraphQlRequest request) {
|
||||
return executeInternal(request).flatMapMany(result -> {
|
||||
public Flux<GraphQlResponse> executeSubscription(GraphQlRequest request) {
|
||||
return executeInternal(request).flatMapMany(output -> {
|
||||
try {
|
||||
Object data = result.getData();
|
||||
Object data = output.getData();
|
||||
AssertionErrors.assertTrue("Not a Publisher: " + data, data instanceof Publisher);
|
||||
|
||||
List<GraphQLError> errors = result.getErrors();
|
||||
List<GraphQLError> errors = output.getErrors();
|
||||
AssertionErrors.assertTrue("Subscription errors: " + errors, CollectionUtils.isEmpty(errors));
|
||||
|
||||
return Flux.from((Publisher<ExecutionResult>) data);
|
||||
return Flux.from((Publisher<ExecutionResult>) data)
|
||||
.map(result -> new RequestOutput(output.getExecutionInput(), result));
|
||||
}
|
||||
catch (AssertionError ex) {
|
||||
throw new AssertionError(ex.getMessage() + "\nRequest: " + request, ex);
|
||||
|
||||
@@ -31,12 +31,12 @@ import com.jayway.jsonpath.Configuration;
|
||||
import com.jayway.jsonpath.DocumentContext;
|
||||
import com.jayway.jsonpath.JsonPath;
|
||||
import com.jayway.jsonpath.TypeRef;
|
||||
import graphql.ExecutionResult;
|
||||
import graphql.GraphQLError;
|
||||
|
||||
import org.springframework.core.ParameterizedTypeReference;
|
||||
import org.springframework.core.ResolvableType;
|
||||
import org.springframework.graphql.GraphQlRequest;
|
||||
import org.springframework.graphql.GraphQlResponse;
|
||||
import org.springframework.graphql.client.GraphQlTransport;
|
||||
import org.springframework.graphql.support.DocumentSource;
|
||||
import org.springframework.lang.Nullable;
|
||||
@@ -165,7 +165,7 @@ final class DefaultGraphQlTester implements GraphQlTester {
|
||||
@SuppressWarnings("ConstantConditions")
|
||||
@Override
|
||||
public Response execute() {
|
||||
return transport.execute(request()).map(result -> response(result, request())).block(responseTimeout);
|
||||
return transport.execute(request()).map(response -> mapResponse(response, request())).block(responseTimeout);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -175,15 +175,15 @@ final class DefaultGraphQlTester implements GraphQlTester {
|
||||
|
||||
@Override
|
||||
public Subscription executeSubscription() {
|
||||
return () -> transport.executeSubscription(request()).map(result -> response(result, request()));
|
||||
return () -> transport.executeSubscription(request()).map(result -> mapResponse(result, request()));
|
||||
}
|
||||
|
||||
private GraphQlRequest request() {
|
||||
return new GraphQlRequest(this.document, this.operationName, this.variables);
|
||||
}
|
||||
|
||||
private DefaultResponse response(ExecutionResult result, GraphQlRequest request) {
|
||||
return new DefaultResponse(result, errorFilter, assertDecorator(request), jsonPathConfig);
|
||||
private DefaultResponse mapResponse(GraphQlResponse response, GraphQlRequest request) {
|
||||
return new DefaultResponse(response, errorFilter, assertDecorator(request), jsonPathConfig);
|
||||
}
|
||||
|
||||
private Consumer<Runnable> assertDecorator(GraphQlRequest request) {
|
||||
@@ -217,12 +217,12 @@ final class DefaultGraphQlTester implements GraphQlTester {
|
||||
|
||||
|
||||
private ResponseDelegate(
|
||||
ExecutionResult result, @Nullable Predicate<GraphQLError> errorFilter,
|
||||
GraphQlResponse response, @Nullable Predicate<GraphQLError> errorFilter,
|
||||
Consumer<Runnable> assertDecorator, Configuration jsonPathConfig) {
|
||||
|
||||
this.jsonDoc = JsonPath.parse(result.toSpecification(), jsonPathConfig);
|
||||
this.jsonDoc = JsonPath.parse(response.toMap(), jsonPathConfig);
|
||||
this.jsonContent = this.jsonDoc::jsonString;
|
||||
this.errors = result.getErrors();
|
||||
this.errors = response.getErrors();
|
||||
this.unexpectedErrors = new ArrayList<>(this.errors);
|
||||
this.assertDecorator = assertDecorator;
|
||||
|
||||
@@ -293,10 +293,10 @@ final class DefaultGraphQlTester implements GraphQlTester {
|
||||
private final ResponseDelegate delegate;
|
||||
|
||||
private DefaultResponse(
|
||||
ExecutionResult result, @Nullable Predicate<GraphQLError> errorFilter,
|
||||
GraphQlResponse response, @Nullable Predicate<GraphQLError> errorFilter,
|
||||
Consumer<Runnable> assertDecorator, Configuration jsonPathConfig) {
|
||||
|
||||
this.delegate = new ResponseDelegate(result, errorFilter, assertDecorator, jsonPathConfig);
|
||||
this.delegate = new ResponseDelegate(response, errorFilter, assertDecorator, jsonPathConfig);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -20,11 +20,11 @@ package org.springframework.graphql.test.tester;
|
||||
import java.net.URI;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
import graphql.ExecutionResult;
|
||||
import reactor.core.publisher.Flux;
|
||||
import reactor.core.publisher.Mono;
|
||||
|
||||
import org.springframework.graphql.GraphQlRequest;
|
||||
import org.springframework.graphql.GraphQlResponse;
|
||||
import org.springframework.graphql.client.CodecMappingProvider;
|
||||
import org.springframework.graphql.client.GraphQlClient;
|
||||
import org.springframework.graphql.client.GraphQlTransport;
|
||||
@@ -164,7 +164,7 @@ final class DefaultWebSocketGraphQlTester extends AbstractDelegatingGraphQlTeste
|
||||
return new GraphQlTransport() {
|
||||
|
||||
@Override
|
||||
public Mono<ExecutionResult> execute(GraphQlRequest request) {
|
||||
public Mono<GraphQlResponse> execute(GraphQlRequest request) {
|
||||
return client
|
||||
.document(request.getDocument())
|
||||
.operationName(request.getOperationName())
|
||||
@@ -174,7 +174,7 @@ final class DefaultWebSocketGraphQlTester extends AbstractDelegatingGraphQlTeste
|
||||
}
|
||||
|
||||
@Override
|
||||
public Flux<ExecutionResult> executeSubscription(GraphQlRequest request) {
|
||||
public Flux<GraphQlResponse> executeSubscription(GraphQlRequest request) {
|
||||
return client
|
||||
.document(request.getDocument())
|
||||
.operationName(request.getOperationName())
|
||||
|
||||
@@ -19,14 +19,14 @@ package org.springframework.graphql.test.tester;
|
||||
import java.util.Collections;
|
||||
import java.util.Map;
|
||||
|
||||
import graphql.ExecutionResult;
|
||||
import reactor.core.publisher.Flux;
|
||||
import reactor.core.publisher.Mono;
|
||||
|
||||
import org.springframework.core.ParameterizedTypeReference;
|
||||
import org.springframework.graphql.GraphQlRequest;
|
||||
import org.springframework.graphql.GraphQlResponse;
|
||||
import org.springframework.graphql.client.GraphQlTransport;
|
||||
import org.springframework.graphql.support.MapExecutionResult;
|
||||
import org.springframework.graphql.support.MapGraphQlResponse;
|
||||
import org.springframework.http.MediaType;
|
||||
import org.springframework.test.web.reactive.server.WebTestClient;
|
||||
import org.springframework.util.Assert;
|
||||
@@ -53,9 +53,9 @@ final class WebTestClientTransport implements GraphQlTransport {
|
||||
|
||||
|
||||
@Override
|
||||
public Mono<ExecutionResult> execute(GraphQlRequest request) {
|
||||
public Mono<GraphQlResponse> execute(GraphQlRequest request) {
|
||||
|
||||
Map<String, Object> resultMap = this.webTestClient.post()
|
||||
Map<String, Object> responseMap = this.webTestClient.post()
|
||||
.contentType(MediaType.APPLICATION_JSON)
|
||||
.accept(MediaType.APPLICATION_JSON)
|
||||
.bodyValue(request.toMap())
|
||||
@@ -66,13 +66,13 @@ final class WebTestClientTransport implements GraphQlTransport {
|
||||
.returnResult()
|
||||
.getResponseBody();
|
||||
|
||||
resultMap = (resultMap != null ? resultMap : Collections.emptyMap());
|
||||
ExecutionResult result = MapExecutionResult.from(resultMap);
|
||||
return Mono.just(result);
|
||||
responseMap = (responseMap != null ? responseMap : Collections.emptyMap());
|
||||
GraphQlResponse response = MapGraphQlResponse.forResponse(responseMap);
|
||||
return Mono.just(response);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Flux<ExecutionResult> executeSubscription(GraphQlRequest request) {
|
||||
public Flux<GraphQlResponse> executeSubscription(GraphQlRequest request) {
|
||||
throw new UnsupportedOperationException("Subscriptions not supported over HTTP");
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user