diff --git a/docs/src/main/asciidoc/verifier_contract.adoc b/docs/src/main/asciidoc/verifier_contract.adoc index 5b277afbb2..eba0500702 100644 --- a/docs/src/main/asciidoc/verifier_contract.adoc +++ b/docs/src/main/asciidoc/verifier_contract.adoc @@ -1048,6 +1048,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/ContractsToYaml.groovy b/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/converter/ContractsToYaml.groovy index b468a43234..c038b52ddc 100644 --- a/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/converter/ContractsToYaml.groovy +++ b/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/converter/ContractsToYaml.groovy @@ -212,6 +212,7 @@ class ContractsToYaml { yamlContract.response = new YamlContract.Response() yamlContract.response.with { YamlContract.Response response -> response.async = contract.response.async + response.fixedDelayMilliseconds = contract.response?.delay?.clientValue as Integer response.status = contract.response?.status?.clientValue as Integer response.headers = (contract.response?.headers as Headers)?.asMap { String headerName, DslProperty prop -> 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 9227a876ce..c7206e6591 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 @@ -217,6 +217,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/YamlToContracts.groovy b/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/converter/YamlToContracts.groovy index 5852e901e0..a4c236e0ba 100644 --- a/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/converter/YamlToContracts.groovy +++ b/spring-cloud-contract-verifier/src/main/groovy/org/springframework/cloud/contract/verifier/converter/YamlToContracts.groovy @@ -250,6 +250,7 @@ class YamlToContracts { } if (yamlContract.response.bodyFromFile) body(file(yamlContract.response.bodyFromFile)) if (yamlContract.response.async) async() + if (yamlContract.response.fixedDelayMilliseconds) fixedDelayMilliseconds(yamlContract.response.fixedDelayMilliseconds) bodyMatchers { yamlContract.response?.matchers?.body?.each { YamlContract.BodyTestMatcher testMatcher -> MatchingTypeValue value = null 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 8c2e4114da..8494538dbe 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 @@ -121,6 +121,7 @@ class YamlContractConverterSpec extends Specification { contract.request.bodyMatchers.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" && @@ -570,6 +571,7 @@ class YamlContractConverterSpec extends Specification { body([foo: "bar"]) } response { + fixedDelayMilliseconds 1000 status(200) headers { header("foo2", "bar") @@ -597,6 +599,7 @@ 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 } def "should convert multiple messaging DSLs to YAML"() { 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 0eb19f52cc..014963a1ad 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