From 182aa430b5842b4e3c01ad4101e93bd84d5c6c94 Mon Sep 17 00:00:00 2001 From: Marcin Grzejszczak Date: Thu, 8 Nov 2018 17:18:20 +0100 Subject: [PATCH] Added fixedDelayMilliseconds in yaml and docs; fixes gh-788 --- docs/src/main/asciidoc/verifier_contract.adoc | 25 +++++++++++++++++++ .../verifier/converter/YamlContract.groovy | 1 + .../converter/YamlContractConverter.groovy | 2 ++ .../YamlContractConverterSpec.groovy | 3 +++ .../src/test/resources/yml/contract.yml | 1 + 5 files changed, 32 insertions(+) diff --git a/docs/src/main/asciidoc/verifier_contract.adoc b/docs/src/main/asciidoc/verifier_contract.adoc index d41b2c6b16..7593a6a717 100644 --- a/docs/src/main/asciidoc/verifier_contract.adoc +++ b/docs/src/main/asciidoc/verifier_contract.adoc @@ -1036,6 +1036,31 @@ response: async: true ---- +You can also use the `fixedDelayMilliseconds` method / property to add delay to your stubs. + +.Groovy DSL +[source,groovy,indent=0] +---- +org.springframework.cloud.contract.spec.Contract.make { + request { + method GET() + url '/get' + } + response { + status 200 + body 'Passed' + fixedDelayMilliseconds 1000 + } +} +---- + +.YAML +[source,yml,indent=0] +---- +response: + fixedDelayMilliseconds: 1000 +---- + === Working with Context Paths Spring Cloud Contract supports context paths. diff --git a/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/converter/YamlContract.groovy b/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/converter/YamlContract.groovy index 468923744c..4eece52d5f 100644 --- a/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/converter/YamlContract.groovy +++ b/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/converter/YamlContract.groovy @@ -157,6 +157,7 @@ class YamlContract { public String bodyFromFile public TestMatchers matchers = new TestMatchers() public Boolean async + public Integer fixedDelayMilliseconds } @CompileStatic diff --git a/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/converter/YamlContractConverter.groovy b/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/converter/YamlContractConverter.groovy index 056c6825c4..21adad4b54 100644 --- a/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/converter/YamlContractConverter.groovy +++ b/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/converter/YamlContractConverter.groovy @@ -236,6 +236,7 @@ class YamlContractConverter implements ContractConverter> { if (yamlContract.response.body) body(yamlContract.response.body) if (yamlContract.response.bodyFromFile) body(file(yamlContract.response.bodyFromFile)) if (yamlContract.response.async) async() + if (yamlContract.response.fixedDelayMilliseconds) fixedDelayMilliseconds(yamlContract.response.fixedDelayMilliseconds) testMatchers { yamlContract.response?.matchers?.body?.each { BodyTestMatcher testMatcher -> MatchingTypeValue value = null @@ -522,6 +523,7 @@ class YamlContractConverter implements ContractConverter> { maxOccurrence: matcher.maxTypeOccurrence() ) } + fixedDelayMilliseconds = contract?.response?.delay?.clientValue as Integer } } if (contract.input) { diff --git a/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/converter/YamlContractConverterSpec.groovy b/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/converter/YamlContractConverterSpec.groovy index 334c242755..08eeb060e3 100644 --- a/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/converter/YamlContractConverterSpec.groovy +++ b/spring-cloud-contract-verifier/src/test/groovy/org/springframework/cloud/contract/verifier/converter/YamlContractConverterSpec.groovy @@ -118,6 +118,7 @@ class YamlContractConverterSpec extends Specification { contract.request.matchers.jsonPathRegexMatchers[0].value() == 'bar' and: contract.response.status.clientValue == 200 + if (yamlFile == ymlWithRest) contract.response.delay.clientValue == 1000 else !contract.response.delay contract.response.headers.entries.find { it.name == "foo2" && ((Pattern) it.serverValue).pattern == "bar" && it.clientValue == "bar" } contract.response.headers.entries.find { it.name == "foo3" && @@ -533,6 +534,7 @@ class YamlContractConverterSpec extends Specification { body([foo: "bar"]) } response { + fixedDelayMilliseconds 1000 status(200) headers { header("foo2", "bar") @@ -560,5 +562,6 @@ class YamlContractConverterSpec extends Specification { yamlContract.response.body == [foo2: "bar"] yamlContract.response.cookies.find { it.key == "foo" && it.value == "client" } yamlContract.response.cookies.find { it.key == "bar" && it.value == "client" } + yamlContract.response.fixedDelayMilliseconds == 1000 } } diff --git a/spring-cloud-contract-verifier/src/test/resources/yml/contract.yml b/spring-cloud-contract-verifier/src/test/resources/yml/contract.yml index 2d88b73c9b..db7f10dfbd 100644 --- a/spring-cloud-contract-verifier/src/test/resources/yml/contract.yml +++ b/spring-cloud-contract-verifier/src/test/resources/yml/contract.yml @@ -52,6 +52,7 @@ response: #tag::response_obligatory[] status: 200 #end::response_obligatory[] + fixedDelayMilliseconds: 1000 headers: foo2: bar foo3: foo33