Only create a WebTestClient with WebFlux
This commit updates WebTestClientAutoConfiguration to only create a WebTestClient when running a WebFlux-based application as mocking the context only works with that mode at the moment. Closes gh-12318
This commit is contained in:
@@ -18,18 +18,15 @@ package org.springframework.boot.test.autoconfigure.web.reactive;
|
||||
|
||||
import java.time.Duration;
|
||||
import java.time.temporal.ChronoUnit;
|
||||
import java.util.Collections;
|
||||
|
||||
import org.junit.After;
|
||||
import org.junit.Test;
|
||||
|
||||
import org.springframework.boot.autoconfigure.AutoConfigurations;
|
||||
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
|
||||
import org.springframework.boot.web.codec.CodecCustomizer;
|
||||
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.context.annotation.Import;
|
||||
import org.springframework.core.env.MapPropertySource;
|
||||
import org.springframework.core.env.PropertySource;
|
||||
import org.springframework.http.codec.CodecConfigurer;
|
||||
import org.springframework.test.util.ReflectionTestUtils;
|
||||
import org.springframework.test.web.reactive.server.WebTestClient;
|
||||
@@ -44,50 +41,43 @@ import static org.mockito.Mockito.verify;
|
||||
* Tests for {@link WebTestClientAutoConfiguration}
|
||||
*
|
||||
* @author Brian Clozel
|
||||
* @author Stephane Nicoll
|
||||
*/
|
||||
public class WebTestClientAutoConfigurationTests {
|
||||
|
||||
private AnnotationConfigApplicationContext context;
|
||||
private ApplicationContextRunner contextRunner = new ApplicationContextRunner()
|
||||
.withConfiguration(AutoConfigurations.of(
|
||||
WebTestClientAutoConfiguration.class));
|
||||
|
||||
@After
|
||||
public void close() {
|
||||
if (this.context != null) {
|
||||
this.context.close();
|
||||
}
|
||||
@Test
|
||||
public void shouldNotBeConfiguredWithoutWebHandler() {
|
||||
this.contextRunner.run((context) -> {
|
||||
assertThat(context).hasNotFailed();
|
||||
assertThat(context).doesNotHaveBean(WebTestClient.class);
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldCustomizeClientCodecs() {
|
||||
load(CodecConfiguration.class);
|
||||
WebTestClient webTestClient = this.context.getBean(WebTestClient.class);
|
||||
CodecCustomizer codecCustomizer = this.context.getBean(CodecCustomizer.class);
|
||||
assertThat(webTestClient).isNotNull();
|
||||
verify(codecCustomizer).customize(any(CodecConfigurer.class));
|
||||
this.contextRunner.withUserConfiguration(CodecConfiguration.class)
|
||||
.run((context) -> {
|
||||
assertThat(context).hasSingleBean(WebTestClient.class);
|
||||
assertThat(context).hasSingleBean(CodecCustomizer.class);
|
||||
verify(context.getBean(CodecCustomizer.class)).customize(
|
||||
any(CodecConfigurer.class));
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldCustomizeTimeout() {
|
||||
PropertySource<?> propertySource = new MapPropertySource("test", Collections
|
||||
.singletonMap("spring.test.webtestclient.timeout", (Object) "PT15M"));
|
||||
load(propertySource, BaseConfiguration.class);
|
||||
WebTestClient webTestClient = this.context.getBean(WebTestClient.class);
|
||||
Object duration = ReflectionTestUtils.getField(webTestClient, "timeout");
|
||||
assertThat(duration).isEqualTo(Duration.of(15, ChronoUnit.MINUTES));
|
||||
}
|
||||
|
||||
private void load(Class<?>... config) {
|
||||
load(null, config);
|
||||
}
|
||||
|
||||
private void load(PropertySource<?> propertySource, Class<?>... config) {
|
||||
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
|
||||
if (propertySource != null) {
|
||||
context.getEnvironment().getPropertySources().addFirst(propertySource);
|
||||
}
|
||||
context.register(config);
|
||||
context.register(WebTestClientAutoConfiguration.class);
|
||||
context.refresh();
|
||||
this.context = context;
|
||||
this.contextRunner.withUserConfiguration(BaseConfiguration.class)
|
||||
.withPropertyValues("spring.test.webtestclient.timeout=15m")
|
||||
.run((context) -> {
|
||||
WebTestClient webTestClient = context.getBean(WebTestClient.class);
|
||||
Object duration = ReflectionTestUtils.getField(webTestClient,
|
||||
"timeout");
|
||||
assertThat(duration).isEqualTo(Duration.of(15, ChronoUnit.MINUTES));
|
||||
});
|
||||
}
|
||||
|
||||
@Configuration
|
||||
|
||||
Reference in New Issue
Block a user