Browse Source

Remove support for spring-restdocs-restassured

Closes gh-47685
pull/47694/head
Andy Wilkinson 2 months ago
parent
commit
1be6a54807
  1. 3
      documentation/spring-boot-docs/build.gradle
  2. 2
      documentation/spring-boot-docs/src/docs/antora/modules/ROOT/pages/redirect.adoc
  3. 16
      documentation/spring-boot-docs/src/docs/antora/modules/reference/pages/testing/spring-boot-applications.adoc
  4. 32
      documentation/spring-boot-docs/src/main/java/org/springframework/boot/docs/testing/springbootapplications/autoconfiguredspringrestdocs/withrestassured/MyRestDocsConfiguration.java
  5. 49
      documentation/spring-boot-docs/src/main/java/org/springframework/boot/docs/testing/springbootapplications/autoconfiguredspringrestdocs/withrestassured/MyUserDocumentationTests.java
  6. 32
      documentation/spring-boot-docs/src/main/kotlin/org/springframework/boot/docs/testing/springbootapplications/autoconfiguredspringrestdocs/withrestassured/MyRestDocsConfiguration.kt
  7. 45
      documentation/spring-boot-docs/src/main/kotlin/org/springframework/boot/docs/testing/springbootapplications/autoconfiguredspringrestdocs/withrestassured/MyUserDocumentationTests.kt
  8. 1
      module/spring-boot-restdocs/build.gradle
  9. 13
      module/spring-boot-restdocs/src/main/java/org/springframework/boot/restdocs/test/autoconfigure/AutoConfigureRestDocs.java
  10. 30
      module/spring-boot-restdocs/src/main/java/org/springframework/boot/restdocs/test/autoconfigure/RestDocsAutoConfiguration.java
  11. 53
      module/spring-boot-restdocs/src/main/java/org/springframework/boot/restdocs/test/autoconfigure/RestDocsRestAssuredBuilderCustomizer.java
  12. 41
      module/spring-boot-restdocs/src/main/java/org/springframework/boot/restdocs/test/autoconfigure/RestDocsRestAssuredConfigurationCustomizer.java
  13. 111
      module/spring-boot-restdocs/src/test/java/org/springframework/boot/restdocs/test/autoconfigure/RestAssuredRestDocsAutoConfigurationAdvancedConfigurationIntegrationTests.java
  14. 81
      module/spring-boot-restdocs/src/test/java/org/springframework/boot/restdocs/test/autoconfigure/RestAssuredRestDocsAutoConfigurationIntegrationTests.java
  15. 8
      platform/spring-boot-dependencies/build.gradle

3
documentation/spring-boot-docs/build.gradle

@ -83,6 +83,8 @@ plugins.withType(EclipsePlugin) {
} }
dependencies { dependencies {
compileOnly("org.hamcrest:hamcrest-core")
implementation(project(path: ":cli:spring-boot-cli")) implementation(project(path: ":cli:spring-boot-cli"))
implementation(project(path: ":core:spring-boot-docker-compose")) implementation(project(path: ":core:spring-boot-docker-compose"))
implementation(project(path: ":core:spring-boot-test")) implementation(project(path: ":core:spring-boot-test"))
@ -204,7 +206,6 @@ dependencies {
implementation("org.springframework.pulsar:spring-pulsar") implementation("org.springframework.pulsar:spring-pulsar")
implementation("org.springframework.pulsar:spring-pulsar-reactive") implementation("org.springframework.pulsar:spring-pulsar-reactive")
implementation("org.springframework.restdocs:spring-restdocs-mockmvc") implementation("org.springframework.restdocs:spring-restdocs-mockmvc")
implementation("org.springframework.restdocs:spring-restdocs-restassured")
implementation("org.springframework.restdocs:spring-restdocs-webtestclient") implementation("org.springframework.restdocs:spring-restdocs-webtestclient")
implementation("org.springframework.security:spring-security-config") implementation("org.springframework.security:spring-security-config")
implementation("org.springframework.security:spring-security-oauth2-client") implementation("org.springframework.security:spring-security-oauth2-client")

2
documentation/spring-boot-docs/src/docs/antora/modules/ROOT/pages/redirect.adoc

@ -1886,8 +1886,6 @@
* xref:reference:testing/spring-boot-applications.adoc#testing.spring-boot-applications.autoconfigured-spring-data-redis[#features.testing.spring-boot-applications.autoconfigured-spring-data-redis] * xref:reference:testing/spring-boot-applications.adoc#testing.spring-boot-applications.autoconfigured-spring-data-redis[#features.testing.spring-boot-applications.autoconfigured-spring-data-redis]
* xref:reference:testing/spring-boot-applications.adoc#testing.spring-boot-applications.autoconfigured-spring-restdocs.with-mock-mvc[#boot-features-testing-spring-boot-applications-testing-autoconfigured-rest-docs-mock-mvc] * xref:reference:testing/spring-boot-applications.adoc#testing.spring-boot-applications.autoconfigured-spring-restdocs.with-mock-mvc[#boot-features-testing-spring-boot-applications-testing-autoconfigured-rest-docs-mock-mvc]
* xref:reference:testing/spring-boot-applications.adoc#testing.spring-boot-applications.autoconfigured-spring-restdocs.with-mock-mvc[#features.testing.spring-boot-applications.autoconfigured-spring-restdocs.with-mock-mvc] * xref:reference:testing/spring-boot-applications.adoc#testing.spring-boot-applications.autoconfigured-spring-restdocs.with-mock-mvc[#features.testing.spring-boot-applications.autoconfigured-spring-restdocs.with-mock-mvc]
* xref:reference:testing/spring-boot-applications.adoc#testing.spring-boot-applications.autoconfigured-spring-restdocs.with-rest-assured[#boot-features-testing-spring-boot-applications-testing-autoconfigured-rest-docs-rest-assured]
* xref:reference:testing/spring-boot-applications.adoc#testing.spring-boot-applications.autoconfigured-spring-restdocs.with-rest-assured[#features.testing.spring-boot-applications.autoconfigured-spring-restdocs.with-rest-assured]
* xref:reference:testing/spring-boot-applications.adoc#testing.spring-boot-applications.autoconfigured-spring-restdocs.with-web-test-client[#boot-features-testing-spring-boot-applications-testing-autoconfigured-rest-docs-web-test-client] * xref:reference:testing/spring-boot-applications.adoc#testing.spring-boot-applications.autoconfigured-spring-restdocs.with-web-test-client[#boot-features-testing-spring-boot-applications-testing-autoconfigured-rest-docs-web-test-client]
* xref:reference:testing/spring-boot-applications.adoc#testing.spring-boot-applications.autoconfigured-spring-restdocs.with-web-test-client[#features.testing.spring-boot-applications.autoconfigured-spring-restdocs.with-web-test-client] * xref:reference:testing/spring-boot-applications.adoc#testing.spring-boot-applications.autoconfigured-spring-restdocs.with-web-test-client[#features.testing.spring-boot-applications.autoconfigured-spring-restdocs.with-web-test-client]
* xref:reference:testing/spring-boot-applications.adoc#testing.spring-boot-applications.autoconfigured-spring-restdocs[#boot-features-testing-spring-boot-applications-testing-autoconfigured-rest-docs] * xref:reference:testing/spring-boot-applications.adoc#testing.spring-boot-applications.autoconfigured-spring-restdocs[#boot-features-testing-spring-boot-applications-testing-autoconfigured-rest-docs]

16
documentation/spring-boot-docs/src/docs/antora/modules/reference/pages/testing/spring-boot-applications.adoc

@ -746,7 +746,7 @@ The specific beans that you want to test should be specified by using the `value
[[testing.spring-boot-applications.autoconfigured-spring-restdocs]] [[testing.spring-boot-applications.autoconfigured-spring-restdocs]]
== Auto-configured Spring REST Docs Tests == Auto-configured Spring REST Docs Tests
You can use the javadoc:org.springframework.boot.restdocs.test.autoconfigure.AutoConfigureRestDocs[format=annotation] annotation from the `spring-boot-restdocs- module to use {url-spring-restdocs-site}[Spring REST Docs] in your tests with Mock MVC, REST Assured, or WebTestClient. You can use the javadoc:org.springframework.boot.restdocs.test.autoconfigure.AutoConfigureRestDocs[format=annotation] annotation from the `spring-boot-restdocs- module to use {url-spring-restdocs-site}[Spring REST Docs] in your tests with Mock MVC or WebTestClient.
It removes the need for the JUnit extension in Spring REST Docs. It removes the need for the JUnit extension in Spring REST Docs.
javadoc:org.springframework.boot.restdocs.test.autoconfigure.AutoConfigureRestDocs[format=annotation] can be used to override the default output directory (`target/generated-snippets` if you are using Maven or `build/generated-snippets` if you are using Gradle). javadoc:org.springframework.boot.restdocs.test.autoconfigure.AutoConfigureRestDocs[format=annotation] can be used to override the default output directory (`target/generated-snippets` if you are using Maven or `build/generated-snippets` if you are using Gradle).
@ -799,20 +799,6 @@ include-code::MyWebTestClientBuilderCustomizerConfiguration[]
[[testing.spring-boot-applications.autoconfigured-spring-restdocs.with-rest-assured]]
=== Auto-configured Spring REST Docs Tests With REST Assured
javadoc:org.springframework.boot.restdocs.test.autoconfigure.AutoConfigureRestDocs[format=annotation] makes a javadoc:io.restassured.specification.RequestSpecification[] bean, preconfigured to use Spring REST Docs, available to your tests.
You can inject it by using javadoc:org.springframework.beans.factory.annotation.Autowired[format=annotation] and use it in your tests as you normally would when using REST Assured and Spring REST Docs, as shown in the following example:
include-code::MyUserDocumentationTests[]
If you require more control over Spring REST Docs configuration than offered by the attributes of javadoc:org.springframework.boot.restdocs.test.autoconfigure.AutoConfigureRestDocs[format=annotation], a javadoc:org.springframework.boot.restdocs.test.autoconfigure.RestDocsRestAssuredConfigurationCustomizer[] bean can be used, as shown in the following example:
include-code::MyRestDocsConfiguration[]
[[testing.spring-boot-applications.autoconfigured-webservices]] [[testing.spring-boot-applications.autoconfigured-webservices]]
== Auto-configured Spring Web Services Tests == Auto-configured Spring Web Services Tests

32
documentation/spring-boot-docs/src/main/java/org/springframework/boot/docs/testing/springbootapplications/autoconfiguredspringrestdocs/withrestassured/MyRestDocsConfiguration.java

@ -1,32 +0,0 @@
/*
* Copyright 2012-present 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
*
* https://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.docs.testing.springbootapplications.autoconfiguredspringrestdocs.withrestassured;
import org.springframework.boot.restdocs.test.autoconfigure.RestDocsRestAssuredConfigurationCustomizer;
import org.springframework.boot.test.context.TestConfiguration;
import org.springframework.restdocs.restassured.RestAssuredRestDocumentationConfigurer;
import org.springframework.restdocs.templates.TemplateFormats;
@TestConfiguration(proxyBeanMethods = false)
public class MyRestDocsConfiguration implements RestDocsRestAssuredConfigurationCustomizer {
@Override
public void customize(RestAssuredRestDocumentationConfigurer configurer) {
configurer.snippets().withTemplateFormat(TemplateFormats.markdown());
}
}

49
documentation/spring-boot-docs/src/main/java/org/springframework/boot/docs/testing/springbootapplications/autoconfiguredspringrestdocs/withrestassured/MyUserDocumentationTests.java

@ -1,49 +0,0 @@
/*
* Copyright 2012-present 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
*
* https://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.docs.testing.springbootapplications.autoconfiguredspringrestdocs.withrestassured;
import io.restassured.specification.RequestSpecification;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.restdocs.test.autoconfigure.AutoConfigureRestDocs;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;
import org.springframework.boot.test.web.server.LocalServerPort;
import static io.restassured.RestAssured.given;
import static org.hamcrest.Matchers.is;
import static org.springframework.restdocs.restassured.RestAssuredRestDocumentation.document;
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
@AutoConfigureRestDocs
class MyUserDocumentationTests {
@Test
void listUsers(@Autowired RequestSpecification documentationSpec, @LocalServerPort int port) {
// @formatter:off
given(documentationSpec)
.filter(document("list-users"))
.when()
.port(port)
.get("/")
.then().assertThat()
.statusCode(is(200));
// @formatter:on
}
}

32
documentation/spring-boot-docs/src/main/kotlin/org/springframework/boot/docs/testing/springbootapplications/autoconfiguredspringrestdocs/withrestassured/MyRestDocsConfiguration.kt

@ -1,32 +0,0 @@
/*
* Copyright 2012-present 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
*
* https://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.docs.testing.springbootapplications.autoconfiguredspringrestdocs.withrestassured
import org.springframework.boot.restdocs.test.autoconfigure.RestDocsRestAssuredConfigurationCustomizer
import org.springframework.boot.test.context.TestConfiguration
import org.springframework.restdocs.restassured.RestAssuredRestDocumentationConfigurer
import org.springframework.restdocs.templates.TemplateFormats
@TestConfiguration(proxyBeanMethods = false)
class MyRestDocsConfiguration : RestDocsRestAssuredConfigurationCustomizer {
override fun customize(configurer: RestAssuredRestDocumentationConfigurer) {
configurer.snippets().withTemplateFormat(TemplateFormats.markdown())
}
}

45
documentation/spring-boot-docs/src/main/kotlin/org/springframework/boot/docs/testing/springbootapplications/autoconfiguredspringrestdocs/withrestassured/MyUserDocumentationTests.kt

@ -1,45 +0,0 @@
/*
* Copyright 2012-present 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
*
* https://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.docs.testing.springbootapplications.autoconfiguredspringrestdocs.withrestassured
import io.restassured.RestAssured
import io.restassured.specification.RequestSpecification
import org.hamcrest.Matchers
import org.junit.jupiter.api.Test
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.boot.restdocs.test.autoconfigure.AutoConfigureRestDocs
import org.springframework.boot.test.context.SpringBootTest
import org.springframework.boot.test.context.SpringBootTest.WebEnvironment
import org.springframework.boot.test.web.server.LocalServerPort
import org.springframework.restdocs.restassured.RestAssuredRestDocumentation
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
@AutoConfigureRestDocs
class MyUserDocumentationTests {
@Test
fun listUsers(@Autowired documentationSpec: RequestSpecification?, @LocalServerPort port: Int) {
RestAssured.given(documentationSpec)
.filter(RestAssuredRestDocumentation.document("list-users"))
.`when`()
.port(port)["/"]
.then().assertThat()
.statusCode(Matchers.`is`(200))
}
}

1
module/spring-boot-restdocs/build.gradle

@ -32,7 +32,6 @@ dependencies {
optional(project(":module:spring-boot-webflux-test")) optional(project(":module:spring-boot-webflux-test"))
optional(project(":module:spring-boot-webmvc-test")) optional(project(":module:spring-boot-webmvc-test"))
optional("org.springframework.restdocs:spring-restdocs-mockmvc") optional("org.springframework.restdocs:spring-restdocs-mockmvc")
optional("org.springframework.restdocs:spring-restdocs-restassured")
optional("org.springframework.restdocs:spring-restdocs-webtestclient") optional("org.springframework.restdocs:spring-restdocs-webtestclient")
testImplementation(project(":test-support:spring-boot-test-support")) testImplementation(project(":test-support:spring-boot-test-support"))

13
module/spring-boot-restdocs/src/main/java/org/springframework/boot/restdocs/test/autoconfigure/AutoConfigureRestDocs.java

@ -23,8 +23,6 @@ import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy; import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target; import java.lang.annotation.Target;
import io.restassured.RestAssured;
import org.springframework.boot.autoconfigure.ImportAutoConfiguration; import org.springframework.boot.autoconfigure.ImportAutoConfiguration;
import org.springframework.boot.test.context.PropertyMapping; import org.springframework.boot.test.context.PropertyMapping;
import org.springframework.context.annotation.Import; import org.springframework.context.annotation.Import;
@ -35,22 +33,19 @@ import org.springframework.test.web.servlet.MockMvc;
/** /**
* Annotation that can be applied to a test class to enable and configure * Annotation that can be applied to a test class to enable and configure
* auto-configuration of Spring REST Docs. The auto-configuration sets up * auto-configuration of Spring REST Docs. The auto-configuration sets up
* {@link MockMvc}-based testing of a servlet web application, {@link WebTestClient}-based * {@link MockMvc}-based testing of a servlet web application or
* testing of a reactive web application, or {@link RestAssured}-based testing of any web * {@link WebTestClient}-based testing of a reactive web application.
* application over HTTP.
* <p> * <p>
* Allows configuration of the output directory and the host, scheme, and port of * Allows configuration of the output directory and the host, scheme, and port of
* generated URIs. When further configuration is required a * generated URIs. When further configuration is required a
* {@link RestDocsMockMvcConfigurationCustomizer}, * {@link RestDocsMockMvcConfigurationCustomizer} or
* {@link RestDocsWebTestClientConfigurationCustomizer}, or * {@link RestDocsWebTestClientConfigurationCustomizer} bean can be used.
* {@link RestDocsRestAssuredConfigurationCustomizer} bean can be used.
* *
* @author Andy Wilkinson * @author Andy Wilkinson
* @since 4.0.0 * @since 4.0.0
* @see RestDocsAutoConfiguration * @see RestDocsAutoConfiguration
* @see RestDocsMockMvcConfigurationCustomizer * @see RestDocsMockMvcConfigurationCustomizer
* @see RestDocsWebTestClientConfigurationCustomizer * @see RestDocsWebTestClientConfigurationCustomizer
* @see RestDocsRestAssuredConfigurationCustomizer
*/ */
@Target(ElementType.TYPE) @Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME) @Retention(RetentionPolicy.RUNTIME)

30
module/spring-boot-restdocs/src/main/java/org/springframework/boot/restdocs/test/autoconfigure/RestDocsAutoConfiguration.java

@ -16,9 +16,6 @@
package org.springframework.boot.restdocs.test.autoconfigure; package org.springframework.boot.restdocs.test.autoconfigure;
import io.restassured.builder.RequestSpecBuilder;
import io.restassured.specification.RequestSpecification;
import org.springframework.beans.factory.ObjectProvider; import org.springframework.beans.factory.ObjectProvider;
import org.springframework.boot.autoconfigure.AutoConfiguration; import org.springframework.boot.autoconfigure.AutoConfiguration;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
@ -34,8 +31,6 @@ import org.springframework.restdocs.RestDocumentationContextProvider;
import org.springframework.restdocs.mockmvc.MockMvcRestDocumentation; import org.springframework.restdocs.mockmvc.MockMvcRestDocumentation;
import org.springframework.restdocs.mockmvc.MockMvcRestDocumentationConfigurer; import org.springframework.restdocs.mockmvc.MockMvcRestDocumentationConfigurer;
import org.springframework.restdocs.mockmvc.RestDocumentationResultHandler; import org.springframework.restdocs.mockmvc.RestDocumentationResultHandler;
import org.springframework.restdocs.restassured.RestAssuredRestDocumentation;
import org.springframework.restdocs.restassured.RestAssuredRestDocumentationConfigurer;
import org.springframework.restdocs.webtestclient.WebTestClientRestDocumentation; import org.springframework.restdocs.webtestclient.WebTestClientRestDocumentation;
import org.springframework.restdocs.webtestclient.WebTestClientRestDocumentationConfigurer; import org.springframework.restdocs.webtestclient.WebTestClientRestDocumentationConfigurer;
@ -78,31 +73,6 @@ public final class RestDocsAutoConfiguration {
} }
@Configuration(proxyBeanMethods = false)
@ConditionalOnClass({ RequestSpecification.class, RestAssuredRestDocumentation.class })
@EnableConfigurationProperties(RestDocsProperties.class)
static class RestDocsRestAssuredConfiguration {
@Bean
@ConditionalOnMissingBean
RequestSpecification restDocsRestAssuredConfigurer(
ObjectProvider<RestDocsRestAssuredConfigurationCustomizer> configurationCustomizers,
RestDocumentationContextProvider contextProvider) {
RestAssuredRestDocumentationConfigurer configurer = RestAssuredRestDocumentation
.documentationConfiguration(contextProvider);
configurationCustomizers.orderedStream()
.forEach((configurationCustomizer) -> configurationCustomizer.customize(configurer));
return new RequestSpecBuilder().addFilter(configurer).build();
}
@Bean
RestDocsRestAssuredBuilderCustomizer restAssuredBuilderCustomizer(RestDocsProperties properties,
RequestSpecification configurer) {
return new RestDocsRestAssuredBuilderCustomizer(properties, configurer);
}
}
@Configuration(proxyBeanMethods = false) @Configuration(proxyBeanMethods = false)
@ConditionalOnClass({ WebTestClientRestDocumentation.class, WebTestClientBuilderCustomizer.class }) @ConditionalOnClass({ WebTestClientRestDocumentation.class, WebTestClientBuilderCustomizer.class })
@ConditionalOnWebApplication(type = Type.REACTIVE) @ConditionalOnWebApplication(type = Type.REACTIVE)

53
module/spring-boot-restdocs/src/main/java/org/springframework/boot/restdocs/test/autoconfigure/RestDocsRestAssuredBuilderCustomizer.java

@ -1,53 +0,0 @@
/*
* Copyright 2012-present 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
*
* https://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.restdocs.test.autoconfigure;
import io.restassured.specification.RequestSpecification;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.boot.context.properties.PropertyMapper;
import org.springframework.boot.restdocs.test.autoconfigure.RestDocsProperties.Uri;
import org.springframework.util.StringUtils;
/**
* A customizer that configures Spring REST Docs with REST Assured.
*
* @author Eddú Meléndez
*/
class RestDocsRestAssuredBuilderCustomizer implements InitializingBean {
private final RestDocsProperties properties;
private final RequestSpecification delegate;
RestDocsRestAssuredBuilderCustomizer(RestDocsProperties properties, RequestSpecification delegate) {
this.properties = properties;
this.delegate = delegate;
}
@Override
public void afterPropertiesSet() throws Exception {
PropertyMapper map = PropertyMapper.get();
Uri uri = this.properties.getUri();
String host = uri.getHost();
map.from(uri::getScheme)
.when((scheme) -> StringUtils.hasText(scheme) && StringUtils.hasText(host))
.to((scheme) -> this.delegate.baseUri(scheme + "://" + host));
map.from(uri::getPort).to(this.delegate::port);
}
}

41
module/spring-boot-restdocs/src/main/java/org/springframework/boot/restdocs/test/autoconfigure/RestDocsRestAssuredConfigurationCustomizer.java

@ -1,41 +0,0 @@
/*
* Copyright 2012-present 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
*
* https://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.restdocs.test.autoconfigure;
import org.springframework.restdocs.restassured.RestAssuredRestDocumentationConfigurer;
/**
* A customizer for {@link RestAssuredRestDocumentationConfigurer}. If a
* {@code RestDocsRestAssuredConfigurationCustomizer} bean is found in the application
* context it will be {@link #customize called} to customize the
* {@code RestAssuredRestDocumentationConfigurer} before it is applied. Intended for use
* only when the attributes on {@link AutoConfigureRestDocs @AutoConfigureRestDocs} do not
* provide sufficient customization.
*
* @author Eddú Meléndez
* @since 4.0.0
*/
@FunctionalInterface
public interface RestDocsRestAssuredConfigurationCustomizer {
/**
* Customize the given {@code configurer}.
* @param configurer the configurer
*/
void customize(RestAssuredRestDocumentationConfigurer configurer);
}

111
module/spring-boot-restdocs/src/test/java/org/springframework/boot/restdocs/test/autoconfigure/RestAssuredRestDocsAutoConfigurationAdvancedConfigurationIntegrationTests.java

@ -1,111 +0,0 @@
/*
* Copyright 2012-present 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
*
* https://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.restdocs.test.autoconfigure;
import java.io.File;
import io.restassured.specification.RequestSpecification;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
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.server.LocalServerPort;
import org.springframework.boot.testsupport.BuildOutput;
import org.springframework.context.annotation.Bean;
import org.springframework.restdocs.mockmvc.MockMvcRestDocumentation;
import org.springframework.restdocs.mockmvc.RestDocumentationResultHandler;
import org.springframework.restdocs.templates.TemplateFormats;
import org.springframework.util.FileSystemUtils;
import static io.restassured.RestAssured.given;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.contentOf;
import static org.hamcrest.Matchers.is;
import static org.springframework.restdocs.operation.preprocess.Preprocessors.modifyUris;
import static org.springframework.restdocs.operation.preprocess.Preprocessors.preprocessRequest;
import static org.springframework.restdocs.payload.PayloadDocumentation.fieldWithPath;
import static org.springframework.restdocs.payload.PayloadDocumentation.responseFields;
import static org.springframework.restdocs.restassured.RestAssuredRestDocumentation.document;
/**
* Integration tests for advanced configuration of
* {@link AutoConfigureRestDocs @AutoConfigureRestDocs} with REST Assured.
*
* @author Eddú Meléndez
*/
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
@AutoConfigureRestDocs
class RestAssuredRestDocsAutoConfigurationAdvancedConfigurationIntegrationTests {
@LocalServerPort
private int port;
@Autowired
private RequestSpecification documentationSpec;
private File generatedSnippets;
@BeforeEach
void deleteSnippets() {
this.generatedSnippets = new File(new BuildOutput(getClass()).getRootLocation(), "generated-snippets");
FileSystemUtils.deleteRecursively(this.generatedSnippets);
}
@Test
void snippetGeneration() {
given(this.documentationSpec)
.filter(document("default-snippets",
preprocessRequest(modifyUris().scheme("https").host("api.example.com").removePort())))
.when()
.port(this.port)
.get("/")
.then()
.assertThat()
.statusCode(is(200));
File defaultSnippetsDir = new File(this.generatedSnippets, "default-snippets");
assertThat(defaultSnippetsDir).exists();
assertThat(contentOf(new File(defaultSnippetsDir, "curl-request.md"))).contains("'https://api.example.com/'");
assertThat(contentOf(new File(defaultSnippetsDir, "http-request.md"))).contains("api.example.com");
assertThat(new File(defaultSnippetsDir, "http-response.md")).isFile();
assertThat(new File(defaultSnippetsDir, "response-fields.md")).isFile();
}
@TestConfiguration(proxyBeanMethods = false)
static class CustomizationConfiguration {
@Bean
RestDocumentationResultHandler restDocumentation() {
return MockMvcRestDocumentation.document("{method-name}");
}
@Bean
RestDocsRestAssuredConfigurationCustomizer templateFormatCustomizer() {
return (configurer) -> configurer.snippets().withTemplateFormat(TemplateFormats.markdown());
}
@Bean
RestDocsRestAssuredConfigurationCustomizer defaultSnippetsCustomizer() {
return (configurer) -> configurer.snippets()
.withAdditionalDefaults(responseFields(fieldWithPath("_links.self").description("Main URL")));
}
}
}

81
module/spring-boot-restdocs/src/test/java/org/springframework/boot/restdocs/test/autoconfigure/RestAssuredRestDocsAutoConfigurationIntegrationTests.java

@ -1,81 +0,0 @@
/*
* Copyright 2012-present 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
*
* https://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.restdocs.test.autoconfigure;
import java.io.File;
import io.restassured.specification.RequestSpecification;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
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.web.server.LocalServerPort;
import org.springframework.boot.testsupport.BuildOutput;
import org.springframework.util.FileSystemUtils;
import static io.restassured.RestAssured.given;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.contentOf;
import static org.hamcrest.Matchers.is;
import static org.springframework.restdocs.operation.preprocess.Preprocessors.modifyUris;
import static org.springframework.restdocs.operation.preprocess.Preprocessors.preprocessRequest;
import static org.springframework.restdocs.restassured.RestAssuredRestDocumentation.document;
/**
* Integration tests for {@link RestDocsAutoConfiguration} with REST Assured.
*
* @author Eddú Meléndez
*/
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
@AutoConfigureRestDocs
class RestAssuredRestDocsAutoConfigurationIntegrationTests {
@LocalServerPort
private int port;
@Autowired
private RequestSpecification documentationSpec;
private File generatedSnippets;
@BeforeEach
void deleteSnippets() {
this.generatedSnippets = new File(new BuildOutput(getClass()).getRootLocation(), "generated-snippets");
FileSystemUtils.deleteRecursively(this.generatedSnippets);
}
@Test
void defaultSnippetsAreWritten() {
given(this.documentationSpec)
.filter(document("default-snippets",
preprocessRequest(modifyUris().scheme("https").host("api.example.com").removePort())))
.when()
.port(this.port)
.get("/")
.then()
.assertThat()
.statusCode(is(200));
File defaultSnippetsDir = new File(this.generatedSnippets, "default-snippets");
assertThat(defaultSnippetsDir).exists();
assertThat(contentOf(new File(defaultSnippetsDir, "curl-request.adoc"))).contains("'https://api.example.com/'");
assertThat(contentOf(new File(defaultSnippetsDir, "http-request.adoc"))).contains("api.example.com");
assertThat(new File(defaultSnippetsDir, "http-response.adoc")).isFile();
}
}

8
platform/spring-boot-dependencies/build.gradle

@ -1961,14 +1961,6 @@ bom {
releaseNotes("https://github.com/reactor/reactor/releases/tag/{version}") releaseNotes("https://github.com/reactor/reactor/releases/tag/{version}")
} }
} }
library("REST Assured", "5.5.6") {
group("io.rest-assured") {
bom("rest-assured-bom")
}
links {
javadoc("https://javadoc.io/doc/io.rest-assured/rest-assured/{version}", "io.restassured")
}
}
library("RSocket", "1.1.5") { library("RSocket", "1.1.5") {
group("io.rsocket") { group("io.rsocket") {
bom("rsocket-bom") bom("rsocket-bom")

Loading…
Cancel
Save