Browse Source

Add defaultApiVersion to WebTestClient

See gh-34919
pull/34921/head
rstoyanchev 7 months ago
parent
commit
a024e5985a
  1. 20
      spring-test/src/main/java/org/springframework/test/web/reactive/server/DefaultWebTestClient.java
  2. 11
      spring-test/src/main/java/org/springframework/test/web/reactive/server/DefaultWebTestClientBuilder.java
  3. 9
      spring-test/src/main/java/org/springframework/test/web/reactive/server/WebTestClient.java

20
spring-test/src/main/java/org/springframework/test/web/reactive/server/DefaultWebTestClient.java

@ -89,6 +89,8 @@ class DefaultWebTestClient implements WebTestClient {
private final @Nullable MultiValueMap<String, String> defaultCookies; private final @Nullable MultiValueMap<String, String> defaultCookies;
private final @Nullable Object defaultApiVersion;
private final @Nullable ApiVersionInserter apiVersionInserter; private final @Nullable ApiVersionInserter apiVersionInserter;
private final Consumer<EntityExchangeResult<?>> entityResultConsumer; private final Consumer<EntityExchangeResult<?>> entityResultConsumer;
@ -104,7 +106,8 @@ class DefaultWebTestClient implements WebTestClient {
ClientHttpConnector connector, ExchangeStrategies exchangeStrategies, ClientHttpConnector connector, ExchangeStrategies exchangeStrategies,
Function<ClientHttpConnector, ExchangeFunction> exchangeFactory, UriBuilderFactory uriBuilderFactory, Function<ClientHttpConnector, ExchangeFunction> exchangeFactory, UriBuilderFactory uriBuilderFactory,
@Nullable HttpHeaders headers, @Nullable MultiValueMap<String, String> cookies, @Nullable HttpHeaders headers, @Nullable MultiValueMap<String, String> cookies,
@Nullable ApiVersionInserter apiVersionInserter, Consumer<EntityExchangeResult<?>> entityResultConsumer, @Nullable Object defaultApiVersion, @Nullable ApiVersionInserter apiVersionInserter,
Consumer<EntityExchangeResult<?>> entityResultConsumer,
@Nullable Duration responseTimeout, DefaultWebTestClientBuilder clientBuilder) { @Nullable Duration responseTimeout, DefaultWebTestClientBuilder clientBuilder) {
this.wiretapConnector = new WiretapConnector(connector); this.wiretapConnector = new WiretapConnector(connector);
@ -114,6 +117,7 @@ class DefaultWebTestClient implements WebTestClient {
this.uriBuilderFactory = uriBuilderFactory; this.uriBuilderFactory = uriBuilderFactory;
this.defaultHeaders = headers; this.defaultHeaders = headers;
this.defaultCookies = cookies; this.defaultCookies = cookies;
this.defaultApiVersion = defaultApiVersion;
this.apiVersionInserter = apiVersionInserter; this.apiVersionInserter = apiVersionInserter;
this.entityResultConsumer = entityResultConsumer; this.entityResultConsumer = entityResultConsumer;
this.responseTimeout = (responseTimeout != null ? responseTimeout : Duration.ofSeconds(5)); this.responseTimeout = (responseTimeout != null ? responseTimeout : Duration.ofSeconds(5));
@ -386,9 +390,10 @@ class DefaultWebTestClient implements WebTestClient {
if (!this.headers.isEmpty()) { if (!this.headers.isEmpty()) {
headersToUse.putAll(this.headers); headersToUse.putAll(this.headers);
} }
if (this.apiVersion != null) { Object version = getApiVersionOrDefault();
if (version != null) {
Assert.state(apiVersionInserter != null, "No ApiVersionInserter configured"); Assert.state(apiVersionInserter != null, "No ApiVersionInserter configured");
apiVersionInserter.insertVersion(this.apiVersion, headersToUse); apiVersionInserter.insertVersion(version, headersToUse);
} }
}) })
.cookies(cookiesToUse -> { .cookies(cookiesToUse -> {
@ -404,13 +409,18 @@ class DefaultWebTestClient implements WebTestClient {
private URI initUri() { private URI initUri() {
URI uriToUse = this.uri != null ? this.uri : DefaultWebTestClient.this.uriBuilderFactory.expand(""); URI uriToUse = this.uri != null ? this.uri : DefaultWebTestClient.this.uriBuilderFactory.expand("");
if (this.apiVersion != null) { Object version = getApiVersionOrDefault();
if (version != null) {
Assert.state(apiVersionInserter != null, "No ApiVersionInserter configured"); Assert.state(apiVersionInserter != null, "No ApiVersionInserter configured");
uriToUse = apiVersionInserter.insertVersion(this.apiVersion, uriToUse); uriToUse = apiVersionInserter.insertVersion(version, uriToUse);
} }
return uriToUse; return uriToUse;
} }
private @Nullable Object getApiVersionOrDefault() {
return (this.apiVersion != null ? this.apiVersion : DefaultWebTestClient.this.defaultApiVersion);
}
} }

11
spring-test/src/main/java/org/springframework/test/web/reactive/server/DefaultWebTestClientBuilder.java

@ -86,6 +86,8 @@ class DefaultWebTestClientBuilder implements WebTestClient.Builder {
private @Nullable MultiValueMap<String, String> defaultCookies; private @Nullable MultiValueMap<String, String> defaultCookies;
private @Nullable Object defaultApiVersion;
private @Nullable ApiVersionInserter apiVersionInserter; private @Nullable ApiVersionInserter apiVersionInserter;
private @Nullable List<ExchangeFilterFunction> filters; private @Nullable List<ExchangeFilterFunction> filters;
@ -145,6 +147,7 @@ class DefaultWebTestClientBuilder implements WebTestClient.Builder {
} }
this.defaultCookies = (other.defaultCookies != null ? this.defaultCookies = (other.defaultCookies != null ?
new LinkedMultiValueMap<>(other.defaultCookies) : null); new LinkedMultiValueMap<>(other.defaultCookies) : null);
this.defaultApiVersion = other.defaultApiVersion;
this.apiVersionInserter = other.apiVersionInserter; this.apiVersionInserter = other.apiVersionInserter;
this.filters = (other.filters != null ? new ArrayList<>(other.filters) : null); this.filters = (other.filters != null ? new ArrayList<>(other.filters) : null);
this.entityResultConsumer = other.entityResultConsumer; this.entityResultConsumer = other.entityResultConsumer;
@ -204,6 +207,12 @@ class DefaultWebTestClientBuilder implements WebTestClient.Builder {
return this.defaultCookies; return this.defaultCookies;
} }
@Override
public WebTestClient.Builder defaultApiVersion(Object version) {
this.defaultApiVersion = version;
return this;
}
@Override @Override
public WebTestClient.Builder apiVersionInserter(ApiVersionInserter apiVersionInserter) { public WebTestClient.Builder apiVersionInserter(ApiVersionInserter apiVersionInserter) {
this.apiVersionInserter = apiVersionInserter; this.apiVersionInserter = apiVersionInserter;
@ -297,7 +306,7 @@ class DefaultWebTestClientBuilder implements WebTestClient.Builder {
connectorToUse, exchangeStrategies, exchangeFactory, initUriBuilderFactory(), connectorToUse, exchangeStrategies, exchangeFactory, initUriBuilderFactory(),
(this.defaultHeaders != null ? HttpHeaders.readOnlyHttpHeaders(this.defaultHeaders) : null), (this.defaultHeaders != null ? HttpHeaders.readOnlyHttpHeaders(this.defaultHeaders) : null),
(this.defaultCookies != null ? CollectionUtils.unmodifiableMultiValueMap(this.defaultCookies) : null), (this.defaultCookies != null ? CollectionUtils.unmodifiableMultiValueMap(this.defaultCookies) : null),
this.apiVersionInserter, this.entityResultConsumer, this.defaultApiVersion, this.apiVersionInserter, this.entityResultConsumer,
this.responseTimeout, new DefaultWebTestClientBuilder(this)); this.responseTimeout, new DefaultWebTestClientBuilder(this));
} }

9
spring-test/src/main/java/org/springframework/test/web/reactive/server/WebTestClient.java

@ -430,6 +430,15 @@ public interface WebTestClient {
*/ */
Builder defaultCookies(Consumer<MultiValueMap<String, String>> cookiesConsumer); Builder defaultCookies(Consumer<MultiValueMap<String, String>> cookiesConsumer);
/**
* Global option to specify an API version to add to every request,
* if not already set.
* @param version the version to use
* @return this builder
* @since 7.0
*/
Builder defaultApiVersion(Object version);
/** /**
* Configure an {@link ApiVersionInserter} to abstract how an API version * Configure an {@link ApiVersionInserter} to abstract how an API version
* specified via {@link RequestHeadersSpec#apiVersion(Object)} * specified via {@link RequestHeadersSpec#apiVersion(Object)}

Loading…
Cancel
Save