From 97f03964bc36c9dd7e2f48cb2e3d5de978bd5bc6 Mon Sep 17 00:00:00 2001 From: Olga Maciaszek-Sharma Date: Wed, 17 Feb 2016 13:48:31 +0100 Subject: [PATCH 01/22] Fixed class imports for JUnit. Added test for class imports and annotations. --- .../accurest/SingleTestGenerator.groovy | 2 - .../accurest/config/TestFramework.groovy | 14 ++-- .../accurest/SingleTestGeneratorSpec.groovy | 67 +++++++++++++++++++ 3 files changed, 74 insertions(+), 9 deletions(-) create mode 100644 accurest-core/src/test/groovy/io/codearte/accurest/SingleTestGeneratorSpec.groovy diff --git a/accurest-core/src/main/groovy/io/codearte/accurest/SingleTestGenerator.groovy b/accurest-core/src/main/groovy/io/codearte/accurest/SingleTestGenerator.groovy index bca38a0b1b..309173138f 100644 --- a/accurest-core/src/main/groovy/io/codearte/accurest/SingleTestGenerator.groovy +++ b/accurest-core/src/main/groovy/io/codearte/accurest/SingleTestGenerator.groovy @@ -59,8 +59,6 @@ class SingleTestGenerator { if (configProperties.targetFramework == TestFramework.JUNIT) { clazz.addImport('org.junit.Test') - } else { - clazz.addImport('groovy.json.JsonSlurper') } if (configProperties.ruleClassForTests) { diff --git a/accurest-core/src/main/groovy/io/codearte/accurest/config/TestFramework.groovy b/accurest-core/src/main/groovy/io/codearte/accurest/config/TestFramework.groovy index c1014f19de..42d420ee7b 100644 --- a/accurest-core/src/main/groovy/io/codearte/accurest/config/TestFramework.groovy +++ b/accurest-core/src/main/groovy/io/codearte/accurest/config/TestFramework.groovy @@ -4,8 +4,8 @@ package io.codearte.accurest.config * @author Jakub Kubrynski */ enum TestFramework { - JUNIT("public ", "public void ", ";", ".java", "Test", "org.junit.Ignore", "org.junit.FixMethodOrder", "@FixMethodOrder(MethodSorters.NAME_ASCENDING)"), - SPOCK("", "def ", "", ".groovy", "Spec", "spock.lang.Ignore", "spock.lang.Stepwise", "@Stepwise") + JUNIT("public ", "public void ", ";", ".java", "Test", "org.junit.Ignore", ["org.junit.FixMethodOrder", "org.junit.runners.MethodSorters"], "@FixMethodOrder(MethodSorters.NAME_ASCENDING)"), + SPOCK("", "def ", "", ".groovy", "Spec", "spock.lang.Ignore", ["spock.lang.Stepwise"], "@Stepwise") private final String classModifier private final String methodModifier @@ -13,18 +13,18 @@ enum TestFramework { private final String classExtension; private final String classNameSuffix; private final String ignoreClass - private final String orderAnnotationImport + private final List orderAnnotationImports private final String orderAnnotation TestFramework(String classModifier, String methodModifier, String lineSuffix, String classExtension, String classNameSuffix, - String ignoreClass, String orderAnnotationImport, String orderAnnotation) { + String ignoreClass, List orderAnnotationImports, String orderAnnotation) { this.classModifier = classModifier this.lineSuffix = lineSuffix this.methodModifier = methodModifier this.classExtension = classExtension this.classNameSuffix = classNameSuffix this.ignoreClass = ignoreClass - this.orderAnnotationImport = orderAnnotationImport + this.orderAnnotationImports = orderAnnotationImports this.orderAnnotation = orderAnnotation } @@ -52,8 +52,8 @@ enum TestFramework { return ignoreClass } - String getOrderAnnotationImport() { - return orderAnnotationImport + List getOrderAnnotationImport() { + return orderAnnotationImports } String getOrderAnnotation() { diff --git a/accurest-core/src/test/groovy/io/codearte/accurest/SingleTestGeneratorSpec.groovy b/accurest-core/src/test/groovy/io/codearte/accurest/SingleTestGeneratorSpec.groovy new file mode 100644 index 0000000000..fbfa267ec4 --- /dev/null +++ b/accurest-core/src/test/groovy/io/codearte/accurest/SingleTestGeneratorSpec.groovy @@ -0,0 +1,67 @@ +package io.codearte.accurest + +import io.codearte.accurest.config.AccurestConfigProperties +import io.codearte.accurest.file.Contract +import org.junit.Rule +import org.junit.rules.TemporaryFolder +import spock.lang.Specification +import spock.lang.Unroll + +import static io.codearte.accurest.config.TestFramework.JUNIT +import static io.codearte.accurest.config.TestFramework.SPOCK + +class SingleTestGeneratorSpec extends Specification { + + @Rule + TemporaryFolder tmpFolder = new TemporaryFolder() + File file + + static List jUnitClassStrings = ['package test;', 'import com.jayway.jsonpath.DocumentContext;', 'import com.jayway.jsonpath.JsonPath;', + 'import org.junit.FixMethodOrder;', 'import org.junit.Ignore;', 'import org.junit.Test;', 'import org.junit.runners.MethodSorters;', + 'import static com.blogspot.toomuchcoding.jsonassert.JsonAssertion.assertThat;', 'import static com.jayway.restassured.module.mockmvc.RestAssuredMockMvc.*;', + '@FixMethodOrder(MethodSorters.NAME_ASCENDING)', '@Test', '@Ignore'] + + static List spockClassStrings = ['package test', 'import com.jayway.jsonpath.DocumentContext', 'import com.jayway.jsonpath.JsonPath', + 'import spock.lang.Ignore', 'import spock.lang.Specification', 'import spock.lang.Stepwise', + 'import static com.blogspot.toomuchcoding.jsonassert.JsonAssertion.assertThat', 'import static com.jayway.restassured.module.mockmvc.RestAssuredMockMvc.*', + '@Stepwise', '@Ignore'] + + def setup() { + file = tmpFolder.newFile() + file.write(""" + io.codearte.accurest.dsl.GroovyDsl.make { + request { + method 'PUT' + url 'url' + } + response { + status 200 + } + } +""") + } + + @Unroll + def "should build test class for #testFramework"() { + given: + AccurestConfigProperties properties = new AccurestConfigProperties(); + properties.targetFramework = testFramework + Contract contract = new Contract(file.toPath(), true, 1, 2) + contract.ignored >> true + contract.order >> 2 + SingleTestGenerator testGenerator = new SingleTestGenerator(properties) + + when: + String clazz = testGenerator.buildClass([contract], "test", "test") + + then: + classStrings.forEach({ clazz.contains(it) }) + + where: + testFramework | classStrings + JUNIT | jUnitClassStrings + SPOCK | spockClassStrings + } + + +} From 661c0dcbd72ba3acc34133e2409e4f3f452ed148 Mon Sep 17 00:00:00 2001 From: Olga Maciaszek-Sharma Date: Wed, 17 Feb 2016 22:26:54 +0100 Subject: [PATCH 02/22] Started splitting test methods generation implementation into separate cases for Spock and JUnit. --- .../builder/JUnitMethodBodyBuilder.groovy | 67 +++++- .../accurest/builder/MethodBodyBuilder.groovy | 225 ++++++++++++++++++ .../MockMvcJUnitMethodBodyBuilder.groovy | 37 +++ .../builder/SpockMethodBodyBuilder.groovy | 210 +++------------- 4 files changed, 349 insertions(+), 190 deletions(-) create mode 100644 accurest-core/src/main/groovy/io/codearte/accurest/builder/MethodBodyBuilder.groovy create mode 100644 accurest-core/src/main/groovy/io/codearte/accurest/builder/MockMvcJUnitMethodBodyBuilder.groovy diff --git a/accurest-core/src/main/groovy/io/codearte/accurest/builder/JUnitMethodBodyBuilder.groovy b/accurest-core/src/main/groovy/io/codearte/accurest/builder/JUnitMethodBodyBuilder.groovy index 0f31ff8eb8..1b4e08b449 100644 --- a/accurest-core/src/main/groovy/io/codearte/accurest/builder/JUnitMethodBodyBuilder.groovy +++ b/accurest-core/src/main/groovy/io/codearte/accurest/builder/JUnitMethodBodyBuilder.groovy @@ -1,18 +1,65 @@ package io.codearte.accurest.builder +import groovy.json.StringEscapeUtils +import groovy.transform.PackageScope +import groovy.transform.TypeChecked +import io.codearte.accurest.dsl.GroovyDsl +import io.codearte.accurest.dsl.internal.ExecutionProperty + /** * @author Jakub Kubrynski + * @author Olga Maciaszek-Sharma */ -class JUnitMethodBodyBuilder { -/* - given() - .contentType("application/json") - .header("Accept", "application/json") - .body("{'name': 'MyApp', 'description' : 'awesome app'}".replaceAll("'", "\"")). +@TypeChecked +@PackageScope +abstract class JUnitMethodBodyBuilder extends MethodBodyBuilder { - expect() - .statusCode(200).body("id", is(not(nullValue()))). + JUnitMethodBodyBuilder(GroovyDsl stubDefinition) { + super(stubDefinition) + } - when() - .post(root.toString() + "rest/applications").asString();*/ + @Override + protected void when(BlockBuilder bb) { + + } + + @Override + protected String getResponseAsString() { + return null + } + + @Override + protected String addCommentSignIfRequired(String baseString) { + return "// $baseString" + } + + @Override + protected String addColonIfRequired(String baseString) { + return "$baseString;" + } + + @Override + protected String getResponseBodyPropertyComparisonString(String property, String value) { + return "assertThat(responseBody${property}).isEqualTo(\"${value}\");" + } + + @Override + protected String getMultipartParameterLine(Map.Entry parameter) { + return null //TODO + } + + @Override + protected void processBodyElement(BlockBuilder blockBuilder, String property, ExecutionProperty exec) { + blockBuilder.addLine("${exec.insertValue("parsedJson.read(\"\\\$$property\")")};") + } + + @Override + protected String getPropertyInListString(String property, Integer listIndex) { + return "${property}.get($listIndex)" ?: '' + } + + @Override + protected String convertUnicodeEscapesIfRequired(String json) { + return json // TODO: verify if that's fine or escapeJava required + } } diff --git a/accurest-core/src/main/groovy/io/codearte/accurest/builder/MethodBodyBuilder.groovy b/accurest-core/src/main/groovy/io/codearte/accurest/builder/MethodBodyBuilder.groovy new file mode 100644 index 0000000000..443c6cd579 --- /dev/null +++ b/accurest-core/src/main/groovy/io/codearte/accurest/builder/MethodBodyBuilder.groovy @@ -0,0 +1,225 @@ +package io.codearte.accurest.builder + +import groovy.json.JsonOutput +import groovy.transform.PackageScope +import groovy.transform.TypeChecked +import io.codearte.accurest.dsl.GroovyDsl +import io.codearte.accurest.dsl.internal.DslProperty +import io.codearte.accurest.dsl.internal.ExecutionProperty +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.util.ContentType +import io.codearte.accurest.util.JsonPaths +import io.codearte.accurest.util.JsonToJsonPathsConverter +import io.codearte.accurest.util.MapConverter + +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 Olga Maciaszek-Sharma + * @since 2016-02-17 + */ +@TypeChecked +@PackageScope +abstract class MethodBodyBuilder { + + protected final Request request + protected final Response response + + MethodBodyBuilder(GroovyDsl stubDefinition) { + this.request = stubDefinition.request + this.response = stubDefinition.response + } + + protected abstract void validateResponseCodeBlock(BlockBuilder bb) + + protected abstract void validateResponseHeadersBlock(BlockBuilder bb) + + protected void given(BlockBuilder bb) {} + + protected abstract void when(BlockBuilder bb) + + protected abstract String getResponseAsString() + + protected abstract String addCommentSignIfRequired(String baseString) + + protected abstract String addColonIfRequired(String baseString) + + protected abstract String getResponseBodyPropertyComparisonString(String property, String value) + + protected abstract String getMultipartParameterLine(Map.Entry parameter) + + protected abstract void processBodyElement(BlockBuilder blockBuilder, String property, ExecutionProperty exec) + + protected abstract void processBodyElement(BlockBuilder blockBuilder, String property, Map.Entry entry) + + protected abstract String getPropertyInListString(String property, Integer index) + + protected abstract String convertUnicodeEscapesIfRequired(String json) + + void appendTo(BlockBuilder blockBuilder) { + blockBuilder.startBlock() + + givenBlock(blockBuilder) + whenBlock(blockBuilder) + thenBlock(blockBuilder) + + blockBuilder.endBlock() + } + protected void thenBlock(BlockBuilder bb) { + bb.addLine(addCommentSignIfRequired('then:')) + bb.startBlock() + then(bb) + bb.endBlock() + } + + protected void whenBlock(BlockBuilder bb) { + bb.addLine(addCommentSignIfRequired('when:')) + bb.startBlock() + when(bb) + bb.endBlock().addEmptyLine() + } + + protected void givenBlock(BlockBuilder bb) { + bb.addLine(addCommentSignIfRequired('given:')) + bb.startBlock() + given(bb) + bb.endBlock().addEmptyLine() + } + + + protected void then(BlockBuilder bb) { + validateResponseCodeBlock(bb) + if (response.headers) { + validateResponseHeadersBlock(bb) + } + if (response.body) { + bb.endBlock() + bb.addLine('and:').startBlock() + validateResponseBodyBlock(bb) + } + } + + private void validateResponseBodyBlock(BlockBuilder bb) { + def responseBody = response.body.serverValue + ContentType contentType = getResponseContentType() + if (responseBody instanceof GString) { + responseBody = extractValue(responseBody, contentType, { DslProperty dslProperty -> dslProperty.serverValue }) + } + if (contentType == ContentType.JSON) { + appendJsonPath(bb, responseAsString) + JsonPaths jsonPaths = JsonToJsonPathsConverter.transformToJsonPathWithTestsSideValues(responseBody) + jsonPaths.each { + bb.addLine("assertThat(parsedJson)" + it.method()) + } + processBodyElement(bb, "", responseBody) + } else if (contentType == ContentType.XML) { + bb.addLine("def responseBody = new XmlSlurper().parseText($responseAsString)") + // TODO xml validation + } else { + bb.addLine("def responseBody = ($responseAsString)") + processText(bb, "", responseBody as String) + } + } + + private ContentType getResponseContentType() { + ContentType contentType = recognizeContentTypeFromHeader(response.headers) + if (contentType == ContentType.UNKNOWN) { + contentType = recognizeContentTypeFromContent(response.body.serverValue) + } + return contentType + } + + protected void appendJsonPath(BlockBuilder blockBuilder, String json) { + blockBuilder.addLine(addColonIfRequired("DocumentContext parsedJson = JsonPath.parse($json)")) + } + + protected void processText(BlockBuilder blockBuilder, String property, String value) { + if (value.startsWith('$')) { + value = value.substring(1).replaceAll('\\$value', "responseBody$property") + blockBuilder.addLine(value) + } else { + blockBuilder.addLine(getResponseBodyPropertyComparisonString(property, value)) + } + } + + protected void processBodyElement(BlockBuilder blockBuilder, String property, Object value) { + } + + protected String getBodyAsString() { + Object bodyValue = extractServerValueFromBody(request.body.serverValue) + String json = new JsonOutput().toJson(bodyValue) + json = convertUnicodeEscapesIfRequired(json) + return trimRepeatedQuotes(json) + } + + protected Map getMultipartParameters() { + return (Map) request?.multipart?.serverValue + } + + protected String trimRepeatedQuotes(String toTrim) { + return toTrim.startsWith('"') ? toTrim.replaceAll('"', '') : toTrim // TODO: implement for JUnit + } + + protected Object extractServerValueFromBody(bodyValue) { + if (bodyValue instanceof GString) { + bodyValue = extractValue(bodyValue, { DslProperty dslProperty -> dslProperty.serverValue }) + } else { + bodyValue = MapConverter.transformValues(bodyValue, { it instanceof DslProperty ? it.serverValue : it }) + } + return bodyValue + } + + protected boolean allowedQueryParameter(QueryParameter param) { + return allowedQueryParameter(param.serverValue) + } + + protected boolean allowedQueryParameter(MatchingStrategy matchingStrategy) { + return matchingStrategy.type != MatchingStrategy.Type.ABSENT + } + + protected boolean allowedQueryParameter(Object o) { + return true + } + + protected String resolveParamValue(QueryParameter param) { + return resolveParamValue(param.serverValue) + } + + protected String resolveParamValue(Object value) { + return value.toString() + } + + protected String resolveParamValue(MatchingStrategy matchingStrategy) { + return matchingStrategy.serverValue.toString() + } + + protected ContentType getRequestContentType() { + ContentType contentType = recognizeContentTypeFromHeader(request.headers) + if (contentType == ContentType.UNKNOWN) { + contentType = recognizeContentTypeFromContent(request.body.serverValue) + } + return contentType + } + + protected String getTestSideValue(Object object) { + return MapConverter.getTestSideValues(object).toString() + } + + protected void processBodyElement(BlockBuilder blockBuilder, String property, Map map) { + map.each { + processBodyElement(blockBuilder, property, it) + } + } + + protected void processBodyElement(BlockBuilder blockBuilder, String property, List list) { + list.eachWithIndex { listElement, listIndex -> + String prop = getPropertyInListString(property, listIndex as Integer) + processBodyElement(blockBuilder, prop, listElement) + } + } +} diff --git a/accurest-core/src/main/groovy/io/codearte/accurest/builder/MockMvcJUnitMethodBodyBuilder.groovy b/accurest-core/src/main/groovy/io/codearte/accurest/builder/MockMvcJUnitMethodBodyBuilder.groovy new file mode 100644 index 0000000000..707a2eae42 --- /dev/null +++ b/accurest-core/src/main/groovy/io/codearte/accurest/builder/MockMvcJUnitMethodBodyBuilder.groovy @@ -0,0 +1,37 @@ +package io.codearte.accurest.builder + +import io.codearte.accurest.dsl.GroovyDsl +import io.codearte.accurest.dsl.internal.Header + +import java.util.regex.Pattern + +/** + * @author Olga Maciaszek-Sharma + * @since 2016-02-17 + */ +class MockMvcJUnitMethodBodyBuilder extends JUnitMethodBodyBuilder{ + + MockMvcJUnitMethodBodyBuilder(GroovyDsl stubDefinition) { + super(stubDefinition) + } + + @Override + protected void validateResponseCodeBlock(BlockBuilder bb) { + bb.addLine("assertThat(response.statusCode()).isEqualTo($response.status.serverValue);") + } + + @Override + protected void validateResponseHeadersBlock(BlockBuilder bb) { + response.headers?.collect { Header header -> + bb.addLine("assertThat(response.header(\"$header.name\")).${createHeaderComparison(header.serverValue)}") + } + } + + private String createHeaderComparison(Object headerValue) { + return "isEqualTo(\"$headerValue\");" + } + + private String createHeaderComparison(Pattern headerValue) { + return "matches(\"$headerValue\");" + } +} 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 c5202cad39..dce3ad6910 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 @@ -5,219 +5,69 @@ import groovy.json.StringEscapeUtils import groovy.transform.PackageScope import groovy.transform.TypeChecked 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.MatchingStrategy +import io.codearte.accurest.dsl.internal.NamedProperty +import io.codearte.accurest.dsl.internal.QueryParameter import io.codearte.accurest.util.ContentType import io.codearte.accurest.util.MapConverter -import io.codearte.accurest.util.JsonToJsonPathsConverter -import io.codearte.accurest.util.JsonPaths -import static io.codearte.accurest.util.ContentUtils.* +import static io.codearte.accurest.util.ContentUtils.extractValue +import static io.codearte.accurest.util.ContentUtils.getMultipartFileParameterContent +import static io.codearte.accurest.util.ContentUtils.recognizeContentTypeFromContent +import static io.codearte.accurest.util.ContentUtils.recognizeContentTypeFromHeader + /** * @author Jakub Kubrynski */ @PackageScope @TypeChecked -abstract class SpockMethodBodyBuilder { - - protected final Request request - protected final Response response +abstract class SpockMethodBodyBuilder extends MethodBodyBuilder { SpockMethodBodyBuilder(GroovyDsl stubDefinition) { - this.request = stubDefinition.request - this.response = stubDefinition.response + super(stubDefinition) } - void appendTo(BlockBuilder blockBuilder) { - blockBuilder.startBlock() - - givenBlock(blockBuilder) - whenBlock(blockBuilder) - thenBlock(blockBuilder) - - blockBuilder.endBlock() - } - - protected void thenBlock(BlockBuilder bb) { - bb.addLine('then:') - bb.startBlock() - then(bb) - bb.endBlock() - } - - protected void whenBlock(BlockBuilder bb) { - bb.addLine('when:') - bb.startBlock() - when(bb) - bb.endBlock().addEmptyLine() - } - - protected void givenBlock(BlockBuilder bb) { - bb.addLine('given:') - bb.startBlock() - given(bb) - bb.endBlock().addEmptyLine() - } - - protected void given(BlockBuilder bb) {} - - protected abstract void when(BlockBuilder bb) - - protected abstract void validateResponseCodeBlock(BlockBuilder bb) - - protected abstract void validateResponseHeadersBlock(BlockBuilder bb) - - protected abstract String getResponseAsString() - - protected void then(BlockBuilder bb) { - validateResponseCodeBlock(bb) - if (response.headers) { - validateResponseHeadersBlock(bb) - } - if (response.body) { - bb.endBlock() - bb.addLine('and:').startBlock() - validateResponseBodyBlock(bb) - } - } - - protected void validateResponseBodyBlock(BlockBuilder bb) { - def responseBody = response.body.serverValue - ContentType contentType = getResponseContentType() - if (responseBody instanceof GString) { - responseBody = extractValue(responseBody, contentType, { DslProperty dslProperty -> dslProperty.serverValue }) - } - if (contentType == ContentType.JSON) { - appendJsonPath(bb, responseAsString) - JsonPaths jsonPaths = JsonToJsonPathsConverter.transformToJsonPathWithTestsSideValues(responseBody) - jsonPaths.each { - bb.addLine("assertThat(parsedJson)" + it.method()) - } - processBodyElement(bb, "", responseBody) - } else if (contentType == ContentType.XML) { - bb.addLine("def responseBody = new XmlSlurper().parseText($responseAsString)") - // TODO xml validation - } else { - bb.addLine("def responseBody = ($responseAsString)") - processText(bb, "", responseBody as String) - } - } - - protected void processText(BlockBuilder blockBuilder, String property, String value) { - if (value.startsWith('$')) { - value = value.substring(1).replaceAll('\\$value', "responseBody$property") - blockBuilder.addLine(value) - } else { - blockBuilder.addLine("responseBody$property == \"${value}\"") - } - } - - protected String - - protected String getBodyAsString() { - Object bodyValue = extractServerValueFromBody(request.body.serverValue) - String json = new JsonOutput().toJson(bodyValue) - json = convertUnicodeEscapes(json) - return trimRepeatedQuotes(json) - } - - protected Map getMultipartParameters() { - return (Map)request?.multipart?.serverValue + @Override + protected String getResponseBodyPropertyComparisonString(String property, String value) { + return "responseBody$property == \"${value}\"" } + @Override protected String getMultipartParameterLine(Map.Entry parameter) { - if (parameter.value instanceof NamedProperty) { + if (parameter.value instanceof NamedProperty) { return ".multiPart(${getMultipartFileParameterContent(parameter.key, (NamedProperty) parameter.value)})" } return ".param('$parameter.key', '$parameter.value')" } - protected String convertUnicodeEscapes(String json) { - return StringEscapeUtils.unescapeJavaScript(json) - } - - protected String trimRepeatedQuotes(String toTrim) { - return toTrim.startsWith('"') ? toTrim.replaceAll('"', '') : toTrim - } - - protected Object extractServerValueFromBody(bodyValue) { - if (bodyValue instanceof GString) { - bodyValue = extractValue(bodyValue, { DslProperty dslProperty -> dslProperty.serverValue }) - } else { - bodyValue = MapConverter.transformValues(bodyValue, { it instanceof DslProperty ? it.serverValue : it }) - } - return bodyValue - } - - protected boolean allowedQueryParameter(QueryParameter param) { - return allowedQueryParameter(param.serverValue) - } - - protected boolean allowedQueryParameter(MatchingStrategy matchingStrategy) { - return matchingStrategy.type != MatchingStrategy.Type.ABSENT - } - - protected boolean allowedQueryParameter(Object o) { - return true - } - - protected String resolveParamValue(QueryParameter param) { - return resolveParamValue(param.serverValue) - } - - protected String resolveParamValue(Object value) { - return value.toString() - } - - protected String resolveParamValue(MatchingStrategy matchingStrategy) { - return matchingStrategy.serverValue.toString() - } - - protected void processBodyElement(BlockBuilder blockBuilder, String property, Object value) { - - } - - protected void appendJsonPath(BlockBuilder blockBuilder, String json) { - blockBuilder.addLine("DocumentContext parsedJson = JsonPath.parse($json)") - } - + @Override protected void processBodyElement(BlockBuilder blockBuilder, String property, ExecutionProperty exec) { blockBuilder.addLine("${exec.insertValue("parsedJson.read('\\\$$property')")}") } + @Override protected void processBodyElement(BlockBuilder blockBuilder, String property, Map.Entry entry) { processBodyElement(blockBuilder, property + "." + entry.key, entry.value) } - protected void processBodyElement(BlockBuilder blockBuilder, String property, Map map) { - map.each { - processBodyElement(blockBuilder, property, it) - } + @Override + protected String addCommentSignIfRequired(String baseString) { + return baseString } - protected void processBodyElement(BlockBuilder blockBuilder, String property, List list) { - list.eachWithIndex { listElement, listIndex -> - String prop = "$property[$listIndex]" ?: '' - processBodyElement(blockBuilder, prop, listElement) - } + @Override + protected String addColonIfRequired(String baseString) { + return baseString } - protected ContentType getRequestContentType() { - ContentType contentType = recognizeContentTypeFromHeader(request.headers) - if (contentType == ContentType.UNKNOWN) { - contentType = recognizeContentTypeFromContent(request.body.serverValue) - } - return contentType + @Override + protected String getPropertyInListString(String property, Integer listIndex) { + "$property[$listIndex]" ?: '' } - protected ContentType getResponseContentType() { - ContentType contentType = recognizeContentTypeFromHeader(response.headers) - if (contentType == ContentType.UNKNOWN) { - contentType = recognizeContentTypeFromContent(response.body.serverValue) - } - return contentType - } - - protected String getTestSideValue(Object object) { - return MapConverter.getTestSideValues(object).toString() + protected String convertUnicodeEscapesIfRequired(String json) { + return StringEscapeUtils.unescapeJavaScript(json) } } From cdb7a088c5fed96de961cb34311b74b817747824 Mon Sep 17 00:00:00 2001 From: Olga Maciaszek-Sharma Date: Thu, 18 Feb 2016 17:06:01 +0100 Subject: [PATCH 03/22] Added more methods with separate implementation for JUnit and Spock. --- .../builder/JUnitMethodBodyBuilder.groovy | 15 +++++++++++++++ .../accurest/builder/MethodBodyBuilder.groovy | 8 ++++++-- .../builder/SpockMethodBodyBuilder.groovy | 11 +++++++++++ 3 files changed, 32 insertions(+), 2 deletions(-) diff --git a/accurest-core/src/main/groovy/io/codearte/accurest/builder/JUnitMethodBodyBuilder.groovy b/accurest-core/src/main/groovy/io/codearte/accurest/builder/JUnitMethodBodyBuilder.groovy index 1b4e08b449..1c54d464c9 100644 --- a/accurest-core/src/main/groovy/io/codearte/accurest/builder/JUnitMethodBodyBuilder.groovy +++ b/accurest-core/src/main/groovy/io/codearte/accurest/builder/JUnitMethodBodyBuilder.groovy @@ -62,4 +62,19 @@ abstract class JUnitMethodBodyBuilder extends MethodBodyBuilder { protected String convertUnicodeEscapesIfRequired(String json) { return json // TODO: verify if that's fine or escapeJava required } + + @Override + protected void processBodyElement(BlockBuilder blockBuilder, String property, Map.Entry entry) { + processBodyElement(blockBuilder, property + """.get(\\\"$entry.key\\\")""", entry.value) + } + + @Override + protected String getParsedXmlResponseBodyString(String responseString) { + return "Object responseBody = new XmlSlurper().parseText($responseString);" + } + + @Override + protected String getSimpleResponseBodyString(String responseString) { + return "Object responseBody = ($responseString);" + } } diff --git a/accurest-core/src/main/groovy/io/codearte/accurest/builder/MethodBodyBuilder.groovy b/accurest-core/src/main/groovy/io/codearte/accurest/builder/MethodBodyBuilder.groovy index 443c6cd579..5580687632 100644 --- a/accurest-core/src/main/groovy/io/codearte/accurest/builder/MethodBodyBuilder.groovy +++ b/accurest-core/src/main/groovy/io/codearte/accurest/builder/MethodBodyBuilder.groovy @@ -61,6 +61,10 @@ abstract class MethodBodyBuilder { protected abstract String convertUnicodeEscapesIfRequired(String json) + protected abstract String getParsedXmlResponseBodyString(String responseString) + + protected abstract String getSimpleResponseBodyString(String responseString) + void appendTo(BlockBuilder blockBuilder) { blockBuilder.startBlock() @@ -118,10 +122,10 @@ abstract class MethodBodyBuilder { } processBodyElement(bb, "", responseBody) } else if (contentType == ContentType.XML) { - bb.addLine("def responseBody = new XmlSlurper().parseText($responseAsString)") + bb.addLine(getParsedXmlResponseBodyString(responseAsString)) // TODO xml validation } else { - bb.addLine("def responseBody = ($responseAsString)") + bb.addLine(getSimpleResponseBodyString(responseAsString)) processText(bb, "", responseBody as String) } } 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 dce3ad6910..3f40878d9a 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 @@ -67,7 +67,18 @@ abstract class SpockMethodBodyBuilder extends MethodBodyBuilder { "$property[$listIndex]" ?: '' } + @Override protected String convertUnicodeEscapesIfRequired(String json) { return StringEscapeUtils.unescapeJavaScript(json) } + + @Override + protected String getParsedXmlResponseBodyString(String responseString) { + return "def responseBody = new XmlSlurper().parseText($responseAsString)" + } + + @Override + protected String getSimpleResponseBodyString(String responseString) { + return "def responseBody = ($responseAsString)" + } } From 210b9f0bffef7aa9d190d6ed3a1185a719d79b57 Mon Sep 17 00:00:00 2001 From: Olga Maciaszek-Sharma Date: Fri, 19 Feb 2016 15:55:08 +0100 Subject: [PATCH 04/22] Made all the cases work apart from method execution and mulitparts. Added tests for JUnit. --- .../accurest/builder/BlockBuilder.groovy | 11 + .../builder/JUnitMethodBodyBuilder.groovy | 37 +- .../JaxRsClientSpockMethodBodyBuilder.groovy | 4 + .../accurest/builder/MethodBodyBuilder.groovy | 90 +- .../MockMvcJUnitMethodBodyBuilder.groovy | 8 +- .../MockMvcSpockMethodBodyBuilder.groovy | 59 +- .../builder/SpockMethodBodyBuilder.groovy | 40 +- .../util/DelegatingJsonVerifiable.java | 8 +- .../MockMvcJunitMethodBuilderSpec.groovy | 973 ++++++++++++++++++ 9 files changed, 1134 insertions(+), 96 deletions(-) create mode 100644 accurest-core/src/test/groovy/io/codearte/accurest/builder/MockMvcJunitMethodBuilderSpec.groovy diff --git a/accurest-core/src/main/groovy/io/codearte/accurest/builder/BlockBuilder.groovy b/accurest-core/src/main/groovy/io/codearte/accurest/builder/BlockBuilder.groovy index 62d97fdda7..3ab11e9359 100644 --- a/accurest-core/src/main/groovy/io/codearte/accurest/builder/BlockBuilder.groovy +++ b/accurest-core/src/main/groovy/io/codearte/accurest/builder/BlockBuilder.groovy @@ -62,6 +62,17 @@ class BlockBuilder { return this } + BlockBuilder addAtTheEnd(String toAdd) { + if (builder.charAt(builder.length() - 1) as String == '\n') { + builder.replace(builder.length() - 1, builder.length(), toAdd) + builder << '\n' + } else { + builder << toAdd + } + return this + } + + @Override String toString() { return builder.toString() diff --git a/accurest-core/src/main/groovy/io/codearte/accurest/builder/JUnitMethodBodyBuilder.groovy b/accurest-core/src/main/groovy/io/codearte/accurest/builder/JUnitMethodBodyBuilder.groovy index 1c54d464c9..f6153341d1 100644 --- a/accurest-core/src/main/groovy/io/codearte/accurest/builder/JUnitMethodBodyBuilder.groovy +++ b/accurest-core/src/main/groovy/io/codearte/accurest/builder/JUnitMethodBodyBuilder.groovy @@ -5,6 +5,8 @@ import groovy.transform.PackageScope import groovy.transform.TypeChecked import io.codearte.accurest.dsl.GroovyDsl import io.codearte.accurest.dsl.internal.ExecutionProperty +import io.codearte.accurest.dsl.internal.Header +import io.codearte.accurest.dsl.internal.Request /** * @author Jakub Kubrynski @@ -18,14 +20,9 @@ abstract class JUnitMethodBodyBuilder extends MethodBodyBuilder { super(stubDefinition) } - @Override - protected void when(BlockBuilder bb) { - - } - @Override protected String getResponseAsString() { - return null + return "response.getBody().asString()" } @Override @@ -34,8 +31,9 @@ abstract class JUnitMethodBodyBuilder extends MethodBodyBuilder { } @Override - protected String addColonIfRequired(String baseString) { - return "$baseString;" + protected BlockBuilder addColonIfRequired(BlockBuilder blockBuilder) { + blockBuilder.addAtTheEnd(';') + return blockBuilder } @Override @@ -60,7 +58,8 @@ abstract class JUnitMethodBodyBuilder extends MethodBodyBuilder { @Override protected String convertUnicodeEscapesIfRequired(String json) { - return json // TODO: verify if that's fine or escapeJava required + String unescapedJson = StringEscapeUtils.unescapeJavaScript(json) + return StringEscapeUtils.escapeJava(unescapedJson) } @Override @@ -77,4 +76,24 @@ abstract class JUnitMethodBodyBuilder extends MethodBodyBuilder { protected String getSimpleResponseBodyString(String responseString) { return "Object responseBody = ($responseString);" } + + @Override + protected String getResponseString(Request request) { + return 'ResponseOptions response = given().spec(request)' + } + + @Override + protected String getRequestString() { + return 'MockMvcRequestSpecification request = given()' + } + + @Override + protected String getHeaderString(Header header) { + return ".header(\"${getTestSideValue(header.name)}\", \"${getTestSideValue(header.serverValue)}\")" + } + + @Override + protected String getBodyString(String bodyAsString) { + return ".body(\"$bodyAsString\")" + } } diff --git a/accurest-core/src/main/groovy/io/codearte/accurest/builder/JaxRsClientSpockMethodBodyBuilder.groovy b/accurest-core/src/main/groovy/io/codearte/accurest/builder/JaxRsClientSpockMethodBodyBuilder.groovy index abf43d77fc..0a5339f0e0 100644 --- a/accurest-core/src/main/groovy/io/codearte/accurest/builder/JaxRsClientSpockMethodBodyBuilder.groovy +++ b/accurest-core/src/main/groovy/io/codearte/accurest/builder/JaxRsClientSpockMethodBodyBuilder.groovy @@ -1,4 +1,5 @@ package io.codearte.accurest.builder + import groovy.transform.PackageScope import groovy.transform.TypeChecked import io.codearte.accurest.dsl.GroovyDsl @@ -14,6 +15,9 @@ class JaxRsClientSpockMethodBodyBuilder extends SpockMethodBodyBuilder { super(stubDefinition) } + @Override + protected void given(BlockBuilder bb) {} + @Override protected void givenBlock(BlockBuilder bb) { } diff --git a/accurest-core/src/main/groovy/io/codearte/accurest/builder/MethodBodyBuilder.groovy b/accurest-core/src/main/groovy/io/codearte/accurest/builder/MethodBodyBuilder.groovy index 5580687632..3f92a12f5e 100644 --- a/accurest-core/src/main/groovy/io/codearte/accurest/builder/MethodBodyBuilder.groovy +++ b/accurest-core/src/main/groovy/io/codearte/accurest/builder/MethodBodyBuilder.groovy @@ -3,13 +3,16 @@ package io.codearte.accurest.builder import groovy.json.JsonOutput import groovy.transform.PackageScope import groovy.transform.TypeChecked +import groovy.transform.TypeCheckingMode import io.codearte.accurest.dsl.GroovyDsl 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.Url import io.codearte.accurest.util.ContentType import io.codearte.accurest.util.JsonPaths import io.codearte.accurest.util.JsonToJsonPathsConverter @@ -39,15 +42,11 @@ abstract class MethodBodyBuilder { protected abstract void validateResponseHeadersBlock(BlockBuilder bb) - protected void given(BlockBuilder bb) {} - - protected abstract void when(BlockBuilder bb) - protected abstract String getResponseAsString() protected abstract String addCommentSignIfRequired(String baseString) - protected abstract String addColonIfRequired(String baseString) + protected abstract BlockBuilder addColonIfRequired(BlockBuilder blockBuilder) protected abstract String getResponseBodyPropertyComparisonString(String property, String value) @@ -65,6 +64,14 @@ abstract class MethodBodyBuilder { protected abstract String getSimpleResponseBodyString(String responseString) + protected abstract String getResponseString(Request request) + + protected abstract String getRequestString() + + protected abstract String getHeaderString(Header header) + + protected abstract String getBodyString(String bodyAsString) + void appendTo(BlockBuilder blockBuilder) { blockBuilder.startBlock() @@ -74,6 +81,7 @@ abstract class MethodBodyBuilder { blockBuilder.endBlock() } + protected void thenBlock(BlockBuilder bb) { bb.addLine(addCommentSignIfRequired('then:')) bb.startBlock() @@ -95,6 +103,32 @@ abstract class MethodBodyBuilder { bb.endBlock().addEmptyLine() } + protected void given(BlockBuilder bb) { + bb.addLine(getRequestString()) + bb.indent() + request.headers?.collect { Header header -> + bb.addLine(getHeaderString(header)) + } + if (request.body) { + bb.addLine(getBodyString(bodyAsString)) + } + if (request.multipart) { + multipartParameters?.each { Map.Entry entry -> bb.addLine(getMultipartParameterLine(entry)) } + } + addColonIfRequired(bb) + bb.unindent() + } + + protected void when(BlockBuilder bb) { + bb.addLine(getResponseString(request)) + bb.indent() + + String url = buildUrl(request) + String method = request.method.serverValue.toString().toLowerCase() + + bb.addLine(/.${method}("$url");/) + bb.unindent() + } protected void then(BlockBuilder bb) { validateResponseCodeBlock(bb) @@ -103,7 +137,7 @@ abstract class MethodBodyBuilder { } if (response.body) { bb.endBlock() - bb.addLine('and:').startBlock() + bb.addLine(addCommentSignIfRequired('and:')).startBlock() validateResponseBodyBlock(bb) } } @@ -115,18 +149,21 @@ abstract class MethodBodyBuilder { responseBody = extractValue(responseBody, contentType, { DslProperty dslProperty -> dslProperty.serverValue }) } if (contentType == ContentType.JSON) { - appendJsonPath(bb, responseAsString) + appendJsonPath(bb, getResponseAsString()) JsonPaths jsonPaths = JsonToJsonPathsConverter.transformToJsonPathWithTestsSideValues(responseBody) jsonPaths.each { bb.addLine("assertThat(parsedJson)" + it.method()) + addColonIfRequired(bb) } processBodyElement(bb, "", responseBody) } else if (contentType == ContentType.XML) { - bb.addLine(getParsedXmlResponseBodyString(responseAsString)) + bb.addLine(getParsedXmlResponseBodyString(getResponseAsString())) + addColonIfRequired(bb) // TODO xml validation - } else { - bb.addLine(getSimpleResponseBodyString(responseAsString)) + } else { + bb.addLine(getSimpleResponseBodyString(getResponseAsString())) processText(bb, "", responseBody as String) + addColonIfRequired(bb) } } @@ -139,15 +176,18 @@ abstract class MethodBodyBuilder { } protected void appendJsonPath(BlockBuilder blockBuilder, String json) { - blockBuilder.addLine(addColonIfRequired("DocumentContext parsedJson = JsonPath.parse($json)")) + blockBuilder.addLine(("DocumentContext parsedJson = JsonPath.parse($json)")) + addColonIfRequired(blockBuilder) } protected void processText(BlockBuilder blockBuilder, String property, String value) { if (value.startsWith('$')) { value = value.substring(1).replaceAll('\\$value', "responseBody$property") blockBuilder.addLine(value) + addColonIfRequired(blockBuilder) } else { blockBuilder.addLine(getResponseBodyPropertyComparisonString(property, value)) + addColonIfRequired(blockBuilder) } } @@ -226,4 +266,32 @@ abstract class MethodBodyBuilder { processBodyElement(blockBuilder, prop, listElement) } } + + protected String buildUrl(Request request) { + if (request.url) + return getTestSideValue(buildUrlFromUrlPath(request.url)) + if (request.urlPath) + return getTestSideValue(buildUrlFromUrlPath(request.urlPath)) + throw new IllegalStateException("URL is not set!") + } + + + @TypeChecked(TypeCheckingMode.SKIP) + protected String buildUrlFromUrlPath(Url url) { + if (hasQueryParams(url)) { + String params = url.queryParameters.parameters + .findAll(this.&allowedQueryParameter) + .inject([] as List) { List result, QueryParameter param -> + result << "${param.name}=${resolveParamValue(param).toString()}" + } + .join('&') + return "${MapConverter.getTestSideValues(url.serverValue)}?$params" + } + return MapConverter.getTestSideValues(url.serverValue) + } + + + private boolean hasQueryParams(Url url) { + return url.queryParameters + } } diff --git a/accurest-core/src/main/groovy/io/codearte/accurest/builder/MockMvcJUnitMethodBodyBuilder.groovy b/accurest-core/src/main/groovy/io/codearte/accurest/builder/MockMvcJUnitMethodBodyBuilder.groovy index 707a2eae42..6bfc8c357f 100644 --- a/accurest-core/src/main/groovy/io/codearte/accurest/builder/MockMvcJUnitMethodBodyBuilder.groovy +++ b/accurest-core/src/main/groovy/io/codearte/accurest/builder/MockMvcJUnitMethodBodyBuilder.groovy @@ -9,7 +9,7 @@ import java.util.regex.Pattern * @author Olga Maciaszek-Sharma * @since 2016-02-17 */ -class MockMvcJUnitMethodBodyBuilder extends JUnitMethodBodyBuilder{ +class MockMvcJUnitMethodBodyBuilder extends JUnitMethodBodyBuilder { MockMvcJUnitMethodBodyBuilder(GroovyDsl stubDefinition) { super(stubDefinition) @@ -28,10 +28,12 @@ class MockMvcJUnitMethodBodyBuilder extends JUnitMethodBodyBuilder{ } private String createHeaderComparison(Object headerValue) { - return "isEqualTo(\"$headerValue\");" + String escapedHeader = convertUnicodeEscapesIfRequired("$headerValue") + return "isEqualTo(\"$escapedHeader\");" } private String createHeaderComparison(Pattern headerValue) { - return "matches(\"$headerValue\");" + String escapedHeader = convertUnicodeEscapesIfRequired("$headerValue") + return "matches(\"$escapedHeader\");" } } diff --git a/accurest-core/src/main/groovy/io/codearte/accurest/builder/MockMvcSpockMethodBodyBuilder.groovy b/accurest-core/src/main/groovy/io/codearte/accurest/builder/MockMvcSpockMethodBodyBuilder.groovy index 64cf5e4afc..fe18c08a19 100644 --- a/accurest-core/src/main/groovy/io/codearte/accurest/builder/MockMvcSpockMethodBodyBuilder.groovy +++ b/accurest-core/src/main/groovy/io/codearte/accurest/builder/MockMvcSpockMethodBodyBuilder.groovy @@ -2,13 +2,8 @@ package io.codearte.accurest.builder import groovy.transform.PackageScope import groovy.transform.TypeChecked -import groovy.transform.TypeCheckingMode import io.codearte.accurest.dsl.GroovyDsl import io.codearte.accurest.dsl.internal.Header -import io.codearte.accurest.dsl.internal.QueryParameter -import io.codearte.accurest.dsl.internal.Request -import io.codearte.accurest.dsl.internal.Url -import io.codearte.accurest.util.MapConverter import java.util.regex.Pattern @@ -20,36 +15,12 @@ class MockMvcSpockMethodBodyBuilder extends SpockMethodBodyBuilder { super(stubDefinition) } - protected void given(BlockBuilder bb) { - bb.addLine('def request = given()') - bb.indent() - request.headers?.collect { Header header -> - bb.addLine(".header('${getTestSideValue(header.name)}', '${getTestSideValue(header.serverValue)}')") - } - if (request.body) { - bb.addLine(".body('''$bodyAsString''')") - } - if (request.multipart) { - multipartParameters?.each { Map.Entry entry -> bb.addLine(getMultipartParameterLine(entry)) } - } - bb.unindent() - } - - protected void when(BlockBuilder bb) { - bb.addLine('def response = given().spec(request)') - bb.indent() - - String url = buildUrl(request) - String method = request.method.serverValue.toString().toLowerCase() - - bb.addLine(/.${method}("$url")/) - bb.unindent() - } - + @Override protected void validateResponseCodeBlock(BlockBuilder bb) { bb.addLine("response.statusCode == $response.status.serverValue") } + @Override protected void validateResponseHeadersBlock(BlockBuilder bb) { response.headers?.collect { Header header -> bb.addLine("response.header('$header.name') ${convertHeaderComparison(header.serverValue)}") @@ -68,30 +39,4 @@ class MockMvcSpockMethodBodyBuilder extends SpockMethodBodyBuilder { protected String getResponseAsString() { return 'response.body.asString()' } - - protected String buildUrl(Request request) { - if (request.url) - return getTestSideValue(buildUrlFromUrlPath(request.url)) - if (request.urlPath) - return getTestSideValue(buildUrlFromUrlPath(request.urlPath)) - throw new IllegalStateException("URL is not set!") - } - - @TypeChecked(TypeCheckingMode.SKIP) - protected String buildUrlFromUrlPath(Url url) { - if (hasQueryParams(url)) { - String params = url.queryParameters.parameters - .findAll(this.&allowedQueryParameter) - .inject([] as List) { List result, QueryParameter param -> - result << "${param.name}=${resolveParamValue(param).toString()}" - } - .join('&') - return "${MapConverter.getTestSideValues(url.serverValue)}?$params" - } - return MapConverter.getTestSideValues(url.serverValue) - } - - private boolean hasQueryParams(Url url) { - return url.queryParameters - } } 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 3f40878d9a..b61807f689 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 @@ -1,22 +1,15 @@ package io.codearte.accurest.builder -import groovy.json.JsonOutput import groovy.json.StringEscapeUtils import groovy.transform.PackageScope import groovy.transform.TypeChecked import io.codearte.accurest.dsl.GroovyDsl -import io.codearte.accurest.dsl.internal.DslProperty import io.codearte.accurest.dsl.internal.ExecutionProperty -import io.codearte.accurest.dsl.internal.MatchingStrategy +import io.codearte.accurest.dsl.internal.Header import io.codearte.accurest.dsl.internal.NamedProperty -import io.codearte.accurest.dsl.internal.QueryParameter -import io.codearte.accurest.util.ContentType -import io.codearte.accurest.util.MapConverter +import io.codearte.accurest.dsl.internal.Request -import static io.codearte.accurest.util.ContentUtils.extractValue import static io.codearte.accurest.util.ContentUtils.getMultipartFileParameterContent -import static io.codearte.accurest.util.ContentUtils.recognizeContentTypeFromContent -import static io.codearte.accurest.util.ContentUtils.recognizeContentTypeFromHeader /** * @author Jakub Kubrynski @@ -58,8 +51,8 @@ abstract class SpockMethodBodyBuilder extends MethodBodyBuilder { } @Override - protected String addColonIfRequired(String baseString) { - return baseString + protected BlockBuilder addColonIfRequired(BlockBuilder blockBuilder) { + return blockBuilder } @Override @@ -74,11 +67,32 @@ abstract class SpockMethodBodyBuilder extends MethodBodyBuilder { @Override protected String getParsedXmlResponseBodyString(String responseString) { - return "def responseBody = new XmlSlurper().parseText($responseAsString)" + return "def responseBody = new XmlSlurper().parseText($responseString)" } @Override protected String getSimpleResponseBodyString(String responseString) { - return "def responseBody = ($responseAsString)" + return "def responseBody = ($responseString)" } + + @Override + protected String getResponseString(Request request) { + return 'def response = given().spec(request)' + } + + @Override + protected String getRequestString() { + return 'def request = given()' + } + + @Override + protected String getHeaderString(Header header) { + return ".header('${getTestSideValue(header.name)}', '${getTestSideValue(header.serverValue)}')" + } + + @Override + protected String getBodyString(String bodyAsString) { + return ".body('''$bodyAsString''')" + } + } diff --git a/accurest-core/src/main/groovy/io/codearte/accurest/util/DelegatingJsonVerifiable.java b/accurest-core/src/main/groovy/io/codearte/accurest/util/DelegatingJsonVerifiable.java index 3148dc6a97..410375b385 100644 --- a/accurest-core/src/main/groovy/io/codearte/accurest/util/DelegatingJsonVerifiable.java +++ b/accurest-core/src/main/groovy/io/codearte/accurest/util/DelegatingJsonVerifiable.java @@ -2,6 +2,8 @@ package io.codearte.accurest.util; import com.blogspot.toomuchcoding.jsonassert.JsonVerifiable; +import static org.apache.commons.lang3.StringEscapeUtils.escapeJava; + /** * @author Marcin Grzejszczak */ @@ -11,7 +13,7 @@ class DelegatingJsonVerifiable implements MethodBufferingJsonVerifiable { private final StringBuffer methodsBuffer; DelegatingJsonVerifiable(JsonVerifiable delegate, - StringBuffer methodsBuffer) { + StringBuffer methodsBuffer) { this.delegate = delegate; this.methodsBuffer = new StringBuffer(methodsBuffer.toString()); } @@ -100,7 +102,7 @@ class DelegatingJsonVerifiable implements MethodBufferingJsonVerifiable { if (delegate.isAssertingAValueInArray()) { readyToCheck.methodsBuffer.append(".value()"); } else { - readyToCheck.appendMethodWithQuotedValue("isEqualTo", value); + readyToCheck.appendMethodWithQuotedValue("isEqualTo", escapeJava(value)); } return readyToCheck; } @@ -137,7 +139,7 @@ class DelegatingJsonVerifiable implements MethodBufferingJsonVerifiable { if (delegate.isAssertingAValueInArray()) { readyToCheck.methodsBuffer.append(".value()"); } else { - readyToCheck.appendMethodWithQuotedValue("matches", value); + readyToCheck.appendMethodWithQuotedValue("matches", escapeJava(value)); } return readyToCheck; } diff --git a/accurest-core/src/test/groovy/io/codearte/accurest/builder/MockMvcJunitMethodBuilderSpec.groovy b/accurest-core/src/test/groovy/io/codearte/accurest/builder/MockMvcJunitMethodBuilderSpec.groovy new file mode 100644 index 0000000000..7e78ab2475 --- /dev/null +++ b/accurest-core/src/test/groovy/io/codearte/accurest/builder/MockMvcJunitMethodBuilderSpec.groovy @@ -0,0 +1,973 @@ +package io.codearte.accurest.builder + +import io.codearte.accurest.dsl.GroovyDsl +import io.codearte.accurest.dsl.WireMockStubStrategy +import io.codearte.accurest.dsl.WireMockStubVerifier +import io.codearte.accurest.file.Contract +import jdk.nashorn.internal.ir.annotations.Ignore +import spock.lang.Issue +import spock.lang.Specification +import spock.lang.Unroll + +import java.util.regex.Pattern + +/** + * @author Olga Maciaszek-Sharma + * @since 2015-08-07 + */ +class MockMvcJunitMethodBuilderSpec extends Specification implements WireMockStubVerifier { + + 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" +}""" + } + } + MockMvcJUnitMethodBodyBuilder builder = new MockMvcJUnitMethodBodyBuilder(contractDsl) + BlockBuilder blockBuilder = new BlockBuilder(" ") + when: + builder.appendTo(blockBuilder) + then: + blockBuilder.toString().contains('assertThat(parsedJson).field("property1").isEqualTo("a");') + blockBuilder.toString().contains('assertThat(parsedJson).field("property2").isEqualTo("b");') + and: + stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) + } + + @Issue("#187") + def "should generate assertions for null and boolean values"() { + given: + GroovyDsl contractDsl = GroovyDsl.make { + request { + method "GET" + url "test" + } + response { + status 200 + body """{ + "property1": "true", + "property2": null, + "property3": false +}""" + } + } + MockMvcJUnitMethodBodyBuilder builder = new MockMvcJUnitMethodBodyBuilder(contractDsl) + BlockBuilder blockBuilder = new BlockBuilder(" ") + when: + builder.appendTo(blockBuilder) + then: + blockBuilder.toString().contains("""assertThat(parsedJson).field("property1").isEqualTo("true");""") + blockBuilder.toString().contains("""assertThat(parsedJson).field("property2").isNull();""") + blockBuilder.toString().contains("""assertThat(parsedJson).field("property3").isEqualTo(false);""") + and: + stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) + } + + @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'] + ] + ) + } + } + MockMvcJUnitMethodBodyBuilder builder = new MockMvcJUnitMethodBodyBuilder(contractDsl) + BlockBuilder blockBuilder = new BlockBuilder(" ") + when: + builder.appendTo(blockBuilder) + then: + blockBuilder.toString().contains("""assertThat(parsedJson).field("property1").isEqualTo("a");""") + blockBuilder.toString().contains("""assertThat(parsedJson).array("property2").contains("a").isEqualTo("sth");""") + blockBuilder.toString().contains("""assertThat(parsedJson).array("property2").contains("b").isEqualTo("sthElse");""") + and: + stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) + } + + @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 + } + } + MockMvcJUnitMethodBodyBuilder builder = new MockMvcJUnitMethodBodyBuilder(contractDsl) + BlockBuilder blockBuilder = new BlockBuilder(" ") + when: + builder.appendTo(blockBuilder) + then: + blockBuilder.toString().contains('.body("{\\"items\\":[\\"HOP\\"]}")') + and: + stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) + } + + @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 + } + } + MockMvcJUnitMethodBodyBuilder builder = new MockMvcJUnitMethodBodyBuilder(contractDsl) + BlockBuilder blockBuilder = new BlockBuilder(" ") + when: + builder.appendTo(blockBuilder) + then: + blockBuilder.toString().contains('.body("\\"property1=VAL1\\"")') + and: + stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) + } + + @Issue("185") + def "should generate assertions for a response body containing map with integers as keys"() { + given: + GroovyDsl contractDsl = GroovyDsl.make { + request { + method "GET" + url "test" + } + response { + status 200 + body( + property: [ + 14: 0.0, + 7 : 0.0 + ] + ) + } + } + MockMvcJUnitMethodBodyBuilder builder = new MockMvcJUnitMethodBodyBuilder(contractDsl) + BlockBuilder blockBuilder = new BlockBuilder(" ") + when: + builder.appendTo(blockBuilder) + then: + blockBuilder.toString().contains("""assertThat(parsedJson).field("property").field(7).isEqualTo(0.0);""") + blockBuilder.toString().contains("""assertThat(parsedJson).field("property").field(14).isEqualTo(0.0);""") + and: + stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) + } + + 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" +}]""" + } + } + MockMvcJUnitMethodBodyBuilder builder = new MockMvcJUnitMethodBodyBuilder(contractDsl) + BlockBuilder blockBuilder = new BlockBuilder(" ") + when: + builder.appendTo(blockBuilder) + then: + blockBuilder.toString().contains("""assertThat(parsedJson).array().contains("property2").isEqualTo("b");""") + blockBuilder.toString().contains("""assertThat(parsedJson).array().contains("property1").isEqualTo("a");""") + and: + stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) + } + + 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"} + ] +}""" + } + } + MockMvcJUnitMethodBodyBuilder builder = new MockMvcJUnitMethodBodyBuilder(contractDsl) + BlockBuilder blockBuilder = new BlockBuilder(" ") + when: + builder.appendTo(blockBuilder) + then: + blockBuilder.toString().contains("""assertThat(parsedJson).array("property1").contains("property2").isEqualTo("test1");""") + blockBuilder.toString().contains("""assertThat(parsedJson).array("property1").contains("property3").isEqualTo("test2");""") + and: + stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) + } + + 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"} +} +''' + } + } + MockMvcJUnitMethodBodyBuilder builder = new MockMvcJUnitMethodBodyBuilder(contractDsl) + BlockBuilder blockBuilder = new BlockBuilder(" ") + when: + builder.appendTo(blockBuilder) + then: + blockBuilder.toString().contains("""assertThat(parsedJson).field("property2").field("property3").isEqualTo("b");""") + blockBuilder.toString().contains("""assertThat(parsedJson).field("property1").isEqualTo("a");""") + and: + stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) + } + + 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') + + } + + } + } + MockMvcJUnitMethodBodyBuilder builder = new MockMvcJUnitMethodBodyBuilder(contractDsl) + BlockBuilder blockBuilder = new BlockBuilder(" ") + when: + builder.appendTo(blockBuilder) + then: + blockBuilder.toString().contains("""assertThat(parsedJson).field("property2").matches("[0-9]{3}");""") + blockBuilder.toString().contains("""assertThat(parsedJson).field("property1").isEqualTo("a");""") + and: + stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) + } + + + 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') + + } + + } + } + MockMvcJUnitMethodBodyBuilder builder = new MockMvcJUnitMethodBodyBuilder(contractDsl) + BlockBuilder blockBuilder = new BlockBuilder(" ") + when: + builder.appendTo(blockBuilder) + then: + blockBuilder.toString().contains("""assertThat(parsedJson).field("property2").matches("[0-9]{3}");""") + blockBuilder.toString().contains("""assertThat(parsedJson).field("property1").isEqualTo("a");""") + and: + stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) + } + + @Issue(["#126", "#143"]) + def "should generate escaped regex assertions for string objects in response body"() { + given: + GroovyDsl contractDsl = GroovyDsl.make { + request { + method "GET" + url "test" + } + response { + status 200 + body("""{"property":" ${value(client('123'), server(regex('\\d+')))}"}""") + headers { + header('Content-Type': 'application/json') + } + } + } + MockMvcJUnitMethodBodyBuilder builder = new MockMvcJUnitMethodBodyBuilder(contractDsl) + BlockBuilder blockBuilder = new BlockBuilder(" ") + when: + builder.appendTo(blockBuilder) + then: + blockBuilder.toString().contains("""assertThat(parsedJson).field("property").matches("\\\\d+");""") + and: + stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) + } + + 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")) + parameter 'email': "bob@email.com" + parameter 'hello': $(client(matching("Denis.*")), server(absent())) + parameter 'hello': absent() + } + } + } + response { + status 200 + body """ + { + "property1": "a", + "property2": "b" + } + """ + } + } + MockMvcJUnitMethodBodyBuilder builder = new MockMvcJUnitMethodBodyBuilder(contractDsl) + BlockBuilder blockBuilder = new BlockBuilder(" ") + when: + builder.appendTo(blockBuilder) + def jUnitTest = blockBuilder.toString() + then: + jUnitTest.contains('get("/users?limit=10&offset=20&filter=email&sort=name&search=55&age=99&name=Denis.Stepanov&email=bob@email.com")') + jUnitTest.contains('assertThat(parsedJson).field("property1").isEqualTo("a")') + jUnitTest.contains('assertThat(parsedJson).field("property2").isEqualTo("b")') + and: + stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) + } + + @Issue('#169') + def "should generate a call with an url path and query parameters with url containing a pattern"() { + given: + GroovyDsl contractDsl = GroovyDsl.make { + request { + method 'GET' + url($(stub(regex('/foo/[0-9]+')), test('/foo/123456'))) { + 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")) + parameter 'email': "bob@email.com" + parameter 'hello': $(client(matching("Denis.*")), server(absent())) + parameter 'hello': absent() + } + } + } + response { + status 200 + body """ + { + "property1": "a", + "property2": "b" + } + """ + } + } + MockMvcJUnitMethodBodyBuilder builder = new MockMvcJUnitMethodBodyBuilder(contractDsl) + BlockBuilder blockBuilder = new BlockBuilder(" ") + when: + builder.appendTo(blockBuilder) + def jUnitTest = blockBuilder.toString() + then: + jUnitTest.contains('get("/foo/123456?limit=10&offset=20&filter=email&sort=name&search=55&age=99&name=Denis.Stepanov&email=bob@email.com")') + jUnitTest.contains('assertThat(parsedJson).field("property1").isEqualTo("a")') + jUnitTest.contains('assertThat(parsedJson).field("property2").isEqualTo("b")') + and: + stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) + } + + def "should generate test for empty body"() { + given: + GroovyDsl contractDsl = GroovyDsl.make { + request { + method('POST') + url("/ws/payments") + body("") + } + response { + status 406 + } + } + MockMvcJUnitMethodBodyBuilder builder = new MockMvcJUnitMethodBodyBuilder(contractDsl) + BlockBuilder blockBuilder = new BlockBuilder(" ") + when: + builder.appendTo(blockBuilder) + def jUnitTest = blockBuilder.toString() + then: + jUnitTest.contains(".body(\"\\\"\\\"\")") + and: + stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) + } + + def "should generate test for String in response body"() { + given: + GroovyDsl contractDsl = GroovyDsl.make { + request { + method "POST" + url "test" + } + response { + status 200 + body "test" + } + } + MockMvcJUnitMethodBodyBuilder builder = new MockMvcJUnitMethodBodyBuilder(contractDsl) + BlockBuilder blockBuilder = new BlockBuilder(" ") + when: + builder.appendTo(blockBuilder) + def jUnitTest = blockBuilder.toString() + then: + jUnitTest.contains('Object responseBody = (response.getBody().asString());') + jUnitTest.contains('assertThat(responseBody).isEqualTo("test");') + and: + stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) + } + + @Issue('113') + def "should generate regex test for String in response header"() { + given: + GroovyDsl contractDsl = GroovyDsl.make { + request { + method 'POST' + url $(client(regex('/partners/[0-9]+/users')), server('/partners/1000/users')) + headers { header 'Content-Type': 'application/json' } + body( + first_name: 'John', + last_name: 'Smith', + personal_id: '12345678901', + phone_number: '500500500', + invitation_token: '00fec7141bb94793bfe7ae1d0f39bda0', + password: 'john' + ) + } + response { + status 201 + headers { + header 'Location': $(client('http://localhost/partners/1000/users/1001'), server(regex('http://localhost/partners/[0-9]+/users/[0-9]+'))) + } + } + } + MockMvcJUnitMethodBodyBuilder builder = new MockMvcJUnitMethodBodyBuilder(contractDsl) + BlockBuilder blockBuilder = new BlockBuilder(" ") + when: + builder.appendTo(blockBuilder) + def jUnitTest = blockBuilder.toString() + then: + jUnitTest.contains('assertThat(response.header("Location")).matches("http://localhost/partners/[0-9]+/users/[0-9]+");') + and: + stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) + } + + @Issue('115') + def "should generate regex with helper method"() { + given: + GroovyDsl contractDsl = GroovyDsl.make { + request { + method 'POST' + url $(client(regex('/partners/[0-9]+/users')), server('/partners/1000/users')) + headers { header 'Content-Type': 'application/json' } + body( + first_name: 'John', + last_name: 'Smith', + personal_id: '12345678901', + phone_number: '500500500', + invitation_token: '00fec7141bb94793bfe7ae1d0f39bda0', + password: 'john' + ) + } + response { + status 201 + headers { + header 'Location': $(client('http://localhost/partners/1000/users/1001'), server(regex("^${hostname()}/partners/[0-9]+/users/[0-9]+"))) + } + } + } + MockMvcJUnitMethodBodyBuilder builder = new MockMvcJUnitMethodBodyBuilder(contractDsl) + BlockBuilder blockBuilder = new BlockBuilder(" ") + when: + builder.appendTo(blockBuilder) + def jUnitTest = blockBuilder.toString() + then: + jUnitTest.contains('assertThat(response.header("Location")).matches("^((http[s]?|ftp):/)/?([^:/s]+)(:[0-9]{1,5})?/partners/[0-9]+/users/[0-9]+");') + and: + stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) + } + + def "should work with more complex stuff and jsonpaths"() { + given: + GroovyDsl contractDsl = GroovyDsl.make { + priority 10 + request { + method 'POST' + url '/validation/client' + headers { + header 'Content-Type': 'application/json' + } + body( + bank_account_number: '0014282912345698765432161182', + email: 'foo@bar.com', + phone_number: '100299300', + personal_id: 'ABC123456' + ) + } + + response { + status 200 + body(errors: [ + [property: "bank_account_number", message: "incorrect_format"] + ]) + } + } + MockMvcJUnitMethodBodyBuilder builder = new MockMvcJUnitMethodBodyBuilder(contractDsl) + BlockBuilder blockBuilder = new BlockBuilder(" ") + when: + builder.appendTo(blockBuilder) + def jUnitTest = blockBuilder.toString() + then: + jUnitTest.contains("""assertThat(parsedJson).array("errors").contains("property").isEqualTo("bank_account_number");""") + jUnitTest.contains("""assertThat(parsedJson).array("errors").contains("message").isEqualTo("incorrect_format");""") + and: + stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) + + } + + def "should work properly with GString url"() { + given: + GroovyDsl contractDsl = GroovyDsl.make { + + request { + method 'PUT' + url "/partners/${value(client(regex('^[0-9]*$')), server('11'))}/agents/11/customers/09665703Z" + headers { + header 'Content-Type': 'application/json' + } + body( + first_name: 'Josef', + ) + } + response { + status 422 + } + } + MockMvcJUnitMethodBodyBuilder builder = new MockMvcJUnitMethodBodyBuilder(contractDsl) + BlockBuilder blockBuilder = new BlockBuilder(" ") + when: + builder.appendTo(blockBuilder) + def jUnitTest = blockBuilder.toString() + then: + jUnitTest.contains("/partners/11/agents/11/customers/09665703Z") + and: + stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) + } + + def "should resolve properties in GString with regular expression"() { + given: + GroovyDsl contractDsl = GroovyDsl.make { + priority 1 + request { + method 'POST' + url '/users/password' + headers { + header 'Content-Type': 'application/json' + } + body( + email: $(client(regex(email())), server('not.existing@user.com')), + callback_url: $(client(regex(hostname())), server('http://partners.com')) + ) + } + response { + status 404 + headers { + header 'Content-Type': 'application/json' + } + body( + code: 4, + message: "User not found by email = [${value(server(regex(email())), client('not.existing@user.com'))}]" + ) + } + } + MockMvcJUnitMethodBodyBuilder builder = new MockMvcJUnitMethodBodyBuilder(contractDsl) + BlockBuilder blockBuilder = new BlockBuilder(" ") + when: + builder.appendTo(blockBuilder) + def jUnitTest = blockBuilder.toString() + then: + jUnitTest.contains('''$[?(@.message =~ /User not found by email = \\\\[[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\\\.[a-zA-Z]{2,4}\\\\]/)]''') + } + + + @Issue('42') + @Unroll + def "should not omit the optional field in the test creation"() { + given: + MockMvcJUnitMethodBodyBuilder builder = new MockMvcJUnitMethodBodyBuilder(contractDsl) + BlockBuilder blockBuilder = new BlockBuilder(" ") + when: + builder.appendTo(blockBuilder) + def jUnitTest = blockBuilder.toString() + then: + jUnitTest.contains('\\"email\\":\\"abc@abc.com\\"') + jUnitTest.contains('assertThat(parsedJson).field("code").matches("(123123)?");') + !jUnitTest.contains('''REGEXP''') + !jUnitTest.contains('''OPTIONAL''') + !jUnitTest.contains('''OptionalProperty''') + where: + contractDsl << [ + GroovyDsl.make { + priority 1 + request { + method 'POST' + url '/users/password' + headers { + header 'Content-Type': 'application/json' + } + body( + email: $(stub(optional(regex(email()))), test('abc@abc.com')), + callback_url: $(stub(regex(hostname())), test('http://partners.com')) + ) + } + response { + status 404 + headers { + header 'Content-Type': 'application/json' + } + body( + code: value(stub("123123"), test(optional("123123"))), + message: "User not found by email = [${value(test(regex(email())), stub('not.existing@user.com'))}]" + ) + } + }, + GroovyDsl.make { + priority 1 + request { + method 'POST' + url '/users/password' + headers { + header 'Content-Type': 'application/json' + } + body( + """ { + "email" : "${value(stub(optional(regex(email()))), test('abc@abc.com'))}", + "callback_url" : "${value(client(regex(hostname())), server('http://partners.com'))}" + } + """ + ) + } + response { + status 404 + headers { + header 'Content-Type': 'application/json' + } + body( + """ { + "code" : "${value(stub(123123), test(optional(123123)))}", + "message" : "User not found by email = [${ + value(server(regex(email())), client('not.existing@user.com')) + }]" + } + """ + ) + } + } + ] + } + + @Issue('72') + @Ignore + //TODO: fix exec method for jUnit + def "should make the execute method work"() { + given: + GroovyDsl contractDsl = GroovyDsl.make { + request { + method """PUT""" + url """/fraudcheck""" + body(""" + { + "clientPesel":"${value(client(regex('[0-9]{10}')), server('1234567890'))}", + "loanAmount":123.123 + } + """ + ) + headers { + header("""Content-Type""", """application/vnd.fraud.v1+json""") + + } + + } + response { + status 200 + body("""{ + "fraudCheckStatus": "OK", + "rejectionReason": ${value(client(null), server(execute('assertThatRejectionReasonIsNull($it)')))} +}""") + headers { + header('Content-Type': 'application/vnd.fraud.v1+json') + + } + + } + + } + MockMvcJUnitMethodBodyBuilder builder = new MockMvcJUnitMethodBodyBuilder(contractDsl) + BlockBuilder blockBuilder = new BlockBuilder(" ") + when: + builder.appendTo(blockBuilder) + def jUnitTest = blockBuilder.toString() + then: + jUnitTest.contains('''assertThatRejectionReasonIsNull(parsedJson.read('$.rejectionReason'))''') + } + + def "should support inner map and list definitions"() { + given: + + Pattern PHONE_NUMBER = Pattern.compile(/[+\w]*/) + Pattern ANYSTRING = Pattern.compile(/.*/) + Pattern NUMBERS = Pattern.compile(/[\d\.]*/) + Pattern DATETIME = ANYSTRING + + GroovyDsl contractDsl = GroovyDsl.make { + request { + method "PUT" + url "/v1/payments/e86df6f693de4b35ae648464c5b0dc09/client_data" + headers { + header('Content-Type': 'application/json') + } + body( + client: [ + first_name : $(stub(regex(onlyAlphaUnicode())), test('Denis')), + last_name : $(stub(regex(onlyAlphaUnicode())), test('FakeName')), + email : $(stub(regex(email())), test('fakemail@fakegmail.com')), + fax : $(stub(PHONE_NUMBER), test('+xx001213214')), + phone : $(stub(PHONE_NUMBER), test('2223311')), + data_of_birth: $(stub(DATETIME), test('2002-10-22T00:00:00Z')) + ], + client_id_card: [ + id : $(stub(ANYSTRING), test('ABC12345')), + date_of_issue: $(stub(ANYSTRING), test('2002-10-02T00:00:00Z')), + address : [ + street : $(stub(ANYSTRING), test('Light Street')), + city : $(stub(ANYSTRING), test('Fire')), + region : $(stub(ANYSTRING), test('Skys')), + country: $(stub(ANYSTRING), test('HG')), + zip : $(stub(NUMBERS), test('658965')) + ] + ], + incomes_and_expenses: [ + monthly_income : $(stub(NUMBERS), test('0.0')), + monthly_loan_repayments: $(stub(NUMBERS), test('100')), + monthly_living_expenses: $(stub(NUMBERS), test('22')) + ], + additional_info: [ + allow_to_contact: $(stub(optional(regex(anyBoolean()))), test('true')) + ] + ) + } + response { + status 200 + headers { + header('Content-Type': 'application/json') + } + } + } + MockMvcJUnitMethodBodyBuilder builder = new MockMvcJUnitMethodBodyBuilder(contractDsl) + BlockBuilder blockBuilder = new BlockBuilder(" ") + when: + builder.appendTo(blockBuilder) + def jUnitTest = blockBuilder.toString() + then: + jUnitTest.contains '\\"street\\":\\"Light Street\\"' + !jUnitTest.contains("clientValue") + !jUnitTest.contains("cursor") + } + + def "shouldn't generate unicode escape characters"() { + given: + Pattern ONLY_ALPHA_UNICODE = Pattern.compile(/[\p{L}]*/) + + GroovyDsl contractDsl = GroovyDsl.make { + request { + method "PUT" + url "/v1/payments/e86df6f693de4b35ae648464c5b0dc09/енев" + headers { + header('Content-Type': 'application/json') + } + body( + client: [ + first_name: $(stub(ONLY_ALPHA_UNICODE), test('Пенева')), + last_name : $(stub(ONLY_ALPHA_UNICODE), test('Пенева')) + ] + ) + } + response { + status 200 + headers { + header('Content-Type': 'application/json') + } + } + } + MockMvcJUnitMethodBodyBuilder builder = new MockMvcJUnitMethodBodyBuilder(contractDsl) + BlockBuilder blockBuilder = new BlockBuilder(" ") + when: + builder.appendTo(blockBuilder) + def jUnitTest = blockBuilder.toString() + then: + !jUnitTest.contains("\\u041f") + } + + @Issue('177') + def "should generate proper test code when having multiline body"() { + given: + GroovyDsl contractDsl = GroovyDsl.make { + request { + method "PUT" + url "/multiline" + body('''hello, +World.''') + } + response { + status 200 + } + } + MockMvcSpockMethodBodyBuilder builder = new MockMvcSpockMethodBodyBuilder(contractDsl) + BlockBuilder blockBuilder = new BlockBuilder(" ") + when: + builder.given(blockBuilder) + def spockTest = blockBuilder.toString() + then: + spockTest.contains("""'''hello, +World.'''""") + } + + @Issue('180') + @Ignore + //TODO: fix multiparts in JUnit + def "should generate proper test code when having multipart parameters"() { + given: + GroovyDsl contractDsl = GroovyDsl.make { + request { + method "PUT" + url "/multipart" + headers { + header('content-type', 'multipart/form-data;boundary=AaB03x') + } + multipart( + formParameter: value(client(regex('.+')), server('"formParameterValue"')), + someBooleanParameter: value(client(regex('(true|false)')), server('true')), + file: named(value(client(regex('.+')), server('filename.csv')), value(client(regex('.+')), server('file content'))) + ) + } + response { + status 200 + } + } + MockMvcJUnitMethodBodyBuilder builder = new MockMvcJUnitMethodBodyBuilder(contractDsl) + BlockBuilder blockBuilder = new BlockBuilder(" ") + when: + builder.given(blockBuilder) + def jUnitTest = blockBuilder.toString() + then: + jUnitTest.contains("""'content-type', 'multipart/form-data;boundary=AaB03x'""") + jUnitTest.contains(""".param('formParameter', '"formParameterValue"'""") + jUnitTest.contains(""".param('someBooleanParameter', 'true')""") + jUnitTest.contains(""".multiPart('file', 'filename.csv', 'file content'.bytes)""") + } + + @Issue('180') + @Ignore + //TODO: fix multiparts in JUnit + def "should generate proper test code when having multipart parameters with named as map"() { + given: + GroovyDsl contractDsl = GroovyDsl.make { + request { + method "PUT" + url "/multipart" + multipart( + formParameter: value(client(regex('".+"')), server('"formParameterValue"')), + someBooleanParameter: value(client(regex('(true|false)')), server('true')), + file: named( + name: value(client(regex('.+')), server('filename.csv')), + content: value(client(regex('.+')), server('file content'))) + ) + } + response { + status 200 + } + } + MockMvcJUnitMethodBodyBuilder builder = new MockMvcJUnitMethodBodyBuilder(contractDsl) + BlockBuilder blockBuilder = new BlockBuilder(" ") + when: + builder.given(blockBuilder) + def jUnitTest = blockBuilder.toString() + then: + jUnitTest.contains('.multiPart') + } + + +} From d2a6044b3635300463e2f0bf6c9920de1aac43d5 Mon Sep 17 00:00:00 2001 From: Olga Maciaszek-Sharma Date: Fri, 19 Feb 2016 16:15:17 +0100 Subject: [PATCH 05/22] Raised JsonAssert version. Switched to assertThatJson() method. Fixed some tests. --- .../accurest/SingleTestGenerator.groovy | 3 +- .../accurest/builder/MethodBodyBuilder.groovy | 2 +- .../accurest/SingleTestGeneratorSpec.groovy | 4 +- .../JaxRsClientSpockMethodBuilderSpec.groovy | 48 ++-- .../MockMvcJunitMethodBuilderSpec.groovy | 63 ++--- .../MockMvcSpockMethodBuilderSpec.groovy | 267 +++++++++--------- gradle.properties | 2 +- 7 files changed, 196 insertions(+), 193 deletions(-) diff --git a/accurest-core/src/main/groovy/io/codearte/accurest/SingleTestGenerator.groovy b/accurest-core/src/main/groovy/io/codearte/accurest/SingleTestGenerator.groovy index 309173138f..ba23ee1bdb 100644 --- a/accurest-core/src/main/groovy/io/codearte/accurest/SingleTestGenerator.groovy +++ b/accurest-core/src/main/groovy/io/codearte/accurest/SingleTestGenerator.groovy @@ -15,7 +15,8 @@ import static io.codearte.accurest.util.NamesUtil.capitalize @Slf4j class SingleTestGenerator { - private static final String JSON_ASSERT_STATIC_IMPORT = 'com.blogspot.toomuchcoding.jsonassert.JsonAssertion.assertThat' + private static + final String JSON_ASSERT_STATIC_IMPORT = 'com.blogspot.toomuchcoding.jsonassert.JsonAssertion.assertThatJson' private static final String JSON_ASSERT_CLASS = 'com.blogspot.toomuchcoding.jsonassert.JsonAssertion' private final AccurestConfigProperties configProperties diff --git a/accurest-core/src/main/groovy/io/codearte/accurest/builder/MethodBodyBuilder.groovy b/accurest-core/src/main/groovy/io/codearte/accurest/builder/MethodBodyBuilder.groovy index 3f92a12f5e..1702962476 100644 --- a/accurest-core/src/main/groovy/io/codearte/accurest/builder/MethodBodyBuilder.groovy +++ b/accurest-core/src/main/groovy/io/codearte/accurest/builder/MethodBodyBuilder.groovy @@ -152,7 +152,7 @@ abstract class MethodBodyBuilder { appendJsonPath(bb, getResponseAsString()) JsonPaths jsonPaths = JsonToJsonPathsConverter.transformToJsonPathWithTestsSideValues(responseBody) jsonPaths.each { - bb.addLine("assertThat(parsedJson)" + it.method()) + bb.addLine("assertThatJson(parsedJson)" + it.method()) addColonIfRequired(bb) } processBodyElement(bb, "", responseBody) diff --git a/accurest-core/src/test/groovy/io/codearte/accurest/SingleTestGeneratorSpec.groovy b/accurest-core/src/test/groovy/io/codearte/accurest/SingleTestGeneratorSpec.groovy index fbfa267ec4..7a9d560c9b 100644 --- a/accurest-core/src/test/groovy/io/codearte/accurest/SingleTestGeneratorSpec.groovy +++ b/accurest-core/src/test/groovy/io/codearte/accurest/SingleTestGeneratorSpec.groovy @@ -18,12 +18,12 @@ class SingleTestGeneratorSpec extends Specification { static List jUnitClassStrings = ['package test;', 'import com.jayway.jsonpath.DocumentContext;', 'import com.jayway.jsonpath.JsonPath;', 'import org.junit.FixMethodOrder;', 'import org.junit.Ignore;', 'import org.junit.Test;', 'import org.junit.runners.MethodSorters;', - 'import static com.blogspot.toomuchcoding.jsonassert.JsonAssertion.assertThat;', 'import static com.jayway.restassured.module.mockmvc.RestAssuredMockMvc.*;', + 'import static com.blogspot.toomuchcoding.jsonassert.JsonAssertion.assertThatJson;', 'import static com.jayway.restassured.module.mockmvc.RestAssuredMockMvc.*;', '@FixMethodOrder(MethodSorters.NAME_ASCENDING)', '@Test', '@Ignore'] static List spockClassStrings = ['package test', 'import com.jayway.jsonpath.DocumentContext', 'import com.jayway.jsonpath.JsonPath', 'import spock.lang.Ignore', 'import spock.lang.Specification', 'import spock.lang.Stepwise', - 'import static com.blogspot.toomuchcoding.jsonassert.JsonAssertion.assertThat', 'import static com.jayway.restassured.module.mockmvc.RestAssuredMockMvc.*', + 'import static com.blogspot.toomuchcoding.jsonassert.JsonAssertion.assertThatJson', 'import static com.jayway.restassured.module.mockmvc.RestAssuredMockMvc.*', '@Stepwise', '@Ignore'] def setup() { diff --git a/accurest-core/src/test/groovy/io/codearte/accurest/builder/JaxRsClientSpockMethodBuilderSpec.groovy b/accurest-core/src/test/groovy/io/codearte/accurest/builder/JaxRsClientSpockMethodBuilderSpec.groovy index 9662646416..81cfcb2755 100644 --- a/accurest-core/src/test/groovy/io/codearte/accurest/builder/JaxRsClientSpockMethodBuilderSpec.groovy +++ b/accurest-core/src/test/groovy/io/codearte/accurest/builder/JaxRsClientSpockMethodBuilderSpec.groovy @@ -29,8 +29,8 @@ class JaxRsClientSpockMethodBuilderSpec extends Specification implements WireMoc when: builder.appendTo(blockBuilder) then: - blockBuilder.toString().contains("""assertThat(parsedJson).field("property1").isEqualTo("a")""") - blockBuilder.toString().contains("""assertThat(parsedJson).field("property2").isEqualTo("b")""") + blockBuilder.toString().contains("""assertThatJson(parsedJson).field("property1").isEqualTo("a")""") + blockBuilder.toString().contains("""assertThatJson(parsedJson).field("property2").isEqualTo("b")""") and: stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) } @@ -57,9 +57,9 @@ class JaxRsClientSpockMethodBuilderSpec extends Specification implements WireMoc when: builder.appendTo(blockBuilder) then: - blockBuilder.toString().contains("""assertThat(parsedJson).field("property3").isEqualTo(false)""") - blockBuilder.toString().contains("""assertThat(parsedJson).field("property2").isNull()""") - blockBuilder.toString().contains("""assertThat(parsedJson).field("property1").isEqualTo("true")""") + blockBuilder.toString().contains("""assertThatJson(parsedJson).field("property3").isEqualTo(false)""") + blockBuilder.toString().contains("""assertThatJson(parsedJson).field("property2").isNull()""") + blockBuilder.toString().contains("""assertThatJson(parsedJson).field("property1").isEqualTo("true")""") and: stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) } @@ -88,9 +88,9 @@ class JaxRsClientSpockMethodBuilderSpec extends Specification implements WireMoc when: builder.appendTo(blockBuilder) then: - blockBuilder.toString().contains("""assertThat(parsedJson).field("property1").isEqualTo("a")""") - blockBuilder.toString().contains("""assertThat(parsedJson).array("property2").contains("a").isEqualTo("sth")""") - blockBuilder.toString().contains("""assertThat(parsedJson).array("property2").contains("b").isEqualTo("sthElse")""") + blockBuilder.toString().contains("""assertThatJson(parsedJson).field("property1").isEqualTo("a")""") + blockBuilder.toString().contains("""assertThatJson(parsedJson).array("property2").contains("a").isEqualTo("sth")""") + blockBuilder.toString().contains("""assertThatJson(parsedJson).array("property2").contains("b").isEqualTo("sthElse")""") and: stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) } @@ -168,8 +168,8 @@ class JaxRsClientSpockMethodBuilderSpec extends Specification implements WireMoc when: builder.appendTo(blockBuilder) then: - blockBuilder.toString().contains("""assertThat(parsedJson).array().contains("property1").isEqualTo("a")""") - blockBuilder.toString().contains("""assertThat(parsedJson).array().contains("property2").isEqualTo("b")""") + blockBuilder.toString().contains("""assertThatJson(parsedJson).array().contains("property1").isEqualTo("a")""") + blockBuilder.toString().contains("""assertThatJson(parsedJson).array().contains("property2").isEqualTo("b")""") and: stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) } @@ -196,8 +196,8 @@ class JaxRsClientSpockMethodBuilderSpec extends Specification implements WireMoc when: builder.appendTo(blockBuilder) then: - blockBuilder.toString().contains("""assertThat(parsedJson).array("property1").contains("property2").isEqualTo("test1")""") - blockBuilder.toString().contains("""assertThat(parsedJson).array("property1").contains("property3").isEqualTo("test2")""") + blockBuilder.toString().contains("""assertThatJson(parsedJson).array("property1").contains("property2").isEqualTo("test1")""") + blockBuilder.toString().contains("""assertThatJson(parsedJson).array("property1").contains("property3").isEqualTo("test2")""") and: stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) } @@ -224,8 +224,8 @@ class JaxRsClientSpockMethodBuilderSpec extends Specification implements WireMoc when: builder.appendTo(blockBuilder) then: - blockBuilder.toString().contains("""assertThat(parsedJson).field("property2").field("property3").isEqualTo("b")""") - blockBuilder.toString().contains("""assertThat(parsedJson).field("property1").isEqualTo("a")""") + blockBuilder.toString().contains("""assertThatJson(parsedJson).field("property2").field("property3").isEqualTo("b")""") + blockBuilder.toString().contains("""assertThatJson(parsedJson).field("property1").isEqualTo("a")""") and: stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) } @@ -258,15 +258,15 @@ class JaxRsClientSpockMethodBuilderSpec extends Specification implements WireMoc when: builder.appendTo(blockBuilder) then: - blockBuilder.toString().contains("""assertThat(parsedJson).field("property2").matches("[0-9]{3}")""") - blockBuilder.toString().contains("""assertThat(parsedJson).field("property1").isEqualTo("a")""") + blockBuilder.toString().contains("""assertThatJson(parsedJson).field("property2").matches("[0-9]{3}")""") + blockBuilder.toString().contains("""assertThatJson(parsedJson).field("property1").isEqualTo("a")""") and: stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) } def "should generate regex assertions for string objects in response body"() { given: - GroovyDsl contractDsl = GroovyDsl.make { + GroovyDsl contractDsl = GroovyDsl.make { request { method "GET" url "test" @@ -286,8 +286,8 @@ class JaxRsClientSpockMethodBuilderSpec extends Specification implements WireMoc when: builder.appendTo(blockBuilder) then: - blockBuilder.toString().contains("""assertThat(parsedJson).field("property2").matches("[0-9]{3}")""") - blockBuilder.toString().contains("""assertThat(parsedJson).field("property1").isEqualTo("a")""") + blockBuilder.toString().contains("""assertThatJson(parsedJson).field("property2").matches("[0-9]{3}")""") + blockBuilder.toString().contains("""assertThatJson(parsedJson).field("property1").isEqualTo("a")""") and: stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) } @@ -388,8 +388,8 @@ class JaxRsClientSpockMethodBuilderSpec extends Specification implements WireMoc spockTest.contains("queryParam('age', '99'") spockTest.contains("queryParam('name', 'Denis.Stepanov'") spockTest.contains("queryParam('email', 'bob@email.com'") - spockTest.contains("""assertThat(parsedJson).field("property1").isEqualTo("a")""") - spockTest.contains("""assertThat(parsedJson).field("property2").isEqualTo("b")""") + spockTest.contains("""assertThatJson(parsedJson).field("property1").isEqualTo("a")""") + spockTest.contains("""assertThatJson(parsedJson).field("property2").isEqualTo("b")""") and: stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) } @@ -400,7 +400,7 @@ class JaxRsClientSpockMethodBuilderSpec extends Specification implements WireMoc GroovyDsl contractDsl = GroovyDsl.make { request { method 'GET' - url($(stub(regex('/foo/[0-9]+')), test('/foo/123456'))){ + url($(stub(regex('/foo/[0-9]+')), test('/foo/123456'))) { queryParameters { parameter 'limit': $(client(equalTo("20")), server(equalTo("10"))) parameter 'offset': $(client(containing("20")), server(equalTo("20"))) @@ -439,8 +439,8 @@ class JaxRsClientSpockMethodBuilderSpec extends Specification implements WireMoc spockTest.contains("queryParam('age', '99'") spockTest.contains("queryParam('name', 'Denis.Stepanov'") spockTest.contains("queryParam('email', 'bob@email.com'") - spockTest.contains("""assertThat(parsedJson).field("property1").isEqualTo("a")""") - spockTest.contains("""assertThat(parsedJson).field("property2").isEqualTo("b")""") + spockTest.contains("""assertThatJson(parsedJson).field("property1").isEqualTo("a")""") + spockTest.contains("""assertThatJson(parsedJson).field("property2").isEqualTo("b")""") and: stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) } diff --git a/accurest-core/src/test/groovy/io/codearte/accurest/builder/MockMvcJunitMethodBuilderSpec.groovy b/accurest-core/src/test/groovy/io/codearte/accurest/builder/MockMvcJunitMethodBuilderSpec.groovy index 7e78ab2475..f3bd466005 100644 --- a/accurest-core/src/test/groovy/io/codearte/accurest/builder/MockMvcJunitMethodBuilderSpec.groovy +++ b/accurest-core/src/test/groovy/io/codearte/accurest/builder/MockMvcJunitMethodBuilderSpec.groovy @@ -4,7 +4,7 @@ import io.codearte.accurest.dsl.GroovyDsl import io.codearte.accurest.dsl.WireMockStubStrategy import io.codearte.accurest.dsl.WireMockStubVerifier import io.codearte.accurest.file.Contract -import jdk.nashorn.internal.ir.annotations.Ignore +import spock.lang.Ignore import spock.lang.Issue import spock.lang.Specification import spock.lang.Unroll @@ -37,8 +37,8 @@ class MockMvcJunitMethodBuilderSpec extends Specification implements WireMockStu when: builder.appendTo(blockBuilder) then: - blockBuilder.toString().contains('assertThat(parsedJson).field("property1").isEqualTo("a");') - blockBuilder.toString().contains('assertThat(parsedJson).field("property2").isEqualTo("b");') + blockBuilder.toString().contains('assertThatJson(parsedJson).field("property1").isEqualTo("a");') + blockBuilder.toString().contains('assertThatJson(parsedJson).field("property2").isEqualTo("b");') and: stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) } @@ -65,9 +65,9 @@ class MockMvcJunitMethodBuilderSpec extends Specification implements WireMockStu when: builder.appendTo(blockBuilder) then: - blockBuilder.toString().contains("""assertThat(parsedJson).field("property1").isEqualTo("true");""") - blockBuilder.toString().contains("""assertThat(parsedJson).field("property2").isNull();""") - blockBuilder.toString().contains("""assertThat(parsedJson).field("property3").isEqualTo(false);""") + blockBuilder.toString().contains("""assertThatJson(parsedJson).field("property1").isEqualTo("true");""") + blockBuilder.toString().contains("""assertThatJson(parsedJson).field("property2").isNull();""") + blockBuilder.toString().contains("""assertThatJson(parsedJson).field("property3").isEqualTo(false);""") and: stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) } @@ -96,9 +96,9 @@ class MockMvcJunitMethodBuilderSpec extends Specification implements WireMockStu when: builder.appendTo(blockBuilder) then: - blockBuilder.toString().contains("""assertThat(parsedJson).field("property1").isEqualTo("a");""") - blockBuilder.toString().contains("""assertThat(parsedJson).array("property2").contains("a").isEqualTo("sth");""") - blockBuilder.toString().contains("""assertThat(parsedJson).array("property2").contains("b").isEqualTo("sthElse");""") + blockBuilder.toString().contains("""assertThatJson(parsedJson).field("property1").isEqualTo("a");""") + blockBuilder.toString().contains("""assertThatJson(parsedJson).array("property2").contains("a").isEqualTo("sth");""") + blockBuilder.toString().contains("""assertThatJson(parsedJson).array("property2").contains("b").isEqualTo("sthElse");""") and: stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) } @@ -176,8 +176,8 @@ class MockMvcJunitMethodBuilderSpec extends Specification implements WireMockStu when: builder.appendTo(blockBuilder) then: - blockBuilder.toString().contains("""assertThat(parsedJson).field("property").field(7).isEqualTo(0.0);""") - blockBuilder.toString().contains("""assertThat(parsedJson).field("property").field(14).isEqualTo(0.0);""") + blockBuilder.toString().contains("""assertThatJson(parsedJson).field("property").field(7).isEqualTo(0.0);""") + blockBuilder.toString().contains("""assertThatJson(parsedJson).field("property").field(14).isEqualTo(0.0);""") and: stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) } @@ -205,8 +205,8 @@ class MockMvcJunitMethodBuilderSpec extends Specification implements WireMockStu when: builder.appendTo(blockBuilder) then: - blockBuilder.toString().contains("""assertThat(parsedJson).array().contains("property2").isEqualTo("b");""") - blockBuilder.toString().contains("""assertThat(parsedJson).array().contains("property1").isEqualTo("a");""") + blockBuilder.toString().contains("""assertThatJson(parsedJson).array().contains("property2").isEqualTo("b");""") + blockBuilder.toString().contains("""assertThatJson(parsedJson).array().contains("property1").isEqualTo("a");""") and: stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) } @@ -233,8 +233,8 @@ class MockMvcJunitMethodBuilderSpec extends Specification implements WireMockStu when: builder.appendTo(blockBuilder) then: - blockBuilder.toString().contains("""assertThat(parsedJson).array("property1").contains("property2").isEqualTo("test1");""") - blockBuilder.toString().contains("""assertThat(parsedJson).array("property1").contains("property3").isEqualTo("test2");""") + blockBuilder.toString().contains("""assertThatJson(parsedJson).array("property1").contains("property2").isEqualTo("test1");""") + blockBuilder.toString().contains("""assertThatJson(parsedJson).array("property1").contains("property3").isEqualTo("test2");""") and: stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) } @@ -261,8 +261,8 @@ class MockMvcJunitMethodBuilderSpec extends Specification implements WireMockStu when: builder.appendTo(blockBuilder) then: - blockBuilder.toString().contains("""assertThat(parsedJson).field("property2").field("property3").isEqualTo("b");""") - blockBuilder.toString().contains("""assertThat(parsedJson).field("property1").isEqualTo("a");""") + blockBuilder.toString().contains("""assertThatJson(parsedJson).field("property2").field("property3").isEqualTo("b");""") + blockBuilder.toString().contains("""assertThatJson(parsedJson).field("property1").isEqualTo("a");""") and: stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) } @@ -295,8 +295,8 @@ class MockMvcJunitMethodBuilderSpec extends Specification implements WireMockStu when: builder.appendTo(blockBuilder) then: - blockBuilder.toString().contains("""assertThat(parsedJson).field("property2").matches("[0-9]{3}");""") - blockBuilder.toString().contains("""assertThat(parsedJson).field("property1").isEqualTo("a");""") + blockBuilder.toString().contains("""assertThatJson(parsedJson).field("property2").matches("[0-9]{3}");""") + blockBuilder.toString().contains("""assertThatJson(parsedJson).field("property1").isEqualTo("a");""") and: stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) } @@ -324,8 +324,8 @@ class MockMvcJunitMethodBuilderSpec extends Specification implements WireMockStu when: builder.appendTo(blockBuilder) then: - blockBuilder.toString().contains("""assertThat(parsedJson).field("property2").matches("[0-9]{3}");""") - blockBuilder.toString().contains("""assertThat(parsedJson).field("property1").isEqualTo("a");""") + blockBuilder.toString().contains("""assertThatJson(parsedJson).field("property2").matches("[0-9]{3}");""") + blockBuilder.toString().contains("""assertThatJson(parsedJson).field("property1").isEqualTo("a");""") and: stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) } @@ -351,7 +351,7 @@ class MockMvcJunitMethodBuilderSpec extends Specification implements WireMockStu when: builder.appendTo(blockBuilder) then: - blockBuilder.toString().contains("""assertThat(parsedJson).field("property").matches("\\\\d+");""") + blockBuilder.toString().contains("""assertThatJson(parsedJson).field("property").matches("\\\\d+");""") and: stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) } @@ -393,8 +393,8 @@ class MockMvcJunitMethodBuilderSpec extends Specification implements WireMockStu def jUnitTest = blockBuilder.toString() then: jUnitTest.contains('get("/users?limit=10&offset=20&filter=email&sort=name&search=55&age=99&name=Denis.Stepanov&email=bob@email.com")') - jUnitTest.contains('assertThat(parsedJson).field("property1").isEqualTo("a")') - jUnitTest.contains('assertThat(parsedJson).field("property2").isEqualTo("b")') + jUnitTest.contains('assertThatJson(parsedJson).field("property1").isEqualTo("a")') + jUnitTest.contains('assertThatJson(parsedJson).field("property2").isEqualTo("b")') and: stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) } @@ -437,8 +437,8 @@ class MockMvcJunitMethodBuilderSpec extends Specification implements WireMockStu def jUnitTest = blockBuilder.toString() then: jUnitTest.contains('get("/foo/123456?limit=10&offset=20&filter=email&sort=name&search=55&age=99&name=Denis.Stepanov&email=bob@email.com")') - jUnitTest.contains('assertThat(parsedJson).field("property1").isEqualTo("a")') - jUnitTest.contains('assertThat(parsedJson).field("property2").isEqualTo("b")') + jUnitTest.contains('assertThatJson(parsedJson).field("property1").isEqualTo("a")') + jUnitTest.contains('assertThatJson(parsedJson).field("property2").isEqualTo("b")') and: stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) } @@ -591,8 +591,8 @@ class MockMvcJunitMethodBuilderSpec extends Specification implements WireMockStu builder.appendTo(blockBuilder) def jUnitTest = blockBuilder.toString() then: - jUnitTest.contains("""assertThat(parsedJson).array("errors").contains("property").isEqualTo("bank_account_number");""") - jUnitTest.contains("""assertThat(parsedJson).array("errors").contains("message").isEqualTo("incorrect_format");""") + jUnitTest.contains("""assertThatJson(parsedJson).array("errors").contains("property").isEqualTo("bank_account_number");""") + jUnitTest.contains("""assertThatJson(parsedJson).array("errors").contains("message").isEqualTo("incorrect_format");""") and: stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) @@ -659,7 +659,7 @@ class MockMvcJunitMethodBuilderSpec extends Specification implements WireMockStu builder.appendTo(blockBuilder) def jUnitTest = blockBuilder.toString() then: - jUnitTest.contains('''$[?(@.message =~ /User not found by email = \\\\[[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\\\.[a-zA-Z]{2,4}\\\\]/)]''') + jUnitTest.contains('''assertThatJson(parsedJson).field("message").matches("User not found by email = \\\\\\\\[[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\\\\\\\.[a-zA-Z]{2,4}\\\\\\\\]");''') } @@ -674,7 +674,7 @@ class MockMvcJunitMethodBuilderSpec extends Specification implements WireMockStu def jUnitTest = blockBuilder.toString() then: jUnitTest.contains('\\"email\\":\\"abc@abc.com\\"') - jUnitTest.contains('assertThat(parsedJson).field("code").matches("(123123)?");') + jUnitTest.contains('assertThatJson(parsedJson).field("code").matches("(123123)?");') !jUnitTest.contains('''REGEXP''') !jUnitTest.contains('''OPTIONAL''') !jUnitTest.contains('''OptionalProperty''') @@ -940,8 +940,8 @@ World.'''""") } @Issue('180') - @Ignore //TODO: fix multiparts in JUnit + @Ignore def "should generate proper test code when having multipart parameters with named as map"() { given: GroovyDsl contractDsl = GroovyDsl.make { @@ -969,5 +969,4 @@ World.'''""") jUnitTest.contains('.multiPart') } - } diff --git a/accurest-core/src/test/groovy/io/codearte/accurest/builder/MockMvcSpockMethodBuilderSpec.groovy b/accurest-core/src/test/groovy/io/codearte/accurest/builder/MockMvcSpockMethodBuilderSpec.groovy index 56444a53ad..c88781b155 100644 --- a/accurest-core/src/test/groovy/io/codearte/accurest/builder/MockMvcSpockMethodBuilderSpec.groovy +++ b/accurest-core/src/test/groovy/io/codearte/accurest/builder/MockMvcSpockMethodBuilderSpec.groovy @@ -9,6 +9,7 @@ import spock.lang.Specification import spock.lang.Unroll import java.util.regex.Pattern + /** * @author Jakub Kubrynski */ @@ -34,8 +35,8 @@ class MockMvcSpockMethodBuilderSpec extends Specification implements WireMockStu when: builder.appendTo(blockBuilder) then: - blockBuilder.toString().contains("""assertThat(parsedJson).field("property1").isEqualTo("a")""") - blockBuilder.toString().contains("""assertThat(parsedJson).field("property2").isEqualTo("b")""") + blockBuilder.toString().contains("""assertThatJson(parsedJson).field("property1").isEqualTo("a")""") + blockBuilder.toString().contains("""assertThatJson(parsedJson).field("property2").isEqualTo("b")""") and: stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) } @@ -62,9 +63,9 @@ class MockMvcSpockMethodBuilderSpec extends Specification implements WireMockStu when: builder.appendTo(blockBuilder) then: - blockBuilder.toString().contains("""assertThat(parsedJson).field("property1").isEqualTo("true")""") - blockBuilder.toString().contains("""assertThat(parsedJson).field("property2").isNull()""") - blockBuilder.toString().contains("""assertThat(parsedJson).field("property3").isEqualTo(false)""") + blockBuilder.toString().contains("""assertThatJson(parsedJson).field("property1").isEqualTo("true")""") + blockBuilder.toString().contains("""assertThatJson(parsedJson).field("property2").isNull()""") + blockBuilder.toString().contains("""assertThatJson(parsedJson).field("property3").isEqualTo(false)""") and: stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) } @@ -93,9 +94,9 @@ class MockMvcSpockMethodBuilderSpec extends Specification implements WireMockStu when: builder.appendTo(blockBuilder) then: - blockBuilder.toString().contains("""assertThat(parsedJson).field("property1").isEqualTo("a")""") - blockBuilder.toString().contains("""assertThat(parsedJson).array("property2").contains("a").isEqualTo("sth")""") - blockBuilder.toString().contains("""assertThat(parsedJson).array("property2").contains("b").isEqualTo("sthElse")""") + blockBuilder.toString().contains("""assertThatJson(parsedJson).field("property1").isEqualTo("a")""") + blockBuilder.toString().contains("""assertThatJson(parsedJson).array("property2").contains("a").isEqualTo("sth")""") + blockBuilder.toString().contains("""assertThatJson(parsedJson).array("property2").contains("b").isEqualTo("sthElse")""") and: stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) } @@ -173,8 +174,8 @@ class MockMvcSpockMethodBuilderSpec extends Specification implements WireMockStu when: builder.appendTo(blockBuilder) then: - blockBuilder.toString().contains("""assertThat(parsedJson).field("property").field(7).isEqualTo(0.0)""") - blockBuilder.toString().contains("""assertThat(parsedJson).field("property").field(14).isEqualTo(0.0)""") + blockBuilder.toString().contains("""assertThatJson(parsedJson).field("property").field(7).isEqualTo(0.0)""") + blockBuilder.toString().contains("""assertThatJson(parsedJson).field("property").field(14).isEqualTo(0.0)""") and: stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) } @@ -202,8 +203,8 @@ class MockMvcSpockMethodBuilderSpec extends Specification implements WireMockStu when: builder.appendTo(blockBuilder) then: - blockBuilder.toString().contains("""assertThat(parsedJson).array().contains("property2").isEqualTo("b")""") - blockBuilder.toString().contains("""assertThat(parsedJson).array().contains("property1").isEqualTo("a")""") + blockBuilder.toString().contains("""assertThatJson(parsedJson).array().contains("property2").isEqualTo("b")""") + blockBuilder.toString().contains("""assertThatJson(parsedJson).array().contains("property1").isEqualTo("a")""") and: stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) } @@ -230,8 +231,8 @@ class MockMvcSpockMethodBuilderSpec extends Specification implements WireMockStu when: builder.appendTo(blockBuilder) then: - blockBuilder.toString().contains("""assertThat(parsedJson).array("property1").contains("property2").isEqualTo("test1")""") - blockBuilder.toString().contains("""assertThat(parsedJson).array("property1").contains("property3").isEqualTo("test2")""") + blockBuilder.toString().contains("""assertThatJson(parsedJson).array("property1").contains("property2").isEqualTo("test1")""") + blockBuilder.toString().contains("""assertThatJson(parsedJson).array("property1").contains("property3").isEqualTo("test2")""") and: stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) } @@ -258,15 +259,15 @@ class MockMvcSpockMethodBuilderSpec extends Specification implements WireMockStu when: builder.appendTo(blockBuilder) then: - blockBuilder.toString().contains("""assertThat(parsedJson).field("property2").field("property3").isEqualTo("b")""") - blockBuilder.toString().contains("""assertThat(parsedJson).field("property1").isEqualTo("a")""") + blockBuilder.toString().contains("""assertThatJson(parsedJson).field("property2").field("property3").isEqualTo("b")""") + blockBuilder.toString().contains("""assertThatJson(parsedJson).field("property1").isEqualTo("a")""") and: stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) } def "should generate regex assertions for map objects in response body"() { given: - GroovyDsl contractDsl = GroovyDsl.make { + GroovyDsl contractDsl = GroovyDsl.make { request { method "GET" url "test" @@ -292,38 +293,38 @@ class MockMvcSpockMethodBuilderSpec extends Specification implements WireMockStu when: builder.appendTo(blockBuilder) then: - blockBuilder.toString().contains("""assertThat(parsedJson).field("property2").matches("[0-9]{3}")""") - blockBuilder.toString().contains("""assertThat(parsedJson).field("property1").isEqualTo("a")""") + blockBuilder.toString().contains("""assertThatJson(parsedJson).field("property2").matches("[0-9]{3}")""") + blockBuilder.toString().contains("""assertThatJson(parsedJson).field("property1").isEqualTo("a")""") and: stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) } 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') + 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') + + } } - } - } - MockMvcSpockMethodBodyBuilder builder = new MockMvcSpockMethodBodyBuilder(contractDsl) - BlockBuilder blockBuilder = new BlockBuilder(" ") + MockMvcSpockMethodBodyBuilder builder = new MockMvcSpockMethodBodyBuilder(contractDsl) + BlockBuilder blockBuilder = new BlockBuilder(" ") when: - builder.appendTo(blockBuilder) + builder.appendTo(blockBuilder) then: - blockBuilder.toString().contains("""assertThat(parsedJson).field("property2").matches("[0-9]{3}")""") - blockBuilder.toString().contains("""assertThat(parsedJson).field("property1").isEqualTo("a")""") + blockBuilder.toString().contains("""assertThatJson(parsedJson).field("property2").matches("[0-9]{3}")""") + blockBuilder.toString().contains("""assertThatJson(parsedJson).field("property1").isEqualTo("a")""") and: - stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) + stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) } @Issue(["#126", "#143"]) @@ -347,7 +348,7 @@ class MockMvcSpockMethodBuilderSpec extends Specification implements WireMockStu when: builder.appendTo(blockBuilder) then: - blockBuilder.toString().contains("""assertThat(parsedJson).field("property").matches("\\d+")""") + blockBuilder.toString().contains("""assertThatJson(parsedJson).field("property").matches("\\\\d+")""") and: stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) } @@ -389,8 +390,8 @@ class MockMvcSpockMethodBuilderSpec extends Specification implements WireMockStu def spockTest = blockBuilder.toString() then: spockTest.contains('get("/users?limit=10&offset=20&filter=email&sort=name&search=55&age=99&name=Denis.Stepanov&email=bob@email.com")') - spockTest.contains('assertThat(parsedJson).field("property1").isEqualTo("a")') - spockTest.contains('assertThat(parsedJson).field("property2").isEqualTo("b")') + spockTest.contains('assertThatJson(parsedJson).field("property1").isEqualTo("a")') + spockTest.contains('assertThatJson(parsedJson).field("property2").isEqualTo("b")') and: stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) } @@ -401,7 +402,7 @@ class MockMvcSpockMethodBuilderSpec extends Specification implements WireMockStu GroovyDsl contractDsl = GroovyDsl.make { request { method 'GET' - url($(stub(regex('/foo/[0-9]+')), test('/foo/123456'))){ + url($(stub(regex('/foo/[0-9]+')), test('/foo/123456'))) { queryParameters { parameter 'limit': $(client(equalTo("20")), server(equalTo("10"))) parameter 'offset': $(client(containing("20")), server(equalTo("20"))) @@ -433,8 +434,8 @@ class MockMvcSpockMethodBuilderSpec extends Specification implements WireMockStu def spockTest = blockBuilder.toString() then: spockTest.contains('get("/foo/123456?limit=10&offset=20&filter=email&sort=name&search=55&age=99&name=Denis.Stepanov&email=bob@email.com")') - spockTest.contains('assertThat(parsedJson).field("property1").isEqualTo("a")') - spockTest.contains('assertThat(parsedJson).field("property2").isEqualTo("b")') + spockTest.contains('assertThatJson(parsedJson).field("property1").isEqualTo("a")') + spockTest.contains('assertThatJson(parsedJson).field("property2").isEqualTo("b")') and: stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) } @@ -587,8 +588,8 @@ class MockMvcSpockMethodBuilderSpec extends Specification implements WireMockStu builder.appendTo(blockBuilder) def spockTest = blockBuilder.toString() then: - spockTest.contains("""assertThat(parsedJson).array("errors").contains("property").isEqualTo("bank_account_number")""") - spockTest.contains("""assertThat(parsedJson).array("errors").contains("message").isEqualTo("incorrect_format")""") + spockTest.contains("""assertThatJson(parsedJson).array("errors").contains("property").isEqualTo("bank_account_number")""") + spockTest.contains("""assertThatJson(parsedJson).array("errors").contains("message").isEqualTo("incorrect_format")""") and: stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) } @@ -654,7 +655,7 @@ class MockMvcSpockMethodBuilderSpec extends Specification implements WireMockStu builder.appendTo(blockBuilder) def spockTest = blockBuilder.toString() then: - spockTest.contains("""assertThat(parsedJson).field("message").matches("User not found by email = \\\\[[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\\\.[a-zA-Z]{2,4}\\\\]")""") + spockTest.contains("""assertThatJson(parsedJson).field("message").matches("User not found by email = \\\\\\\\[[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\\\\\\\.[a-zA-Z]{2,4}\\\\\\\\]")""") } @Issue('42') @@ -668,67 +669,69 @@ class MockMvcSpockMethodBuilderSpec extends Specification implements WireMockStu def spockTest = blockBuilder.toString() then: spockTest.contains('''"email":"abc@abc.com"''') - spockTest.contains("""assertThat(parsedJson).field("code").matches("(123123)?")""") + spockTest.contains("""assertThatJson(parsedJson).field("code").matches("(123123)?")""") !spockTest.contains('''REGEXP''') !spockTest.contains('''OPTIONAL''') !spockTest.contains('''OptionalProperty''') where: - contractDsl << [ - GroovyDsl.make { - priority 1 - request { - method 'POST' - url '/users/password' - headers { - header 'Content-Type': 'application/json' + contractDsl << [ + GroovyDsl.make { + priority 1 + request { + method 'POST' + url '/users/password' + headers { + header 'Content-Type': 'application/json' + } + body( + email: $(stub(optional(regex(email()))), test('abc@abc.com')), + callback_url: $(stub(regex(hostname())), test('http://partners.com')) + ) } - body( - email: $(stub(optional(regex(email()))), test('abc@abc.com')), - callback_url: $(stub(regex(hostname())), test('http://partners.com')) - ) - } - response { - status 404 - headers { - header 'Content-Type': 'application/json' + response { + status 404 + headers { + header 'Content-Type': 'application/json' + } + body( + code: value(stub("123123"), test(optional("123123"))), + message: "User not found by email = [${value(test(regex(email())), stub('not.existing@user.com'))}]" + ) } - body( - code: value(stub("123123"), test(optional("123123"))), - message: "User not found by email = [${value(test(regex(email())), stub('not.existing@user.com'))}]" - ) - } - }, - GroovyDsl.make { - priority 1 - request { - method 'POST' - url '/users/password' - headers { - header 'Content-Type': 'application/json' - } - body( - """ { + }, + GroovyDsl.make { + priority 1 + request { + method 'POST' + url '/users/password' + headers { + header 'Content-Type': 'application/json' + } + body( + """ { "email" : "${value(stub(optional(regex(email()))), test('abc@abc.com'))}", "callback_url" : "${value(client(regex(hostname())), server('http://partners.com'))}" } """ - ) - } - response { - status 404 - headers { - header 'Content-Type': 'application/json' + ) } - body( - """ { + response { + status 404 + headers { + header 'Content-Type': 'application/json' + } + body( + """ { "code" : "${value(stub(123123), test(optional(123123)))}", - "message" : "User not found by email = [${value(server(regex(email())), client('not.existing@user.com'))}]" + "message" : "User not found by email = [${ + value(server(regex(email())), client('not.existing@user.com')) + }]" } """ - ) + ) + } } - } - ] + ] } @Issue('72') @@ -753,7 +756,7 @@ class MockMvcSpockMethodBuilderSpec extends Specification implements WireMockStu } response { status 200 - body( """{ + body("""{ "fraudCheckStatus": "OK", "rejectionReason": ${value(client(null), server(execute('assertThatRejectionReasonIsNull($it)')))} }""") @@ -791,26 +794,26 @@ class MockMvcSpockMethodBuilderSpec extends Specification implements WireMockStu } body( client: [ - first_name: $(stub(regex(onlyAlphaUnicode())), test('Denis')), - last_name: $(stub(regex(onlyAlphaUnicode())), test('FakeName')), - email: $(stub(regex(email())), test('fakemail@fakegmail.com')), - fax: $(stub(PHONE_NUMBER), test('+xx001213214')), - phone: $(stub(PHONE_NUMBER), test('2223311')), + first_name : $(stub(regex(onlyAlphaUnicode())), test('Denis')), + last_name : $(stub(regex(onlyAlphaUnicode())), test('FakeName')), + email : $(stub(regex(email())), test('fakemail@fakegmail.com')), + fax : $(stub(PHONE_NUMBER), test('+xx001213214')), + phone : $(stub(PHONE_NUMBER), test('2223311')), data_of_birth: $(stub(DATETIME), test('2002-10-22T00:00:00Z')) ], client_id_card: [ - id: $(stub(ANYSTRING), test('ABC12345')), + id : $(stub(ANYSTRING), test('ABC12345')), date_of_issue: $(stub(ANYSTRING), test('2002-10-02T00:00:00Z')), - address: [ - street: $(stub(ANYSTRING), test('Light Street')), - city: $(stub(ANYSTRING), test('Fire')), - region: $(stub(ANYSTRING), test('Skys')), + address : [ + street : $(stub(ANYSTRING), test('Light Street')), + city : $(stub(ANYSTRING), test('Fire')), + region : $(stub(ANYSTRING), test('Skys')), country: $(stub(ANYSTRING), test('HG')), - zip: $(stub(NUMBERS), test('658965')) + zip : $(stub(NUMBERS), test('658965')) ] ], incomes_and_expenses: [ - monthly_income: $(stub(NUMBERS), test('0.0')), + monthly_income : $(stub(NUMBERS), test('0.0')), monthly_loan_repayments: $(stub(NUMBERS), test('100')), monthly_living_expenses: $(stub(NUMBERS), test('22')) ], @@ -897,7 +900,7 @@ World.'''""") } @Issue('180') - def "should generate proper test code when having multipart parameters"(){ + def "should generate proper test code when having multipart parameters"() { given: GroovyDsl contractDsl = GroovyDsl.make { request { @@ -929,32 +932,32 @@ World.'''""") } @Issue('180') - def "should generate proper test code when having multipart parameters with named as map"() { - given: - GroovyDsl contractDsl = GroovyDsl.make { - request { - method "PUT" - url "/multipart" - multipart( - formParameter: value(client(regex('".+"')), server('"formParameterValue"')), - someBooleanParameter: value(client(regex('(true|false)')), server('true')), - file: named( - name: value(client(regex('.+')), server('filename.csv')), - content: value(client(regex('.+')), server('file content'))) - ) - } - response { - status 200 - } - } - MockMvcSpockMethodBodyBuilder builder = new MockMvcSpockMethodBodyBuilder(contractDsl) - BlockBuilder blockBuilder = new BlockBuilder(" ") - when: - builder.given(blockBuilder) - def spockTest = blockBuilder.toString() - then: - spockTest.contains('.multiPart') - } + def "should generate proper test code when having multipart parameters with named as map"() { + given: + GroovyDsl contractDsl = GroovyDsl.make { + request { + method "PUT" + url "/multipart" + multipart( + formParameter: value(client(regex('".+"')), server('"formParameterValue"')), + someBooleanParameter: value(client(regex('(true|false)')), server('true')), + file: named( + name: value(client(regex('.+')), server('filename.csv')), + content: value(client(regex('.+')), server('file content'))) + ) + } + response { + status 200 + } + } + MockMvcSpockMethodBodyBuilder builder = new MockMvcSpockMethodBodyBuilder(contractDsl) + BlockBuilder blockBuilder = new BlockBuilder(" ") + when: + builder.given(blockBuilder) + def spockTest = blockBuilder.toString() + then: + spockTest.contains('.multiPart') + } } diff --git a/gradle.properties b/gradle.properties index bc99f91ba8..fa9182de93 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,4 +2,4 @@ nexusUsername = nexusPassword = wiremockVersion = 2.0.5-beta -jsonassertVersion = 0.1.0 +jsonassertVersion = 0.1.2 From 57c030189bd030ba4417dfd56bd6a45f0371890c Mon Sep 17 00:00:00 2001 From: Olga Maciaszek-Sharma Date: Sun, 21 Feb 2016 18:00:24 +0100 Subject: [PATCH 06/22] Fixed handling execution properties in JUnit tests. --- .../accurest/builder/JUnitMethodBodyBuilder.groovy | 9 ++++++++- .../builder/MockMvcJunitMethodBuilderSpec.groovy | 4 +--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/accurest-core/src/main/groovy/io/codearte/accurest/builder/JUnitMethodBodyBuilder.groovy b/accurest-core/src/main/groovy/io/codearte/accurest/builder/JUnitMethodBodyBuilder.groovy index f6153341d1..d3365490d0 100644 --- a/accurest-core/src/main/groovy/io/codearte/accurest/builder/JUnitMethodBodyBuilder.groovy +++ b/accurest-core/src/main/groovy/io/codearte/accurest/builder/JUnitMethodBodyBuilder.groovy @@ -64,7 +64,14 @@ abstract class JUnitMethodBodyBuilder extends MethodBodyBuilder { @Override protected void processBodyElement(BlockBuilder blockBuilder, String property, Map.Entry entry) { - processBodyElement(blockBuilder, property + """.get(\\\"$entry.key\\\")""", entry.value) + processBodyElement(blockBuilder, property + getMapKeyReferenceString(entry), entry.value) + } + + private String getMapKeyReferenceString(Map.Entry entry) { + if (entry.value instanceof ExecutionProperty){ + return "." + entry.key + } + return """.get(\\\"$entry.key\\\")""" } @Override diff --git a/accurest-core/src/test/groovy/io/codearte/accurest/builder/MockMvcJunitMethodBuilderSpec.groovy b/accurest-core/src/test/groovy/io/codearte/accurest/builder/MockMvcJunitMethodBuilderSpec.groovy index f3bd466005..0fa9e420f0 100644 --- a/accurest-core/src/test/groovy/io/codearte/accurest/builder/MockMvcJunitMethodBuilderSpec.groovy +++ b/accurest-core/src/test/groovy/io/codearte/accurest/builder/MockMvcJunitMethodBuilderSpec.groovy @@ -740,8 +740,6 @@ class MockMvcJunitMethodBuilderSpec extends Specification implements WireMockStu } @Issue('72') - @Ignore - //TODO: fix exec method for jUnit def "should make the execute method work"() { given: GroovyDsl contractDsl = GroovyDsl.make { @@ -781,7 +779,7 @@ class MockMvcJunitMethodBuilderSpec extends Specification implements WireMockStu builder.appendTo(blockBuilder) def jUnitTest = blockBuilder.toString() then: - jUnitTest.contains('''assertThatRejectionReasonIsNull(parsedJson.read('$.rejectionReason'))''') + jUnitTest.contains('''assertThatRejectionReasonIsNull(parsedJson.read("$.rejectionReason"))''') } def "should support inner map and list definitions"() { From 71adb9f1ff249cb6ae131dbf6c120a76d1566f56 Mon Sep 17 00:00:00 2001 From: Olga Maciaszek-Sharma Date: Sun, 21 Feb 2016 18:55:13 +0100 Subject: [PATCH 07/22] Fixed multipart support in JUnit tests. --- .../builder/JUnitMethodBodyBuilder.groovy | 25 +++++++++++++------ .../accurest/builder/MethodBodyBuilder.groovy | 19 +++++++++++--- .../builder/SpockMethodBodyBuilder.groovy | 20 ++++++++------- .../accurest/util/ContentUtils.groovy | 8 +++++- .../MockMvcJunitMethodBuilderSpec.groovy | 13 +++------- .../MockMvcSpockMethodBuilderSpec.groovy | 2 +- 6 files changed, 55 insertions(+), 32 deletions(-) diff --git a/accurest-core/src/main/groovy/io/codearte/accurest/builder/JUnitMethodBodyBuilder.groovy b/accurest-core/src/main/groovy/io/codearte/accurest/builder/JUnitMethodBodyBuilder.groovy index d3365490d0..c5f33b921a 100644 --- a/accurest-core/src/main/groovy/io/codearte/accurest/builder/JUnitMethodBodyBuilder.groovy +++ b/accurest-core/src/main/groovy/io/codearte/accurest/builder/JUnitMethodBodyBuilder.groovy @@ -6,8 +6,12 @@ import groovy.transform.TypeChecked import io.codearte.accurest.dsl.GroovyDsl import io.codearte.accurest.dsl.internal.ExecutionProperty import io.codearte.accurest.dsl.internal.Header +import io.codearte.accurest.dsl.internal.NamedProperty import io.codearte.accurest.dsl.internal.Request +import static groovy.json.StringEscapeUtils.escapeJava +import static io.codearte.accurest.util.ContentUtils.getJavaMultipartFileParameterContent + /** * @author Jakub Kubrynski * @author Olga Maciaszek-Sharma @@ -41,11 +45,6 @@ abstract class JUnitMethodBodyBuilder extends MethodBodyBuilder { return "assertThat(responseBody${property}).isEqualTo(\"${value}\");" } - @Override - protected String getMultipartParameterLine(Map.Entry parameter) { - return null //TODO - } - @Override protected void processBodyElement(BlockBuilder blockBuilder, String property, ExecutionProperty exec) { blockBuilder.addLine("${exec.insertValue("parsedJson.read(\"\\\$$property\")")};") @@ -59,7 +58,7 @@ abstract class JUnitMethodBodyBuilder extends MethodBodyBuilder { @Override protected String convertUnicodeEscapesIfRequired(String json) { String unescapedJson = StringEscapeUtils.unescapeJavaScript(json) - return StringEscapeUtils.escapeJava(unescapedJson) + return escapeJava(unescapedJson) } @Override @@ -68,10 +67,10 @@ abstract class JUnitMethodBodyBuilder extends MethodBodyBuilder { } private String getMapKeyReferenceString(Map.Entry entry) { - if (entry.value instanceof ExecutionProperty){ + if (entry.value instanceof ExecutionProperty) { return "." + entry.key } - return """.get(\\\"$entry.key\\\")""" + return """.get(\\\"$entry.key\\\")""" } @Override @@ -103,4 +102,14 @@ abstract class JUnitMethodBodyBuilder extends MethodBodyBuilder { protected String getBodyString(String bodyAsString) { return ".body(\"$bodyAsString\")" } + + @Override + protected String getMultipartFileParameterContent(String propertyName, NamedProperty propertyValue) { + return getJavaMultipartFileParameterContent(propertyName, propertyValue) + } + + @Override + protected String getParameterString(Map.Entry parameter) { + return """.param("${escapeJava(parameter.key)}", "${escapeJava(parameter.value as String)}")""" + } } diff --git a/accurest-core/src/main/groovy/io/codearte/accurest/builder/MethodBodyBuilder.groovy b/accurest-core/src/main/groovy/io/codearte/accurest/builder/MethodBodyBuilder.groovy index 1702962476..a795923e0e 100644 --- a/accurest-core/src/main/groovy/io/codearte/accurest/builder/MethodBodyBuilder.groovy +++ b/accurest-core/src/main/groovy/io/codearte/accurest/builder/MethodBodyBuilder.groovy @@ -9,6 +9,7 @@ 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.NamedProperty import io.codearte.accurest.dsl.internal.QueryParameter import io.codearte.accurest.dsl.internal.Request import io.codearte.accurest.dsl.internal.Response @@ -19,6 +20,7 @@ import io.codearte.accurest.util.JsonToJsonPathsConverter import io.codearte.accurest.util.MapConverter import static io.codearte.accurest.util.ContentUtils.extractValue +import static io.codearte.accurest.util.ContentUtils.getGroovyMultipartFileParameterContent import static io.codearte.accurest.util.ContentUtils.recognizeContentTypeFromContent import static io.codearte.accurest.util.ContentUtils.recognizeContentTypeFromHeader @@ -50,8 +52,6 @@ abstract class MethodBodyBuilder { protected abstract String getResponseBodyPropertyComparisonString(String property, String value) - protected abstract String getMultipartParameterLine(Map.Entry parameter) - protected abstract void processBodyElement(BlockBuilder blockBuilder, String property, ExecutionProperty exec) protected abstract void processBodyElement(BlockBuilder blockBuilder, String property, Map.Entry entry) @@ -72,6 +72,10 @@ abstract class MethodBodyBuilder { protected abstract String getBodyString(String bodyAsString) + protected abstract String getMultipartFileParameterContent(String propertyName, NamedProperty propertyValue) + + protected abstract String getParameterString(Map.Entry parameter) + void appendTo(BlockBuilder blockBuilder) { blockBuilder.startBlock() @@ -126,7 +130,8 @@ abstract class MethodBodyBuilder { String url = buildUrl(request) String method = request.method.serverValue.toString().toLowerCase() - bb.addLine(/.${method}("$url");/) + bb.addLine(/.${method}("$url")/) + addColonIfRequired(bb) bb.unindent() } @@ -275,7 +280,6 @@ abstract class MethodBodyBuilder { throw new IllegalStateException("URL is not set!") } - @TypeChecked(TypeCheckingMode.SKIP) protected String buildUrlFromUrlPath(Url url) { if (hasQueryParams(url)) { @@ -290,6 +294,13 @@ abstract class MethodBodyBuilder { return MapConverter.getTestSideValues(url.serverValue) } + protected String getMultipartParameterLine(Map.Entry parameter) { + if (parameter.value instanceof NamedProperty) { + return ".multiPart(${getMultipartFileParameterContent(parameter.key, (NamedProperty) parameter.value)})" + } + return getParameterString(parameter) + } + private boolean hasQueryParams(Url url) { return url.queryParameters 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 b61807f689..55dba94b57 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 @@ -9,7 +9,7 @@ import io.codearte.accurest.dsl.internal.Header import io.codearte.accurest.dsl.internal.NamedProperty import io.codearte.accurest.dsl.internal.Request -import static io.codearte.accurest.util.ContentUtils.getMultipartFileParameterContent +import static io.codearte.accurest.util.ContentUtils.getGroovyMultipartFileParameterContent /** * @author Jakub Kubrynski @@ -27,14 +27,6 @@ abstract class SpockMethodBodyBuilder extends MethodBodyBuilder { return "responseBody$property == \"${value}\"" } - @Override - protected String getMultipartParameterLine(Map.Entry parameter) { - if (parameter.value instanceof NamedProperty) { - return ".multiPart(${getMultipartFileParameterContent(parameter.key, (NamedProperty) parameter.value)})" - } - return ".param('$parameter.key', '$parameter.value')" - } - @Override protected void processBodyElement(BlockBuilder blockBuilder, String property, ExecutionProperty exec) { blockBuilder.addLine("${exec.insertValue("parsedJson.read('\\\$$property')")}") @@ -95,4 +87,14 @@ abstract class SpockMethodBodyBuilder extends MethodBodyBuilder { return ".body('''$bodyAsString''')" } + @Override + protected String getMultipartFileParameterContent(String propertyName, NamedProperty propertyValue) { + return getGroovyMultipartFileParameterContent(propertyName, propertyValue) + } + + @Override + protected String getParameterString(Map.Entry parameter) { + return ".param('$parameter.key', '$parameter.value')" + } + } diff --git a/accurest-core/src/main/groovy/io/codearte/accurest/util/ContentUtils.groovy b/accurest-core/src/main/groovy/io/codearte/accurest/util/ContentUtils.groovy index e73990d9f4..87e93b4e9e 100644 --- a/accurest-core/src/main/groovy/io/codearte/accurest/util/ContentUtils.groovy +++ b/accurest-core/src/main/groovy/io/codearte/accurest/util/ContentUtils.groovy @@ -15,6 +15,7 @@ import org.codehaus.groovy.runtime.GStringImpl import java.util.regex.Matcher import java.util.regex.Pattern +import static org.apache.commons.lang3.StringEscapeUtils.escapeJava import static org.apache.commons.lang3.StringEscapeUtils.escapeJson import static org.apache.commons.lang3.StringEscapeUtils.escapeXml11 @@ -321,8 +322,13 @@ class ContentUtils { return ContentType.UNKNOWN } - static String getMultipartFileParameterContent(String propertyName, NamedProperty propertyValue) { + static String getGroovyMultipartFileParameterContent(String propertyName, NamedProperty propertyValue) { return "'$propertyName', '$propertyValue.name.serverValue', '$propertyValue.value.serverValue'.bytes" } + static String getJavaMultipartFileParameterContent(String propertyName, NamedProperty propertyValue) { + return """"${escapeJava(propertyName)}", "${escapeJava(propertyValue.name.serverValue as String)}", "${escapeJava(propertyValue.value.serverValue as String)}".getBytes()""" + } + + } diff --git a/accurest-core/src/test/groovy/io/codearte/accurest/builder/MockMvcJunitMethodBuilderSpec.groovy b/accurest-core/src/test/groovy/io/codearte/accurest/builder/MockMvcJunitMethodBuilderSpec.groovy index 0fa9e420f0..91c5ffb18f 100644 --- a/accurest-core/src/test/groovy/io/codearte/accurest/builder/MockMvcJunitMethodBuilderSpec.groovy +++ b/accurest-core/src/test/groovy/io/codearte/accurest/builder/MockMvcJunitMethodBuilderSpec.groovy @@ -4,7 +4,6 @@ import io.codearte.accurest.dsl.GroovyDsl import io.codearte.accurest.dsl.WireMockStubStrategy import io.codearte.accurest.dsl.WireMockStubVerifier import io.codearte.accurest.file.Contract -import spock.lang.Ignore import spock.lang.Issue import spock.lang.Specification import spock.lang.Unroll @@ -904,8 +903,6 @@ World.'''""") } @Issue('180') - @Ignore - //TODO: fix multiparts in JUnit def "should generate proper test code when having multipart parameters"() { given: GroovyDsl contractDsl = GroovyDsl.make { @@ -931,15 +928,13 @@ World.'''""") builder.given(blockBuilder) def jUnitTest = blockBuilder.toString() then: - jUnitTest.contains("""'content-type', 'multipart/form-data;boundary=AaB03x'""") - jUnitTest.contains(""".param('formParameter', '"formParameterValue"'""") - jUnitTest.contains(""".param('someBooleanParameter', 'true')""") - jUnitTest.contains(""".multiPart('file', 'filename.csv', 'file content'.bytes)""") + jUnitTest.contains('"content-type", "multipart/form-data;boundary=AaB03x"') + jUnitTest.contains('.param("formParameter", "\\"formParameterValue\\"")') + jUnitTest.contains('.param("someBooleanParameter", "true")') + jUnitTest.contains('.multiPart("file", "filename.csv", "file content".getBytes());') } @Issue('180') - //TODO: fix multiparts in JUnit - @Ignore def "should generate proper test code when having multipart parameters with named as map"() { given: GroovyDsl contractDsl = GroovyDsl.make { diff --git a/accurest-core/src/test/groovy/io/codearte/accurest/builder/MockMvcSpockMethodBuilderSpec.groovy b/accurest-core/src/test/groovy/io/codearte/accurest/builder/MockMvcSpockMethodBuilderSpec.groovy index c88781b155..3b7df919f0 100644 --- a/accurest-core/src/test/groovy/io/codearte/accurest/builder/MockMvcSpockMethodBuilderSpec.groovy +++ b/accurest-core/src/test/groovy/io/codearte/accurest/builder/MockMvcSpockMethodBuilderSpec.groovy @@ -922,7 +922,7 @@ World.'''""") MockMvcSpockMethodBodyBuilder builder = new MockMvcSpockMethodBodyBuilder(contractDsl) BlockBuilder blockBuilder = new BlockBuilder(" ") when: - builder.given(blockBuilder) + builder.appendTo(blockBuilder) def spockTest = blockBuilder.toString() then: spockTest.contains("""'content-type', 'multipart/form-data;boundary=AaB03x'""") From 3cae227d19b6cbd09462f6237faf7e83ac492e38 Mon Sep 17 00:00:00 2001 From: Olga Maciaszek-Sharma Date: Sun, 21 Feb 2016 22:47:50 +0100 Subject: [PATCH 08/22] Merged specs for MockMvcSpockMethodBuilder and MockMvcJUnitMethodBuilder. --- .../MockMvcJunitMethodBuilderSpec.groovy | 965 ------------------ ...groovy => MockMvcMethodBuilderSpec.groovy} | 546 ++++++---- 2 files changed, 352 insertions(+), 1159 deletions(-) delete mode 100644 accurest-core/src/test/groovy/io/codearte/accurest/builder/MockMvcJunitMethodBuilderSpec.groovy rename accurest-core/src/test/groovy/io/codearte/accurest/builder/{MockMvcSpockMethodBuilderSpec.groovy => MockMvcMethodBuilderSpec.groovy} (52%) diff --git a/accurest-core/src/test/groovy/io/codearte/accurest/builder/MockMvcJunitMethodBuilderSpec.groovy b/accurest-core/src/test/groovy/io/codearte/accurest/builder/MockMvcJunitMethodBuilderSpec.groovy deleted file mode 100644 index 91c5ffb18f..0000000000 --- a/accurest-core/src/test/groovy/io/codearte/accurest/builder/MockMvcJunitMethodBuilderSpec.groovy +++ /dev/null @@ -1,965 +0,0 @@ -package io.codearte.accurest.builder - -import io.codearte.accurest.dsl.GroovyDsl -import io.codearte.accurest.dsl.WireMockStubStrategy -import io.codearte.accurest.dsl.WireMockStubVerifier -import io.codearte.accurest.file.Contract -import spock.lang.Issue -import spock.lang.Specification -import spock.lang.Unroll - -import java.util.regex.Pattern - -/** - * @author Olga Maciaszek-Sharma - * @since 2015-08-07 - */ -class MockMvcJunitMethodBuilderSpec extends Specification implements WireMockStubVerifier { - - 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" -}""" - } - } - MockMvcJUnitMethodBodyBuilder builder = new MockMvcJUnitMethodBodyBuilder(contractDsl) - BlockBuilder blockBuilder = new BlockBuilder(" ") - when: - builder.appendTo(blockBuilder) - then: - blockBuilder.toString().contains('assertThatJson(parsedJson).field("property1").isEqualTo("a");') - blockBuilder.toString().contains('assertThatJson(parsedJson).field("property2").isEqualTo("b");') - and: - stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) - } - - @Issue("#187") - def "should generate assertions for null and boolean values"() { - given: - GroovyDsl contractDsl = GroovyDsl.make { - request { - method "GET" - url "test" - } - response { - status 200 - body """{ - "property1": "true", - "property2": null, - "property3": false -}""" - } - } - MockMvcJUnitMethodBodyBuilder builder = new MockMvcJUnitMethodBodyBuilder(contractDsl) - BlockBuilder blockBuilder = new BlockBuilder(" ") - when: - builder.appendTo(blockBuilder) - then: - blockBuilder.toString().contains("""assertThatJson(parsedJson).field("property1").isEqualTo("true");""") - blockBuilder.toString().contains("""assertThatJson(parsedJson).field("property2").isNull();""") - blockBuilder.toString().contains("""assertThatJson(parsedJson).field("property3").isEqualTo(false);""") - and: - stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) - } - - @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'] - ] - ) - } - } - MockMvcJUnitMethodBodyBuilder builder = new MockMvcJUnitMethodBodyBuilder(contractDsl) - BlockBuilder blockBuilder = new BlockBuilder(" ") - when: - builder.appendTo(blockBuilder) - then: - blockBuilder.toString().contains("""assertThatJson(parsedJson).field("property1").isEqualTo("a");""") - blockBuilder.toString().contains("""assertThatJson(parsedJson).array("property2").contains("a").isEqualTo("sth");""") - blockBuilder.toString().contains("""assertThatJson(parsedJson).array("property2").contains("b").isEqualTo("sthElse");""") - and: - stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) - } - - @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 - } - } - MockMvcJUnitMethodBodyBuilder builder = new MockMvcJUnitMethodBodyBuilder(contractDsl) - BlockBuilder blockBuilder = new BlockBuilder(" ") - when: - builder.appendTo(blockBuilder) - then: - blockBuilder.toString().contains('.body("{\\"items\\":[\\"HOP\\"]}")') - and: - stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) - } - - @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 - } - } - MockMvcJUnitMethodBodyBuilder builder = new MockMvcJUnitMethodBodyBuilder(contractDsl) - BlockBuilder blockBuilder = new BlockBuilder(" ") - when: - builder.appendTo(blockBuilder) - then: - blockBuilder.toString().contains('.body("\\"property1=VAL1\\"")') - and: - stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) - } - - @Issue("185") - def "should generate assertions for a response body containing map with integers as keys"() { - given: - GroovyDsl contractDsl = GroovyDsl.make { - request { - method "GET" - url "test" - } - response { - status 200 - body( - property: [ - 14: 0.0, - 7 : 0.0 - ] - ) - } - } - MockMvcJUnitMethodBodyBuilder builder = new MockMvcJUnitMethodBodyBuilder(contractDsl) - BlockBuilder blockBuilder = new BlockBuilder(" ") - when: - builder.appendTo(blockBuilder) - then: - blockBuilder.toString().contains("""assertThatJson(parsedJson).field("property").field(7).isEqualTo(0.0);""") - blockBuilder.toString().contains("""assertThatJson(parsedJson).field("property").field(14).isEqualTo(0.0);""") - and: - stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) - } - - 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" -}]""" - } - } - MockMvcJUnitMethodBodyBuilder builder = new MockMvcJUnitMethodBodyBuilder(contractDsl) - BlockBuilder blockBuilder = new BlockBuilder(" ") - when: - builder.appendTo(blockBuilder) - then: - blockBuilder.toString().contains("""assertThatJson(parsedJson).array().contains("property2").isEqualTo("b");""") - blockBuilder.toString().contains("""assertThatJson(parsedJson).array().contains("property1").isEqualTo("a");""") - and: - stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) - } - - 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"} - ] -}""" - } - } - MockMvcJUnitMethodBodyBuilder builder = new MockMvcJUnitMethodBodyBuilder(contractDsl) - BlockBuilder blockBuilder = new BlockBuilder(" ") - when: - builder.appendTo(blockBuilder) - then: - blockBuilder.toString().contains("""assertThatJson(parsedJson).array("property1").contains("property2").isEqualTo("test1");""") - blockBuilder.toString().contains("""assertThatJson(parsedJson).array("property1").contains("property3").isEqualTo("test2");""") - and: - stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) - } - - 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"} -} -''' - } - } - MockMvcJUnitMethodBodyBuilder builder = new MockMvcJUnitMethodBodyBuilder(contractDsl) - BlockBuilder blockBuilder = new BlockBuilder(" ") - when: - builder.appendTo(blockBuilder) - then: - blockBuilder.toString().contains("""assertThatJson(parsedJson).field("property2").field("property3").isEqualTo("b");""") - blockBuilder.toString().contains("""assertThatJson(parsedJson).field("property1").isEqualTo("a");""") - and: - stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) - } - - 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') - - } - - } - } - MockMvcJUnitMethodBodyBuilder builder = new MockMvcJUnitMethodBodyBuilder(contractDsl) - BlockBuilder blockBuilder = new BlockBuilder(" ") - when: - builder.appendTo(blockBuilder) - then: - blockBuilder.toString().contains("""assertThatJson(parsedJson).field("property2").matches("[0-9]{3}");""") - blockBuilder.toString().contains("""assertThatJson(parsedJson).field("property1").isEqualTo("a");""") - and: - stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) - } - - - 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') - - } - - } - } - MockMvcJUnitMethodBodyBuilder builder = new MockMvcJUnitMethodBodyBuilder(contractDsl) - BlockBuilder blockBuilder = new BlockBuilder(" ") - when: - builder.appendTo(blockBuilder) - then: - blockBuilder.toString().contains("""assertThatJson(parsedJson).field("property2").matches("[0-9]{3}");""") - blockBuilder.toString().contains("""assertThatJson(parsedJson).field("property1").isEqualTo("a");""") - and: - stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) - } - - @Issue(["#126", "#143"]) - def "should generate escaped regex assertions for string objects in response body"() { - given: - GroovyDsl contractDsl = GroovyDsl.make { - request { - method "GET" - url "test" - } - response { - status 200 - body("""{"property":" ${value(client('123'), server(regex('\\d+')))}"}""") - headers { - header('Content-Type': 'application/json') - } - } - } - MockMvcJUnitMethodBodyBuilder builder = new MockMvcJUnitMethodBodyBuilder(contractDsl) - BlockBuilder blockBuilder = new BlockBuilder(" ") - when: - builder.appendTo(blockBuilder) - then: - blockBuilder.toString().contains("""assertThatJson(parsedJson).field("property").matches("\\\\d+");""") - and: - stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) - } - - 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")) - parameter 'email': "bob@email.com" - parameter 'hello': $(client(matching("Denis.*")), server(absent())) - parameter 'hello': absent() - } - } - } - response { - status 200 - body """ - { - "property1": "a", - "property2": "b" - } - """ - } - } - MockMvcJUnitMethodBodyBuilder builder = new MockMvcJUnitMethodBodyBuilder(contractDsl) - BlockBuilder blockBuilder = new BlockBuilder(" ") - when: - builder.appendTo(blockBuilder) - def jUnitTest = blockBuilder.toString() - then: - jUnitTest.contains('get("/users?limit=10&offset=20&filter=email&sort=name&search=55&age=99&name=Denis.Stepanov&email=bob@email.com")') - jUnitTest.contains('assertThatJson(parsedJson).field("property1").isEqualTo("a")') - jUnitTest.contains('assertThatJson(parsedJson).field("property2").isEqualTo("b")') - and: - stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) - } - - @Issue('#169') - def "should generate a call with an url path and query parameters with url containing a pattern"() { - given: - GroovyDsl contractDsl = GroovyDsl.make { - request { - method 'GET' - url($(stub(regex('/foo/[0-9]+')), test('/foo/123456'))) { - 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")) - parameter 'email': "bob@email.com" - parameter 'hello': $(client(matching("Denis.*")), server(absent())) - parameter 'hello': absent() - } - } - } - response { - status 200 - body """ - { - "property1": "a", - "property2": "b" - } - """ - } - } - MockMvcJUnitMethodBodyBuilder builder = new MockMvcJUnitMethodBodyBuilder(contractDsl) - BlockBuilder blockBuilder = new BlockBuilder(" ") - when: - builder.appendTo(blockBuilder) - def jUnitTest = blockBuilder.toString() - then: - jUnitTest.contains('get("/foo/123456?limit=10&offset=20&filter=email&sort=name&search=55&age=99&name=Denis.Stepanov&email=bob@email.com")') - jUnitTest.contains('assertThatJson(parsedJson).field("property1").isEqualTo("a")') - jUnitTest.contains('assertThatJson(parsedJson).field("property2").isEqualTo("b")') - and: - stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) - } - - def "should generate test for empty body"() { - given: - GroovyDsl contractDsl = GroovyDsl.make { - request { - method('POST') - url("/ws/payments") - body("") - } - response { - status 406 - } - } - MockMvcJUnitMethodBodyBuilder builder = new MockMvcJUnitMethodBodyBuilder(contractDsl) - BlockBuilder blockBuilder = new BlockBuilder(" ") - when: - builder.appendTo(blockBuilder) - def jUnitTest = blockBuilder.toString() - then: - jUnitTest.contains(".body(\"\\\"\\\"\")") - and: - stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) - } - - def "should generate test for String in response body"() { - given: - GroovyDsl contractDsl = GroovyDsl.make { - request { - method "POST" - url "test" - } - response { - status 200 - body "test" - } - } - MockMvcJUnitMethodBodyBuilder builder = new MockMvcJUnitMethodBodyBuilder(contractDsl) - BlockBuilder blockBuilder = new BlockBuilder(" ") - when: - builder.appendTo(blockBuilder) - def jUnitTest = blockBuilder.toString() - then: - jUnitTest.contains('Object responseBody = (response.getBody().asString());') - jUnitTest.contains('assertThat(responseBody).isEqualTo("test");') - and: - stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) - } - - @Issue('113') - def "should generate regex test for String in response header"() { - given: - GroovyDsl contractDsl = GroovyDsl.make { - request { - method 'POST' - url $(client(regex('/partners/[0-9]+/users')), server('/partners/1000/users')) - headers { header 'Content-Type': 'application/json' } - body( - first_name: 'John', - last_name: 'Smith', - personal_id: '12345678901', - phone_number: '500500500', - invitation_token: '00fec7141bb94793bfe7ae1d0f39bda0', - password: 'john' - ) - } - response { - status 201 - headers { - header 'Location': $(client('http://localhost/partners/1000/users/1001'), server(regex('http://localhost/partners/[0-9]+/users/[0-9]+'))) - } - } - } - MockMvcJUnitMethodBodyBuilder builder = new MockMvcJUnitMethodBodyBuilder(contractDsl) - BlockBuilder blockBuilder = new BlockBuilder(" ") - when: - builder.appendTo(blockBuilder) - def jUnitTest = blockBuilder.toString() - then: - jUnitTest.contains('assertThat(response.header("Location")).matches("http://localhost/partners/[0-9]+/users/[0-9]+");') - and: - stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) - } - - @Issue('115') - def "should generate regex with helper method"() { - given: - GroovyDsl contractDsl = GroovyDsl.make { - request { - method 'POST' - url $(client(regex('/partners/[0-9]+/users')), server('/partners/1000/users')) - headers { header 'Content-Type': 'application/json' } - body( - first_name: 'John', - last_name: 'Smith', - personal_id: '12345678901', - phone_number: '500500500', - invitation_token: '00fec7141bb94793bfe7ae1d0f39bda0', - password: 'john' - ) - } - response { - status 201 - headers { - header 'Location': $(client('http://localhost/partners/1000/users/1001'), server(regex("^${hostname()}/partners/[0-9]+/users/[0-9]+"))) - } - } - } - MockMvcJUnitMethodBodyBuilder builder = new MockMvcJUnitMethodBodyBuilder(contractDsl) - BlockBuilder blockBuilder = new BlockBuilder(" ") - when: - builder.appendTo(blockBuilder) - def jUnitTest = blockBuilder.toString() - then: - jUnitTest.contains('assertThat(response.header("Location")).matches("^((http[s]?|ftp):/)/?([^:/s]+)(:[0-9]{1,5})?/partners/[0-9]+/users/[0-9]+");') - and: - stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) - } - - def "should work with more complex stuff and jsonpaths"() { - given: - GroovyDsl contractDsl = GroovyDsl.make { - priority 10 - request { - method 'POST' - url '/validation/client' - headers { - header 'Content-Type': 'application/json' - } - body( - bank_account_number: '0014282912345698765432161182', - email: 'foo@bar.com', - phone_number: '100299300', - personal_id: 'ABC123456' - ) - } - - response { - status 200 - body(errors: [ - [property: "bank_account_number", message: "incorrect_format"] - ]) - } - } - MockMvcJUnitMethodBodyBuilder builder = new MockMvcJUnitMethodBodyBuilder(contractDsl) - BlockBuilder blockBuilder = new BlockBuilder(" ") - when: - builder.appendTo(blockBuilder) - def jUnitTest = blockBuilder.toString() - then: - jUnitTest.contains("""assertThatJson(parsedJson).array("errors").contains("property").isEqualTo("bank_account_number");""") - jUnitTest.contains("""assertThatJson(parsedJson).array("errors").contains("message").isEqualTo("incorrect_format");""") - and: - stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) - - } - - def "should work properly with GString url"() { - given: - GroovyDsl contractDsl = GroovyDsl.make { - - request { - method 'PUT' - url "/partners/${value(client(regex('^[0-9]*$')), server('11'))}/agents/11/customers/09665703Z" - headers { - header 'Content-Type': 'application/json' - } - body( - first_name: 'Josef', - ) - } - response { - status 422 - } - } - MockMvcJUnitMethodBodyBuilder builder = new MockMvcJUnitMethodBodyBuilder(contractDsl) - BlockBuilder blockBuilder = new BlockBuilder(" ") - when: - builder.appendTo(blockBuilder) - def jUnitTest = blockBuilder.toString() - then: - jUnitTest.contains("/partners/11/agents/11/customers/09665703Z") - and: - stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) - } - - def "should resolve properties in GString with regular expression"() { - given: - GroovyDsl contractDsl = GroovyDsl.make { - priority 1 - request { - method 'POST' - url '/users/password' - headers { - header 'Content-Type': 'application/json' - } - body( - email: $(client(regex(email())), server('not.existing@user.com')), - callback_url: $(client(regex(hostname())), server('http://partners.com')) - ) - } - response { - status 404 - headers { - header 'Content-Type': 'application/json' - } - body( - code: 4, - message: "User not found by email = [${value(server(regex(email())), client('not.existing@user.com'))}]" - ) - } - } - MockMvcJUnitMethodBodyBuilder builder = new MockMvcJUnitMethodBodyBuilder(contractDsl) - BlockBuilder blockBuilder = new BlockBuilder(" ") - when: - builder.appendTo(blockBuilder) - def jUnitTest = blockBuilder.toString() - then: - jUnitTest.contains('''assertThatJson(parsedJson).field("message").matches("User not found by email = \\\\\\\\[[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\\\\\\\.[a-zA-Z]{2,4}\\\\\\\\]");''') - } - - - @Issue('42') - @Unroll - def "should not omit the optional field in the test creation"() { - given: - MockMvcJUnitMethodBodyBuilder builder = new MockMvcJUnitMethodBodyBuilder(contractDsl) - BlockBuilder blockBuilder = new BlockBuilder(" ") - when: - builder.appendTo(blockBuilder) - def jUnitTest = blockBuilder.toString() - then: - jUnitTest.contains('\\"email\\":\\"abc@abc.com\\"') - jUnitTest.contains('assertThatJson(parsedJson).field("code").matches("(123123)?");') - !jUnitTest.contains('''REGEXP''') - !jUnitTest.contains('''OPTIONAL''') - !jUnitTest.contains('''OptionalProperty''') - where: - contractDsl << [ - GroovyDsl.make { - priority 1 - request { - method 'POST' - url '/users/password' - headers { - header 'Content-Type': 'application/json' - } - body( - email: $(stub(optional(regex(email()))), test('abc@abc.com')), - callback_url: $(stub(regex(hostname())), test('http://partners.com')) - ) - } - response { - status 404 - headers { - header 'Content-Type': 'application/json' - } - body( - code: value(stub("123123"), test(optional("123123"))), - message: "User not found by email = [${value(test(regex(email())), stub('not.existing@user.com'))}]" - ) - } - }, - GroovyDsl.make { - priority 1 - request { - method 'POST' - url '/users/password' - headers { - header 'Content-Type': 'application/json' - } - body( - """ { - "email" : "${value(stub(optional(regex(email()))), test('abc@abc.com'))}", - "callback_url" : "${value(client(regex(hostname())), server('http://partners.com'))}" - } - """ - ) - } - response { - status 404 - headers { - header 'Content-Type': 'application/json' - } - body( - """ { - "code" : "${value(stub(123123), test(optional(123123)))}", - "message" : "User not found by email = [${ - value(server(regex(email())), client('not.existing@user.com')) - }]" - } - """ - ) - } - } - ] - } - - @Issue('72') - def "should make the execute method work"() { - given: - GroovyDsl contractDsl = GroovyDsl.make { - request { - method """PUT""" - url """/fraudcheck""" - body(""" - { - "clientPesel":"${value(client(regex('[0-9]{10}')), server('1234567890'))}", - "loanAmount":123.123 - } - """ - ) - headers { - header("""Content-Type""", """application/vnd.fraud.v1+json""") - - } - - } - response { - status 200 - body("""{ - "fraudCheckStatus": "OK", - "rejectionReason": ${value(client(null), server(execute('assertThatRejectionReasonIsNull($it)')))} -}""") - headers { - header('Content-Type': 'application/vnd.fraud.v1+json') - - } - - } - - } - MockMvcJUnitMethodBodyBuilder builder = new MockMvcJUnitMethodBodyBuilder(contractDsl) - BlockBuilder blockBuilder = new BlockBuilder(" ") - when: - builder.appendTo(blockBuilder) - def jUnitTest = blockBuilder.toString() - then: - jUnitTest.contains('''assertThatRejectionReasonIsNull(parsedJson.read("$.rejectionReason"))''') - } - - def "should support inner map and list definitions"() { - given: - - Pattern PHONE_NUMBER = Pattern.compile(/[+\w]*/) - Pattern ANYSTRING = Pattern.compile(/.*/) - Pattern NUMBERS = Pattern.compile(/[\d\.]*/) - Pattern DATETIME = ANYSTRING - - GroovyDsl contractDsl = GroovyDsl.make { - request { - method "PUT" - url "/v1/payments/e86df6f693de4b35ae648464c5b0dc09/client_data" - headers { - header('Content-Type': 'application/json') - } - body( - client: [ - first_name : $(stub(regex(onlyAlphaUnicode())), test('Denis')), - last_name : $(stub(regex(onlyAlphaUnicode())), test('FakeName')), - email : $(stub(regex(email())), test('fakemail@fakegmail.com')), - fax : $(stub(PHONE_NUMBER), test('+xx001213214')), - phone : $(stub(PHONE_NUMBER), test('2223311')), - data_of_birth: $(stub(DATETIME), test('2002-10-22T00:00:00Z')) - ], - client_id_card: [ - id : $(stub(ANYSTRING), test('ABC12345')), - date_of_issue: $(stub(ANYSTRING), test('2002-10-02T00:00:00Z')), - address : [ - street : $(stub(ANYSTRING), test('Light Street')), - city : $(stub(ANYSTRING), test('Fire')), - region : $(stub(ANYSTRING), test('Skys')), - country: $(stub(ANYSTRING), test('HG')), - zip : $(stub(NUMBERS), test('658965')) - ] - ], - incomes_and_expenses: [ - monthly_income : $(stub(NUMBERS), test('0.0')), - monthly_loan_repayments: $(stub(NUMBERS), test('100')), - monthly_living_expenses: $(stub(NUMBERS), test('22')) - ], - additional_info: [ - allow_to_contact: $(stub(optional(regex(anyBoolean()))), test('true')) - ] - ) - } - response { - status 200 - headers { - header('Content-Type': 'application/json') - } - } - } - MockMvcJUnitMethodBodyBuilder builder = new MockMvcJUnitMethodBodyBuilder(contractDsl) - BlockBuilder blockBuilder = new BlockBuilder(" ") - when: - builder.appendTo(blockBuilder) - def jUnitTest = blockBuilder.toString() - then: - jUnitTest.contains '\\"street\\":\\"Light Street\\"' - !jUnitTest.contains("clientValue") - !jUnitTest.contains("cursor") - } - - def "shouldn't generate unicode escape characters"() { - given: - Pattern ONLY_ALPHA_UNICODE = Pattern.compile(/[\p{L}]*/) - - GroovyDsl contractDsl = GroovyDsl.make { - request { - method "PUT" - url "/v1/payments/e86df6f693de4b35ae648464c5b0dc09/енев" - headers { - header('Content-Type': 'application/json') - } - body( - client: [ - first_name: $(stub(ONLY_ALPHA_UNICODE), test('Пенева')), - last_name : $(stub(ONLY_ALPHA_UNICODE), test('Пенева')) - ] - ) - } - response { - status 200 - headers { - header('Content-Type': 'application/json') - } - } - } - MockMvcJUnitMethodBodyBuilder builder = new MockMvcJUnitMethodBodyBuilder(contractDsl) - BlockBuilder blockBuilder = new BlockBuilder(" ") - when: - builder.appendTo(blockBuilder) - def jUnitTest = blockBuilder.toString() - then: - !jUnitTest.contains("\\u041f") - } - - @Issue('177') - def "should generate proper test code when having multiline body"() { - given: - GroovyDsl contractDsl = GroovyDsl.make { - request { - method "PUT" - url "/multiline" - body('''hello, -World.''') - } - response { - status 200 - } - } - MockMvcSpockMethodBodyBuilder builder = new MockMvcSpockMethodBodyBuilder(contractDsl) - BlockBuilder blockBuilder = new BlockBuilder(" ") - when: - builder.given(blockBuilder) - def spockTest = blockBuilder.toString() - then: - spockTest.contains("""'''hello, -World.'''""") - } - - @Issue('180') - def "should generate proper test code when having multipart parameters"() { - given: - GroovyDsl contractDsl = GroovyDsl.make { - request { - method "PUT" - url "/multipart" - headers { - header('content-type', 'multipart/form-data;boundary=AaB03x') - } - multipart( - formParameter: value(client(regex('.+')), server('"formParameterValue"')), - someBooleanParameter: value(client(regex('(true|false)')), server('true')), - file: named(value(client(regex('.+')), server('filename.csv')), value(client(regex('.+')), server('file content'))) - ) - } - response { - status 200 - } - } - MockMvcJUnitMethodBodyBuilder builder = new MockMvcJUnitMethodBodyBuilder(contractDsl) - BlockBuilder blockBuilder = new BlockBuilder(" ") - when: - builder.given(blockBuilder) - def jUnitTest = blockBuilder.toString() - then: - jUnitTest.contains('"content-type", "multipart/form-data;boundary=AaB03x"') - jUnitTest.contains('.param("formParameter", "\\"formParameterValue\\"")') - jUnitTest.contains('.param("someBooleanParameter", "true")') - jUnitTest.contains('.multiPart("file", "filename.csv", "file content".getBytes());') - } - - @Issue('180') - def "should generate proper test code when having multipart parameters with named as map"() { - given: - GroovyDsl contractDsl = GroovyDsl.make { - request { - method "PUT" - url "/multipart" - multipart( - formParameter: value(client(regex('".+"')), server('"formParameterValue"')), - someBooleanParameter: value(client(regex('(true|false)')), server('true')), - file: named( - name: value(client(regex('.+')), server('filename.csv')), - content: value(client(regex('.+')), server('file content'))) - ) - } - response { - status 200 - } - } - MockMvcJUnitMethodBodyBuilder builder = new MockMvcJUnitMethodBodyBuilder(contractDsl) - BlockBuilder blockBuilder = new BlockBuilder(" ") - when: - builder.given(blockBuilder) - def jUnitTest = blockBuilder.toString() - then: - jUnitTest.contains('.multiPart') - } - -} diff --git a/accurest-core/src/test/groovy/io/codearte/accurest/builder/MockMvcSpockMethodBuilderSpec.groovy b/accurest-core/src/test/groovy/io/codearte/accurest/builder/MockMvcMethodBuilderSpec.groovy similarity index 52% rename from accurest-core/src/test/groovy/io/codearte/accurest/builder/MockMvcSpockMethodBuilderSpec.groovy rename to accurest-core/src/test/groovy/io/codearte/accurest/builder/MockMvcMethodBuilderSpec.groovy index 3b7df919f0..14153a93d6 100644 --- a/accurest-core/src/test/groovy/io/codearte/accurest/builder/MockMvcSpockMethodBuilderSpec.groovy +++ b/accurest-core/src/test/groovy/io/codearte/accurest/builder/MockMvcMethodBuilderSpec.groovy @@ -5,6 +5,7 @@ import io.codearte.accurest.dsl.WireMockStubStrategy import io.codearte.accurest.dsl.WireMockStubVerifier import io.codearte.accurest.file.Contract import spock.lang.Issue +import spock.lang.Shared import spock.lang.Specification import spock.lang.Unroll @@ -13,9 +14,70 @@ import java.util.regex.Pattern /** * @author Jakub Kubrynski */ -class MockMvcSpockMethodBuilderSpec extends Specification implements WireMockStubVerifier { +class MockMvcMethodBuilderSpec extends Specification implements WireMockStubVerifier { - def "should generate assertions for simple response body"() { + @Shared + GroovyDsl dslWithOptionalsInString = GroovyDsl.make { + priority 1 + request { + method 'POST' + url '/users/password' + headers { + header 'Content-Type': 'application/json' + } + body( + email: $(stub(optional(regex(email()))), test('abc@abc.com')), + callback_url: $(stub(regex(hostname())), test('http://partners.com')) + ) + } + response { + status 404 + headers { + header 'Content-Type': 'application/json' + } + body( + code: value(stub("123123"), test(optional("123123"))), + message: "User not found by email = [${value(test(regex(email())), stub('not.existing@user.com'))}]" + ) + } + } + + @Shared + GroovyDsl dslWithOptionals = GroovyDsl.make { + priority 1 + request { + method 'POST' + url '/users/password' + headers { + header 'Content-Type': 'application/json' + } + body( + """ { + "email" : "${value(stub(optional(regex(email()))), test('abc@abc.com'))}", + "callback_url" : "${value(client(regex(hostname())), server('http://partners.com'))}" + } + """ + ) + } + response { + status 404 + headers { + header 'Content-Type': 'application/json' + } + body( + """ { + "code" : "${value(stub(123123), test(optional(123123)))}", + "message" : "User not found by email = [${ + value(server(regex(email())), client('not.existing@user.com')) + }]" + } + """ + ) + } + } + + @Unroll + def "should generate assertions for simple response body with #methodBuilderName"() { given: GroovyDsl contractDsl = GroovyDsl.make { request { @@ -30,7 +92,7 @@ class MockMvcSpockMethodBuilderSpec extends Specification implements WireMockStu }""" } } - MockMvcSpockMethodBodyBuilder builder = new MockMvcSpockMethodBodyBuilder(contractDsl) + MethodBodyBuilder builder = methodBuilder(contractDsl) BlockBuilder blockBuilder = new BlockBuilder(" ") when: builder.appendTo(blockBuilder) @@ -38,11 +100,16 @@ class MockMvcSpockMethodBuilderSpec extends Specification implements WireMockStu blockBuilder.toString().contains("""assertThatJson(parsedJson).field("property1").isEqualTo("a")""") blockBuilder.toString().contains("""assertThatJson(parsedJson).field("property2").isEqualTo("b")""") and: - stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) + stubMappingIsValidWireMockStub(contractDsl) + where: + methodBuilderName | methodBuilder + "MockMvcSpockMethodBuilder" | { dsl -> new MockMvcSpockMethodBodyBuilder(dsl) } + "MockMvcJUnitMethodBuilder" | { dsl -> new MockMvcJUnitMethodBodyBuilder(dsl) } } @Issue("#187") - def "should generate assertions for null and boolean values"() { + @Unroll + def "should generate assertions for null and boolean values with #methodBuilderName"() { given: GroovyDsl contractDsl = GroovyDsl.make { request { @@ -58,7 +125,7 @@ class MockMvcSpockMethodBuilderSpec extends Specification implements WireMockStu }""" } } - MockMvcSpockMethodBodyBuilder builder = new MockMvcSpockMethodBodyBuilder(contractDsl) + MethodBodyBuilder builder = methodBuilder(contractDsl) BlockBuilder blockBuilder = new BlockBuilder(" ") when: builder.appendTo(blockBuilder) @@ -67,11 +134,16 @@ class MockMvcSpockMethodBuilderSpec extends Specification implements WireMockStu blockBuilder.toString().contains("""assertThatJson(parsedJson).field("property2").isNull()""") blockBuilder.toString().contains("""assertThatJson(parsedJson).field("property3").isEqualTo(false)""") and: - stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) + stubMappingIsValidWireMockStub(contractDsl) + where: + methodBuilderName | methodBuilder + "MockMvcSpockMethodBuilder" | { dsl -> new MockMvcSpockMethodBodyBuilder(dsl) } + "MockMvcJUnitMethodBuilder" | { dsl -> new MockMvcJUnitMethodBodyBuilder(dsl) } } @Issue("#79") - def "should generate assertions for simple response body constructed from map with a list"() { + @Unroll + def "should generate assertions for simple response body constructed from map with a list with #methodBuilderName"() { given: GroovyDsl contractDsl = GroovyDsl.make { request { @@ -89,7 +161,7 @@ class MockMvcSpockMethodBuilderSpec extends Specification implements WireMockStu ) } } - MockMvcSpockMethodBodyBuilder builder = new MockMvcSpockMethodBodyBuilder(contractDsl) + MethodBodyBuilder builder = methodBuilder(contractDsl) BlockBuilder blockBuilder = new BlockBuilder(" ") when: builder.appendTo(blockBuilder) @@ -98,11 +170,16 @@ class MockMvcSpockMethodBuilderSpec extends Specification implements WireMockStu blockBuilder.toString().contains("""assertThatJson(parsedJson).array("property2").contains("a").isEqualTo("sth")""") blockBuilder.toString().contains("""assertThatJson(parsedJson).array("property2").contains("b").isEqualTo("sthElse")""") and: - stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) + stubMappingIsValidWireMockStub(contractDsl) + where: + methodBuilderName | methodBuilder + "MockMvcSpockMethodBuilder" | { dsl -> new MockMvcSpockMethodBodyBuilder(dsl) } + "MockMvcJUnitMethodBuilder" | { dsl -> new MockMvcJUnitMethodBodyBuilder(dsl) } } @Issue("#82") - def "should generate proper request when body constructed from map with a list"() { + @Unroll + def "should generate proper request when body constructed from map with a list #methodBuilderName"() { given: GroovyDsl contractDsl = GroovyDsl.make { request { @@ -116,18 +193,23 @@ class MockMvcSpockMethodBuilderSpec extends Specification implements WireMockStu status 200 } } - MockMvcSpockMethodBodyBuilder builder = new MockMvcSpockMethodBodyBuilder(contractDsl) + MethodBodyBuilder builder = methodBuilder(contractDsl) BlockBuilder blockBuilder = new BlockBuilder(" ") when: builder.appendTo(blockBuilder) then: - blockBuilder.toString().contains(""".body('''{\"items\":[\"HOP\"]}''')""") + blockBuilder.toString().contains(bodyString) and: - stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) + stubMappingIsValidWireMockStub(contractDsl) + where: + methodBuilderName | methodBuilder | bodyString + "MockMvcSpockMethodBuilder" | { dsl -> new MockMvcSpockMethodBodyBuilder(dsl) } | """.body('''{\"items\":[\"HOP\"]}''')""" + "MockMvcJUnitMethodBuilder" | { dsl -> new MockMvcJUnitMethodBodyBuilder(dsl) } | '.body("{\\"items\\":[\\"HOP\\"]}")' } @Issue("#88") - def "should generate proper request when body constructed from GString"() { + @Unroll + def "should generate proper request when body constructed from GString with #methodBuilderName"() { given: GroovyDsl contractDsl = GroovyDsl.make { request { @@ -141,18 +223,23 @@ class MockMvcSpockMethodBuilderSpec extends Specification implements WireMockStu status 200 } } - MockMvcSpockMethodBodyBuilder builder = new MockMvcSpockMethodBodyBuilder(contractDsl) + MethodBodyBuilder builder = methodBuilder(contractDsl) BlockBuilder blockBuilder = new BlockBuilder(" ") when: builder.appendTo(blockBuilder) then: - blockBuilder.toString().contains(""".body('''property1=VAL1''')""") + blockBuilder.toString().contains(bodyString) and: - stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) + stubMappingIsValidWireMockStub(contractDsl) + where: + methodBuilderName | methodBuilder | bodyString + "MockMvcSpockMethodBuilder" | { dsl -> new MockMvcSpockMethodBodyBuilder(dsl) } | """.body('''property1=VAL1''')""" + "MockMvcJUnitMethodBuilder" | { dsl -> new MockMvcJUnitMethodBodyBuilder(dsl) } | '.body("\\"property1=VAL1\\"")' } @Issue("185") - def "should generate assertions for a response body containing map with integers as keys"() { + @Unroll + def "should generate assertions for a response body containing map with integers as keys with #methodBuilderName"() { given: GroovyDsl contractDsl = GroovyDsl.make { request { @@ -169,7 +256,7 @@ class MockMvcSpockMethodBuilderSpec extends Specification implements WireMockStu ) } } - MockMvcSpockMethodBodyBuilder builder = new MockMvcSpockMethodBodyBuilder(contractDsl) + MethodBodyBuilder builder = methodBuilder(contractDsl) BlockBuilder blockBuilder = new BlockBuilder(" ") when: builder.appendTo(blockBuilder) @@ -177,10 +264,15 @@ class MockMvcSpockMethodBuilderSpec extends Specification implements WireMockStu blockBuilder.toString().contains("""assertThatJson(parsedJson).field("property").field(7).isEqualTo(0.0)""") blockBuilder.toString().contains("""assertThatJson(parsedJson).field("property").field(14).isEqualTo(0.0)""") and: - stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) + stubMappingIsValidWireMockStub(contractDsl) + where: + methodBuilderName | methodBuilder + "MockMvcSpockMethodBuilder" | { dsl -> new MockMvcSpockMethodBodyBuilder(dsl) } + "MockMvcJUnitMethodBuilder" | { dsl -> new MockMvcJUnitMethodBodyBuilder(dsl) } } - def "should generate assertions for array in response body"() { + @Unroll + def "should generate assertions for array in response body with #methodBuilderName"() { given: GroovyDsl contractDsl = GroovyDsl.make { request { @@ -198,7 +290,7 @@ class MockMvcSpockMethodBuilderSpec extends Specification implements WireMockStu }]""" } } - MockMvcSpockMethodBodyBuilder builder = new MockMvcSpockMethodBodyBuilder(contractDsl) + MethodBodyBuilder builder = methodBuilder(contractDsl) BlockBuilder blockBuilder = new BlockBuilder(" ") when: builder.appendTo(blockBuilder) @@ -206,10 +298,15 @@ class MockMvcSpockMethodBuilderSpec extends Specification implements WireMockStu blockBuilder.toString().contains("""assertThatJson(parsedJson).array().contains("property2").isEqualTo("b")""") blockBuilder.toString().contains("""assertThatJson(parsedJson).array().contains("property1").isEqualTo("a")""") and: - stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) + stubMappingIsValidWireMockStub(contractDsl) + where: + methodBuilderName | methodBuilder + "MockMvcSpockMethodBuilder" | { dsl -> new MockMvcSpockMethodBodyBuilder(dsl) } + "MockMvcJUnitMethodBuilder" | { dsl -> new MockMvcJUnitMethodBodyBuilder(dsl) } } - def "should generate assertions for array inside response body element"() { + @Unroll + def "should generate assertions for array inside response body element with #methodBuilderName"() { given: GroovyDsl contractDsl = GroovyDsl.make { request { @@ -226,7 +323,7 @@ class MockMvcSpockMethodBuilderSpec extends Specification implements WireMockStu }""" } } - MockMvcSpockMethodBodyBuilder builder = new MockMvcSpockMethodBodyBuilder(contractDsl) + MethodBodyBuilder builder = methodBuilder(contractDsl) BlockBuilder blockBuilder = new BlockBuilder(" ") when: builder.appendTo(blockBuilder) @@ -234,10 +331,15 @@ class MockMvcSpockMethodBuilderSpec extends Specification implements WireMockStu blockBuilder.toString().contains("""assertThatJson(parsedJson).array("property1").contains("property2").isEqualTo("test1")""") blockBuilder.toString().contains("""assertThatJson(parsedJson).array("property1").contains("property3").isEqualTo("test2")""") and: - stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) + stubMappingIsValidWireMockStub(contractDsl) + where: + methodBuilderName | methodBuilder + "MockMvcSpockMethodBuilder" | { dsl -> new MockMvcSpockMethodBodyBuilder(dsl) } + "MockMvcJUnitMethodBuilder" | { dsl -> new MockMvcJUnitMethodBodyBuilder(dsl) } } - def "should generate assertions for nested objects in response body"() { + @Unroll + def "should generate assertions for nested objects in response body with #methodBuilderName"() { given: GroovyDsl contractDsl = GroovyDsl.make { request { @@ -254,7 +356,7 @@ class MockMvcSpockMethodBuilderSpec extends Specification implements WireMockStu ''' } } - MockMvcSpockMethodBodyBuilder builder = new MockMvcSpockMethodBodyBuilder(contractDsl) + MethodBodyBuilder builder = methodBuilder(contractDsl) BlockBuilder blockBuilder = new BlockBuilder(" ") when: builder.appendTo(blockBuilder) @@ -262,10 +364,15 @@ class MockMvcSpockMethodBuilderSpec extends Specification implements WireMockStu blockBuilder.toString().contains("""assertThatJson(parsedJson).field("property2").field("property3").isEqualTo("b")""") blockBuilder.toString().contains("""assertThatJson(parsedJson).field("property1").isEqualTo("a")""") and: - stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) + stubMappingIsValidWireMockStub(contractDsl) + where: + methodBuilderName | methodBuilder + "MockMvcSpockMethodBuilder" | { dsl -> new MockMvcSpockMethodBodyBuilder(dsl) } + "MockMvcJUnitMethodBuilder" | { dsl -> new MockMvcJUnitMethodBodyBuilder(dsl) } } - def "should generate regex assertions for map objects in response body"() { + @Unroll + def "should generate regex assertions for map objects in response body with #methodBuilderName"() { given: GroovyDsl contractDsl = GroovyDsl.make { request { @@ -283,12 +390,10 @@ class MockMvcSpockMethodBuilderSpec extends Specification implements WireMockStu ) headers { header('Content-Type': 'application/json') - } - } } - MockMvcSpockMethodBodyBuilder builder = new MockMvcSpockMethodBodyBuilder(contractDsl) + MethodBodyBuilder builder = methodBuilder(contractDsl) BlockBuilder blockBuilder = new BlockBuilder(" ") when: builder.appendTo(blockBuilder) @@ -296,10 +401,15 @@ class MockMvcSpockMethodBuilderSpec extends Specification implements WireMockStu blockBuilder.toString().contains("""assertThatJson(parsedJson).field("property2").matches("[0-9]{3}")""") blockBuilder.toString().contains("""assertThatJson(parsedJson).field("property1").isEqualTo("a")""") and: - stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) + stubMappingIsValidWireMockStub(contractDsl) + where: + methodBuilderName | methodBuilder + "MockMvcSpockMethodBuilder" | { dsl -> new MockMvcSpockMethodBodyBuilder(dsl) } + "MockMvcJUnitMethodBuilder" | { dsl -> new MockMvcJUnitMethodBodyBuilder(dsl) } } - def "should generate regex assertions for string objects in response body"() { + @Unroll + def "should generate regex assertions for string objects in response body with #methodBuilderName"() { given: GroovyDsl contractDsl = GroovyDsl.make { request { @@ -311,12 +421,10 @@ class MockMvcSpockMethodBuilderSpec extends Specification implements WireMockStu body("""{"property1":"a","property2":"${value(client('123'), server(regex('[0-9]{3}')))}"}""") headers { header('Content-Type': 'application/json') - } - } } - MockMvcSpockMethodBodyBuilder builder = new MockMvcSpockMethodBodyBuilder(contractDsl) + MethodBodyBuilder builder = methodBuilder(contractDsl) BlockBuilder blockBuilder = new BlockBuilder(" ") when: builder.appendTo(blockBuilder) @@ -324,11 +432,16 @@ class MockMvcSpockMethodBuilderSpec extends Specification implements WireMockStu blockBuilder.toString().contains("""assertThatJson(parsedJson).field("property2").matches("[0-9]{3}")""") blockBuilder.toString().contains("""assertThatJson(parsedJson).field("property1").isEqualTo("a")""") and: - stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) + stubMappingIsValidWireMockStub(contractDsl) + where: + methodBuilderName | methodBuilder + "MockMvcSpockMethodBuilder" | { dsl -> new MockMvcSpockMethodBodyBuilder(dsl) } + "MockMvcJUnitMethodBuilder" | { dsl -> new MockMvcJUnitMethodBodyBuilder(dsl) } } @Issue(["#126", "#143"]) - def "should generate escaped regex assertions for string objects in response body"() { + @Unroll + def "should generate escaped regex assertions for string objects in response body with #methodBuilderName"() { given: GroovyDsl contractDsl = GroovyDsl.make { request { @@ -343,17 +456,22 @@ class MockMvcSpockMethodBuilderSpec extends Specification implements WireMockStu } } } - MockMvcSpockMethodBodyBuilder builder = new MockMvcSpockMethodBodyBuilder(contractDsl) + MethodBodyBuilder builder = methodBuilder(contractDsl) BlockBuilder blockBuilder = new BlockBuilder(" ") when: builder.appendTo(blockBuilder) then: blockBuilder.toString().contains("""assertThatJson(parsedJson).field("property").matches("\\\\d+")""") and: - stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) + stubMappingIsValidWireMockStub(contractDsl) + where: + methodBuilderName | methodBuilder + "MockMvcSpockMethodBuilder" | { dsl -> new MockMvcSpockMethodBodyBuilder(dsl) } + "MockMvcJUnitMethodBuilder" | { dsl -> new MockMvcJUnitMethodBodyBuilder(dsl) } } - def "should generate a call with an url path and query parameters"() { + @Unroll + def "should generate a call with an url path and query parameters with #methodBuilderName"() { given: GroovyDsl contractDsl = GroovyDsl.make { request { @@ -383,21 +501,26 @@ class MockMvcSpockMethodBuilderSpec extends Specification implements WireMockStu """ } } - MockMvcSpockMethodBodyBuilder builder = new MockMvcSpockMethodBodyBuilder(contractDsl) + MethodBodyBuilder builder = methodBuilder(contractDsl) BlockBuilder blockBuilder = new BlockBuilder(" ") when: builder.appendTo(blockBuilder) - def spockTest = blockBuilder.toString() + def test = blockBuilder.toString() then: - spockTest.contains('get("/users?limit=10&offset=20&filter=email&sort=name&search=55&age=99&name=Denis.Stepanov&email=bob@email.com")') - spockTest.contains('assertThatJson(parsedJson).field("property1").isEqualTo("a")') - spockTest.contains('assertThatJson(parsedJson).field("property2").isEqualTo("b")') + test.contains('get("/users?limit=10&offset=20&filter=email&sort=name&search=55&age=99&name=Denis.Stepanov&email=bob@email.com")') + test.contains('assertThatJson(parsedJson).field("property1").isEqualTo("a")') + test.contains('assertThatJson(parsedJson).field("property2").isEqualTo("b")') and: - stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) + stubMappingIsValidWireMockStub(contractDsl) + where: + methodBuilderName | methodBuilder + "MockMvcSpockMethodBuilder" | { dsl -> new MockMvcSpockMethodBodyBuilder(dsl) } + "MockMvcJUnitMethodBuilder" | { dsl -> new MockMvcJUnitMethodBodyBuilder(dsl) } } @Issue('#169') - def "should generate a call with an url path and query parameters with url containing a pattern"() { + @Unroll + def "should generate a call with an url path and query parameters with url containing a pattern with #methodBuilderName"() { given: GroovyDsl contractDsl = GroovyDsl.make { request { @@ -427,20 +550,25 @@ class MockMvcSpockMethodBuilderSpec extends Specification implements WireMockStu """ } } - MockMvcSpockMethodBodyBuilder builder = new MockMvcSpockMethodBodyBuilder(contractDsl) + MethodBodyBuilder builder = methodBuilder(contractDsl) BlockBuilder blockBuilder = new BlockBuilder(" ") when: builder.appendTo(blockBuilder) - def spockTest = blockBuilder.toString() + def test = blockBuilder.toString() then: - spockTest.contains('get("/foo/123456?limit=10&offset=20&filter=email&sort=name&search=55&age=99&name=Denis.Stepanov&email=bob@email.com")') - spockTest.contains('assertThatJson(parsedJson).field("property1").isEqualTo("a")') - spockTest.contains('assertThatJson(parsedJson).field("property2").isEqualTo("b")') + test.contains('get("/foo/123456?limit=10&offset=20&filter=email&sort=name&search=55&age=99&name=Denis.Stepanov&email=bob@email.com")') + test.contains('assertThatJson(parsedJson).field("property1").isEqualTo("a")') + test.contains('assertThatJson(parsedJson).field("property2").isEqualTo("b")') and: - stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) + stubMappingIsValidWireMockStub(contractDsl) + where: + methodBuilderName | methodBuilder + "MockMvcSpockMethodBuilder" | { dsl -> new MockMvcSpockMethodBodyBuilder(dsl) } + "MockMvcJUnitMethodBuilder" | { dsl -> new MockMvcJUnitMethodBodyBuilder(dsl) } } - def "should generate test for empty body"() { + @Unroll + def "should generate test for empty body with #methodBuilderName"() { given: GroovyDsl contractDsl = GroovyDsl.make { request { @@ -452,18 +580,23 @@ class MockMvcSpockMethodBuilderSpec extends Specification implements WireMockStu status 406 } } - MockMvcSpockMethodBodyBuilder builder = new MockMvcSpockMethodBodyBuilder(contractDsl) + MethodBodyBuilder builder = methodBuilder(contractDsl) BlockBuilder blockBuilder = new BlockBuilder(" ") when: builder.appendTo(blockBuilder) - def spockTest = blockBuilder.toString() + def test = blockBuilder.toString() then: - spockTest.contains(".body('''''')") + test.contains(bodyString) and: - stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) + stubMappingIsValidWireMockStub(contractDsl) + where: + methodBuilderName | methodBuilder | bodyString + "MockMvcSpockMethodBuilder" | { dsl -> new MockMvcSpockMethodBodyBuilder(dsl) } | ".body('''''')" + "MockMvcJUnitMethodBuilder" | { dsl -> new MockMvcJUnitMethodBodyBuilder(dsl) } | ".body(\"\\\"\\\"\")" } - def "should generate test for String in response body"() { + @Unroll + def "should generate test for String in response body with #methodBuilderName"() { given: GroovyDsl contractDsl = GroovyDsl.make { request { @@ -475,20 +608,25 @@ class MockMvcSpockMethodBuilderSpec extends Specification implements WireMockStu body "test" } } - MockMvcSpockMethodBodyBuilder builder = new MockMvcSpockMethodBodyBuilder(contractDsl) + MethodBodyBuilder builder = methodBuilder(contractDsl) BlockBuilder blockBuilder = new BlockBuilder(" ") when: builder.appendTo(blockBuilder) - def spockTest = blockBuilder.toString() + def test = blockBuilder.toString() then: - spockTest.contains('def responseBody = (response.body.asString())') - spockTest.contains('responseBody == "test"') + test.contains(bodyDefinitionString) + test.contains(bodyEvaluationString) and: - stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) + stubMappingIsValidWireMockStub(contractDsl) + where: + methodBuilderName | methodBuilder | bodyDefinitionString | bodyEvaluationString + "MockMvcSpockMethodBuilder" | { dsl -> new MockMvcSpockMethodBodyBuilder(dsl) } | 'def responseBody = (response.body.asString())' | 'responseBody == "test"' + "MockMvcJUnitMethodBuilder" | { dsl -> new MockMvcJUnitMethodBodyBuilder(dsl) } | 'Object responseBody = (response.getBody().asString());' | 'assertThat(responseBody).isEqualTo("test");' } @Issue('113') - def "should generate regex test for String in response header"() { + @Unroll + def "should generate regex test for String in response header with #methodBuilderName"() { given: GroovyDsl contractDsl = GroovyDsl.make { request { @@ -511,19 +649,24 @@ class MockMvcSpockMethodBuilderSpec extends Specification implements WireMockStu } } } - MockMvcSpockMethodBodyBuilder builder = new MockMvcSpockMethodBodyBuilder(contractDsl) + MethodBodyBuilder builder = methodBuilder(contractDsl) BlockBuilder blockBuilder = new BlockBuilder(" ") when: builder.appendTo(blockBuilder) - def spockTest = blockBuilder.toString() + def test = blockBuilder.toString() then: - spockTest.contains('''response.header('Location') ==~ java.util.regex.Pattern.compile('http://localhost/partners/[0-9]+/users/[0-9]+')''') + test.contains(headerEvaluationString) and: - stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) + stubMappingIsValidWireMockStub(contractDsl) + where: + methodBuilderName | methodBuilder | headerEvaluationString + "MockMvcSpockMethodBuilder" | { dsl -> new MockMvcSpockMethodBodyBuilder(dsl) } | '''response.header('Location') ==~ java.util.regex.Pattern.compile('http://localhost/partners/[0-9]+/users/[0-9]+')''' + "MockMvcJUnitMethodBuilder" | { dsl -> new MockMvcJUnitMethodBodyBuilder(dsl) } | 'assertThat(response.header("Location")).matches("http://localhost/partners/[0-9]+/users/[0-9]+");' } @Issue('115') - def "should generate regex with helper method"() { + @Unroll + def "should generate regex with helper method with #methodBuilderName"() { given: GroovyDsl contractDsl = GroovyDsl.make { request { @@ -546,18 +689,23 @@ class MockMvcSpockMethodBuilderSpec extends Specification implements WireMockStu } } } - MockMvcSpockMethodBodyBuilder builder = new MockMvcSpockMethodBodyBuilder(contractDsl) + MethodBodyBuilder builder = methodBuilder(contractDsl) BlockBuilder blockBuilder = new BlockBuilder(" ") when: builder.appendTo(blockBuilder) - def spockTest = blockBuilder.toString() + def test = blockBuilder.toString() then: - spockTest.contains('''response.header('Location') ==~ java.util.regex.Pattern.compile('^((http[s]?|ftp):\\/)\\/?([^:\\/\\s]+)(:[0-9]{1,5})?/partners/[0-9]+/users/[0-9]+')''') + test.contains(headerEvaluationString) and: - stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) + stubMappingIsValidWireMockStub(contractDsl) + where: + methodBuilderName | methodBuilder | headerEvaluationString + "MockMvcSpockMethodBuilder" | { dsl -> new MockMvcSpockMethodBodyBuilder(dsl) } | '''response.header('Location') ==~ java.util.regex.Pattern.compile('^((http[s]?|ftp):\\/)\\/?([^:\\/\\s]+)(:[0-9]{1,5})?/partners/[0-9]+/users/[0-9]+')''' + "MockMvcJUnitMethodBuilder" | { dsl -> new MockMvcJUnitMethodBodyBuilder(dsl) } | 'assertThat(response.header("Location")).matches("^((http[s]?|ftp):/)/?([^:/s]+)(:[0-9]{1,5})?/partners/[0-9]+/users/[0-9]+");' } - def "should work with more complex stuff and jsonpaths"() { + @Unroll + def "should work with more complex stuff and jsonpaths with #methodBuilderName"() { given: GroovyDsl contractDsl = GroovyDsl.make { priority 10 @@ -582,19 +730,24 @@ class MockMvcSpockMethodBuilderSpec extends Specification implements WireMockStu ]) } } - MockMvcSpockMethodBodyBuilder builder = new MockMvcSpockMethodBodyBuilder(contractDsl) + MethodBodyBuilder builder = methodBuilder(contractDsl) BlockBuilder blockBuilder = new BlockBuilder(" ") when: builder.appendTo(blockBuilder) - def spockTest = blockBuilder.toString() + def test = blockBuilder.toString() then: - spockTest.contains("""assertThatJson(parsedJson).array("errors").contains("property").isEqualTo("bank_account_number")""") - spockTest.contains("""assertThatJson(parsedJson).array("errors").contains("message").isEqualTo("incorrect_format")""") + test.contains("""assertThatJson(parsedJson).array("errors").contains("property").isEqualTo("bank_account_number")""") + test.contains("""assertThatJson(parsedJson).array("errors").contains("message").isEqualTo("incorrect_format")""") and: - stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) + stubMappingIsValidWireMockStub(contractDsl) + where: + methodBuilderName | methodBuilder + "MockMvcSpockMethodBuilder" | { dsl -> new MockMvcSpockMethodBodyBuilder(dsl) } + "MockMvcJUnitMethodBuilder" | { dsl -> new MockMvcJUnitMethodBodyBuilder(dsl) } } - def "should work properly with GString url"() { + @Unroll + def "should work properly with GString url with #methodBuilderName"() { given: GroovyDsl contractDsl = GroovyDsl.make { @@ -612,18 +765,23 @@ class MockMvcSpockMethodBuilderSpec extends Specification implements WireMockStu status 422 } } - MockMvcSpockMethodBodyBuilder builder = new MockMvcSpockMethodBodyBuilder(contractDsl) + MethodBodyBuilder builder = methodBuilder(contractDsl) BlockBuilder blockBuilder = new BlockBuilder(" ") when: builder.appendTo(blockBuilder) - def spockTest = blockBuilder.toString() + def test = blockBuilder.toString() then: - spockTest.contains('''/partners/11/agents/11/customers/09665703Z''') + test.contains('''/partners/11/agents/11/customers/09665703Z''') and: - stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) + stubMappingIsValidWireMockStub(contractDsl) + where: + methodBuilderName | methodBuilder + "MockMvcSpockMethodBuilder" | { dsl -> new MockMvcSpockMethodBodyBuilder(dsl) } + "MockMvcJUnitMethodBuilder" | { dsl -> new MockMvcJUnitMethodBodyBuilder(dsl) } } - def "should resolve properties in GString with regular expression"() { + @Unroll + def "should resolve properties in GString with regular expression with #methodBuilderName"() { given: GroovyDsl contractDsl = GroovyDsl.make { priority 1 @@ -649,93 +807,60 @@ class MockMvcSpockMethodBuilderSpec extends Specification implements WireMockStu ) } } - MockMvcSpockMethodBodyBuilder builder = new MockMvcSpockMethodBodyBuilder(contractDsl) + MethodBodyBuilder builder = methodBuilder(contractDsl) BlockBuilder blockBuilder = new BlockBuilder(" ") when: builder.appendTo(blockBuilder) - def spockTest = blockBuilder.toString() + def test = blockBuilder.toString() then: - spockTest.contains("""assertThatJson(parsedJson).field("message").matches("User not found by email = \\\\\\\\[[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\\\\\\\.[a-zA-Z]{2,4}\\\\\\\\]")""") + test.contains("""assertThatJson(parsedJson).field("message").matches("User not found by email = \\\\\\\\[[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\\\\\\\.[a-zA-Z]{2,4}\\\\\\\\]")""") + where: + methodBuilderName | methodBuilder + "MockMvcSpockMethodBuilder" | { dsl -> new MockMvcSpockMethodBodyBuilder(dsl) } + "MockMvcJUnitMethodBuilder" | { dsl -> new MockMvcJUnitMethodBodyBuilder(dsl) } } @Issue('42') @Unroll - def "should not omit the optional field in the test creation"() { + def "should not omit the optional field in the test creation with MockMvcSpockMethodBodyBuilder"() { given: - MockMvcSpockMethodBodyBuilder builder = new MockMvcSpockMethodBodyBuilder(contractDsl) + MethodBodyBuilder builder = new MockMvcSpockMethodBodyBuilder(contractDsl) BlockBuilder blockBuilder = new BlockBuilder(" ") when: builder.appendTo(blockBuilder) - def spockTest = blockBuilder.toString() + def test = blockBuilder.toString() then: - spockTest.contains('''"email":"abc@abc.com"''') - spockTest.contains("""assertThatJson(parsedJson).field("code").matches("(123123)?")""") - !spockTest.contains('''REGEXP''') - !spockTest.contains('''OPTIONAL''') - !spockTest.contains('''OptionalProperty''') + test.contains('''"email":"abc@abc.com"''') + test.contains("""assertThatJson(parsedJson).field("code").matches("(123123)?")""") + !test.contains('''REGEXP''') + !test.contains('''OPTIONAL''') + !test.contains('''OptionalProperty''') where: - contractDsl << [ - GroovyDsl.make { - priority 1 - request { - method 'POST' - url '/users/password' - headers { - header 'Content-Type': 'application/json' - } - body( - email: $(stub(optional(regex(email()))), test('abc@abc.com')), - callback_url: $(stub(regex(hostname())), test('http://partners.com')) - ) - } - response { - status 404 - headers { - header 'Content-Type': 'application/json' - } - body( - code: value(stub("123123"), test(optional("123123"))), - message: "User not found by email = [${value(test(regex(email())), stub('not.existing@user.com'))}]" - ) - } - }, - GroovyDsl.make { - priority 1 - request { - method 'POST' - url '/users/password' - headers { - header 'Content-Type': 'application/json' - } - body( - """ { - "email" : "${value(stub(optional(regex(email()))), test('abc@abc.com'))}", - "callback_url" : "${value(client(regex(hostname())), server('http://partners.com'))}" - } - """ - ) - } - response { - status 404 - headers { - header 'Content-Type': 'application/json' - } - body( - """ { - "code" : "${value(stub(123123), test(optional(123123)))}", - "message" : "User not found by email = [${ - value(server(regex(email())), client('not.existing@user.com')) - }]" - } - """ - ) - } - } - ] + contractDsl << [dslWithOptionals, dslWithOptionalsInString] + } + + @Issue('42') + @Unroll + def "should not omit the optional field in the test creation with MockMvcJUnitMethodBodyBuilder"() { + given: + MethodBodyBuilder builder = new MockMvcJUnitMethodBodyBuilder(contractDsl) + BlockBuilder blockBuilder = new BlockBuilder(" ") + when: + builder.appendTo(blockBuilder) + def test = blockBuilder.toString() + then: + test.contains('\\"email\\":\\"abc@abc.com\\"') + test.contains('assertThatJson(parsedJson).field("code").matches("(123123)?");') + !test.contains('''REGEXP''') + !test.contains('''OPTIONAL''') + !test.contains('''OptionalProperty''') + where: + contractDsl << [dslWithOptionals, dslWithOptionalsInString] } @Issue('72') - def "should make the execute method work"() { + @Unroll + def "should make the execute method work with #methodBuilderName"() { given: GroovyDsl contractDsl = GroovyDsl.make { request { @@ -750,7 +875,6 @@ class MockMvcSpockMethodBuilderSpec extends Specification implements WireMockStu ) headers { header("""Content-Type""", """application/vnd.fraud.v1+json""") - } } @@ -762,22 +886,24 @@ class MockMvcSpockMethodBuilderSpec extends Specification implements WireMockStu }""") headers { header('Content-Type': 'application/vnd.fraud.v1+json') - } - } - } - MockMvcSpockMethodBodyBuilder builder = new MockMvcSpockMethodBodyBuilder(contractDsl) + MethodBodyBuilder builder = methodBuilder(contractDsl) BlockBuilder blockBuilder = new BlockBuilder(" ") when: builder.appendTo(blockBuilder) - def spockTest = blockBuilder.toString() + def test = blockBuilder.toString() then: - spockTest.contains('''assertThatRejectionReasonIsNull(parsedJson.read('$.rejectionReason'))''') + test.contains(assertionString) + where: + methodBuilderName | methodBuilder | assertionString + "MockMvcSpockMethodBuilder" | { dsl -> new MockMvcSpockMethodBodyBuilder(dsl) } | '''assertThatRejectionReasonIsNull(parsedJson.read('$.rejectionReason'))''' + "MockMvcJUnitMethodBuilder" | { dsl -> new MockMvcJUnitMethodBodyBuilder(dsl) } | '''assertThatRejectionReasonIsNull(parsedJson.read("$.rejectionReason"))''' } - def "should support inner map and list definitions"() { + @Unroll + def "should support inner map and list definitions with #methodBuilderName"() { given: Pattern PHONE_NUMBER = Pattern.compile(/[+\w]*/) @@ -829,19 +955,24 @@ class MockMvcSpockMethodBuilderSpec extends Specification implements WireMockStu } } } - MockMvcSpockMethodBodyBuilder builder = new MockMvcSpockMethodBodyBuilder(contractDsl) + MethodBodyBuilder builder = methodBuilder(contractDsl) BlockBuilder blockBuilder = new BlockBuilder(" ") when: builder.appendTo(blockBuilder) - def spockTest = blockBuilder.toString() + def test = blockBuilder.toString() then: - spockTest.contains '"street":"Light Street"' - !spockTest.contains("clientValue") - !spockTest.contains("cursor") + test.contains bodyString + !test.contains("clientValue") + !test.contains("cursor") + where: + methodBuilderName | methodBuilder | bodyString + "MockMvcSpockMethodBuilder" | { dsl -> new MockMvcSpockMethodBodyBuilder(dsl) } | '"street":"Light Street"' + "MockMvcJUnitMethodBuilder" | { dsl -> new MockMvcJUnitMethodBodyBuilder(dsl) } | '\\"street\\":\\"Light Street\\"' + } - - def "shouldn't generate unicode escape characters"() { + @Unroll + def "shouldn't generate unicode escape characters with #methodBuilderName"() { given: Pattern ONLY_ALPHA_UNICODE = Pattern.compile(/[\p{L}]*/) @@ -866,17 +997,22 @@ class MockMvcSpockMethodBuilderSpec extends Specification implements WireMockStu } } } - MockMvcSpockMethodBodyBuilder builder = new MockMvcSpockMethodBodyBuilder(contractDsl) + MethodBodyBuilder builder = methodBuilder(contractDsl) BlockBuilder blockBuilder = new BlockBuilder(" ") when: builder.appendTo(blockBuilder) - def spockTest = blockBuilder.toString() + def test = blockBuilder.toString() then: - !spockTest.contains("\\u041f") + !test.contains("\\u041f") + where: + methodBuilderName | methodBuilder + "MockMvcSpockMethodBuilder" | { dsl -> new MockMvcSpockMethodBodyBuilder(dsl) } + "MockMvcJUnitMethodBuilder" | { dsl -> new MockMvcJUnitMethodBodyBuilder(dsl) } } @Issue('177') - def "should generate proper test code when having multiline body"() { + @Unroll + def "should generate proper test code when having multiline body with #methodBuilderName"() { given: GroovyDsl contractDsl = GroovyDsl.make { request { @@ -889,18 +1025,23 @@ World.''') status 200 } } - MockMvcSpockMethodBodyBuilder builder = new MockMvcSpockMethodBodyBuilder(contractDsl) + MethodBodyBuilder builder = methodBuilder(contractDsl) BlockBuilder blockBuilder = new BlockBuilder(" ") when: builder.given(blockBuilder) - def spockTest = blockBuilder.toString() + def test = blockBuilder.toString() then: - spockTest.contains("""'''hello, -World.'''""") + test.contains(bodyString) + where: + methodBuilderName | methodBuilder | bodyString + "MockMvcSpockMethodBuilder" | { dsl -> new MockMvcSpockMethodBodyBuilder(dsl) } | """'''hello, +World.'''""" + "MockMvcJUnitMethodBuilder" | { dsl -> new MockMvcJUnitMethodBodyBuilder(dsl) } | '\\"hello,\\nWorld.\\"' } @Issue('180') - def "should generate proper test code when having multipart parameters"() { + @Unroll + def "should generate proper test code when having multipart parameters with #methodBuilderName"() { given: GroovyDsl contractDsl = GroovyDsl.make { request { @@ -919,20 +1060,30 @@ World.'''""") status 200 } } - MockMvcSpockMethodBodyBuilder builder = new MockMvcSpockMethodBodyBuilder(contractDsl) + MethodBodyBuilder builder = methodBuilder(contractDsl) BlockBuilder blockBuilder = new BlockBuilder(" ") when: builder.appendTo(blockBuilder) - def spockTest = blockBuilder.toString() + def test = blockBuilder.toString() then: - spockTest.contains("""'content-type', 'multipart/form-data;boundary=AaB03x'""") - spockTest.contains(""".param('formParameter', '"formParameterValue"'""") - spockTest.contains(""".param('someBooleanParameter', 'true')""") - spockTest.contains(""".multiPart('file', 'filename.csv', 'file content'.bytes)""") + for (String requestString : requestStrings) { + test.contains(requestString) + } + where: + methodBuilderName | methodBuilder | requestStrings + "MockMvcSpockMethodBuilder" | { dsl -> new MockMvcSpockMethodBodyBuilder(dsl) } | ["""'content-type', 'multipart/form-data;boundary=AaB03x'""", + """.param('formParameter', '"formParameterValue"'""", + """.param('someBooleanParameter', 'true')""", + """.multiPart('file', 'filename.csv', 'file content'.bytes)"""] + "MockMvcJUnitMethodBuilder" | { dsl -> new MockMvcJUnitMethodBodyBuilder(dsl) } | ['"content-type", "multipart/form-data;boundary=AaB03x"', + '.param("formParameter", "\\"formParameterValue\\"")', + '.param("someBooleanParameter", "true")', + '.multiPart("file", "filename.csv", "file content".getBytes());'] } @Issue('180') - def "should generate proper test code when having multipart parameters with named as map"() { + @Unroll + def "should generate proper test code when having multipart parameters with named as map with #methodBuilderName"() { given: GroovyDsl contractDsl = GroovyDsl.make { request { @@ -950,14 +1101,21 @@ World.'''""") status 200 } } - MockMvcSpockMethodBodyBuilder builder = new MockMvcSpockMethodBodyBuilder(contractDsl) + MethodBodyBuilder builder = methodBuilder(contractDsl) BlockBuilder blockBuilder = new BlockBuilder(" ") when: builder.given(blockBuilder) - def spockTest = blockBuilder.toString() + def test = blockBuilder.toString() then: - spockTest.contains('.multiPart') + test.contains('.multiPart') + where: + methodBuilderName | methodBuilder + "MockMvcSpockMethodBuilder" | { dsl -> new MockMvcSpockMethodBodyBuilder(dsl) } + "MockMvcJUnitMethodBuilder" | { dsl -> new MockMvcJUnitMethodBodyBuilder(dsl) } } + protected void stubMappingIsValidWireMockStub(GroovyDsl contractDsl) { + stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) + } } From 337027136ebd4b184844f8092e42d4d307c66be2 Mon Sep 17 00:00:00 2001 From: Olga Maciaszek-Sharma Date: Mon, 22 Feb 2016 16:20:17 +0100 Subject: [PATCH 09/22] Added JUnit support for JaxRs tests. --- .../accurest/SingleTestGenerator.groovy | 3 + .../JaxRsClientJUnitMethodBodyBuilder.groovy | 108 ++++++++ .../JaxRsClientSpockMethodBuilderSpec.groovy | 252 ++++++++++++------ ...vy => MockMvcMethodBodyBuilderSpec.groovy} | 114 ++++---- .../accurest/dsl/WireMockStubVerifier.groovy | 5 + 5 files changed, 341 insertions(+), 141 deletions(-) create mode 100644 accurest-core/src/main/groovy/io/codearte/accurest/builder/JaxRsClientJUnitMethodBodyBuilder.groovy rename accurest-core/src/test/groovy/io/codearte/accurest/builder/{MockMvcMethodBuilderSpec.groovy => MockMvcMethodBodyBuilderSpec.groovy} (83%) diff --git a/accurest-core/src/main/groovy/io/codearte/accurest/SingleTestGenerator.groovy b/accurest-core/src/main/groovy/io/codearte/accurest/SingleTestGenerator.groovy index ba23ee1bdb..42ca73417c 100644 --- a/accurest-core/src/main/groovy/io/codearte/accurest/SingleTestGenerator.groovy +++ b/accurest-core/src/main/groovy/io/codearte/accurest/SingleTestGenerator.groovy @@ -52,6 +52,9 @@ class SingleTestGenerator { if (configProperties.testMode == TestMode.JAXRSCLIENT) { clazz.addStaticImport('javax.ws.rs.client.Entity.*') + if (configProperties.targetFramework == TestFramework.JUNIT) { + clazz.addImport('import javax.ws.rs.core.Response') + } } else if (configProperties.testMode == TestMode.MOCKMVC) { clazz.addStaticImport('com.jayway.restassured.module.mockmvc.RestAssuredMockMvc.*') } else { diff --git a/accurest-core/src/main/groovy/io/codearte/accurest/builder/JaxRsClientJUnitMethodBodyBuilder.groovy b/accurest-core/src/main/groovy/io/codearte/accurest/builder/JaxRsClientJUnitMethodBodyBuilder.groovy new file mode 100644 index 0000000000..79180caf54 --- /dev/null +++ b/accurest-core/src/main/groovy/io/codearte/accurest/builder/JaxRsClientJUnitMethodBodyBuilder.groovy @@ -0,0 +1,108 @@ +package io.codearte.accurest.builder + +import io.codearte.accurest.dsl.GroovyDsl +import io.codearte.accurest.dsl.internal.Header +import io.codearte.accurest.dsl.internal.QueryParameter +import io.codearte.accurest.dsl.internal.QueryParameters + +/** + * @author Olga Maciaszek-Sharma + @since 21.02.16 + */ +class JaxRsClientJUnitMethodBodyBuilder extends JUnitMethodBodyBuilder { + + JaxRsClientJUnitMethodBodyBuilder(GroovyDsl stubDefinition) { + super(stubDefinition) + } + + @Override + protected void given(BlockBuilder bb) {} + + @Override + protected void givenBlock(BlockBuilder bb) { + } + + @Override + protected void when(BlockBuilder bb) { + bb.addLine("Response response = webTarget") + bb.indent() + + appendUrlPathAndQueryParameters(bb) + appendRequestWithRequiredResponseContentType(bb) + appendHeaders(bb) + appendMethodAndBody(bb) + bb.addAtTheEnd(';') + + bb.unindent() + + bb.addEmptyLine() + bb.addLine("String responseAsString = response.readEntity(String.class);") + } + + protected void appendUrlPathAndQueryParameters(BlockBuilder bb) { + if (request.url) { + bb.addLine(".path(\"$request.url.serverValue\")") + appendQueryParams(request.url.queryParameters, bb) + } else if (request.urlPath) { + bb.addLine(".path(\"$request.urlPath.serverValue\")") + appendQueryParams(request.urlPath.queryParameters, bb) + } + } + + private void appendQueryParams(QueryParameters queryParameters, BlockBuilder bb) { + if (!queryParameters?.parameters) { + return + } + queryParameters.parameters.findAll(this.&allowedQueryParameter).each { QueryParameter param -> + bb.addLine(".queryParam(\"$param.name\", \"${resolveParamValue(param).toString()}\")") + } + } + + protected void appendMethodAndBody(BlockBuilder bb) { + String method = request.method.serverValue.toString().toLowerCase() + if (request.body) { + String contentType = getHeader('Content-Type') ?: getRequestContentType().mimeType + bb.addLine(".method(\"${method.toUpperCase()}\", entity(\"$bodyAsString\", \"$contentType\"))") + } else { + bb.addLine(".method(\"${method.toUpperCase()}\")") + } + } + + protected appendHeaders(BlockBuilder bb) { + request.headers?.collect { Header header -> + if (header.name == 'Content-Type' || header.name == 'Accept') return + bb.addLine(".header(\"${header.name}\", \"${header.serverValue}\")") + } + } + + protected void appendRequestWithRequiredResponseContentType(BlockBuilder bb) { + String acceptHeader = getHeader("Accept") + if (acceptHeader) { + bb.addLine(".request(\"$acceptHeader\")") + } else { + bb.addLine(".request()") + } + } + + @Override + protected void validateResponseCodeBlock(BlockBuilder bb) { + bb.addLine("assertThat(response.getStatus()).isEqualTo($response.status.serverValue);") + } + + @Override + protected void validateResponseHeadersBlock(BlockBuilder bb) { + response.headers?.collect { Header header -> + bb.addLine("assertThat(response.getHeaderString(\"$header.name\")).isEqualTo(\"$header.serverValue\");") + } + } + + protected String getHeader(String name) { + return request.headers?.entries.find { it.name == name }?.serverValue + } + + @Override + protected String getResponseAsString() { + return 'responseAsString' + } + +} diff --git a/accurest-core/src/test/groovy/io/codearte/accurest/builder/JaxRsClientSpockMethodBuilderSpec.groovy b/accurest-core/src/test/groovy/io/codearte/accurest/builder/JaxRsClientSpockMethodBuilderSpec.groovy index 81cfcb2755..e2fdca8146 100644 --- a/accurest-core/src/test/groovy/io/codearte/accurest/builder/JaxRsClientSpockMethodBuilderSpec.groovy +++ b/accurest-core/src/test/groovy/io/codearte/accurest/builder/JaxRsClientSpockMethodBuilderSpec.groovy @@ -6,10 +6,12 @@ import io.codearte.accurest.dsl.WireMockStubVerifier import io.codearte.accurest.file.Contract import spock.lang.Issue import spock.lang.Specification +import spock.lang.Unroll class JaxRsClientSpockMethodBuilderSpec extends Specification implements WireMockStubVerifier { - def "should generate assertions for simple response body"() { + @Unroll + def "should generate assertions for simple response body with #methodBuilderName"() { given: GroovyDsl contractDsl = GroovyDsl.make { request { @@ -24,7 +26,7 @@ class JaxRsClientSpockMethodBuilderSpec extends Specification implements WireMoc }""" } } - JaxRsClientSpockMethodBodyBuilder builder = new JaxRsClientSpockMethodBodyBuilder(contractDsl) + MethodBodyBuilder builder = methodBuilder(contractDsl) BlockBuilder blockBuilder = new BlockBuilder(" ") when: builder.appendTo(blockBuilder) @@ -32,11 +34,16 @@ class JaxRsClientSpockMethodBuilderSpec extends Specification implements WireMoc blockBuilder.toString().contains("""assertThatJson(parsedJson).field("property1").isEqualTo("a")""") blockBuilder.toString().contains("""assertThatJson(parsedJson).field("property2").isEqualTo("b")""") and: - stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) + stubMappingIsValidWireMockStub(contractDsl) + where: + methodBuilderName | methodBuilder + "JaxRsClientSpockMethodBodyBuilder" | { GroovyDsl dsl -> new JaxRsClientSpockMethodBodyBuilder(dsl) } + "JaxRsClientJUnitMethodBodyBuilder" | { GroovyDsl dsl -> new JaxRsClientJUnitMethodBodyBuilder(dsl) } } @Issue("#187") - def "should generate assertions for null and boolean values"() { + @Unroll + def "should generate assertions for null and boolean values with #methodBuilderName"() { given: GroovyDsl contractDsl = GroovyDsl.make { request { @@ -52,7 +59,7 @@ class JaxRsClientSpockMethodBuilderSpec extends Specification implements WireMoc }""" } } - JaxRsClientSpockMethodBodyBuilder builder = new JaxRsClientSpockMethodBodyBuilder(contractDsl) + MethodBodyBuilder builder = methodBuilder(contractDsl) BlockBuilder blockBuilder = new BlockBuilder(" ") when: builder.appendTo(blockBuilder) @@ -62,10 +69,15 @@ class JaxRsClientSpockMethodBuilderSpec extends Specification implements WireMoc blockBuilder.toString().contains("""assertThatJson(parsedJson).field("property1").isEqualTo("true")""") and: stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) + where: + methodBuilderName | methodBuilder + "JaxRsClientSpockMethodBodyBuilder" | { GroovyDsl dsl -> new JaxRsClientSpockMethodBodyBuilder(dsl) } + "JaxRsClientJUnitMethodBodyBuilder" | { GroovyDsl dsl -> new JaxRsClientJUnitMethodBodyBuilder(dsl) } } @Issue("#79") - def "should generate assertions for simple response body constructed from map with a list"() { + @Unroll + def "should generate assertions for simple response body constructed from map with a list with #methodBuilderName"() { given: GroovyDsl contractDsl = GroovyDsl.make { request { @@ -83,7 +95,7 @@ class JaxRsClientSpockMethodBuilderSpec extends Specification implements WireMoc ) } } - JaxRsClientSpockMethodBodyBuilder builder = new JaxRsClientSpockMethodBodyBuilder(contractDsl) + MethodBodyBuilder builder = methodBuilder(contractDsl) BlockBuilder blockBuilder = new BlockBuilder(" ") when: builder.appendTo(blockBuilder) @@ -93,10 +105,15 @@ class JaxRsClientSpockMethodBuilderSpec extends Specification implements WireMoc blockBuilder.toString().contains("""assertThatJson(parsedJson).array("property2").contains("b").isEqualTo("sthElse")""") and: stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) + where: + methodBuilderName | methodBuilder + "JaxRsClientSpockMethodBodyBuilder" | { GroovyDsl dsl -> new JaxRsClientSpockMethodBodyBuilder(dsl) } + "JaxRsClientJUnitMethodBodyBuilder" | { GroovyDsl dsl -> new JaxRsClientJUnitMethodBodyBuilder(dsl) } } @Issue("#82") - def "should generate proper request when body constructed from map with a list"() { + @Unroll + def "should generate proper request when body constructed from map with a list with #methodBuilderName"() { given: GroovyDsl contractDsl = GroovyDsl.make { request { @@ -110,18 +127,23 @@ class JaxRsClientSpockMethodBuilderSpec extends Specification implements WireMoc status 200 } } - JaxRsClientSpockMethodBodyBuilder builder = new JaxRsClientSpockMethodBodyBuilder(contractDsl) + MethodBodyBuilder builder = methodBuilder(contractDsl) BlockBuilder blockBuilder = new BlockBuilder(" ") when: builder.appendTo(blockBuilder) then: - blockBuilder.toString().contains("""entity('{\"items\":[\"HOP\"]}', 'application/json')""") + blockBuilder.toString().contains(bodyString) and: - stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) + stubMappingIsValidWireMockStub(contractDsl) + where: + methodBuilderName | methodBuilder | bodyString + "JaxRsClientSpockMethodBodyBuilder" | { GroovyDsl dsl -> new JaxRsClientSpockMethodBodyBuilder(dsl) } | """entity('{\"items\":[\"HOP\"]}', 'application/json')""" + "JaxRsClientJUnitMethodBodyBuilder" | { GroovyDsl dsl -> new JaxRsClientJUnitMethodBodyBuilder(dsl) } | 'entity("{\\"items\\":[\\"HOP\\"]}", "application/json")' } @Issue("#88") - def "should generate proper request when body constructed from GString"() { + @Unroll + def "should generate proper request when body constructed from GString with #methodBuilderName"() { given: GroovyDsl contractDsl = GroovyDsl.make { request { @@ -135,17 +157,22 @@ class JaxRsClientSpockMethodBuilderSpec extends Specification implements WireMoc status 200 } } - JaxRsClientSpockMethodBodyBuilder builder = new JaxRsClientSpockMethodBodyBuilder(contractDsl) + MethodBodyBuilder builder = methodBuilder(contractDsl) BlockBuilder blockBuilder = new BlockBuilder(" ") when: builder.appendTo(blockBuilder) then: - blockBuilder.toString().contains("""entity('property1=VAL1', 'application/octet-stream')""") + blockBuilder.toString().contains(bodyString) and: - stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) + stubMappingIsValidWireMockStub(contractDsl) + where: + methodBuilderName | methodBuilder | bodyString + "JaxRsClientSpockMethodBodyBuilder" | { GroovyDsl dsl -> new JaxRsClientSpockMethodBodyBuilder(dsl) } | """entity('property1=VAL1', 'application/octet-stream')""" + "JaxRsClientJUnitMethodBodyBuilder" | { GroovyDsl dsl -> new JaxRsClientJUnitMethodBodyBuilder(dsl) } | 'entity("\\"property1=VAL1\\"", "application/octet-stream")' } - def "should generate assertions for array in response body"() { + @Unroll + def "should generate assertions for array in response body with #methodBuilderName"() { given: GroovyDsl contractDsl = GroovyDsl.make { request { @@ -163,7 +190,7 @@ class JaxRsClientSpockMethodBuilderSpec extends Specification implements WireMoc }]""" } } - JaxRsClientSpockMethodBodyBuilder builder = new JaxRsClientSpockMethodBodyBuilder(contractDsl) + MethodBodyBuilder builder = methodBuilder(contractDsl) BlockBuilder blockBuilder = new BlockBuilder(" ") when: builder.appendTo(blockBuilder) @@ -171,10 +198,15 @@ class JaxRsClientSpockMethodBuilderSpec extends Specification implements WireMoc blockBuilder.toString().contains("""assertThatJson(parsedJson).array().contains("property1").isEqualTo("a")""") blockBuilder.toString().contains("""assertThatJson(parsedJson).array().contains("property2").isEqualTo("b")""") and: - stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) + stubMappingIsValidWireMockStub(contractDsl) + where: + methodBuilderName | methodBuilder + "JaxRsClientSpockMethodBodyBuilder" | { GroovyDsl dsl -> new JaxRsClientSpockMethodBodyBuilder(dsl) } + "JaxRsClientJUnitMethodBodyBuilder" | { GroovyDsl dsl -> new JaxRsClientJUnitMethodBodyBuilder(dsl) } } - def "should generate assertions for array inside response body element"() { + @Unroll + def "should generate assertions for array inside response body element with #methodBuilderName"() { given: GroovyDsl contractDsl = GroovyDsl.make { request { @@ -191,7 +223,7 @@ class JaxRsClientSpockMethodBuilderSpec extends Specification implements WireMoc }""" } } - JaxRsClientSpockMethodBodyBuilder builder = new JaxRsClientSpockMethodBodyBuilder(contractDsl) + MethodBodyBuilder builder = methodBuilder(contractDsl) BlockBuilder blockBuilder = new BlockBuilder(" ") when: builder.appendTo(blockBuilder) @@ -199,10 +231,15 @@ class JaxRsClientSpockMethodBuilderSpec extends Specification implements WireMoc blockBuilder.toString().contains("""assertThatJson(parsedJson).array("property1").contains("property2").isEqualTo("test1")""") blockBuilder.toString().contains("""assertThatJson(parsedJson).array("property1").contains("property3").isEqualTo("test2")""") and: - stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) + stubMappingIsValidWireMockStub(contractDsl) + where: + methodBuilderName | methodBuilder + "JaxRsClientSpockMethodBodyBuilder" | { GroovyDsl dsl -> new JaxRsClientSpockMethodBodyBuilder(dsl) } + "JaxRsClientJUnitMethodBodyBuilder" | { GroovyDsl dsl -> new JaxRsClientJUnitMethodBodyBuilder(dsl) } } - def "should generate assertions for nested objects in response body"() { + @Unroll + def "should generate assertions for nested objects in response body with #methodBuilderName"() { given: GroovyDsl contractDsl = GroovyDsl.make { request { @@ -219,7 +256,7 @@ class JaxRsClientSpockMethodBuilderSpec extends Specification implements WireMoc ''' } } - JaxRsClientSpockMethodBodyBuilder builder = new JaxRsClientSpockMethodBodyBuilder(contractDsl) + MethodBodyBuilder builder = methodBuilder(contractDsl) BlockBuilder blockBuilder = new BlockBuilder(" ") when: builder.appendTo(blockBuilder) @@ -227,10 +264,15 @@ class JaxRsClientSpockMethodBuilderSpec extends Specification implements WireMoc blockBuilder.toString().contains("""assertThatJson(parsedJson).field("property2").field("property3").isEqualTo("b")""") blockBuilder.toString().contains("""assertThatJson(parsedJson).field("property1").isEqualTo("a")""") and: - stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) + stubMappingIsValidWireMockStub(contractDsl) + where: + methodBuilderName | methodBuilder + "JaxRsClientSpockMethodBodyBuilder" | { GroovyDsl dsl -> new JaxRsClientSpockMethodBodyBuilder(dsl) } + "JaxRsClientJUnitMethodBodyBuilder" | { GroovyDsl dsl -> new JaxRsClientJUnitMethodBodyBuilder(dsl) } } - def "should generate regex assertions for map objects in response body"() { + @Unroll + def "should generate regex assertions for map objects in response body with #methodBodyName"() { given: GroovyDsl contractDsl = GroovyDsl.make { request { @@ -253,7 +295,7 @@ class JaxRsClientSpockMethodBuilderSpec extends Specification implements WireMoc } } - JaxRsClientSpockMethodBodyBuilder builder = new JaxRsClientSpockMethodBodyBuilder(contractDsl) + MethodBodyBuilder builder = methodBuilder(contractDsl) BlockBuilder blockBuilder = new BlockBuilder(" ") when: builder.appendTo(blockBuilder) @@ -261,10 +303,15 @@ class JaxRsClientSpockMethodBuilderSpec extends Specification implements WireMoc blockBuilder.toString().contains("""assertThatJson(parsedJson).field("property2").matches("[0-9]{3}")""") blockBuilder.toString().contains("""assertThatJson(parsedJson).field("property1").isEqualTo("a")""") and: - stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) + stubMappingIsValidWireMockStub(contractDsl) + where: + methodBuilderName | methodBuilder + "JaxRsClientSpockMethodBodyBuilder" | { GroovyDsl dsl -> new JaxRsClientSpockMethodBodyBuilder(dsl) } + "JaxRsClientJUnitMethodBodyBuilder" | { GroovyDsl dsl -> new JaxRsClientJUnitMethodBodyBuilder(dsl) } } - def "should generate regex assertions for string objects in response body"() { + @Unroll + def "should generate regex assertions for string objects in response body with #methodBuilderName"() { given: GroovyDsl contractDsl = GroovyDsl.make { request { @@ -281,7 +328,7 @@ class JaxRsClientSpockMethodBuilderSpec extends Specification implements WireMoc } } - JaxRsClientSpockMethodBodyBuilder builder = new JaxRsClientSpockMethodBodyBuilder(contractDsl) + MethodBodyBuilder builder = methodBuilder(contractDsl) BlockBuilder blockBuilder = new BlockBuilder(" ") when: builder.appendTo(blockBuilder) @@ -289,10 +336,15 @@ class JaxRsClientSpockMethodBuilderSpec extends Specification implements WireMoc blockBuilder.toString().contains("""assertThatJson(parsedJson).field("property2").matches("[0-9]{3}")""") blockBuilder.toString().contains("""assertThatJson(parsedJson).field("property1").isEqualTo("a")""") and: - stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) + stubMappingIsValidWireMockStub(contractDsl) + where: + methodBuilderName | methodBuilder + "JaxRsClientSpockMethodBodyBuilder" | { GroovyDsl dsl -> new JaxRsClientSpockMethodBodyBuilder(dsl) } + "JaxRsClientJUnitMethodBodyBuilder" | { GroovyDsl dsl -> new JaxRsClientJUnitMethodBodyBuilder(dsl) } } - def "should ignore 'Accept' header and use 'request' method"() { + @Unroll + def "should ignore 'Accept' header and use 'request' method with #methodBuilderName"() { given: GroovyDsl contractDsl = GroovyDsl.make { request { @@ -306,17 +358,22 @@ class JaxRsClientSpockMethodBuilderSpec extends Specification implements WireMoc status 200 } } - JaxRsClientSpockMethodBodyBuilder builder = new JaxRsClientSpockMethodBodyBuilder(contractDsl) + MethodBodyBuilder builder = methodBuilder(contractDsl) BlockBuilder blockBuilder = new BlockBuilder(" ") when: builder.appendTo(blockBuilder) then: - blockBuilder.toString().contains("request('text/plain')") + blockBuilder.toString().contains(requestString) and: - stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) + stubMappingIsValidWireMockStub(contractDsl) + where: + methodBuilderName | methodBuilder | requestString + "JaxRsClientSpockMethodBodyBuilder" | { GroovyDsl dsl -> new JaxRsClientSpockMethodBodyBuilder(dsl) } | "request('text/plain')" + "JaxRsClientJUnitMethodBodyBuilder" | { GroovyDsl dsl -> new JaxRsClientJUnitMethodBodyBuilder(dsl) } | 'request("text/plain")' } - def "should ignore 'Content-Type' header and use 'entity' method"() { + @Unroll + def "should ignore 'Content-Type' header and use 'entity' method with #methodBuilderName"() { given: GroovyDsl contractDsl = GroovyDsl.make { request { @@ -332,19 +389,25 @@ class JaxRsClientSpockMethodBuilderSpec extends Specification implements WireMoc status 200 } } - JaxRsClientSpockMethodBodyBuilder builder = new JaxRsClientSpockMethodBodyBuilder(contractDsl) + MethodBodyBuilder builder = methodBuilder(contractDsl) BlockBuilder blockBuilder = new BlockBuilder(" ") when: builder.appendTo(blockBuilder) then: - blockBuilder.toString().contains("""entity('', 'text/plain')""") - blockBuilder.toString().contains("""header('Timer', '123')""") - !blockBuilder.toString().contains("""header('Content-Type'""") + for (String requestString : requestStrings) { + blockBuilder.toString().contains(requestString) + } + !blockBuilder.toString().contains("""Content Type""") and: - stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) + stubMappingIsValidWireMockStub(contractDsl) + where: + methodBuilderName | methodBuilder | requestStrings + "JaxRsClientSpockMethodBodyBuilder" | { GroovyDsl dsl -> new JaxRsClientSpockMethodBodyBuilder(dsl) } | ["""entity('', 'text/plain')""", """header('Timer', '123')"""] + "JaxRsClientJUnitMethodBodyBuilder" | { GroovyDsl dsl -> new JaxRsClientJUnitMethodBodyBuilder(dsl) } | ['entity("\\"\\"", "text/plain")', 'header("Timer", "123")'] } - def "should generate a call with an url path and query parameters"() { + @Unroll + def "should generate a call with an url path and query parameters with #methodBuilderName"() { given: GroovyDsl contractDsl = GroovyDsl.make { request { @@ -374,28 +437,33 @@ class JaxRsClientSpockMethodBuilderSpec extends Specification implements WireMoc """ } } - JaxRsClientSpockMethodBodyBuilder builder = new JaxRsClientSpockMethodBodyBuilder(contractDsl) + MethodBodyBuilder builder = methodBuilder(contractDsl) BlockBuilder blockBuilder = new BlockBuilder(" ") when: builder.appendTo(blockBuilder) - def spockTest = blockBuilder.toString() + def test = blockBuilder.toString() then: - spockTest.contains("queryParam('limit', '10'") - spockTest.contains("queryParam('offset', '20'") - spockTest.contains("queryParam('filter', 'email'") - spockTest.contains("queryParam('sort', 'name'") - spockTest.contains("queryParam('search', '55'") - spockTest.contains("queryParam('age', '99'") - spockTest.contains("queryParam('name', 'Denis.Stepanov'") - spockTest.contains("queryParam('email', 'bob@email.com'") - spockTest.contains("""assertThatJson(parsedJson).field("property1").isEqualTo("a")""") - spockTest.contains("""assertThatJson(parsedJson).field("property2").isEqualTo("b")""") + test.contains(modifyStringIfRequired.call("queryParam('limit', '10'")) + test.contains(modifyStringIfRequired.call("queryParam('offset', '20'")) + test.contains(modifyStringIfRequired.call("queryParam('filter', 'email'")) + test.contains(modifyStringIfRequired.call("queryParam('sort', 'name'")) + test.contains(modifyStringIfRequired.call("queryParam('search', '55'")) + test.contains(modifyStringIfRequired.call("queryParam('age', '99'")) + test.contains(modifyStringIfRequired.call("queryParam('name', 'Denis.Stepanov'")) + test.contains(modifyStringIfRequired.call("queryParam('email', 'bob@email.com'")) + test.contains(modifyStringIfRequired.call("""assertThatJson(parsedJson).field("property1").isEqualTo("a")""")) + test.contains(modifyStringIfRequired.call("""assertThatJson(parsedJson).field("property2").isEqualTo("b")""")) and: - stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) + stubMappingIsValidWireMockStub(contractDsl) + where: + methodBuilderName | methodBuilder | modifyStringIfRequired + "JaxRsClientSpockMethodBodyBuilder" | { GroovyDsl dsl -> new JaxRsClientSpockMethodBodyBuilder(dsl) } | { String paramString -> paramString } + "JaxRsClientJUnitMethodBodyBuilder" | { GroovyDsl dsl -> new JaxRsClientJUnitMethodBodyBuilder(dsl) } | { String paramString -> paramString.replace("'", "\"") } } @Issue('#169') - def "should generate a call with an url path and query parameters with url containing a pattern"() { + @Unroll + def "should generate a call with an url path and query parameters with url containing a pattern with #methodBuilderName"() { given: GroovyDsl contractDsl = GroovyDsl.make { request { @@ -425,27 +493,32 @@ class JaxRsClientSpockMethodBuilderSpec extends Specification implements WireMoc """ } } - JaxRsClientSpockMethodBodyBuilder builder = new JaxRsClientSpockMethodBodyBuilder(contractDsl) + MethodBodyBuilder builder = methodBuilder(contractDsl) BlockBuilder blockBuilder = new BlockBuilder(" ") when: builder.appendTo(blockBuilder) - def spockTest = blockBuilder.toString() + def test = blockBuilder.toString() then: - spockTest.contains("queryParam('limit', '10'") - spockTest.contains("queryParam('offset', '20'") - spockTest.contains("queryParam('filter', 'email'") - spockTest.contains("queryParam('sort', 'name'") - spockTest.contains("queryParam('search', '55'") - spockTest.contains("queryParam('age', '99'") - spockTest.contains("queryParam('name', 'Denis.Stepanov'") - spockTest.contains("queryParam('email', 'bob@email.com'") - spockTest.contains("""assertThatJson(parsedJson).field("property1").isEqualTo("a")""") - spockTest.contains("""assertThatJson(parsedJson).field("property2").isEqualTo("b")""") + test.contains(modifyStringIfRequired.call("queryParam('limit', '10'")) + test.contains(modifyStringIfRequired.call("queryParam('offset', '20'")) + test.contains(modifyStringIfRequired.call("queryParam('filter', 'email'")) + test.contains(modifyStringIfRequired.call("queryParam('sort', 'name'")) + test.contains(modifyStringIfRequired.call("queryParam('search', '55'")) + test.contains(modifyStringIfRequired.call("queryParam('age', '99'")) + test.contains(modifyStringIfRequired.call("queryParam('name', 'Denis.Stepanov'")) + test.contains(modifyStringIfRequired.call("queryParam('email', 'bob@email.com'")) + test.contains(modifyStringIfRequired.call("""assertThatJson(parsedJson).field("property1").isEqualTo("a")""")) + test.contains(modifyStringIfRequired.call("""assertThatJson(parsedJson).field("property2").isEqualTo("b")""")) and: - stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) + stubMappingIsValidWireMockStub(contractDsl) + where: + methodBuilderName | methodBuilder | modifyStringIfRequired + "JaxRsClientSpockMethodBodyBuilder" | { GroovyDsl dsl -> new JaxRsClientSpockMethodBodyBuilder(dsl) } | { String paramString -> paramString } + "JaxRsClientJUnitMethodBodyBuilder" | { GroovyDsl dsl -> new JaxRsClientJUnitMethodBodyBuilder(dsl) } | { String paramString -> paramString.replace("'", "\"") } } - def "should generate test for empty body"() { + @Unroll + def "should generate test for empty body with #methodBuilderName"() { given: GroovyDsl contractDsl = GroovyDsl.make { request { @@ -457,18 +530,24 @@ class JaxRsClientSpockMethodBuilderSpec extends Specification implements WireMoc status 406 } } - JaxRsClientSpockMethodBodyBuilder builder = new JaxRsClientSpockMethodBodyBuilder(contractDsl) + + MethodBodyBuilder builder = methodBuilder(contractDsl) BlockBuilder blockBuilder = new BlockBuilder(" ") when: builder.appendTo(blockBuilder) def spockTest = blockBuilder.toString() then: - spockTest.contains("entity('', 'application/octet-stream')") + spockTest.contains(bodyString) and: - stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) + stubMappingIsValidWireMockStub(contractDsl) + where: + methodBuilderName | methodBuilder | bodyString + "JaxRsClientSpockMethodBodyBuilder" | { GroovyDsl dsl -> new JaxRsClientSpockMethodBodyBuilder(dsl) } | "entity('', 'application/octet-stream')" + "JaxRsClientJUnitMethodBodyBuilder" | { GroovyDsl dsl -> new JaxRsClientJUnitMethodBodyBuilder(dsl) } | 'entity("\\"\\"", "application/octet-stream"' } - def "should generate test for String in response body"() { + @Unroll + def "should generate test for String in response body with #methodBodyName"() { given: GroovyDsl contractDsl = GroovyDsl.make { request { @@ -480,20 +559,25 @@ class JaxRsClientSpockMethodBuilderSpec extends Specification implements WireMoc body "test" } } - JaxRsClientSpockMethodBodyBuilder builder = new JaxRsClientSpockMethodBodyBuilder(contractDsl) + MethodBodyBuilder builder = methodBuilder(contractDsl) BlockBuilder blockBuilder = new BlockBuilder(" ") when: builder.appendTo(blockBuilder) - def spockTest = blockBuilder.toString() + def test = blockBuilder.toString() then: - spockTest.contains("String responseAsString = response.readEntity(String)") - spockTest.contains('responseBody == "test"') + test.contains(bodyDefinitionString) + test.contains(bodyEvaluationString) and: - stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) + stubMappingIsValidWireMockStub(contractDsl) + where: + methodBuilderName | methodBuilder | bodyDefinitionString | bodyEvaluationString + "JaxRsClientSpockMethodBodyBuilder" | { GroovyDsl dsl -> new JaxRsClientSpockMethodBodyBuilder(dsl) } | "String responseAsString = response.readEntity(String)" | 'responseBody == "test"' + "JaxRsClientJUnitMethodBodyBuilder" | { GroovyDsl dsl -> new JaxRsClientJUnitMethodBodyBuilder(dsl) } | 'Object responseBody = (responseAsString);' | 'assertThat(responseBody).isEqualTo("test");' } @Issue('#171') - def "should generate test with uppercase method name"() { + @Unroll + def "should generate test with uppercase method name with #methodBuilderName"() { given: GroovyDsl contractDsl = GroovyDsl.make { request { @@ -510,15 +594,19 @@ class JaxRsClientSpockMethodBuilderSpec extends Specification implements WireMoc """ } } - JaxRsClientSpockMethodBodyBuilder builder = new JaxRsClientSpockMethodBodyBuilder(contractDsl) + MethodBodyBuilder builder = methodBuilder(contractDsl) BlockBuilder blockBuilder = new BlockBuilder(" ") when: builder.appendTo(blockBuilder) def spockTest = blockBuilder.toString() then: - spockTest.contains(".method('GET')") + spockTest.contains(methodString) and: - stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) + stubMappingIsValidWireMockStub(contractDsl) + where: + methodBuilderName | methodBuilder | methodString + "JaxRsClientSpockMethodBodyBuilder" | { GroovyDsl dsl -> new JaxRsClientSpockMethodBodyBuilder(dsl) } | ".method('GET')" + "JaxRsClientJUnitMethodBodyBuilder" | { GroovyDsl dsl -> new JaxRsClientJUnitMethodBodyBuilder(dsl) } | 'method("GET")' } } diff --git a/accurest-core/src/test/groovy/io/codearte/accurest/builder/MockMvcMethodBuilderSpec.groovy b/accurest-core/src/test/groovy/io/codearte/accurest/builder/MockMvcMethodBodyBuilderSpec.groovy similarity index 83% rename from accurest-core/src/test/groovy/io/codearte/accurest/builder/MockMvcMethodBuilderSpec.groovy rename to accurest-core/src/test/groovy/io/codearte/accurest/builder/MockMvcMethodBodyBuilderSpec.groovy index 14153a93d6..d2390e5cca 100644 --- a/accurest-core/src/test/groovy/io/codearte/accurest/builder/MockMvcMethodBuilderSpec.groovy +++ b/accurest-core/src/test/groovy/io/codearte/accurest/builder/MockMvcMethodBodyBuilderSpec.groovy @@ -14,7 +14,7 @@ import java.util.regex.Pattern /** * @author Jakub Kubrynski */ -class MockMvcMethodBuilderSpec extends Specification implements WireMockStubVerifier { +class MockMvcMethodBodyBuilderSpec extends Specification implements WireMockStubVerifier { @Shared GroovyDsl dslWithOptionalsInString = GroovyDsl.make { @@ -103,8 +103,8 @@ class MockMvcMethodBuilderSpec extends Specification implements WireMockStubVeri stubMappingIsValidWireMockStub(contractDsl) where: methodBuilderName | methodBuilder - "MockMvcSpockMethodBuilder" | { dsl -> new MockMvcSpockMethodBodyBuilder(dsl) } - "MockMvcJUnitMethodBuilder" | { dsl -> new MockMvcJUnitMethodBodyBuilder(dsl) } + "MockMvcSpockMethodBuilder" | { GroovyDsl dsl -> new MockMvcSpockMethodBodyBuilder(dsl) } + "MockMvcJUnitMethodBuilder" | { GroovyDsl dsl -> new MockMvcJUnitMethodBodyBuilder(dsl) } } @Issue("#187") @@ -137,8 +137,8 @@ class MockMvcMethodBuilderSpec extends Specification implements WireMockStubVeri stubMappingIsValidWireMockStub(contractDsl) where: methodBuilderName | methodBuilder - "MockMvcSpockMethodBuilder" | { dsl -> new MockMvcSpockMethodBodyBuilder(dsl) } - "MockMvcJUnitMethodBuilder" | { dsl -> new MockMvcJUnitMethodBodyBuilder(dsl) } + "MockMvcSpockMethodBuilder" | { GroovyDsl dsl -> new MockMvcSpockMethodBodyBuilder(dsl) } + "MockMvcJUnitMethodBuilder" | { GroovyDsl dsl -> new MockMvcJUnitMethodBodyBuilder(dsl) } } @Issue("#79") @@ -173,8 +173,8 @@ class MockMvcMethodBuilderSpec extends Specification implements WireMockStubVeri stubMappingIsValidWireMockStub(contractDsl) where: methodBuilderName | methodBuilder - "MockMvcSpockMethodBuilder" | { dsl -> new MockMvcSpockMethodBodyBuilder(dsl) } - "MockMvcJUnitMethodBuilder" | { dsl -> new MockMvcJUnitMethodBodyBuilder(dsl) } + "MockMvcSpockMethodBuilder" | { GroovyDsl dsl -> new MockMvcSpockMethodBodyBuilder(dsl) } + "MockMvcJUnitMethodBuilder" | { GroovyDsl dsl -> new MockMvcJUnitMethodBodyBuilder(dsl) } } @Issue("#82") @@ -203,8 +203,8 @@ class MockMvcMethodBuilderSpec extends Specification implements WireMockStubVeri stubMappingIsValidWireMockStub(contractDsl) where: methodBuilderName | methodBuilder | bodyString - "MockMvcSpockMethodBuilder" | { dsl -> new MockMvcSpockMethodBodyBuilder(dsl) } | """.body('''{\"items\":[\"HOP\"]}''')""" - "MockMvcJUnitMethodBuilder" | { dsl -> new MockMvcJUnitMethodBodyBuilder(dsl) } | '.body("{\\"items\\":[\\"HOP\\"]}")' + "MockMvcSpockMethodBuilder" | { GroovyDsl dsl -> new MockMvcSpockMethodBodyBuilder(dsl) } | """.body('''{\"items\":[\"HOP\"]}''')""" + "MockMvcJUnitMethodBuilder" | { GroovyDsl dsl -> new MockMvcJUnitMethodBodyBuilder(dsl) } | '.body("{\\"items\\":[\\"HOP\\"]}")' } @Issue("#88") @@ -233,8 +233,8 @@ class MockMvcMethodBuilderSpec extends Specification implements WireMockStubVeri stubMappingIsValidWireMockStub(contractDsl) where: methodBuilderName | methodBuilder | bodyString - "MockMvcSpockMethodBuilder" | { dsl -> new MockMvcSpockMethodBodyBuilder(dsl) } | """.body('''property1=VAL1''')""" - "MockMvcJUnitMethodBuilder" | { dsl -> new MockMvcJUnitMethodBodyBuilder(dsl) } | '.body("\\"property1=VAL1\\"")' + "MockMvcSpockMethodBuilder" | { GroovyDsl dsl -> new MockMvcSpockMethodBodyBuilder(dsl) } | """.body('''property1=VAL1''')""" + "MockMvcJUnitMethodBuilder" | { GroovyDsl dsl -> new MockMvcJUnitMethodBodyBuilder(dsl) } | '.body("\\"property1=VAL1\\"")' } @Issue("185") @@ -267,8 +267,8 @@ class MockMvcMethodBuilderSpec extends Specification implements WireMockStubVeri stubMappingIsValidWireMockStub(contractDsl) where: methodBuilderName | methodBuilder - "MockMvcSpockMethodBuilder" | { dsl -> new MockMvcSpockMethodBodyBuilder(dsl) } - "MockMvcJUnitMethodBuilder" | { dsl -> new MockMvcJUnitMethodBodyBuilder(dsl) } + "MockMvcSpockMethodBuilder" | { GroovyDsl dsl -> new MockMvcSpockMethodBodyBuilder(dsl) } + "MockMvcJUnitMethodBuilder" | { GroovyDsl dsl -> new MockMvcJUnitMethodBodyBuilder(dsl) } } @Unroll @@ -301,8 +301,8 @@ class MockMvcMethodBuilderSpec extends Specification implements WireMockStubVeri stubMappingIsValidWireMockStub(contractDsl) where: methodBuilderName | methodBuilder - "MockMvcSpockMethodBuilder" | { dsl -> new MockMvcSpockMethodBodyBuilder(dsl) } - "MockMvcJUnitMethodBuilder" | { dsl -> new MockMvcJUnitMethodBodyBuilder(dsl) } + "MockMvcSpockMethodBuilder" | { GroovyDsl dsl -> new MockMvcSpockMethodBodyBuilder(dsl) } + "MockMvcJUnitMethodBuilder" | { GroovyDsl dsl -> new MockMvcJUnitMethodBodyBuilder(dsl) } } @Unroll @@ -334,8 +334,8 @@ class MockMvcMethodBuilderSpec extends Specification implements WireMockStubVeri stubMappingIsValidWireMockStub(contractDsl) where: methodBuilderName | methodBuilder - "MockMvcSpockMethodBuilder" | { dsl -> new MockMvcSpockMethodBodyBuilder(dsl) } - "MockMvcJUnitMethodBuilder" | { dsl -> new MockMvcJUnitMethodBodyBuilder(dsl) } + "MockMvcSpockMethodBuilder" | { GroovyDsl dsl -> new MockMvcSpockMethodBodyBuilder(dsl) } + "MockMvcJUnitMethodBuilder" | { GroovyDsl dsl -> new MockMvcJUnitMethodBodyBuilder(dsl) } } @Unroll @@ -367,8 +367,8 @@ class MockMvcMethodBuilderSpec extends Specification implements WireMockStubVeri stubMappingIsValidWireMockStub(contractDsl) where: methodBuilderName | methodBuilder - "MockMvcSpockMethodBuilder" | { dsl -> new MockMvcSpockMethodBodyBuilder(dsl) } - "MockMvcJUnitMethodBuilder" | { dsl -> new MockMvcJUnitMethodBodyBuilder(dsl) } + "MockMvcSpockMethodBuilder" | { GroovyDsl dsl -> new MockMvcSpockMethodBodyBuilder(dsl) } + "MockMvcJUnitMethodBuilder" | { GroovyDsl dsl -> new MockMvcJUnitMethodBodyBuilder(dsl) } } @Unroll @@ -404,8 +404,8 @@ class MockMvcMethodBuilderSpec extends Specification implements WireMockStubVeri stubMappingIsValidWireMockStub(contractDsl) where: methodBuilderName | methodBuilder - "MockMvcSpockMethodBuilder" | { dsl -> new MockMvcSpockMethodBodyBuilder(dsl) } - "MockMvcJUnitMethodBuilder" | { dsl -> new MockMvcJUnitMethodBodyBuilder(dsl) } + "MockMvcSpockMethodBuilder" | { GroovyDsl dsl -> new MockMvcSpockMethodBodyBuilder(dsl) } + "MockMvcJUnitMethodBuilder" | { GroovyDsl dsl -> new MockMvcJUnitMethodBodyBuilder(dsl) } } @Unroll @@ -435,8 +435,8 @@ class MockMvcMethodBuilderSpec extends Specification implements WireMockStubVeri stubMappingIsValidWireMockStub(contractDsl) where: methodBuilderName | methodBuilder - "MockMvcSpockMethodBuilder" | { dsl -> new MockMvcSpockMethodBodyBuilder(dsl) } - "MockMvcJUnitMethodBuilder" | { dsl -> new MockMvcJUnitMethodBodyBuilder(dsl) } + "MockMvcSpockMethodBuilder" | { GroovyDsl dsl -> new MockMvcSpockMethodBodyBuilder(dsl) } + "MockMvcJUnitMethodBuilder" | { GroovyDsl dsl -> new MockMvcJUnitMethodBodyBuilder(dsl) } } @Issue(["#126", "#143"]) @@ -466,8 +466,8 @@ class MockMvcMethodBuilderSpec extends Specification implements WireMockStubVeri stubMappingIsValidWireMockStub(contractDsl) where: methodBuilderName | methodBuilder - "MockMvcSpockMethodBuilder" | { dsl -> new MockMvcSpockMethodBodyBuilder(dsl) } - "MockMvcJUnitMethodBuilder" | { dsl -> new MockMvcJUnitMethodBodyBuilder(dsl) } + "MockMvcSpockMethodBuilder" | { GroovyDsl dsl -> new MockMvcSpockMethodBodyBuilder(dsl) } + "MockMvcJUnitMethodBuilder" | { GroovyDsl dsl -> new MockMvcJUnitMethodBodyBuilder(dsl) } } @Unroll @@ -514,8 +514,8 @@ class MockMvcMethodBuilderSpec extends Specification implements WireMockStubVeri stubMappingIsValidWireMockStub(contractDsl) where: methodBuilderName | methodBuilder - "MockMvcSpockMethodBuilder" | { dsl -> new MockMvcSpockMethodBodyBuilder(dsl) } - "MockMvcJUnitMethodBuilder" | { dsl -> new MockMvcJUnitMethodBodyBuilder(dsl) } + "MockMvcSpockMethodBuilder" | { GroovyDsl dsl -> new MockMvcSpockMethodBodyBuilder(dsl) } + "MockMvcJUnitMethodBuilder" | { GroovyDsl dsl -> new MockMvcJUnitMethodBodyBuilder(dsl) } } @Issue('#169') @@ -563,8 +563,8 @@ class MockMvcMethodBuilderSpec extends Specification implements WireMockStubVeri stubMappingIsValidWireMockStub(contractDsl) where: methodBuilderName | methodBuilder - "MockMvcSpockMethodBuilder" | { dsl -> new MockMvcSpockMethodBodyBuilder(dsl) } - "MockMvcJUnitMethodBuilder" | { dsl -> new MockMvcJUnitMethodBodyBuilder(dsl) } + "MockMvcSpockMethodBuilder" | { GroovyDsl dsl -> new MockMvcSpockMethodBodyBuilder(dsl) } + "MockMvcJUnitMethodBuilder" | { GroovyDsl dsl -> new MockMvcJUnitMethodBodyBuilder(dsl) } } @Unroll @@ -591,8 +591,8 @@ class MockMvcMethodBuilderSpec extends Specification implements WireMockStubVeri stubMappingIsValidWireMockStub(contractDsl) where: methodBuilderName | methodBuilder | bodyString - "MockMvcSpockMethodBuilder" | { dsl -> new MockMvcSpockMethodBodyBuilder(dsl) } | ".body('''''')" - "MockMvcJUnitMethodBuilder" | { dsl -> new MockMvcJUnitMethodBodyBuilder(dsl) } | ".body(\"\\\"\\\"\")" + "MockMvcSpockMethodBuilder" | { GroovyDsl dsl -> new MockMvcSpockMethodBodyBuilder(dsl) } | ".body('''''')" + "MockMvcJUnitMethodBuilder" | { GroovyDsl dsl -> new MockMvcJUnitMethodBodyBuilder(dsl) } | ".body(\"\\\"\\\"\")" } @Unroll @@ -620,8 +620,8 @@ class MockMvcMethodBuilderSpec extends Specification implements WireMockStubVeri stubMappingIsValidWireMockStub(contractDsl) where: methodBuilderName | methodBuilder | bodyDefinitionString | bodyEvaluationString - "MockMvcSpockMethodBuilder" | { dsl -> new MockMvcSpockMethodBodyBuilder(dsl) } | 'def responseBody = (response.body.asString())' | 'responseBody == "test"' - "MockMvcJUnitMethodBuilder" | { dsl -> new MockMvcJUnitMethodBodyBuilder(dsl) } | 'Object responseBody = (response.getBody().asString());' | 'assertThat(responseBody).isEqualTo("test");' + "MockMvcSpockMethodBuilder" | { GroovyDsl dsl -> new MockMvcSpockMethodBodyBuilder(dsl) } | 'def responseBody = (response.body.asString())' | 'responseBody == "test"' + "MockMvcJUnitMethodBuilder" | { GroovyDsl dsl -> new MockMvcJUnitMethodBodyBuilder(dsl) } | 'Object responseBody = (response.getBody().asString());' | 'assertThat(responseBody).isEqualTo("test");' } @Issue('113') @@ -660,8 +660,8 @@ class MockMvcMethodBuilderSpec extends Specification implements WireMockStubVeri stubMappingIsValidWireMockStub(contractDsl) where: methodBuilderName | methodBuilder | headerEvaluationString - "MockMvcSpockMethodBuilder" | { dsl -> new MockMvcSpockMethodBodyBuilder(dsl) } | '''response.header('Location') ==~ java.util.regex.Pattern.compile('http://localhost/partners/[0-9]+/users/[0-9]+')''' - "MockMvcJUnitMethodBuilder" | { dsl -> new MockMvcJUnitMethodBodyBuilder(dsl) } | 'assertThat(response.header("Location")).matches("http://localhost/partners/[0-9]+/users/[0-9]+");' + "MockMvcSpockMethodBuilder" | { GroovyDsl dsl -> new MockMvcSpockMethodBodyBuilder(dsl) } | '''response.header('Location') ==~ java.util.regex.Pattern.compile('http://localhost/partners/[0-9]+/users/[0-9]+')''' + "MockMvcJUnitMethodBuilder" | { GroovyDsl dsl -> new MockMvcJUnitMethodBodyBuilder(dsl) } | 'assertThat(response.header("Location")).matches("http://localhost/partners/[0-9]+/users/[0-9]+");' } @Issue('115') @@ -700,8 +700,8 @@ class MockMvcMethodBuilderSpec extends Specification implements WireMockStubVeri stubMappingIsValidWireMockStub(contractDsl) where: methodBuilderName | methodBuilder | headerEvaluationString - "MockMvcSpockMethodBuilder" | { dsl -> new MockMvcSpockMethodBodyBuilder(dsl) } | '''response.header('Location') ==~ java.util.regex.Pattern.compile('^((http[s]?|ftp):\\/)\\/?([^:\\/\\s]+)(:[0-9]{1,5})?/partners/[0-9]+/users/[0-9]+')''' - "MockMvcJUnitMethodBuilder" | { dsl -> new MockMvcJUnitMethodBodyBuilder(dsl) } | 'assertThat(response.header("Location")).matches("^((http[s]?|ftp):/)/?([^:/s]+)(:[0-9]{1,5})?/partners/[0-9]+/users/[0-9]+");' + "MockMvcSpockMethodBuilder" | { GroovyDsl dsl -> new MockMvcSpockMethodBodyBuilder(dsl) } | '''response.header('Location') ==~ java.util.regex.Pattern.compile('^((http[s]?|ftp):\\/)\\/?([^:\\/\\s]+)(:[0-9]{1,5})?/partners/[0-9]+/users/[0-9]+')''' + "MockMvcJUnitMethodBuilder" | { GroovyDsl dsl -> new MockMvcJUnitMethodBodyBuilder(dsl) } | 'assertThat(response.header("Location")).matches("^((http[s]?|ftp):/)/?([^:/s]+)(:[0-9]{1,5})?/partners/[0-9]+/users/[0-9]+");' } @Unroll @@ -742,8 +742,8 @@ class MockMvcMethodBuilderSpec extends Specification implements WireMockStubVeri stubMappingIsValidWireMockStub(contractDsl) where: methodBuilderName | methodBuilder - "MockMvcSpockMethodBuilder" | { dsl -> new MockMvcSpockMethodBodyBuilder(dsl) } - "MockMvcJUnitMethodBuilder" | { dsl -> new MockMvcJUnitMethodBodyBuilder(dsl) } + "MockMvcSpockMethodBuilder" | { GroovyDsl dsl -> new MockMvcSpockMethodBodyBuilder(dsl) } + "MockMvcJUnitMethodBuilder" | { GroovyDsl dsl -> new MockMvcJUnitMethodBodyBuilder(dsl) } } @Unroll @@ -776,8 +776,8 @@ class MockMvcMethodBuilderSpec extends Specification implements WireMockStubVeri stubMappingIsValidWireMockStub(contractDsl) where: methodBuilderName | methodBuilder - "MockMvcSpockMethodBuilder" | { dsl -> new MockMvcSpockMethodBodyBuilder(dsl) } - "MockMvcJUnitMethodBuilder" | { dsl -> new MockMvcJUnitMethodBodyBuilder(dsl) } + "MockMvcSpockMethodBuilder" | { GroovyDsl dsl -> new MockMvcSpockMethodBodyBuilder(dsl) } + "MockMvcJUnitMethodBuilder" | { GroovyDsl dsl -> new MockMvcJUnitMethodBodyBuilder(dsl) } } @Unroll @@ -816,8 +816,8 @@ class MockMvcMethodBuilderSpec extends Specification implements WireMockStubVeri test.contains("""assertThatJson(parsedJson).field("message").matches("User not found by email = \\\\\\\\[[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\\\\\\\.[a-zA-Z]{2,4}\\\\\\\\]")""") where: methodBuilderName | methodBuilder - "MockMvcSpockMethodBuilder" | { dsl -> new MockMvcSpockMethodBodyBuilder(dsl) } - "MockMvcJUnitMethodBuilder" | { dsl -> new MockMvcJUnitMethodBodyBuilder(dsl) } + "MockMvcSpockMethodBuilder" | { GroovyDsl dsl -> new MockMvcSpockMethodBodyBuilder(dsl) } + "MockMvcJUnitMethodBuilder" | { GroovyDsl dsl -> new MockMvcJUnitMethodBodyBuilder(dsl) } } @Issue('42') @@ -898,8 +898,8 @@ class MockMvcMethodBuilderSpec extends Specification implements WireMockStubVeri test.contains(assertionString) where: methodBuilderName | methodBuilder | assertionString - "MockMvcSpockMethodBuilder" | { dsl -> new MockMvcSpockMethodBodyBuilder(dsl) } | '''assertThatRejectionReasonIsNull(parsedJson.read('$.rejectionReason'))''' - "MockMvcJUnitMethodBuilder" | { dsl -> new MockMvcJUnitMethodBodyBuilder(dsl) } | '''assertThatRejectionReasonIsNull(parsedJson.read("$.rejectionReason"))''' + "MockMvcSpockMethodBuilder" | { GroovyDsl dsl -> new MockMvcSpockMethodBodyBuilder(dsl) } | '''assertThatRejectionReasonIsNull(parsedJson.read('$.rejectionReason'))''' + "MockMvcJUnitMethodBuilder" | { GroovyDsl dsl -> new MockMvcJUnitMethodBodyBuilder(dsl) } | '''assertThatRejectionReasonIsNull(parsedJson.read("$.rejectionReason"))''' } @Unroll @@ -966,8 +966,8 @@ class MockMvcMethodBuilderSpec extends Specification implements WireMockStubVeri !test.contains("cursor") where: methodBuilderName | methodBuilder | bodyString - "MockMvcSpockMethodBuilder" | { dsl -> new MockMvcSpockMethodBodyBuilder(dsl) } | '"street":"Light Street"' - "MockMvcJUnitMethodBuilder" | { dsl -> new MockMvcJUnitMethodBodyBuilder(dsl) } | '\\"street\\":\\"Light Street\\"' + "MockMvcSpockMethodBuilder" | { GroovyDsl dsl -> new MockMvcSpockMethodBodyBuilder(dsl) } | '"street":"Light Street"' + "MockMvcJUnitMethodBuilder" | { GroovyDsl dsl -> new MockMvcJUnitMethodBodyBuilder(dsl) } | '\\"street\\":\\"Light Street\\"' } @@ -1006,8 +1006,8 @@ class MockMvcMethodBuilderSpec extends Specification implements WireMockStubVeri !test.contains("\\u041f") where: methodBuilderName | methodBuilder - "MockMvcSpockMethodBuilder" | { dsl -> new MockMvcSpockMethodBodyBuilder(dsl) } - "MockMvcJUnitMethodBuilder" | { dsl -> new MockMvcJUnitMethodBodyBuilder(dsl) } + "MockMvcSpockMethodBuilder" | { GroovyDsl dsl -> new MockMvcSpockMethodBodyBuilder(dsl) } + "MockMvcJUnitMethodBuilder" | { GroovyDsl dsl -> new MockMvcJUnitMethodBodyBuilder(dsl) } } @Issue('177') @@ -1034,9 +1034,9 @@ World.''') test.contains(bodyString) where: methodBuilderName | methodBuilder | bodyString - "MockMvcSpockMethodBuilder" | { dsl -> new MockMvcSpockMethodBodyBuilder(dsl) } | """'''hello, + "MockMvcSpockMethodBuilder" | { GroovyDsl dsl -> new MockMvcSpockMethodBodyBuilder(dsl) } | """'''hello, World.'''""" - "MockMvcJUnitMethodBuilder" | { dsl -> new MockMvcJUnitMethodBodyBuilder(dsl) } | '\\"hello,\\nWorld.\\"' + "MockMvcJUnitMethodBuilder" | { GroovyDsl dsl -> new MockMvcJUnitMethodBodyBuilder(dsl) } | '\\"hello,\\nWorld.\\"' } @Issue('180') @@ -1071,11 +1071,11 @@ World.'''""" } where: methodBuilderName | methodBuilder | requestStrings - "MockMvcSpockMethodBuilder" | { dsl -> new MockMvcSpockMethodBodyBuilder(dsl) } | ["""'content-type', 'multipart/form-data;boundary=AaB03x'""", + "MockMvcSpockMethodBuilder" | { GroovyDsl dsl -> new MockMvcSpockMethodBodyBuilder(dsl) } | ["""'content-type', 'multipart/form-data;boundary=AaB03x'""", """.param('formParameter', '"formParameterValue"'""", """.param('someBooleanParameter', 'true')""", """.multiPart('file', 'filename.csv', 'file content'.bytes)"""] - "MockMvcJUnitMethodBuilder" | { dsl -> new MockMvcJUnitMethodBodyBuilder(dsl) } | ['"content-type", "multipart/form-data;boundary=AaB03x"', + "MockMvcJUnitMethodBuilder" | { GroovyDsl dsl -> new MockMvcJUnitMethodBodyBuilder(dsl) } | ['"content-type", "multipart/form-data;boundary=AaB03x"', '.param("formParameter", "\\"formParameterValue\\"")', '.param("someBooleanParameter", "true")', '.multiPart("file", "filename.csv", "file content".getBytes());'] @@ -1110,12 +1110,8 @@ World.'''""" test.contains('.multiPart') where: methodBuilderName | methodBuilder - "MockMvcSpockMethodBuilder" | { dsl -> new MockMvcSpockMethodBodyBuilder(dsl) } - "MockMvcJUnitMethodBuilder" | { dsl -> new MockMvcJUnitMethodBodyBuilder(dsl) } + "MockMvcSpockMethodBuilder" | { GroovyDsl dsl -> new MockMvcSpockMethodBodyBuilder(dsl) } + "MockMvcJUnitMethodBuilder" | { GroovyDsl dsl -> new MockMvcJUnitMethodBodyBuilder(dsl) } } - - protected void stubMappingIsValidWireMockStub(GroovyDsl contractDsl) { - stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) - } } diff --git a/accurest-core/src/test/groovy/io/codearte/accurest/dsl/WireMockStubVerifier.groovy b/accurest-core/src/test/groovy/io/codearte/accurest/dsl/WireMockStubVerifier.groovy index 6665a642e9..bb4ec0e18d 100644 --- a/accurest-core/src/test/groovy/io/codearte/accurest/dsl/WireMockStubVerifier.groovy +++ b/accurest-core/src/test/groovy/io/codearte/accurest/dsl/WireMockStubVerifier.groovy @@ -1,6 +1,7 @@ package io.codearte.accurest.dsl import com.github.tomakehurst.wiremock.stubbing.StubMapping +import io.codearte.accurest.file.Contract import java.util.regex.Pattern @@ -14,4 +15,8 @@ trait WireMockStubVerifier { assert !mappingDefinition.contains('io.codearte.accurest.dsl.internal') } + void stubMappingIsValidWireMockStub(GroovyDsl contractDsl) { + stubMappingIsValidWireMockStub(new WireMockStubStrategy("Test", new Contract(null, false, 0, null), contractDsl).toWireMockClientStub()) + } + } From 853a3953092d996d60cb0e35aeb410c28ab4ef0b Mon Sep 17 00:00:00 2001 From: Olga Maciaszek-Sharma Date: Mon, 22 Feb 2016 16:23:01 +0100 Subject: [PATCH 10/22] Fixed JaxrsClient method builder spec naming. --- .../accurest/SingleTestGeneratorSpec.groovy | 24 ++++++++++++++++++- ...vy => JaxRsClientMethodBuilderSpec.groovy} | 10 ++++---- 2 files changed, 28 insertions(+), 6 deletions(-) rename accurest-core/src/test/groovy/io/codearte/accurest/builder/{JaxRsClientSpockMethodBuilderSpec.groovy => JaxRsClientMethodBuilderSpec.groovy} (98%) diff --git a/accurest-core/src/test/groovy/io/codearte/accurest/SingleTestGeneratorSpec.groovy b/accurest-core/src/test/groovy/io/codearte/accurest/SingleTestGeneratorSpec.groovy index 7a9d560c9b..7d2254e27c 100644 --- a/accurest-core/src/test/groovy/io/codearte/accurest/SingleTestGeneratorSpec.groovy +++ b/accurest-core/src/test/groovy/io/codearte/accurest/SingleTestGeneratorSpec.groovy @@ -42,7 +42,29 @@ class SingleTestGeneratorSpec extends Specification { } @Unroll - def "should build test class for #testFramework"() { + def "should build MockMvc test class for #testFramework"() { + given: + AccurestConfigProperties properties = new AccurestConfigProperties(); + properties.targetFramework = testFramework + Contract contract = new Contract(file.toPath(), true, 1, 2) + contract.ignored >> true + contract.order >> 2 + SingleTestGenerator testGenerator = new SingleTestGenerator(properties) + + when: + String clazz = testGenerator.buildClass([contract], "test", "test") + + then: + classStrings.forEach({ clazz.contains(it) }) + + where: + testFramework | classStrings + JUNIT | jUnitClassStrings + SPOCK | spockClassStrings + } + + @Unroll + def "should build JaxRs test class for #testFramework"() { given: AccurestConfigProperties properties = new AccurestConfigProperties(); properties.targetFramework = testFramework diff --git a/accurest-core/src/test/groovy/io/codearte/accurest/builder/JaxRsClientSpockMethodBuilderSpec.groovy b/accurest-core/src/test/groovy/io/codearte/accurest/builder/JaxRsClientMethodBuilderSpec.groovy similarity index 98% rename from accurest-core/src/test/groovy/io/codearte/accurest/builder/JaxRsClientSpockMethodBuilderSpec.groovy rename to accurest-core/src/test/groovy/io/codearte/accurest/builder/JaxRsClientMethodBuilderSpec.groovy index e2fdca8146..f659c0bab5 100644 --- a/accurest-core/src/test/groovy/io/codearte/accurest/builder/JaxRsClientSpockMethodBuilderSpec.groovy +++ b/accurest-core/src/test/groovy/io/codearte/accurest/builder/JaxRsClientMethodBuilderSpec.groovy @@ -8,7 +8,7 @@ import spock.lang.Issue import spock.lang.Specification import spock.lang.Unroll -class JaxRsClientSpockMethodBuilderSpec extends Specification implements WireMockStubVerifier { +class JaxRsClientMethodBuilderSpec extends Specification implements WireMockStubVerifier { @Unroll def "should generate assertions for simple response body with #methodBuilderName"() { @@ -535,9 +535,9 @@ class JaxRsClientSpockMethodBuilderSpec extends Specification implements WireMoc BlockBuilder blockBuilder = new BlockBuilder(" ") when: builder.appendTo(blockBuilder) - def spockTest = blockBuilder.toString() + def test = blockBuilder.toString() then: - spockTest.contains(bodyString) + test.contains(bodyString) and: stubMappingIsValidWireMockStub(contractDsl) where: @@ -598,9 +598,9 @@ class JaxRsClientSpockMethodBuilderSpec extends Specification implements WireMoc BlockBuilder blockBuilder = new BlockBuilder(" ") when: builder.appendTo(blockBuilder) - def spockTest = blockBuilder.toString() + def test = blockBuilder.toString() then: - spockTest.contains(methodString) + test.contains(methodString) and: stubMappingIsValidWireMockStub(contractDsl) where: From 28bc9225a8ca9515259ccdfc7b3e21af67615c1e Mon Sep 17 00:00:00 2001 From: Olga Maciaszek-Sharma Date: Mon, 22 Feb 2016 16:36:02 +0100 Subject: [PATCH 11/22] Fixed Jaxrs imports for JUnit in SingleTestGenerator. --- .../groovy/io/codearte/accurest/SingleTestGenerator.groovy | 2 +- .../io/codearte/accurest/SingleTestGeneratorSpec.groovy | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/accurest-core/src/main/groovy/io/codearte/accurest/SingleTestGenerator.groovy b/accurest-core/src/main/groovy/io/codearte/accurest/SingleTestGenerator.groovy index 42ca73417c..12fefbe155 100644 --- a/accurest-core/src/main/groovy/io/codearte/accurest/SingleTestGenerator.groovy +++ b/accurest-core/src/main/groovy/io/codearte/accurest/SingleTestGenerator.groovy @@ -53,7 +53,7 @@ class SingleTestGenerator { if (configProperties.testMode == TestMode.JAXRSCLIENT) { clazz.addStaticImport('javax.ws.rs.client.Entity.*') if (configProperties.targetFramework == TestFramework.JUNIT) { - clazz.addImport('import javax.ws.rs.core.Response') + clazz.addImport('javax.ws.rs.core.Response') } } else if (configProperties.testMode == TestMode.MOCKMVC) { clazz.addStaticImport('com.jayway.restassured.module.mockmvc.RestAssuredMockMvc.*') diff --git a/accurest-core/src/test/groovy/io/codearte/accurest/SingleTestGeneratorSpec.groovy b/accurest-core/src/test/groovy/io/codearte/accurest/SingleTestGeneratorSpec.groovy index 7d2254e27c..7496f83446 100644 --- a/accurest-core/src/test/groovy/io/codearte/accurest/SingleTestGeneratorSpec.groovy +++ b/accurest-core/src/test/groovy/io/codearte/accurest/SingleTestGeneratorSpec.groovy @@ -1,6 +1,7 @@ package io.codearte.accurest import io.codearte.accurest.config.AccurestConfigProperties +import io.codearte.accurest.config.TestMode import io.codearte.accurest.file.Contract import org.junit.Rule import org.junit.rules.TemporaryFolder @@ -67,6 +68,7 @@ class SingleTestGeneratorSpec extends Specification { def "should build JaxRs test class for #testFramework"() { given: AccurestConfigProperties properties = new AccurestConfigProperties(); + properties.testMode = TestMode.JAXRSCLIENT properties.targetFramework = testFramework Contract contract = new Contract(file.toPath(), true, 1, 2) contract.ignored >> true @@ -81,8 +83,8 @@ class SingleTestGeneratorSpec extends Specification { where: testFramework | classStrings - JUNIT | jUnitClassStrings - SPOCK | spockClassStrings + JUNIT | ['import static javax.ws.rs.client.Entity.*;', 'import javax.ws.rs.core.Response;'] + SPOCK | ['import static javax.ws.rs.client.Entity.*;'] } From b507a5169a774b17050c84e5c37d9a07732b57c1 Mon Sep 17 00:00:00 2001 From: Olga Maciaszek-Sharma Date: Mon, 22 Feb 2016 16:43:48 +0100 Subject: [PATCH 12/22] Fixed adding too many colons in simple string body assertion. --- .../io/codearte/accurest/builder/JUnitMethodBodyBuilder.groovy | 2 +- .../io/codearte/accurest/builder/MethodBodyBuilder.groovy | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/accurest-core/src/main/groovy/io/codearte/accurest/builder/JUnitMethodBodyBuilder.groovy b/accurest-core/src/main/groovy/io/codearte/accurest/builder/JUnitMethodBodyBuilder.groovy index c5f33b921a..51cabcbade 100644 --- a/accurest-core/src/main/groovy/io/codearte/accurest/builder/JUnitMethodBodyBuilder.groovy +++ b/accurest-core/src/main/groovy/io/codearte/accurest/builder/JUnitMethodBodyBuilder.groovy @@ -42,7 +42,7 @@ abstract class JUnitMethodBodyBuilder extends MethodBodyBuilder { @Override protected String getResponseBodyPropertyComparisonString(String property, String value) { - return "assertThat(responseBody${property}).isEqualTo(\"${value}\");" + return "assertThat(responseBody${property}).isEqualTo(\"${value}\")" } @Override diff --git a/accurest-core/src/main/groovy/io/codearte/accurest/builder/MethodBodyBuilder.groovy b/accurest-core/src/main/groovy/io/codearte/accurest/builder/MethodBodyBuilder.groovy index a795923e0e..e8b9efb6e0 100644 --- a/accurest-core/src/main/groovy/io/codearte/accurest/builder/MethodBodyBuilder.groovy +++ b/accurest-core/src/main/groovy/io/codearte/accurest/builder/MethodBodyBuilder.groovy @@ -192,7 +192,6 @@ abstract class MethodBodyBuilder { addColonIfRequired(blockBuilder) } else { blockBuilder.addLine(getResponseBodyPropertyComparisonString(property, value)) - addColonIfRequired(blockBuilder) } } From 723aa2d37b7f654b24433b06764e982aa4926bca Mon Sep 17 00:00:00 2001 From: Olga Maciaszek-Sharma Date: Tue, 23 Feb 2016 14:09:19 +0100 Subject: [PATCH 13/22] Fixed selecting the right method builder for test framework. Added functional tests for JUnit. --- .../accurest/SingleTestGenerator.groovy | 5 ++ .../accurest/builder/MethodBuilder.groovy | 8 ++- .../plugin/AccurestGradlePlugin.groovy | 1 + .../plugin/SampleJerseyProjectSpec.groovy | 30 +++++++- .../accurest/plugin/SampleProjectSpec.groovy | 30 +++++++- .../com/blogspot/toomuchcoding/MvcTest.java | 70 +++++++++++++++++++ .../com/blogspot/toomuchcoding/MvcTest.java | 18 +++++ build.gradle | 1 + 8 files changed, 160 insertions(+), 3 deletions(-) create mode 100644 accurest-gradle-plugin/src/test/resources/functionalTest/sampleJerseyProject/fraudDetectionService/src/test/java/com/blogspot/toomuchcoding/MvcTest.java create mode 100644 accurest-gradle-plugin/src/test/resources/functionalTest/sampleProject/fraudDetectionService/src/test/java/com/blogspot/toomuchcoding/MvcTest.java diff --git a/accurest-core/src/main/groovy/io/codearte/accurest/SingleTestGenerator.groovy b/accurest-core/src/main/groovy/io/codearte/accurest/SingleTestGenerator.groovy index 12fefbe155..6175152361 100644 --- a/accurest-core/src/main/groovy/io/codearte/accurest/SingleTestGenerator.groovy +++ b/accurest-core/src/main/groovy/io/codearte/accurest/SingleTestGenerator.groovy @@ -62,7 +62,12 @@ class SingleTestGenerator { } if (configProperties.targetFramework == TestFramework.JUNIT) { + if (configProperties.testMode == TestMode.MOCKMVC) { + clazz.addImport('com.jayway.restassured.module.mockmvc.specification.MockMvcRequestSpecification') + clazz.addImport('com.jayway.restassured.response.ResponseOptions') + } clazz.addImport('org.junit.Test') + clazz.addStaticImport('org.assertj.core.api.Assertions.assertThat') } if (configProperties.ruleClassForTests) { diff --git a/accurest-core/src/main/groovy/io/codearte/accurest/builder/MethodBuilder.groovy b/accurest-core/src/main/groovy/io/codearte/accurest/builder/MethodBuilder.groovy index 9f0ba231d7..b3d9c5c286 100644 --- a/accurest-core/src/main/groovy/io/codearte/accurest/builder/MethodBuilder.groovy +++ b/accurest-core/src/main/groovy/io/codearte/accurest/builder/MethodBuilder.groovy @@ -48,8 +48,14 @@ class MethodBuilder { blockBuilder.addLine('}') } - private SpockMethodBodyBuilder getMethodBodyBuilder() { + private MethodBodyBuilder getMethodBodyBuilder() { + if (configProperties.testMode == TestMode.MOCKMVC && configProperties.targetFramework == TestFramework.JUNIT){ + return new MockMvcJUnitMethodBodyBuilder(stubContent) + } if (configProperties.testMode == TestMode.JAXRSCLIENT) { + if (configProperties.targetFramework == TestFramework.JUNIT){ + return new JaxRsClientJUnitMethodBodyBuilder(stubContent) + } return new JaxRsClientSpockMethodBodyBuilder(stubContent) } return new MockMvcSpockMethodBodyBuilder(stubContent) diff --git a/accurest-gradle-plugin/src/main/groovy/io/codearte/accurest/plugin/AccurestGradlePlugin.groovy b/accurest-gradle-plugin/src/main/groovy/io/codearte/accurest/plugin/AccurestGradlePlugin.groovy index fc8d4bfded..7edaf642d6 100644 --- a/accurest-gradle-plugin/src/main/groovy/io/codearte/accurest/plugin/AccurestGradlePlugin.groovy +++ b/accurest-gradle-plugin/src/main/groovy/io/codearte/accurest/plugin/AccurestGradlePlugin.groovy @@ -30,6 +30,7 @@ class AccurestGradlePlugin implements Plugin { deprecatedCreateAndConfigureGenerateWiremockClientStubsFromDslTask() project.dependencies.add("testCompile", "com.github.tomakehurst:wiremock:2.0.5-beta") project.dependencies.add("testCompile", "com.blogspot.toomuchcoding:jsonassert:${extension.getJsonAssertVersion()}") + project.dependencies.add("testCompile", "org.assertj:assertj-core:3.3.0") project.afterEvaluate { def hasIdea = project.plugins.findPlugin(IDEA_PLUGIN_CLASS) diff --git a/accurest-gradle-plugin/src/test/groovy/io/codearte/accurest/plugin/SampleJerseyProjectSpec.groovy b/accurest-gradle-plugin/src/test/groovy/io/codearte/accurest/plugin/SampleJerseyProjectSpec.groovy index 789d897199..9784abcb05 100755 --- a/accurest-gradle-plugin/src/test/groovy/io/codearte/accurest/plugin/SampleJerseyProjectSpec.groovy +++ b/accurest-gradle-plugin/src/test/groovy/io/codearte/accurest/plugin/SampleJerseyProjectSpec.groovy @@ -3,19 +3,47 @@ package io.codearte.accurest.plugin import nebula.test.IntegrationSpec import spock.lang.Stepwise +import java.nio.file.Files +import java.nio.file.Path + +import static java.nio.charset.StandardCharsets.UTF_8 +import static java.nio.charset.StandardCharsets.UTF_8 + @Stepwise class SampleJerseyProjectSpec extends IntegrationSpec { + public static final String SPOCK = "targetFramework = 'Spock'" + public static final String JUNIT = "targetFramework = 'JUnit'" + public static final String MVC_SPEC = "baseClassForTests = 'com.blogspot.toomuchcoding.MvcSpec'" + public static final String MVC_TEST = "baseClassForTests = 'com.blogspot.toomuchcoding.MvcTest'" + void setup() { copyResources("functionalTest/sampleJerseyProject", "") runTasksSuccessfully('clean') //delete accidental output when previously importing SimpleBoot into Idea to tweak it } - def "should pass basic flow"() { + def "should pass basic flow for Spock"() { given: assert fileExists('build.gradle') expect: runTasksSuccessfully('check') } + def "should pass basic flow for JUnit"() { + given: + switchToJunitTestFramework() + assert fileExists('build.gradle') + expect: + runTasksSuccessfully('check') + } + + + private void switchToJunitTestFramework() { + Path path = buildFile.toPath() + String content = new StringBuilder(new String(Files.readAllBytes(path), UTF_8)).replaceAll(SPOCK, JUNIT) + .replaceAll(MVC_SPEC, MVC_TEST) + Files.write(path, content.getBytes(UTF_8)) + } + + } diff --git a/accurest-gradle-plugin/src/test/groovy/io/codearte/accurest/plugin/SampleProjectSpec.groovy b/accurest-gradle-plugin/src/test/groovy/io/codearte/accurest/plugin/SampleProjectSpec.groovy index e32b8810f4..4ff481157f 100755 --- a/accurest-gradle-plugin/src/test/groovy/io/codearte/accurest/plugin/SampleProjectSpec.groovy +++ b/accurest-gradle-plugin/src/test/groovy/io/codearte/accurest/plugin/SampleProjectSpec.groovy @@ -2,20 +2,48 @@ package io.codearte.accurest.plugin import nebula.test.IntegrationSpec import spock.lang.Stepwise +import spock.lang.Unroll + +import java.nio.file.Files +import java.nio.file.Path + +import static java.nio.charset.StandardCharsets.UTF_8 +import static java.nio.charset.StandardCharsets.UTF_8 @Stepwise class SampleProjectSpec extends IntegrationSpec { + public static final String SPOCK = "targetFramework = 'Spock'" + public static final String JUNIT = "targetFramework = 'JUnit'" + public static final String MVC_SPEC = "baseClassForTests = 'com.blogspot.toomuchcoding.MvcSpec'" + public static final String MVC_TEST = "baseClassForTests = 'com.blogspot.toomuchcoding.MvcTest'" + void setup() { copyResources("functionalTest/sampleProject", "") runTasksSuccessfully('clean') //delete accidental output when previously importing SimpleBoot into Idea to tweak it } - def "should pass basic flow"() { + def "should pass basic flow for Spock"() { given: assert fileExists('build.gradle') expect: runTasksSuccessfully('check') } + def "should pass basic flow for JUnit"() { + given: + switchToJunitTestFramework() + assert fileExists('build.gradle') + expect: + runTasksSuccessfully('check') + } + + + private void switchToJunitTestFramework() { + Path path = buildFile.toPath() + String content = new StringBuilder(new String(Files.readAllBytes(path), UTF_8)).replaceAll(SPOCK, JUNIT) + .replaceAll(MVC_SPEC, MVC_TEST) + Files.write(path, content.getBytes(UTF_8)) + } + } diff --git a/accurest-gradle-plugin/src/test/resources/functionalTest/sampleJerseyProject/fraudDetectionService/src/test/java/com/blogspot/toomuchcoding/MvcTest.java b/accurest-gradle-plugin/src/test/resources/functionalTest/sampleJerseyProject/fraudDetectionService/src/test/java/com/blogspot/toomuchcoding/MvcTest.java new file mode 100644 index 0000000000..d13134ecc8 --- /dev/null +++ b/accurest-gradle-plugin/src/test/resources/functionalTest/sampleJerseyProject/fraudDetectionService/src/test/java/com/blogspot/toomuchcoding/MvcTest.java @@ -0,0 +1,70 @@ +package com.blogspot.toomuchcoding; +import com.blogspot.toomuchcoding.frauddetection.Application; +import com.blogspot.toomuchcoding.frauddetection.FraudRestApplication; +import org.eclipse.jetty.server.Server; +import org.glassfish.jersey.apache.connector.ApacheConnectorProvider; +import org.glassfish.jersey.client.ClientConfig; +import org.glassfish.jersey.jetty.JettyHttpContainerFactory; +import org.glassfish.jersey.server.ResourceConfig; +import org.junit.AfterClass; +import org.junit.BeforeClass; +import org.springframework.context.annotation.AnnotationConfigApplicationContext; + +import javax.ws.rs.client.Client; +import javax.ws.rs.client.ClientBuilder; +import javax.ws.rs.client.WebTarget; +import javax.ws.rs.core.UriBuilder; + +import java.net.URI; + +import static org.springframework.util.SocketUtils.findAvailableTcpPort; + +public abstract class MvcTest { + + public static WebTarget webTarget; + + private static Server server; + + private static Client client; + + @BeforeClass + public static void setupTest() { + + URI baseUri = UriBuilder.fromUri("http://localhost").port(findAvailableTcpPort(8000)).build(); + + + ResourceConfig resourceConfig = ResourceConfig.forApplication(new FraudRestApplication()); + resourceConfig.property("contextConfig", new AnnotationConfigApplicationContext(Application.class)); + server = JettyHttpContainerFactory.createServer(baseUri, resourceConfig, true); + + ClientConfig clientConfig = new ClientConfig(); + clientConfig.connectorProvider(new ApacheConnectorProvider()); + client = ClientBuilder.newClient(clientConfig); + + webTarget = client.target(baseUri); + + try { + server.start(); + } catch (Exception e) { + e.printStackTrace(); + } + } + + @AfterClass + public static void cleanupTest() { + if(client != null) { + client.close(); + } + if (server != null) { + try { + server.stop(); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + + public void assertThatRejectionReasonIsNull(Object rejectionReason) { + assert rejectionReason == null; + } +} \ No newline at end of file diff --git a/accurest-gradle-plugin/src/test/resources/functionalTest/sampleProject/fraudDetectionService/src/test/java/com/blogspot/toomuchcoding/MvcTest.java b/accurest-gradle-plugin/src/test/resources/functionalTest/sampleProject/fraudDetectionService/src/test/java/com/blogspot/toomuchcoding/MvcTest.java new file mode 100644 index 0000000000..e9d083bde4 --- /dev/null +++ b/accurest-gradle-plugin/src/test/resources/functionalTest/sampleProject/fraudDetectionService/src/test/java/com/blogspot/toomuchcoding/MvcTest.java @@ -0,0 +1,18 @@ +package com.blogspot.toomuchcoding; + +import com.blogspot.toomuchcoding.frauddetection.FraudDetectionController; +import com.jayway.restassured.module.mockmvc.RestAssuredMockMvc; +import spock.lang.Specification; +import org.junit.Before; + +public class MvcTest { + + @Before + public void setup() { + RestAssuredMockMvc.standaloneSetup(new com.blogspot.toomuchcoding.frauddetection.FraudDetectionController()); + } + + public void assertThatRejectionReasonIsNull(Object rejectionReason) { + assert rejectionReason== null; + } +} \ No newline at end of file diff --git a/build.gradle b/build.gradle index 16011ddca1..1895c32f22 100644 --- a/build.gradle +++ b/build.gradle @@ -73,6 +73,7 @@ project(':accurest-core') { compile 'asm:asm:3.3.1' compile "com.github.tomakehurst:wiremock:$wiremockVersion" compile "com.blogspot.toomuchcoding:jsonassert:$jsonassertVersion" + compile 'org.assertj:assertj-core:[3.3.0,)' testCompile 'cglib:cglib-nodep:2.2' testCompile 'org.objenesis:objenesis:2.1' testCompile project(':accurest-testing-utils') From fcbcd9e50f360ea2c29513bb31a49bf227e5ae76 Mon Sep 17 00:00:00 2001 From: Olga Maciaszek-Sharma Date: Tue, 23 Feb 2016 14:52:40 +0100 Subject: [PATCH 14/22] Fixed test to take into account Java escape characters. --- .../codearte/accurest/util/JsonToJsonPathsConverterSpec.groovy | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/accurest-core/src/test/groovy/io/codearte/accurest/util/JsonToJsonPathsConverterSpec.groovy b/accurest-core/src/test/groovy/io/codearte/accurest/util/JsonToJsonPathsConverterSpec.groovy index 2b712db6b6..980fb5fcef 100644 --- a/accurest-core/src/test/groovy/io/codearte/accurest/util/JsonToJsonPathsConverterSpec.groovy +++ b/accurest-core/src/test/groovy/io/codearte/accurest/util/JsonToJsonPathsConverterSpec.groovy @@ -483,7 +483,7 @@ class JsonToJsonPathsConverterSpec extends Specification { JsonPaths pathAndValues = JsonToJsonPathsConverter.transformToJsonPathWithTestsSideValues(json) then: pathAndValues.find { - it.method()== """.field("property2").matches("\\d+")""" && + it.method()== """.field("property2").matches("\\\\d+")""" && it.jsonPath() == """\$[?(@.property2 =~ /\\d+/)]""" } and: From 7e6cb3b9b348a1400e63bd0e9e5f2e2a11ed6a91 Mon Sep 17 00:00:00 2001 From: Olga Maciaszek-Sharma Date: Tue, 23 Feb 2016 15:14:08 +0100 Subject: [PATCH 15/22] Fixed missing space. --- .../src/test/java/com/blogspot/toomuchcoding/MvcTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/accurest-gradle-plugin/src/test/resources/functionalTest/sampleProject/fraudDetectionService/src/test/java/com/blogspot/toomuchcoding/MvcTest.java b/accurest-gradle-plugin/src/test/resources/functionalTest/sampleProject/fraudDetectionService/src/test/java/com/blogspot/toomuchcoding/MvcTest.java index e9d083bde4..f8d460e160 100644 --- a/accurest-gradle-plugin/src/test/resources/functionalTest/sampleProject/fraudDetectionService/src/test/java/com/blogspot/toomuchcoding/MvcTest.java +++ b/accurest-gradle-plugin/src/test/resources/functionalTest/sampleProject/fraudDetectionService/src/test/java/com/blogspot/toomuchcoding/MvcTest.java @@ -13,6 +13,6 @@ public class MvcTest { } public void assertThatRejectionReasonIsNull(Object rejectionReason) { - assert rejectionReason== null; + assert rejectionReason == null; } } \ No newline at end of file From 44c78710a0b514aa2b90e8f40dcd1bf22d0f2d47 Mon Sep 17 00:00:00 2001 From: Olga Maciaszek-Sharma Date: Tue, 23 Feb 2016 15:15:21 +0100 Subject: [PATCH 16/22] Fixed wrong line spacing. --- .../groovy/io/codearte/accurest/SingleTestGenerator.groovy | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/accurest-core/src/main/groovy/io/codearte/accurest/SingleTestGenerator.groovy b/accurest-core/src/main/groovy/io/codearte/accurest/SingleTestGenerator.groovy index 6175152361..51210d3f49 100644 --- a/accurest-core/src/main/groovy/io/codearte/accurest/SingleTestGenerator.groovy +++ b/accurest-core/src/main/groovy/io/codearte/accurest/SingleTestGenerator.groovy @@ -15,8 +15,7 @@ import static io.codearte.accurest.util.NamesUtil.capitalize @Slf4j class SingleTestGenerator { - private static - final String JSON_ASSERT_STATIC_IMPORT = 'com.blogspot.toomuchcoding.jsonassert.JsonAssertion.assertThatJson' + private static final String JSON_ASSERT_STATIC_IMPORT = 'com.blogspot.toomuchcoding.jsonassert.JsonAssertion.assertThatJson' private static final String JSON_ASSERT_CLASS = 'com.blogspot.toomuchcoding.jsonassert.JsonAssertion' private final AccurestConfigProperties configProperties From 190cd5bc155f928057d27d542f1713b159885637 Mon Sep 17 00:00:00 2001 From: Olga Maciaszek-Sharma Date: Tue, 23 Feb 2016 15:18:15 +0100 Subject: [PATCH 17/22] Switched to lineSuffix use. --- .../codearte/accurest/builder/JUnitMethodBodyBuilder.groovy | 4 +++- .../builder/JaxRsClientJUnitMethodBodyBuilder.groovy | 5 ++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/accurest-core/src/main/groovy/io/codearte/accurest/builder/JUnitMethodBodyBuilder.groovy b/accurest-core/src/main/groovy/io/codearte/accurest/builder/JUnitMethodBodyBuilder.groovy index 51cabcbade..bcec159597 100644 --- a/accurest-core/src/main/groovy/io/codearte/accurest/builder/JUnitMethodBodyBuilder.groovy +++ b/accurest-core/src/main/groovy/io/codearte/accurest/builder/JUnitMethodBodyBuilder.groovy @@ -3,6 +3,7 @@ package io.codearte.accurest.builder import groovy.json.StringEscapeUtils import groovy.transform.PackageScope import groovy.transform.TypeChecked +import io.codearte.accurest.config.TestFramework import io.codearte.accurest.dsl.GroovyDsl import io.codearte.accurest.dsl.internal.ExecutionProperty import io.codearte.accurest.dsl.internal.Header @@ -10,6 +11,7 @@ import io.codearte.accurest.dsl.internal.NamedProperty import io.codearte.accurest.dsl.internal.Request import static groovy.json.StringEscapeUtils.escapeJava +import static io.codearte.accurest.config.TestFramework.JUNIT import static io.codearte.accurest.util.ContentUtils.getJavaMultipartFileParameterContent /** @@ -36,7 +38,7 @@ abstract class JUnitMethodBodyBuilder extends MethodBodyBuilder { @Override protected BlockBuilder addColonIfRequired(BlockBuilder blockBuilder) { - blockBuilder.addAtTheEnd(';') + blockBuilder.addAtTheEnd(JUNIT.lineSuffix) return blockBuilder } diff --git a/accurest-core/src/main/groovy/io/codearte/accurest/builder/JaxRsClientJUnitMethodBodyBuilder.groovy b/accurest-core/src/main/groovy/io/codearte/accurest/builder/JaxRsClientJUnitMethodBodyBuilder.groovy index 79180caf54..67827a70b9 100644 --- a/accurest-core/src/main/groovy/io/codearte/accurest/builder/JaxRsClientJUnitMethodBodyBuilder.groovy +++ b/accurest-core/src/main/groovy/io/codearte/accurest/builder/JaxRsClientJUnitMethodBodyBuilder.groovy @@ -1,10 +1,13 @@ package io.codearte.accurest.builder +import io.codearte.accurest.config.TestFramework import io.codearte.accurest.dsl.GroovyDsl import io.codearte.accurest.dsl.internal.Header import io.codearte.accurest.dsl.internal.QueryParameter import io.codearte.accurest.dsl.internal.QueryParameters +import static io.codearte.accurest.config.TestFramework.JUNIT + /** * @author Olga Maciaszek-Sharma @since 21.02.16 @@ -31,7 +34,7 @@ class JaxRsClientJUnitMethodBodyBuilder extends JUnitMethodBodyBuilder { appendRequestWithRequiredResponseContentType(bb) appendHeaders(bb) appendMethodAndBody(bb) - bb.addAtTheEnd(';') + bb.addAtTheEnd(JUNIT.lineSuffix) bb.unindent() From 8279dceb6531465e820593b16b1e903324e816c5 Mon Sep 17 00:00:00 2001 From: Olga Maciaszek-Sharma Date: Tue, 23 Feb 2016 20:49:39 +0100 Subject: [PATCH 18/22] Added improvement after code review: stripFirstChar(). Removed unused imports. Removed unnecessary TODO item. --- .../accurest/builder/JUnitMethodBodyBuilder.groovy | 1 - .../builder/JaxRsClientJUnitMethodBodyBuilder.groovy | 1 - .../codearte/accurest/builder/MethodBodyBuilder.groovy | 9 ++++++--- .../codearte/accurest/dsl/internal/QueryParameter.groovy | 8 ++++---- .../io/codearte/accurest/dsl/internal/UrlPath.groovy | 4 ++-- .../io/codearte/accurest/file/ContractFileScanner.groovy | 1 - .../accurest/builder/MockMvcMethodBodyBuilderSpec.groovy | 2 -- .../accurest/file/ContractFileScannerSpec.groovy | 1 - .../accurest/plugin/SampleJerseyProjectSpec.groovy | 4 ++-- .../io/codearte/accurest/plugin/SampleProjectSpec.groovy | 2 -- .../toomuchcoding/frauddetection/Application.java | 1 - .../test/java/com/blogspot/toomuchcoding/MvcTest.java | 2 +- .../test/java/com/blogspot/toomuchcoding/MvcTest.java | 2 -- 13 files changed, 15 insertions(+), 23 deletions(-) diff --git a/accurest-core/src/main/groovy/io/codearte/accurest/builder/JUnitMethodBodyBuilder.groovy b/accurest-core/src/main/groovy/io/codearte/accurest/builder/JUnitMethodBodyBuilder.groovy index bcec159597..bd84b6ab41 100644 --- a/accurest-core/src/main/groovy/io/codearte/accurest/builder/JUnitMethodBodyBuilder.groovy +++ b/accurest-core/src/main/groovy/io/codearte/accurest/builder/JUnitMethodBodyBuilder.groovy @@ -3,7 +3,6 @@ package io.codearte.accurest.builder import groovy.json.StringEscapeUtils import groovy.transform.PackageScope import groovy.transform.TypeChecked -import io.codearte.accurest.config.TestFramework import io.codearte.accurest.dsl.GroovyDsl import io.codearte.accurest.dsl.internal.ExecutionProperty import io.codearte.accurest.dsl.internal.Header diff --git a/accurest-core/src/main/groovy/io/codearte/accurest/builder/JaxRsClientJUnitMethodBodyBuilder.groovy b/accurest-core/src/main/groovy/io/codearte/accurest/builder/JaxRsClientJUnitMethodBodyBuilder.groovy index 67827a70b9..27c5d0f51a 100644 --- a/accurest-core/src/main/groovy/io/codearte/accurest/builder/JaxRsClientJUnitMethodBodyBuilder.groovy +++ b/accurest-core/src/main/groovy/io/codearte/accurest/builder/JaxRsClientJUnitMethodBodyBuilder.groovy @@ -1,6 +1,5 @@ package io.codearte.accurest.builder -import io.codearte.accurest.config.TestFramework import io.codearte.accurest.dsl.GroovyDsl import io.codearte.accurest.dsl.internal.Header import io.codearte.accurest.dsl.internal.QueryParameter diff --git a/accurest-core/src/main/groovy/io/codearte/accurest/builder/MethodBodyBuilder.groovy b/accurest-core/src/main/groovy/io/codearte/accurest/builder/MethodBodyBuilder.groovy index e8b9efb6e0..a78488d441 100644 --- a/accurest-core/src/main/groovy/io/codearte/accurest/builder/MethodBodyBuilder.groovy +++ b/accurest-core/src/main/groovy/io/codearte/accurest/builder/MethodBodyBuilder.groovy @@ -20,7 +20,6 @@ import io.codearte.accurest.util.JsonToJsonPathsConverter import io.codearte.accurest.util.MapConverter import static io.codearte.accurest.util.ContentUtils.extractValue -import static io.codearte.accurest.util.ContentUtils.getGroovyMultipartFileParameterContent import static io.codearte.accurest.util.ContentUtils.recognizeContentTypeFromContent import static io.codearte.accurest.util.ContentUtils.recognizeContentTypeFromHeader @@ -187,7 +186,7 @@ abstract class MethodBodyBuilder { protected void processText(BlockBuilder blockBuilder, String property, String value) { if (value.startsWith('$')) { - value = value.substring(1).replaceAll('\\$value', "responseBody$property") + value = stripFirstChar(value).replaceAll('\\$value', "responseBody$property") blockBuilder.addLine(value) addColonIfRequired(blockBuilder) } else { @@ -195,6 +194,10 @@ abstract class MethodBodyBuilder { } } + private String stripFirstChar(String s) { + return s.substring(1); + } + protected void processBodyElement(BlockBuilder blockBuilder, String property, Object value) { } @@ -210,7 +213,7 @@ abstract class MethodBodyBuilder { } protected String trimRepeatedQuotes(String toTrim) { - return toTrim.startsWith('"') ? toTrim.replaceAll('"', '') : toTrim // TODO: implement for JUnit + return toTrim.startsWith('"') ? toTrim.replaceAll('"', '') : toTrim } protected Object extractServerValueFromBody(bodyValue) { diff --git a/accurest-core/src/main/groovy/io/codearte/accurest/dsl/internal/QueryParameter.groovy b/accurest-core/src/main/groovy/io/codearte/accurest/dsl/internal/QueryParameter.groovy index 153fa6f297..c0ca01c97b 100644 --- a/accurest-core/src/main/groovy/io/codearte/accurest/dsl/internal/QueryParameter.groovy +++ b/accurest-core/src/main/groovy/io/codearte/accurest/dsl/internal/QueryParameter.groovy @@ -1,10 +1,10 @@ -package io.codearte.accurest.dsl.internal; +package io.codearte.accurest.dsl.internal -import groovy.transform.CompileStatic; -import groovy.transform.EqualsAndHashCode; +import groovy.transform.CompileStatic +import groovy.transform.EqualsAndHashCode import groovy.transform.ToString -import static io.codearte.accurest.util.ValidateUtils.validateServerValueIsAvailable; +import static io.codearte.accurest.util.ValidateUtils.validateServerValueIsAvailable @EqualsAndHashCode(includeFields = true) @ToString(includePackage = false, includeFields = true, ignoreNulls = true, includeNames = true) diff --git a/accurest-core/src/main/groovy/io/codearte/accurest/dsl/internal/UrlPath.groovy b/accurest-core/src/main/groovy/io/codearte/accurest/dsl/internal/UrlPath.groovy index 68d9bc0f7d..4b77520cc3 100644 --- a/accurest-core/src/main/groovy/io/codearte/accurest/dsl/internal/UrlPath.groovy +++ b/accurest-core/src/main/groovy/io/codearte/accurest/dsl/internal/UrlPath.groovy @@ -1,8 +1,8 @@ package io.codearte.accurest.dsl.internal -import groovy.transform.CompileStatic; +import groovy.transform.CompileStatic import groovy.transform.EqualsAndHashCode -import groovy.transform.ToString; +import groovy.transform.ToString @ToString(includePackage = false, includeFields = true, includeNames = true) @EqualsAndHashCode(includeFields = true) diff --git a/accurest-core/src/main/groovy/io/codearte/accurest/file/ContractFileScanner.groovy b/accurest-core/src/main/groovy/io/codearte/accurest/file/ContractFileScanner.groovy index 1e1e27c310..8c0ea132ec 100644 --- a/accurest-core/src/main/groovy/io/codearte/accurest/file/ContractFileScanner.groovy +++ b/accurest-core/src/main/groovy/io/codearte/accurest/file/ContractFileScanner.groovy @@ -2,7 +2,6 @@ package io.codearte.accurest.file import com.google.common.collect.ArrayListMultimap import com.google.common.collect.ListMultimap -import com.google.common.collect.Multimap import org.apache.commons.io.FilenameUtils import java.nio.file.FileSystem diff --git a/accurest-core/src/test/groovy/io/codearte/accurest/builder/MockMvcMethodBodyBuilderSpec.groovy b/accurest-core/src/test/groovy/io/codearte/accurest/builder/MockMvcMethodBodyBuilderSpec.groovy index d2390e5cca..ab3a0ae4c3 100644 --- a/accurest-core/src/test/groovy/io/codearte/accurest/builder/MockMvcMethodBodyBuilderSpec.groovy +++ b/accurest-core/src/test/groovy/io/codearte/accurest/builder/MockMvcMethodBodyBuilderSpec.groovy @@ -1,9 +1,7 @@ package io.codearte.accurest.builder import io.codearte.accurest.dsl.GroovyDsl -import io.codearte.accurest.dsl.WireMockStubStrategy import io.codearte.accurest.dsl.WireMockStubVerifier -import io.codearte.accurest.file.Contract import spock.lang.Issue import spock.lang.Shared import spock.lang.Specification diff --git a/accurest-core/src/test/groovy/io/codearte/accurest/file/ContractFileScannerSpec.groovy b/accurest-core/src/test/groovy/io/codearte/accurest/file/ContractFileScannerSpec.groovy index e02e06cc56..30a5def61c 100644 --- a/accurest-core/src/test/groovy/io/codearte/accurest/file/ContractFileScannerSpec.groovy +++ b/accurest-core/src/test/groovy/io/codearte/accurest/file/ContractFileScannerSpec.groovy @@ -1,7 +1,6 @@ package io.codearte.accurest.file import com.google.common.collect.ListMultimap -import com.google.common.collect.Multimap import spock.lang.Specification import java.nio.file.Path diff --git a/accurest-gradle-plugin/src/test/groovy/io/codearte/accurest/plugin/SampleJerseyProjectSpec.groovy b/accurest-gradle-plugin/src/test/groovy/io/codearte/accurest/plugin/SampleJerseyProjectSpec.groovy index 9784abcb05..4c8c4026a1 100755 --- a/accurest-gradle-plugin/src/test/groovy/io/codearte/accurest/plugin/SampleJerseyProjectSpec.groovy +++ b/accurest-gradle-plugin/src/test/groovy/io/codearte/accurest/plugin/SampleJerseyProjectSpec.groovy @@ -6,7 +6,6 @@ import spock.lang.Stepwise import java.nio.file.Files import java.nio.file.Path -import static java.nio.charset.StandardCharsets.UTF_8 import static java.nio.charset.StandardCharsets.UTF_8 @Stepwise @@ -19,7 +18,8 @@ class SampleJerseyProjectSpec extends IntegrationSpec { void setup() { copyResources("functionalTest/sampleJerseyProject", "") - runTasksSuccessfully('clean') //delete accidental output when previously importing SimpleBoot into Idea to tweak it + runTasksSuccessfully('clean') + //delete accidental output when previously importing SimpleBoot into Idea to tweak it } def "should pass basic flow for Spock"() { diff --git a/accurest-gradle-plugin/src/test/groovy/io/codearte/accurest/plugin/SampleProjectSpec.groovy b/accurest-gradle-plugin/src/test/groovy/io/codearte/accurest/plugin/SampleProjectSpec.groovy index 4ff481157f..9bb3c390f9 100755 --- a/accurest-gradle-plugin/src/test/groovy/io/codearte/accurest/plugin/SampleProjectSpec.groovy +++ b/accurest-gradle-plugin/src/test/groovy/io/codearte/accurest/plugin/SampleProjectSpec.groovy @@ -2,12 +2,10 @@ package io.codearte.accurest.plugin import nebula.test.IntegrationSpec import spock.lang.Stepwise -import spock.lang.Unroll import java.nio.file.Files import java.nio.file.Path -import static java.nio.charset.StandardCharsets.UTF_8 import static java.nio.charset.StandardCharsets.UTF_8 @Stepwise diff --git a/accurest-gradle-plugin/src/test/resources/functionalTest/sampleJerseyProject/fraudDetectionService/src/main/java/com/blogspot/toomuchcoding/frauddetection/Application.java b/accurest-gradle-plugin/src/test/resources/functionalTest/sampleJerseyProject/fraudDetectionService/src/main/java/com/blogspot/toomuchcoding/frauddetection/Application.java index 2089bda142..99a72fbf26 100644 --- a/accurest-gradle-plugin/src/test/resources/functionalTest/sampleJerseyProject/fraudDetectionService/src/main/java/com/blogspot/toomuchcoding/frauddetection/Application.java +++ b/accurest-gradle-plugin/src/test/resources/functionalTest/sampleJerseyProject/fraudDetectionService/src/main/java/com/blogspot/toomuchcoding/frauddetection/Application.java @@ -1,6 +1,5 @@ package com.blogspot.toomuchcoding.frauddetection; -import org.glassfish.jersey.client.HttpUrlConnectorProvider; import org.glassfish.jersey.server.ResourceConfig; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; diff --git a/accurest-gradle-plugin/src/test/resources/functionalTest/sampleJerseyProject/fraudDetectionService/src/test/java/com/blogspot/toomuchcoding/MvcTest.java b/accurest-gradle-plugin/src/test/resources/functionalTest/sampleJerseyProject/fraudDetectionService/src/test/java/com/blogspot/toomuchcoding/MvcTest.java index d13134ecc8..d36d31e510 100644 --- a/accurest-gradle-plugin/src/test/resources/functionalTest/sampleJerseyProject/fraudDetectionService/src/test/java/com/blogspot/toomuchcoding/MvcTest.java +++ b/accurest-gradle-plugin/src/test/resources/functionalTest/sampleJerseyProject/fraudDetectionService/src/test/java/com/blogspot/toomuchcoding/MvcTest.java @@ -1,4 +1,5 @@ package com.blogspot.toomuchcoding; + import com.blogspot.toomuchcoding.frauddetection.Application; import com.blogspot.toomuchcoding.frauddetection.FraudRestApplication; import org.eclipse.jetty.server.Server; @@ -14,7 +15,6 @@ import javax.ws.rs.client.Client; import javax.ws.rs.client.ClientBuilder; import javax.ws.rs.client.WebTarget; import javax.ws.rs.core.UriBuilder; - import java.net.URI; import static org.springframework.util.SocketUtils.findAvailableTcpPort; diff --git a/accurest-gradle-plugin/src/test/resources/functionalTest/sampleProject/fraudDetectionService/src/test/java/com/blogspot/toomuchcoding/MvcTest.java b/accurest-gradle-plugin/src/test/resources/functionalTest/sampleProject/fraudDetectionService/src/test/java/com/blogspot/toomuchcoding/MvcTest.java index f8d460e160..084a65ebf5 100644 --- a/accurest-gradle-plugin/src/test/resources/functionalTest/sampleProject/fraudDetectionService/src/test/java/com/blogspot/toomuchcoding/MvcTest.java +++ b/accurest-gradle-plugin/src/test/resources/functionalTest/sampleProject/fraudDetectionService/src/test/java/com/blogspot/toomuchcoding/MvcTest.java @@ -1,8 +1,6 @@ package com.blogspot.toomuchcoding; -import com.blogspot.toomuchcoding.frauddetection.FraudDetectionController; import com.jayway.restassured.module.mockmvc.RestAssuredMockMvc; -import spock.lang.Specification; import org.junit.Before; public class MvcTest { From 8f61701d7d05ee128477a25dba3579a55fc030d6 Mon Sep 17 00:00:00 2001 From: Olga Maciaszek-Sharma Date: Tue, 23 Feb 2016 20:56:10 +0100 Subject: [PATCH 19/22] Added AccurestIntegrationSpec. --- .../plugin/AccurestIntegrationSpec.groovy | 29 +++++++++++++++++++ .../plugin/SampleJerseyProjectSpec.groovy | 22 +------------- .../accurest/plugin/SampleProjectSpec.groovy | 21 +------------- 3 files changed, 31 insertions(+), 41 deletions(-) create mode 100644 accurest-gradle-plugin/src/test/groovy/io/codearte/accurest/plugin/AccurestIntegrationSpec.groovy diff --git a/accurest-gradle-plugin/src/test/groovy/io/codearte/accurest/plugin/AccurestIntegrationSpec.groovy b/accurest-gradle-plugin/src/test/groovy/io/codearte/accurest/plugin/AccurestIntegrationSpec.groovy new file mode 100644 index 0000000000..8454662519 --- /dev/null +++ b/accurest-gradle-plugin/src/test/groovy/io/codearte/accurest/plugin/AccurestIntegrationSpec.groovy @@ -0,0 +1,29 @@ +package io.codearte.accurest.plugin + +import nebula.test.IntegrationSpec + +import java.nio.file.Files +import java.nio.file.Path + +import static java.nio.charset.StandardCharsets.UTF_8 +import static java.nio.charset.StandardCharsets.UTF_8 + +/** + * @author Olga Maciaszek-Sharma + @since 23.02.16 + */ +class AccurestIntegrationSpec extends IntegrationSpec{ + + public static final String SPOCK = "targetFramework = 'Spock'" + public static final String JUNIT = "targetFramework = 'JUnit'" + public static final String MVC_SPEC = "baseClassForTests = 'com.blogspot.toomuchcoding.MvcSpec'" + public static final String MVC_TEST = "baseClassForTests = 'com.blogspot.toomuchcoding.MvcTest'" + + protected void switchToJunitTestFramework() { + Path path = buildFile.toPath() + String content = new StringBuilder(new String(Files.readAllBytes(path), UTF_8)).replaceAll(SPOCK, JUNIT) + .replaceAll(MVC_SPEC, MVC_TEST) + Files.write(path, content.getBytes(UTF_8)) + } + +} diff --git a/accurest-gradle-plugin/src/test/groovy/io/codearte/accurest/plugin/SampleJerseyProjectSpec.groovy b/accurest-gradle-plugin/src/test/groovy/io/codearte/accurest/plugin/SampleJerseyProjectSpec.groovy index 4c8c4026a1..d314e6c526 100755 --- a/accurest-gradle-plugin/src/test/groovy/io/codearte/accurest/plugin/SampleJerseyProjectSpec.groovy +++ b/accurest-gradle-plugin/src/test/groovy/io/codearte/accurest/plugin/SampleJerseyProjectSpec.groovy @@ -1,20 +1,9 @@ package io.codearte.accurest.plugin -import nebula.test.IntegrationSpec import spock.lang.Stepwise -import java.nio.file.Files -import java.nio.file.Path - -import static java.nio.charset.StandardCharsets.UTF_8 - @Stepwise -class SampleJerseyProjectSpec extends IntegrationSpec { - - public static final String SPOCK = "targetFramework = 'Spock'" - public static final String JUNIT = "targetFramework = 'JUnit'" - public static final String MVC_SPEC = "baseClassForTests = 'com.blogspot.toomuchcoding.MvcSpec'" - public static final String MVC_TEST = "baseClassForTests = 'com.blogspot.toomuchcoding.MvcTest'" +class SampleJerseyProjectSpec extends AccurestIntegrationSpec { void setup() { copyResources("functionalTest/sampleJerseyProject", "") @@ -37,13 +26,4 @@ class SampleJerseyProjectSpec extends IntegrationSpec { runTasksSuccessfully('check') } - - private void switchToJunitTestFramework() { - Path path = buildFile.toPath() - String content = new StringBuilder(new String(Files.readAllBytes(path), UTF_8)).replaceAll(SPOCK, JUNIT) - .replaceAll(MVC_SPEC, MVC_TEST) - Files.write(path, content.getBytes(UTF_8)) - } - - } diff --git a/accurest-gradle-plugin/src/test/groovy/io/codearte/accurest/plugin/SampleProjectSpec.groovy b/accurest-gradle-plugin/src/test/groovy/io/codearte/accurest/plugin/SampleProjectSpec.groovy index 9bb3c390f9..fefe2d9869 100755 --- a/accurest-gradle-plugin/src/test/groovy/io/codearte/accurest/plugin/SampleProjectSpec.groovy +++ b/accurest-gradle-plugin/src/test/groovy/io/codearte/accurest/plugin/SampleProjectSpec.groovy @@ -1,20 +1,9 @@ package io.codearte.accurest.plugin -import nebula.test.IntegrationSpec import spock.lang.Stepwise -import java.nio.file.Files -import java.nio.file.Path - -import static java.nio.charset.StandardCharsets.UTF_8 - @Stepwise -class SampleProjectSpec extends IntegrationSpec { - - public static final String SPOCK = "targetFramework = 'Spock'" - public static final String JUNIT = "targetFramework = 'JUnit'" - public static final String MVC_SPEC = "baseClassForTests = 'com.blogspot.toomuchcoding.MvcSpec'" - public static final String MVC_TEST = "baseClassForTests = 'com.blogspot.toomuchcoding.MvcTest'" +class SampleProjectSpec extends AccurestIntegrationSpec { void setup() { copyResources("functionalTest/sampleProject", "") @@ -36,12 +25,4 @@ class SampleProjectSpec extends IntegrationSpec { runTasksSuccessfully('check') } - - private void switchToJunitTestFramework() { - Path path = buildFile.toPath() - String content = new StringBuilder(new String(Files.readAllBytes(path), UTF_8)).replaceAll(SPOCK, JUNIT) - .replaceAll(MVC_SPEC, MVC_TEST) - Files.write(path, content.getBytes(UTF_8)) - } - } From 9fa51611a12909ea14f6e89e5bacbd147bf4315c Mon Sep 17 00:00:00 2001 From: Olga Maciaszek-Sharma Date: Tue, 23 Feb 2016 21:40:19 +0100 Subject: [PATCH 20/22] Added more checks in tests. --- .../accurest/SingleTestGeneratorSpec.groovy | 3 ++- .../accurest/plugin/ScenarioProjectSpec.groovy | 12 ++++++++++-- .../java/com/blogspot/toomuchcoding/MvcTest.java | 16 ++++++++++++++++ 3 files changed, 28 insertions(+), 3 deletions(-) create mode 100644 accurest-gradle-plugin/src/test/resources/functionalTest/scenarioProject/fraudDetectionService/src/test/java/com/blogspot/toomuchcoding/MvcTest.java diff --git a/accurest-core/src/test/groovy/io/codearte/accurest/SingleTestGeneratorSpec.groovy b/accurest-core/src/test/groovy/io/codearte/accurest/SingleTestGeneratorSpec.groovy index 7496f83446..d3f37399c2 100644 --- a/accurest-core/src/test/groovy/io/codearte/accurest/SingleTestGeneratorSpec.groovy +++ b/accurest-core/src/test/groovy/io/codearte/accurest/SingleTestGeneratorSpec.groovy @@ -20,7 +20,8 @@ class SingleTestGeneratorSpec extends Specification { static List jUnitClassStrings = ['package test;', 'import com.jayway.jsonpath.DocumentContext;', 'import com.jayway.jsonpath.JsonPath;', 'import org.junit.FixMethodOrder;', 'import org.junit.Ignore;', 'import org.junit.Test;', 'import org.junit.runners.MethodSorters;', 'import static com.blogspot.toomuchcoding.jsonassert.JsonAssertion.assertThatJson;', 'import static com.jayway.restassured.module.mockmvc.RestAssuredMockMvc.*;', - '@FixMethodOrder(MethodSorters.NAME_ASCENDING)', '@Test', '@Ignore'] + '@FixMethodOrder(MethodSorters.NAME_ASCENDING)', '@Test', '@Ignore', 'mport com.jayway.restassured.module.mockmvc.specification.MockMvcRequestSpecification;', + 'import com.jayway.restassured.response.ResponseOptions;', 'import static org.assertj.core.api.Assertions.assertThat;'] static List spockClassStrings = ['package test', 'import com.jayway.jsonpath.DocumentContext', 'import com.jayway.jsonpath.JsonPath', 'import spock.lang.Ignore', 'import spock.lang.Specification', 'import spock.lang.Stepwise', diff --git a/accurest-gradle-plugin/src/test/groovy/io/codearte/accurest/plugin/ScenarioProjectSpec.groovy b/accurest-gradle-plugin/src/test/groovy/io/codearte/accurest/plugin/ScenarioProjectSpec.groovy index ea7d0e27e3..9fafcc39e7 100755 --- a/accurest-gradle-plugin/src/test/groovy/io/codearte/accurest/plugin/ScenarioProjectSpec.groovy +++ b/accurest-gradle-plugin/src/test/groovy/io/codearte/accurest/plugin/ScenarioProjectSpec.groovy @@ -4,18 +4,26 @@ import nebula.test.IntegrationSpec import spock.lang.Stepwise @Stepwise -class ScenarioProjectSpec extends IntegrationSpec { +class ScenarioProjectSpec extends AccurestIntegrationSpec { void setup() { copyResources("functionalTest/scenarioProject", "") runTasksSuccessfully('clean') //delete accidental output when previously importing SimpleBoot into Idea to tweak it } - def "should pass basic flow"() { + def "should pass basic flow for Spock"() { given: assert fileExists('build.gradle') expect: runTasksSuccessfully('check') } + def "should pass basic flow for JUnit"() { + given: + assert fileExists('build.gradle') + expect: + switchToJunitTestFramework() + runTasksSuccessfully('check') + } + } diff --git a/accurest-gradle-plugin/src/test/resources/functionalTest/scenarioProject/fraudDetectionService/src/test/java/com/blogspot/toomuchcoding/MvcTest.java b/accurest-gradle-plugin/src/test/resources/functionalTest/scenarioProject/fraudDetectionService/src/test/java/com/blogspot/toomuchcoding/MvcTest.java new file mode 100644 index 0000000000..084a65ebf5 --- /dev/null +++ b/accurest-gradle-plugin/src/test/resources/functionalTest/scenarioProject/fraudDetectionService/src/test/java/com/blogspot/toomuchcoding/MvcTest.java @@ -0,0 +1,16 @@ +package com.blogspot.toomuchcoding; + +import com.jayway.restassured.module.mockmvc.RestAssuredMockMvc; +import org.junit.Before; + +public class MvcTest { + + @Before + public void setup() { + RestAssuredMockMvc.standaloneSetup(new com.blogspot.toomuchcoding.frauddetection.FraudDetectionController()); + } + + public void assertThatRejectionReasonIsNull(Object rejectionReason) { + assert rejectionReason == null; + } +} \ No newline at end of file From c283a33dae99a945708da47b92b5e06d0e139b9e Mon Sep 17 00:00:00 2001 From: Olga Maciaszek-Sharma Date: Tue, 23 Feb 2016 21:51:34 +0100 Subject: [PATCH 21/22] Debug: verifying if lower assertj version will not cause Travis fail. --- .../io/codearte/accurest/plugin/AccurestGradlePlugin.groovy | 2 +- build.gradle | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/accurest-gradle-plugin/src/main/groovy/io/codearte/accurest/plugin/AccurestGradlePlugin.groovy b/accurest-gradle-plugin/src/main/groovy/io/codearte/accurest/plugin/AccurestGradlePlugin.groovy index 7edaf642d6..2c2ffa196b 100644 --- a/accurest-gradle-plugin/src/main/groovy/io/codearte/accurest/plugin/AccurestGradlePlugin.groovy +++ b/accurest-gradle-plugin/src/main/groovy/io/codearte/accurest/plugin/AccurestGradlePlugin.groovy @@ -30,7 +30,7 @@ class AccurestGradlePlugin implements Plugin { deprecatedCreateAndConfigureGenerateWiremockClientStubsFromDslTask() project.dependencies.add("testCompile", "com.github.tomakehurst:wiremock:2.0.5-beta") project.dependencies.add("testCompile", "com.blogspot.toomuchcoding:jsonassert:${extension.getJsonAssertVersion()}") - project.dependencies.add("testCompile", "org.assertj:assertj-core:3.3.0") + project.dependencies.add("testCompile", "org.assertj:assertj-core:2.3.0") project.afterEvaluate { def hasIdea = project.plugins.findPlugin(IDEA_PLUGIN_CLASS) diff --git a/build.gradle b/build.gradle index 1895c32f22..37a0cc8f9b 100644 --- a/build.gradle +++ b/build.gradle @@ -73,7 +73,7 @@ project(':accurest-core') { compile 'asm:asm:3.3.1' compile "com.github.tomakehurst:wiremock:$wiremockVersion" compile "com.blogspot.toomuchcoding:jsonassert:$jsonassertVersion" - compile 'org.assertj:assertj-core:[3.3.0,)' + compile 'org.assertj:assertj-core:2.3.0' testCompile 'cglib:cglib-nodep:2.2' testCompile 'org.objenesis:objenesis:2.1' testCompile project(':accurest-testing-utils') From ca393382a3750623b58f5514b2fde52355427f3f Mon Sep 17 00:00:00 2001 From: Olga Maciaszek-Sharma Date: Tue, 23 Feb 2016 22:39:14 +0100 Subject: [PATCH 22/22] Switched from Java 8 forEach() to Groovy each{}. --- .../io/codearte/accurest/SingleTestGeneratorSpec.groovy | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/accurest-core/src/test/groovy/io/codearte/accurest/SingleTestGeneratorSpec.groovy b/accurest-core/src/test/groovy/io/codearte/accurest/SingleTestGeneratorSpec.groovy index d3f37399c2..5b026ce8dd 100644 --- a/accurest-core/src/test/groovy/io/codearte/accurest/SingleTestGeneratorSpec.groovy +++ b/accurest-core/src/test/groovy/io/codearte/accurest/SingleTestGeneratorSpec.groovy @@ -57,7 +57,7 @@ class SingleTestGeneratorSpec extends Specification { String clazz = testGenerator.buildClass([contract], "test", "test") then: - classStrings.forEach({ clazz.contains(it) }) + classStrings.each { clazz.contains(it) } where: testFramework | classStrings @@ -80,7 +80,7 @@ class SingleTestGeneratorSpec extends Specification { String clazz = testGenerator.buildClass([contract], "test", "test") then: - classStrings.forEach({ clazz.contains(it) }) + classStrings.each { clazz.contains(it) } where: testFramework | classStrings