From dfce30d23a358ecfc91fab2597f32b9120329197 Mon Sep 17 00:00:00 2001 From: Marcin Grzejszczak Date: Mon, 4 Nov 2019 12:02:54 +0100 Subject: [PATCH 1/2] Updated JDK for Docker --- docker/spring-cloud-contract-docker/Dockerfile | 2 +- docker/spring-cloud-contract-stub-runner-docker/Dockerfile | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docker/spring-cloud-contract-docker/Dockerfile b/docker/spring-cloud-contract-docker/Dockerfile index 41ede758c9..d8bae6da43 100644 --- a/docker/spring-cloud-contract-docker/Dockerfile +++ b/docker/spring-cloud-contract-docker/Dockerfile @@ -1,6 +1,6 @@ FROM ubuntu:18.10 -ARG SDKMAN_JAVA_INSTALLATION=8.0.222.hs-adpt +ARG SDKMAN_JAVA_INSTALLATION=8.0.232.hs-adpt MAINTAINER Marcin Grzejszczak diff --git a/docker/spring-cloud-contract-stub-runner-docker/Dockerfile b/docker/spring-cloud-contract-stub-runner-docker/Dockerfile index 186e51eea5..54d7b4a487 100644 --- a/docker/spring-cloud-contract-stub-runner-docker/Dockerfile +++ b/docker/spring-cloud-contract-stub-runner-docker/Dockerfile @@ -1,6 +1,6 @@ FROM ubuntu:18.10 -ARG SDKMAN_JAVA_INSTALLATION=8.0.222.hs-adpt +ARG SDKMAN_JAVA_INSTALLATION=8.0.232.hs-adpt MAINTAINER Marcin Grzejszczak From 7bc560b89727f1e052282d57c21741e6d66c82f4 Mon Sep 17 00:00:00 2001 From: Marcin Grzejszczak Date: Mon, 4 Nov 2019 12:33:08 +0100 Subject: [PATCH 2/2] Added a test to ensure that no additional array size check takes place for PACT; fixes gh-1043 --- .../pact/PactContractConverterSpec.groovy | 20 +++ .../pact/for-test-generation/pact_1043.json | 115 ++++++++++++++++++ 2 files changed, 135 insertions(+) create mode 100644 spring-cloud-contract-tools/spring-cloud-contract-pact/src/test/resources/pact/for-test-generation/pact_1043.json diff --git a/spring-cloud-contract-tools/spring-cloud-contract-pact/src/test/groovy/org/springframework/cloud/contract/verifier/spec/pact/PactContractConverterSpec.groovy b/spring-cloud-contract-tools/spring-cloud-contract-pact/src/test/groovy/org/springframework/cloud/contract/verifier/spec/pact/PactContractConverterSpec.groovy index 240911f6eb..3136b96a1a 100644 --- a/spring-cloud-contract-tools/spring-cloud-contract-pact/src/test/groovy/org/springframework/cloud/contract/verifier/spec/pact/PactContractConverterSpec.groovy +++ b/spring-cloud-contract-tools/spring-cloud-contract-pact/src/test/groovy/org/springframework/cloud/contract/verifier/spec/pact/PactContractConverterSpec.groovy @@ -16,6 +16,8 @@ package org.springframework.cloud.contract.verifier.spec.pact +import java.nio.file.Files + import au.com.dius.pact.model.Pact import au.com.dius.pact.model.PactSpecVersion import groovy.json.JsonOutput @@ -25,6 +27,8 @@ import spock.lang.Specification import spock.lang.Subject import org.springframework.cloud.contract.spec.Contract +import org.springframework.cloud.contract.verifier.TestGenerator +import org.springframework.cloud.contract.verifier.config.ContractVerifierConfigProperties import org.springframework.cloud.contract.verifier.util.ContractVerifierDslConverter import org.springframework.core.io.Resource import org.springframework.core.io.support.PathMatchingResourcePatternResolver @@ -49,6 +53,8 @@ class PactContractConverterSpec extends Specification { getResource("/pact/pact_v3_messaging.json").toURI()) File pactv3UnsupportedRuleLogicJson = new File(PactContractConverterSpec. getResource("/pact/pact_v3_unsupported_rule_logic.json").toURI()) + File pact1043Json = new File(PactContractConverterSpec. + getResource("/pact/for-test-generation/pact_1043.json").toURI()) @Subject PactContractConverter converter = new PactContractConverter() @@ -729,6 +735,20 @@ class PactContractConverterSpec extends Specification { e.message. contains("Currently only the AND combination rule logic is supported") } + + @Issue("1043") + def "should generate a test from pact and not contain a check for an empty array"() { + given: + File output = Files.createTempDirectory("pact").toFile() + output.mkdirs() + when: + new TestGenerator(new ContractVerifierConfigProperties(contractsDslDir: pact1043Json.parentFile, generatedTestSourcesDir: output, generatedTestResourcesDir: output, basePackageForTests: "example")).generate() + then: + File generatedTest = new File(output, "example/ContractVerifierTest.java") + String generatedTestText = generatedTest.text + !generatedTestText.contains('''assertThatJson(parsedJson).array().array("['authors']").isEmpty()''') + + } } diff --git a/spring-cloud-contract-tools/spring-cloud-contract-pact/src/test/resources/pact/for-test-generation/pact_1043.json b/spring-cloud-contract-tools/spring-cloud-contract-pact/src/test/resources/pact/for-test-generation/pact_1043.json new file mode 100644 index 0000000000..ddde77f180 --- /dev/null +++ b/spring-cloud-contract-tools/spring-cloud-contract-pact/src/test/resources/pact/for-test-generation/pact_1043.json @@ -0,0 +1,115 @@ +{ + "provider": { + "name": "book-catalog-service" + }, + "consumer": { + "name": "books-client-catalog-rest-consumer" + }, + "interactions": [ + { + "description": "A successful Api GET call", + "request": { + "method": "GET", + "path": "/books", + "headers": { + "Content-Type": "application/json;charset=UTF-8" + } + }, + "response": { + "status": 200, + "headers": { + "Content-Type": "application/json;charset=UTF-8" + }, + "body": [ + { + "isbn": "978-3-86680-192-9", + "id": 100, + "title": "A book", + "authors": [ + { + "firstName": "string", + "lastName": "string" + } + ] + } + ], + "matchingRules": { + "body": { + "$[0].id": { + "matchers": [ + { + "match": "integer" + } + ], + "combine": "AND" + }, + "$[0].title": { + "matchers": [ + { + "match": "regex", + "regex": ".*" + } + ], + "combine": "AND" + }, + "$[0].authors[0].firstName": { + "matchers": [ + { + "match": "type" + } + ], + "combine": "AND" + }, + "$[0].authors[0].lastName": { + "matchers": [ + { + "match": "type" + } + ], + "combine": "AND" + }, + "$[0].isbn": { + "matchers": [ + { + "match": "regex", + "regex": "[0-9]{3}-[0-9]{1}-[0-9]{5}-[0-9]{3}-[0-9]{1}" + } + ], + "combine": "AND" + } + } + }, + "generators": { + "body": { + "$[0].id": { + "type": "RandomInt", + "min": 0, + "max": 2147483647 + }, + "$[0].authors[0].firstName": { + "type": "RandomString", + "size": 20 + }, + "$[0].authors[0].lastName": { + "type": "RandomString", + "size": 20 + } + } + } + }, + "providerStates": [ + { + "name": "get" + } + ] + } + ], + "metadata": { + "pact-specification": { + "version": "3.0.0" + }, + "pact-jvm": { + "version": "3.5.13" + } + } +} \ No newline at end of file