Skip to content

Commit

Permalink
Add WebTestClient.mutate()
Browse files Browse the repository at this point in the history
This commit introduces a WebTestClient.mutate() method,
returning a WebTestClient.Builder.

Issue: SPR-15657
  • Loading branch information
poutsma committed Jun 20, 2017
1 parent 535103c commit a95cf07
Show file tree
Hide file tree
Showing 4 changed files with 30 additions and 5 deletions.
Expand Up @@ -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();
Expand Down Expand Up @@ -122,6 +123,12 @@ public UriSpec<RequestHeadersSpec<?>> options() {
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) {

Expand Down
Expand Up @@ -24,6 +24,7 @@
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;
Expand All @@ -38,7 +39,7 @@
*/
class DefaultWebTestClientBuilder implements WebTestClient.Builder {

private final WebClient.Builder webClientBuilder = WebClient.builder();
private final WebClient.Builder webClientBuilder;

private final ClientHttpConnector connector;

Expand All @@ -49,12 +50,21 @@ class DefaultWebTestClientBuilder implements WebTestClient.Builder {
this(new ReactorClientHttpConnector());
}

DefaultWebTestClientBuilder(HttpHandler httpHandler) {
this(new HttpHandlerConnector(httpHandler));
}

DefaultWebTestClientBuilder(ClientHttpConnector connector) {
this.connector = connector;
this(connector, null, null);
}

DefaultWebTestClientBuilder(HttpHandler httpHandler) {
this.connector = new HttpHandlerConnector(httpHandler);
DefaultWebTestClientBuilder(ClientHttpConnector connector,
@Nullable WebClient.Builder webClientBuilder,
@Nullable Duration responseTimeout) {

this.connector = connector;
this.webClientBuilder = (webClientBuilder != null ? webClientBuilder : WebClient.builder());
this.responseTimeout = responseTimeout;
}


Expand Down
Expand Up @@ -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

/**
Expand Down
Expand Up @@ -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,
Expand Down

0 comments on commit a95cf07

Please sign in to comment.