Skip to content
This repository has been archived by the owner on Dec 19, 2023. It is now read-only.

Duplicate 'Query parameters' section on api.adoc demo when AutoDocumentation.sectionBuilder().skipEmpty is false #386

Closed
wants to merge 1 commit into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions samples/java-webmvc/src/main/asciidoc/api.adoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
= API
:doctype: book
:icons: font
:source-highlighter: highlightjs
:toc: left
:toclevels: 4
:sectlinks:

[[resources-some]]
== Some

=== Header And Request

include::{snippets}/some-controller-i-t/should-do/auto-section.adoc[]
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package capital.scalable.restdocs.example.a;

public class SomeClass {

private final String someHeader;

public SomeClass(String someHeader) {
this.someHeader = someHeader;
}

public String getSomeHeader() {
return someHeader;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package capital.scalable.restdocs.example.a;

import org.springframework.core.convert.converter.Converter;
import org.springframework.stereotype.Component;

@Component
public class SomeClassConverter implements Converter<String, SomeClass> {

@Override
public SomeClass convert(String source) {
return new SomeClass(source);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package capital.scalable.restdocs.example.a;


import org.springframework.beans.propertyeditors.StringTrimmerEditor;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class SomeController {

@InitBinder
public void initBinder(WebDataBinder binder) {
binder.initDirectFieldAccess();
binder.registerCustomEditor(String.class, new StringTrimmerEditor(true));
}

/**
* Some description
*
* @param someClass This is some header
*/
@GetMapping("/some")
void some(@RequestHeader("someClass") SomeClass someClass,
SomeRequest someRequest) {

}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package capital.scalable.restdocs.example.a;

public class SomeRequest {

/**
* Defines some text
*/
private String some;

public String getSome() {
return some;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,134 @@
package capital.scalable.restdocs.example.a;

import static org.springframework.restdocs.mockmvc.MockMvcRestDocumentation.document;
import static org.springframework.restdocs.mockmvc.MockMvcRestDocumentation.documentationConfiguration;
import static org.springframework.restdocs.operation.preprocess.Preprocessors.preprocessResponse;
import static org.springframework.restdocs.operation.preprocess.Preprocessors.prettyPrint;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;

import com.fasterxml.jackson.databind.ObjectMapper;

import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.restdocs.JUnitRestDocumentation;
import org.springframework.restdocs.cli.CliDocumentation;
import org.springframework.restdocs.http.HttpDocumentation;
import org.springframework.restdocs.mockmvc.RestDocumentationResultHandler;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter;

import capital.scalable.restdocs.AutoDocumentation;
import capital.scalable.restdocs.SnippetRegistry;
import capital.scalable.restdocs.jackson.JacksonResultHandlers;
import capital.scalable.restdocs.response.ResponseModifyingPreprocessors;

@SpringBootTest
@AutoConfigureMockMvc
@RunWith(SpringJUnit4ClassRunner.class)
public class SomeControllerIT {

@Autowired
ObjectMapper objectMapper;

@Autowired
protected MockMvc docMockMvc;

@Autowired
private WebApplicationContext context;

@Rule
public JUnitRestDocumentation restDocumentation = new JUnitRestDocumentation(resolveOutputDir());

@Autowired
RequestMappingHandlerAdapter requestMappingHandlerAdapter;

@Before
public void setupMVC() {

var resolvers = requestMappingHandlerAdapter.getArgumentResolvers();

this.docMockMvc = MockMvcBuilders.webAppContextSetup(context)
.alwaysDo(JacksonResultHandlers.prepareJackson(objectMapper))
.apply(documentationConfiguration(restDocumentation).uris().withScheme("https")
.withHost("127.0.0.1").withPort(443).and().snippets()
.withDefaults(
CliDocumentation.curlRequest(),
HttpDocumentation.httpRequest(),
HttpDocumentation.httpResponse(),
AutoDocumentation.requestFields(),
AutoDocumentation.responseFields(),
AutoDocumentation.pathParameters(),
AutoDocumentation.requestParameters(),
// AutoDocumentation.modelAttribute(null),
AutoDocumentation.modelAttribute(resolvers),
AutoDocumentation.description(),
AutoDocumentation.methodAndPath(),
AutoDocumentation.requestHeaders(),

AutoDocumentation
.sectionBuilder()
.snippetNames(
SnippetRegistry.AUTO_AUTHORIZATION,
SnippetRegistry.AUTO_PATH_PARAMETERS,
SnippetRegistry.AUTO_REQUEST_PARAMETERS,
SnippetRegistry.AUTO_REQUEST_HEADERS,
SnippetRegistry.AUTO_REQUEST_FIELDS,
SnippetRegistry.AUTO_MODELATTRIBUTE,
SnippetRegistry.AUTO_RESPONSE_FIELDS,
SnippetRegistry.CURL_REQUEST,
SnippetRegistry.HTTP_RESPONSE)
.skipEmpty(false)
.build()))
.alwaysDo(
commonDocument()
// document("{class-name}/{method-name}", preprocessRequest(prettyPrint()), preprocessResponse(prettyPrint()))
)
.build();
}

RestDocumentationResultHandler commonDocument() {
return document("{class-name}/{method-name}",
preprocessResponse(
ResponseModifyingPreprocessors.replaceBinaryContent(),
ResponseModifyingPreprocessors.limitJsonArrayLength(objectMapper),
prettyPrint())
);
}

String resolveOutputDir() {
String outputDir = System.getProperties().getProperty(
"org.springframework.restdocs.outputDir");
if (outputDir == null) {
outputDir = "build/generated-snippets";
}
return outputDir;
}

@Test
public void shouldDo() throws Exception {
//given
var someHeaderValue = "someHeaderValue";
var someRequestText = "someRequestText";

//when
var resultActions = docMockMvc.perform(get(
"/some",
someRequestText).header("someClass", someHeaderValue));

//then
resultActions.
andDo(print()).
andExpect(status().isOk());
}

}