From 14ff776f6833586ac1eda1d7ebc8a0c5e3192a56 Mon Sep 17 00:00:00 2001 From: Stephane Nicoll Date: Tue, 27 Feb 2018 09:58:59 +0100 Subject: [PATCH] Fix TestRestTemplate example in the doc Closes gh-12132 --- spring-boot-docs/pom.xml | 5 ++ spring-boot-docs/src/main/asciidoc/index.adoc | 1 + .../main/asciidoc/spring-boot-features.adoc | 32 ++------- .../client/SampleWebClientConfiguration.java | 58 ++++++++++++++++ .../boot/web/client/SampleWebClientTests.java | 66 +++++++++++++++++++ 5 files changed, 134 insertions(+), 28 deletions(-) create mode 100644 spring-boot-docs/src/test/java/org/springframework/boot/web/client/SampleWebClientConfiguration.java create mode 100644 spring-boot-docs/src/test/java/org/springframework/boot/web/client/SampleWebClientTests.java diff --git a/spring-boot-docs/pom.xml b/spring-boot-docs/pom.xml index b9b73a200b..04b879f7c2 100644 --- a/spring-boot-docs/pom.xml +++ b/spring-boot-docs/pom.xml @@ -742,6 +742,11 @@ spring-boot-test-support test + + org.springframework.boot + spring-boot-starter-web + test + diff --git a/spring-boot-docs/src/main/asciidoc/index.adoc b/spring-boot-docs/src/main/asciidoc/index.adoc index de0438ccfb..3a5876dfba 100644 --- a/spring-boot-docs/src/main/asciidoc/index.adoc +++ b/spring-boot-docs/src/main/asciidoc/index.adoc @@ -50,6 +50,7 @@ Phillip Webb; Dave Syer; Josh Long; Stéphane Nicoll; Rob Winch; Andy Wilkinson; :propdeps-plugin: https://github.com/spring-projects/gradle-plugins/tree/master/propdeps-plugin :ant-manual: http://ant.apache.org/manual :code-examples: ../java/org/springframework/boot +:test-examples: ../../test/java/org/springframework/boot :gradle-user-guide: https://docs.gradle.org/2.14.1/userguide :gradle-dsl: https://docs.gradle.org/2.14.1/dsl // ====================================================================================== diff --git a/spring-boot-docs/src/main/asciidoc/spring-boot-features.adoc b/spring-boot-docs/src/main/asciidoc/spring-boot-features.adoc index 45ed2704cf..73d41fe162 100644 --- a/spring-boot-docs/src/main/asciidoc/spring-boot-features.adoc +++ b/spring-boot-docs/src/main/asciidoc/spring-boot-features.adoc @@ -6207,8 +6207,9 @@ features will be enabled: @Test public void testRequest() throws Exception { - HttpHeaders headers = template.getForEntity("http://myhost.com/example", String.class).getHeaders(); - assertThat(headers.getLocation().toString(), containsString("myotherhost")); + HttpHeaders headers = this.template.getForEntity( + "http://myhost.example.com/example", String.class).getHeaders(); + assertThat(headers.getLocation()).hasHost("other.example.com"); } } @@ -6222,32 +6223,7 @@ specify a host and port will automatically connect to the embedded server: [source,java,indent=0] ---- - @RunWith(SpringRunner.class) - @SpringBootTest - public class MyTest { - - @Autowired - private TestRestTemplate template; - - @Test - public void testRequest() throws Exception { - HttpHeaders headers = template.getForEntity("/example", String.class).getHeaders(); - assertThat(headers.getLocation().toString(), containsString("myotherhost")); - } - - @TestConfiguration - static class Config { - - @Bean - public RestTemplateBuilder restTemplateBuilder() { - return new RestTemplateBuilder() - .additionalMessageConverters(...) - .customizers(...); - } - - } - - } +include::{test-examples}/web/client/SampleWebClientTests.java[tag=test] ---- diff --git a/spring-boot-docs/src/test/java/org/springframework/boot/web/client/SampleWebClientConfiguration.java b/spring-boot-docs/src/test/java/org/springframework/boot/web/client/SampleWebClientConfiguration.java new file mode 100644 index 0000000000..d6a7a8c573 --- /dev/null +++ b/spring-boot-docs/src/test/java/org/springframework/boot/web/client/SampleWebClientConfiguration.java @@ -0,0 +1,58 @@ +/* + * Copyright 2012-2018 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.web.client; + +import java.net.URI; + +import org.springframework.boot.SpringBootConfiguration; +import org.springframework.boot.autoconfigure.ImportAutoConfiguration; +import org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration; +import org.springframework.boot.autoconfigure.web.DispatcherServletAutoConfiguration; +import org.springframework.boot.autoconfigure.web.EmbeddedServletContainerAutoConfiguration; +import org.springframework.boot.autoconfigure.web.HttpMessageConvertersAutoConfiguration; +import org.springframework.boot.autoconfigure.web.ServerPropertiesAutoConfiguration; +import org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * A sample {@link SpringBootConfiguration} with an example controller. + * + * @author Stephane Nicoll + */ +@SpringBootConfiguration +@ImportAutoConfiguration({ EmbeddedServletContainerAutoConfiguration.class, + ServerPropertiesAutoConfiguration.class, + DispatcherServletAutoConfiguration.class, WebMvcAutoConfiguration.class, + JacksonAutoConfiguration.class, HttpMessageConvertersAutoConfiguration.class }) +class SampleWebClientConfiguration { + + + @RestController + private static class ExampleController { + + @RequestMapping("/example") + public ResponseEntity example() { + return ResponseEntity.ok() + .location(URI.create("https://other.example.com/example")) + .body("test"); + } + + } + +} diff --git a/spring-boot-docs/src/test/java/org/springframework/boot/web/client/SampleWebClientTests.java b/spring-boot-docs/src/test/java/org/springframework/boot/web/client/SampleWebClientTests.java new file mode 100644 index 0000000000..67c1796f04 --- /dev/null +++ b/spring-boot-docs/src/test/java/org/springframework/boot/web/client/SampleWebClientTests.java @@ -0,0 +1,66 @@ +/* + * Copyright 2012-2018 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.boot.web.client; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; +import org.springframework.boot.test.context.TestConfiguration; +import org.springframework.boot.test.web.client.TestRestTemplate; +import org.springframework.context.annotation.Bean; +import org.springframework.http.HttpHeaders; +import org.springframework.test.context.junit4.SpringRunner; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * Example integration test that uses {@link TestRestTemplate}. + * + * @author Stephane Nicoll + */ +// tag::test[] +@RunWith(SpringRunner.class) +@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT) +public class SampleWebClientTests { + + @Autowired + private TestRestTemplate template; + + @Test + public void testRequest() { + HttpHeaders headers = this.template.getForEntity("/example", String.class) + .getHeaders(); + assertThat(headers.getLocation()).hasHost("other.example.com"); + } + + @TestConfiguration + static class Config { + + @Bean + public RestTemplateBuilder restTemplateBuilder() { + return new RestTemplateBuilder() + .setConnectTimeout(1000) + .setReadTimeout(1000); + } + + } + +} +// end::test[]