Skip to content

Commit a024e59

Browse files
committed
Add defaultApiVersion to WebTestClient
See gh-34919
1 parent 5b19f62 commit a024e59

File tree

3 files changed

+34
-6
lines changed

3 files changed

+34
-6
lines changed

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

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,8 @@ class DefaultWebTestClient implements WebTestClient {
8989

9090
private final @Nullable MultiValueMap<String, String> defaultCookies;
9191

92+
private final @Nullable Object defaultApiVersion;
93+
9294
private final @Nullable ApiVersionInserter apiVersionInserter;
9395

9496
private final Consumer<EntityExchangeResult<?>> entityResultConsumer;
@@ -104,7 +106,8 @@ class DefaultWebTestClient implements WebTestClient {
104106
ClientHttpConnector connector, ExchangeStrategies exchangeStrategies,
105107
Function<ClientHttpConnector, ExchangeFunction> exchangeFactory, UriBuilderFactory uriBuilderFactory,
106108
@Nullable HttpHeaders headers, @Nullable MultiValueMap<String, String> cookies,
107-
@Nullable ApiVersionInserter apiVersionInserter, Consumer<EntityExchangeResult<?>> entityResultConsumer,
109+
@Nullable Object defaultApiVersion, @Nullable ApiVersionInserter apiVersionInserter,
110+
Consumer<EntityExchangeResult<?>> entityResultConsumer,
108111
@Nullable Duration responseTimeout, DefaultWebTestClientBuilder clientBuilder) {
109112

110113
this.wiretapConnector = new WiretapConnector(connector);
@@ -114,6 +117,7 @@ class DefaultWebTestClient implements WebTestClient {
114117
this.uriBuilderFactory = uriBuilderFactory;
115118
this.defaultHeaders = headers;
116119
this.defaultCookies = cookies;
120+
this.defaultApiVersion = defaultApiVersion;
117121
this.apiVersionInserter = apiVersionInserter;
118122
this.entityResultConsumer = entityResultConsumer;
119123
this.responseTimeout = (responseTimeout != null ? responseTimeout : Duration.ofSeconds(5));
@@ -386,9 +390,10 @@ private ClientRequest.Builder initRequestBuilder() {
386390
if (!this.headers.isEmpty()) {
387391
headersToUse.putAll(this.headers);
388392
}
389-
if (this.apiVersion != null) {
393+
Object version = getApiVersionOrDefault();
394+
if (version != null) {
390395
Assert.state(apiVersionInserter != null, "No ApiVersionInserter configured");
391-
apiVersionInserter.insertVersion(this.apiVersion, headersToUse);
396+
apiVersionInserter.insertVersion(version, headersToUse);
392397
}
393398
})
394399
.cookies(cookiesToUse -> {
@@ -404,13 +409,18 @@ private ClientRequest.Builder initRequestBuilder() {
404409

405410
private URI initUri() {
406411
URI uriToUse = this.uri != null ? this.uri : DefaultWebTestClient.this.uriBuilderFactory.expand("");
407-
if (this.apiVersion != null) {
412+
Object version = getApiVersionOrDefault();
413+
if (version != null) {
408414
Assert.state(apiVersionInserter != null, "No ApiVersionInserter configured");
409-
uriToUse = apiVersionInserter.insertVersion(this.apiVersion, uriToUse);
415+
uriToUse = apiVersionInserter.insertVersion(version, uriToUse);
410416
}
411417
return uriToUse;
412418
}
413419

420+
private @Nullable Object getApiVersionOrDefault() {
421+
return (this.apiVersion != null ? this.apiVersion : DefaultWebTestClient.this.defaultApiVersion);
422+
}
423+
414424
}
415425

416426

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

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,8 @@ class DefaultWebTestClientBuilder implements WebTestClient.Builder {
8686

8787
private @Nullable MultiValueMap<String, String> defaultCookies;
8888

89+
private @Nullable Object defaultApiVersion;
90+
8991
private @Nullable ApiVersionInserter apiVersionInserter;
9092

9193
private @Nullable List<ExchangeFilterFunction> filters;
@@ -145,6 +147,7 @@ class DefaultWebTestClientBuilder implements WebTestClient.Builder {
145147
}
146148
this.defaultCookies = (other.defaultCookies != null ?
147149
new LinkedMultiValueMap<>(other.defaultCookies) : null);
150+
this.defaultApiVersion = other.defaultApiVersion;
148151
this.apiVersionInserter = other.apiVersionInserter;
149152
this.filters = (other.filters != null ? new ArrayList<>(other.filters) : null);
150153
this.entityResultConsumer = other.entityResultConsumer;
@@ -204,6 +207,12 @@ private MultiValueMap<String, String> initCookies() {
204207
return this.defaultCookies;
205208
}
206209

210+
@Override
211+
public WebTestClient.Builder defaultApiVersion(Object version) {
212+
this.defaultApiVersion = version;
213+
return this;
214+
}
215+
207216
@Override
208217
public WebTestClient.Builder apiVersionInserter(ApiVersionInserter apiVersionInserter) {
209218
this.apiVersionInserter = apiVersionInserter;
@@ -297,7 +306,7 @@ public WebTestClient build() {
297306
connectorToUse, exchangeStrategies, exchangeFactory, initUriBuilderFactory(),
298307
(this.defaultHeaders != null ? HttpHeaders.readOnlyHttpHeaders(this.defaultHeaders) : null),
299308
(this.defaultCookies != null ? CollectionUtils.unmodifiableMultiValueMap(this.defaultCookies) : null),
300-
this.apiVersionInserter, this.entityResultConsumer,
309+
this.defaultApiVersion, this.apiVersionInserter, this.entityResultConsumer,
301310
this.responseTimeout, new DefaultWebTestClientBuilder(this));
302311
}
303312

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -430,6 +430,15 @@ interface Builder {
430430
*/
431431
Builder defaultCookies(Consumer<MultiValueMap<String, String>> cookiesConsumer);
432432

433+
/**
434+
* Global option to specify an API version to add to every request,
435+
* if not already set.
436+
* @param version the version to use
437+
* @return this builder
438+
* @since 7.0
439+
*/
440+
Builder defaultApiVersion(Object version);
441+
433442
/**
434443
* Configure an {@link ApiVersionInserter} to abstract how an API version
435444
* specified via {@link RequestHeadersSpec#apiVersion(Object)}

0 commit comments

Comments
 (0)