Refactoring in DefaultGraphQlTester

Align with similar changes in GraphQlClient.
This commit is contained in:
rstoyanchev
2022-03-21 15:04:53 +00:00
parent 4d50ecd6f1
commit 83001522f6
6 changed files with 90 additions and 34 deletions

View File

@@ -113,7 +113,7 @@ public abstract class AbstractGraphQlTesterBuilder<B extends AbstractGraphQlTest
}
return new DefaultGraphQlTester(transport, this.errorFilter,
this.jsonPathConfig, this.documentSource, this.responseTimeout, getBuilderInitializer());
this.jsonPathConfig, this.documentSource, this.responseTimeout);
}
/**

View File

@@ -70,28 +70,23 @@ final class DefaultGraphQlTester implements GraphQlTester {
private final Duration responseTimeout;
private final Consumer<AbstractGraphQlTesterBuilder<?>> builderInitializer;
/**
* Package private constructor for use from {@link AbstractGraphQlTesterBuilder}.
*/
DefaultGraphQlTester(
GraphQlTransport transport, @Nullable Predicate<ResponseError> errorFilter,
Configuration jsonPathConfig, DocumentSource documentSource, Duration timeout,
Consumer<AbstractGraphQlTesterBuilder<?>> builderInitializer) {
Configuration jsonPathConfig, DocumentSource documentSource, Duration timeout) {
Assert.notNull(transport, "GraphQlTransport is required");
Assert.notNull(jsonPathConfig, "JSONPath Configuration is required");
Assert.notNull(documentSource, "DocumentSource is required");
Assert.notNull(builderInitializer, "`builderInitializer` is required");
this.transport = transport;
this.errorFilter = errorFilter;
this.jsonPathConfig = jsonPathConfig;
this.documentSource = documentSource;
this.responseTimeout = timeout;
this.builderInitializer = builderInitializer;
}
@@ -107,30 +102,14 @@ final class DefaultGraphQlTester implements GraphQlTester {
return document(document);
}
@Override
public Builder mutate() {
Builder builder = new Builder(this.transport);
this.builderInitializer.accept(builder);
return builder;
}
/**
* Default {@link GraphQlTester.Builder} with a given transport.
* The default tester is unaware of transport details, and cannot implement
* mutate directly. It should be wrapped from transport aware extensions via
* {@link AbstractDelegatingGraphQlTester} that also implement mutate.
*/
static final class Builder extends AbstractGraphQlTesterBuilder<Builder> {
private final GraphQlTransport transport;
Builder(GraphQlTransport transport) {
this.transport = transport;
}
@Override
public GraphQlTester build() {
return super.buildGraphQlTester(this.transport);
}
@Override
public Builder<?> mutate() {
throw new UnsupportedOperationException();
}

View File

@@ -0,0 +1,77 @@
/*
* Copyright 2002-2022 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.graphql.test.tester;
import java.util.function.Consumer;
import org.springframework.graphql.client.GraphQlTransport;
import org.springframework.util.Assert;
/**
* {@link GraphQlTester} with a given, externally prepared transport.
*
* @author Rossen Stoyanchev
* @since 1.0.0
*/
final class GenericGraphQlTester extends AbstractDelegatingGraphQlTester {
private final GraphQlTransport transport;
private final Consumer<AbstractGraphQlTesterBuilder<?>> builderInitializer;
GenericGraphQlTester(
GraphQlTester delegate, GraphQlTransport transport,
Consumer<AbstractGraphQlTesterBuilder<?>> builderInitializer) {
super(delegate);
Assert.notNull(transport, "GraphQlTransport is required");
Assert.notNull(builderInitializer, "'builderInitializer' is required");
this.transport = transport;
this.builderInitializer = builderInitializer;
}
@Override
public Builder mutate() {
Builder builder = new Builder(this.transport);
this.builderInitializer.accept(builder);
return builder;
}
/**
* Default {@link GraphQlTester.Builder} with a given transport.
*/
static final class Builder extends AbstractGraphQlTesterBuilder<Builder> {
private final GraphQlTransport transport;
Builder(GraphQlTransport transport) {
this.transport = transport;
}
@Override
public GraphQlTester build() {
GraphQlTester tester = super.buildGraphQlTester(this.transport);
return new GenericGraphQlTester(tester, this.transport, getBuilderInitializer());
}
}
}

View File

@@ -88,7 +88,7 @@ public interface GraphQlTester {
* @return the builder for further initialization
*/
static GraphQlTester.Builder<?> builder(GraphQlTransport transport) {
return new DefaultGraphQlTester.Builder(transport);
return new GenericGraphQlTester.Builder(transport);
}

View File

@@ -70,9 +70,9 @@ final class DefaultGraphQlClient implements GraphQlClient {
}
/**
* The default client is unaware of transport details, and doesn't implement
* this method. It should always be wrapped via with a transport specific
* {@link AbstractDelegatingGraphQlClient} that implements mutation.
* The default client is unaware of transport details, and cannot implement
* mutate directly. It should be wrapped from transport aware extensions via
* {@link AbstractDelegatingGraphQlClient} that also implement mutate.
*/
@Override
public Builder<?> mutate() {

View File

@@ -49,7 +49,7 @@ final class GenericGraphQlClient extends AbstractDelegatingGraphQlClient {
@Override
public Builder mutate() {
Builder builder = new Builder(transport);
Builder builder = new Builder(this.transport);
this.builderInitializer.accept(builder);
return builder;
}