Add WebTestClient.mutate()

This commit introduces a WebTestClient.mutate() method,
returning a WebTestClient.Builder.

Issue: SPR-15657
This commit is contained in:
Arjen Poutsma
2017-06-20 17:06:41 +02:00
parent 535103cd52
commit a95cf07317
4 changed files with 31 additions and 6 deletions

View File

@@ -74,7 +74,8 @@ class DefaultWebTestClient implements WebTestClient {
private final AtomicLong requestIndex = new AtomicLong();
DefaultWebTestClient(WebClient.Builder clientBuilder, ClientHttpConnector connector, @Nullable Duration timeout) {
DefaultWebTestClient(WebClient.Builder clientBuilder, ClientHttpConnector connector,
@Nullable Duration timeout) {
Assert.notNull(clientBuilder, "WebClient.Builder is required");
this.wiretapConnector = new WiretapConnector(connector);
this.webClient = clientBuilder.clientConnector(this.wiretapConnector).build();
@@ -122,6 +123,12 @@ class DefaultWebTestClient implements WebTestClient {
return toUriSpec(wc -> wc.method(HttpMethod.OPTIONS));
}
@Override
public Builder mutate() {
return new DefaultWebTestClientBuilder(this.wiretapConnector.getDelegate(),
this.webClient.mutate(), this.timeout);
}
private <S extends RequestHeadersSpec<?>> UriSpec<S> toUriSpec(
Function<WebClient, WebClient.UriSpec<WebClient.RequestBodySpec>> function) {

View File

@@ -24,6 +24,7 @@ import org.springframework.http.HttpHeaders;
import org.springframework.http.client.reactive.ClientHttpConnector;
import org.springframework.http.client.reactive.ReactorClientHttpConnector;
import org.springframework.http.server.reactive.HttpHandler;
import org.springframework.lang.Nullable;
import org.springframework.util.MultiValueMap;
import org.springframework.web.reactive.function.client.ExchangeFilterFunction;
import org.springframework.web.reactive.function.client.ExchangeStrategies;
@@ -38,7 +39,7 @@ import org.springframework.web.util.UriBuilderFactory;
*/
class DefaultWebTestClientBuilder implements WebTestClient.Builder {
private final WebClient.Builder webClientBuilder = WebClient.builder();
private final WebClient.Builder webClientBuilder;
private final ClientHttpConnector connector;
@@ -49,12 +50,21 @@ class DefaultWebTestClientBuilder implements WebTestClient.Builder {
this(new ReactorClientHttpConnector());
}
DefaultWebTestClientBuilder(ClientHttpConnector connector) {
this.connector = connector;
DefaultWebTestClientBuilder(HttpHandler httpHandler) {
this(new HttpHandlerConnector(httpHandler));
}
DefaultWebTestClientBuilder(HttpHandler httpHandler) {
this.connector = new HttpHandlerConnector(httpHandler);
DefaultWebTestClientBuilder(ClientHttpConnector connector) {
this(connector, null, null);
}
DefaultWebTestClientBuilder(ClientHttpConnector connector,
@Nullable WebClient.Builder webClientBuilder,
@Nullable Duration responseTimeout) {
this.connector = connector;
this.webClientBuilder = (webClientBuilder != null ? webClientBuilder : WebClient.builder());
this.responseTimeout = responseTimeout;
}

View File

@@ -127,6 +127,11 @@ public interface WebTestClient {
UriSpec<RequestHeadersSpec<?>> options();
/**
* Return a builder to mutate properties of this web test client.
*/
Builder mutate();
// Static, factory methods
/**

View File

@@ -50,6 +50,9 @@ class WiretapConnector implements ClientHttpConnector {
this.delegate = delegate;
}
public ClientHttpConnector getDelegate() {
return this.delegate;
}
@Override
public Mono<ClientHttpResponse> connect(HttpMethod method, URI uri,