[#22] Dsl to Wiremock converters - clean up
This commit is contained in:
@@ -0,0 +1,11 @@
|
||||
package io.codearte.accurest.wiremock
|
||||
|
||||
import groovy.transform.CompileStatic
|
||||
|
||||
@CompileStatic
|
||||
class ConversionAccurestException extends RuntimeException {
|
||||
|
||||
ConversionAccurestException(String message, Throwable cause) {
|
||||
super(message, cause)
|
||||
}
|
||||
}
|
||||
@@ -1,7 +1,9 @@
|
||||
package io.codearte.accurest.wiremock
|
||||
|
||||
import groovy.transform.CompileStatic
|
||||
import io.coderate.accurest.dsl.WiremockStubStrategy
|
||||
|
||||
@CompileStatic
|
||||
class DslToWiremockClientConverter extends DslToWiremockConverter {
|
||||
|
||||
@Override
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
package io.codearte.accurest.wiremock
|
||||
|
||||
import groovy.transform.CompileStatic
|
||||
import io.coderate.accurest.dsl.GroovyDsl
|
||||
|
||||
@CompileStatic
|
||||
abstract class DslToWiremockConverter implements SingleFileConverter {
|
||||
|
||||
@Override
|
||||
@@ -10,7 +12,7 @@ abstract class DslToWiremockConverter implements SingleFileConverter {
|
||||
}
|
||||
|
||||
@Override
|
||||
String getOutputFileNameForInputFileName(String inputFileName) {
|
||||
String generateOutputFileNameForInput(String inputFileName) {
|
||||
return inputFileName.replaceAll('.groovy', '.json')
|
||||
}
|
||||
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
package io.codearte.accurest.wiremock
|
||||
|
||||
import groovy.transform.CompileStatic
|
||||
import io.coderate.accurest.dsl.WiremockStubStrategy
|
||||
|
||||
@CompileStatic
|
||||
class DslToWiremockServerConverter extends DslToWiremockConverter {
|
||||
|
||||
@Override
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package io.codearte.accurest.wiremock
|
||||
|
||||
import groovy.io.FileType
|
||||
import groovy.transform.CompileStatic
|
||||
import groovy.util.logging.Slf4j
|
||||
|
||||
import java.nio.file.Files
|
||||
@@ -8,33 +9,45 @@ import java.nio.file.Path
|
||||
import java.nio.file.Paths
|
||||
|
||||
@Slf4j
|
||||
@CompileStatic
|
||||
class RecursiveFilesConverter {
|
||||
|
||||
private final SingleFileConverter singleFileConverter
|
||||
private final File sourceRootDirectory
|
||||
private final File targetRootDirectory
|
||||
|
||||
RecursiveFilesConverter(SingleFileConverter singleFileConverter) {
|
||||
RecursiveFilesConverter(SingleFileConverter singleFileConverter, File sourceRootDirectory, File targetRootDirectory) {
|
||||
this.singleFileConverter = singleFileConverter
|
||||
this.sourceRootDirectory = sourceRootDirectory
|
||||
this.targetRootDirectory = targetRootDirectory
|
||||
}
|
||||
|
||||
void processDirectory(File sourceRootDirectory, File targetRootDirectory) {
|
||||
void processFiles() {
|
||||
sourceRootDirectory.eachFileRecurse(FileType.FILES) { File sourceFile ->
|
||||
try {
|
||||
if (!singleFileConverter.canHandleFileName(sourceFile.name)) {
|
||||
return
|
||||
}
|
||||
|
||||
String convertedContent = singleFileConverter.convertContent(sourceFile.text)
|
||||
|
||||
Path relativePath = Paths.get(sourceRootDirectory.toURI()).relativize(sourceFile.parentFile.toPath())
|
||||
Path absoluteTargetPath = targetRootDirectory.toPath().resolve(relativePath)
|
||||
Files.createDirectories(absoluteTargetPath)
|
||||
|
||||
File newGroovyFile = new File(absoluteTargetPath.toFile(), singleFileConverter.getOutputFileNameForInputFileName(sourceFile.name))
|
||||
log.info("Creating new json [$newGroovyFile.path]")
|
||||
Path absoluteTargetPath = createAndReturnTargetDirectory(sourceFile)
|
||||
File newGroovyFile = createTargetFileWithProperName(absoluteTargetPath, sourceFile)
|
||||
newGroovyFile.text = convertedContent
|
||||
} catch (Exception e) {
|
||||
throw e
|
||||
throw new ConversionAccurestException("Unable to convertion of ${sourceFile.name}", e)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private Path createAndReturnTargetDirectory(File sourceFile) {
|
||||
Path relativePath = Paths.get(sourceRootDirectory.toURI()).relativize(sourceFile.parentFile.toPath())
|
||||
Path absoluteTargetPath = targetRootDirectory.toPath().resolve(relativePath)
|
||||
Files.createDirectories(absoluteTargetPath)
|
||||
absoluteTargetPath
|
||||
}
|
||||
|
||||
private File createTargetFileWithProperName(Path absoluteTargetPath, File sourceFile) {
|
||||
File newGroovyFile = new File(absoluteTargetPath.toFile(), singleFileConverter.generateOutputFileNameForInput(sourceFile.name))
|
||||
log.info("Creating new json [$newGroovyFile.path]")
|
||||
newGroovyFile
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,10 +1,13 @@
|
||||
package io.codearte.accurest.wiremock
|
||||
|
||||
import groovy.transform.CompileStatic
|
||||
|
||||
@CompileStatic
|
||||
interface SingleFileConverter {
|
||||
|
||||
boolean canHandleFileName(String fileName)
|
||||
|
||||
String convertContent(String content)
|
||||
|
||||
String getOutputFileNameForInputFileName(String inputFileName)
|
||||
String generateOutputFileNameForInput(String inputFileName)
|
||||
}
|
||||
@@ -18,18 +18,18 @@ class RecursiveFilesConverterSpec extends Specification {
|
||||
|
||||
def "should recursively convert all matching files"() {
|
||||
given:
|
||||
def singleFileConverterStub = Stub(SingleFileConverter)
|
||||
singleFileConverterStub.canHandleFileName(_) >> { String fileName -> fileName.endsWith(".groovy") }
|
||||
singleFileConverterStub.convertContent(_) >> { "converted" }
|
||||
singleFileConverterStub.getOutputFileNameForInputFileName(_) >> { String inputFileName -> inputFileName.replaceAll('.groovy', '.json') }
|
||||
RecursiveFilesConverter recursiveFilesConverter = new RecursiveFilesConverter(singleFileConverterStub)
|
||||
and:
|
||||
File originalSourceRootDirectory = new File(this.getClass().getResource("/converter/source").toURI())
|
||||
File sourceRootDirectory = tmpFolder.newFolder("source")
|
||||
File targetRootDirectory = tmpFolder.newFolder("target")
|
||||
FileUtils.copyDirectory(originalSourceRootDirectory, sourceRootDirectory)
|
||||
and:
|
||||
def singleFileConverterStub = Stub(SingleFileConverter)
|
||||
singleFileConverterStub.canHandleFileName(_) >> { String fileName -> fileName.endsWith(".groovy") }
|
||||
singleFileConverterStub.convertContent(_) >> { "converted" }
|
||||
singleFileConverterStub.generateOutputFileNameForInput(_) >> { String inputFileName -> inputFileName.replaceAll('.groovy', '.json') }
|
||||
RecursiveFilesConverter recursiveFilesConverter = new RecursiveFilesConverter(singleFileConverterStub, sourceRootDirectory, targetRootDirectory)
|
||||
when:
|
||||
recursiveFilesConverter.processDirectory(sourceRootDirectory, targetRootDirectory)
|
||||
recursiveFilesConverter.processFiles()
|
||||
then:
|
||||
Collection<File> createdFiles = FileUtils.listFiles(targetRootDirectory, TrueFileFilter.INSTANCE, TrueFileFilter.INSTANCE)
|
||||
Set<String> relativizedCreatedFiles = getRelativePathsForFilesInDirectory(createdFiles, targetRootDirectory)
|
||||
@@ -38,6 +38,23 @@ class RecursiveFilesConverterSpec extends Specification {
|
||||
createdFiles.each { it.text == "converted" }
|
||||
}
|
||||
|
||||
def "on failure should break processing and throw meaningful exception"() {
|
||||
given:
|
||||
def sourceFile = tmpFolder.newFile()
|
||||
and:
|
||||
def singleFileConverterStub = Stub(SingleFileConverter)
|
||||
singleFileConverterStub.canHandleFileName(_) >> { true }
|
||||
singleFileConverterStub.convertContent(_) >> { throw new NullPointerException("Test conversion error") }
|
||||
singleFileConverterStub.generateOutputFileNameForInput(_) >> { String inputFileName -> "${inputFileName}2" }
|
||||
RecursiveFilesConverter recursiveFilesConverter = new RecursiveFilesConverter(singleFileConverterStub, tmpFolder.root, tmpFolder.root)
|
||||
when:
|
||||
recursiveFilesConverter.processFiles()
|
||||
then:
|
||||
def e = thrown(ConversionAccurestException)
|
||||
e.message?.contains(sourceFile.name)
|
||||
e.cause?.message == "Test conversion error"
|
||||
}
|
||||
|
||||
private static Set<String> getRelativePathsForFilesInDirectory(Collection<File> createdFiles, File targetRootDirectory) {
|
||||
Path rootSourcePath = Paths.get(targetRootDirectory.toURI())
|
||||
Set<String> relativizedCreatedFiles = createdFiles.collect { File file ->
|
||||
|
||||
Reference in New Issue
Block a user