use of org.springframework.cloud.contract.spec.internal.DslProperty in project spring-cloud-contract by spring-cloud.
the class ContractsToYaml method setOutputBodyMatchers.
protected void setOutputBodyMatchers(DslProperty<?> body, List<YamlContract.BodyTestMatcher> bodyMatchers) {
Object testSideValues = MapConverter.getTestSideValues(body);
JsonPaths paths = new JsonToJsonPathsConverter().transformToJsonPathWithTestsSideValues(body);
paths.stream().filter(m -> m.valueBeforeChecking() instanceof Pattern).forEach((m) -> {
Object element = JsonToJsonPathsConverter.readElement(testSideValues, m.keyBeforeChecking());
YamlContract.BodyTestMatcher bodyTestMatcher = new YamlContract.BodyTestMatcher();
bodyTestMatcher.path = m.keyBeforeChecking();
bodyTestMatcher.type = YamlContract.TestMatcherType.by_regex;
bodyTestMatcher.value = ((Pattern) m.valueBeforeChecking()).pattern();
bodyTestMatcher.regexType = regexType(element);
bodyMatchers.add(bodyTestMatcher);
});
Optional.ofNullable(body).filter(b -> b.getServerValue() instanceof Pattern).ifPresent((b) -> {
YamlContract.BodyTestMatcher bodyTestMatcher = new YamlContract.BodyTestMatcher();
bodyTestMatcher.type = YamlContract.TestMatcherType.by_regex;
bodyTestMatcher.value = ((Pattern) b.getServerValue()).pattern();
bodyMatchers.add(bodyTestMatcher);
});
}
use of org.springframework.cloud.contract.spec.internal.DslProperty in project spring-cloud-contract by spring-cloud.
the class ContractsToYaml method mapRequestMultipart.
private void mapRequestMultipart(YamlContract.Request yamlContractRequest, Request request) {
Multipart multipart = request.getMultipart();
if (multipart != null) {
yamlContractRequest.multipart = new YamlContract.Multipart();
Map<String, Object> map = (Map<String, Object>) MapConverter.getTestSideValues(multipart);
map.forEach((key, value) -> {
if (value instanceof NamedProperty) {
Object fileName = Optional.ofNullable(((NamedProperty) value).getName()).map(DslProperty::getServerValue).orElse(null);
Object contentType = Optional.ofNullable(((NamedProperty) value).getContentType()).map(DslProperty::getServerValue).orElse(null);
Object fileContent = Optional.ofNullable(((NamedProperty) value).getValue()).map(DslProperty::getServerValue).orElse(null);
YamlContract.Named named = new YamlContract.Named();
named.paramName = key;
named.fileName = fileName instanceof String ? Optional.ofNullable(((NamedProperty) value).getName()).map(DslProperty::getServerValue).map(Object::toString).orElse(null) : null;
named.fileContent = (String) Optional.ofNullable(fileContent).filter(f -> f instanceof String).orElse(null);
named.fileContentAsBytes = fileContent instanceof FromFileProperty ? new String(((FromFileProperty) fileContent).asBytes()) : null;
named.fileContentFromFileAsBytes = resolveFileNameAsBytes(fileContent);
named.contentType = (String) Optional.ofNullable(contentType).filter(f -> f instanceof String).orElse(null);
named.fileNameCommand = fileName instanceof ExecutionProperty ? fileName.toString() : null;
named.fileContentCommand = fileContent instanceof ExecutionProperty ? fileContent.toString() : null;
named.contentTypeCommand = contentType instanceof ExecutionProperty ? contentType.toString() : null;
yamlContractRequest.multipart.named.add(named);
} else {
yamlContractRequest.multipart.params.put(key, value != null ? value.toString() : null);
}
});
}
}
use of org.springframework.cloud.contract.spec.internal.DslProperty in project spring-cloud-contract by spring-cloud.
the class YamlToContracts method mapRequestMultiPart.
private void mapRequestMultiPart(YamlContract.Request yamlContractRequest, Request dslContractRequest) {
if (yamlContractRequest.multipart != null) {
Map<String, Object> multipartMap = new HashMap<>();
yamlContractRequest.multipart.params.forEach((paramKey, paramValue) -> {
YamlContract.KeyValueMatcher matcher = yamlContractRequest.matchers.multipart.params.stream().filter((param) -> param.key.equals(paramKey)).findFirst().orElse(null);
Object value = paramValue;
if (matcher != null) {
value = matcher.regex != null ? Pattern.compile(matcher.regex) : predefinedToPattern(matcher.predefined);
}
multipartMap.put(paramKey, new DslProperty<>(value, paramValue));
});
yamlContractRequest.multipart.named.forEach(namedParam -> {
YamlContract.MultipartNamedStubMatcher matcher = yamlContractRequest.matchers.multipart.named.stream().filter((stubMatcher) -> stubMatcher.paramName.equals(namedParam.paramName)).findFirst().orElse(null);
Object fileNameValue = namedParam.fileName;
Object fileContentValue = namedParam.fileContent;
String fileContentAsBytes = namedParam.fileContentAsBytes;
String fileContentFromFileAsBytes = namedParam.fileContentFromFileAsBytes;
String contentTypeCommand = namedParam.contentTypeCommand;
String fileContentCommand = namedParam.fileContentCommand;
String fileNameCommand = namedParam.fileNameCommand;
Object contentTypeValue = namedParam.contentType;
if (matcher != null && matcher.fileName != null) {
fileNameValue = matcher.fileName.regex != null ? Pattern.compile(matcher.fileName.regex) : predefinedToPattern(matcher.fileName.predefined);
}
if (matcher != null && matcher.fileContent != null) {
fileContentValue = matcher.fileContent.regex != null ? Pattern.compile(matcher.fileContent.regex) : predefinedToPattern(matcher.fileContent.predefined);
}
if (matcher != null && matcher.contentType != null) {
contentTypeValue = matcher.contentType.regex != null ? Pattern.compile(matcher.contentType.regex) : predefinedToPattern(matcher.contentType.predefined);
}
multipartMap.put(namedParam.paramName, new NamedProperty(new DslProperty<>(fileNameValue, fileNameCommand != null ? new ExecutionProperty(fileNameCommand) : namedParam.fileName), new DslProperty<>(fileContentValue, namedParam.fileContent != null ? namedParam.fileContent : fileContentFromFileAsBytes != null ? dslContractRequest.fileAsBytes(namedParam.fileContentFromFileAsBytes) : fileContentAsBytes != null ? fileContentAsBytes.getBytes() : new ExecutionProperty(fileContentCommand)), new DslProperty<>(contentTypeValue, contentTypeCommand != null ? new ExecutionProperty(contentTypeCommand) : namedParam.contentType)));
});
dslContractRequest.multipart(multipartMap);
}
}
use of org.springframework.cloud.contract.spec.internal.DslProperty in project spring-cloud-contract by spring-cloud.
the class YamlToContracts method clientValue.
protected DslProperty<?> clientValue(Object value, YamlContract.KeyValueMatcher matcher, String key) {
Object clientValue = value instanceof DslProperty ? ((DslProperty<?>) value).getClientValue() : value;
if (matcher != null && matcher.regex != null) {
clientValue = Pattern.compile(matcher.regex);
Pattern pattern = (Pattern) clientValue;
assertPatternMatched(pattern, value, key);
} else if (matcher != null && matcher.predefined != null) {
Pattern pattern = predefinedToPattern(matcher.predefined);
clientValue = pattern;
assertPatternMatched(pattern, value, key);
} else if (matcher != null && matcher.command != null) {
return new DslProperty<>(value, new ExecutionProperty(matcher.command));
}
return new DslProperty<>(clientValue, value);
}
use of org.springframework.cloud.contract.spec.internal.DslProperty in project spring-cloud-contract by spring-cloud.
the class YamlToContracts method queryParamValue.
protected Object queryParamValue(YamlContract yamlContract, String key, Object value) {
Request request = new Request();
YamlContract.QueryParameterMatcher matcher = yamlContract.request.matchers.queryParameters.stream().filter(queryParameter -> queryParameter.key.equals(key)).findFirst().orElse(null);
if (matcher == null) {
return value;
}
switch(matcher.type) {
case equal_to:
return new DslProperty<>(request.equalTo(matcher.value), value);
case containing:
return new DslProperty<>(request.containing(matcher.value), value);
case matching:
return new DslProperty<>(request.matching(matcher.value), value);
case not_matching:
return new DslProperty<>(request.notMatching(matcher.value), value);
case equal_to_json:
return new DslProperty<>(request.equalToJson(matcher.value), value);
case equal_to_xml:
return new DslProperty<>(request.equalToXml(matcher.value), value);
case absent:
return new DslProperty<Object>(request.absent(), null);
default:
throw new UnsupportedOperationException("The provided matching type [" + matcher + "] is unsupported. Use on of " + Arrays.toString(YamlContract.MatchingType.values()));
}
}
Aggregations