io.coderate.accurest.builder.SpockMethodBodyBuilder.groovy Maven / Gradle / Ivy
package io.coderate.accurest.builder
import groovy.json.JsonOutput
import groovy.transform.PackageScope
/**
* @author Jakub Kubrynski
*/
@PackageScope
class SpockMethodBodyBuilder {
private final Map stubDefinition
SpockMethodBodyBuilder(Map stubDefinition) {
this.stubDefinition = stubDefinition
}
void appendTo(BlockBuilder blockBuilder) {
blockBuilder.startBlock()
blockBuilder.addLine('given:').startBlock()
blockBuilder.addLine('def request = given()')
blockBuilder.indent()
stubDefinition.request.headers.each {
blockBuilder.addLine(".header('$it.key', '$it.value.equalTo')")
}
if (stubDefinition.request.bodyPatterns) {
blockBuilder.addLine(".body('${JsonOutput.toJson(stubDefinition.request.bodyPatterns[0].matches)}')")
}
blockBuilder.unindent().endBlock().addEmptyLine()
blockBuilder.addLine('when:').startBlock()
blockBuilder.addLine('def response = given().spec(request)')
blockBuilder.indent()
blockBuilder.addLine(".${stubDefinition.request.method.toLowerCase()}(\"$stubDefinition.request.url\")")
blockBuilder.unindent().endBlock().addEmptyLine()
blockBuilder.addLine('then:').startBlock()
blockBuilder.addLine("response.statusCode == $stubDefinition.response.status")
stubDefinition.response.headers.each {
blockBuilder.addLine("response.header('$it.key') == '$it.value'")
}
if (stubDefinition.response.body) {
blockBuilder.addLine('def responseBody = new JsonSlurper().parseText(response.body.asString())')
stubDefinition.response.body.each {
def value = it.value
if (value instanceof String) {
if (value.startsWith('$')) {
value = value.substring(1).replaceAll('\\$it', "responseBody.$it.key")
blockBuilder.addLine(value)
} else {
blockBuilder.addLine("responseBody.$it.key == \"$value\"")
}
} else {
blockBuilder.addLine("responseBody.$it == $value")
}
}
}
blockBuilder.endBlock()
blockBuilder.endBlock()
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy