Refine ordering of default, operation, and additional snippets

Previously, the ordering was:

1. Operation snippets
2. Default snippets
3. Additional snippets

This meant that any operation snippets (those specifically configured
for the documentation of the particular operation) would be
overwritten by the output of the default snippets.

This commit updates the ordering to the following:

1. Default snippets
2. Operation snippets
3. Additional snippets

Closes gh-453
This commit is contained in:
Andy Wilkinson
2017-11-07 17:52:02 +00:00
parent abe36e3b54
commit 90c3549f55
2 changed files with 25 additions and 13 deletions

View File

@@ -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.
@@ -229,12 +229,13 @@ public final class RestDocumentationGenerator<REQ, RESP> {
@SuppressWarnings("unchecked")
private List<Snippet> getSnippets(Map<String, Object> configuration) {
List<Snippet> combinedSnippets = new ArrayList<>(this.snippets);
List<Snippet> combinedSnippets = new ArrayList<>();
List<Snippet> defaultSnippets = (List<Snippet>) configuration
.get(ATTRIBUTE_NAME_DEFAULT_SNIPPETS);
if (defaultSnippets != null) {
combinedSnippets.addAll(defaultSnippets);
}
combinedSnippets.addAll(this.snippets);
combinedSnippets.addAll(this.additionalSnippets);
this.additionalSnippets.clear();
return combinedSnippets;

View File

@@ -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.
@@ -24,6 +24,7 @@ import java.util.Map;
import org.junit.Test;
import org.mockito.ArgumentCaptor;
import org.mockito.InOrder;
import org.mockito.Mockito;
import org.springframework.http.HttpHeaders;
@@ -102,9 +103,10 @@ public class RestDocumentationGeneratorTests {
new RestDocumentationGenerator<>("id", this.requestConverter,
this.responseConverter, this.snippet).handle(this.request, this.response,
configuration);
verifySnippetInvocation(this.snippet, configuration);
verifySnippetInvocation(defaultSnippet1, configuration);
verifySnippetInvocation(defaultSnippet2, configuration);
InOrder inOrder = Mockito.inOrder(defaultSnippet1, defaultSnippet2, this.snippet);
verifySnippetInvocation(inOrder, defaultSnippet1, configuration);
verifySnippetInvocation(inOrder, defaultSnippet2, configuration);
verifySnippetInvocation(inOrder, this.snippet, configuration);
}
@Test
@@ -122,9 +124,13 @@ public class RestDocumentationGeneratorTests {
HashMap<String, Object> configuration = new HashMap<>();
generator.handle(this.request, this.response, configuration);
generator.handle(this.request, this.response, configuration);
verifySnippetInvocation(this.snippet, configuration, 2);
verifySnippetInvocation(additionalSnippet1, configuration);
verifySnippetInvocation(additionalSnippet2, configuration);
InOrder inOrder = Mockito.inOrder(this.snippet, additionalSnippet1,
additionalSnippet2);
verifySnippetInvocation(inOrder, this.snippet, configuration);
verifySnippetInvocation(inOrder, additionalSnippet1, configuration);
verifySnippetInvocation(inOrder, additionalSnippet2, configuration);
verifySnippetInvocation(inOrder, this.snippet, configuration);
verifyNoMoreInteractions(this.snippet, additionalSnippet1, additionalSnippet2);
}
@Test
@@ -156,13 +162,18 @@ public class RestDocumentationGeneratorTests {
private void verifySnippetInvocation(Snippet snippet, Map<String, Object> attributes)
throws IOException {
verifySnippetInvocation(snippet, attributes, 1);
ArgumentCaptor<Operation> operation = ArgumentCaptor.forClass(Operation.class);
verify(snippet).document(operation.capture());
assertThat(this.operationRequest, is(equalTo(operation.getValue().getRequest())));
assertThat(this.operationResponse,
is(equalTo(operation.getValue().getResponse())));
assertThat(attributes, is(equalTo(operation.getValue().getAttributes())));
}
private void verifySnippetInvocation(Snippet snippet, Map<String, Object> attributes,
int times) throws IOException {
private void verifySnippetInvocation(InOrder inOrder, Snippet snippet,
Map<String, Object> attributes) throws IOException {
ArgumentCaptor<Operation> operation = ArgumentCaptor.forClass(Operation.class);
verify(snippet, Mockito.times(times)).document(operation.capture());
inOrder.verify(snippet).document(operation.capture());
assertThat(this.operationRequest, is(equalTo(operation.getValue().getRequest())));
assertThat(this.operationResponse,
is(equalTo(operation.getValue().getResponse())));