Apply checkstyle changes to spring-graphql-test
See gh-943
This commit is contained in:
@@ -41,7 +41,6 @@ import org.springframework.util.IdGenerator;
|
||||
* to a server-side GraphQL handler or service.
|
||||
*
|
||||
* @author Rossen Stoyanchev
|
||||
* @since 1.0.0
|
||||
*/
|
||||
abstract class AbstractDirectGraphQlTransport implements GraphQlTransport {
|
||||
|
||||
@@ -56,7 +55,7 @@ abstract class AbstractDirectGraphQlTransport implements GraphQlTransport {
|
||||
@SuppressWarnings({"ConstantConditions", "unchecked"})
|
||||
@Override
|
||||
public Flux<GraphQlResponse> executeSubscription(GraphQlRequest request) {
|
||||
return executeInternal(toExecutionRequest(request)).flatMapMany(response -> {
|
||||
return executeInternal(toExecutionRequest(request)).flatMapMany((response) -> {
|
||||
try {
|
||||
Object data = response.getData();
|
||||
AssertionErrors.assertTrue("Not a Publisher: " + data, data instanceof Publisher);
|
||||
@@ -64,7 +63,7 @@ abstract class AbstractDirectGraphQlTransport implements GraphQlTransport {
|
||||
List<ResponseError> errors = response.getErrors();
|
||||
AssertionErrors.assertTrue("Subscription errors: " + errors, CollectionUtils.isEmpty(errors));
|
||||
|
||||
return Flux.from((Publisher<ExecutionResult>) data).map(executionResult ->
|
||||
return Flux.from((Publisher<ExecutionResult>) data).map((executionResult) ->
|
||||
new DefaultExecutionGraphQlResponse(response.getExecutionInput(), executionResult));
|
||||
}
|
||||
catch (AssertionError ex) {
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.springframework.graphql.test.tester;
|
||||
|
||||
import java.time.Duration;
|
||||
@@ -35,7 +36,6 @@ import org.springframework.graphql.ResponseError;
|
||||
import org.springframework.graphql.client.AbstractGraphQlClientBuilder;
|
||||
import org.springframework.graphql.client.GraphQlClient;
|
||||
import org.springframework.graphql.client.GraphQlTransport;
|
||||
import org.springframework.graphql.support.CachingDocumentSource;
|
||||
import org.springframework.graphql.support.DocumentSource;
|
||||
import org.springframework.graphql.support.ResourceDocumentSource;
|
||||
import org.springframework.lang.Nullable;
|
||||
@@ -51,6 +51,7 @@ import org.springframework.util.ClassUtils;
|
||||
* agnostic {@code GraphQlTester}. A transport specific extension can then wrap
|
||||
* this default tester by extending {@link AbstractDelegatingGraphQlTester}.
|
||||
*
|
||||
* @param <B> the type of builder
|
||||
* @author Rossen Stoyanchev
|
||||
* @since 1.0.0
|
||||
* @see AbstractDelegatingGraphQlTester
|
||||
@@ -86,7 +87,7 @@ public abstract class AbstractGraphQlTesterBuilder<B extends AbstractGraphQlTest
|
||||
|
||||
@Override
|
||||
public B errorFilter(Predicate<ResponseError> predicate) {
|
||||
this.errorFilter = (this.errorFilter != null ? errorFilter.and(predicate) : predicate);
|
||||
this.errorFilter = (this.errorFilter != null) ? this.errorFilter.and(predicate) : predicate;
|
||||
return self();
|
||||
}
|
||||
|
||||
@@ -115,6 +116,7 @@ public abstract class AbstractGraphQlTesterBuilder<B extends AbstractGraphQlTest
|
||||
/**
|
||||
* Allow transport-specific subclass builders to register a JSON Path
|
||||
* {@link MappingProvider} that matches the JSON encoding/decoding they use.
|
||||
* @param configurer a function applied to the JSON Path configuration
|
||||
*/
|
||||
protected void configureJsonPathConfig(Function<Configuration, Configuration> configurer) {
|
||||
this.jsonPathConfig = configurer.apply(this.jsonPathConfig);
|
||||
@@ -123,6 +125,7 @@ public abstract class AbstractGraphQlTesterBuilder<B extends AbstractGraphQlTest
|
||||
/**
|
||||
* Build the default transport-agnostic client that subclasses can then wrap
|
||||
* with {@link AbstractDelegatingGraphQlTester}.
|
||||
* @param transport the graphql transport to use
|
||||
*/
|
||||
protected GraphQlTester buildGraphQlTester(GraphQlTransport transport) {
|
||||
|
||||
@@ -139,12 +142,12 @@ public abstract class AbstractGraphQlTesterBuilder<B extends AbstractGraphQlTest
|
||||
* initialize new builder instances with, based on "this" builder.
|
||||
*/
|
||||
protected Consumer<AbstractGraphQlTesterBuilder<?>> getBuilderInitializer() {
|
||||
return builder -> {
|
||||
return (builder) -> {
|
||||
if (this.errorFilter != null) {
|
||||
builder.errorFilter(this.errorFilter);
|
||||
}
|
||||
builder.documentSource(this.documentSource);
|
||||
builder.configureJsonPathConfig(config -> this.jsonPathConfig);
|
||||
builder.configureJsonPathConfig((config) -> this.jsonPathConfig);
|
||||
builder.responseTimeout(this.responseTimeout);
|
||||
};
|
||||
}
|
||||
@@ -153,6 +156,7 @@ public abstract class AbstractGraphQlTesterBuilder<B extends AbstractGraphQlTest
|
||||
* For cases where the Tester needs the {@link GraphQlTransport}, we can't use
|
||||
* transports directly since they are package private, but we can adapt the corresponding
|
||||
* {@link GraphQlClient} and adapt it to {@code GraphQlTransport}.
|
||||
* @param client the graphql client to use for extracting the transport
|
||||
*/
|
||||
protected static GraphQlTransport asTransport(GraphQlClient client) {
|
||||
return new GraphQlTransport() {
|
||||
@@ -180,7 +184,7 @@ public abstract class AbstractGraphQlTesterBuilder<B extends AbstractGraphQlTest
|
||||
}
|
||||
|
||||
|
||||
private static class Jackson2Configurer {
|
||||
private static final class Jackson2Configurer {
|
||||
|
||||
private static final Class<?> defaultJsonProviderType;
|
||||
|
||||
|
||||
@@ -37,7 +37,6 @@ import org.springframework.util.Assert;
|
||||
* wraps an {@code ExecutionGraphQlService}.
|
||||
*
|
||||
* @author Rossen Stoyanchev
|
||||
* @since 1.0.0
|
||||
*/
|
||||
final class DefaultExecutionGraphQlServiceTesterBuilder
|
||||
extends AbstractGraphQlTesterBuilder<DefaultExecutionGraphQlServiceTesterBuilder>
|
||||
@@ -95,7 +94,7 @@ final class DefaultExecutionGraphQlServiceTesterBuilder
|
||||
|
||||
private void registerJsonPathMappingProvider() {
|
||||
if (this.encoder != null && this.decoder != null) {
|
||||
configureJsonPathConfig(config -> {
|
||||
configureJsonPathConfig((config) -> {
|
||||
EncoderDecoderMappingProvider provider = new EncoderDecoderMappingProvider(
|
||||
Collections.singletonList(this.encoder), Collections.singletonList(this.decoder));
|
||||
return config.mappingProvider(provider);
|
||||
@@ -111,7 +110,7 @@ final class DefaultExecutionGraphQlServiceTesterBuilder
|
||||
/**
|
||||
* Default {@link ExecutionGraphQlServiceTester} implementation.
|
||||
*/
|
||||
private static class DefaultExecutionGraphQlServiceTester
|
||||
private static final class DefaultExecutionGraphQlServiceTester
|
||||
extends AbstractDelegatingGraphQlTester implements ExecutionGraphQlServiceTester {
|
||||
|
||||
private final GraphQlServiceGraphQlTransport transport;
|
||||
|
||||
@@ -153,7 +153,7 @@ final class DefaultGraphQlTester implements GraphQlTester {
|
||||
@SuppressWarnings("ConstantConditions")
|
||||
@Override
|
||||
public Response execute() {
|
||||
return transport.execute(request()).map(response -> mapResponse(response, request())).block(responseTimeout);
|
||||
return DefaultGraphQlTester.this.transport.execute(request()).map((response) -> mapResponse(response, request())).block(DefaultGraphQlTester.this.responseTimeout);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -163,7 +163,7 @@ final class DefaultGraphQlTester implements GraphQlTester {
|
||||
|
||||
@Override
|
||||
public Subscription executeSubscription() {
|
||||
return () -> transport.executeSubscription(request()).map(result -> mapResponse(result, request()));
|
||||
return () -> DefaultGraphQlTester.this.transport.executeSubscription(request()).map((result) -> mapResponse(result, request()));
|
||||
}
|
||||
|
||||
private GraphQlRequest request() {
|
||||
@@ -171,7 +171,7 @@ final class DefaultGraphQlTester implements GraphQlTester {
|
||||
}
|
||||
|
||||
private DefaultResponse mapResponse(GraphQlResponse response, GraphQlRequest request) {
|
||||
return new DefaultResponse(response, errorFilter, assertDecorator(request), jsonPathConfig);
|
||||
return new DefaultResponse(response, DefaultGraphQlTester.this.errorFilter, assertDecorator(request), DefaultGraphQlTester.this.jsonPathConfig);
|
||||
}
|
||||
|
||||
private Consumer<Runnable> assertDecorator(GraphQlRequest request) {
|
||||
@@ -191,7 +191,7 @@ final class DefaultGraphQlTester implements GraphQlTester {
|
||||
/**
|
||||
* Container for GraphQL response data and errors along with convenience methods.
|
||||
*/
|
||||
private final static class ResponseDelegate {
|
||||
private static final class ResponseDelegate {
|
||||
|
||||
private final DocumentContext jsonDoc;
|
||||
|
||||
@@ -258,7 +258,7 @@ final class DefaultGraphQlTester implements GraphQlTester {
|
||||
}
|
||||
|
||||
void consumeErrors(Consumer<List<ResponseError>> consumer) {
|
||||
filterErrors(error -> true);
|
||||
filterErrors((error) -> true);
|
||||
consumer.accept(this.errors);
|
||||
}
|
||||
|
||||
@@ -392,7 +392,7 @@ final class DefaultGraphQlTester implements GraphQlTester {
|
||||
this.delegate.doAssert(() -> {
|
||||
Object value = this.pathHelper.evaluateJsonPath(this.delegate.jsonContent());
|
||||
AssertionErrors.assertNull(
|
||||
"Expected null value at JSON path \"" + path + "\" but found " + value, value);
|
||||
"Expected null value at JSON path \"" + this.path + "\" but found " + value, value);
|
||||
});
|
||||
return this;
|
||||
}
|
||||
@@ -464,7 +464,7 @@ final class DefaultGraphQlTester implements GraphQlTester {
|
||||
}
|
||||
|
||||
private static String joinPaths(@Nullable String basePath, String path) {
|
||||
return (basePath != null ? basePath + "." + path : path);
|
||||
return (basePath != null) ? basePath + "." + path : path;
|
||||
}
|
||||
|
||||
|
||||
@@ -476,7 +476,7 @@ final class DefaultGraphQlTester implements GraphQlTester {
|
||||
private final D entity;
|
||||
|
||||
protected DefaultEntity(TypeRefAdapter<D> typeAdapter) {
|
||||
this.entity = delegate.read(jsonPath, typeAdapter);
|
||||
this.entity = DefaultPath.this.delegate.read(DefaultPath.this.jsonPath, typeAdapter);
|
||||
}
|
||||
|
||||
protected D getEntity() {
|
||||
@@ -484,57 +484,57 @@ final class DefaultGraphQlTester implements GraphQlTester {
|
||||
}
|
||||
|
||||
protected void doAssert(Runnable task) {
|
||||
delegate.doAssert(task);
|
||||
DefaultPath.this.delegate.doAssert(task);
|
||||
}
|
||||
|
||||
protected String getPath() {
|
||||
return path;
|
||||
return DefaultPath.this.path;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Path path(String path) {
|
||||
return forPath(basePath, path, delegate);
|
||||
return forPath(DefaultPath.this.basePath, path, DefaultPath.this.delegate);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Path path(String path, Consumer<Path> pathConsumer) {
|
||||
return forNestedPath(basePath, path, delegate, pathConsumer);
|
||||
return forNestedPath(DefaultPath.this.basePath, path, DefaultPath.this.delegate, pathConsumer);
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T extends S> T isEqualTo(Object expected) {
|
||||
delegate.doAssert(() -> AssertionErrors.assertEquals(path, expected, this.entity));
|
||||
DefaultPath.this.delegate.doAssert(() -> AssertionErrors.assertEquals(DefaultPath.this.path, expected, this.entity));
|
||||
return self();
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T extends S> T isNotEqualTo(Object other) {
|
||||
delegate.doAssert(() -> AssertionErrors.assertNotEquals(path, other, this.entity));
|
||||
DefaultPath.this.delegate.doAssert(() -> AssertionErrors.assertNotEquals(DefaultPath.this.path, other, this.entity));
|
||||
return self();
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T extends S> T isSameAs(Object expected) {
|
||||
delegate.doAssert(() -> AssertionErrors.assertTrue(path, expected == this.entity));
|
||||
DefaultPath.this.delegate.doAssert(() -> AssertionErrors.assertTrue(DefaultPath.this.path, expected == this.entity));
|
||||
return self();
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T extends S> T isNotSameAs(Object other) {
|
||||
delegate.doAssert(() -> AssertionErrors.assertTrue(path, other != this.entity));
|
||||
DefaultPath.this.delegate.doAssert(() -> AssertionErrors.assertTrue(DefaultPath.this.path, other != this.entity));
|
||||
return self();
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T extends S> T matches(Predicate<D> predicate) {
|
||||
delegate
|
||||
.doAssert(() -> AssertionErrors.assertTrue(path, predicate.test(this.entity)));
|
||||
DefaultPath.this.delegate
|
||||
.doAssert(() -> AssertionErrors.assertTrue(DefaultPath.this.path, predicate.test(this.entity)));
|
||||
return self();
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T extends S> T satisfies(Consumer<D> consumer) {
|
||||
delegate.doAssert(() -> consumer.accept(this.entity));
|
||||
DefaultPath.this.delegate.doAssert(() -> consumer.accept(this.entity));
|
||||
return self();
|
||||
}
|
||||
|
||||
@@ -557,7 +557,7 @@ final class DefaultGraphQlTester implements GraphQlTester {
|
||||
private final class DefaultEntityList<E>
|
||||
extends DefaultEntity<List<E>, EntityList<E>> implements EntityList<E> {
|
||||
|
||||
public DefaultEntityList(TypeRefAdapter<List<E>> typeAdapter) {
|
||||
DefaultEntityList(TypeRefAdapter<List<E>> typeAdapter) {
|
||||
super(typeAdapter);
|
||||
}
|
||||
|
||||
|
||||
@@ -33,7 +33,6 @@ import org.springframework.web.util.UriComponentsBuilder;
|
||||
* {@link WebTestClient.Builder}.
|
||||
*
|
||||
* @author Rossen Stoyanchev
|
||||
* @since 1.0.0
|
||||
*/
|
||||
final class DefaultHttpGraphQlTesterBuilder
|
||||
extends AbstractGraphQlTesterBuilder<DefaultHttpGraphQlTesterBuilder>
|
||||
@@ -93,8 +92,8 @@ final class DefaultHttpGraphQlTesterBuilder
|
||||
}
|
||||
|
||||
private void registerJsonPathMappingProvider() {
|
||||
this.webTestClientBuilder.codecs(codecConfigurer ->
|
||||
configureJsonPathConfig(config -> {
|
||||
this.webTestClientBuilder.codecs((codecConfigurer) ->
|
||||
configureJsonPathConfig((config) -> {
|
||||
EncoderDecoderMappingProvider provider = new EncoderDecoderMappingProvider(codecConfigurer);
|
||||
return config.mappingProvider(provider);
|
||||
}));
|
||||
@@ -105,7 +104,7 @@ final class DefaultHttpGraphQlTesterBuilder
|
||||
* Default {@link HttpGraphQlTester} that builds and uses a {@link WebTestClient}
|
||||
* for request execution.
|
||||
*/
|
||||
private static class DefaultHttpGraphQlTester extends AbstractDelegatingGraphQlTester implements HttpGraphQlTester {
|
||||
private static final class DefaultHttpGraphQlTester extends AbstractDelegatingGraphQlTester implements HttpGraphQlTester {
|
||||
|
||||
private final WebTestClient webTestClient;
|
||||
|
||||
|
||||
@@ -113,9 +113,9 @@ public class DefaultRSocketGraphQlTesterBuilder
|
||||
}
|
||||
|
||||
private void registerJsonPathMappingProvider() {
|
||||
this.rsocketGraphQlClientBuilder.rsocketRequester(builder ->
|
||||
builder.rsocketStrategies(strategiesBuilder ->
|
||||
configureJsonPathConfig(config -> {
|
||||
this.rsocketGraphQlClientBuilder.rsocketRequester((builder) ->
|
||||
builder.rsocketStrategies((strategiesBuilder) ->
|
||||
configureJsonPathConfig((config) -> {
|
||||
RSocketStrategies strategies = strategiesBuilder.build();
|
||||
List<Encoder<?>> encoders = strategies.encoders();
|
||||
List<Decoder<?>> decoders = strategies.decoders();
|
||||
|
||||
@@ -27,7 +27,6 @@ import org.springframework.util.Assert;
|
||||
* Default {@link GraphQlTester.Builder} with a given, externally prepared transport.
|
||||
*
|
||||
* @author Rossen Stoyanchev
|
||||
* @since 1.0.0
|
||||
*/
|
||||
final class DefaultTransportGraphQlTesterBuilder
|
||||
extends AbstractGraphQlTesterBuilder<DefaultTransportGraphQlTesterBuilder> {
|
||||
@@ -50,7 +49,7 @@ final class DefaultTransportGraphQlTesterBuilder
|
||||
/**
|
||||
* {@link GraphQlTester} with a given transport.
|
||||
*/
|
||||
private static class DefaultTransportGraphQlTester extends AbstractDelegatingGraphQlTester {
|
||||
private static final class DefaultTransportGraphQlTester extends AbstractDelegatingGraphQlTester {
|
||||
|
||||
private final GraphQlTransport transport;
|
||||
|
||||
|
||||
@@ -34,7 +34,6 @@ import org.springframework.web.util.DefaultUriBuilderFactory;
|
||||
* {@link WebGraphQlHandler} for request execution.
|
||||
*
|
||||
* @author Rossen Stoyanchev
|
||||
* @since 1.0.0
|
||||
*/
|
||||
final class DefaultWebGraphQlTesterBuilder
|
||||
extends AbstractGraphQlTesterBuilder<DefaultWebGraphQlTesterBuilder>
|
||||
@@ -104,7 +103,7 @@ final class DefaultWebGraphQlTesterBuilder
|
||||
}
|
||||
|
||||
private void registerJsonPathMappingProvider() {
|
||||
configureJsonPathConfig(jsonPathConfig -> {
|
||||
configureJsonPathConfig((jsonPathConfig) -> {
|
||||
EncoderDecoderMappingProvider provider = new EncoderDecoderMappingProvider(this.codecConfigurer);
|
||||
return jsonPathConfig.mappingProvider(provider);
|
||||
});
|
||||
@@ -114,7 +113,7 @@ final class DefaultWebGraphQlTesterBuilder
|
||||
/**
|
||||
* Default {@link WebGraphQlTester} implementation.
|
||||
*/
|
||||
private static class DefaultWebGraphQlTester extends AbstractDelegatingGraphQlTester implements WebGraphQlTester {
|
||||
private static final class DefaultWebGraphQlTester extends AbstractDelegatingGraphQlTester implements WebGraphQlTester {
|
||||
|
||||
private final WebGraphQlHandlerGraphQlTransport transport;
|
||||
|
||||
@@ -34,7 +34,6 @@ import org.springframework.web.reactive.socket.client.WebSocketClient;
|
||||
* {@link WebSocketGraphQlClient.Builder}.
|
||||
*
|
||||
* @author Rossen Stoyanchev
|
||||
* @since 1.0.0
|
||||
*/
|
||||
final class DefaultWebSocketGraphQlTesterBuilder
|
||||
extends AbstractGraphQlTesterBuilder<DefaultWebSocketGraphQlTesterBuilder>
|
||||
@@ -108,8 +107,8 @@ final class DefaultWebSocketGraphQlTesterBuilder
|
||||
}
|
||||
|
||||
private void registerJsonPathMappingProvider() {
|
||||
this.graphQlClientBuilder.codecConfigurer(codecConfigurer -> {
|
||||
configureJsonPathConfig(jsonPathConfig -> {
|
||||
this.graphQlClientBuilder.codecConfigurer((codecConfigurer) -> {
|
||||
configureJsonPathConfig((jsonPathConfig) -> {
|
||||
EncoderDecoderMappingProvider provider = new EncoderDecoderMappingProvider(codecConfigurer);
|
||||
return jsonPathConfig.mappingProvider(provider);
|
||||
});
|
||||
@@ -120,7 +119,7 @@ final class DefaultWebSocketGraphQlTesterBuilder
|
||||
/**
|
||||
* Default {@link WebSocketGraphQlTester} implementation.
|
||||
*/
|
||||
private static class DefaultWebSocketGraphQlTester extends AbstractDelegatingGraphQlTester implements WebSocketGraphQlTester {
|
||||
private static final class DefaultWebSocketGraphQlTester extends AbstractDelegatingGraphQlTester implements WebSocketGraphQlTester {
|
||||
|
||||
private final WebSocketGraphQlClient client;
|
||||
|
||||
@@ -45,7 +45,6 @@ import org.springframework.util.MimeTypeUtils;
|
||||
* JSON Path {@link MappingProvider} that uses {@link Encoder} and {@link Decoder}.
|
||||
*
|
||||
* @author Rossen Stoyanchev
|
||||
* @since 1.0.0
|
||||
*/
|
||||
final class EncoderDecoderMappingProvider implements MappingProvider {
|
||||
|
||||
@@ -60,29 +59,29 @@ final class EncoderDecoderMappingProvider implements MappingProvider {
|
||||
/**
|
||||
* Create an instance with a {@link CodecConfigurer}.
|
||||
*/
|
||||
public EncoderDecoderMappingProvider(CodecConfigurer configurer) {
|
||||
EncoderDecoderMappingProvider(CodecConfigurer configurer) {
|
||||
this.encoder = findJsonEncoder(configurer);
|
||||
this.decoder = findJsonDecoder(configurer);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create an instance with a List of encoders and decoders>
|
||||
* Create an instance with a List of encoders and decoders.
|
||||
*/
|
||||
public EncoderDecoderMappingProvider(List<Encoder<?>> encoders, List<Decoder<?>> decoders) {
|
||||
EncoderDecoderMappingProvider(List<Encoder<?>> encoders, List<Decoder<?>> decoders) {
|
||||
this.encoder = findJsonEncoder(encoders);
|
||||
this.decoder = findJsonDecoder(decoders);
|
||||
}
|
||||
|
||||
private static Encoder<?> findJsonEncoder(CodecConfigurer configurer) {
|
||||
return findJsonEncoder(configurer.getWriters().stream()
|
||||
.filter(writer -> writer instanceof EncoderHttpMessageWriter)
|
||||
.map(writer -> ((EncoderHttpMessageWriter<?>) writer).getEncoder()));
|
||||
.filter((writer) -> writer instanceof EncoderHttpMessageWriter)
|
||||
.map((writer) -> ((EncoderHttpMessageWriter<?>) writer).getEncoder()));
|
||||
}
|
||||
|
||||
private static Decoder<?> findJsonDecoder(CodecConfigurer configurer) {
|
||||
return findJsonDecoder(configurer.getReaders().stream()
|
||||
.filter(reader -> reader instanceof DecoderHttpMessageReader)
|
||||
.map(reader -> ((DecoderHttpMessageReader<?>) reader).getDecoder()));
|
||||
.filter((reader) -> reader instanceof DecoderHttpMessageReader)
|
||||
.map((reader) -> ((DecoderHttpMessageReader<?>) reader).getDecoder()));
|
||||
}
|
||||
|
||||
private static Encoder<?> findJsonEncoder(List<Encoder<?>> encoders) {
|
||||
@@ -95,14 +94,14 @@ final class EncoderDecoderMappingProvider implements MappingProvider {
|
||||
|
||||
private static Encoder<?> findJsonEncoder(Stream<Encoder<?>> stream) {
|
||||
return stream
|
||||
.filter(encoder -> encoder.canEncode(MAP_TYPE, MediaType.APPLICATION_JSON))
|
||||
.filter((encoder) -> encoder.canEncode(MAP_TYPE, MediaType.APPLICATION_JSON))
|
||||
.findFirst()
|
||||
.orElseThrow(() -> new IllegalArgumentException("No JSON Encoder"));
|
||||
}
|
||||
|
||||
private static Decoder<?> findJsonDecoder(Stream<Decoder<?>> decoderStream) {
|
||||
return decoderStream
|
||||
.filter(decoder -> decoder.canDecode(MAP_TYPE, MediaType.APPLICATION_JSON))
|
||||
.filter((decoder) -> decoder.canDecode(MAP_TYPE, MediaType.APPLICATION_JSON))
|
||||
.findFirst()
|
||||
.orElseThrow(() -> new IllegalArgumentException("No JSON Decoder"));
|
||||
}
|
||||
|
||||
@@ -40,6 +40,7 @@ public interface ExecutionGraphQlServiceTester extends GraphQlTester {
|
||||
|
||||
/**
|
||||
* Create a {@link ExecutionGraphQlServiceTester} instance.
|
||||
* @param service the GraphQL service to use
|
||||
*/
|
||||
static ExecutionGraphQlServiceTester create(ExecutionGraphQlService service) {
|
||||
return builder(service).build();
|
||||
@@ -47,6 +48,7 @@ public interface ExecutionGraphQlServiceTester extends GraphQlTester {
|
||||
|
||||
/**
|
||||
* Return a builder for {@link ExecutionGraphQlServiceTester}.
|
||||
* @param service the GraphQL service to use
|
||||
*/
|
||||
static ExecutionGraphQlServiceTester.Builder<?> builder(ExecutionGraphQlService service) {
|
||||
return new DefaultExecutionGraphQlServiceTesterBuilder(service);
|
||||
@@ -55,12 +57,14 @@ public interface ExecutionGraphQlServiceTester extends GraphQlTester {
|
||||
|
||||
/**
|
||||
* Default {@link ExecutionGraphQlServiceTester.Builder} implementation.
|
||||
* @param <B> the type of builder
|
||||
*/
|
||||
interface Builder<B extends Builder<B>> extends GraphQlTester.Builder<B> {
|
||||
|
||||
/**
|
||||
* Provide a {@code BiFunction} to help initialize the
|
||||
* {@link ExecutionInput} with.
|
||||
* @param configurer the function that initializes the execution input
|
||||
* @since 1.1.2
|
||||
* @see org.springframework.graphql.ExecutionGraphQlRequest#configureExecutionInput(BiFunction)
|
||||
*/
|
||||
@@ -69,12 +73,14 @@ public interface ExecutionGraphQlServiceTester extends GraphQlTester {
|
||||
/**
|
||||
* Configure the JSON encoder to use for mapping response data to
|
||||
* higher level objects.
|
||||
* @param encoder the JSON encoder to use
|
||||
*/
|
||||
B encoder(Encoder<?> encoder);
|
||||
|
||||
/**
|
||||
* Configure the JSON decoder to use for mapping response data to
|
||||
* higher level objects.
|
||||
* @param decoder the JSON decoder to use
|
||||
*/
|
||||
B decoder(Decoder<?> decoder);
|
||||
|
||||
|
||||
@@ -34,7 +34,6 @@ import org.springframework.util.Assert;
|
||||
* {@code GraphQlTransport} that calls directly a {@link ExecutionGraphQlService}.
|
||||
*
|
||||
* @author Rossen Stoyanchev
|
||||
* @since 1.0.0
|
||||
*/
|
||||
final class GraphQlServiceGraphQlTransport extends AbstractDirectGraphQlTransport {
|
||||
|
||||
@@ -53,11 +52,11 @@ final class GraphQlServiceGraphQlTransport extends AbstractDirectGraphQlTranspor
|
||||
}
|
||||
|
||||
|
||||
public ExecutionGraphQlService getGraphQlService() {
|
||||
ExecutionGraphQlService getGraphQlService() {
|
||||
return this.graphQlService;
|
||||
}
|
||||
|
||||
public List<BiFunction<ExecutionInput, ExecutionInput.Builder, ExecutionInput>> getExecutionInputConfigurers() {
|
||||
List<BiFunction<ExecutionInput, ExecutionInput.Builder, ExecutionInput>> getExecutionInputConfigurers() {
|
||||
return this.executionInputConfigurers;
|
||||
}
|
||||
|
||||
|
||||
@@ -66,6 +66,7 @@ public interface GraphQlTester {
|
||||
* Variant of {@link #document(String)} that uses the given key to resolve
|
||||
* the GraphQL document from a file with the help of the configured
|
||||
* {@link Builder#documentSource(DocumentSource) DocumentSource}.
|
||||
* @param documentName the name of the document to send
|
||||
* @return spec for response assertions
|
||||
* @throws IllegalArgumentException if the documentName cannot be resolved
|
||||
* @throws AssertionError if the response status is not 200 (OK)
|
||||
@@ -94,6 +95,7 @@ public interface GraphQlTester {
|
||||
|
||||
/**
|
||||
* A builder to create a {@link GraphQlTester} instance.
|
||||
* @param <B> the type of builder
|
||||
*/
|
||||
interface Builder<B extends Builder<B>> {
|
||||
|
||||
@@ -111,6 +113,7 @@ public interface GraphQlTester {
|
||||
* <p>By default, this is set to {@link ResourceDocumentSource} with
|
||||
* classpath location {@code "graphql-test/"} and
|
||||
* {@link ResourceDocumentSource#FILE_EXTENSIONS} as extensions.
|
||||
* @param contentLoader the document content loader
|
||||
*/
|
||||
B documentSource(DocumentSource contentLoader);
|
||||
|
||||
@@ -130,6 +133,7 @@ public interface GraphQlTester {
|
||||
|
||||
/**
|
||||
* Declare options to gather input for a GraphQL request and execute it.
|
||||
* @param <T> the type of request
|
||||
*/
|
||||
interface Request<T extends Request<T>> {
|
||||
|
||||
@@ -311,7 +315,7 @@ public interface GraphQlTester {
|
||||
}
|
||||
|
||||
/**
|
||||
* Contains a decoded entity and provides options to assert it
|
||||
* Contains a decoded entity and provides options to assert it.
|
||||
*
|
||||
* @param <D> the entity type
|
||||
* @param <S> the {@code Entity} spec type
|
||||
@@ -320,6 +324,7 @@ public interface GraphQlTester {
|
||||
|
||||
/**
|
||||
* Verify the decoded entity is equal to the given value.
|
||||
* @param <T> the {@code Entity} spec type
|
||||
* @param expected the expected value
|
||||
* @return the {@code Entity} spec for further assertions
|
||||
*/
|
||||
@@ -327,6 +332,7 @@ public interface GraphQlTester {
|
||||
|
||||
/**
|
||||
* Verify the decoded entity is not equal to the given value.
|
||||
* @param <T> the {@code Entity} spec type
|
||||
* @param other the value to check against
|
||||
* @return the {@code Entity} spec for further assertions
|
||||
*/
|
||||
@@ -334,6 +340,7 @@ public interface GraphQlTester {
|
||||
|
||||
/**
|
||||
* Verify the decoded entity is the same instance as the given value.
|
||||
* @param <T> the {@code Entity} spec type
|
||||
* @param expected the expected value
|
||||
* @return the {@code Entity} spec for further assertions
|
||||
*/
|
||||
@@ -341,6 +348,7 @@ public interface GraphQlTester {
|
||||
|
||||
/**
|
||||
* Verify the decoded entity is not the same instance as the given value.
|
||||
* @param <T> the {@code Entity} spec type
|
||||
* @param other the value to check against
|
||||
* @return the {@code Entity} spec for further assertions
|
||||
*/
|
||||
@@ -348,6 +356,7 @@ public interface GraphQlTester {
|
||||
|
||||
/**
|
||||
* Verify the decoded entity matches the given predicate.
|
||||
* @param <T> the {@code Entity} spec type
|
||||
* @param predicate the predicate to apply
|
||||
* @return the {@code Entity} spec for further assertions
|
||||
*/
|
||||
@@ -355,6 +364,7 @@ public interface GraphQlTester {
|
||||
|
||||
/**
|
||||
* Verify the entity with the given {@link Consumer}.
|
||||
* @param <T> the {@code Entity} spec type
|
||||
* @param consumer the consumer to apply
|
||||
* @return the {@code Entity} spec for further assertions
|
||||
*/
|
||||
|
||||
@@ -37,6 +37,7 @@ public interface HttpGraphQlTester extends WebGraphQlTester {
|
||||
|
||||
/**
|
||||
* Create an {@link HttpGraphQlTester} that uses the given {@link WebTestClient}.
|
||||
* @param webTestClient the {@code WebTestClient} to use
|
||||
*/
|
||||
static HttpGraphQlTester create(WebTestClient webTestClient) {
|
||||
return builder(webTestClient.mutate()).build();
|
||||
@@ -45,6 +46,7 @@ public interface HttpGraphQlTester extends WebGraphQlTester {
|
||||
/**
|
||||
* Return a builder to initialize an {@link HttpGraphQlTester} by creating
|
||||
* the underlying {@link WebTestClient} through the given builder.
|
||||
* @param webTestClientBuilder the {@code WebTestClient} builder to use
|
||||
*/
|
||||
static HttpGraphQlTester.Builder<?> builder(WebTestClient.Builder webTestClientBuilder) {
|
||||
return new DefaultHttpGraphQlTesterBuilder(webTestClientBuilder);
|
||||
@@ -53,6 +55,7 @@ public interface HttpGraphQlTester extends WebGraphQlTester {
|
||||
|
||||
/**
|
||||
* Builder for the GraphQL over HTTP tester.
|
||||
* @param <B> the type of builder
|
||||
*/
|
||||
interface Builder<B extends Builder<B>> extends WebGraphQlTester.Builder<B> {
|
||||
|
||||
@@ -60,6 +63,7 @@ public interface HttpGraphQlTester extends WebGraphQlTester {
|
||||
* Customize the {@code WebTestClient} to use.
|
||||
* <p>Note that some properties of {@code WebTestClient.Builder} like the
|
||||
* base URL, headers, and codecs can be customized through this builder.
|
||||
* @param webClient a consumer that customizes the {@code WebClient} builder
|
||||
* @see #url(String)
|
||||
* @see #header(String, String...)
|
||||
* @see #codecConfigurer(Consumer)
|
||||
|
||||
@@ -64,6 +64,7 @@ public interface RSocketGraphQlTester extends GraphQlTester {
|
||||
|
||||
/**
|
||||
* Start with a given {@link #builder()}.
|
||||
* @param requesterBuilder the builder to use as a baseline
|
||||
*/
|
||||
static RSocketGraphQlTester.Builder<?> builder(RSocketRequester.Builder requesterBuilder) {
|
||||
return new DefaultRSocketGraphQlTesterBuilder(requesterBuilder);
|
||||
@@ -72,6 +73,7 @@ public interface RSocketGraphQlTester extends GraphQlTester {
|
||||
|
||||
/**
|
||||
* Builder for a GraphQL over RSocket tester.
|
||||
* @param <B> the type of builder
|
||||
*/
|
||||
interface Builder<B extends Builder<B>> extends GraphQlTester.Builder<B> {
|
||||
|
||||
@@ -119,11 +121,12 @@ public interface RSocketGraphQlTester extends GraphQlTester {
|
||||
* <p>Note that some properties of {@code RSocketRequester.Builder} like the
|
||||
* data MimeType, and the underlying RSocket transport can be customized
|
||||
* through this builder.
|
||||
* @param requester a consumer that customizes the {@code RSocketRequester} through its builder
|
||||
* @return the same builder instance
|
||||
* @see #dataMimeType(MimeType)
|
||||
* @see #tcp(String, int)
|
||||
* @see #webSocket(URI)
|
||||
* @see #clientTransport(ClientTransport)
|
||||
* @return the same builder instance
|
||||
*/
|
||||
B rsocketRequester(Consumer<RSocketRequester.Builder> requester);
|
||||
|
||||
|
||||
@@ -35,7 +35,6 @@ import org.springframework.lang.Nullable;
|
||||
* {@code GraphQlTransport} that calls directly a {@link WebGraphQlHandler}.
|
||||
*
|
||||
* @author Rossen Stoyanchev
|
||||
* @since 1.0.0
|
||||
*/
|
||||
final class WebGraphQlHandlerGraphQlTransport extends AbstractDirectGraphQlTransport {
|
||||
|
||||
@@ -51,26 +50,26 @@ final class WebGraphQlHandlerGraphQlTransport extends AbstractDirectGraphQlTrans
|
||||
WebGraphQlHandlerGraphQlTransport(
|
||||
@Nullable URI url, HttpHeaders headers, WebGraphQlHandler handler, CodecConfigurer configurer) {
|
||||
|
||||
this.url = (url != null ? url : URI.create(""));
|
||||
this.url = (url != null) ? url : URI.create("");
|
||||
this.headers.addAll(headers);
|
||||
this.graphQlHandler = handler;
|
||||
this.codecConfigurer = configurer;
|
||||
}
|
||||
|
||||
|
||||
public URI getUrl() {
|
||||
URI getUrl() {
|
||||
return this.url;
|
||||
}
|
||||
|
||||
public HttpHeaders getHeaders() {
|
||||
HttpHeaders getHeaders() {
|
||||
return this.headers;
|
||||
}
|
||||
|
||||
public WebGraphQlHandler getGraphQlHandler() {
|
||||
WebGraphQlHandler getGraphQlHandler() {
|
||||
return this.graphQlHandler;
|
||||
}
|
||||
|
||||
public CodecConfigurer getCodecConfigurer() {
|
||||
CodecConfigurer getCodecConfigurer() {
|
||||
return this.codecConfigurer;
|
||||
}
|
||||
|
||||
|
||||
@@ -43,6 +43,7 @@ public interface WebGraphQlTester extends GraphQlTester {
|
||||
|
||||
/**
|
||||
* Create a {@link WebGraphQlTester} instance.
|
||||
* @param graphQlHandler the web GraphQL handler to be tested
|
||||
*/
|
||||
static WebGraphQlTester create(WebGraphQlHandler graphQlHandler) {
|
||||
return builder(graphQlHandler).build();
|
||||
@@ -59,6 +60,7 @@ public interface WebGraphQlTester extends GraphQlTester {
|
||||
|
||||
/**
|
||||
* Common builder for Web {@code GraphQlTester} extensions.
|
||||
* @param <B> the type of builder
|
||||
*/
|
||||
interface Builder<B extends Builder<B>> extends GraphQlTester.Builder<B> {
|
||||
|
||||
@@ -91,6 +93,7 @@ public interface WebGraphQlTester extends GraphQlTester {
|
||||
/**
|
||||
* Configure the underlying {@code CodecConfigurer} to use for all JSON
|
||||
* encoding and decoding needs.
|
||||
* @param codecsConsumer a consumer that customizes the configured codecs
|
||||
*/
|
||||
B codecConfigurer(Consumer<CodecConfigurer> codecsConsumer);
|
||||
|
||||
|
||||
@@ -77,6 +77,7 @@ public interface WebSocketGraphQlTester extends WebGraphQlTester {
|
||||
|
||||
/**
|
||||
* Builder for a GraphQL over WebSocket tester.
|
||||
* @param <B> the type of builder
|
||||
*/
|
||||
interface Builder<B extends Builder<B>> extends WebGraphQlTester.Builder<B> {
|
||||
|
||||
|
||||
@@ -34,12 +34,11 @@ import org.springframework.util.Assert;
|
||||
* {@code GraphQlTransport} for GraphQL over HTTP via {@link WebTestClient}.
|
||||
*
|
||||
* @author Rossen Stoyanchev
|
||||
* @since 1.0.0
|
||||
*/
|
||||
final class WebTestClientTransport implements GraphQlTransport {
|
||||
|
||||
private static final ParameterizedTypeReference<Map<String, Object>> MAP_TYPE =
|
||||
new ParameterizedTypeReference<Map<String, Object>>() {};
|
||||
new ParameterizedTypeReference<Map<String, Object>>() { };
|
||||
|
||||
|
||||
private final WebTestClient webTestClient;
|
||||
@@ -65,7 +64,7 @@ final class WebTestClientTransport implements GraphQlTransport {
|
||||
.returnResult()
|
||||
.getResponseBody();
|
||||
|
||||
responseMap = (responseMap != null ? responseMap : Collections.emptyMap());
|
||||
responseMap = (responseMap != null) ? responseMap : Collections.emptyMap();
|
||||
GraphQlResponse response = GraphQlTransport.createResponse(responseMap);
|
||||
return Mono.just(response);
|
||||
}
|
||||
|
||||
@@ -139,7 +139,7 @@ public class GraphQlTesterTests extends GraphQlTesterTestSupport {
|
||||
assertThat(actual.getName()).isEqualTo("Luke Skywalker");
|
||||
|
||||
response.path("")
|
||||
.entity(new ParameterizedTypeReference<Map<String, MovieCharacter>>() {})
|
||||
.entity(new ParameterizedTypeReference<Map<String, MovieCharacter>>() { })
|
||||
.isEqualTo(Collections.singletonMap("me", luke));
|
||||
|
||||
assertThat(getActualRequestDocument()).contains(document);
|
||||
@@ -186,7 +186,7 @@ public class GraphQlTesterTests extends GraphQlTesterTestSupport {
|
||||
"Request: document='{me {name, friends}}'");
|
||||
|
||||
response.path("me.friends")
|
||||
.entityList(new ParameterizedTypeReference<MovieCharacter>() {})
|
||||
.entityList(new ParameterizedTypeReference<MovieCharacter>() { })
|
||||
.containsExactly(han, leia);
|
||||
|
||||
assertThat(getActualRequestDocument()).contains(document);
|
||||
|
||||
@@ -117,7 +117,7 @@ public class RSocketGraphQlTesterBuilderTests {
|
||||
assertThat(testDecoder.getLastValue()).isEqualTo(character);
|
||||
}
|
||||
|
||||
|
||||
|
||||
private static class BuilderSetup {
|
||||
|
||||
private final MockExecutionGraphQlService graphQlService = new MockExecutionGraphQlService();
|
||||
|
||||
Reference in New Issue
Block a user