Replace placeholders in snippet name as well as the operation name
Previously, StandardWriterResolver only replaced placeholders in the operation name. This meant that the name and location of generated snippets was unnecessarily limited. This commit makes things more flexible by updating StandardWriterResolver to replace placeholders in the snippet name as well. Closes gh-403
This commit is contained in:
@@ -82,11 +82,12 @@ public final class StandardWriterResolver implements WriterResolver {
|
||||
@Override
|
||||
public Writer resolve(String operationName, String snippetName,
|
||||
RestDocumentationContext context) throws IOException {
|
||||
File outputFile = resolveFile(
|
||||
this.propertyPlaceholderHelper.replacePlaceholders(operationName,
|
||||
this.placeholderResolverFactory.create(context)),
|
||||
snippetName + "." + this.templateFormat.getFileExtension(), context);
|
||||
|
||||
PlaceholderResolver placeholderResolver = this.placeholderResolverFactory
|
||||
.create(context);
|
||||
String outputDirectory = replacePlaceholders(placeholderResolver, operationName);
|
||||
String fileName = replacePlaceholders(placeholderResolver, snippetName) + "."
|
||||
+ this.templateFormat.getFileExtension();
|
||||
File outputFile = resolveFile(outputDirectory, fileName, context);
|
||||
if (outputFile != null) {
|
||||
createDirectoriesIfNecessary(outputFile);
|
||||
return new OutputStreamWriter(new FileOutputStream(outputFile),
|
||||
@@ -103,6 +104,10 @@ public final class StandardWriterResolver implements WriterResolver {
|
||||
this.encoding = encoding;
|
||||
}
|
||||
|
||||
private String replacePlaceholders(PlaceholderResolver resolver, String input) {
|
||||
return this.propertyPlaceholderHelper.replacePlaceholders(input, resolver);
|
||||
}
|
||||
|
||||
File resolveFile(String outputDirectory, String fileName,
|
||||
RestDocumentationContext context) {
|
||||
File outputFile = new File(outputDirectory, fileName);
|
||||
|
||||
@@ -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.
|
||||
@@ -17,14 +17,23 @@
|
||||
package org.springframework.restdocs.snippet;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileReader;
|
||||
import java.io.IOException;
|
||||
import java.io.Writer;
|
||||
|
||||
import org.junit.Rule;
|
||||
import org.junit.Test;
|
||||
import org.junit.rules.TemporaryFolder;
|
||||
|
||||
import org.springframework.restdocs.ManualRestDocumentation;
|
||||
import org.springframework.restdocs.RestDocumentationContext;
|
||||
import org.springframework.util.FileCopyUtils;
|
||||
import org.springframework.util.PropertyPlaceholderHelper.PlaceholderResolver;
|
||||
|
||||
import static org.hamcrest.CoreMatchers.equalTo;
|
||||
import static org.hamcrest.CoreMatchers.is;
|
||||
import static org.junit.Assert.assertThat;
|
||||
import static org.mockito.BDDMockito.given;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.springframework.restdocs.templates.TemplateFormats.asciidoctor;
|
||||
|
||||
@@ -35,6 +44,9 @@ import static org.springframework.restdocs.templates.TemplateFormats.asciidoctor
|
||||
*/
|
||||
public class StandardWriterResolverTests {
|
||||
|
||||
@Rule
|
||||
public final TemporaryFolder temp = new TemporaryFolder();
|
||||
|
||||
private final PlaceholderResolverFactory placeholderResolverFactory = mock(
|
||||
PlaceholderResolverFactory.class);
|
||||
|
||||
@@ -69,6 +81,30 @@ public class StandardWriterResolverTests {
|
||||
is(new File(absolutePath, "baz.txt")));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void placeholdersAreResolvedInOperationName() throws IOException {
|
||||
File outputDirectory = this.temp.newFolder();
|
||||
RestDocumentationContext context = createContext(
|
||||
outputDirectory.getAbsolutePath());
|
||||
PlaceholderResolver resolver = mock(PlaceholderResolver.class);
|
||||
given(resolver.resolvePlaceholder("a")).willReturn("alpha");
|
||||
given(this.placeholderResolverFactory.create(context)).willReturn(resolver);
|
||||
Writer writer = this.resolver.resolve("{a}", "bravo", context);
|
||||
assertSnippetLocation(writer, new File(outputDirectory, "alpha/bravo.adoc"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void placeholdersAreResolvedInSnippetName() throws IOException {
|
||||
File outputDirectory = this.temp.newFolder();
|
||||
RestDocumentationContext context = createContext(
|
||||
outputDirectory.getAbsolutePath());
|
||||
PlaceholderResolver resolver = mock(PlaceholderResolver.class);
|
||||
given(resolver.resolvePlaceholder("b")).willReturn("bravo");
|
||||
given(this.placeholderResolverFactory.create(context)).willReturn(resolver);
|
||||
Writer writer = this.resolver.resolve("alpha", "{b}", context);
|
||||
assertSnippetLocation(writer, new File(outputDirectory, "alpha/bravo.adoc"));
|
||||
}
|
||||
|
||||
private RestDocumentationContext createContext(String outputDir) {
|
||||
ManualRestDocumentation manualRestDocumentation = new ManualRestDocumentation(
|
||||
outputDir);
|
||||
@@ -77,4 +113,13 @@ public class StandardWriterResolverTests {
|
||||
return context;
|
||||
}
|
||||
|
||||
private void assertSnippetLocation(Writer writer, File expectedLocation)
|
||||
throws IOException {
|
||||
writer.write("test");
|
||||
writer.flush();
|
||||
assertThat(expectedLocation.exists(), is(true));
|
||||
assertThat(FileCopyUtils.copyToString(new FileReader(expectedLocation)),
|
||||
is(equalTo("test")));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user