Merge branch '1.0.x'
This commit is contained in:
@@ -234,7 +234,21 @@ include::{plugins_path}/spring-cloud-contract-converters/src/test/groovy/org/spr
|
||||
====== Executing custom methods on server side
|
||||
|
||||
It is also possible to define a method call to be executed on the server side during the test. Such a method can be added to the class defined as "baseClassForTests"
|
||||
in the configuration. Please see the examples below:
|
||||
in the configuration. Example:
|
||||
|
||||
*Contract*
|
||||
|
||||
[source,groovy,indent=0]
|
||||
----
|
||||
include::{verifier_core_path}/src/test/groovy/org/springframework/cloud/contract/verifier/builder/ContractHttpDocsSpec.groovy[tags=method,indent=0]
|
||||
----
|
||||
|
||||
*Base class*
|
||||
|
||||
[source,groovy,indent=0]
|
||||
----
|
||||
include::{plugins_path}/spring-cloud-contract-gradle-plugin/src/test/resources/functionalTest/bootSimple/src/test/groovy/org/springframework/cloud/contract/verifier/twitter/places/BaseMockMvcSpec.groovy[tags=base_class,indent=0]
|
||||
----
|
||||
|
||||
===== Dynamic properties in matchers sections
|
||||
|
||||
@@ -340,21 +354,6 @@ and the WireMock stub like this:
|
||||
include::{plugins_path}/spring-cloud-contract-converters/src/test/groovy/org/springframework/cloud/contract/verifier/wiremock/DslToWireMockClientConverterSpec.groovy[tags=matchers,indent=0]
|
||||
----
|
||||
|
||||
|
||||
===== Contract DSL
|
||||
|
||||
[source,groovy,indent=0]
|
||||
----
|
||||
include::{verifier_core_path}/src/test/groovy/org/springframework/cloud/contract/verifier/builder/ContractHttpDocsSpec.groovy[tags=method,indent=0]
|
||||
----
|
||||
|
||||
===== Base Mock Spec
|
||||
|
||||
[source,groovy,indent=0]
|
||||
----
|
||||
include::{plugins_path}/spring-cloud-contract-gradle-plugin/src/test/resources/functionalTest/bootSimple/src/test/groovy/org/springframework/cloud/contract/verifier/twitter/places/BaseMockMvcSpec.groovy[tags=base_class,indent=0]
|
||||
----
|
||||
|
||||
==== JAX-RS support
|
||||
|
||||
We support JAX-RS 2 Client API. Base class needs to define `protected WebTarget webTarget` and server initialization, right now the only option how to test JAX-RS API is to start a web server.
|
||||
|
||||
@@ -4,6 +4,7 @@ import groovy.transform.Canonical
|
||||
import groovy.transform.CompileStatic
|
||||
import groovy.transform.EqualsAndHashCode
|
||||
import groovy.transform.ToString
|
||||
|
||||
/**
|
||||
* Matching strategy of dynamic parts of the body.
|
||||
*
|
||||
@@ -11,6 +12,7 @@ import groovy.transform.ToString
|
||||
* @since 1.0.3
|
||||
*/
|
||||
@CompileStatic
|
||||
@ToString(includeFields = true, includePackage = false)
|
||||
class BodyMatchers {
|
||||
private final RegexPatterns regexPatterns = new RegexPatterns()
|
||||
private final List<BodyMatcher> jsonPathRegexMatchers = []
|
||||
@@ -43,9 +45,24 @@ class BodyMatchers {
|
||||
assert regex
|
||||
return new MatchingTypeValue(MatchingType.REGEX, regex)
|
||||
}
|
||||
|
||||
boolean equals(o) {
|
||||
if (this.is(o)) return true
|
||||
if (this.getClass() != o.class) return false
|
||||
BodyMatchers that = (BodyMatchers) o
|
||||
List<BodyMatcher> thisMatchers = this.jsonPathRegexMatchers
|
||||
List<BodyMatcher> thatMatchers = that.jsonPathRegexMatchers
|
||||
if (thisMatchers.size() != thatMatchers.size()) return false
|
||||
if (new HashSet<>(thisMatchers) != new HashSet(thatMatchers)) return false
|
||||
return true
|
||||
}
|
||||
|
||||
int hashCode() {
|
||||
return (this.jsonPathRegexMatchers != null ? this.jsonPathRegexMatchers.hashCode() : 0)
|
||||
}
|
||||
}
|
||||
|
||||
@ToString
|
||||
@ToString(includePackage = false)
|
||||
@EqualsAndHashCode
|
||||
@Canonical
|
||||
@CompileStatic
|
||||
@@ -83,6 +100,8 @@ class JsonPathBodyMatcher implements BodyMatcher {
|
||||
* Matching type with corresponding values
|
||||
*/
|
||||
@Canonical
|
||||
@ToString(includePackage = false)
|
||||
@EqualsAndHashCode
|
||||
class MatchingTypeValue {
|
||||
MatchingType type
|
||||
|
||||
|
||||
@@ -17,14 +17,19 @@
|
||||
package org.springframework.cloud.contract.spec.internal
|
||||
|
||||
import groovy.transform.CompileStatic
|
||||
import groovy.transform.EqualsAndHashCode
|
||||
import groovy.transform.ToString
|
||||
|
||||
import java.util.regex.Pattern
|
||||
|
||||
/**
|
||||
* Contains most common regular expression patterns
|
||||
*
|
||||
* @since 1.0.0
|
||||
*/
|
||||
@CompileStatic
|
||||
@EqualsAndHashCode
|
||||
@ToString(includePackage = false)
|
||||
class RegexPatterns {
|
||||
|
||||
// tag::regexps[]
|
||||
|
||||
@@ -11,24 +11,26 @@ import groovy.transform.ToString
|
||||
* @since 1.0.3
|
||||
*/
|
||||
@CompileStatic
|
||||
@EqualsAndHashCode
|
||||
@ToString(includePackage = false)
|
||||
@ToString(includePackage = false, includeSuper = true)
|
||||
class ResponseBodyMatchers extends BodyMatchers {
|
||||
|
||||
MatchingTypeValue byType() {
|
||||
return new MatchingTypeValue(MatchingType.TYPE)
|
||||
return new MatchingTypeValue(type: MatchingType.TYPE)
|
||||
}
|
||||
|
||||
MatchingTypeValue byType(@DelegatesTo(MatchingTypeValueHolder) Closure closure) {
|
||||
MatchingTypeValueHolder matchingTypeValue = new MatchingTypeValueHolder()
|
||||
closure.delegate = matchingTypeValue
|
||||
return closure() as MatchingTypeValue
|
||||
closure()
|
||||
return matchingTypeValue.matchingTypeValue
|
||||
}
|
||||
}
|
||||
|
||||
@CompileStatic
|
||||
@ToString(includePackage = false)
|
||||
@EqualsAndHashCode
|
||||
class MatchingTypeValueHolder {
|
||||
MatchingTypeValue matchingTypeValue = new MatchingTypeValue()
|
||||
MatchingTypeValue matchingTypeValue = new MatchingTypeValue(type: MatchingType.TYPE)
|
||||
|
||||
MatchingTypeValue minOccurrence(int number) {
|
||||
this.matchingTypeValue.minTypeOccurrence = number
|
||||
|
||||
Reference in New Issue
Block a user