Skip to content

Commit 8300152

Browse files
committed
Refactoring in DefaultGraphQlTester
Align with similar changes in GraphQlClient.
1 parent 4d50ecd commit 8300152

File tree

6 files changed

+90
-34
lines changed

6 files changed

+90
-34
lines changed

spring-graphql-test/src/main/java/org/springframework/graphql/test/tester/AbstractGraphQlTesterBuilder.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ protected GraphQlTester buildGraphQlTester(GraphQlTransport transport) {
113113
}
114114

115115
return new DefaultGraphQlTester(transport, this.errorFilter,
116-
this.jsonPathConfig, this.documentSource, this.responseTimeout, getBuilderInitializer());
116+
this.jsonPathConfig, this.documentSource, this.responseTimeout);
117117
}
118118

119119
/**

spring-graphql-test/src/main/java/org/springframework/graphql/test/tester/DefaultGraphQlTester.java

Lines changed: 7 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -70,28 +70,23 @@ final class DefaultGraphQlTester implements GraphQlTester {
7070

7171
private final Duration responseTimeout;
7272

73-
private final Consumer<AbstractGraphQlTesterBuilder<?>> builderInitializer;
74-
7573

7674
/**
7775
* Package private constructor for use from {@link AbstractGraphQlTesterBuilder}.
7876
*/
7977
DefaultGraphQlTester(
8078
GraphQlTransport transport, @Nullable Predicate<ResponseError> errorFilter,
81-
Configuration jsonPathConfig, DocumentSource documentSource, Duration timeout,
82-
Consumer<AbstractGraphQlTesterBuilder<?>> builderInitializer) {
79+
Configuration jsonPathConfig, DocumentSource documentSource, Duration timeout) {
8380

8481
Assert.notNull(transport, "GraphQlTransport is required");
8582
Assert.notNull(jsonPathConfig, "JSONPath Configuration is required");
8683
Assert.notNull(documentSource, "DocumentSource is required");
87-
Assert.notNull(builderInitializer, "`builderInitializer` is required");
8884

8985
this.transport = transport;
9086
this.errorFilter = errorFilter;
9187
this.jsonPathConfig = jsonPathConfig;
9288
this.documentSource = documentSource;
9389
this.responseTimeout = timeout;
94-
this.builderInitializer = builderInitializer;
9590
}
9691

9792

@@ -107,30 +102,14 @@ public Request<?> documentName(String documentName) {
107102
return document(document);
108103
}
109104

110-
@Override
111-
public Builder mutate() {
112-
Builder builder = new Builder(this.transport);
113-
this.builderInitializer.accept(builder);
114-
return builder;
115-
}
116-
117-
118105
/**
119-
* Default {@link GraphQlTester.Builder} with a given transport.
106+
* The default tester is unaware of transport details, and cannot implement
107+
* mutate directly. It should be wrapped from transport aware extensions via
108+
* {@link AbstractDelegatingGraphQlTester} that also implement mutate.
120109
*/
121-
static final class Builder extends AbstractGraphQlTesterBuilder<Builder> {
122-
123-
private final GraphQlTransport transport;
124-
125-
Builder(GraphQlTransport transport) {
126-
this.transport = transport;
127-
}
128-
129-
@Override
130-
public GraphQlTester build() {
131-
return super.buildGraphQlTester(this.transport);
132-
}
133-
110+
@Override
111+
public Builder<?> mutate() {
112+
throw new UnsupportedOperationException();
134113
}
135114

136115

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
/*
2+
* Copyright 2002-2022 the original author or authors.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* https://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package org.springframework.graphql.test.tester;
18+
19+
20+
import java.util.function.Consumer;
21+
22+
import org.springframework.graphql.client.GraphQlTransport;
23+
import org.springframework.util.Assert;
24+
25+
/**
26+
* {@link GraphQlTester} with a given, externally prepared transport.
27+
*
28+
* @author Rossen Stoyanchev
29+
* @since 1.0.0
30+
*/
31+
final class GenericGraphQlTester extends AbstractDelegatingGraphQlTester {
32+
33+
private final GraphQlTransport transport;
34+
35+
private final Consumer<AbstractGraphQlTesterBuilder<?>> builderInitializer;
36+
37+
38+
GenericGraphQlTester(
39+
GraphQlTester delegate, GraphQlTransport transport,
40+
Consumer<AbstractGraphQlTesterBuilder<?>> builderInitializer) {
41+
42+
super(delegate);
43+
Assert.notNull(transport, "GraphQlTransport is required");
44+
Assert.notNull(builderInitializer, "'builderInitializer' is required");
45+
this.transport = transport;
46+
this.builderInitializer = builderInitializer;
47+
}
48+
49+
50+
@Override
51+
public Builder mutate() {
52+
Builder builder = new Builder(this.transport);
53+
this.builderInitializer.accept(builder);
54+
return builder;
55+
}
56+
57+
58+
/**
59+
* Default {@link GraphQlTester.Builder} with a given transport.
60+
*/
61+
static final class Builder extends AbstractGraphQlTesterBuilder<Builder> {
62+
63+
private final GraphQlTransport transport;
64+
65+
Builder(GraphQlTransport transport) {
66+
this.transport = transport;
67+
}
68+
69+
@Override
70+
public GraphQlTester build() {
71+
GraphQlTester tester = super.buildGraphQlTester(this.transport);
72+
return new GenericGraphQlTester(tester, this.transport, getBuilderInitializer());
73+
}
74+
75+
}
76+
77+
}

spring-graphql-test/src/main/java/org/springframework/graphql/test/tester/GraphQlTester.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ public interface GraphQlTester {
8888
* @return the builder for further initialization
8989
*/
9090
static GraphQlTester.Builder<?> builder(GraphQlTransport transport) {
91-
return new DefaultGraphQlTester.Builder(transport);
91+
return new GenericGraphQlTester.Builder(transport);
9292
}
9393

9494

spring-graphql/src/main/java/org/springframework/graphql/client/DefaultGraphQlClient.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -70,9 +70,9 @@ public RequestSpec documentName(String name) {
7070
}
7171

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

spring-graphql/src/main/java/org/springframework/graphql/client/GenericGraphQlClient.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ final class GenericGraphQlClient extends AbstractDelegatingGraphQlClient {
4949

5050
@Override
5151
public Builder mutate() {
52-
Builder builder = new Builder(transport);
52+
Builder builder = new Builder(this.transport);
5353
this.builderInitializer.accept(builder);
5454
return builder;
5555
}

0 commit comments

Comments
 (0)