diff --git a/accurest-core/src/main/groovy/io/codearte/accurest/builder/SpockMethodBodyBuilder.groovy b/accurest-core/src/main/groovy/io/codearte/accurest/builder/SpockMethodBodyBuilder.groovy index d42350386b..e3c0b1388b 100644 --- a/accurest-core/src/main/groovy/io/codearte/accurest/builder/SpockMethodBodyBuilder.groovy +++ b/accurest-core/src/main/groovy/io/codearte/accurest/builder/SpockMethodBodyBuilder.groovy @@ -3,173 +3,182 @@ package io.codearte.accurest.builder import groovy.json.JsonOutput import groovy.transform.PackageScope import io.codearte.accurest.dsl.GroovyDsl -import io.codearte.accurest.dsl.internal.* +import io.codearte.accurest.dsl.internal.DslProperty +import io.codearte.accurest.dsl.internal.ExecutionProperty +import io.codearte.accurest.dsl.internal.Header +import io.codearte.accurest.dsl.internal.MatchingStrategy +import io.codearte.accurest.dsl.internal.QueryParameter +import io.codearte.accurest.dsl.internal.Request +import io.codearte.accurest.dsl.internal.Response +import io.codearte.accurest.dsl.internal.UrlPath import io.codearte.accurest.util.ContentType import io.codearte.accurest.util.JsonConverter import java.util.regex.Pattern -import static io.codearte.accurest.util.ContentUtils.* +import static io.codearte.accurest.util.ContentUtils.extractValue +import static io.codearte.accurest.util.ContentUtils.recognizeContentTypeFromContent +import static io.codearte.accurest.util.ContentUtils.recognizeContentTypeFromHeader /** * @author Jakub Kubrynski */ @PackageScope class SpockMethodBodyBuilder { - private final GroovyDsl stubDefinition + private final GroovyDsl stubDefinition - SpockMethodBodyBuilder(GroovyDsl stubDefinition) { - this.stubDefinition = stubDefinition - } + SpockMethodBodyBuilder(GroovyDsl stubDefinition) { + this.stubDefinition = stubDefinition + } - void appendTo(BlockBuilder blockBuilder) { - Request request = stubDefinition.request - Response response = stubDefinition.response - blockBuilder.with { - startBlock() - addLine('given:').startBlock() - addLine('def request = given()') - indent() - request.headers?.collect { Header header -> - addLine(".header('${header.name}', '${header.serverValue}')") - } - if (request.body) { - Object bodyValue = extractServerValueFromBody(request.body.serverValue) - String matches = trimRepeatedQuotes(new JsonOutput().toJson(bodyValue)) - addLine(".body('$matches')") - } + void appendTo(BlockBuilder blockBuilder) { + Request request = stubDefinition.request + Response response = stubDefinition.response + blockBuilder.with { + startBlock() + addLine('given:').startBlock() + addLine('def request = given()') + indent() + request.headers?.collect { Header header -> + addLine(".header('${header.name}', '${header.serverValue}')") + } + if (request.body) { + Object bodyValue = extractServerValueFromBody(request.body.serverValue) + String matches = trimRepeatedQuotes(new JsonOutput().toJson(bodyValue)) + addLine(".body('$matches')") + } - unindent().endBlock().addEmptyLine() + unindent().endBlock().addEmptyLine() - addLine('when:').startBlock() - addLine('def response = given().spec(request)') - indent() + addLine('when:').startBlock() + addLine('def response = given().spec(request)') + indent() - String url = buildUrl(request) - String method = request.method.serverValue.toLowerCase() + String url = buildUrl(request) + String method = request.method.serverValue.toLowerCase() - blockBuilder.addLine(/.${method}("$url")/) - unindent().endBlock().addEmptyLine() + blockBuilder.addLine(/.${method}("$url")/) + unindent().endBlock().addEmptyLine() - addLine('then:').startBlock() - addLine("response.statusCode == $response.status.serverValue") + addLine('then:').startBlock() + addLine("response.statusCode == $response.status.serverValue") - response.headers?.collect { Header header -> - addLine("response.header('$header.name') == '$header.serverValue'") - } - if (response.body) { - endBlock() - addLine('and:').startBlock() - def responseBody = response.body.serverValue - ContentType contentType = recognizeContentTypeFromHeader(response.headers) - if (contentType == ContentType.UNKNOWN) { - contentType = recognizeContentTypeFromContent(responseBody) - } - if (responseBody instanceof GString) { - responseBody = extractValue(responseBody, contentType, { DslProperty dslProperty -> dslProperty.serverValue }) - } - if (contentType == ContentType.JSON) { - addLine('def responseBody = new JsonSlurper().parseText(response.body.asString())') - if (responseBody instanceof List) { - processArrayElements(responseBody, "", blockBuilder) - } else { - processMapElement(responseBody, blockBuilder, "") - } - } else if (contentType == ContentType.XML) { - addLine('def responseBody = new XmlSlurper().parseText(response.body.asString())') - // TODO xml validation - } - } - endBlock() + response.headers?.collect { Header header -> + addLine("response.header('$header.name') == '$header.serverValue'") + } + if (response.body) { + endBlock() + addLine('and:').startBlock() + def responseBody = response.body.serverValue + ContentType contentType = recognizeContentTypeFromHeader(response.headers) + if (contentType == ContentType.UNKNOWN) { + contentType = recognizeContentTypeFromContent(responseBody) + } + if (responseBody instanceof GString) { + responseBody = extractValue(responseBody, contentType, { DslProperty dslProperty -> dslProperty.serverValue }) + } + if (contentType == ContentType.JSON) { + addLine('def responseBody = new JsonSlurper().parseText(response.body.asString())') + if (responseBody instanceof List) { + processArrayElements(responseBody, "", blockBuilder) + } else { + processMapElement(responseBody, blockBuilder, "") + } + } else if (contentType == ContentType.XML) { + addLine('def responseBody = new XmlSlurper().parseText(response.body.asString())') + // TODO xml validation + } + } + endBlock() - endBlock() - } - } + endBlock() + } + } - static String trimRepeatedQuotes(String toTrim) { - if (toTrim.startsWith('"')) { - return toTrim.replaceAll('"', '') - } - return toTrim - } + static String trimRepeatedQuotes(String toTrim) { + if (toTrim.startsWith('"')) { + return toTrim.replaceAll('"', '') + } + return toTrim + } - private Object extractServerValueFromBody(bodyValue) { - if (bodyValue instanceof GString) { - bodyValue = extractValue(bodyValue, { DslProperty dslProperty -> dslProperty.serverValue }) - } else { - bodyValue = JsonConverter.transformValues(bodyValue, { it instanceof DslProperty ? it.serverValue : it }) - } - return bodyValue - } + private Object extractServerValueFromBody(bodyValue) { + if (bodyValue instanceof GString) { + bodyValue = extractValue(bodyValue, { DslProperty dslProperty -> dslProperty.serverValue }) + } else { + bodyValue = JsonConverter.transformValues(bodyValue, { it instanceof DslProperty ? it.serverValue : it }) + } + return bodyValue + } - private String buildUrl(Request request) { - if (request.url) - return request.url.serverValue; - if (request.urlPath) - return buildUrlFromUrlPath(request.urlPath) - throw new IllegalStateException("URL is not set!") - } + private String buildUrl(Request request) { + if (request.url) + return request.url.serverValue; + if (request.urlPath) + return buildUrlFromUrlPath(request.urlPath) + throw new IllegalStateException("URL is not set!") + } - private String buildUrlFromUrlPath(UrlPath urlPath) { - String params = urlPath.queryParameters.parameters.inject([]) { result, param -> - result << "${param.name}=${URLEncoder.encode(resolveParamValue(param).toString(), "UTF8")}" - }.join('&') - return "$urlPath.serverValue?$params" - } + private String buildUrlFromUrlPath(UrlPath urlPath) { + String params = urlPath.queryParameters.parameters.inject([]) { result, param -> + result << "${param.name}=${URLEncoder.encode(resolveParamValue(param).toString(), "UTF8")}" + }.join('&') + return "$urlPath.serverValue?$params" + } - private String resolveParamValue(QueryParameter param) { - resolveParamValue(param.serverValue) - } + private String resolveParamValue(QueryParameter param) { + resolveParamValue(param.serverValue) + } - private String resolveParamValue(Object value) { - value.toString() - } + private String resolveParamValue(Object value) { + value.toString() + } - private String resolveParamValue(MatchingStrategy matchingStrategy) { - matchingStrategy.serverValue.toString() - } + private String resolveParamValue(MatchingStrategy matchingStrategy) { + matchingStrategy.serverValue.toString() + } - private void processBodyElement(BlockBuilder blockBuilder, String property, def value) { - if (value instanceof String) { - if (value.startsWith('$')) { - value = value.substring(1).replaceAll('\\$value', "responseBody$property") - blockBuilder.addLine(value) - } else { - blockBuilder.addLine("responseBody$property == \"${value}\"") - } - } else if (value instanceof Map) { - processMapElement(value, blockBuilder, property) - } else if (value instanceof Map.Entry) { - processEntryElement(blockBuilder, property, value) - } else if (value instanceof List) { - processArrayElements(value, property, blockBuilder) - } else if (value instanceof Pattern) { - blockBuilder.addLine("responseBody$property ==~ java.util.regex.Pattern.compile('${value}')") - } else if (value instanceof DslProperty) { - processBodyElement(blockBuilder, property, value.serverValue) - } else if (value instanceof ExecutionProperty) { - ExecutionProperty exec = (ExecutionProperty) value - blockBuilder.addLine("${exec.insertValue("responseBody$property")}") - } else { - blockBuilder.addLine("responseBody$property == ${value}") - } - } + private void processBodyElement(BlockBuilder blockBuilder, String property, def value) { + if (value instanceof String) { + if (value.startsWith('$')) { + value = value.substring(1).replaceAll('\\$value', "responseBody$property") + blockBuilder.addLine(value) + } else { + blockBuilder.addLine("responseBody$property == \"${value}\"") + } + } else if (value instanceof Map) { + processMapElement(value, blockBuilder, property) + } else if (value instanceof Map.Entry) { + processEntryElement(blockBuilder, property, value) + } else if (value instanceof List) { + processArrayElements(value, property, blockBuilder) + } else if (value instanceof Pattern) { + blockBuilder.addLine("responseBody$property ==~ java.util.regex.Pattern.compile('${value}')") + } else if (value instanceof DslProperty) { + processBodyElement(blockBuilder, property, value.serverValue) + } else if (value instanceof ExecutionProperty) { + ExecutionProperty exec = (ExecutionProperty) value + blockBuilder.addLine("${exec.insertValue("responseBody$property")}") + } else { + blockBuilder.addLine("responseBody$property == ${value}") + } + } - private void processMapElement(def value, BlockBuilder blockBuilder, String property) { - value.each { entry -> processEntryElement(blockBuilder, property, entry) } - } + private void processMapElement(def value, BlockBuilder blockBuilder, String property) { + value.each { entry -> processEntryElement(blockBuilder, property, entry) } + } - private def processEntryElement(BlockBuilder blockBuilder, String property, def entry) { - return processBodyElement(blockBuilder, property + "." + entry.key, entry.value) - } + private def processEntryElement(BlockBuilder blockBuilder, String property, def entry) { + return processBodyElement(blockBuilder, property + "." + entry.key, entry.value) + } - private void processArrayElements(List responseBody, String property, BlockBuilder blockBuilder) { - responseBody.eachWithIndex { - listElement, listIndex -> - listElement.each { entry -> - String prop = "$property[$listIndex]" ?: '' - processBodyElement(blockBuilder, prop, entry) - } - } - } + private void processArrayElements(List responseBody, String property, BlockBuilder blockBuilder) { + responseBody.eachWithIndex { + listElement, listIndex -> + listElement.each { entry -> + String prop = "$property[$listIndex]" ?: '' + processBodyElement(blockBuilder, prop, entry) + } + } + } } diff --git a/accurest-core/src/test/groovy/io/codearte/accurest/builder/SpockMethodBuilderSpec.groovy b/accurest-core/src/test/groovy/io/codearte/accurest/builder/SpockMethodBuilderSpec.groovy index 35135dff7b..e9301d0c70 100644 --- a/accurest-core/src/test/groovy/io/codearte/accurest/builder/SpockMethodBuilderSpec.groovy +++ b/accurest-core/src/test/groovy/io/codearte/accurest/builder/SpockMethodBuilderSpec.groovy @@ -9,279 +9,279 @@ import spock.lang.Specification */ class SpockMethodBuilderSpec extends Specification { - def "should generate assertions for simple response body"() { - given: - GroovyDsl contractDsl = GroovyDsl.make { - request { - method "GET" - url "test" - } - response { - status 200 - body """{ + def "should generate assertions for simple response body"() { + given: + GroovyDsl contractDsl = GroovyDsl.make { + request { + method "GET" + url "test" + } + response { + status 200 + body """{ "property1": "a", "property2": "b" }""" - } - } - SpockMethodBodyBuilder builder = new SpockMethodBodyBuilder(contractDsl) - BlockBuilder blockBuilder = new BlockBuilder(" ") - when: - builder.appendTo(blockBuilder) - then: - blockBuilder.toString().contains("responseBody.property1 == \"a\"") - blockBuilder.toString().contains("responseBody.property2 == \"b\"") - } + } + } + SpockMethodBodyBuilder builder = new SpockMethodBodyBuilder(contractDsl) + BlockBuilder blockBuilder = new BlockBuilder(" ") + when: + builder.appendTo(blockBuilder) + then: + blockBuilder.toString().contains("responseBody.property1 == \"a\"") + blockBuilder.toString().contains("responseBody.property2 == \"b\"") + } - @Issue("#79") - def "should generate assertions for simple response body constructed from map with a list"() { - given: - GroovyDsl contractDsl = GroovyDsl.make { - request { - method "GET" - url "test" - } - response { - status 200 - body( - property1: 'a', - property2: [ - [a: 'sth'], - [b: 'sthElse'] - ] - ) - } - } - SpockMethodBodyBuilder builder = new SpockMethodBodyBuilder(contractDsl) - BlockBuilder blockBuilder = new BlockBuilder(" ") - when: - builder.appendTo(blockBuilder) - then: - blockBuilder.toString().contains("responseBody.property1 == \"a\"") - blockBuilder.toString().contains("responseBody.property2[0].a == \"sth\"") - blockBuilder.toString().contains("responseBody.property2[1].b == \"sthElse\"") - } + @Issue("#79") + def "should generate assertions for simple response body constructed from map with a list"() { + given: + GroovyDsl contractDsl = GroovyDsl.make { + request { + method "GET" + url "test" + } + response { + status 200 + body( + property1: 'a', + property2: [ + [a: 'sth'], + [b: 'sthElse'] + ] + ) + } + } + SpockMethodBodyBuilder builder = new SpockMethodBodyBuilder(contractDsl) + BlockBuilder blockBuilder = new BlockBuilder(" ") + when: + builder.appendTo(blockBuilder) + then: + blockBuilder.toString().contains("responseBody.property1 == \"a\"") + blockBuilder.toString().contains("responseBody.property2[0].a == \"sth\"") + blockBuilder.toString().contains("responseBody.property2[1].b == \"sthElse\"") + } - @Issue("#82") - def "should generate proper request when body constructed from map with a list"() { - given: - GroovyDsl contractDsl = GroovyDsl.make { - request { - method "GET" - url "test" - body( - items: ['HOP'] - ) - } - response { - status 200 - } - } - SpockMethodBodyBuilder builder = new SpockMethodBodyBuilder(contractDsl) - BlockBuilder blockBuilder = new BlockBuilder(" ") - when: - builder.appendTo(blockBuilder) - then: - blockBuilder.toString().contains(".body('{\"items\":[\"HOP\"]}')") - } + @Issue("#82") + def "should generate proper request when body constructed from map with a list"() { + given: + GroovyDsl contractDsl = GroovyDsl.make { + request { + method "GET" + url "test" + body( + items: ['HOP'] + ) + } + response { + status 200 + } + } + SpockMethodBodyBuilder builder = new SpockMethodBodyBuilder(contractDsl) + BlockBuilder blockBuilder = new BlockBuilder(" ") + when: + builder.appendTo(blockBuilder) + then: + blockBuilder.toString().contains(".body('{\"items\":[\"HOP\"]}')") + } - @Issue("#88") - def "should generate proper request when body constructed from GString"() { - given: - GroovyDsl contractDsl = GroovyDsl.make { - request { - method "GET" - url "test" - body( - "property1=VAL1" - ) - } - response { - status 200 - } - } - SpockMethodBodyBuilder builder = new SpockMethodBodyBuilder(contractDsl) - BlockBuilder blockBuilder = new BlockBuilder(" ") - when: - builder.appendTo(blockBuilder) - then: - blockBuilder.toString().contains(".body('property1=VAL1')") - } + @Issue("#88") + def "should generate proper request when body constructed from GString"() { + given: + GroovyDsl contractDsl = GroovyDsl.make { + request { + method "GET" + url "test" + body( + "property1=VAL1" + ) + } + response { + status 200 + } + } + SpockMethodBodyBuilder builder = new SpockMethodBodyBuilder(contractDsl) + BlockBuilder blockBuilder = new BlockBuilder(" ") + when: + builder.appendTo(blockBuilder) + then: + blockBuilder.toString().contains(".body('property1=VAL1')") + } - def "should generate assertions for array in response body"() { - given: - GroovyDsl contractDsl = GroovyDsl.make { - request { - method "GET" - url "test" - } - response { - status 200 - body """[ + def "should generate assertions for array in response body"() { + given: + GroovyDsl contractDsl = GroovyDsl.make { + request { + method "GET" + url "test" + } + response { + status 200 + body """[ { "property1": "a" }, { "property2": "b" }]""" - } - } - SpockMethodBodyBuilder builder = new SpockMethodBodyBuilder(contractDsl) - BlockBuilder blockBuilder = new BlockBuilder(" ") - when: - builder.appendTo(blockBuilder) - then: - blockBuilder.toString().contains("responseBody[0].property1 == \"a\"") - blockBuilder.toString().contains("responseBody[1].property2 == \"b\"") - } + } + } + SpockMethodBodyBuilder builder = new SpockMethodBodyBuilder(contractDsl) + BlockBuilder blockBuilder = new BlockBuilder(" ") + when: + builder.appendTo(blockBuilder) + then: + blockBuilder.toString().contains("responseBody[0].property1 == \"a\"") + blockBuilder.toString().contains("responseBody[1].property2 == \"b\"") + } - def "should generate assertions for array inside response body element"() { - given: - GroovyDsl contractDsl = GroovyDsl.make { - request { - method "GET" - url "test" - } - response { - status 200 - body """{ + def "should generate assertions for array inside response body element"() { + given: + GroovyDsl contractDsl = GroovyDsl.make { + request { + method "GET" + url "test" + } + response { + status 200 + body """{ "property1": [ { "property2": "test1"}, { "property3": "test2"} ] }""" - } - } - SpockMethodBodyBuilder builder = new SpockMethodBodyBuilder(contractDsl) - BlockBuilder blockBuilder = new BlockBuilder(" ") - when: - builder.appendTo(blockBuilder) - then: - blockBuilder.toString().contains("responseBody.property1[0].property2 == \"test1\"") - blockBuilder.toString().contains("responseBody.property1[1].property3 == \"test2\"") - } + } + } + SpockMethodBodyBuilder builder = new SpockMethodBodyBuilder(contractDsl) + BlockBuilder blockBuilder = new BlockBuilder(" ") + when: + builder.appendTo(blockBuilder) + then: + blockBuilder.toString().contains("responseBody.property1[0].property2 == \"test1\"") + blockBuilder.toString().contains("responseBody.property1[1].property3 == \"test2\"") + } - def "should generate assertions for nested objects in response body"() { - given: - GroovyDsl contractDsl = GroovyDsl.make { - request { - method "GET" - url "test" - } - response { - status 200 - body '''\ + def "should generate assertions for nested objects in response body"() { + given: + GroovyDsl contractDsl = GroovyDsl.make { + request { + method "GET" + url "test" + } + response { + status 200 + body '''\ { "property1": "a", "property2": {"property3": "b"} } ''' - } - } - SpockMethodBodyBuilder builder = new SpockMethodBodyBuilder(contractDsl) - BlockBuilder blockBuilder = new BlockBuilder(" ") - when: - builder.appendTo(blockBuilder) - then: - blockBuilder.toString().contains("responseBody.property1 == \"a\"") - blockBuilder.toString().contains("responseBody.property2.property3 == \"b\"") - } + } + } + SpockMethodBodyBuilder builder = new SpockMethodBodyBuilder(contractDsl) + BlockBuilder blockBuilder = new BlockBuilder(" ") + when: + builder.appendTo(blockBuilder) + then: + blockBuilder.toString().contains("responseBody.property1 == \"a\"") + blockBuilder.toString().contains("responseBody.property2.property3 == \"b\"") + } - def "should generate regex assertions for map objects in response body"() { - given: - GroovyDsl contractDsl = GroovyDsl.make { - request { - method "GET" - url "test" - } - response { - status 200 - body( - property1: "a", - property2: value( - client('123'), - server(regex('[0-9]{3}')) - ) - ) - headers { - header('Content-Type': 'application/json') + def "should generate regex assertions for map objects in response body"() { + given: + GroovyDsl contractDsl = GroovyDsl.make { + request { + method "GET" + url "test" + } + response { + status 200 + body( + property1: "a", + property2: value( + client('123'), + server(regex('[0-9]{3}')) + ) + ) + headers { + header('Content-Type': 'application/json') - } + } - } - } - SpockMethodBodyBuilder builder = new SpockMethodBodyBuilder(contractDsl) - BlockBuilder blockBuilder = new BlockBuilder(" ") - when: - builder.appendTo(blockBuilder) - then: - blockBuilder.toString().contains("responseBody.property1 == \"a\"") - blockBuilder.toString().contains("responseBody.property2 ==~ java.util.regex.Pattern.compile('[0-9]{3}')") - } + } + } + SpockMethodBodyBuilder builder = new SpockMethodBodyBuilder(contractDsl) + BlockBuilder blockBuilder = new BlockBuilder(" ") + when: + builder.appendTo(blockBuilder) + then: + blockBuilder.toString().contains("responseBody.property1 == \"a\"") + blockBuilder.toString().contains("responseBody.property2 ==~ java.util.regex.Pattern.compile('[0-9]{3}')") + } - def "should generate regex assertions for string objects in response body"() { - given: - GroovyDsl contractDsl = GroovyDsl.make { - request { - method "GET" - url "test" - } - response { - status 200 - body("""{"property1":"a","property2":"${value(client('123'), server(regex('[0-9]{3}')))}"}""") - headers { - header('Content-Type': 'application/json') + def "should generate regex assertions for string objects in response body"() { + given: + GroovyDsl contractDsl = GroovyDsl.make { + request { + method "GET" + url "test" + } + response { + status 200 + body("""{"property1":"a","property2":"${value(client('123'), server(regex('[0-9]{3}')))}"}""") + headers { + header('Content-Type': 'application/json') - } + } - } - } - SpockMethodBodyBuilder builder = new SpockMethodBodyBuilder(contractDsl) - BlockBuilder blockBuilder = new BlockBuilder(" ") - when: - builder.appendTo(blockBuilder) - then: - blockBuilder.toString().contains("responseBody.property1 == \"a\"") - blockBuilder.toString().contains("responseBody.property2 ==~ java.util.regex.Pattern.compile('[0-9]{3}')") - } + } + } + SpockMethodBodyBuilder builder = new SpockMethodBodyBuilder(contractDsl) + BlockBuilder blockBuilder = new BlockBuilder(" ") + when: + builder.appendTo(blockBuilder) + then: + blockBuilder.toString().contains("responseBody.property1 == \"a\"") + blockBuilder.toString().contains("responseBody.property2 ==~ java.util.regex.Pattern.compile('[0-9]{3}')") + } - def "should generate a call with an url path and query parameters"() { - given: - GroovyDsl contractDsl = GroovyDsl.make { - request { - method 'GET' - urlPath('/users') { - queryParameters { - parameter 'limit': $(client(equalTo("20")), server(equalTo("10"))) - parameter 'offset': $(client(containing("20")), server(equalTo("20"))) - parameter 'filter': "email" - parameter 'sort': equalTo("name") - parameter 'search': $(client(notMatching(~/^\/[0-9]{2}$/)), server("55")) - parameter 'age': $(client(notMatching("^\\w*\$")), server("99")) - parameter 'name': $(client(matching("Denis.*")), server("Denis.Stepanov")) - } - } - } - response { - status 200 - body """ + def "should generate a call with an url path and query parameters"() { + given: + GroovyDsl contractDsl = GroovyDsl.make { + request { + method 'GET' + urlPath('/users') { + queryParameters { + parameter 'limit': $(client(equalTo("20")), server(equalTo("10"))) + parameter 'offset': $(client(containing("20")), server(equalTo("20"))) + parameter 'filter': "email" + parameter 'sort': equalTo("name") + parameter 'search': $(client(notMatching(~/^\/[0-9]{2}$/)), server("55")) + parameter 'age': $(client(notMatching("^\\w*\$")), server("99")) + parameter 'name': $(client(matching("Denis.*")), server("Denis.Stepanov")) + } + } + } + response { + status 200 + body """ { "property1": "a", "property2": "b" } """ - } - } - SpockMethodBodyBuilder builder = new SpockMethodBodyBuilder(contractDsl) - BlockBuilder blockBuilder = new BlockBuilder(" ") - when: - builder.appendTo(blockBuilder) - def spockTest = blockBuilder.toString() - then: - spockTest.contains('get("/users?limit=10&offset=20&filter=email&sort=name&search=55&age=99&name=Denis.Stepanov")') - spockTest.contains('responseBody.property1 == "a"') - spockTest.contains('responseBody.property2 == "b"') - } + } + } + SpockMethodBodyBuilder builder = new SpockMethodBodyBuilder(contractDsl) + BlockBuilder blockBuilder = new BlockBuilder(" ") + when: + builder.appendTo(blockBuilder) + def spockTest = blockBuilder.toString() + then: + spockTest.contains('get("/users?limit=10&offset=20&filter=email&sort=name&search=55&age=99&name=Denis.Stepanov")') + spockTest.contains('responseBody.property1 == "a"') + spockTest.contains('responseBody.property2 == "b"') + } }