Polish "Add support for configuring default request and response preprocessors"
Closes gh-424
This commit is contained in:
@@ -78,8 +78,11 @@ public class RestDocumentationGeneratorTests {
|
||||
|
||||
private final Snippet snippet = mock(Snippet.class);
|
||||
|
||||
private final OperationPreprocessor requestPreprocessor = mock(OperationPreprocessor.class);
|
||||
private final OperationPreprocessor responsePreprocessor = mock(OperationPreprocessor.class);
|
||||
private final OperationPreprocessor requestPreprocessor = mock(
|
||||
OperationPreprocessor.class);
|
||||
|
||||
private final OperationPreprocessor responsePreprocessor = mock(
|
||||
OperationPreprocessor.class);
|
||||
|
||||
@Test
|
||||
public void basicHandling() throws IOException {
|
||||
@@ -122,19 +125,23 @@ public class RestDocumentationGeneratorTests {
|
||||
HashMap<String, Object> configuration = new HashMap<>();
|
||||
OperationPreprocessor defaultPreprocessor1 = mock(OperationPreprocessor.class);
|
||||
OperationPreprocessor defaultPreprocessor2 = mock(OperationPreprocessor.class);
|
||||
configuration.put(RestDocumentationGenerator.ATTRIBUTE_NAME_DEFAULT_OPERATION_REQUEST_PREPROCESSOR,
|
||||
Preprocessors.preprocessRequest(defaultPreprocessor1, defaultPreprocessor2));
|
||||
configuration.put(
|
||||
RestDocumentationGenerator.ATTRIBUTE_NAME_DEFAULT_OPERATION_REQUEST_PREPROCESSOR,
|
||||
Preprocessors.preprocessRequest(defaultPreprocessor1,
|
||||
defaultPreprocessor2));
|
||||
OperationRequest first = createRequest();
|
||||
OperationRequest second = createRequest();
|
||||
OperationRequest third = createRequest();
|
||||
given(this.requestPreprocessor.preprocess(this.operationRequest)).willReturn(first);
|
||||
given(this.requestPreprocessor.preprocess(this.operationRequest))
|
||||
.willReturn(first);
|
||||
given(defaultPreprocessor1.preprocess(first)).willReturn(second);
|
||||
given(defaultPreprocessor2.preprocess(second)).willReturn(third);
|
||||
new RestDocumentationGenerator<>("id", this.requestConverter,
|
||||
this.responseConverter, Preprocessors.preprocessRequest(this.requestPreprocessor), this.snippet)
|
||||
.handle(this.request, this.response, configuration);
|
||||
|
||||
verifySnippetInvocation(this.snippet, third, this.operationResponse, configuration, 1);
|
||||
this.responseConverter,
|
||||
Preprocessors.preprocessRequest(this.requestPreprocessor), this.snippet)
|
||||
.handle(this.request, this.response, configuration);
|
||||
verifySnippetInvocation(this.snippet, third, this.operationResponse,
|
||||
configuration, 1);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -146,49 +153,24 @@ public class RestDocumentationGeneratorTests {
|
||||
HashMap<String, Object> configuration = new HashMap<>();
|
||||
OperationPreprocessor defaultPreprocessor1 = mock(OperationPreprocessor.class);
|
||||
OperationPreprocessor defaultPreprocessor2 = mock(OperationPreprocessor.class);
|
||||
configuration.put(RestDocumentationGenerator.ATTRIBUTE_NAME_DEFAULT_OPERATION_RESPONSE_PREPROCESSOR,
|
||||
Preprocessors.preprocessResponse(defaultPreprocessor1, defaultPreprocessor2));
|
||||
configuration.put(
|
||||
RestDocumentationGenerator.ATTRIBUTE_NAME_DEFAULT_OPERATION_RESPONSE_PREPROCESSOR,
|
||||
Preprocessors.preprocessResponse(defaultPreprocessor1,
|
||||
defaultPreprocessor2));
|
||||
OperationResponse first = createResponse();
|
||||
OperationResponse second = createResponse();
|
||||
OperationResponse third = new OperationResponseFactory().createFrom(this.operationResponse, new HttpHeaders());
|
||||
given(this.responsePreprocessor.preprocess(this.operationResponse)).willReturn(first);
|
||||
OperationResponse third = new OperationResponseFactory()
|
||||
.createFrom(this.operationResponse, new HttpHeaders());
|
||||
given(this.responsePreprocessor.preprocess(this.operationResponse))
|
||||
.willReturn(first);
|
||||
given(defaultPreprocessor1.preprocess(first)).willReturn(second);
|
||||
given(defaultPreprocessor2.preprocess(second)).willReturn(third);
|
||||
new RestDocumentationGenerator<>("id", this.requestConverter,
|
||||
this.responseConverter, Preprocessors.preprocessResponse(this.responsePreprocessor), this.snippet)
|
||||
.handle(this.request, this.response, configuration);
|
||||
|
||||
verifySnippetInvocation(this.snippet, this.operationRequest, third, configuration, 1);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void defaultOperationPreprocessorsAreCalled() throws IOException {
|
||||
given(this.requestConverter.convert(this.request))
|
||||
.willReturn(this.operationRequest);
|
||||
given(this.responseConverter.convert(this.response))
|
||||
.willReturn(this.operationResponse);
|
||||
HashMap<String, Object> configuration = new HashMap<>();
|
||||
OperationPreprocessor requestPreprocessor1 = mock(OperationPreprocessor.class);
|
||||
configuration.put(RestDocumentationGenerator.ATTRIBUTE_NAME_DEFAULT_OPERATION_REQUEST_PREPROCESSOR,
|
||||
Preprocessors.preprocessRequest(requestPreprocessor1));
|
||||
OperationRequest firstRequest = createRequest();
|
||||
OperationRequest secondRequest = createRequest();
|
||||
given(this.requestPreprocessor.preprocess(this.operationRequest)).willReturn(firstRequest);
|
||||
given(requestPreprocessor1.preprocess(firstRequest)).willReturn(secondRequest);
|
||||
|
||||
OperationPreprocessor responsePreprocessor1 = mock(OperationPreprocessor.class);
|
||||
configuration.put(RestDocumentationGenerator.ATTRIBUTE_NAME_DEFAULT_OPERATION_RESPONSE_PREPROCESSOR,
|
||||
Preprocessors.preprocessResponse(responsePreprocessor1));
|
||||
OperationResponse firstResponse = createResponse();
|
||||
OperationResponse secondResponse = createResponse();
|
||||
given(this.responsePreprocessor.preprocess(this.operationResponse)).willReturn(firstResponse);
|
||||
given(responsePreprocessor1.preprocess(firstResponse)).willReturn(secondResponse);
|
||||
new RestDocumentationGenerator<>("id", this.requestConverter,
|
||||
this.responseConverter, Preprocessors.preprocessRequest(this.requestPreprocessor),
|
||||
this.responseConverter,
|
||||
Preprocessors.preprocessResponse(this.responsePreprocessor), this.snippet)
|
||||
.handle(this.request, this.response, configuration);
|
||||
|
||||
verifySnippetInvocation(this.snippet, secondRequest, secondResponse, configuration, 1);
|
||||
.handle(this.request, this.response, configuration);
|
||||
verifySnippetInvocation(this.snippet, this.operationRequest, third, configuration,
|
||||
1);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -225,11 +207,12 @@ public class RestDocumentationGeneratorTests {
|
||||
|
||||
private void verifySnippetInvocation(Snippet snippet, Map<String, Object> attributes,
|
||||
int times) throws IOException {
|
||||
verifySnippetInvocation(snippet, this.operationRequest, this.operationResponse, attributes, times);
|
||||
verifySnippetInvocation(snippet, this.operationRequest, this.operationResponse,
|
||||
attributes, times);
|
||||
}
|
||||
|
||||
private void verifySnippetInvocation(Snippet snippet, OperationRequest operationRequest,
|
||||
OperationResponse operationResponse,
|
||||
private void verifySnippetInvocation(Snippet snippet,
|
||||
OperationRequest operationRequest, OperationResponse operationResponse,
|
||||
Map<String, Object> attributes, int times) throws IOException {
|
||||
ArgumentCaptor<Operation> operation = ArgumentCaptor.forClass(Operation.class);
|
||||
verify(snippet, Mockito.times(times)).document(operation.capture());
|
||||
@@ -239,13 +222,12 @@ public class RestDocumentationGeneratorTests {
|
||||
}
|
||||
|
||||
private static OperationRequest createRequest() {
|
||||
return new OperationRequestFactory()
|
||||
.create(URI.create("http://localhost:8080"), null, null, new HttpHeaders(), null, null);
|
||||
return new OperationRequestFactory().create(URI.create("http://localhost:8080"),
|
||||
null, null, new HttpHeaders(), null, null);
|
||||
}
|
||||
|
||||
private static OperationResponse createResponse() {
|
||||
return new OperationResponseFactory()
|
||||
.create(null, null, null);
|
||||
return new OperationResponseFactory().create(null, null, null);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2014-2016 the original author or authors.
|
||||
* Copyright 2014-2017 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.
|
||||
@@ -16,6 +16,8 @@
|
||||
|
||||
package org.springframework.restdocs.config;
|
||||
|
||||
import java.net.URI;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
@@ -23,6 +25,9 @@ import java.util.Map;
|
||||
import org.hamcrest.Matchers;
|
||||
import org.junit.Test;
|
||||
|
||||
import org.springframework.http.HttpHeaders;
|
||||
import org.springframework.http.HttpMethod;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.restdocs.ManualRestDocumentation;
|
||||
import org.springframework.restdocs.RestDocumentationContext;
|
||||
import org.springframework.restdocs.cli.CliDocumentation;
|
||||
@@ -31,6 +36,10 @@ import org.springframework.restdocs.cli.HttpieRequestSnippet;
|
||||
import org.springframework.restdocs.generate.RestDocumentationGenerator;
|
||||
import org.springframework.restdocs.http.HttpRequestSnippet;
|
||||
import org.springframework.restdocs.http.HttpResponseSnippet;
|
||||
import org.springframework.restdocs.operation.OperationRequest;
|
||||
import org.springframework.restdocs.operation.OperationRequestFactory;
|
||||
import org.springframework.restdocs.operation.OperationResponse;
|
||||
import org.springframework.restdocs.operation.OperationResponseFactory;
|
||||
import org.springframework.restdocs.operation.preprocess.OperationRequestPreprocessor;
|
||||
import org.springframework.restdocs.operation.preprocess.OperationResponsePreprocessor;
|
||||
import org.springframework.restdocs.operation.preprocess.Preprocessors;
|
||||
@@ -94,12 +103,12 @@ public class RestDocumentationConfigurerTests {
|
||||
assertThat(snippetConfiguration.getTemplateFormat(),
|
||||
is(equalTo(TemplateFormats.asciidoctor())));
|
||||
|
||||
OperationRequestPreprocessor defaultOperationRequestPreprocessor = (OperationRequestPreprocessor)
|
||||
configuration.get(RestDocumentationGenerator.ATTRIBUTE_NAME_DEFAULT_OPERATION_REQUEST_PREPROCESSOR);
|
||||
OperationRequestPreprocessor defaultOperationRequestPreprocessor = (OperationRequestPreprocessor) configuration
|
||||
.get(RestDocumentationGenerator.ATTRIBUTE_NAME_DEFAULT_OPERATION_REQUEST_PREPROCESSOR);
|
||||
assertThat(defaultOperationRequestPreprocessor, is(nullValue()));
|
||||
|
||||
OperationResponsePreprocessor defaultOperationResponsePreprocessor = (OperationResponsePreprocessor)
|
||||
configuration.get(RestDocumentationGenerator.ATTRIBUTE_NAME_DEFAULT_OPERATION_RESPONSE_PREPROCESSOR);
|
||||
OperationResponsePreprocessor defaultOperationResponsePreprocessor = (OperationResponsePreprocessor) configuration
|
||||
.get(RestDocumentationGenerator.ATTRIBUTE_NAME_DEFAULT_OPERATION_RESPONSE_PREPROCESSOR);
|
||||
assertThat(defaultOperationResponsePreprocessor, is(nullValue()));
|
||||
}
|
||||
|
||||
@@ -217,26 +226,35 @@ public class RestDocumentationConfigurerTests {
|
||||
public void customDefaultOperationRequestPreprocessor() {
|
||||
Map<String, Object> configuration = new HashMap<>();
|
||||
this.configurer.operationPreprocessors()
|
||||
.withDefaultRequestPreprocessors(Preprocessors.prettyPrint(), Preprocessors.removeHeaders("Foo"))
|
||||
.withRequestDefaults(Preprocessors.prettyPrint(),
|
||||
Preprocessors.removeHeaders("Foo"))
|
||||
.apply(configuration, createContext());
|
||||
assertThat(configuration,
|
||||
hasEntry(
|
||||
equalTo(RestDocumentationGenerator.ATTRIBUTE_NAME_DEFAULT_OPERATION_REQUEST_PREPROCESSOR),
|
||||
instanceOf(OperationRequestPreprocessor.class)));
|
||||
//TODO how can we actually test that the preprocessors that we set are actually there?
|
||||
OperationRequestPreprocessor preprocessor = (OperationRequestPreprocessor) configuration
|
||||
.get(RestDocumentationGenerator.ATTRIBUTE_NAME_DEFAULT_OPERATION_REQUEST_PREPROCESSOR);
|
||||
HttpHeaders headers = new HttpHeaders();
|
||||
headers.add("Foo", "value");
|
||||
OperationRequest request = new OperationRequestFactory().create(
|
||||
URI.create("http://localhost:8080"), HttpMethod.GET, null, headers, null,
|
||||
Collections.emptyList());
|
||||
assertThat(preprocessor.preprocess(request).getHeaders().get("Foo"),
|
||||
is(nullValue()));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void customDefaultOperationResponsePreprocessor() {
|
||||
Map<String, Object> configuration = new HashMap<>();
|
||||
this.configurer.operationPreprocessors()
|
||||
.withDefaultResponsePreprocessors(Preprocessors.prettyPrint(), Preprocessors.removeHeaders("Foo"))
|
||||
.withResponseDefaults(Preprocessors.prettyPrint(),
|
||||
Preprocessors.removeHeaders("Foo"))
|
||||
.apply(configuration, createContext());
|
||||
assertThat(configuration,
|
||||
hasEntry(
|
||||
equalTo(RestDocumentationGenerator.ATTRIBUTE_NAME_DEFAULT_OPERATION_RESPONSE_PREPROCESSOR),
|
||||
instanceOf(OperationResponsePreprocessor.class)));
|
||||
//TODO same as for the customDefaultOperationRequestPreprocessor
|
||||
OperationResponsePreprocessor preprocessor = (OperationResponsePreprocessor) configuration
|
||||
.get(RestDocumentationGenerator.ATTRIBUTE_NAME_DEFAULT_OPERATION_RESPONSE_PREPROCESSOR);
|
||||
HttpHeaders headers = new HttpHeaders();
|
||||
headers.add("Foo", "value");
|
||||
OperationResponse response = new OperationResponseFactory().create(HttpStatus.OK,
|
||||
headers, null);
|
||||
assertThat(preprocessor.preprocess(response).getHeaders().get("Foo"),
|
||||
is(nullValue()));
|
||||
}
|
||||
|
||||
private RestDocumentationContext createContext() {
|
||||
@@ -248,14 +266,13 @@ public class RestDocumentationConfigurerTests {
|
||||
}
|
||||
|
||||
private static final class TestRestDocumentationConfigurer extends
|
||||
RestDocumentationConfigurer<TestSnippetConfigurer, TestOperationPreprocessorsConfigurer,
|
||||
TestRestDocumentationConfigurer> {
|
||||
RestDocumentationConfigurer<TestSnippetConfigurer, TestOperationPreprocessorsConfigurer, TestRestDocumentationConfigurer> {
|
||||
|
||||
private final TestSnippetConfigurer snippetConfigurer = new TestSnippetConfigurer(
|
||||
this);
|
||||
|
||||
private final TestOperationPreprocessorsConfigurer operationPreprocessorsConfigurer =
|
||||
new TestOperationPreprocessorsConfigurer(this);
|
||||
private final TestOperationPreprocessorsConfigurer operationPreprocessorsConfigurer = new TestOperationPreprocessorsConfigurer(
|
||||
this);
|
||||
|
||||
@Override
|
||||
public TestSnippetConfigurer snippets() {
|
||||
@@ -280,7 +297,8 @@ public class RestDocumentationConfigurerTests {
|
||||
private static final class TestOperationPreprocessorsConfigurer extends
|
||||
OperationPreprocessorsConfigurer<TestRestDocumentationConfigurer, TestOperationPreprocessorsConfigurer> {
|
||||
|
||||
protected TestOperationPreprocessorsConfigurer(TestRestDocumentationConfigurer parent) {
|
||||
protected TestOperationPreprocessorsConfigurer(
|
||||
TestRestDocumentationConfigurer parent) {
|
||||
super(parent);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user