[#22] Add generateWiremockClientStubs task
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,4 +14,6 @@ class AccurestConfigProperties {
|
||||
String generatedTestSourcesDir = 'build/generated-sources/accurest'
|
||||
String[] imports = []
|
||||
String[] staticImports = []
|
||||
File groovyDslDir
|
||||
File generatedWiremockClientStubsDir
|
||||
}
|
||||
|
||||
@@ -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()]))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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>
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
}
|
||||
@@ -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()
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user