|
20 | 20 | import java.util.List;
|
21 | 21 |
|
22 | 22 | import org.junit.jupiter.api.Test;
|
| 23 | +import org.mockito.Mockito; |
23 | 24 |
|
| 25 | +import org.springframework.beans.factory.BeanCreationException; |
24 | 26 | import org.springframework.boot.autoconfigure.AutoConfigurations;
|
25 | 27 | import org.springframework.boot.autoconfigure.http.HttpMessageConverters;
|
26 | 28 | import org.springframework.boot.autoconfigure.http.HttpMessageConvertersAutoConfiguration;
|
27 | 29 | import org.springframework.boot.test.context.runner.ApplicationContextRunner;
|
28 | 30 | import org.springframework.boot.test.context.runner.ReactiveWebApplicationContextRunner;
|
29 | 31 | import org.springframework.boot.test.context.runner.WebApplicationContextRunner;
|
30 | 32 | import org.springframework.boot.web.client.RestTemplateBuilder;
|
| 33 | +import org.springframework.boot.web.client.RestTemplateBuilderCustomizer; |
31 | 34 | import org.springframework.boot.web.client.RestTemplateCustomizer;
|
32 | 35 | import org.springframework.boot.web.client.RestTemplateRequestCustomizer;
|
33 | 36 | import org.springframework.context.annotation.Bean;
|
|
42 | 45 | import org.springframework.web.client.RestTemplate;
|
43 | 46 |
|
44 | 47 | import static org.assertj.core.api.Assertions.assertThat;
|
| 48 | +import static org.assertj.core.api.Assertions.assertThatThrownBy; |
45 | 49 | import static org.mockito.ArgumentMatchers.any;
|
| 50 | +import static org.mockito.BDDMockito.doThrow; |
46 | 51 | import static org.mockito.BDDMockito.given;
|
47 |
| -import static org.mockito.Mockito.mock; |
48 |
| -import static org.mockito.Mockito.verify; |
| 52 | +import static org.mockito.BDDMockito.mock; |
| 53 | +import static org.mockito.BDDMockito.verify; |
49 | 54 |
|
50 | 55 | /**
|
51 | 56 | * Tests for {@link RestTemplateAutoConfiguration}
|
@@ -157,6 +162,25 @@ void whenReactiveWebApplicationRestTemplateBuilderIsNotConfigured() {
|
157 | 162 | .run((context) -> assertThat(context).doesNotHaveBean(RestTemplateBuilder.class));
|
158 | 163 | }
|
159 | 164 |
|
| 165 | + @Test |
| 166 | + void customizerShouldCustomizeBuilder() { |
| 167 | + this.contextRunner.withUserConfiguration(RestTemplateBuilderCustomizerConfig.class).run((context) -> |
| 168 | + assertThatThrownBy(() -> context.getBean(RestTemplateBuilder.class).build()) |
| 169 | + .isInstanceOf(IllegalStateException.class).hasMessageContaining("customized builder") |
| 170 | + ); |
| 171 | + } |
| 172 | + |
| 173 | + @Test |
| 174 | + void customizerShouldReturnInstanceNotANull() { |
| 175 | + this.contextRunner.withUserConfiguration(RestTemplateBuilderCustomizerReturnsNullConfig.class).run((context) -> |
| 176 | + assertThatThrownBy(() -> context.getBean(RestTemplateBuilder.class).build()) |
| 177 | + .isInstanceOf(BeanCreationException.class) |
| 178 | + .hasMessageContaining("Error creating bean with name 'restTemplateBuilder'") |
| 179 | + .hasRootCauseInstanceOf(IllegalArgumentException.class) |
| 180 | + .hasRootCauseMessage("RestTemplateBuilderCustomizer returned null builder") |
| 181 | + ); |
| 182 | + } |
| 183 | + |
160 | 184 | @Configuration(proxyBeanMethods = false)
|
161 | 185 | static class RestTemplateConfig {
|
162 | 186 |
|
@@ -232,4 +256,28 @@ static class CustomHttpMessageConverter extends StringHttpMessageConverter {
|
232 | 256 |
|
233 | 257 | }
|
234 | 258 |
|
| 259 | + @Configuration(proxyBeanMethods = false) |
| 260 | + static class RestTemplateBuilderCustomizerConfig { |
| 261 | + |
| 262 | + @Bean |
| 263 | + RestTemplateBuilderCustomizer restTemplateBuilderCustomizer() { |
| 264 | + return (oldBuilder) -> { |
| 265 | + final RestTemplateBuilder builder = Mockito.spy(oldBuilder); |
| 266 | + doThrow(new IllegalStateException("customized builder")).when(builder).build(); |
| 267 | + return builder; |
| 268 | + }; |
| 269 | + } |
| 270 | + |
| 271 | + } |
| 272 | + |
| 273 | + @Configuration(proxyBeanMethods = false) |
| 274 | + static class RestTemplateBuilderCustomizerReturnsNullConfig { |
| 275 | + |
| 276 | + @Bean |
| 277 | + RestTemplateBuilderCustomizer restTemplateBuilderCustomizer() { |
| 278 | + return (oldBuilder) -> null; |
| 279 | + } |
| 280 | + |
| 281 | + } |
| 282 | + |
235 | 283 | }
|
0 commit comments