Polish "Improve diagnostics for null configuration"

See gh-583
This commit is contained in:
Andy Wilkinson
2019-08-30 16:57:21 +01:00
parent b5f2454c00
commit fce255695e
8 changed files with 39 additions and 53 deletions

View File

@@ -16,7 +16,6 @@
package org.springframework.restdocs.webtestclient;
import java.util.HashMap;
import java.util.Map;
import java.util.function.Consumer;
@@ -30,7 +29,6 @@ import org.springframework.test.web.reactive.server.WebTestClient;
import org.springframework.test.web.reactive.server.WebTestClient.BodyContentSpec;
import org.springframework.test.web.reactive.server.WebTestClient.BodySpec;
import org.springframework.test.web.reactive.server.WebTestClient.Builder;
import org.springframework.util.Assert;
import org.springframework.web.reactive.function.client.ExchangeFilterFunction;
/**
@@ -76,7 +74,7 @@ public abstract class WebTestClientRestDocumentation {
*/
public static <T extends ExchangeResult> Consumer<T> document(String identifier, Snippet... snippets) {
return (result) -> new RestDocumentationGenerator<>(identifier, REQUEST_CONVERTER, RESPONSE_CONVERTER, snippets)
.handle(result, result, getRequiredConfiguration(result));
.handle(result, result, retrieveConfiguration(result));
}
/**
@@ -93,7 +91,7 @@ public abstract class WebTestClientRestDocumentation {
public static <T extends ExchangeResult> Consumer<T> document(String identifier,
OperationRequestPreprocessor requestPreprocessor, Snippet... snippets) {
return (result) -> new RestDocumentationGenerator<>(identifier, REQUEST_CONVERTER, RESPONSE_CONVERTER,
requestPreprocessor, snippets).handle(result, result, getRequiredConfiguration(result));
requestPreprocessor, snippets).handle(result, result, retrieveConfiguration(result));
}
/**
@@ -110,7 +108,7 @@ public abstract class WebTestClientRestDocumentation {
public static <T extends ExchangeResult> Consumer<T> document(String identifier,
OperationResponsePreprocessor responsePreprocessor, Snippet... snippets) {
return (result) -> new RestDocumentationGenerator<>(identifier, REQUEST_CONVERTER, RESPONSE_CONVERTER,
responsePreprocessor, snippets).handle(result, result, getRequiredConfiguration(result));
responsePreprocessor, snippets).handle(result, result, retrieveConfiguration(result));
}
/**
@@ -131,17 +129,12 @@ public abstract class WebTestClientRestDocumentation {
Snippet... snippets) {
return (result) -> new RestDocumentationGenerator<>(identifier, REQUEST_CONVERTER, RESPONSE_CONVERTER,
requestPreprocessor, responsePreprocessor, snippets).handle(result, result,
getRequiredConfiguration(result));
retrieveConfiguration(result));
}
private static Map<String, Object> getRequiredConfiguration(ExchangeResult result) {
Map<String, Object> config = WebTestClientRestDocumentationConfigurer
private static Map<String, Object> retrieveConfiguration(ExchangeResult result) {
Map<String, Object> configuration = WebTestClientRestDocumentationConfigurer
.retrieveConfiguration(result.getRequestHeaders());
Assert.state(config != null,
() -> String.format("There is no REST Docs configuration. Looks like '%s' "
+ "was not invoked or configuration has already been removed. Please check your configuration.",
WebTestClientRestDocumentationConfigurer.class.getName()));
Map<String, Object> configuration = new HashMap<>(config);
configuration.put(RestDocumentationGenerator.ATTRIBUTE_NAME_URL_TEMPLATE, result.getUriTemplate());
return configuration;
}

View File

@@ -29,6 +29,7 @@ import org.springframework.restdocs.RestDocumentationContext;
import org.springframework.restdocs.RestDocumentationContextProvider;
import org.springframework.restdocs.config.RestDocumentationConfigurer;
import org.springframework.test.web.reactive.server.WebTestClient;
import org.springframework.util.Assert;
import org.springframework.util.StringUtils;
import org.springframework.web.reactive.function.client.ClientRequest;
import org.springframework.web.reactive.function.client.ClientResponse;
@@ -78,7 +79,10 @@ public class WebTestClientRestDocumentationConfigurer extends
static Map<String, Object> retrieveConfiguration(HttpHeaders headers) {
String requestId = headers.getFirst(WebTestClient.WEBTESTCLIENT_REQUEST_ID);
return configurations.remove(requestId);
Map<String, Object> configuration = configurations.remove(requestId);
Assert.state(configuration != null, () -> "REST Docs configuration not found. Did you forget to register a "
+ WebTestClientRestDocumentationConfigurer.class.getSimpleName() + " as a filter?");
return configuration;
}
@Override

View File

@@ -29,6 +29,7 @@ import org.springframework.web.reactive.function.client.ClientRequest;
import org.springframework.web.reactive.function.client.ExchangeFunction;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatIllegalStateException;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
@@ -51,7 +52,8 @@ public class WebTestClientRestDocumentationConfigurerTests {
.header(WebTestClient.WEBTESTCLIENT_REQUEST_ID, "1").build();
this.configurer.filter(request, mock(ExchangeFunction.class));
assertThat(WebTestClientRestDocumentationConfigurer.retrieveConfiguration(request.headers())).isNotNull();
assertThat(WebTestClientRestDocumentationConfigurer.retrieveConfiguration(request.headers())).isNull();
assertThatIllegalStateException()
.isThrownBy(() -> WebTestClientRestDocumentationConfigurer.retrieveConfiguration(request.headers()));
}
@Test

View File

@@ -180,13 +180,9 @@ public class WebTestClientRestDocumentationIntegrationTests {
assertThatThrownBy(() -> this.webTestClient
.mutateWith((builder, httpHandlerBuilder, connector) -> builder.filters(List::clear).build()).get()
.uri("/").exchange().expectBody().consumeWith(document("default-snippets")))
.isInstanceOf(IllegalStateException.class).hasMessageContaining(missingConfiguration());
}
private String missingConfiguration() {
return "There is no REST Docs configuration. Looks like "
+ "'org.springframework.restdocs.webtestclient.WebTestClientRestDocumentationConfigurer' "
+ "was not invoked or configuration has already been removed. Please check your configuration.";
.isInstanceOf(IllegalStateException.class)
.hasMessage("REST Docs configuration not found. Did you forget to register a "
+ "WebTestClientRestDocumentationConfigurer as a filter?");
}
private void assertExpectedSnippetFilesExist(File directory, String... snippets) {