[#22] Add generateWiremockClientStubs task

This commit is contained in:
Marcin Zajaczkowski
2015-02-20 15:52:29 +01:00
parent 442c3abe40
commit 4dc4f1d37c
8 changed files with 72 additions and 26 deletions

View File

@@ -1,9 +1,10 @@
package io.codearte.accurest.wiremock
import groovy.transform.CompileStatic
import io.coderate.accurest.AccurestException
@CompileStatic
class ConversionAccurestException extends RuntimeException {
class ConversionAccurestException extends AccurestException {
ConversionAccurestException(String message, Throwable cause) {
super(message, cause)

View File

@@ -5,8 +5,11 @@ package io.coderate.accurest
*/
class AccurestException extends RuntimeException {
def AccurestException(String message) {
AccurestException(String message) {
super(message)
}
AccurestException(String message, Throwable cause) {
super(message, cause)
}
}

View File

@@ -14,4 +14,6 @@ class AccurestConfigProperties {
String generatedTestSourcesDir = 'build/generated-sources/accurest'
String[] imports = []
String[] staticImports = []
File groovyDslDir
File generatedWiremockClientStubsDir
}

View File

@@ -15,12 +15,12 @@ class WiremockStubStrategy {
}
String toWiremockClientStub() {
return JsonOutput.toJson([request: wiremockRequestStubStrategy.buildClientRequestContent(),
response: wiremockResponseStubStrategy.buildClientResponseContent()])
return JsonOutput.prettyPrint(JsonOutput.toJson([request: wiremockRequestStubStrategy.buildClientRequestContent(),
response: wiremockResponseStubStrategy.buildClientResponseContent()]))
}
String toWiremockServerStub() {
return JsonOutput.toJson([request: wiremockRequestStubStrategy.buildServerRequestContent(),
response: wiremockResponseStubStrategy.buildServerResponseContent()])
return JsonOutput.prettyPrint(JsonOutput.toJson([request: wiremockRequestStubStrategy.buildServerRequestContent(),
response: wiremockResponseStubStrategy.buildServerResponseContent()]))
}
}

View File

@@ -55,8 +55,8 @@ class Body {
} else if(bodyAsList) {
bodyAsList.collect { it.clientValue }
}
return body.collectEntries {
Map.Entry<String, DslProperty> entry -> [(entry.key) : entry.value.clientValue]
return body.collectEntries { Map.Entry<String, DslProperty> entry ->
[(entry.key) : entry.value.clientValue]
} as Map<String, Object>
}
@@ -66,8 +66,8 @@ class Body {
} else if(bodyAsList) {
bodyAsList.collect { it.serverValue }
}
return body.collectEntries {
Map.Entry<String, DslProperty> entry -> [(entry.key) : entry.value.serverValue]
return body.collectEntries { Map.Entry<String, DslProperty> entry ->
[(entry.key) : entry.value.serverValue]
} as Map<String, Object>
}
}

View File

@@ -3,15 +3,18 @@ package io.codearte.accurest.plugin
import io.coderate.accurest.AccurestException
import io.coderate.accurest.TestGenerator
import io.coderate.accurest.config.AccurestConfigProperties
import org.gradle.api.GradleException
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.api.Task
/**
* @author Jakub Kubrynski
*/
class AccurestGradlePlugin implements Plugin<Project> {
private static final String TASK_NAME = 'generateAccurest'
private static final String GENERATE_SERVER_TESTS_TASK_NAME = 'generateAccurest'
private static final String DSL_TO_WIREMOCK_CLIENT_TASK_NAME = 'generateWiremockClientStubs'
private static final Class IDEA_PLUGIN_CLASS = org.gradle.plugins.ide.idea.IdeaPlugin
@@ -19,9 +22,25 @@ class AccurestGradlePlugin implements Plugin<Project> {
void apply(Project project) {
AccurestConfigProperties extension = project.extensions.create('accurest', AccurestConfigProperties)
project.compileTestGroovy.dependsOn(TASK_NAME)
project.compileTestGroovy.dependsOn(GENERATE_SERVER_TESTS_TASK_NAME)
project.task(TASK_NAME) << {
createGenerateTestsTask(project, extension)
createAndConfigureGenerateWiremockClientStubsFromDslTask(project, extension)
project.afterEvaluate {
def hasIdea = project.plugins.findPlugin(IDEA_PLUGIN_CLASS)
if (hasIdea) {
project.idea {
module {
testSourceDirs += project.file(buildGeneratedSourcesDir(project, extension))
}
}
}
}
}
private Task createGenerateTestsTask(Project project, AccurestConfigProperties extension) {
project.task(GENERATE_SERVER_TESTS_TASK_NAME) << {
project.logger.info("Accurest Plugin: Invoking test sources generation")
extension.stubsBaseDirectory = project.projectDir.path + File.separator + extension.stubsBaseDirectory
@@ -38,21 +57,18 @@ class AccurestGradlePlugin implements Plugin<Project> {
int generatedClasses = generator.generate()
project.logger.info("Generated {} test classes", generatedClasses)
} catch (AccurestException e) {
project.logger.error("Accurest Plugin exception: {}", e.getMessage())
throw new GradleException("Accurest Plugin exception: ${e.message}", e)
}
}
}
project.afterEvaluate {
def hasIdea = project.plugins.findPlugin(IDEA_PLUGIN_CLASS)
if (hasIdea) {
project.idea {
module {
testSourceDirs += new File(buildGeneratedSourcesDir(project, extension))
}
}
}
private void createAndConfigureGenerateWiremockClientStubsFromDslTask(Project project, AccurestConfigProperties extension) {
Task task = project.tasks.create(DSL_TO_WIREMOCK_CLIENT_TASK_NAME, GenerateWiremockClientStubsFromDslTask)
task.description = "Generate"
task.conventionMapping.with {
groovyDslDir = { extension.groovyDslDir }
generatedWiremockClientStubsDir = { extension.generatedWiremockClientStubsDir }
}
}
private String buildGeneratedSourcesDir(Project project, def extension) {
@@ -64,5 +80,4 @@ class AccurestGradlePlugin implements Plugin<Project> {
}
moduleDir
}
}

View File

@@ -0,0 +1,24 @@
package io.codearte.accurest.plugin
import io.codearte.accurest.wiremock.DslToWiremockClientConverter
import io.codearte.accurest.wiremock.RecursiveFilesConverter
import org.gradle.api.DefaultTask
import org.gradle.api.tasks.InputDirectory
import org.gradle.api.tasks.TaskAction
//TODO: Implement as an incremental task: https://gradle.org/docs/current/userguide/custom_tasks.html#incremental_tasks ?
class GenerateWiremockClientStubsFromDslTask extends DefaultTask {
@InputDirectory File groovyDslDir
@InputDirectory File generatedWiremockClientStubsDir
@TaskAction
void generate() {
project.logger.info("Accurest Plugin: Invoking GroovyDSL to Wiremock client stubs conversion")
project.logger.debug("From '${getGroovyDslDir()}' to '${getGeneratedWiremockClientStubsDir()}'")
RecursiveFilesConverter converter = new RecursiveFilesConverter(new DslToWiremockClientConverter(), getGroovyDslDir(),
getGeneratedWiremockClientStubsDir())
converter.processFiles()
}
}

View File

@@ -1,5 +1,5 @@
ext {
projectVersion = '0.3.0-SNAPSHOT'
projectVersion = '0.3.1-SNAPSHOT'
projectGroup = 'io.codearte.accurest'
}
@@ -65,6 +65,7 @@ project(':accurest-converters') {
project(':accurest-gradle-plugin') {
dependencies {
compile project(':accurest-core')
compile project(':accurest-converters')
compile gradleApi()
}
}