From a85ece38f3ac25384218bfa259e5159ff24540a5 Mon Sep 17 00:00:00 2001 From: Marcin Grzejszczak Date: Thu, 4 May 2017 16:49:50 +0200 Subject: [PATCH 1/2] Updated docs --- docs/src/main/asciidoc/verifier/stubrunner.adoc | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/docs/src/main/asciidoc/verifier/stubrunner.adoc b/docs/src/main/asciidoc/verifier/stubrunner.adoc index 0359fcbac0..32cd50a7a5 100644 --- a/docs/src/main/asciidoc/verifier/stubrunner.adoc +++ b/docs/src/main/asciidoc/verifier/stubrunner.adoc @@ -49,10 +49,10 @@ include::{samples_url}/producer_with_restdocs/src/assembly/stub.xml[indent=0] include::{plugins_path}/spring-cloud-contract-gradle-plugin/src/test/resources/functionalTest/scenarioProject/build.gradle[tags=jar_setup,indent=0] ---- -==== Modules - include::{stubrunner_core_path}/README.adoc[] +=== Common + ==== Common properties for JUnit and Spring Some of the properties that are repetitive can be set using system properties or configuration properties (for Spring). Here are their names with their default values: @@ -68,6 +68,8 @@ Some of the properties that are repetitive can be set using system properties or |stubrunner.ids|| Array of Ivy notation stubs to download |stubrunner.username|| Optional username to access the tool that stores the JARs with stubs |stubrunner.password|| Optional password to access the tool that stores the JARs with stubs +|stubrunner.stubsPerConsumer|false| Set to `true` if you want to use different stubs per each consumer instead of registering all stubs for every consumer +|stubrunner.consumerName|| If you want to use stubs per consumer and want to override the consumer name just change this value |====================== ===== Stub runner stubs ids From 1e16934fcef9f4d7e682801bb40a25e8a016544c Mon Sep 17 00:00:00 2001 From: Marcin Grzejszczak Date: Fri, 5 May 2017 11:25:19 +0200 Subject: [PATCH 2/2] Bumped jsonassert to 0.4.9 without this change we analyze empty sets of jsonpath results improperly fixes #289 --- spring-cloud-contract-dependencies/pom.xml | 2 +- ...ngCloudContractVerifierGradlePlugin.groovy | 2 +- .../projects/complex-configuration/pom.xml | 2 +- .../test/projects/plugin-extension/pom.xml | 2 +- .../test/projects/spring-boot-groovy/pom.xml | 2 +- .../test/projects/spring-boot-java/pom.xml | 2 +- .../builder/MethodBodyBuilderSpec.groovy | 54 +++++++++++++++++++ 7 files changed, 60 insertions(+), 6 deletions(-) diff --git a/spring-cloud-contract-dependencies/pom.xml b/spring-cloud-contract-dependencies/pom.xml index 0759f3c197..68c43fe577 100644 --- a/spring-cloud-contract-dependencies/pom.xml +++ b/spring-cloud-contract-dependencies/pom.xml @@ -15,7 +15,7 @@ Spring Cloud Contract Dependencies 2.1.7 - 0.4.8 + 0.4.9 1.0.2.v20150114 diff --git a/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/src/main/groovy/org/springframework/cloud/contract/verifier/plugin/SpringCloudContractVerifierGradlePlugin.groovy b/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/src/main/groovy/org/springframework/cloud/contract/verifier/plugin/SpringCloudContractVerifierGradlePlugin.groovy index 8f41b979ee..6b7c96820c 100644 --- a/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/src/main/groovy/org/springframework/cloud/contract/verifier/plugin/SpringCloudContractVerifierGradlePlugin.groovy +++ b/spring-cloud-contract-tools/spring-cloud-contract-gradle-plugin/src/main/groovy/org/springframework/cloud/contract/verifier/plugin/SpringCloudContractVerifierGradlePlugin.groovy @@ -90,7 +90,7 @@ class SpringCloudContractVerifierGradlePlugin implements Plugin { //TODO: Deprecate this since starting with 1.1.x private void addProjectDependencies(Project project) { project.dependencies.add("testCompile", "com.github.tomakehurst:wiremock:2.1.7") - project.dependencies.add("testCompile", "com.toomuchcoding.jsonassert:jsonassert:0.4.8") + project.dependencies.add("testCompile", "com.toomuchcoding.jsonassert:jsonassert:0.4.9") project.dependencies.add("testCompile", "org.assertj:assertj-core:2.3.0") } diff --git a/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/test/projects/complex-configuration/pom.xml b/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/test/projects/complex-configuration/pom.xml index 2ef9310d56..48bd2113ec 100644 --- a/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/test/projects/complex-configuration/pom.xml +++ b/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/test/projects/complex-configuration/pom.xml @@ -63,7 +63,7 @@ com.toomuchcoding.jsonassert jsonassert - 0.4.8 + 0.4.9 test diff --git a/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/test/projects/plugin-extension/pom.xml b/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/test/projects/plugin-extension/pom.xml index e03b81bc7a..ba6ff15852 100644 --- a/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/test/projects/plugin-extension/pom.xml +++ b/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/test/projects/plugin-extension/pom.xml @@ -63,7 +63,7 @@ com.toomuchcoding.jsonassert jsonassert - 0.4.8 + 0.4.9 test diff --git a/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/test/projects/spring-boot-groovy/pom.xml b/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/test/projects/spring-boot-groovy/pom.xml index a0dc42aa9d..2aaf275a43 100644 --- a/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/test/projects/spring-boot-groovy/pom.xml +++ b/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/test/projects/spring-boot-groovy/pom.xml @@ -64,7 +64,7 @@ com.toomuchcoding.jsonassert jsonassert - 0.4.8 + 0.4.9 test diff --git a/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/test/projects/spring-boot-java/pom.xml b/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/test/projects/spring-boot-java/pom.xml index e03b81bc7a..ba6ff15852 100644 --- a/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/test/projects/spring-boot-java/pom.xml +++ b/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/test/projects/spring-boot-java/pom.xml @@ -63,7 +63,7 @@ com.toomuchcoding.jsonassert jsonassert - 0.4.8 + 0.4.9 test diff --git a/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/builder/MethodBodyBuilderSpec.groovy b/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/builder/MethodBodyBuilderSpec.groovy index 26314cd5d6..cd0c1c9c55 100644 --- a/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/builder/MethodBodyBuilderSpec.groovy +++ b/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/builder/MethodBodyBuilderSpec.groovy @@ -26,6 +26,8 @@ import spock.lang.Issue import spock.lang.Shared import spock.lang.Specification +import java.lang.reflect.InvocationTargetException + class MethodBodyBuilderSpec extends Specification implements WireMockStubVerifier { @Rule OutputCapture capture = new OutputCapture() @@ -153,4 +155,56 @@ DocumentContext parsedJson = JsonPath.parse(json); "JaxRsClientJUnitMethodBodyBuilder" | { Contract dsl -> new JaxRsClientJUnitMethodBodyBuilder(dsl, properties) } } + @Issue('#289') + def "should fail on nonexistent field [#methodBuilderName]"() { + given: + Contract contractDsl = Contract.make { + request { + method 'GET' + url '/something' + headers { + contentType(applicationJson()) + } + } + response { + status 200 + headers { + contentType(applicationJson()) + } + body([ + doesNotExist: $(p(anyAlphaUnicode()), c("123")) + ]) + } + } + MethodBodyBuilder builder = methodBuilder(contractDsl) + BlockBuilder blockBuilder = new BlockBuilder(" ") + when: + builder.appendTo(blockBuilder) + def test = blockBuilder.toString() + then: + SyntaxChecker.tryToCompile(methodBuilderName, blockBuilder.toString()) + and: + String jsonSample = '''\ +String json = "{}"; +DocumentContext parsedJson = JsonPath.parse(json); +''' + and: + LinkedList lines = [] as LinkedList + test.eachLine { if (it.contains('assertThatJson')) lines << it else it } + lines.addFirst(jsonSample) + try { + SyntaxChecker.tryToRun(methodBuilderName, lines.join("\n")) + } catch (IllegalStateException e) { + assert e.message.contains("Parsed JSON [{}] doesn't match the JSON path") + } catch (InvocationTargetException e1) { + assert e1.cause.message.contains("Parsed JSON [{}] doesn't match the JSON path") + } + where: + methodBuilderName | methodBuilder + "MockMvcSpockMethodBuilder" | { Contract dsl -> new MockMvcSpockMethodRequestProcessingBodyBuilder(dsl, properties) } + "MockMvcJUnitMethodBuilder" | { Contract dsl -> new MockMvcJUnitMethodBodyBuilder(dsl, properties) } + "JaxRsClientSpockMethodRequestProcessingBodyBuilder" | { Contract dsl -> new JaxRsClientSpockMethodRequestProcessingBodyBuilder(dsl, properties) } + "JaxRsClientJUnitMethodBodyBuilder" | { Contract dsl -> new JaxRsClientJUnitMethodBodyBuilder(dsl, properties) } + } + }