From 349ec76e620607aaf5753e11c42dff168913dadc Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Thu, 26 May 2016 11:09:30 +0100 Subject: [PATCH] Update @WebMvcTest to auto-configure Spring HATEOAS Closes gh-6043 --- spring-boot-test-autoconfigure/pom.xml | 5 ++ .../web/servlet/AutoConfigureWebMvc.java | 4 +- .../web/servlet/HateoasController.java | 47 ++++++++++++++++ .../WebMvcTestHateoasIntegrationTests.java | 54 +++++++++++++++++++ 4 files changed, 109 insertions(+), 1 deletion(-) create mode 100644 spring-boot-test-autoconfigure/src/test/java/org/springframework/boot/test/autoconfigure/web/servlet/HateoasController.java create mode 100644 spring-boot-test-autoconfigure/src/test/java/org/springframework/boot/test/autoconfigure/web/servlet/WebMvcTestHateoasIntegrationTests.java diff --git a/spring-boot-test-autoconfigure/pom.xml b/spring-boot-test-autoconfigure/pom.xml index 76ae50bbfee..7997a7d350b 100644 --- a/spring-boot-test-autoconfigure/pom.xml +++ b/spring-boot-test-autoconfigure/pom.xml @@ -157,5 +157,10 @@ spring-hateoas test + + org.springframework.plugin + spring-plugin-core + test + diff --git a/spring-boot-test-autoconfigure/src/main/java/org/springframework/boot/test/autoconfigure/web/servlet/AutoConfigureWebMvc.java b/spring-boot-test-autoconfigure/src/main/java/org/springframework/boot/test/autoconfigure/web/servlet/AutoConfigureWebMvc.java index 9857774bdc3..4d398e2fbb5 100644 --- a/spring-boot-test-autoconfigure/src/main/java/org/springframework/boot/test/autoconfigure/web/servlet/AutoConfigureWebMvc.java +++ b/spring-boot-test-autoconfigure/src/main/java/org/springframework/boot/test/autoconfigure/web/servlet/AutoConfigureWebMvc.java @@ -26,6 +26,7 @@ import org.springframework.boot.autoconfigure.ImportAutoConfiguration; import org.springframework.boot.autoconfigure.freemarker.FreeMarkerAutoConfiguration; import org.springframework.boot.autoconfigure.groovy.template.GroovyTemplateAutoConfiguration; import org.springframework.boot.autoconfigure.gson.GsonAutoConfiguration; +import org.springframework.boot.autoconfigure.hateoas.HypermediaAutoConfiguration; import org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration; import org.springframework.boot.autoconfigure.mustache.MustacheAutoConfiguration; import org.springframework.boot.autoconfigure.thymeleaf.ThymeleafAutoConfiguration; @@ -48,7 +49,8 @@ import org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration; @ImportAutoConfiguration({ WebMvcAutoConfiguration.class, GsonAutoConfiguration.class, JacksonAutoConfiguration.class, HttpMessageConvertersAutoConfiguration.class, FreeMarkerAutoConfiguration.class, GroovyTemplateAutoConfiguration.class, - MustacheAutoConfiguration.class, ThymeleafAutoConfiguration.class }) + MustacheAutoConfiguration.class, ThymeleafAutoConfiguration.class, + HypermediaAutoConfiguration.class }) public @interface AutoConfigureWebMvc { } diff --git a/spring-boot-test-autoconfigure/src/test/java/org/springframework/boot/test/autoconfigure/web/servlet/HateoasController.java b/spring-boot-test-autoconfigure/src/test/java/org/springframework/boot/test/autoconfigure/web/servlet/HateoasController.java new file mode 100644 index 00000000000..e8f11fc7495 --- /dev/null +++ b/spring-boot-test-autoconfigure/src/test/java/org/springframework/boot/test/autoconfigure/web/servlet/HateoasController.java @@ -0,0 +1,47 @@ +/* + * Copyright 2012-2016 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.test.autoconfigure.web.servlet; + +import java.util.HashMap; +import java.util.Map; + +import org.springframework.hateoas.Link; +import org.springframework.hateoas.Resource; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * {@link RestController} used by {@link WebMvcTestHateoasIntegrationTests}. + * + * @author Andy Wilkinson + */ +@RestController +@RequestMapping("/hateoas") +class HateoasController { + + @RequestMapping("/resource") + public Resource> resource() { + return new Resource>(new HashMap<>(), + new Link("self", "http://api.example.com")); + } + + @RequestMapping("/plain") + public Map plain() { + return new HashMap<>(); + } + +} diff --git a/spring-boot-test-autoconfigure/src/test/java/org/springframework/boot/test/autoconfigure/web/servlet/WebMvcTestHateoasIntegrationTests.java b/spring-boot-test-autoconfigure/src/test/java/org/springframework/boot/test/autoconfigure/web/servlet/WebMvcTestHateoasIntegrationTests.java new file mode 100644 index 00000000000..afb94a2da6b --- /dev/null +++ b/spring-boot-test-autoconfigure/src/test/java/org/springframework/boot/test/autoconfigure/web/servlet/WebMvcTestHateoasIntegrationTests.java @@ -0,0 +1,54 @@ +/* + * Copyright 2012-2016 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.test.autoconfigure.web.servlet; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpHeaders; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.web.servlet.MockMvc; + +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.header; + +/** + * Integration tests for {@link WebMvcTest} and Spring HATEOAS. + * + * @author Andy Wilkinson + */ +@RunWith(SpringRunner.class) +@WebMvcTest(secure = false) +public class WebMvcTestHateoasIntegrationTests { + + @Autowired + private MockMvc mockMvc; + + @Test + public void plainResponse() throws Exception { + this.mockMvc.perform(get("/hateoas/plain")).andExpect(header() + .string(HttpHeaders.CONTENT_TYPE, "application/json;charset=UTF-8")); + } + + @Test + public void hateoasResponse() throws Exception { + this.mockMvc.perform(get("/hateoas/resource")).andExpect(header() + .string(HttpHeaders.CONTENT_TYPE, "application/hal+json;charset=UTF-8")); + } + +}