|
1 | 1 | /*
|
2 |
| - * Copyright 2012-2018 the original author or authors. |
| 2 | + * Copyright 2012-2019 the original author or authors. |
3 | 3 | *
|
4 | 4 | * Licensed under the Apache License, Version 2.0 (the "License");
|
5 | 5 | * you may not use this file except in compliance with the License.
|
|
16 | 16 |
|
17 | 17 | package org.springframework.boot.autoconfigure.web.client;
|
18 | 18 |
|
19 |
| -import java.util.ArrayList; |
20 | 19 | import java.util.List;
|
21 | 20 |
|
22 |
| -import org.junit.After; |
23 | 21 | import org.junit.Test;
|
24 | 22 |
|
| 23 | +import org.springframework.boot.autoconfigure.AutoConfigurations; |
25 | 24 | import org.springframework.boot.autoconfigure.http.HttpMessageConverters;
|
26 | 25 | import org.springframework.boot.autoconfigure.http.HttpMessageConvertersAutoConfiguration;
|
| 26 | +import org.springframework.boot.test.context.runner.ApplicationContextRunner; |
27 | 27 | import org.springframework.boot.web.client.RestTemplateBuilder;
|
28 | 28 | import org.springframework.boot.web.client.RestTemplateCustomizer;
|
29 |
| -import org.springframework.context.annotation.AnnotationConfigApplicationContext; |
30 | 29 | import org.springframework.context.annotation.Bean;
|
31 | 30 | import org.springframework.context.annotation.Configuration;
|
32 | 31 | import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
|
|
46 | 45 | */
|
47 | 46 | public class RestTemplateAutoConfigurationTests {
|
48 | 47 |
|
49 |
| - private AnnotationConfigApplicationContext context; |
50 |
| - |
51 |
| - @After |
52 |
| - public void close() { |
53 |
| - if (this.context != null) { |
54 |
| - this.context.close(); |
55 |
| - } |
56 |
| - } |
| 48 | + private final ApplicationContextRunner contextRunner = new ApplicationContextRunner() |
| 49 | + .withConfiguration( |
| 50 | + AutoConfigurations.of(RestTemplateAutoConfiguration.class)); |
57 | 51 |
|
58 | 52 | @Test
|
59 | 53 | public void restTemplateWhenMessageConvertersDefinedShouldHaveMessageConverters() {
|
60 |
| - load(HttpMessageConvertersAutoConfiguration.class, RestTemplateConfig.class); |
61 |
| - assertThat(this.context.getBeansOfType(RestTemplate.class)).hasSize(1); |
62 |
| - RestTemplate restTemplate = this.context.getBean(RestTemplate.class); |
63 |
| - List<HttpMessageConverter<?>> converters = this.context |
64 |
| - .getBean(HttpMessageConverters.class).getConverters(); |
65 |
| - assertThat(restTemplate.getMessageConverters()) |
66 |
| - .containsExactlyElementsOf(converters); |
67 |
| - assertThat(restTemplate.getRequestFactory()) |
68 |
| - .isInstanceOf(HttpComponentsClientHttpRequestFactory.class); |
| 54 | + this.contextRunner |
| 55 | + .withConfiguration(AutoConfigurations |
| 56 | + .of(HttpMessageConvertersAutoConfiguration.class)) |
| 57 | + .withUserConfiguration(RestTemplateConfig.class).run((context) -> { |
| 58 | + assertThat(context).hasSingleBean(RestTemplate.class); |
| 59 | + RestTemplate restTemplate = context.getBean(RestTemplate.class); |
| 60 | + List<HttpMessageConverter<?>> converters = context |
| 61 | + .getBean(HttpMessageConverters.class).getConverters(); |
| 62 | + assertThat(restTemplate.getMessageConverters()) |
| 63 | + .containsExactlyElementsOf(converters); |
| 64 | + assertThat(restTemplate.getRequestFactory()) |
| 65 | + .isInstanceOf(HttpComponentsClientHttpRequestFactory.class); |
| 66 | + }); |
69 | 67 | }
|
70 | 68 |
|
71 | 69 | @Test
|
72 | 70 | public void restTemplateWhenNoMessageConvertersDefinedShouldHaveDefaultMessageConverters() {
|
73 |
| - load(RestTemplateConfig.class); |
74 |
| - RestTemplate restTemplate = this.context.getBean(RestTemplate.class); |
75 |
| - assertThat(restTemplate.getMessageConverters().size()) |
76 |
| - .isEqualTo(new RestTemplate().getMessageConverters().size()); |
| 71 | + this.contextRunner.withUserConfiguration(RestTemplateConfig.class) |
| 72 | + .run((context) -> { |
| 73 | + assertThat(context).hasSingleBean(RestTemplate.class); |
| 74 | + RestTemplate restTemplate = context.getBean(RestTemplate.class); |
| 75 | + assertThat(restTemplate.getMessageConverters().size()) |
| 76 | + .isEqualTo(new RestTemplate().getMessageConverters().size()); |
| 77 | + }); |
77 | 78 | }
|
78 | 79 |
|
79 | 80 | @Test
|
| 81 | + @SuppressWarnings({ "unchecked", "rawtypes" }) |
80 | 82 | public void restTemplateWhenHasCustomMessageConvertersShouldHaveMessageConverters() {
|
81 |
| - load(CustomHttpMessageConverter.class, |
82 |
| - HttpMessageConvertersAutoConfiguration.class, RestTemplateConfig.class); |
83 |
| - RestTemplate restTemplate = this.context.getBean(RestTemplate.class); |
84 |
| - List<Class<?>> converterClasses = new ArrayList<>(); |
85 |
| - for (HttpMessageConverter<?> converter : restTemplate.getMessageConverters()) { |
86 |
| - converterClasses.add(converter.getClass()); |
87 |
| - } |
88 |
| - assertThat(converterClasses).contains(CustomHttpMessageConverter.class); |
| 83 | + this.contextRunner |
| 84 | + .withConfiguration(AutoConfigurations |
| 85 | + .of(HttpMessageConvertersAutoConfiguration.class)) |
| 86 | + .withUserConfiguration(CustomHttpMessageConverter.class, |
| 87 | + RestTemplateConfig.class) |
| 88 | + .run((context) -> { |
| 89 | + assertThat(context).hasSingleBean(RestTemplate.class); |
| 90 | + RestTemplate restTemplate = context.getBean(RestTemplate.class); |
| 91 | + assertThat(restTemplate.getMessageConverters()) |
| 92 | + .extracting(HttpMessageConverter::getClass) |
| 93 | + .contains((Class) CustomHttpMessageConverter.class); |
| 94 | + }); |
89 | 95 | }
|
90 | 96 |
|
91 | 97 | @Test
|
92 | 98 | public void restTemplateWhenHasCustomBuilderShouldUseCustomBuilder() {
|
93 |
| - load(RestTemplateConfig.class, CustomRestTemplateBuilderConfig.class); |
94 |
| - assertThat(this.context.getBeansOfType(RestTemplate.class)).hasSize(1); |
95 |
| - RestTemplate restTemplate = this.context.getBean(RestTemplate.class); |
96 |
| - assertThat(restTemplate.getMessageConverters()).hasSize(1); |
97 |
| - assertThat(restTemplate.getMessageConverters().get(0)) |
98 |
| - .isInstanceOf(CustomHttpMessageConverter.class); |
| 99 | + this.contextRunner.withUserConfiguration(RestTemplateConfig.class, |
| 100 | + CustomRestTemplateBuilderConfig.class).run((context) -> { |
| 101 | + assertThat(context).hasSingleBean(RestTemplate.class); |
| 102 | + RestTemplate restTemplate = context.getBean(RestTemplate.class); |
| 103 | + assertThat(restTemplate.getMessageConverters()).hasSize(1); |
| 104 | + assertThat(restTemplate.getMessageConverters().get(0)) |
| 105 | + .isInstanceOf(CustomHttpMessageConverter.class); |
| 106 | + }); |
99 | 107 | }
|
100 | 108 |
|
101 | 109 | @Test
|
102 | 110 | public void restTemplateShouldApplyCustomizer() {
|
103 |
| - load(RestTemplateCustomizerConfig.class, RestTemplateConfig.class); |
104 |
| - RestTemplate restTemplate = this.context.getBean(RestTemplate.class); |
105 |
| - RestTemplateCustomizer customizer = this.context |
106 |
| - .getBean(RestTemplateCustomizer.class); |
107 |
| - verify(customizer).customize(restTemplate); |
| 111 | + this.contextRunner.withUserConfiguration(RestTemplateConfig.class, |
| 112 | + RestTemplateCustomizerConfig.class).run((context) -> { |
| 113 | + assertThat(context).hasSingleBean(RestTemplate.class); |
| 114 | + RestTemplate restTemplate = context.getBean(RestTemplate.class); |
| 115 | + RestTemplateCustomizer customizer = context |
| 116 | + .getBean(RestTemplateCustomizer.class); |
| 117 | + verify(customizer).customize(restTemplate); |
| 118 | + }); |
108 | 119 | }
|
109 | 120 |
|
110 | 121 | @Test
|
111 | 122 | public void builderShouldBeFreshForEachUse() {
|
112 |
| - load(DirtyRestTemplateConfig.class); |
113 |
| - } |
114 |
| - |
115 |
| - public void load(Class<?>... config) { |
116 |
| - AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(); |
117 |
| - ctx.register(config); |
118 |
| - ctx.register(RestTemplateAutoConfiguration.class); |
119 |
| - ctx.refresh(); |
120 |
| - this.context = ctx; |
| 123 | + this.contextRunner.withUserConfiguration(DirtyRestTemplateConfig.class) |
| 124 | + .run((context) -> assertThat(context).hasNotFailed()); |
121 | 125 | }
|
122 | 126 |
|
123 | 127 | @Configuration
|
|
0 commit comments