From e83455650ec79d3ba90f843ae4ea42e8a40580ed Mon Sep 17 00:00:00 2001 From: Jakub Kubrynski Date: Sun, 7 Dec 2014 00:37:14 +0100 Subject: [PATCH] Reading stub definitions basics --- .../eu/coderate/accurest/TestGenerator.groovy | 28 +++++++++++++------ .../accurest/builder/MethodBodyBuilder.groovy | 19 +++++++++++++ .../accurest/builder/MethodBuilder.groovy | 18 ++++++++---- .../coderate/accurest/util/NamesUtil.groovy | 11 ++++++-- src/main/resources/wiremocks/shouldFail.json | 4 +-- 5 files changed, 62 insertions(+), 18 deletions(-) create mode 100644 src/main/groovy/eu/coderate/accurest/builder/MethodBodyBuilder.groovy diff --git a/src/main/groovy/eu/coderate/accurest/TestGenerator.groovy b/src/main/groovy/eu/coderate/accurest/TestGenerator.groovy index 24d122df72..06264a7bed 100644 --- a/src/main/groovy/eu/coderate/accurest/TestGenerator.groovy +++ b/src/main/groovy/eu/coderate/accurest/TestGenerator.groovy @@ -1,5 +1,6 @@ package eu.coderate.accurest +import eu.coderate.accurest.builder.ClassBuilder import eu.coderate.accurest.util.NamesUtil import static eu.coderate.accurest.builder.ClassBuilder.createClass @@ -24,26 +25,37 @@ class TestGenerator { public String generate() { StringBuilder builder = new StringBuilder() - List files = new File(mocksBaseDirectory).list() - files.each { - builder << addClass(NamesUtil.capitalize(NamesUtil.toLastDot(it))) + List files = new File(mocksBaseDirectory).listFiles() + files.grep({ File file -> file.isDirectory() && containsStubs(file) }).each { + builder << addClass(it) } return builder } - private String addClass(String className) { - createClass(className, basePackageForTests, baseClassForTests) + boolean containsStubs(File file) { + return file.list(new FilenameFilter() { + @Override + boolean accept(File dir, String name) { + return "json".equalsIgnoreCase(NamesUtil.afterLastDot(name)) + } + }).size() > 0 + } + + private String addClass(File directory) { + ClassBuilder clazz = createClass(NamesUtil.capitalize(NamesUtil.afterLast(directory.path, '/')), basePackageForTests, baseClassForTests) .addImport('org.junit.Test') .addImport('org.junit.Rule') .addStaticImport('org.hamcrest.Matchers.*') .addStaticImport('com.jayway.restassured.RestAssured.*') .addStaticImport('com.jayway.restassured.matcher.RestAssuredMatchers.*') .addRule('com.test.MyRule') - .addMethod(createVoidMethod('shouldInvokeService')) - .build() + directory.listFiles().each { + clazz.addMethod(createVoidMethod(it)) + } + return clazz.build() } public static void main(String[] args) { - print new TestGenerator("wiremocks", 'io.test', 'com.test.BaseClass', "").generate() + print new TestGenerator("", 'io.test', 'com.test.BaseClass', "").generate() } } \ No newline at end of file diff --git a/src/main/groovy/eu/coderate/accurest/builder/MethodBodyBuilder.groovy b/src/main/groovy/eu/coderate/accurest/builder/MethodBodyBuilder.groovy new file mode 100644 index 0000000000..17c6a5cc3d --- /dev/null +++ b/src/main/groovy/eu/coderate/accurest/builder/MethodBodyBuilder.groovy @@ -0,0 +1,19 @@ +package eu.coderate.accurest.builder + +/** + * @author Jakub Kubrynski + */ +class MethodBodyBuilder { + private final Map stubDefinition + + MethodBodyBuilder(Map stubDefinition) { + this.stubDefinition = stubDefinition + } + + void appendTo(BlockBuilder blockBuilder) { + blockBuilder.startBlock() + blockBuilder.addLine("//" + stubDefinition.request.method) + blockBuilder.addLine("//" + stubDefinition.response.status) + blockBuilder.endBlock() + } +} diff --git a/src/main/groovy/eu/coderate/accurest/builder/MethodBuilder.groovy b/src/main/groovy/eu/coderate/accurest/builder/MethodBuilder.groovy index c98d8757f1..c9e7568a51 100644 --- a/src/main/groovy/eu/coderate/accurest/builder/MethodBuilder.groovy +++ b/src/main/groovy/eu/coderate/accurest/builder/MethodBuilder.groovy @@ -1,5 +1,8 @@ package eu.coderate.accurest.builder +import eu.coderate.accurest.util.NamesUtil +import groovy.json.JsonSlurper + /** * @author Jakub Kubrynski */ @@ -7,19 +10,24 @@ class MethodBuilder { private final String methodName private final String returnType + private final Map stubContent - private MethodBuilder(String returnType, String methodName) { + private MethodBuilder(String returnType, String methodName, Map stubContent) { + this.stubContent = stubContent this.returnType = returnType this.methodName = methodName } - static MethodBuilder createVoidMethod(String methodName) { - return new MethodBuilder("void", methodName) + static MethodBuilder createVoidMethod(File stubsFile) { + Map stubContent = new JsonSlurper().parse(stubsFile) + String methodName = NamesUtil.uncapitalize(NamesUtil.toLastDot(NamesUtil.afterLast(stubsFile.path, File.separator))) + return new MethodBuilder("void", methodName, stubContent) } void appendTo(BlockBuilder blockBuilder) { blockBuilder.addLine('@Test') - blockBuilder.addLine("public $returnType $methodName {") - .addLine('}') + blockBuilder.addLine("public $returnType $methodName() {") + new MethodBodyBuilder(stubContent).appendTo(blockBuilder) + blockBuilder.addLine('}') } } diff --git a/src/main/groovy/eu/coderate/accurest/util/NamesUtil.groovy b/src/main/groovy/eu/coderate/accurest/util/NamesUtil.groovy index 530febc6d0..d330ce6e51 100644 --- a/src/main/groovy/eu/coderate/accurest/util/NamesUtil.groovy +++ b/src/main/groovy/eu/coderate/accurest/util/NamesUtil.groovy @@ -4,13 +4,18 @@ package eu.coderate.accurest.util * @author Jakub Kubrynski */ class NamesUtil { - static String afterLastDot(String string) { - if (string?.indexOf('.') > -1) { - return string.substring(string.lastIndexOf('.')+1) + + static String afterLast(String string, String separator) { + if (string?.indexOf(separator) > -1) { + return string.substring(string.lastIndexOf(separator)+1) } return string } + static String afterLastDot(String string) { + return afterLast(string, '.') + } + static String uncapitalize(String className) { if (!className) { return className diff --git a/src/main/resources/wiremocks/shouldFail.json b/src/main/resources/wiremocks/shouldFail.json index 57926656a3..7fd4b69fba 100644 --- a/src/main/resources/wiremocks/shouldFail.json +++ b/src/main/resources/wiremocks/shouldFail.json @@ -1,7 +1,7 @@ { "request": { - "method": "GET", - "url": "/some/thing2" + "method": "POST", + "url": "/some/thing" }, "response": { "status": 400