15 changed files with 7 additions and 510 deletions
@ -1,32 +0,0 @@
@@ -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 @@
@@ -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 @@
@@ -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 @@
@@ -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 @@
@@ -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 @@
@@ -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 @@
@@ -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 @@
@@ -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