Bumped Pact to 4.2.7

This commit is contained in:
Marcin Grzejszczak
2021-07-16 15:38:57 +02:00
parent 633d16630a
commit 2e54630a6c
20 changed files with 142 additions and 77 deletions

10
pom.xml
View File

@@ -25,7 +25,7 @@
<properties>
<!-- Align it also in Docker image under [docker/spring-cloud-contract-docker/project/gradle.properties] -->
<camel.version>3.11.0</camel.version>
<pact.version>4.0.10</pact.version>
<pact.version>4.2.7</pact.version>
<jsch-agent.version>0.0.9</jsch-agent.version>
<spring-cloud-build.version>3.1.0-SNAPSHOT</spring-cloud-build.version>
<spring-cloud-zookeeper.version>3.1.0-SNAPSHOT</spring-cloud-zookeeper.version>
@@ -207,8 +207,8 @@
<version>${commons-text.version}</version>
</dependency>
<dependency>
<groupId>au.com.dius</groupId>
<artifactId>pact-jvm-consumer</artifactId>
<groupId>au.com.dius.pact.consumer</groupId>
<artifactId>junit5</artifactId>
<version>${pact.version}</version>
<exclusions>
<exclusion>
@@ -222,8 +222,8 @@
</exclusions>
</dependency>
<dependency>
<groupId>au.com.dius</groupId>
<artifactId>pact-jvm-provider-junit</artifactId>
<groupId>au.com.dius.pact.provider</groupId>
<artifactId>junit5</artifactId>
<version>${pact.version}</version>
<exclusions>
<exclusion>

View File

@@ -21,7 +21,7 @@
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.8</java.version>
<spring-cloud-release-train.version>2020.0.0-SNAPSHOT</spring-cloud-release-train.version>
<spring-cloud-release-train.version>2021.0.0-SNAPSHOT</spring-cloud-release-train.version>
</properties>
<dependencies>

View File

@@ -39,12 +39,12 @@
<artifactId>groovy-nio</artifactId>
</dependency>
<dependency>
<groupId>au.com.dius</groupId>
<artifactId>pact-jvm-consumer</artifactId>
<groupId>au.com.dius.pact.consumer</groupId>
<artifactId>junit5</artifactId>
</dependency>
<dependency>
<groupId>au.com.dius</groupId>
<artifactId>pact-jvm-provider-junit</artifactId>
<groupId>au.com.dius.pact.provider</groupId>
<artifactId>junit5</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>

View File

@@ -35,14 +35,16 @@ import au.com.dius.pact.core.model.Pact;
import au.com.dius.pact.core.model.PactSpecVersion;
import au.com.dius.pact.core.support.expressions.SystemPropertyResolver;
import au.com.dius.pact.core.support.expressions.ValueResolver;
import au.com.dius.pact.provider.junit.loader.PactBroker;
import au.com.dius.pact.provider.junit.loader.PactBrokerAuth;
import au.com.dius.pact.provider.junit.loader.PactBrokerLoader;
import au.com.dius.pact.provider.junit.loader.PactLoader;
import au.com.dius.pact.provider.junitsupport.loader.PactBroker;
import au.com.dius.pact.provider.junitsupport.loader.PactBrokerAuth;
import au.com.dius.pact.provider.junitsupport.loader.PactBrokerLoader;
import au.com.dius.pact.provider.junitsupport.loader.PactLoader;
import au.com.dius.pact.provider.junitsupport.loader.VersionSelector;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.jetbrains.annotations.Nullable;
import org.springframework.cloud.contract.spec.Contract;
import org.springframework.cloud.contract.stubrunner.spring.StubRunnerProperties;
@@ -241,25 +243,66 @@ class PactStubDownloader implements StubDownloader {
}
@Override
public String url() {
return resolver.resolveValue("pactbroker.url:" + pactBrokerUrl.getScheme() + "://"
+ pactBrokerUrl.getHost() + ":" + pactBrokerUrl.getPort());
}
@Override
@Deprecated
public String host() {
return resolver.resolveValue("pactbroker.host:" + pactBrokerUrl.getHost());
}
@Override
@Deprecated
public String port() {
return resolver.resolveValue("pactbroker.port:" + pactBrokerUrl.getPort());
}
@Override
@Deprecated
public String scheme() {
return resolver.resolveValue("pactbroker.protocol:" + pactBrokerUrl.getScheme());
}
@Override
@Deprecated
public String[] tags() {
return tags.toArray(new String[0]);
}
@Override
public VersionSelector[] consumerVersionSelectors() {
return new VersionSelector[] { new VersionSelector() {
@Override
public Class<? extends Annotation> annotationType() {
return VersionSelector.class;
}
@Override
public String tag() {
return resolver.resolveValue("pactbroker.consumerversionselectors.tags:");
}
@Override
public String latest() {
return resolver.resolveValue("pactbroker.consumerversionselectors.latest:");
}
@Override
public String consumer() {
return resolver.resolveValue("pactbroker.consumers:");
}
@Override
public String fallbackTag() {
return null;
}
} };
}
@Override
public String[] consumers() {
return new String[] { resolver.resolveValue("pactbroker.consumers:") };
@@ -273,11 +316,6 @@ class PactStubDownloader implements StubDownloader {
return PactBrokerAuth.class;
}
@Override
public String scheme() {
return resolver.resolveValue("pactbroker.auth.scheme:Basic");
}
@Override
public String username() {
return resolver.resolveValue("pactbroker.auth.username:" + stubRunnerUsername);
@@ -299,6 +337,21 @@ class PactStubDownloader implements StubDownloader {
public Class<? extends ValueResolver> valueResolver() {
return SystemPropertyResolver.class;
}
@Override
public String enablePendingPacts() {
return null;
}
@Override
public String[] providerTags() {
return new String[0];
}
@Override
public String includeWipPactsSince() {
return null;
}
});
}
@@ -334,7 +387,7 @@ class PactStubDownloader implements StubDownloader {
class FromPropsThenFromSysEnv implements ValueResolver {
final SystemPropertyResolver resolver = new SystemPropertyResolver();
final SystemPropertyResolver resolver = SystemPropertyResolver.INSTANCE;
StubRunnerOptions options;
@@ -364,6 +417,12 @@ class FromPropsThenFromSysEnv implements ValueResolver {
return this.resolver.propertyDefined(property);
}
@Nullable
@Override
public String resolveValue(String expression, String defaultValue) {
return resolveValue(expression);
}
}
// taken from pact -

View File

@@ -16,9 +16,9 @@
package org.springframework.cloud.contract.verifier.spec.pact;
import au.com.dius.pact.core.model.matchingrules.Category;
import au.com.dius.pact.core.model.matchingrules.DateMatcher;
import au.com.dius.pact.core.model.matchingrules.EqualsMatcher;
import au.com.dius.pact.core.model.matchingrules.MatchingRuleCategory;
import au.com.dius.pact.core.model.matchingrules.MaxTypeMatcher;
import au.com.dius.pact.core.model.matchingrules.MinMaxTypeMatcher;
import au.com.dius.pact.core.model.matchingrules.MinTypeMatcher;
@@ -43,12 +43,12 @@ final class MatchingRulesConverter {
private MatchingRulesConverter() {
}
static Category matchingRulesForBody(BodyMatchers bodyMatchers) {
static MatchingRuleCategory matchingRulesForBody(BodyMatchers bodyMatchers) {
return matchingRulesFor("body", bodyMatchers);
}
private static Category matchingRulesFor(String categoryName, BodyMatchers bodyMatchers) {
Category category = new Category(categoryName);
private static MatchingRuleCategory matchingRulesFor(String categoryName, BodyMatchers bodyMatchers) {
MatchingRuleCategory category = new MatchingRuleCategory(categoryName);
bodyMatchers.matchers().forEach((b) -> {
String key = getMatcherKey(b.path());
MatchingType matchingType = b.matchingType();

View File

@@ -51,7 +51,7 @@ class MessagePactCreator {
return null;
}
Names names = NamingUtil.name(contracts.get(0));
MessagePactBuilder pactBuilder = MessagePactBuilder.consumer(names.getConsumer())
MessagePactBuilder pactBuilder = new MessagePactBuilder().consumer(names.getConsumer())
.hasPactWith(names.getProducer());
for (Contract contract : contracts) {

View File

@@ -21,9 +21,9 @@ import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
import au.com.dius.pact.core.model.matchingrules.Category;
import au.com.dius.pact.core.model.matchingrules.DateMatcher;
import au.com.dius.pact.core.model.matchingrules.MatchingRule;
import au.com.dius.pact.core.model.matchingrules.MatchingRuleCategory;
import au.com.dius.pact.core.model.matchingrules.MaxTypeMatcher;
import au.com.dius.pact.core.model.matchingrules.MinMaxTypeMatcher;
import au.com.dius.pact.core.model.matchingrules.MinTypeMatcher;
@@ -36,8 +36,6 @@ import au.com.dius.pact.core.model.matchingrules.TimestampMatcher;
import au.com.dius.pact.core.model.matchingrules.TypeMatcher;
import au.com.dius.pact.core.model.messaging.Message;
import au.com.dius.pact.core.model.messaging.MessagePact;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.MapUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.cloud.contract.spec.Contract;
@@ -65,20 +63,20 @@ class MessagingSCContractCreator {
Collection<Contract> convertFrom(MessagePact pact) {
return pact.getMessages().stream().map(message -> Contract.make(contract -> {
contract.label(message.getDescription());
if (CollectionUtils.isNotEmpty(message.getProviderStates())) {
if (!message.getProviderStates().isEmpty()) {
contract.input(i -> i.triggeredBy(this.getTriggeredBy(message)));
}
contract.outputMessage((outputMessage) -> {
if (message.getContents().isPresent()) {
outputMessage.body(BodyConverter.toSCCBody(message));
Category bodyRules = message.getMatchingRules().rulesForCategory("body");
if (bodyRules != null && MapUtils.isNotEmpty(bodyRules.getMatchingRules())) {
MatchingRuleCategory bodyRules = message.getMatchingRules().rulesForCategory("body");
if (bodyRules != null && !bodyRules.getMatchingRules().isEmpty()) {
outputMessage.bodyMatchers((responseBodyMatchers) -> outputMessageBodyMatchers(message,
bodyRules, responseBodyMatchers));
}
}
if (MapUtils.isNotEmpty(message.getMetaData())) {
if (!message.getMetadata().isEmpty()) {
outputMessage.headers((headers) -> outputMessageHeaders(message, headers));
}
String dest = findDestination(message);
@@ -90,7 +88,7 @@ class MessagingSCContractCreator {
}
private void outputMessageHeaders(Message message, Headers headers) {
message.getMetaData().forEach((key, value) -> {
message.getMetadata().forEach((key, value) -> {
String matchingRuleGroup = value.toString();
if (key.equalsIgnoreCase("contentType")) {
headers.messagingContentType(matchingRuleGroup);
@@ -101,7 +99,7 @@ class MessagingSCContractCreator {
});
}
private void outputMessageBodyMatchers(Message message, Category bodyRules,
private void outputMessageBodyMatchers(Message message, MatchingRuleCategory bodyRules,
ResponseBodyMatchers responseBodyMatchers) {
bodyRules.getMatchingRules().forEach((matchingRuleKey, matchingRuleGroup) -> {
if (matchingRuleGroup.getRuleLogic() != RuleLogic.AND) {
@@ -129,8 +127,8 @@ class MessagingSCContractCreator {
}
private String findDestination(Message message) {
return message.getMetaData().get(DESTINATION_KEY) != null
? message.getMetaData().get(DESTINATION_KEY).toString() : "";
return message.getMetadata().get(DESTINATION_KEY) != null
? message.getMetadata().get(DESTINATION_KEY).toString() : "";
}
void applyJsonPathToResponseBodyMatchers(MatchingRule matchingRule, String key,

View File

@@ -46,7 +46,7 @@ import org.springframework.cloud.contract.spec.ContractConverter;
* @author Stessy Delcroix
* @since 1.1.0
*/
public class PactContractConverter implements ContractConverter<Collection<Pact<?>>> {
public class PactContractConverter implements ContractConverter<Collection<Pact>> {
private static final ObjectMapper OBJECT_MAPPER = ObjectMapperFactory.INSTANCE.getMapper();
@@ -61,8 +61,8 @@ public class PactContractConverter implements ContractConverter<Collection<Pact<
@Override
public boolean isAccepted(File file) {
try {
DefaultPactReader.INSTANCE.loadPact(file);
return true;
Pact pact = DefaultPactReader.INSTANCE.loadPact(file);
return !pact.getInteractions().isEmpty();
}
catch (Exception e) {
return false;
@@ -71,7 +71,7 @@ public class PactContractConverter implements ContractConverter<Collection<Pact<
@Override
public Collection<Contract> convertFrom(File file) {
Pact<?> pact = DefaultPactReader.INSTANCE.loadPact(file);
Pact pact = DefaultPactReader.INSTANCE.loadPact(file);
if (pact instanceof RequestResponsePact) {
return requestResponseSCContractCreator.convertFrom((RequestResponsePact) pact);
}
@@ -83,8 +83,8 @@ public class PactContractConverter implements ContractConverter<Collection<Pact<
}
@Override
public Collection<Pact<?>> convertTo(Collection<Contract> contracts) {
List<Pact<?>> pactContracts = new ArrayList<>();
public Collection<Pact> convertTo(Collection<Contract> contracts) {
List<Pact> pactContracts = new ArrayList<>();
Map<String, List<Contract>> groupedContracts = contracts.stream()
.collect(Collectors.groupingBy(c -> NamingUtil.name(c).toString()));
for (List<Contract> list : groupedContracts.values()) {
@@ -103,7 +103,7 @@ public class PactContractConverter implements ContractConverter<Collection<Pact<
}
@Override
public Map<String, byte[]> store(Collection<Pact<?>> contracts) {
public Map<String, byte[]> store(Collection<Pact> contracts) {
return contracts.stream().collect(Collectors.toMap(this::name, c -> {
try {
return this.buildPrettyPrint(OBJECT_MAPPER.writeValueAsString(c.toMap(PactSpecVersion.V3))).getBytes();
@@ -114,7 +114,7 @@ public class PactContractConverter implements ContractConverter<Collection<Pact<
}));
}
protected String name(Pact<?> contract) {
protected String name(Pact contract) {
return contract.getConsumer().getName() + "_" + contract.getProvider().getName() + "_"
+ Math.abs(contract.hashCode()) + ".json";
}

View File

@@ -23,15 +23,16 @@ import java.util.regex.Pattern;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import au.com.dius.pact.core.model.Interaction;
import au.com.dius.pact.core.model.OptionalBody;
import au.com.dius.pact.core.model.ProviderState;
import au.com.dius.pact.core.model.Request;
import au.com.dius.pact.core.model.RequestResponseInteraction;
import au.com.dius.pact.core.model.RequestResponsePact;
import au.com.dius.pact.core.model.Response;
import au.com.dius.pact.core.model.matchingrules.Category;
import au.com.dius.pact.core.model.matchingrules.DateMatcher;
import au.com.dius.pact.core.model.matchingrules.MatchingRule;
import au.com.dius.pact.core.model.matchingrules.MatchingRuleCategory;
import au.com.dius.pact.core.model.matchingrules.MatchingRuleGroup;
import au.com.dius.pact.core.model.matchingrules.MaxTypeMatcher;
import au.com.dius.pact.core.model.matchingrules.MinMaxTypeMatcher;
@@ -43,7 +44,6 @@ import au.com.dius.pact.core.model.matchingrules.RuleLogic;
import au.com.dius.pact.core.model.matchingrules.TimeMatcher;
import au.com.dius.pact.core.model.matchingrules.TimestampMatcher;
import au.com.dius.pact.core.model.matchingrules.TypeMatcher;
import org.apache.commons.collections4.MapUtils;
import org.springframework.cloud.contract.spec.Contract;
import org.springframework.cloud.contract.spec.internal.RegexPatterns;
@@ -69,17 +69,21 @@ class RequestResponseSCContractCreator {
})).collect(Collectors.toList());
}
private void mapContractDescription(RequestResponseInteraction interaction, Contract contract) {
private void mapContractDescription(Interaction interaction, Contract contract) {
contract.description(buildDescription(interaction));
}
private void mapContractRequest(RequestResponseInteraction interaction, Contract contract) {
private void mapContractRequest(Interaction inter, Contract contract) {
contract.request((contractRequest) -> {
if (!(inter instanceof RequestResponseInteraction)) {
return;
}
RequestResponseInteraction interaction = (RequestResponseInteraction) inter;
Request pactRequest = interaction.getRequest();
contractRequest.method(pactRequest.getMethod());
mapRequestUrl(contractRequest, pactRequest);
if (MapUtils.isNotEmpty(pactRequest.getHeaders())) {
if (!pactRequest.getHeaders().isEmpty()) {
mapRequestHeaders(contractRequest, pactRequest);
}
if (pactRequest.getHeaders().containsKey("Cookie")) {
@@ -88,26 +92,30 @@ class RequestResponseSCContractCreator {
if (pactRequest.getBody().getState() == OptionalBody.State.PRESENT) {
mapRequestBody(contractRequest, pactRequest);
}
Category bodyRules = pactRequest.getMatchingRules().rulesForCategory("body");
if (MapUtils.isNotEmpty(bodyRules.getMatchingRules())) {
MatchingRuleCategory bodyRules = pactRequest.getMatchingRules().rulesForCategory("body");
if (!bodyRules.getMatchingRules().isEmpty()) {
mapRequestBodyRules(contractRequest, bodyRules);
}
});
}
private void mapContractResponse(RequestResponseInteraction interaction, Contract contract) {
private void mapContractResponse(Interaction inter, Contract contract) {
contract.response((contractResponse) -> {
if (!(inter instanceof RequestResponseInteraction)) {
return;
}
RequestResponseInteraction interaction = (RequestResponseInteraction) inter;
Response pactResponse = interaction.getResponse();
contractResponse.status(pactResponse.getStatus());
if (pactResponse.getBody().isPresent()) {
mapResponseBody(contractResponse, pactResponse);
}
Category bodyRules = pactResponse.getMatchingRules().rulesForCategory("body");
if (MapUtils.isNotEmpty(bodyRules.getMatchingRules())) {
MatchingRuleCategory bodyRules = pactResponse.getMatchingRules().rulesForCategory("body");
if (!bodyRules.getMatchingRules().isEmpty()) {
mapResponseBodyRules(contractResponse, pactResponse, bodyRules);
}
if (MapUtils.isNotEmpty(pactResponse.getHeaders())) {
if (!pactResponse.getHeaders().isEmpty()) {
mapResponseHeaders(contractResponse, pactResponse);
}
@@ -118,7 +126,7 @@ class RequestResponseSCContractCreator {
}
private void mapResponseBodyRules(org.springframework.cloud.contract.spec.internal.Response contractResponse,
Response pactResponse, Category bodyRules) {
Response pactResponse, MatchingRuleCategory bodyRules) {
contractResponse.bodyMatchers((bodyMatchers) -> {
bodyRules.getMatchingRules().forEach((key, matchindRuleGroup) -> {
if (matchindRuleGroup.getRuleLogic() != RuleLogic.AND) {
@@ -202,7 +210,7 @@ class RequestResponseSCContractCreator {
}
private void mapRequestBodyRules(org.springframework.cloud.contract.spec.internal.Request contractRequest,
Category bodyRules) {
MatchingRuleCategory bodyRules) {
contractRequest.bodyMatchers((bodyMatchers) -> {
bodyRules.getMatchingRules().forEach((key, matchingRuleGroup) -> {
if (matchingRuleGroup.getRuleLogic() != RuleLogic.AND) {
@@ -259,7 +267,7 @@ class RequestResponseSCContractCreator {
private void mapRequestCookies(org.springframework.cloud.contract.spec.internal.Request contractRequest,
Request pactRequest) {
Category headerRules = pactRequest.getMatchingRules().rulesForCategory("header");
MatchingRuleCategory headerRules = pactRequest.getMatchingRules().rulesForCategory("header");
String[] splitCookiesHeader = pactRequest.getHeaders().get("Cookie").get(0).split(";");
Map<String, String> foundCookies = Stream.of(splitCookiesHeader).map((cookieHeader) -> cookieHeader.split("="))
.collect(Collectors.toMap(splittedCookieHeader -> splittedCookieHeader[0],
@@ -292,7 +300,7 @@ class RequestResponseSCContractCreator {
private void mapResponseCookies(org.springframework.cloud.contract.spec.internal.Response contractResponse,
Response pactResponse) {
Category headerRules = pactResponse.getMatchingRules().rulesForCategory("header");
MatchingRuleCategory headerRules = pactResponse.getMatchingRules().rulesForCategory("header");
String[] splitCookiesHeader = pactResponse.getHeaders().get("Cookie").get(0).split(";");
Map<String, String> foundCookies = Stream.of(splitCookiesHeader).map((cookieHeader) -> cookieHeader.split("="))
.collect(Collectors.toMap(splittedCookieHeader -> splittedCookieHeader[0],
@@ -325,7 +333,7 @@ class RequestResponseSCContractCreator {
private void mapRequestUrl(org.springframework.cloud.contract.spec.internal.Request contractRequest,
Request pactRequest) {
if (MapUtils.isNotEmpty(pactRequest.getQuery())) {
if (!pactRequest.getQuery().isEmpty()) {
contractRequest.url(pactRequest.getPath(),
(url) -> url.queryParameters((queryParameters) -> pactRequest.getQuery().forEach((key,
values) -> values.forEach((singleValue) -> queryParameters.parameter(key, singleValue)))));
@@ -337,7 +345,7 @@ class RequestResponseSCContractCreator {
private void mapRequestHeaders(org.springframework.cloud.contract.spec.internal.Request contractRequest,
Request pactRequest) {
Category headerRules = pactRequest.getMatchingRules().rulesForCategory("header");
MatchingRuleCategory headerRules = pactRequest.getMatchingRules().rulesForCategory("header");
contractRequest.headers((headers) -> pactRequest.getHeaders().forEach((key, values) -> {
if (key.equalsIgnoreCase("Cookie")) {
return;
@@ -371,7 +379,7 @@ class RequestResponseSCContractCreator {
private void mapResponseHeaders(org.springframework.cloud.contract.spec.internal.Response contractResponse,
Response pactResponse) {
Category headerRules = pactResponse.getMatchingRules().rulesForCategory("header");
MatchingRuleCategory headerRules = pactResponse.getMatchingRules().rulesForCategory("header");
contractResponse.headers((headers) -> pactResponse.getHeaders().forEach((key, values) -> {
if (key.equalsIgnoreCase("Cookie")) {
return;
@@ -403,13 +411,13 @@ class RequestResponseSCContractCreator {
}));
}
private String buildDescription(RequestResponseInteraction interaction) {
private String buildDescription(Interaction interaction) {
StringBuilder description = new StringBuilder(interaction.getDescription());
List<ProviderState> providerStates = interaction.getProviderStates();
for (ProviderState providerState : providerStates) {
description.append(" ").append(providerState.getName());
Map<String, Object> params = providerState.getParams();
if (MapUtils.isNotEmpty(params)) {
if (!params.isEmpty()) {
description.append("(");
params.forEach((k, v) -> {
description.append(k).append(": ").append(v.toString()).append(", ");

View File

@@ -133,7 +133,7 @@ final class ValueGeneratorConverter {
"We currently don't support a generator of type " + generator.getClass().getSimpleName());
}
else {
Object generatedValue = generator.generate(new HashMap<>());
Object generatedValue = generator.generate(new HashMap<>(), null);
return dslPropertyProvider.apply(pattern, generatedValue);
}
}

View File

@@ -20,7 +20,7 @@ import java.nio.file.Files
import au.com.dius.pact.core.model.Pact
import au.com.dius.pact.core.model.PactSource
import au.com.dius.pact.provider.junit.loader.PactLoader
import au.com.dius.pact.provider.junitsupport.loader.PactLoader
import au.com.dius.pact.core.support.expressions.ValueResolver
import com.github.tomakehurst.wiremock.stubbing.StubMapping
import spock.lang.Ignore

View File

@@ -138,10 +138,10 @@ class PactContractConverterSpec extends Specification {
headers {
header(contentType(), applicationJsonUtf8())
}
body(id: 42, firstName: "Arthur", lastName: "Dent")
body(firstName: "Arthur", id: 42, lastName: "Dent")
bodyMatchers {
jsonPath('''$.['id']''', byType())
jsonPath('''$.['firstName']''', byType())
jsonPath('''$.['id']''', byType())
jsonPath('''$.['lastName']''', byType())
}
}
@@ -347,7 +347,7 @@ class PactContractConverterSpec extends Specification {
],
"metadata": {
"pact-jvm": {
"version": "4.0.10"
"version": "4.2.7"
}
}
}

View File

@@ -147,7 +147,7 @@
],
"metadata": {
"pact-jvm": {
"version": "4.0.10"
"version": "4.2.7"
}
}
}

View File

@@ -274,7 +274,7 @@
"version": "3.0.0"
},
"pact-jvm": {
"version": "4.0.10"
"version": "4.2.7"
}
}
}

View File

@@ -98,7 +98,7 @@
"version": "3.0.0"
},
"pact-jvm": {
"version": "4.0.10"
"version": "4.2.7"
}
}
}

View File

@@ -90,7 +90,7 @@
"version": "3.0.0"
},
"pact-jvm": {
"version": "4.0.10"
"version": "4.2.7"
}
}
}

View File

@@ -70,7 +70,7 @@
"version": "3.0.0"
},
"pact-jvm": {
"version": "4.0.10"
"version": "4.2.7"
}
}
}

View File

@@ -39,7 +39,7 @@
"version": "3.0.0"
},
"pact-jvm": {
"version": "4.0.10"
"version": "4.2.7"
}
}
}

View File

@@ -38,7 +38,7 @@
"version": "3.0.0"
},
"pact-jvm": {
"version": "4.0.10"
"version": "4.2.7"
}
}
}

View File

@@ -22,7 +22,7 @@
"version": "3.0.0"
},
"pact-jvm": {
"version": "4.0.10"
"version": "4.2.7"
}
}
}