15 changed files with 7 additions and 510 deletions
@ -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()); |
|
||||||
} |
|
||||||
|
|
||||||
} |
|
||||||
@ -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
|
|
||||||
} |
|
||||||
|
|
||||||
} |
|
||||||
@ -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()) |
|
||||||
} |
|
||||||
|
|
||||||
} |
|
||||||
|
|
||||||
@ -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,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); |
|
||||||
} |
|
||||||
|
|
||||||
} |
|
||||||
@ -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); |
|
||||||
|
|
||||||
} |
|
||||||
@ -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"))); |
|
||||||
} |
|
||||||
|
|
||||||
} |
|
||||||
|
|
||||||
} |
|
||||||
@ -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(); |
|
||||||
} |
|
||||||
|
|
||||||
} |
|
||||||
Loading…
Reference in new issue