Bumping versions
This commit is contained in:
@@ -55,14 +55,11 @@ class FileSaver {
|
||||
}
|
||||
|
||||
protected Path pathToClass(Path testBaseDir, String fileName) {
|
||||
return Paths.get(testBaseDir.toString(), capitalize(fileName) + fileExtension)
|
||||
.toAbsolutePath();
|
||||
return Paths.get(testBaseDir.toString(), capitalize(fileName) + fileExtension).toAbsolutePath();
|
||||
}
|
||||
|
||||
protected Path generateTestBaseDir(String basePackageClass,
|
||||
String includedDirectoryRelativePath) {
|
||||
Path testBaseDir = Paths.get(targetDirectory.getAbsolutePath(),
|
||||
packageToDirectory(basePackageClass),
|
||||
protected Path generateTestBaseDir(String basePackageClass, String includedDirectoryRelativePath) {
|
||||
Path testBaseDir = Paths.get(targetDirectory.getAbsolutePath(), packageToDirectory(basePackageClass),
|
||||
beforeLast(includedDirectoryRelativePath, File.separator));
|
||||
try {
|
||||
Files.createDirectories(testBaseDir);
|
||||
|
||||
@@ -71,42 +71,36 @@ public class TestGenerator {
|
||||
private final ContractFileScanner contractFileScanner;
|
||||
|
||||
public TestGenerator(ContractVerifierConfigProperties configProperties) {
|
||||
this(configProperties, singleTestGenerator(),
|
||||
new FileSaver(configProperties.getGeneratedTestSourcesDir(),
|
||||
configProperties.getTestFramework().getClassExtension()));
|
||||
this(configProperties, singleTestGenerator(), new FileSaver(configProperties.getGeneratedTestSourcesDir(),
|
||||
configProperties.getTestFramework().getClassExtension()));
|
||||
}
|
||||
|
||||
private static SingleTestGenerator singleTestGenerator() {
|
||||
List<SingleTestGenerator> factories = SpringFactoriesLoader
|
||||
.loadFactories(SingleTestGenerator.class, null);
|
||||
List<SingleTestGenerator> factories = SpringFactoriesLoader.loadFactories(SingleTestGenerator.class, null);
|
||||
if (factories.isEmpty()) {
|
||||
return new JavaTestGenerator();
|
||||
}
|
||||
return factories.get(0);
|
||||
}
|
||||
|
||||
public TestGenerator(ContractVerifierConfigProperties configProperties,
|
||||
SingleTestGenerator generator, FileSaver saver) {
|
||||
this(configProperties, generator, saver,
|
||||
new ContractFileScannerBuilder()
|
||||
.baseDir(configProperties.getContractsDslDir())
|
||||
.excluded(toSet(configProperties.getExcludedFiles()))
|
||||
.ignored(toSet(configProperties.getIgnoredFiles()))
|
||||
.included(toSet(configProperties.getIncludedFiles()))
|
||||
.includeMatcher(configProperties.getIncludedContracts()).build());
|
||||
public TestGenerator(ContractVerifierConfigProperties configProperties, SingleTestGenerator generator,
|
||||
FileSaver saver) {
|
||||
this(configProperties, generator, saver, new ContractFileScannerBuilder()
|
||||
.baseDir(configProperties.getContractsDslDir()).excluded(toSet(configProperties.getExcludedFiles()))
|
||||
.ignored(toSet(configProperties.getIgnoredFiles())).included(toSet(configProperties.getIncludedFiles()))
|
||||
.includeMatcher(configProperties.getIncludedContracts()).build());
|
||||
}
|
||||
|
||||
private static Set<String> toSet(List<String> files) {
|
||||
return Optional.ofNullable(files).map(HashSet::new).orElseGet(HashSet::new);
|
||||
}
|
||||
|
||||
protected TestGenerator(ContractVerifierConfigProperties configProperties,
|
||||
SingleTestGenerator generator, FileSaver saver,
|
||||
ContractFileScanner contractFileScanner) {
|
||||
protected TestGenerator(ContractVerifierConfigProperties configProperties, SingleTestGenerator generator,
|
||||
FileSaver saver, ContractFileScanner contractFileScanner) {
|
||||
this.configProperties = configProperties;
|
||||
if (configProperties.getContractsDslDir() == null) {
|
||||
throw new ContractVerifierException("Stubs directory not found under "
|
||||
+ configProperties.getContractsDslDir());
|
||||
throw new ContractVerifierException(
|
||||
"Stubs directory not found under " + configProperties.getContractsDslDir());
|
||||
}
|
||||
|
||||
this.generator = generator;
|
||||
@@ -135,63 +129,51 @@ public class TestGenerator {
|
||||
}
|
||||
|
||||
void generateTestClasses(final String basePackageName) {
|
||||
MultiValueMap<Path, ContractMetadata> contracts = contractFileScanner
|
||||
.findContractsRecursively();
|
||||
MultiValueMap<Path, ContractMetadata> contracts = contractFileScanner.findContractsRecursively();
|
||||
log.debug("Found the following contracts {}", contracts.keySet());
|
||||
|
||||
Set<Map.Entry<Path, List<ContractMetadata>>> inProgress = inProgress(contracts);
|
||||
if (!inProgress.isEmpty() && configProperties.isFailOnInProgress()) {
|
||||
String inProgressContractsPaths = inProgress.stream().map(Map.Entry::getKey)
|
||||
.map(Path::toString).collect(Collectors.joining(","));
|
||||
throw new IllegalStateException("In progress contracts found in paths ["
|
||||
+ inProgressContractsPaths
|
||||
String inProgressContractsPaths = inProgress.stream().map(Map.Entry::getKey).map(Path::toString)
|
||||
.collect(Collectors.joining(","));
|
||||
throw new IllegalStateException("In progress contracts found in paths [" + inProgressContractsPaths
|
||||
+ "] and the switch [failOnInProgress] is set to [true]. Either unmark those contracts as in progress, or set the switch to [false].");
|
||||
}
|
||||
processAllNotInProgress(contracts, basePackageName);
|
||||
}
|
||||
|
||||
private Set<Map.Entry<Path, List<ContractMetadata>>> inProgress(
|
||||
MultiValueMap<Path, ContractMetadata> contracts) {
|
||||
private Set<Map.Entry<Path, List<ContractMetadata>>> inProgress(MultiValueMap<Path, ContractMetadata> contracts) {
|
||||
return contracts.entrySet().stream()
|
||||
.filter(entry -> entry.getValue().stream()
|
||||
.anyMatch(ContractMetadata::anyInProgress))
|
||||
.filter(entry -> entry.getValue().stream().anyMatch(ContractMetadata::anyInProgress))
|
||||
.collect(Collectors.toSet());
|
||||
}
|
||||
|
||||
void processAllNotInProgress(MultiValueMap<Path, ContractMetadata> contracts,
|
||||
final String basePackageName) {
|
||||
void processAllNotInProgress(MultiValueMap<Path, ContractMetadata> contracts, final String basePackageName) {
|
||||
contracts.entrySet().stream()
|
||||
.filter(entry -> entry.getValue().stream()
|
||||
.noneMatch(ContractMetadata::anyInProgress))
|
||||
.forEach(entry -> processIncludedDirectory(relativizeContractPath(entry),
|
||||
entry.getValue(), basePackageName));
|
||||
.filter(entry -> entry.getValue().stream().noneMatch(ContractMetadata::anyInProgress))
|
||||
.forEach(entry -> processIncludedDirectory(relativizeContractPath(entry), entry.getValue(),
|
||||
basePackageName));
|
||||
}
|
||||
|
||||
private String relativizeContractPath(Map.Entry<Path, List<ContractMetadata>> entry) {
|
||||
Path relativePath = configProperties.getContractsDslDir().toPath()
|
||||
.relativize(entry.getKey());
|
||||
Path relativePath = configProperties.getContractsDslDir().toPath().relativize(entry.getKey());
|
||||
return StringUtils.defaultIfEmpty(relativePath.toString(), DEFAULT_CLASS_PREFIX);
|
||||
}
|
||||
|
||||
private void processIncludedDirectory(final String includedDirectoryRelativePath,
|
||||
final Collection<ContractMetadata> contracts,
|
||||
final String basePackageNameForClass) {
|
||||
final Collection<ContractMetadata> contracts, final String basePackageNameForClass) {
|
||||
log.debug("Collected contracts with metadata {} relative path is [{}]", contracts,
|
||||
includedDirectoryRelativePath);
|
||||
if (!contracts.isEmpty()) {
|
||||
String className = afterLast(includedDirectoryRelativePath, File.separator)
|
||||
+ resolveNameSuffix();
|
||||
String className = afterLast(includedDirectoryRelativePath, File.separator) + resolveNameSuffix();
|
||||
String convertedClassName = convertIllegalPackageChars(className);
|
||||
String packageName = buildPackage(basePackageNameForClass,
|
||||
includedDirectoryRelativePath);
|
||||
String packageName = buildPackage(basePackageNameForClass, includedDirectoryRelativePath);
|
||||
Path dir = saver.generateTestBaseDir(basePackageNameForClass,
|
||||
convertIllegalPackageChars(includedDirectoryRelativePath));
|
||||
Path classPath = saver.pathToClass(dir, convertedClassName);
|
||||
byte[] classBytes = generator
|
||||
.buildClass(configProperties, contracts,
|
||||
includedDirectoryRelativePath,
|
||||
new SingleTestGenerator.GeneratedClassData(convertedClassName,
|
||||
packageName, classPath))
|
||||
.buildClass(configProperties, contracts, includedDirectoryRelativePath,
|
||||
new SingleTestGenerator.GeneratedClassData(convertedClassName, packageName, classPath))
|
||||
.getBytes(StandardCharsets.UTF_8);
|
||||
saver.saveClassFile(classPath, classBytes);
|
||||
counter.incrementAndGet();
|
||||
@@ -203,11 +185,9 @@ public class TestGenerator {
|
||||
configProperties.getTestFramework().getClassNameSuffix());
|
||||
}
|
||||
|
||||
protected static String buildPackage(final String packageNameForClass,
|
||||
final String includedDirectoryRelativePath) {
|
||||
protected static String buildPackage(final String packageNameForClass, final String includedDirectoryRelativePath) {
|
||||
String directory = beforeLast(includedDirectoryRelativePath, File.separator);
|
||||
String convertedPackage = packageNameForClass + "."
|
||||
+ directoryToPackage(convertIllegalPackageChars(directory));
|
||||
String convertedPackage = packageNameForClass + "." + directoryToPackage(convertIllegalPackageChars(directory));
|
||||
return !directory.isEmpty() ? convertedPackage : packageNameForClass;
|
||||
}
|
||||
|
||||
|
||||
@@ -80,8 +80,7 @@ public class CollectionAssert<ELEMENT> extends IterableAssert<ELEMENT> {
|
||||
isNotNull();
|
||||
int flattenedSize = flattenedSize(0, this.actual);
|
||||
if (!(flattenedSize >= size)) {
|
||||
failWithMessage("The flattened size <%s> is not greater or equal to <%s>",
|
||||
flattenedSize, size);
|
||||
failWithMessage("The flattened size <%s> is not greater or equal to <%s>", flattenedSize, size);
|
||||
}
|
||||
return this;
|
||||
}
|
||||
@@ -97,8 +96,7 @@ public class CollectionAssert<ELEMENT> extends IterableAssert<ELEMENT> {
|
||||
isNotNull();
|
||||
int flattenedSize = flattenedSize(0, this.actual);
|
||||
if (!(flattenedSize <= size)) {
|
||||
failWithMessage("The flattened size <%s> is not less or equal to <%s>",
|
||||
flattenedSize, size);
|
||||
failWithMessage("The flattened size <%s> is not less or equal to <%s>", flattenedSize, size);
|
||||
}
|
||||
return this;
|
||||
}
|
||||
@@ -115,8 +113,8 @@ public class CollectionAssert<ELEMENT> extends IterableAssert<ELEMENT> {
|
||||
isNotNull();
|
||||
int flattenedSize = flattenedSize(0, this.actual);
|
||||
if (!(flattenedSize >= lowerBound && flattenedSize <= higherBound)) {
|
||||
failWithMessage("The flattened size <%s> is not between <%s> and <%s>",
|
||||
flattenedSize, lowerBound, higherBound);
|
||||
failWithMessage("The flattened size <%s> is not between <%s> and <%s>", flattenedSize, lowerBound,
|
||||
higherBound);
|
||||
}
|
||||
return this;
|
||||
}
|
||||
@@ -130,8 +128,7 @@ public class CollectionAssert<ELEMENT> extends IterableAssert<ELEMENT> {
|
||||
isNotNull();
|
||||
int actualSize = size(this.actual);
|
||||
if (!(actualSize >= size)) {
|
||||
failWithMessage("The size <%s> is not greater or equal to <%s>", actualSize,
|
||||
size);
|
||||
failWithMessage("The size <%s> is not greater or equal to <%s>", actualSize, size);
|
||||
}
|
||||
return this;
|
||||
}
|
||||
@@ -145,8 +142,7 @@ public class CollectionAssert<ELEMENT> extends IterableAssert<ELEMENT> {
|
||||
isNotNull();
|
||||
int actualSize = size(this.actual);
|
||||
if (!(actualSize <= size)) {
|
||||
failWithMessage("The size <%s> is not less or equal to <%s>", actualSize,
|
||||
size);
|
||||
failWithMessage("The size <%s> is not less or equal to <%s>", actualSize, size);
|
||||
}
|
||||
return this;
|
||||
}
|
||||
@@ -163,8 +159,7 @@ public class CollectionAssert<ELEMENT> extends IterableAssert<ELEMENT> {
|
||||
isNotNull();
|
||||
int size = size(this.actual);
|
||||
if (!(size >= lowerBound && size <= higherBound)) {
|
||||
failWithMessage("The size <%s> is not between <%s> and <%s>", size,
|
||||
lowerBound, higherBound);
|
||||
failWithMessage("The size <%s> is not between <%s> and <%s>", size, lowerBound, higherBound);
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
@@ -31,24 +31,19 @@ class BaseClassProvider {
|
||||
|
||||
private static final String SEPARATOR = "_REPLACEME_";
|
||||
|
||||
String retrieveBaseClass(Map<String, String> baseClassMappings,
|
||||
String packageWithBaseClasses, String baseClassForTests,
|
||||
String includedDirectoryRelativePath) {
|
||||
String contractPathAsPackage = includedDirectoryRelativePath
|
||||
.replace(File.separator, ".");
|
||||
String contractPackage = includedDirectoryRelativePath.replace(File.separator,
|
||||
SEPARATOR);
|
||||
String retrieveBaseClass(Map<String, String> baseClassMappings, String packageWithBaseClasses,
|
||||
String baseClassForTests, String includedDirectoryRelativePath) {
|
||||
String contractPathAsPackage = includedDirectoryRelativePath.replace(File.separator, ".");
|
||||
String contractPackage = includedDirectoryRelativePath.replace(File.separator, SEPARATOR);
|
||||
// package mapping takes super precedence
|
||||
if (baseClassMappings != null && !baseClassMappings.isEmpty()) {
|
||||
Optional<Map.Entry<String, String>> mapping = baseClassMappings.entrySet()
|
||||
.stream().filter(entry -> {
|
||||
String pattern = entry.getKey();
|
||||
return contractPathAsPackage.matches(pattern);
|
||||
}).findFirst();
|
||||
Optional<Map.Entry<String, String>> mapping = baseClassMappings.entrySet().stream().filter(entry -> {
|
||||
String pattern = entry.getKey();
|
||||
return contractPathAsPackage.matches(pattern);
|
||||
}).findFirst();
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Matching pattern for contract package ["
|
||||
+ contractPathAsPackage + "] with setup " + baseClassMappings
|
||||
+ " is [" + mapping + "]");
|
||||
log.debug("Matching pattern for contract package [" + contractPathAsPackage + "] with setup "
|
||||
+ baseClassMappings + " is [" + mapping + "]");
|
||||
}
|
||||
if (mapping.isPresent()) {
|
||||
return mapping.get().getValue();
|
||||
@@ -57,15 +52,12 @@ class BaseClassProvider {
|
||||
if (StringUtils.isEmpty(packageWithBaseClasses)) {
|
||||
return baseClassForTests;
|
||||
}
|
||||
String generatedClassName = generateDefaultBaseClassName(contractPackage,
|
||||
packageWithBaseClasses);
|
||||
String generatedClassName = generateDefaultBaseClassName(contractPackage, packageWithBaseClasses);
|
||||
return generatedClassName + "Base";
|
||||
}
|
||||
|
||||
private String generateDefaultBaseClassName(String classPackage,
|
||||
String packageWithBaseClasses) {
|
||||
String[] splitPackage = NamesUtil.convertIllegalPackageChars(classPackage)
|
||||
.split(SEPARATOR);
|
||||
private String generateDefaultBaseClassName(String classPackage, String packageWithBaseClasses) {
|
||||
String[] splitPackage = NamesUtil.convertIllegalPackageChars(classPackage).split(SEPARATOR);
|
||||
if (splitPackage.length > 1) {
|
||||
String last = NamesUtil.capitalize(splitPackage[splitPackage.length - 1]);
|
||||
String butLast = NamesUtil.capitalize(splitPackage[splitPackage.length - 2]);
|
||||
|
||||
@@ -188,8 +188,7 @@ public class BlockBuilder {
|
||||
*/
|
||||
public BlockBuilder addAtTheEnd(String toAdd) {
|
||||
String lastChar = String.valueOf(builder.charAt(builder.length() - 1));
|
||||
String secondLastChar = builder.length() >= 2
|
||||
? String.valueOf(builder.charAt(builder.length() - 2)) : "";
|
||||
String secondLastChar = builder.length() >= 2 ? String.valueOf(builder.charAt(builder.length() - 2)) : "";
|
||||
boolean isEndWithNewLine = endsWithNewLine(lastChar);
|
||||
boolean lastCharSpecial = aSpecialSign(lastChar, toAdd);
|
||||
boolean secondLastCharSpecial = aSpecialSign(secondLastChar, toAdd);
|
||||
@@ -225,9 +224,8 @@ public class BlockBuilder {
|
||||
return false;
|
||||
}
|
||||
return character.equals("{") || (character.equals(spacer) && toAdd.equals(spacer))
|
||||
|| (character.equals(spacer) && toAdd.equals(" "))
|
||||
|| character.equals(toAdd) || (endsWithNewLine(character)
|
||||
&& StringUtils.equalsAny(toAdd, "\n", " ", lineEnding));
|
||||
|| (character.equals(spacer) && toAdd.equals(" ")) || character.equals(toAdd)
|
||||
|| (endsWithNewLine(character) && StringUtils.equalsAny(toAdd, "\n", " ", lineEnding));
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -33,24 +33,21 @@ class BodyAssertionLineCreator {
|
||||
|
||||
private final ComparisonBuilder comparisonBuilder;
|
||||
|
||||
BodyAssertionLineCreator(BlockBuilder blockBuilder, GeneratedClassMetaData metaData,
|
||||
String byteArrayString, ComparisonBuilder comparisonBuilder) {
|
||||
BodyAssertionLineCreator(BlockBuilder blockBuilder, GeneratedClassMetaData metaData, String byteArrayString,
|
||||
ComparisonBuilder comparisonBuilder) {
|
||||
this.blockBuilder = blockBuilder;
|
||||
this.bodyReader = new BodyReader(metaData);
|
||||
this.byteArrayString = byteArrayString;
|
||||
this.comparisonBuilder = comparisonBuilder;
|
||||
}
|
||||
|
||||
void appendBodyAssertionLine(SingleContractMetadata metadata, String property,
|
||||
Object value) {
|
||||
void appendBodyAssertionLine(SingleContractMetadata metadata, String property, Object value) {
|
||||
if (value instanceof String && ((String) value).startsWith("$")) {
|
||||
String newValue = stripFirstChar((String) value).replaceAll("\\$value",
|
||||
"responseBody" + property);
|
||||
String newValue = stripFirstChar((String) value).replaceAll("\\$value", "responseBody" + property);
|
||||
this.blockBuilder.addLineWithEnding(newValue);
|
||||
}
|
||||
else {
|
||||
this.blockBuilder.addLineWithEnding(
|
||||
getResponseBodyPropertyComparisonString(metadata, property, value));
|
||||
this.blockBuilder.addLineWithEnding(getResponseBodyPropertyComparisonString(metadata, property, value));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -58,23 +55,20 @@ class BodyAssertionLineCreator {
|
||||
* Builds the code that for the given {@code property} will compare it to the given
|
||||
* Object {@code value}
|
||||
*/
|
||||
private String getResponseBodyPropertyComparisonString(
|
||||
SingleContractMetadata singleContractMetadata, String property,
|
||||
Object value) {
|
||||
private String getResponseBodyPropertyComparisonString(SingleContractMetadata singleContractMetadata,
|
||||
String property, Object value) {
|
||||
if (value instanceof FromFileProperty) {
|
||||
return getResponseBodyPropertyComparisonString(singleContractMetadata,
|
||||
property, (FromFileProperty) value);
|
||||
return getResponseBodyPropertyComparisonString(singleContractMetadata, property, (FromFileProperty) value);
|
||||
}
|
||||
else if (value instanceof Pattern) {
|
||||
return getResponseBodyPropertyComparisonString(property, (Pattern) value);
|
||||
}
|
||||
else if (value instanceof ExecutionProperty) {
|
||||
return getResponseBodyPropertyComparisonString(property,
|
||||
(ExecutionProperty) value);
|
||||
return getResponseBodyPropertyComparisonString(property, (ExecutionProperty) value);
|
||||
}
|
||||
else if (value instanceof DslProperty) {
|
||||
return getResponseBodyPropertyComparisonString(singleContractMetadata,
|
||||
property, ((DslProperty) value).getServerValue());
|
||||
return getResponseBodyPropertyComparisonString(singleContractMetadata, property,
|
||||
((DslProperty) value).getServerValue());
|
||||
}
|
||||
return getResponseBodyPropertyComparisonString(property, value.toString());
|
||||
}
|
||||
@@ -83,14 +77,11 @@ class BodyAssertionLineCreator {
|
||||
* Builds the code that for the given {@code property} will compare it to the given
|
||||
* byte[] {@code value}
|
||||
*/
|
||||
private String getResponseBodyPropertyComparisonString(
|
||||
SingleContractMetadata singleContractMetadata, String property,
|
||||
FromFileProperty value) {
|
||||
private String getResponseBodyPropertyComparisonString(SingleContractMetadata singleContractMetadata,
|
||||
String property, FromFileProperty value) {
|
||||
if (value.isByte()) {
|
||||
return this.comparisonBuilder.assertThat(this.byteArrayString)
|
||||
+ this.comparisonBuilder.isEqualToUnquoted(this.bodyReader
|
||||
.readBytesFromFileString(singleContractMetadata, value,
|
||||
CommunicationType.RESPONSE));
|
||||
return this.comparisonBuilder.assertThat(this.byteArrayString) + this.comparisonBuilder.isEqualToUnquoted(
|
||||
this.bodyReader.readBytesFromFileString(singleContractMetadata, value, CommunicationType.RESPONSE));
|
||||
}
|
||||
return getResponseBodyPropertyComparisonString(property, value.asString());
|
||||
}
|
||||
@@ -99,18 +90,15 @@ class BodyAssertionLineCreator {
|
||||
* Builds the code that for the given {@code property} will compare it to the given
|
||||
* String {@code value}
|
||||
*/
|
||||
private String getResponseBodyPropertyComparisonString(String property,
|
||||
String value) {
|
||||
return this.comparisonBuilder.assertThatUnescaped("responseBody" + property,
|
||||
value);
|
||||
private String getResponseBodyPropertyComparisonString(String property, String value) {
|
||||
return this.comparisonBuilder.assertThatUnescaped("responseBody" + property, value);
|
||||
}
|
||||
|
||||
/**
|
||||
* Builds the code that for the given {@code property} will match it to the given
|
||||
* regular expression {@code value}
|
||||
*/
|
||||
private String getResponseBodyPropertyComparisonString(String property,
|
||||
Pattern value) {
|
||||
private String getResponseBodyPropertyComparisonString(String property, Pattern value) {
|
||||
return this.comparisonBuilder.assertThat("responseBody" + property, value);
|
||||
}
|
||||
|
||||
@@ -118,8 +106,7 @@ class BodyAssertionLineCreator {
|
||||
* Builds the code that for the given {@code property} will match it to the given
|
||||
* {@link ExecutionProperty} value
|
||||
*/
|
||||
private String getResponseBodyPropertyComparisonString(String property,
|
||||
ExecutionProperty value) {
|
||||
private String getResponseBodyPropertyComparisonString(String property, ExecutionProperty value) {
|
||||
return value.insertValue("responseBody" + property);
|
||||
}
|
||||
|
||||
|
||||
@@ -37,13 +37,11 @@ interface BodyMethodGeneration {
|
||||
return SerializationUtils.deserialize(serializedObject);
|
||||
}
|
||||
|
||||
default void addColonIfRequired(Optional<String> lineSuffix,
|
||||
BlockBuilder blockBuilder) {
|
||||
default void addColonIfRequired(Optional<String> lineSuffix, BlockBuilder blockBuilder) {
|
||||
lineSuffix.ifPresent(s -> blockBuilder.addAtTheEnd(lineSuffix.get()));
|
||||
}
|
||||
|
||||
default void addBodyMatchingBlock(List<BodyMatcher> matchers,
|
||||
BlockBuilder blockBuilder, Object responseBody,
|
||||
default void addBodyMatchingBlock(List<BodyMatcher> matchers, BlockBuilder blockBuilder, Object responseBody,
|
||||
boolean shouldCommentOutBDDBlocks) {
|
||||
blockBuilder.endBlock();
|
||||
blockBuilder.addLine(getAssertionJoiner(shouldCommentOutBDDBlocks));
|
||||
@@ -52,8 +50,7 @@ interface BodyMethodGeneration {
|
||||
if (it.matchingType() == MatchingType.NULL) {
|
||||
methodForNullCheck(it, blockBuilder);
|
||||
}
|
||||
else if (MatchingType.regexRelated(it.matchingType())
|
||||
|| it.matchingType() == MatchingType.EQUALITY) {
|
||||
else if (MatchingType.regexRelated(it.matchingType()) || it.matchingType() == MatchingType.EQUALITY) {
|
||||
methodForEqualityCheck(it, blockBuilder, responseBody);
|
||||
}
|
||||
else if (it.matchingType() == MatchingType.COMMAND) {
|
||||
|
||||
@@ -34,8 +34,7 @@ interface BodyMethodVisitor {
|
||||
* @return
|
||||
*/
|
||||
default BlockBuilder startBodyBlock(BlockBuilder blockBuilder, String label) {
|
||||
return blockBuilder.addIndentation().appendWithLabelPrefix(label).addEmptyLine()
|
||||
.startBlock();
|
||||
return blockBuilder.addIndentation().appendWithLabelPrefix(label).addEmptyLine().startBlock();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -44,11 +43,9 @@ interface BodyMethodVisitor {
|
||||
* @param methodVisitors
|
||||
* @param singleContractMetadata
|
||||
*/
|
||||
default void indentedBodyBlock(BlockBuilder blockBuilder,
|
||||
List<? extends MethodVisitor> methodVisitors,
|
||||
default void indentedBodyBlock(BlockBuilder blockBuilder, List<? extends MethodVisitor> methodVisitors,
|
||||
SingleContractMetadata singleContractMetadata) {
|
||||
List<MethodVisitor> visitors = filterVisitors(methodVisitors,
|
||||
singleContractMetadata);
|
||||
List<MethodVisitor> visitors = filterVisitors(methodVisitors, singleContractMetadata);
|
||||
if (visitors.isEmpty()) {
|
||||
blockBuilder.addEndingIfNotPresent().addEmptyLine();
|
||||
blockBuilder.endBlock();
|
||||
@@ -65,11 +62,9 @@ interface BodyMethodVisitor {
|
||||
* @param singleContractMetadata
|
||||
* @return
|
||||
*/
|
||||
default List<MethodVisitor> filterVisitors(
|
||||
List<? extends MethodVisitor> methodVisitors,
|
||||
default List<MethodVisitor> filterVisitors(List<? extends MethodVisitor> methodVisitors,
|
||||
SingleContractMetadata singleContractMetadata) {
|
||||
return methodVisitors.stream()
|
||||
.filter(given -> given.accept(singleContractMetadata))
|
||||
return methodVisitors.stream().filter(given -> given.accept(singleContractMetadata))
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
@@ -80,11 +75,9 @@ interface BodyMethodVisitor {
|
||||
* @param methodVisitors
|
||||
* @param singleContractMetadata
|
||||
*/
|
||||
default void bodyBlock(BlockBuilder blockBuilder,
|
||||
List<? extends MethodVisitor> methodVisitors,
|
||||
default void bodyBlock(BlockBuilder blockBuilder, List<? extends MethodVisitor> methodVisitors,
|
||||
SingleContractMetadata singleContractMetadata) {
|
||||
List<MethodVisitor> visitors = filterVisitors(methodVisitors,
|
||||
singleContractMetadata);
|
||||
List<MethodVisitor> visitors = filterVisitors(methodVisitors, singleContractMetadata);
|
||||
if (visitors.isEmpty()) {
|
||||
blockBuilder.addEndingIfNotPresent().addEmptyLine();
|
||||
return;
|
||||
@@ -99,8 +92,8 @@ interface BodyMethodVisitor {
|
||||
* @param singleContractMetadata
|
||||
* @param visitors
|
||||
*/
|
||||
default void applyVisitors(BlockBuilder blockBuilder,
|
||||
SingleContractMetadata singleContractMetadata, List<MethodVisitor> visitors) {
|
||||
default void applyVisitors(BlockBuilder blockBuilder, SingleContractMetadata singleContractMetadata,
|
||||
List<MethodVisitor> visitors) {
|
||||
Iterator<MethodVisitor> iterator = visitors.iterator();
|
||||
while (iterator.hasNext()) {
|
||||
MethodVisitor visitor = iterator.next();
|
||||
@@ -118,8 +111,8 @@ interface BodyMethodVisitor {
|
||||
* @param singleContractMetadata
|
||||
* @param visitors
|
||||
*/
|
||||
default void applyVisitorsWithEnding(BlockBuilder blockBuilder,
|
||||
SingleContractMetadata singleContractMetadata, List<MethodVisitor> visitors) {
|
||||
default void applyVisitorsWithEnding(BlockBuilder blockBuilder, SingleContractMetadata singleContractMetadata,
|
||||
List<MethodVisitor> visitors) {
|
||||
Iterator<MethodVisitor> iterator = visitors.iterator();
|
||||
while (iterator.hasNext()) {
|
||||
MethodVisitor visitor = iterator.next();
|
||||
|
||||
@@ -68,15 +68,13 @@ interface BodyParser extends BodyThen {
|
||||
default Object convertResponseBody(SingleContractMetadata metadata) {
|
||||
ContentType contentType = metadata.getOutputTestContentType();
|
||||
DslProperty body = responseBody(metadata);
|
||||
Object responseBody = extractServerValueFromBody(contentType,
|
||||
body.getServerValue());
|
||||
Object responseBody = extractServerValueFromBody(contentType, body.getServerValue());
|
||||
if (responseBody instanceof FromFileProperty) {
|
||||
responseBody = ((FromFileProperty) responseBody).asString();
|
||||
}
|
||||
else if (responseBody instanceof GString) {
|
||||
responseBody = extractValue((GString) responseBody, contentType,
|
||||
o -> o instanceof DslProperty ? ((DslProperty) o).getServerValue()
|
||||
: o);
|
||||
o -> o instanceof DslProperty ? ((DslProperty) o).getServerValue() : o);
|
||||
}
|
||||
else if (responseBody instanceof DslProperty) {
|
||||
responseBody = MapConverter.getTestSideValues(responseBody);
|
||||
@@ -96,15 +94,14 @@ interface BodyParser extends BodyThen {
|
||||
// [a:3, b:4] == "a=3&b=4"
|
||||
return ((Map) bodyValue).entrySet().stream().map(o -> {
|
||||
Map.Entry entry = (Map.Entry) o;
|
||||
return convertUnicodeEscapesIfRequired(entry.getKey().toString() + "="
|
||||
+ MapConverter.getTestSideValuesForText(entry.getValue()));
|
||||
return convertUnicodeEscapesIfRequired(
|
||||
entry.getKey().toString() + "=" + MapConverter.getTestSideValuesForText(entry.getValue()));
|
||||
}).collect(Collectors.joining("&")).toString();
|
||||
}
|
||||
else if (bodyValue instanceof List) {
|
||||
// ["a=3", "b=4"] == "a=3&b=4"
|
||||
return ((List) bodyValue).stream()
|
||||
.map(o -> convertUnicodeEscapesIfRequired(
|
||||
MapConverter.getTestSideValuesForText(o).toString()))
|
||||
.map(o -> convertUnicodeEscapesIfRequired(MapConverter.getTestSideValuesForText(o).toString()))
|
||||
.collect(Collectors.joining("&")).toString();
|
||||
}
|
||||
}
|
||||
@@ -120,16 +117,14 @@ interface BodyParser extends BodyThen {
|
||||
*/
|
||||
default Object extractServerValueFromBody(ContentType contentType, Object bodyValue) {
|
||||
if (bodyValue instanceof GString) {
|
||||
return extractValue((GString) bodyValue, contentType,
|
||||
ContentUtils.GET_TEST_SIDE);
|
||||
return extractValue((GString) bodyValue, contentType, ContentUtils.GET_TEST_SIDE);
|
||||
}
|
||||
else if (bodyValue instanceof FromFileProperty) {
|
||||
return MapConverter.transformValues(bodyValue, ContentUtils.GET_TEST_SIDE);
|
||||
}
|
||||
else if (TEXT != contentType && FORM != contentType && DEFINED != contentType) {
|
||||
boolean dontParseStrings = contentType == JSON && bodyValue instanceof Map;
|
||||
Closure parsingClosure = dontParseStrings ? Closure.IDENTITY
|
||||
: MapConverter.JSON_PARSING_CLOSURE;
|
||||
Closure parsingClosure = dontParseStrings ? Closure.IDENTITY : MapConverter.JSON_PARSING_CLOSURE;
|
||||
return MapConverter.getTestSideValues(bodyValue, parsingClosure);
|
||||
}
|
||||
return bodyValue;
|
||||
|
||||
@@ -47,47 +47,41 @@ class BodyReader {
|
||||
this.generatedClassMetaData = generatedClassMetaData;
|
||||
}
|
||||
|
||||
String readBytesFromFileString(SingleContractMetadata metadata,
|
||||
FromFileProperty property, CommunicationType side) {
|
||||
String readBytesFromFileString(SingleContractMetadata metadata, FromFileProperty property, CommunicationType side) {
|
||||
String fileName = byteBodyToAFileForTestMethod(metadata, property, side);
|
||||
return "fileToBytes(this, \"" + fileName + "\")";
|
||||
}
|
||||
|
||||
String readStringFromFileString(SingleContractMetadata metadata,
|
||||
FromFileProperty property, CommunicationType side) {
|
||||
String readStringFromFileString(SingleContractMetadata metadata, FromFileProperty property,
|
||||
CommunicationType side) {
|
||||
if (!Charset.defaultCharset().toString().equals(property.getCharset())) {
|
||||
return "new String(" + readBytesFromFileString(metadata, property, side)
|
||||
+ ", \"" + property.getCharset() + "\")";
|
||||
return "new String(" + readBytesFromFileString(metadata, property, side) + ", \"" + property.getCharset()
|
||||
+ "\")";
|
||||
}
|
||||
return "new String(" + readBytesFromFileString(metadata, property, side) + ")";
|
||||
}
|
||||
|
||||
void storeContractAsYaml(SingleContractMetadata metadata) {
|
||||
Contract contract = metadata.getContract();
|
||||
List<YamlContract> contracts = this.converter
|
||||
.convertTo(Collections.singleton(contract));
|
||||
List<YamlContract> contracts = this.converter.convertTo(Collections.singleton(contract));
|
||||
Map<String, byte[]> store = this.converter.store(contracts);
|
||||
store.forEach(
|
||||
(name, bytes) -> writeFileForBothIdeAndBuildTool(metadata, bytes, name));
|
||||
store.forEach((name, bytes) -> writeFileForBothIdeAndBuildTool(metadata, bytes, name));
|
||||
}
|
||||
|
||||
private String byteBodyToAFileForTestMethod(SingleContractMetadata metadata,
|
||||
FromFileProperty property, CommunicationType side) {
|
||||
private String byteBodyToAFileForTestMethod(SingleContractMetadata metadata, FromFileProperty property,
|
||||
CommunicationType side) {
|
||||
GeneratedClassDataForMethod classDataForMethod = classDataForMethod(metadata);
|
||||
String newFileName = classDataForMethod.getMethodName() + "_"
|
||||
+ side.name().toLowerCase() + "_" + property.fileName();
|
||||
String newFileName = classDataForMethod.getMethodName() + "_" + side.name().toLowerCase() + "_"
|
||||
+ property.fileName();
|
||||
writeFileForBothIdeAndBuildTool(metadata, property.asBytes(), newFileName);
|
||||
return newFileName;
|
||||
}
|
||||
|
||||
private GeneratedClassDataForMethod classDataForMethod(
|
||||
SingleContractMetadata metadata) {
|
||||
return new GeneratedClassDataForMethod(
|
||||
this.generatedClassMetaData.generatedClassData, metadata.methodName());
|
||||
private GeneratedClassDataForMethod classDataForMethod(SingleContractMetadata metadata) {
|
||||
return new GeneratedClassDataForMethod(this.generatedClassMetaData.generatedClassData, metadata.methodName());
|
||||
}
|
||||
|
||||
private void writeFileForBothIdeAndBuildTool(SingleContractMetadata metadata,
|
||||
byte[] bytes, String newFileName) {
|
||||
private void writeFileForBothIdeAndBuildTool(SingleContractMetadata metadata, byte[] bytes, String newFileName) {
|
||||
GeneratedClassDataForMethod classDataForMethod = classDataForMethod(metadata);
|
||||
java.nio.file.Path parent = classDataForMethod.testClassPath().getParent();
|
||||
if (parent == null) {
|
||||
@@ -101,8 +95,7 @@ class BodyReader {
|
||||
try {
|
||||
Path path = newFile.toPath();
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Writing file for [" + path
|
||||
+ "] for body reading in generated test (for IDE)");
|
||||
log.debug("Writing file for [" + path + "] for body reading in generated test (for IDE)");
|
||||
}
|
||||
Files.write(path, bytes);
|
||||
// for plugin
|
||||
@@ -113,22 +106,15 @@ class BodyReader {
|
||||
}
|
||||
}
|
||||
|
||||
private void generatedTestResourcesFileBytes(byte[] bytes, File newFile)
|
||||
throws IOException {
|
||||
Assert.notNull(
|
||||
this.generatedClassMetaData.configProperties.getGeneratedTestSourcesDir(),
|
||||
private void generatedTestResourcesFileBytes(byte[] bytes, File newFile) throws IOException {
|
||||
Assert.notNull(this.generatedClassMetaData.configProperties.getGeneratedTestSourcesDir(),
|
||||
"No generated test sources directory set");
|
||||
Assert.notNull(
|
||||
this.generatedClassMetaData.configProperties
|
||||
.getGeneratedTestResourcesDir(),
|
||||
Assert.notNull(this.generatedClassMetaData.configProperties.getGeneratedTestResourcesDir(),
|
||||
"No generated test resources directory set");
|
||||
Path path = this.generatedClassMetaData.configProperties
|
||||
.getGeneratedTestSourcesDir().toPath();
|
||||
Path path = this.generatedClassMetaData.configProperties.getGeneratedTestSourcesDir().toPath();
|
||||
Path relativePath = path.relativize(newFile.toPath());
|
||||
File newFileInGeneratedTestSources = new File(
|
||||
this.generatedClassMetaData.configProperties
|
||||
.getGeneratedTestResourcesDir(),
|
||||
relativePath.toString());
|
||||
this.generatedClassMetaData.configProperties.getGeneratedTestResourcesDir(), relativePath.toString());
|
||||
newFileInGeneratedTestSources.getParentFile().mkdirs();
|
||||
Path generatedTestSourceFilePath = newFileInGeneratedTestSources.toPath();
|
||||
if (log.isDebugEnabled()) {
|
||||
|
||||
@@ -36,20 +36,17 @@ class ClassAnnotationsBuilder {
|
||||
}
|
||||
|
||||
ClassAnnotationsBuilder jUnit4() {
|
||||
this.parentBuilder
|
||||
.classAnnotations(new JUnit4OrderClassAnnotation(builder, metaData));
|
||||
this.parentBuilder.classAnnotations(new JUnit4OrderClassAnnotation(builder, metaData));
|
||||
return this;
|
||||
}
|
||||
|
||||
ClassAnnotationsBuilder jUnit5() {
|
||||
this.parentBuilder
|
||||
.classAnnotations(new JUnit5OrderClassAnnotation(builder, metaData));
|
||||
this.parentBuilder.classAnnotations(new JUnit5OrderClassAnnotation(builder, metaData));
|
||||
return this;
|
||||
}
|
||||
|
||||
ClassAnnotationsBuilder spock() {
|
||||
this.parentBuilder
|
||||
.classAnnotations(new SpockOrderClassAnnotation(builder, metaData));
|
||||
this.parentBuilder.classAnnotations(new SpockOrderClassAnnotation(builder, metaData));
|
||||
return this;
|
||||
}
|
||||
|
||||
|
||||
@@ -38,14 +38,12 @@ class ClassBodyBuilder {
|
||||
|
||||
final GeneratedClassMetaData generatedClassMetaData;
|
||||
|
||||
private ClassBodyBuilder(BlockBuilder blockBuilder,
|
||||
GeneratedClassMetaData generatedClassMetaData) {
|
||||
private ClassBodyBuilder(BlockBuilder blockBuilder, GeneratedClassMetaData generatedClassMetaData) {
|
||||
this.blockBuilder = blockBuilder;
|
||||
this.generatedClassMetaData = generatedClassMetaData;
|
||||
}
|
||||
|
||||
static ClassBodyBuilder builder(BlockBuilder blockBuilder,
|
||||
GeneratedClassMetaData generatedClassMetaData) {
|
||||
static ClassBodyBuilder builder(BlockBuilder blockBuilder, GeneratedClassMetaData generatedClassMetaData) {
|
||||
return new ClassBodyBuilder(blockBuilder, generatedClassMetaData);
|
||||
}
|
||||
|
||||
@@ -78,8 +76,7 @@ class ClassBodyBuilder {
|
||||
}
|
||||
|
||||
void visit(List<? extends Visitor> list) {
|
||||
List<? extends Visitor> visitors = list.stream().filter(Acceptor::accept)
|
||||
.collect(Collectors.toList());
|
||||
List<? extends Visitor> visitors = list.stream().filter(Acceptor::accept).collect(Collectors.toList());
|
||||
Iterator<? extends Visitor> iterator = visitors.iterator();
|
||||
while (iterator.hasNext()) {
|
||||
Visitor visitor = iterator.next();
|
||||
|
||||
@@ -74,8 +74,7 @@ interface ComparisonBuilder {
|
||||
}
|
||||
|
||||
default String isEqualTo(Number number) {
|
||||
String numberString = number instanceof Long ? number.toString() + "L"
|
||||
: number.toString();
|
||||
String numberString = number instanceof Long ? number.toString() + "L" : number.toString();
|
||||
return ".isEqualTo(" + numberString + ")";
|
||||
}
|
||||
|
||||
|
||||
@@ -32,8 +32,7 @@ final class ContentHelper {
|
||||
if (object instanceof ExecutionProperty) {
|
||||
return getTestSideValue(object);
|
||||
}
|
||||
return quotedAndEscaped(
|
||||
MapConverter.getTestSideValuesForNonBody(object).toString());
|
||||
return quotedAndEscaped(MapConverter.getTestSideValuesForNonBody(object).toString());
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -37,10 +37,8 @@ interface CookieElementProcessor {
|
||||
Iterator<Cookie> iterator = cookies.getEntries().iterator();
|
||||
while (iterator.hasNext()) {
|
||||
Cookie cookie = iterator.next();
|
||||
String text = processCookieElement(cookie.getKey(),
|
||||
cookie.getServerValue() instanceof NotToEscapePattern
|
||||
? cookie.getServerValue()
|
||||
: MapConverter.getTestSideValues(cookie.getServerValue()));
|
||||
String text = processCookieElement(cookie.getKey(), cookie.getServerValue() instanceof NotToEscapePattern
|
||||
? cookie.getServerValue() : MapConverter.getTestSideValues(cookie.getServerValue()));
|
||||
if (iterator.hasNext()) {
|
||||
blockBuilder().addLine(text).addEndingIfNotPresent();
|
||||
}
|
||||
@@ -55,9 +53,8 @@ interface CookieElementProcessor {
|
||||
default String processCookieElement(String property, Object value) {
|
||||
if (value instanceof NotToEscapePattern) {
|
||||
verifyCookieNotNull(property);
|
||||
return comparisonBuilder().assertThat(cookieValue(property))
|
||||
+ comparisonBuilder().matches(((NotToEscapePattern) value)
|
||||
.getServerValue().pattern().replace("\\", "\\\\"));
|
||||
return comparisonBuilder().assertThat(cookieValue(property)) + comparisonBuilder()
|
||||
.matches(((NotToEscapePattern) value).getServerValue().pattern().replace("\\", "\\\\"));
|
||||
}
|
||||
else if (value instanceof String || value instanceof Pattern) {
|
||||
verifyCookieNotNull(property);
|
||||
@@ -79,8 +76,7 @@ interface CookieElementProcessor {
|
||||
}
|
||||
|
||||
default void verifyCookieNotNull(String key) {
|
||||
blockBuilder().addLineWithEnding(
|
||||
comparisonBuilder().assertThatIsNotNull(cookieKey(key)));
|
||||
blockBuilder().addLineWithEnding(comparisonBuilder().assertThatIsNotNull(cookieKey(key)));
|
||||
}
|
||||
|
||||
String cookieKey(String key);
|
||||
|
||||
@@ -24,8 +24,7 @@ class CustomImports implements Imports {
|
||||
|
||||
private final GeneratedClassMetaData generatedClassMetaData;
|
||||
|
||||
CustomImports(BlockBuilder blockBuilder,
|
||||
GeneratedClassMetaData generatedClassMetaData) {
|
||||
CustomImports(BlockBuilder blockBuilder, GeneratedClassMetaData generatedClassMetaData) {
|
||||
this.blockBuilder = blockBuilder;
|
||||
this.generatedClassMetaData = generatedClassMetaData;
|
||||
}
|
||||
|
||||
@@ -24,8 +24,7 @@ class CustomStaticImports implements Imports {
|
||||
|
||||
private final GeneratedClassMetaData generatedClassMetaData;
|
||||
|
||||
CustomStaticImports(BlockBuilder blockBuilder,
|
||||
GeneratedClassMetaData generatedClassMetaData) {
|
||||
CustomStaticImports(BlockBuilder blockBuilder, GeneratedClassMetaData generatedClassMetaData) {
|
||||
this.blockBuilder = blockBuilder;
|
||||
this.generatedClassMetaData = generatedClassMetaData;
|
||||
}
|
||||
@@ -40,8 +39,7 @@ class CustomStaticImports implements Imports {
|
||||
@Override
|
||||
public boolean accept() {
|
||||
return this.generatedClassMetaData.configProperties.getStaticImports() != null
|
||||
&& this.generatedClassMetaData.configProperties
|
||||
.getStaticImports().length > 0;
|
||||
&& this.generatedClassMetaData.configProperties.getStaticImports().length > 0;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -22,8 +22,7 @@ interface DefaultClassMetadata extends ClassMetaData, DefaultBaseClassProvider {
|
||||
|
||||
@Override
|
||||
default ClassMetaData packageDefinition() {
|
||||
blockBuilder().addLineWithEnding(
|
||||
"package " + generatedClassMetaData().generatedClassData.classPackage);
|
||||
blockBuilder().addLineWithEnding("package " + generatedClassMetaData().generatedClassData.classPackage);
|
||||
return this;
|
||||
}
|
||||
|
||||
@@ -35,8 +34,7 @@ interface DefaultClassMetadata extends ClassMetaData, DefaultBaseClassProvider {
|
||||
|
||||
@Override
|
||||
default ClassMetaData className() {
|
||||
String className = capitalize(
|
||||
generatedClassMetaData().generatedClassData.className);
|
||||
String className = capitalize(generatedClassMetaData().generatedClassData.className);
|
||||
blockBuilder().addAtTheEnd(className);
|
||||
return this;
|
||||
}
|
||||
|
||||
@@ -26,8 +26,7 @@ class DefaultImports implements Imports, DefaultBaseClassProvider {
|
||||
|
||||
private final BaseClassProvider baseClassProvider;
|
||||
|
||||
DefaultImports(BlockBuilder blockBuilder,
|
||||
GeneratedClassMetaData generatedClassMetaData) {
|
||||
DefaultImports(BlockBuilder blockBuilder, GeneratedClassMetaData generatedClassMetaData) {
|
||||
this.blockBuilder = blockBuilder;
|
||||
this.generatedClassMetaData = generatedClassMetaData;
|
||||
this.baseClassProvider = new BaseClassProvider();
|
||||
|
||||
@@ -26,27 +26,23 @@ class DefaultJsonStaticImports implements Imports {
|
||||
|
||||
private final GeneratedClassMetaData generatedClassMetaData;
|
||||
|
||||
private static final String[] IMPORTS = {
|
||||
"com.toomuchcoding.jsonassert.JsonAssertion.assertThatJson" };
|
||||
private static final String[] IMPORTS = { "com.toomuchcoding.jsonassert.JsonAssertion.assertThatJson" };
|
||||
|
||||
DefaultJsonStaticImports(BlockBuilder blockBuilder,
|
||||
GeneratedClassMetaData generatedClassMetaData) {
|
||||
DefaultJsonStaticImports(BlockBuilder blockBuilder, GeneratedClassMetaData generatedClassMetaData) {
|
||||
this.blockBuilder = blockBuilder;
|
||||
this.generatedClassMetaData = generatedClassMetaData;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Imports call() {
|
||||
Arrays.stream(IMPORTS)
|
||||
.forEach(s -> this.blockBuilder.addLineWithEnding("import static " + s));
|
||||
Arrays.stream(IMPORTS).forEach(s -> this.blockBuilder.addLineWithEnding("import static " + s));
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean accept() {
|
||||
return this.generatedClassMetaData.listOfFiles.stream()
|
||||
.anyMatch(metadata -> metadata.getConvertedContractWithMetadata().stream()
|
||||
.anyMatch(SingleContractMetadata::isJson));
|
||||
return this.generatedClassMetaData.listOfFiles.stream().anyMatch(metadata -> metadata
|
||||
.getConvertedContractWithMetadata().stream().anyMatch(SingleContractMetadata::isJson));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -32,8 +32,7 @@ class DefaultStaticImports implements Imports {
|
||||
|
||||
@Override
|
||||
public Imports call() {
|
||||
Arrays.stream(IMPORTS)
|
||||
.forEach(s -> this.blockBuilder.addLineWithEnding("import static " + s));
|
||||
Arrays.stream(IMPORTS).forEach(s -> this.blockBuilder.addLineWithEnding("import static " + s));
|
||||
return this;
|
||||
}
|
||||
|
||||
|
||||
@@ -27,31 +27,26 @@ class ExplicitRestAssuredImports implements Imports, RestAssuredVerifier {
|
||||
private final GeneratedClassMetaData generatedClassMetaData;
|
||||
|
||||
private static final String[] REST_ASSURED_2_IMPORTS = {
|
||||
"com.jayway.restassured.specification.RequestSpecification",
|
||||
"com.jayway.restassured.response.Response" };
|
||||
"com.jayway.restassured.specification.RequestSpecification", "com.jayway.restassured.response.Response" };
|
||||
|
||||
private static final String[] REST_ASSURED_3_IMPORTS = {
|
||||
"io.restassured.specification.RequestSpecification",
|
||||
private static final String[] REST_ASSURED_3_IMPORTS = { "io.restassured.specification.RequestSpecification",
|
||||
"io.restassured.response.Response" };
|
||||
|
||||
ExplicitRestAssuredImports(BlockBuilder blockBuilder,
|
||||
GeneratedClassMetaData generatedClassMetaData) {
|
||||
ExplicitRestAssuredImports(BlockBuilder blockBuilder, GeneratedClassMetaData generatedClassMetaData) {
|
||||
this.blockBuilder = blockBuilder;
|
||||
this.generatedClassMetaData = generatedClassMetaData;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Imports call() {
|
||||
Arrays.stream(
|
||||
isRestAssured2Present() ? REST_ASSURED_2_IMPORTS : REST_ASSURED_3_IMPORTS)
|
||||
Arrays.stream(isRestAssured2Present() ? REST_ASSURED_2_IMPORTS : REST_ASSURED_3_IMPORTS)
|
||||
.forEach(s -> this.blockBuilder.addLineWithEnding("import " + s));
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean accept() {
|
||||
return this.generatedClassMetaData.configProperties
|
||||
.getTestMode() == TestMode.EXPLICIT
|
||||
return this.generatedClassMetaData.configProperties.getTestMode() == TestMode.EXPLICIT
|
||||
&& this.generatedClassMetaData.isAnyHttp();
|
||||
}
|
||||
|
||||
|
||||
@@ -26,30 +26,25 @@ class ExplicitRestAssuredStaticImports implements Imports, RestAssuredVerifier {
|
||||
|
||||
private final GeneratedClassMetaData generatedClassMetaData;
|
||||
|
||||
private static final String[] REST_ASSURED_2_IMPORTS = {
|
||||
"com.jayway.restassured.RestAssured.*" };
|
||||
private static final String[] REST_ASSURED_2_IMPORTS = { "com.jayway.restassured.RestAssured.*" };
|
||||
|
||||
private static final String[] REST_ASSURED_3_IMPORTS = {
|
||||
"io.restassured.RestAssured.*" };
|
||||
private static final String[] REST_ASSURED_3_IMPORTS = { "io.restassured.RestAssured.*" };
|
||||
|
||||
ExplicitRestAssuredStaticImports(BlockBuilder blockBuilder,
|
||||
GeneratedClassMetaData generatedClassMetaData) {
|
||||
ExplicitRestAssuredStaticImports(BlockBuilder blockBuilder, GeneratedClassMetaData generatedClassMetaData) {
|
||||
this.blockBuilder = blockBuilder;
|
||||
this.generatedClassMetaData = generatedClassMetaData;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Imports call() {
|
||||
Arrays.stream(
|
||||
isRestAssured2Present() ? REST_ASSURED_2_IMPORTS : REST_ASSURED_3_IMPORTS)
|
||||
Arrays.stream(isRestAssured2Present() ? REST_ASSURED_2_IMPORTS : REST_ASSURED_3_IMPORTS)
|
||||
.forEach(s -> this.blockBuilder.addLineWithEnding("import static " + s));
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean accept() {
|
||||
return this.generatedClassMetaData.configProperties
|
||||
.getTestMode() == TestMode.EXPLICIT
|
||||
return this.generatedClassMetaData.configProperties.getTestMode() == TestMode.EXPLICIT
|
||||
&& this.generatedClassMetaData.isAnyHttp();
|
||||
}
|
||||
|
||||
|
||||
@@ -30,17 +30,14 @@ public class GeneratedClassDataForMethod {
|
||||
|
||||
private final String methodName;
|
||||
|
||||
public GeneratedClassDataForMethod(
|
||||
SingleTestGenerator.GeneratedClassData generatedClassData,
|
||||
String methodName) {
|
||||
public GeneratedClassDataForMethod(SingleTestGenerator.GeneratedClassData generatedClassData, String methodName) {
|
||||
this.generatedClassData = generatedClassData;
|
||||
this.methodName = methodName;
|
||||
}
|
||||
|
||||
private SingleTestGenerator.GeneratedClassData assertClassData() {
|
||||
if (this.generatedClassData == null) {
|
||||
throw new IllegalStateException(
|
||||
"No metadata was found for the generated test class");
|
||||
throw new IllegalStateException("No metadata was found for the generated test class");
|
||||
}
|
||||
return this.generatedClassData;
|
||||
}
|
||||
|
||||
@@ -40,10 +40,8 @@ class GeneratedClassMetaData {
|
||||
|
||||
final SingleTestGenerator.GeneratedClassData generatedClassData;
|
||||
|
||||
GeneratedClassMetaData(ContractVerifierConfigProperties configProperties,
|
||||
Collection<ContractMetadata> listOfFiles,
|
||||
String includedDirectoryRelativePath,
|
||||
SingleTestGenerator.GeneratedClassData generatedClassData) {
|
||||
GeneratedClassMetaData(ContractVerifierConfigProperties configProperties, Collection<ContractMetadata> listOfFiles,
|
||||
String includedDirectoryRelativePath, SingleTestGenerator.GeneratedClassData generatedClassData) {
|
||||
this.configProperties = configProperties;
|
||||
this.listOfFiles = listOfFiles;
|
||||
this.includedDirectoryRelativePath = includedDirectoryRelativePath;
|
||||
@@ -51,34 +49,28 @@ class GeneratedClassMetaData {
|
||||
}
|
||||
|
||||
Collection<SingleContractMetadata> toSingleContractMetadata() {
|
||||
return this.listOfFiles.stream()
|
||||
.flatMap(metadata -> metadata.getConvertedContractWithMetadata().stream())
|
||||
return this.listOfFiles.stream().flatMap(metadata -> metadata.getConvertedContractWithMetadata().stream())
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
boolean isAnyJson() {
|
||||
return toSingleContractMetadata().stream()
|
||||
.anyMatch(SingleContractMetadata::isJson);
|
||||
return toSingleContractMetadata().stream().anyMatch(SingleContractMetadata::isJson);
|
||||
}
|
||||
|
||||
boolean isAnyIgnored() {
|
||||
return toSingleContractMetadata().stream()
|
||||
.anyMatch(SingleContractMetadata::isIgnored);
|
||||
return toSingleContractMetadata().stream().anyMatch(SingleContractMetadata::isIgnored);
|
||||
}
|
||||
|
||||
boolean isAnyXml() {
|
||||
return toSingleContractMetadata().stream()
|
||||
.anyMatch(SingleContractMetadata::isXml);
|
||||
return toSingleContractMetadata().stream().anyMatch(SingleContractMetadata::isXml);
|
||||
}
|
||||
|
||||
boolean isAnyHttp() {
|
||||
return toSingleContractMetadata().stream()
|
||||
.anyMatch(SingleContractMetadata::isHttp);
|
||||
return toSingleContractMetadata().stream().anyMatch(SingleContractMetadata::isHttp);
|
||||
}
|
||||
|
||||
boolean isAnyMessaging() {
|
||||
return toSingleContractMetadata().stream()
|
||||
.anyMatch(SingleContractMetadata::isMessaging);
|
||||
return toSingleContractMetadata().stream().anyMatch(SingleContractMetadata::isMessaging);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -45,14 +45,12 @@ class GeneratedTestClassBuilder {
|
||||
|
||||
final GeneratedClassMetaData generatedClassMetaData;
|
||||
|
||||
private GeneratedTestClassBuilder(BlockBuilder blockBuilder,
|
||||
GeneratedClassMetaData generatedClassMetaData) {
|
||||
private GeneratedTestClassBuilder(BlockBuilder blockBuilder, GeneratedClassMetaData generatedClassMetaData) {
|
||||
this.blockBuilder = blockBuilder;
|
||||
this.generatedClassMetaData = generatedClassMetaData;
|
||||
}
|
||||
|
||||
static GeneratedTestClassBuilder builder(BlockBuilder blockBuilder,
|
||||
GeneratedClassMetaData generatedClassMetaData) {
|
||||
static GeneratedTestClassBuilder builder(BlockBuilder blockBuilder, GeneratedClassMetaData generatedClassMetaData) {
|
||||
return new GeneratedTestClassBuilder(blockBuilder, generatedClassMetaData);
|
||||
}
|
||||
|
||||
@@ -128,9 +126,8 @@ class GeneratedTestClassBuilder {
|
||||
*/
|
||||
GeneratedTestClass build() {
|
||||
// picks a matching class meta data
|
||||
ClassMetaData classMetaData = this.metaData.stream().filter(Acceptor::accept)
|
||||
.findFirst().orElseThrow(() -> new IllegalStateException(
|
||||
"There is no matching class meta data"));
|
||||
ClassMetaData classMetaData = this.metaData.stream().filter(Acceptor::accept).findFirst()
|
||||
.orElseThrow(() -> new IllegalStateException("There is no matching class meta data"));
|
||||
classMetaData.setupLineEnding().setupLabelPrefix()
|
||||
// package com.example
|
||||
.packageDefinition();
|
||||
@@ -168,10 +165,8 @@ class GeneratedTestClassBuilder {
|
||||
visit(list, false, false);
|
||||
}
|
||||
|
||||
private void visit(List<? extends Visitor> list, boolean addEnding,
|
||||
boolean separated) {
|
||||
List<Visitor> elements = list.stream().filter(Acceptor::accept)
|
||||
.collect(Collectors.toList());
|
||||
private void visit(List<? extends Visitor> list, boolean addEnding, boolean separated) {
|
||||
List<Visitor> elements = list.stream().filter(Acceptor::accept).collect(Collectors.toList());
|
||||
elements.forEach(OurCallable::call);
|
||||
if (addEnding) {
|
||||
this.blockBuilder.addEndingIfNotPresent();
|
||||
|
||||
@@ -29,12 +29,12 @@ class GenericBinaryBodyThen implements Then {
|
||||
|
||||
private final ComparisonBuilder comparisonBuilder;
|
||||
|
||||
GenericBinaryBodyThen(BlockBuilder blockBuilder, GeneratedClassMetaData metaData,
|
||||
BodyParser bodyParser, ComparisonBuilder comparisonBuilder) {
|
||||
GenericBinaryBodyThen(BlockBuilder blockBuilder, GeneratedClassMetaData metaData, BodyParser bodyParser,
|
||||
ComparisonBuilder comparisonBuilder) {
|
||||
this.blockBuilder = blockBuilder;
|
||||
this.comparisonBuilder = comparisonBuilder;
|
||||
this.bodyAssertionLineCreator = new BodyAssertionLineCreator(blockBuilder,
|
||||
metaData, bodyParser.byteArrayString(), this.comparisonBuilder);
|
||||
this.bodyAssertionLineCreator = new BodyAssertionLineCreator(blockBuilder, metaData,
|
||||
bodyParser.byteArrayString(), this.comparisonBuilder);
|
||||
this.bodyParser = bodyParser;
|
||||
}
|
||||
|
||||
@@ -45,10 +45,8 @@ class GenericBinaryBodyThen implements Then {
|
||||
return this;
|
||||
}
|
||||
|
||||
private void byteResponseBodyCheck(SingleContractMetadata metadata,
|
||||
FromFileProperty convertedResponseBody) {
|
||||
this.bodyAssertionLineCreator.appendBodyAssertionLine(metadata, "",
|
||||
convertedResponseBody);
|
||||
private void byteResponseBodyCheck(SingleContractMetadata metadata, FromFileProperty convertedResponseBody) {
|
||||
this.bodyAssertionLineCreator.appendBodyAssertionLine(metadata, "", convertedResponseBody);
|
||||
this.blockBuilder.addEndingIfNotPresent();
|
||||
}
|
||||
|
||||
|
||||
@@ -36,20 +36,17 @@ class GenericHttpBodyThen implements Then, BodyMethodVisitor {
|
||||
|
||||
private final List<Then> thens = new LinkedList<>();
|
||||
|
||||
GenericHttpBodyThen(BlockBuilder blockBuilder, GeneratedClassMetaData metaData,
|
||||
BodyParser bodyParser, ComparisonBuilder comparisonBuilder) {
|
||||
GenericHttpBodyThen(BlockBuilder blockBuilder, GeneratedClassMetaData metaData, BodyParser bodyParser,
|
||||
ComparisonBuilder comparisonBuilder) {
|
||||
this.blockBuilder = blockBuilder;
|
||||
this.bodyParser = bodyParser;
|
||||
this.comparisonBuilder = comparisonBuilder;
|
||||
this.templateProcessor = new HandlebarsTemplateProcessor();
|
||||
this.thens.addAll(Arrays.asList(
|
||||
new GenericBinaryBodyThen(blockBuilder, metaData, this.bodyParser,
|
||||
comparisonBuilder),
|
||||
new GenericTextBodyThen(blockBuilder, metaData, this.bodyParser,
|
||||
this.comparisonBuilder),
|
||||
new GenericJsonBodyThen(blockBuilder, metaData, this.bodyParser,
|
||||
this.comparisonBuilder),
|
||||
new GenericXmlBodyThen(blockBuilder, this.bodyParser)));
|
||||
this.thens.addAll(
|
||||
Arrays.asList(new GenericBinaryBodyThen(blockBuilder, metaData, this.bodyParser, comparisonBuilder),
|
||||
new GenericTextBodyThen(blockBuilder, metaData, this.bodyParser, this.comparisonBuilder),
|
||||
new GenericJsonBodyThen(blockBuilder, metaData, this.bodyParser, this.comparisonBuilder),
|
||||
new GenericXmlBodyThen(blockBuilder, this.bodyParser)));
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -57,8 +54,7 @@ class GenericHttpBodyThen implements Then, BodyMethodVisitor {
|
||||
endBodyBlock(this.blockBuilder);
|
||||
this.blockBuilder.addEmptyLine();
|
||||
startBodyBlock(this.blockBuilder, "and:");
|
||||
this.thens.stream().filter(then -> then.accept(metadata))
|
||||
.forEach(then -> then.apply(metadata));
|
||||
this.thens.stream().filter(then -> then.accept(metadata)).forEach(then -> then.apply(metadata));
|
||||
return this;
|
||||
}
|
||||
|
||||
|
||||
@@ -56,13 +56,13 @@ class GenericJsonBodyThen implements Then {
|
||||
|
||||
private final ComparisonBuilder comparisonBuilder;
|
||||
|
||||
GenericJsonBodyThen(BlockBuilder blockBuilder, GeneratedClassMetaData metaData,
|
||||
BodyParser bodyParser, ComparisonBuilder comparisonBuilder) {
|
||||
GenericJsonBodyThen(BlockBuilder blockBuilder, GeneratedClassMetaData metaData, BodyParser bodyParser,
|
||||
ComparisonBuilder comparisonBuilder) {
|
||||
this.blockBuilder = blockBuilder;
|
||||
this.bodyParser = bodyParser;
|
||||
this.comparisonBuilder = comparisonBuilder;
|
||||
this.bodyAssertionLineCreator = new BodyAssertionLineCreator(blockBuilder,
|
||||
metaData, this.bodyParser.byteArrayString(), this.comparisonBuilder);
|
||||
this.bodyAssertionLineCreator = new BodyAssertionLineCreator(blockBuilder, metaData,
|
||||
this.bodyParser.byteArrayString(), this.comparisonBuilder);
|
||||
this.generatedClassMetaData = metaData;
|
||||
this.templateProcessor = new HandlebarsTemplateProcessor();
|
||||
this.contractTemplate = new HandlebarsTemplateProcessor();
|
||||
@@ -74,37 +74,28 @@ class GenericJsonBodyThen implements Then {
|
||||
Object convertedResponseBody = this.bodyParser.convertResponseBody(metadata);
|
||||
ContentType contentType = metadata.getOutputTestContentType();
|
||||
if (TEXT != contentType && FORM != contentType && DEFINED != contentType) {
|
||||
boolean dontParseStrings = contentType == JSON
|
||||
&& convertedResponseBody instanceof Map;
|
||||
Function parsingClosure = dontParseStrings ? Function.identity()
|
||||
: MapConverter.JSON_PARSING_FUNCTION;
|
||||
convertedResponseBody = MapConverter.getTestSideValues(convertedResponseBody,
|
||||
parsingClosure);
|
||||
boolean dontParseStrings = contentType == JSON && convertedResponseBody instanceof Map;
|
||||
Function parsingClosure = dontParseStrings ? Function.identity() : MapConverter.JSON_PARSING_FUNCTION;
|
||||
convertedResponseBody = MapConverter.getTestSideValues(convertedResponseBody, parsingClosure);
|
||||
}
|
||||
else {
|
||||
convertedResponseBody = StringEscapeUtils
|
||||
.escapeJava(convertedResponseBody.toString());
|
||||
convertedResponseBody = StringEscapeUtils.escapeJava(convertedResponseBody.toString());
|
||||
}
|
||||
addJsonBodyVerification(metadata, convertedResponseBody, bodyMatchers);
|
||||
return this;
|
||||
}
|
||||
|
||||
private void addJsonBodyVerification(SingleContractMetadata contractMetadata,
|
||||
Object responseBody, BodyMatchers bodyMatchers) {
|
||||
private void addJsonBodyVerification(SingleContractMetadata contractMetadata, Object responseBody,
|
||||
BodyMatchers bodyMatchers) {
|
||||
JsonBodyVerificationBuilder jsonBodyVerificationBuilder = new JsonBodyVerificationBuilder(
|
||||
this.generatedClassMetaData.configProperties.getAssertJsonSize(),
|
||||
this.templateProcessor, this.contractTemplate,
|
||||
contractMetadata.getContract(),
|
||||
Optional.of(this.blockBuilder.getLineEnding()),
|
||||
this.generatedClassMetaData.configProperties.getAssertJsonSize(), this.templateProcessor,
|
||||
this.contractTemplate, contractMetadata.getContract(), Optional.of(this.blockBuilder.getLineEnding()),
|
||||
bodyParser::postProcessJsonPath);
|
||||
// TODO: Refactor spock from should comment out bdd blocks
|
||||
Object convertedResponseBody = jsonBodyVerificationBuilder
|
||||
.addJsonResponseBodyCheck(this.blockBuilder, responseBody, bodyMatchers,
|
||||
this.bodyParser.responseAsString(),
|
||||
this.generatedClassMetaData.configProperties
|
||||
.getTestFramework() != TestFramework.SPOCK);
|
||||
if (!(convertedResponseBody instanceof Map
|
||||
|| convertedResponseBody instanceof List
|
||||
Object convertedResponseBody = jsonBodyVerificationBuilder.addJsonResponseBodyCheck(this.blockBuilder,
|
||||
responseBody, bodyMatchers, this.bodyParser.responseAsString(),
|
||||
this.generatedClassMetaData.configProperties.getTestFramework() != TestFramework.SPOCK);
|
||||
if (!(convertedResponseBody instanceof Map || convertedResponseBody instanceof List
|
||||
|| convertedResponseBody instanceof ExecutionProperty)) {
|
||||
simpleTextResponseBodyCheck(contractMetadata, convertedResponseBody);
|
||||
}
|
||||
@@ -130,13 +121,12 @@ class GenericJsonBodyThen implements Then {
|
||||
}
|
||||
|
||||
private void processBodyElement(String property, ExecutionProperty exec) {
|
||||
this.blockBuilder.addLineWithEnding(exec.insertValue(this.bodyParser
|
||||
.postProcessJsonPath("parsedJson.read(\"$" + property + "\")")));
|
||||
this.blockBuilder.addLineWithEnding(
|
||||
exec.insertValue(this.bodyParser.postProcessJsonPath("parsedJson.read(\"$" + property + "\")")));
|
||||
}
|
||||
|
||||
private void processBodyElement(String property, Map.Entry entry) {
|
||||
processBodyElement(property, getMapKeyReferenceString(property, entry),
|
||||
entry.getValue());
|
||||
processBodyElement(property, getMapKeyReferenceString(property, entry), entry.getValue());
|
||||
}
|
||||
|
||||
private void processBodyElement(String property, Map map) {
|
||||
@@ -193,29 +183,23 @@ class GenericJsonBodyThen implements Then {
|
||||
return self.substring(0, index);
|
||||
}
|
||||
|
||||
private void simpleTextResponseBodyCheck(SingleContractMetadata metadata,
|
||||
Object convertedResponseBody) {
|
||||
this.blockBuilder.addLineWithEnding(
|
||||
getSimpleResponseBodyString(this.bodyParser.responseAsString()));
|
||||
this.bodyAssertionLineCreator.appendBodyAssertionLine(metadata, "",
|
||||
convertedResponseBody);
|
||||
private void simpleTextResponseBodyCheck(SingleContractMetadata metadata, Object convertedResponseBody) {
|
||||
this.blockBuilder.addLineWithEnding(getSimpleResponseBodyString(this.bodyParser.responseAsString()));
|
||||
this.bodyAssertionLineCreator.appendBodyAssertionLine(metadata, "", convertedResponseBody);
|
||||
this.blockBuilder.addEndingIfNotPresent();
|
||||
}
|
||||
|
||||
private String getSimpleResponseBodyString(String responseString) {
|
||||
return "String responseBody = " + responseString
|
||||
+ this.blockBuilder.getLineEnding();
|
||||
return "String responseBody = " + responseString + this.blockBuilder.getLineEnding();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean accept(SingleContractMetadata metadata) {
|
||||
ContentType outputTestContentType = metadata.getOutputTestContentType();
|
||||
return JSON == outputTestContentType
|
||||
|| mostLikelyJson(outputTestContentType, metadata);
|
||||
return JSON == outputTestContentType || mostLikelyJson(outputTestContentType, metadata);
|
||||
}
|
||||
|
||||
private boolean mostLikelyJson(ContentType outputTestContentType,
|
||||
SingleContractMetadata metadata) {
|
||||
private boolean mostLikelyJson(ContentType outputTestContentType, SingleContractMetadata metadata) {
|
||||
return DEFINED == outputTestContentType && metadata.evaluatesToJson();
|
||||
}
|
||||
|
||||
|
||||
@@ -33,38 +33,33 @@ class GenericTextBodyThen implements Then {
|
||||
|
||||
private final ComparisonBuilder comparisonBuilder;
|
||||
|
||||
GenericTextBodyThen(BlockBuilder blockBuilder, GeneratedClassMetaData metaData,
|
||||
BodyParser bodyParser, ComparisonBuilder comparisonBuilder) {
|
||||
GenericTextBodyThen(BlockBuilder blockBuilder, GeneratedClassMetaData metaData, BodyParser bodyParser,
|
||||
ComparisonBuilder comparisonBuilder) {
|
||||
this.blockBuilder = blockBuilder;
|
||||
this.bodyParser = bodyParser;
|
||||
this.comparisonBuilder = comparisonBuilder;
|
||||
this.bodyAssertionLineCreator = new BodyAssertionLineCreator(blockBuilder,
|
||||
metaData, this.bodyParser.byteArrayString(), this.comparisonBuilder);
|
||||
this.bodyAssertionLineCreator = new BodyAssertionLineCreator(blockBuilder, metaData,
|
||||
this.bodyParser.byteArrayString(), this.comparisonBuilder);
|
||||
}
|
||||
|
||||
@Override
|
||||
public MethodVisitor<Then> apply(SingleContractMetadata metadata) {
|
||||
Object convertedResponseBody = this.bodyParser.convertResponseBody(metadata);
|
||||
if (convertedResponseBody instanceof String) {
|
||||
convertedResponseBody = this.bodyParser
|
||||
.escapeForSimpleTextAssertion(convertedResponseBody.toString());
|
||||
convertedResponseBody = this.bodyParser.escapeForSimpleTextAssertion(convertedResponseBody.toString());
|
||||
}
|
||||
simpleTextResponseBodyCheck(metadata, convertedResponseBody);
|
||||
return this;
|
||||
}
|
||||
|
||||
private void simpleTextResponseBodyCheck(SingleContractMetadata metadata,
|
||||
Object convertedResponseBody) {
|
||||
this.blockBuilder.addLineWithEnding(
|
||||
getSimpleResponseBodyString(this.bodyParser.responseAsString()));
|
||||
this.bodyAssertionLineCreator.appendBodyAssertionLine(metadata, "",
|
||||
convertedResponseBody);
|
||||
private void simpleTextResponseBodyCheck(SingleContractMetadata metadata, Object convertedResponseBody) {
|
||||
this.blockBuilder.addLineWithEnding(getSimpleResponseBodyString(this.bodyParser.responseAsString()));
|
||||
this.bodyAssertionLineCreator.appendBodyAssertionLine(metadata, "", convertedResponseBody);
|
||||
this.blockBuilder.addEndingIfNotPresent();
|
||||
}
|
||||
|
||||
private String getSimpleResponseBodyString(String responseString) {
|
||||
return "String responseBody = " + responseString
|
||||
+ this.blockBuilder.getLineEnding();
|
||||
return "String responseBody = " + responseString + this.blockBuilder.getLineEnding();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -72,8 +67,7 @@ class GenericTextBodyThen implements Then {
|
||||
ContentType outputTestContentType = metadata.getOutputTestContentType();
|
||||
return outputTestContentType != JSON && outputTestContentType != XML
|
||||
&& this.bodyParser.responseBody(metadata) != null
|
||||
&& !(this.bodyParser.responseBody(metadata)
|
||||
.getServerValue() instanceof FromFileProperty);
|
||||
&& !(this.bodyParser.responseBody(metadata).getServerValue() instanceof FromFileProperty);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -39,11 +39,10 @@ class GenericXmlBodyThen implements Then {
|
||||
public MethodVisitor<Then> apply(SingleContractMetadata metadata) {
|
||||
BodyMatchers bodyMatchers = this.bodyParser.responseBodyMatchers(metadata);
|
||||
Object convertedResponseBody = this.bodyParser.convertResponseBody(metadata);
|
||||
XmlBodyVerificationBuilder xmlBodyVerificationBuilder = new XmlBodyVerificationBuilder(
|
||||
metadata.getContract(), Optional.of(this.blockBuilder.getLineEnding()));
|
||||
xmlBodyVerificationBuilder.addXmlResponseBodyCheck(this.blockBuilder,
|
||||
convertedResponseBody, bodyMatchers, this.bodyParser.responseAsString(),
|
||||
true);
|
||||
XmlBodyVerificationBuilder xmlBodyVerificationBuilder = new XmlBodyVerificationBuilder(metadata.getContract(),
|
||||
Optional.of(this.blockBuilder.getLineEnding()));
|
||||
xmlBodyVerificationBuilder.addXmlResponseBodyCheck(this.blockBuilder, convertedResponseBody, bodyMatchers,
|
||||
this.bodyParser.responseAsString(), true);
|
||||
return this;
|
||||
}
|
||||
|
||||
|
||||
@@ -28,8 +28,7 @@ class GroovyClassMetaData implements ClassMetaData, DefaultClassMetadata {
|
||||
|
||||
private final GeneratedClassMetaData generatedClassMetaData;
|
||||
|
||||
GroovyClassMetaData(BlockBuilder blockBuilder,
|
||||
GeneratedClassMetaData generatedClassMetaData) {
|
||||
GroovyClassMetaData(BlockBuilder blockBuilder, GeneratedClassMetaData generatedClassMetaData) {
|
||||
this.blockBuilder = blockBuilder;
|
||||
this.generatedClassMetaData = generatedClassMetaData;
|
||||
}
|
||||
@@ -46,11 +45,8 @@ class GroovyClassMetaData implements ClassMetaData, DefaultClassMetadata {
|
||||
|
||||
@Override
|
||||
public ClassMetaData suffix() {
|
||||
String suffix = StringUtils.hasText(
|
||||
this.generatedClassMetaData.configProperties.getNameSuffixForTests())
|
||||
? this.generatedClassMetaData.configProperties
|
||||
.getNameSuffixForTests()
|
||||
: "Spec";
|
||||
String suffix = StringUtils.hasText(this.generatedClassMetaData.configProperties.getNameSuffixForTests())
|
||||
? this.generatedClassMetaData.configProperties.getNameSuffixForTests() : "Spec";
|
||||
if (!this.blockBuilder.endsWith(suffix)) {
|
||||
this.blockBuilder.addAtTheEnd(suffix);
|
||||
}
|
||||
@@ -64,8 +60,7 @@ class GroovyClassMetaData implements ClassMetaData, DefaultClassMetadata {
|
||||
|
||||
@Override
|
||||
public ClassMetaData packageDefinition() {
|
||||
this.blockBuilder.addLineWithEnding(
|
||||
"package " + this.generatedClassMetaData.generatedClassData.classPackage);
|
||||
this.blockBuilder.addLineWithEnding("package " + this.generatedClassMetaData.generatedClassData.classPackage);
|
||||
return this;
|
||||
}
|
||||
|
||||
@@ -73,9 +68,9 @@ class GroovyClassMetaData implements ClassMetaData, DefaultClassMetadata {
|
||||
public ClassMetaData parentClass() {
|
||||
ContractVerifierConfigProperties properties = generatedClassMetaData().configProperties;
|
||||
String includedDirectoryRelativePath = generatedClassMetaData().includedDirectoryRelativePath;
|
||||
String baseClass = baseClassProvider().retrieveBaseClass(
|
||||
properties.getBaseClassMappings(), properties.getPackageWithBaseClasses(),
|
||||
properties.getBaseClassForTests(), includedDirectoryRelativePath);
|
||||
String baseClass = baseClassProvider().retrieveBaseClass(properties.getBaseClassMappings(),
|
||||
properties.getPackageWithBaseClasses(), properties.getBaseClassForTests(),
|
||||
includedDirectoryRelativePath);
|
||||
baseClass = StringUtils.hasText(baseClass) ? baseClass : "Specification";
|
||||
int lastIndexOf = baseClass.lastIndexOf(".");
|
||||
if (lastIndexOf > 0) {
|
||||
@@ -102,8 +97,7 @@ class GroovyClassMetaData implements ClassMetaData, DefaultClassMetadata {
|
||||
|
||||
@Override
|
||||
public boolean accept() {
|
||||
return this.generatedClassMetaData.configProperties
|
||||
.getTestFramework() == TestFramework.SPOCK;
|
||||
return this.generatedClassMetaData.configProperties.getTestFramework() == TestFramework.SPOCK;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -40,8 +40,7 @@ interface GroovyComparisonBuilder extends ComparisonBuilder {
|
||||
|
||||
@Override
|
||||
default String isEqualTo(Number number) {
|
||||
String numberString = number instanceof Long ? number.toString() + "L"
|
||||
: number.toString();
|
||||
String numberString = number instanceof Long ? number.toString() + "L" : number.toString();
|
||||
return " == " + numberString;
|
||||
}
|
||||
|
||||
@@ -58,8 +57,7 @@ interface GroovyComparisonBuilder extends ComparisonBuilder {
|
||||
|
||||
@Override
|
||||
default String matchesEscaped(String pattern) {
|
||||
return " ==~ java.util.regex.Pattern.compile("
|
||||
+ bodyParser().quotedEscapedShortText(pattern) + ")";
|
||||
return " ==~ java.util.regex.Pattern.compile(" + bodyParser().quotedEscapedShortText(pattern) + ")";
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -54,15 +54,13 @@ class ImportsBuilder {
|
||||
}
|
||||
|
||||
ImportsBuilder jUnit4() {
|
||||
this.parentBuilder.imports(new JUnit4Imports(builder, metaData),
|
||||
new JUnit4IgnoreImports(builder, metaData),
|
||||
this.parentBuilder.imports(new JUnit4Imports(builder, metaData), new JUnit4IgnoreImports(builder, metaData),
|
||||
new JUnit4OrderImports(builder, metaData));
|
||||
return this;
|
||||
}
|
||||
|
||||
ImportsBuilder jUnit5() {
|
||||
this.parentBuilder.imports(new JUnit5Imports(builder, metaData),
|
||||
new JUnit5IgnoreImports(builder, metaData),
|
||||
this.parentBuilder.imports(new JUnit5Imports(builder, metaData), new JUnit5IgnoreImports(builder, metaData),
|
||||
new JUnit5OrderImports(builder, metaData));
|
||||
return this;
|
||||
}
|
||||
@@ -73,8 +71,7 @@ class ImportsBuilder {
|
||||
}
|
||||
|
||||
ImportsBuilder spock() {
|
||||
this.parentBuilder.imports(new SpockImports(builder, metaData),
|
||||
new SpockIgnoreImports(builder, metaData),
|
||||
this.parentBuilder.imports(new SpockImports(builder, metaData), new SpockIgnoreImports(builder, metaData),
|
||||
new SpockOrderImports(builder, metaData));
|
||||
return this;
|
||||
}
|
||||
@@ -89,8 +86,7 @@ class ImportsBuilder {
|
||||
this.parentBuilder.imports(new MockMvcRestAssuredImports(builder, metaData),
|
||||
new ExplicitRestAssuredImports(builder, metaData),
|
||||
new WebTestClientRestAssuredImports(builder, metaData));
|
||||
this.parentBuilder.staticImports(
|
||||
new MockMvcRestAssuredStaticImports(builder, metaData),
|
||||
this.parentBuilder.staticImports(new MockMvcRestAssuredStaticImports(builder, metaData),
|
||||
new ExplicitRestAssuredStaticImports(builder, metaData),
|
||||
new WebTestClientRestAssured3StaticImports(builder, metaData));
|
||||
return this;
|
||||
|
||||
@@ -25,8 +25,7 @@ class JUnit4IgnoreImports implements Imports {
|
||||
|
||||
private final GeneratedClassMetaData generatedClassMetaData;
|
||||
|
||||
JUnit4IgnoreImports(BlockBuilder blockBuilder,
|
||||
GeneratedClassMetaData generatedClassMetaData) {
|
||||
JUnit4IgnoreImports(BlockBuilder blockBuilder, GeneratedClassMetaData generatedClassMetaData) {
|
||||
this.blockBuilder = blockBuilder;
|
||||
this.generatedClassMetaData = generatedClassMetaData;
|
||||
}
|
||||
@@ -39,12 +38,10 @@ class JUnit4IgnoreImports implements Imports {
|
||||
|
||||
@Override
|
||||
public boolean accept() {
|
||||
return this.generatedClassMetaData.configProperties
|
||||
.getTestFramework() == TestFramework.JUNIT
|
||||
return this.generatedClassMetaData.configProperties.getTestFramework() == TestFramework.JUNIT
|
||||
&& this.generatedClassMetaData.listOfFiles.stream()
|
||||
.anyMatch(metadata -> metadata.isIgnored()
|
||||
|| metadata.getConvertedContractWithMetadata().stream()
|
||||
.anyMatch(SingleContractMetadata::isIgnored));
|
||||
.anyMatch(metadata -> metadata.isIgnored() || metadata.getConvertedContractWithMetadata()
|
||||
.stream().anyMatch(SingleContractMetadata::isIgnored));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -29,23 +29,20 @@ class JUnit4IgnoreMethodAnnotation implements MethodAnnotations {
|
||||
|
||||
private static final String[] ANNOTATIONS = { "@Ignore" };
|
||||
|
||||
JUnit4IgnoreMethodAnnotation(BlockBuilder blockBuilder,
|
||||
GeneratedClassMetaData generatedClassMetaData) {
|
||||
JUnit4IgnoreMethodAnnotation(BlockBuilder blockBuilder, GeneratedClassMetaData generatedClassMetaData) {
|
||||
this.blockBuilder = blockBuilder;
|
||||
this.generatedClassMetaData = generatedClassMetaData;
|
||||
}
|
||||
|
||||
@Override
|
||||
public MethodVisitor<MethodAnnotations> apply(
|
||||
SingleContractMetadata singleContractMetadata) {
|
||||
public MethodVisitor<MethodAnnotations> apply(SingleContractMetadata singleContractMetadata) {
|
||||
Arrays.stream(ANNOTATIONS).forEach(this.blockBuilder::addIndented);
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean accept(SingleContractMetadata singleContractMetadata) {
|
||||
return this.generatedClassMetaData.configProperties
|
||||
.getTestFramework() == TestFramework.JUNIT
|
||||
return this.generatedClassMetaData.configProperties.getTestFramework() == TestFramework.JUNIT
|
||||
&& (singleContractMetadata.getContractMetadata().isIgnored()
|
||||
|| singleContractMetadata.getContract().isIgnored());
|
||||
}
|
||||
|
||||
@@ -28,23 +28,20 @@ class JUnit4Imports implements Imports {
|
||||
|
||||
private static final String[] IMPORTS = { "org.junit.Test", "org.junit.Rule" };
|
||||
|
||||
JUnit4Imports(BlockBuilder blockBuilder,
|
||||
GeneratedClassMetaData generatedClassMetaData) {
|
||||
JUnit4Imports(BlockBuilder blockBuilder, GeneratedClassMetaData generatedClassMetaData) {
|
||||
this.blockBuilder = blockBuilder;
|
||||
this.generatedClassMetaData = generatedClassMetaData;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Imports call() {
|
||||
Arrays.stream(IMPORTS)
|
||||
.forEach(s -> this.blockBuilder.addLineWithEnding("import " + s));
|
||||
Arrays.stream(IMPORTS).forEach(s -> this.blockBuilder.addLineWithEnding("import " + s));
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean accept() {
|
||||
return this.generatedClassMetaData.configProperties
|
||||
.getTestFramework() == TestFramework.JUNIT;
|
||||
return this.generatedClassMetaData.configProperties.getTestFramework() == TestFramework.JUNIT;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -29,21 +29,18 @@ class JUnit4MethodAnnotation implements MethodAnnotations {
|
||||
|
||||
private static final String[] ANNOTATIONS = { "@Test" };
|
||||
|
||||
JUnit4MethodAnnotation(BlockBuilder blockBuilder,
|
||||
GeneratedClassMetaData generatedClassMetaData) {
|
||||
JUnit4MethodAnnotation(BlockBuilder blockBuilder, GeneratedClassMetaData generatedClassMetaData) {
|
||||
this.blockBuilder = blockBuilder;
|
||||
this.generatedClassMetaData = generatedClassMetaData;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean accept(SingleContractMetadata singleContractMetadata) {
|
||||
return this.generatedClassMetaData.configProperties
|
||||
.getTestFramework() == TestFramework.JUNIT;
|
||||
return this.generatedClassMetaData.configProperties.getTestFramework() == TestFramework.JUNIT;
|
||||
}
|
||||
|
||||
@Override
|
||||
public MethodVisitor<MethodAnnotations> apply(
|
||||
SingleContractMetadata singleContractMetadata) {
|
||||
public MethodVisitor<MethodAnnotations> apply(SingleContractMetadata singleContractMetadata) {
|
||||
Arrays.stream(ANNOTATIONS).forEach(this.blockBuilder::addIndented);
|
||||
return this;
|
||||
}
|
||||
|
||||
@@ -26,11 +26,9 @@ class JUnit4OrderClassAnnotation implements ClassAnnotation {
|
||||
|
||||
private final GeneratedClassMetaData generatedClassMetaData;
|
||||
|
||||
private static final String[] ANNOTATIONS = {
|
||||
"@FixMethodOrder(MethodSorters.NAME_ASCENDING)" };
|
||||
private static final String[] ANNOTATIONS = { "@FixMethodOrder(MethodSorters.NAME_ASCENDING)" };
|
||||
|
||||
JUnit4OrderClassAnnotation(BlockBuilder blockBuilder,
|
||||
GeneratedClassMetaData generatedClassMetaData) {
|
||||
JUnit4OrderClassAnnotation(BlockBuilder blockBuilder, GeneratedClassMetaData generatedClassMetaData) {
|
||||
this.blockBuilder = blockBuilder;
|
||||
this.generatedClassMetaData = generatedClassMetaData;
|
||||
}
|
||||
@@ -43,10 +41,8 @@ class JUnit4OrderClassAnnotation implements ClassAnnotation {
|
||||
|
||||
@Override
|
||||
public boolean accept() {
|
||||
return this.generatedClassMetaData.configProperties
|
||||
.getTestFramework() == TestFramework.JUNIT
|
||||
&& this.generatedClassMetaData.listOfFiles.stream()
|
||||
.anyMatch(meta -> meta.getOrder() != null);
|
||||
return this.generatedClassMetaData.configProperties.getTestFramework() == TestFramework.JUNIT
|
||||
&& this.generatedClassMetaData.listOfFiles.stream().anyMatch(meta -> meta.getOrder() != null);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -26,28 +26,23 @@ class JUnit4OrderImports implements Imports {
|
||||
|
||||
private final GeneratedClassMetaData generatedClassMetaData;
|
||||
|
||||
private static final String[] IMPORTS = { "org.junit.FixMethodOrder",
|
||||
"org.junit.runners.MethodSorters" };
|
||||
private static final String[] IMPORTS = { "org.junit.FixMethodOrder", "org.junit.runners.MethodSorters" };
|
||||
|
||||
JUnit4OrderImports(BlockBuilder blockBuilder,
|
||||
GeneratedClassMetaData generatedClassMetaData) {
|
||||
JUnit4OrderImports(BlockBuilder blockBuilder, GeneratedClassMetaData generatedClassMetaData) {
|
||||
this.blockBuilder = blockBuilder;
|
||||
this.generatedClassMetaData = generatedClassMetaData;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Imports call() {
|
||||
Arrays.stream(IMPORTS)
|
||||
.forEach(s -> this.blockBuilder.addLineWithEnding("import " + s));
|
||||
Arrays.stream(IMPORTS).forEach(s -> this.blockBuilder.addLineWithEnding("import " + s));
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean accept() {
|
||||
return this.generatedClassMetaData.configProperties
|
||||
.getTestFramework() == TestFramework.JUNIT
|
||||
&& this.generatedClassMetaData.listOfFiles.stream()
|
||||
.anyMatch(meta -> meta.getOrder() != null);
|
||||
return this.generatedClassMetaData.configProperties.getTestFramework() == TestFramework.JUNIT
|
||||
&& this.generatedClassMetaData.listOfFiles.stream().anyMatch(meta -> meta.getOrder() != null);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -25,8 +25,7 @@ class JUnit5IgnoreImports implements Imports {
|
||||
|
||||
private final GeneratedClassMetaData generatedClassMetaData;
|
||||
|
||||
JUnit5IgnoreImports(BlockBuilder blockBuilder,
|
||||
GeneratedClassMetaData generatedClassMetaData) {
|
||||
JUnit5IgnoreImports(BlockBuilder blockBuilder, GeneratedClassMetaData generatedClassMetaData) {
|
||||
this.blockBuilder = blockBuilder;
|
||||
this.generatedClassMetaData = generatedClassMetaData;
|
||||
}
|
||||
@@ -39,12 +38,10 @@ class JUnit5IgnoreImports implements Imports {
|
||||
|
||||
@Override
|
||||
public boolean accept() {
|
||||
return this.generatedClassMetaData.configProperties
|
||||
.getTestFramework() == TestFramework.JUNIT5
|
||||
return this.generatedClassMetaData.configProperties.getTestFramework() == TestFramework.JUNIT5
|
||||
&& this.generatedClassMetaData.listOfFiles.stream()
|
||||
.anyMatch(metadata -> metadata.isIgnored()
|
||||
|| metadata.getConvertedContractWithMetadata().stream()
|
||||
.anyMatch(SingleContractMetadata::isIgnored));
|
||||
.anyMatch(metadata -> metadata.isIgnored() || metadata.getConvertedContractWithMetadata()
|
||||
.stream().anyMatch(SingleContractMetadata::isIgnored));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -29,23 +29,20 @@ class JUnit5IgnoreMethodAnnotation implements MethodAnnotations {
|
||||
|
||||
private static final String[] ANNOTATIONS = { "@Disabled" };
|
||||
|
||||
JUnit5IgnoreMethodAnnotation(BlockBuilder blockBuilder,
|
||||
GeneratedClassMetaData generatedClassMetaData) {
|
||||
JUnit5IgnoreMethodAnnotation(BlockBuilder blockBuilder, GeneratedClassMetaData generatedClassMetaData) {
|
||||
this.blockBuilder = blockBuilder;
|
||||
this.generatedClassMetaData = generatedClassMetaData;
|
||||
}
|
||||
|
||||
@Override
|
||||
public MethodVisitor<MethodAnnotations> apply(
|
||||
SingleContractMetadata singleContractMetadata) {
|
||||
public MethodVisitor<MethodAnnotations> apply(SingleContractMetadata singleContractMetadata) {
|
||||
Arrays.stream(ANNOTATIONS).forEach(this.blockBuilder::addIndented);
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean accept(SingleContractMetadata singleContractMetadata) {
|
||||
return this.generatedClassMetaData.configProperties
|
||||
.getTestFramework() == TestFramework.JUNIT5
|
||||
return this.generatedClassMetaData.configProperties.getTestFramework() == TestFramework.JUNIT5
|
||||
&& (singleContractMetadata.getContractMetadata().isIgnored()
|
||||
|| singleContractMetadata.getContract().isIgnored());
|
||||
}
|
||||
|
||||
@@ -29,23 +29,20 @@ class JUnit5Imports implements Imports {
|
||||
private static final String[] IMPORTS = { "org.junit.jupiter.api.Test",
|
||||
"org.junit.jupiter.api.extension.ExtendWith" };
|
||||
|
||||
JUnit5Imports(BlockBuilder blockBuilder,
|
||||
GeneratedClassMetaData generatedClassMetaData) {
|
||||
JUnit5Imports(BlockBuilder blockBuilder, GeneratedClassMetaData generatedClassMetaData) {
|
||||
this.blockBuilder = blockBuilder;
|
||||
this.generatedClassMetaData = generatedClassMetaData;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Imports call() {
|
||||
Arrays.stream(IMPORTS)
|
||||
.forEach(s -> this.blockBuilder.addLineWithEnding("import " + s));
|
||||
Arrays.stream(IMPORTS).forEach(s -> this.blockBuilder.addLineWithEnding("import " + s));
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean accept() {
|
||||
return this.generatedClassMetaData.configProperties
|
||||
.getTestFramework() == TestFramework.JUNIT5;
|
||||
return this.generatedClassMetaData.configProperties.getTestFramework() == TestFramework.JUNIT5;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -29,23 +29,20 @@ class JUnit5MethodAnnotation implements MethodAnnotations {
|
||||
|
||||
private static final String[] ANNOTATIONS = { "@Test" };
|
||||
|
||||
JUnit5MethodAnnotation(BlockBuilder blockBuilder,
|
||||
GeneratedClassMetaData generatedClassMetaData) {
|
||||
JUnit5MethodAnnotation(BlockBuilder blockBuilder, GeneratedClassMetaData generatedClassMetaData) {
|
||||
this.blockBuilder = blockBuilder;
|
||||
this.generatedClassMetaData = generatedClassMetaData;
|
||||
}
|
||||
|
||||
@Override
|
||||
public MethodVisitor<MethodAnnotations> apply(
|
||||
SingleContractMetadata singleContractMetadata) {
|
||||
public MethodVisitor<MethodAnnotations> apply(SingleContractMetadata singleContractMetadata) {
|
||||
Arrays.stream(ANNOTATIONS).forEach(this.blockBuilder::addIndented);
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean accept(SingleContractMetadata singleContractMetadata) {
|
||||
return this.generatedClassMetaData.configProperties
|
||||
.getTestFramework() == TestFramework.JUNIT5;
|
||||
return this.generatedClassMetaData.configProperties.getTestFramework() == TestFramework.JUNIT5;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -26,11 +26,9 @@ class JUnit5OrderClassAnnotation implements ClassAnnotation {
|
||||
|
||||
private final GeneratedClassMetaData generatedClassMetaData;
|
||||
|
||||
private static final String[] ANNOTATIONS = {
|
||||
"@TestMethodOrder(MethodOrderer.Alphanumeric.class)" };
|
||||
private static final String[] ANNOTATIONS = { "@TestMethodOrder(MethodOrderer.Alphanumeric.class)" };
|
||||
|
||||
JUnit5OrderClassAnnotation(BlockBuilder blockBuilder,
|
||||
GeneratedClassMetaData generatedClassMetaData) {
|
||||
JUnit5OrderClassAnnotation(BlockBuilder blockBuilder, GeneratedClassMetaData generatedClassMetaData) {
|
||||
this.blockBuilder = blockBuilder;
|
||||
this.generatedClassMetaData = generatedClassMetaData;
|
||||
}
|
||||
@@ -43,10 +41,8 @@ class JUnit5OrderClassAnnotation implements ClassAnnotation {
|
||||
|
||||
@Override
|
||||
public boolean accept() {
|
||||
return this.generatedClassMetaData.configProperties
|
||||
.getTestFramework() == TestFramework.JUNIT5
|
||||
&& this.generatedClassMetaData.listOfFiles.stream()
|
||||
.anyMatch(meta -> meta.getOrder() != null);
|
||||
return this.generatedClassMetaData.configProperties.getTestFramework() == TestFramework.JUNIT5
|
||||
&& this.generatedClassMetaData.listOfFiles.stream().anyMatch(meta -> meta.getOrder() != null);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -29,25 +29,21 @@ class JUnit5OrderImports implements Imports {
|
||||
private static final String[] IMPORTS = { "org.junit.jupiter.api.TestMethodOrder",
|
||||
"org.junit.jupiter.api.MethodOrderer" };
|
||||
|
||||
JUnit5OrderImports(BlockBuilder blockBuilder,
|
||||
GeneratedClassMetaData generatedClassMetaData) {
|
||||
JUnit5OrderImports(BlockBuilder blockBuilder, GeneratedClassMetaData generatedClassMetaData) {
|
||||
this.blockBuilder = blockBuilder;
|
||||
this.generatedClassMetaData = generatedClassMetaData;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Imports call() {
|
||||
Arrays.stream(IMPORTS)
|
||||
.forEach(s -> this.blockBuilder.addLineWithEnding("import " + s));
|
||||
Arrays.stream(IMPORTS).forEach(s -> this.blockBuilder.addLineWithEnding("import " + s));
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean accept() {
|
||||
return this.generatedClassMetaData.configProperties
|
||||
.getTestFramework() == TestFramework.JUNIT5
|
||||
&& this.generatedClassMetaData.listOfFiles.stream()
|
||||
.anyMatch(meta -> meta.getOrder() != null);
|
||||
return this.generatedClassMetaData.configProperties.getTestFramework() == TestFramework.JUNIT5
|
||||
&& this.generatedClassMetaData.listOfFiles.stream().anyMatch(meta -> meta.getOrder() != null);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -27,8 +27,7 @@ class JavaClassMetaData implements ClassMetaData, DefaultClassMetadata {
|
||||
|
||||
private final GeneratedClassMetaData generatedClassMetaData;
|
||||
|
||||
JavaClassMetaData(BlockBuilder blockBuilder,
|
||||
GeneratedClassMetaData generatedClassMetaData) {
|
||||
JavaClassMetaData(BlockBuilder blockBuilder, GeneratedClassMetaData generatedClassMetaData) {
|
||||
this.blockBuilder = blockBuilder;
|
||||
this.generatedClassMetaData = generatedClassMetaData;
|
||||
}
|
||||
@@ -41,11 +40,8 @@ class JavaClassMetaData implements ClassMetaData, DefaultClassMetadata {
|
||||
|
||||
@Override
|
||||
public ClassMetaData suffix() {
|
||||
String suffix = StringUtils.hasText(
|
||||
this.generatedClassMetaData.configProperties.getNameSuffixForTests())
|
||||
? this.generatedClassMetaData.configProperties
|
||||
.getNameSuffixForTests()
|
||||
: "Test";
|
||||
String suffix = StringUtils.hasText(this.generatedClassMetaData.configProperties.getNameSuffixForTests())
|
||||
? this.generatedClassMetaData.configProperties.getNameSuffixForTests() : "Test";
|
||||
if (!this.blockBuilder.endsWith(suffix)) {
|
||||
this.blockBuilder.addAtTheEnd(suffix);
|
||||
}
|
||||
@@ -94,12 +90,9 @@ class JavaClassMetaData implements ClassMetaData, DefaultClassMetadata {
|
||||
|
||||
@Override
|
||||
public boolean accept() {
|
||||
return this.generatedClassMetaData.configProperties
|
||||
.getTestFramework() == TestFramework.JUNIT
|
||||
|| this.generatedClassMetaData.configProperties
|
||||
.getTestFramework() == TestFramework.JUNIT5
|
||||
|| this.generatedClassMetaData.configProperties
|
||||
.getTestFramework() == TestFramework.TESTNG;
|
||||
return this.generatedClassMetaData.configProperties.getTestFramework() == TestFramework.JUNIT
|
||||
|| this.generatedClassMetaData.configProperties.getTestFramework() == TestFramework.JUNIT5
|
||||
|| this.generatedClassMetaData.configProperties.getTestFramework() == TestFramework.TESTNG;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -23,17 +23,15 @@ class JavaJaxRsThen extends JaxRsThen {
|
||||
|
||||
private final GeneratedClassMetaData metaData;
|
||||
|
||||
JavaJaxRsThen(BlockBuilder blockBuilder,
|
||||
GeneratedClassMetaData generatedClassMetaData) {
|
||||
super(blockBuilder, generatedClassMetaData, JaxRsBodyParser.INSTANCE,
|
||||
ComparisonBuilder.JAVA_HTTP_INSTANCE);
|
||||
JavaJaxRsThen(BlockBuilder blockBuilder, GeneratedClassMetaData generatedClassMetaData) {
|
||||
super(blockBuilder, generatedClassMetaData, JaxRsBodyParser.INSTANCE, ComparisonBuilder.JAVA_HTTP_INSTANCE);
|
||||
this.metaData = generatedClassMetaData;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean accept(SingleContractMetadata singleContractMetadata) {
|
||||
return super.accept(singleContractMetadata) && this.metaData.configProperties
|
||||
.getTestFramework() != TestFramework.SPOCK;
|
||||
return super.accept(singleContractMetadata)
|
||||
&& this.metaData.configProperties.getTestFramework() != TestFramework.SPOCK;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -23,16 +23,15 @@ class JavaJaxRsWhen extends JaxRsWhen {
|
||||
|
||||
private final GeneratedClassMetaData metaData;
|
||||
|
||||
JavaJaxRsWhen(BlockBuilder blockBuilder,
|
||||
GeneratedClassMetaData generatedClassMetaData) {
|
||||
JavaJaxRsWhen(BlockBuilder blockBuilder, GeneratedClassMetaData generatedClassMetaData) {
|
||||
super(blockBuilder, generatedClassMetaData, JaxRsBodyParser.INSTANCE);
|
||||
this.metaData = generatedClassMetaData;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean accept(SingleContractMetadata singleContractMetadata) {
|
||||
return super.accept(singleContractMetadata) && this.metaData.configProperties
|
||||
.getTestFramework() != TestFramework.SPOCK;
|
||||
return super.accept(singleContractMetadata)
|
||||
&& this.metaData.configProperties.getTestFramework() != TestFramework.SPOCK;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -23,16 +23,15 @@ class JavaMessagingGiven extends MessagingGiven {
|
||||
|
||||
private final GeneratedClassMetaData generatedClassMetaData;
|
||||
|
||||
JavaMessagingGiven(BlockBuilder blockBuilder,
|
||||
GeneratedClassMetaData generatedClassMetaData) {
|
||||
JavaMessagingGiven(BlockBuilder blockBuilder, GeneratedClassMetaData generatedClassMetaData) {
|
||||
super(blockBuilder, generatedClassMetaData, JavaMessagingBodyParser.INSTANCE);
|
||||
this.generatedClassMetaData = generatedClassMetaData;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean accept(SingleContractMetadata metadata) {
|
||||
return super.accept(metadata) && this.generatedClassMetaData.configProperties
|
||||
.getTestFramework() != TestFramework.SPOCK;
|
||||
return super.accept(metadata)
|
||||
&& this.generatedClassMetaData.configProperties.getTestFramework() != TestFramework.SPOCK;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -23,17 +23,15 @@ class JavaMessagingWithBodyThen extends MessagingWithBodyThen {
|
||||
|
||||
private final GeneratedClassMetaData metaData;
|
||||
|
||||
JavaMessagingWithBodyThen(BlockBuilder blockBuilder,
|
||||
GeneratedClassMetaData generatedClassMetaData) {
|
||||
super(blockBuilder, generatedClassMetaData,
|
||||
ComparisonBuilder.JAVA_MESSAGING_INSTANCE);
|
||||
JavaMessagingWithBodyThen(BlockBuilder blockBuilder, GeneratedClassMetaData generatedClassMetaData) {
|
||||
super(blockBuilder, generatedClassMetaData, ComparisonBuilder.JAVA_MESSAGING_INSTANCE);
|
||||
this.metaData = generatedClassMetaData;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean accept(SingleContractMetadata singleContractMetadata) {
|
||||
return super.accept(singleContractMetadata) && this.metaData.configProperties
|
||||
.getTestFramework() != TestFramework.SPOCK;
|
||||
return super.accept(singleContractMetadata)
|
||||
&& this.metaData.configProperties.getTestFramework() != TestFramework.SPOCK;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -23,16 +23,15 @@ class JavaRestAssuredGiven extends RestAssuredGiven {
|
||||
|
||||
private final GeneratedClassMetaData metaData;
|
||||
|
||||
JavaRestAssuredGiven(BlockBuilder blockBuilder,
|
||||
GeneratedClassMetaData generatedClassMetaData) {
|
||||
JavaRestAssuredGiven(BlockBuilder blockBuilder, GeneratedClassMetaData generatedClassMetaData) {
|
||||
super(blockBuilder, generatedClassMetaData, RestAssuredBodyParser.INSTANCE);
|
||||
this.metaData = generatedClassMetaData;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean accept(SingleContractMetadata singleContractMetadata) {
|
||||
return super.accept(singleContractMetadata) && this.metaData.configProperties
|
||||
.getTestFramework() != TestFramework.SPOCK;
|
||||
return super.accept(singleContractMetadata)
|
||||
&& this.metaData.configProperties.getTestFramework() != TestFramework.SPOCK;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -23,8 +23,7 @@ class JavaRestAssuredThen extends RestAssuredThen {
|
||||
|
||||
private final GeneratedClassMetaData metaData;
|
||||
|
||||
JavaRestAssuredThen(BlockBuilder blockBuilder,
|
||||
GeneratedClassMetaData generatedClassMetaData) {
|
||||
JavaRestAssuredThen(BlockBuilder blockBuilder, GeneratedClassMetaData generatedClassMetaData) {
|
||||
super(blockBuilder, generatedClassMetaData, RestAssuredBodyParser.INSTANCE,
|
||||
ComparisonBuilder.JAVA_HTTP_INSTANCE);
|
||||
this.metaData = generatedClassMetaData;
|
||||
@@ -32,8 +31,8 @@ class JavaRestAssuredThen extends RestAssuredThen {
|
||||
|
||||
@Override
|
||||
public boolean accept(SingleContractMetadata singleContractMetadata) {
|
||||
return super.accept(singleContractMetadata) && this.metaData.configProperties
|
||||
.getTestFramework() != TestFramework.SPOCK;
|
||||
return super.accept(singleContractMetadata)
|
||||
&& this.metaData.configProperties.getTestFramework() != TestFramework.SPOCK;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -23,16 +23,15 @@ class JavaRestAssuredWhen extends RestAssuredWhen {
|
||||
|
||||
private final GeneratedClassMetaData metaData;
|
||||
|
||||
JavaRestAssuredWhen(BlockBuilder blockBuilder,
|
||||
GeneratedClassMetaData generatedClassMetaData) {
|
||||
JavaRestAssuredWhen(BlockBuilder blockBuilder, GeneratedClassMetaData generatedClassMetaData) {
|
||||
super(blockBuilder, generatedClassMetaData, RestAssuredBodyParser.INSTANCE);
|
||||
this.metaData = generatedClassMetaData;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean accept(SingleContractMetadata singleContractMetadata) {
|
||||
return super.accept(singleContractMetadata) && this.metaData.configProperties
|
||||
.getTestFramework() != TestFramework.SPOCK;
|
||||
return super.accept(singleContractMetadata)
|
||||
&& this.metaData.configProperties.getTestFramework() != TestFramework.SPOCK;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -34,32 +34,29 @@ public class JavaTestGenerator implements SingleTestGenerator {
|
||||
private static final Log log = LogFactory.getLog(JavaTestGenerator.class);
|
||||
|
||||
@Override
|
||||
public String buildClass(ContractVerifierConfigProperties properties,
|
||||
Collection<ContractMetadata> listOfFiles, String className,
|
||||
String classPackage, String includedDirectoryRelativePath) {
|
||||
public String buildClass(ContractVerifierConfigProperties properties, Collection<ContractMetadata> listOfFiles,
|
||||
String className, String classPackage, String includedDirectoryRelativePath) {
|
||||
throw new UnsupportedOperationException("Deprecated method");
|
||||
}
|
||||
|
||||
@Override
|
||||
public String buildClass(ContractVerifierConfigProperties properties,
|
||||
Collection<ContractMetadata> listOfFiles,
|
||||
public String buildClass(ContractVerifierConfigProperties properties, Collection<ContractMetadata> listOfFiles,
|
||||
String includedDirectoryRelativePath, GeneratedClassData generatedClassData) {
|
||||
BlockBuilder builder = new BlockBuilder("\t");
|
||||
GeneratedClassMetaData metaData = new GeneratedClassMetaData(properties,
|
||||
listOfFiles, includedDirectoryRelativePath, generatedClassData);
|
||||
GeneratedClassMetaData metaData = new GeneratedClassMetaData(properties, listOfFiles,
|
||||
includedDirectoryRelativePath, generatedClassData);
|
||||
return classAsString(builder, metaData);
|
||||
}
|
||||
|
||||
private String classAsString(BlockBuilder builder, GeneratedClassMetaData metaData) {
|
||||
SingleMethodBuilder methodBuilder = singleMethodBuilder(builder, metaData);
|
||||
ClassBodyBuilder bodyBuilder = classBodyBuilder(builder, metaData, methodBuilder);
|
||||
GeneratedTestClass generatedTestClass = generatedTestClass(builder, metaData,
|
||||
bodyBuilder);
|
||||
GeneratedTestClass generatedTestClass = generatedTestClass(builder, metaData, bodyBuilder);
|
||||
return generatedTestClass.asClassString();
|
||||
}
|
||||
|
||||
GeneratedTestClass generatedTestClass(BlockBuilder builder,
|
||||
GeneratedClassMetaData metaData, ClassBodyBuilder bodyBuilder) {
|
||||
GeneratedTestClass generatedTestClass(BlockBuilder builder, GeneratedClassMetaData metaData,
|
||||
ClassBodyBuilder bodyBuilder) {
|
||||
// @formatter:off
|
||||
return GeneratedTestClassBuilder.builder(builder, metaData)
|
||||
.classBodyBuilder(bodyBuilder)
|
||||
@@ -90,8 +87,8 @@ public class JavaTestGenerator implements SingleTestGenerator {
|
||||
// @formatter:on
|
||||
}
|
||||
|
||||
ClassBodyBuilder classBodyBuilder(BlockBuilder builder,
|
||||
GeneratedClassMetaData metaData, SingleMethodBuilder methodBuilder) {
|
||||
ClassBodyBuilder classBodyBuilder(BlockBuilder builder, GeneratedClassMetaData metaData,
|
||||
SingleMethodBuilder methodBuilder) {
|
||||
// @formatter:off
|
||||
return ClassBodyBuilder.builder(builder, metaData)
|
||||
.field()
|
||||
@@ -101,8 +98,7 @@ public class JavaTestGenerator implements SingleTestGenerator {
|
||||
// @formatter:on
|
||||
}
|
||||
|
||||
SingleMethodBuilder singleMethodBuilder(BlockBuilder builder,
|
||||
GeneratedClassMetaData metaData) {
|
||||
SingleMethodBuilder singleMethodBuilder(BlockBuilder builder, GeneratedClassMetaData metaData) {
|
||||
// @formatter:off
|
||||
return SingleMethodBuilder.builder(builder, metaData)
|
||||
.methodAnnotation()
|
||||
|
||||
@@ -23,8 +23,8 @@ interface JaxRsAcceptor {
|
||||
|
||||
default boolean acceptType(GeneratedClassMetaData generatedClassMetaData,
|
||||
SingleContractMetadata singleContractMetadata) {
|
||||
return generatedClassMetaData.configProperties
|
||||
.getTestMode() == TestMode.JAXRSCLIENT && singleContractMetadata.isHttp();
|
||||
return generatedClassMetaData.configProperties.getTestMode() == TestMode.JAXRSCLIENT
|
||||
&& singleContractMetadata.isHttp();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -26,26 +26,22 @@ class JaxRsImports implements Imports {
|
||||
|
||||
private final GeneratedClassMetaData generatedClassMetaData;
|
||||
|
||||
private static final String[] IMPORTS = { "javax.ws.rs.client.Entity",
|
||||
"javax.ws.rs.core.Response" };
|
||||
private static final String[] IMPORTS = { "javax.ws.rs.client.Entity", "javax.ws.rs.core.Response" };
|
||||
|
||||
JaxRsImports(BlockBuilder blockBuilder,
|
||||
GeneratedClassMetaData generatedClassMetaData) {
|
||||
JaxRsImports(BlockBuilder blockBuilder, GeneratedClassMetaData generatedClassMetaData) {
|
||||
this.blockBuilder = blockBuilder;
|
||||
this.generatedClassMetaData = generatedClassMetaData;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Imports call() {
|
||||
Arrays.stream(IMPORTS)
|
||||
.forEach(s -> this.blockBuilder.addLineWithEnding("import " + s));
|
||||
Arrays.stream(IMPORTS).forEach(s -> this.blockBuilder.addLineWithEnding("import " + s));
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean accept() {
|
||||
return this.generatedClassMetaData.configProperties
|
||||
.getTestMode() == TestMode.JAXRSCLIENT;
|
||||
return this.generatedClassMetaData.configProperties.getTestMode() == TestMode.JAXRSCLIENT;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -47,9 +47,8 @@ class JaxRsRequestCookiesWhen implements When {
|
||||
.filter(cookie -> !cookieOfAbsentType(cookie)).iterator();
|
||||
while (iterator.hasNext()) {
|
||||
Cookie cookie = iterator.next();
|
||||
String value = ".cookie(" + this.bodyParser.quotedShortText(cookie.getKey())
|
||||
+ ", " + this.bodyParser.quotedShortText(MapConverter
|
||||
.getTestSideValuesForNonBody(cookie.getServerValue()))
|
||||
String value = ".cookie(" + this.bodyParser.quotedShortText(cookie.getKey()) + ", "
|
||||
+ this.bodyParser.quotedShortText(MapConverter.getTestSideValuesForNonBody(cookie.getServerValue()))
|
||||
+ ")";
|
||||
if (iterator.hasNext()) {
|
||||
this.blockBuilder.addLine(value);
|
||||
@@ -62,20 +61,18 @@ class JaxRsRequestCookiesWhen implements When {
|
||||
|
||||
private boolean cookieOfAbsentType(Cookie cookie) {
|
||||
return cookie.getServerValue() instanceof MatchingStrategy
|
||||
&& ((MatchingStrategy) cookie.getServerValue())
|
||||
.getType() == MatchingStrategy.Type.ABSENT;
|
||||
&& ((MatchingStrategy) cookie.getServerValue()).getType() == MatchingStrategy.Type.ABSENT;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean accept(SingleContractMetadata metadata) {
|
||||
return metadata.getContract().getRequest().getCookies() != null && !metadata
|
||||
.getContract().getRequest().getCookies().getEntries().isEmpty()
|
||||
return metadata.getContract().getRequest().getCookies() != null
|
||||
&& !metadata.getContract().getRequest().getCookies().getEntries().isEmpty()
|
||||
&& !hasOnlyAbsentCookies(metadata);
|
||||
}
|
||||
|
||||
private boolean hasOnlyAbsentCookies(SingleContractMetadata metadata) {
|
||||
Set<Cookie> entries = metadata.getContract().getRequest().getCookies()
|
||||
.getEntries();
|
||||
Set<Cookie> entries = metadata.getContract().getRequest().getCookies().getEntries();
|
||||
long filteredOut = entries.stream().filter(this::cookieOfAbsentType).count();
|
||||
return filteredOut == entries.size();
|
||||
}
|
||||
|
||||
@@ -44,12 +44,11 @@ class JaxRsRequestHeadersWhen implements When {
|
||||
}
|
||||
|
||||
private void appendHeaders(Request request) {
|
||||
Iterator<Header> iterator = request.getHeaders().getEntries().stream()
|
||||
.filter(header -> !headerToIgnore(header)).iterator();
|
||||
Iterator<Header> iterator = request.getHeaders().getEntries().stream().filter(header -> !headerToIgnore(header))
|
||||
.iterator();
|
||||
while (iterator.hasNext()) {
|
||||
Header header = iterator.next();
|
||||
String text = ".header(\"" + header.getName() + "\", " + headerValue(header)
|
||||
+ ")";
|
||||
String text = ".header(\"" + header.getName() + "\", " + headerValue(header) + ")";
|
||||
if (iterator.hasNext()) {
|
||||
this.blockBuilder.addLine(text);
|
||||
}
|
||||
@@ -64,8 +63,7 @@ class JaxRsRequestHeadersWhen implements When {
|
||||
if (headerServerValue instanceof ExecutionProperty) {
|
||||
return ((ExecutionProperty) headerServerValue).getExecutionCommand();
|
||||
}
|
||||
return this.bodyParser.quotedLongText(
|
||||
MapConverter.getTestSideValuesForNonBody(header.getServerValue()));
|
||||
return this.bodyParser.quotedLongText(MapConverter.getTestSideValuesForNonBody(header.getServerValue()));
|
||||
}
|
||||
|
||||
private boolean headerToIgnore(Header header) {
|
||||
@@ -73,26 +71,23 @@ class JaxRsRequestHeadersWhen implements When {
|
||||
}
|
||||
|
||||
private boolean contentTypeOrAccept(Header header) {
|
||||
return "Content-Type".equalsIgnoreCase(header.getName())
|
||||
|| "Accept".equalsIgnoreCase(header.getName());
|
||||
return "Content-Type".equalsIgnoreCase(header.getName()) || "Accept".equalsIgnoreCase(header.getName());
|
||||
}
|
||||
|
||||
private boolean headerOfAbsentType(Header header) {
|
||||
return header.getServerValue() instanceof MatchingStrategy
|
||||
&& ((MatchingStrategy) header.getServerValue())
|
||||
.getType() == MatchingStrategy.Type.ABSENT;
|
||||
&& ((MatchingStrategy) header.getServerValue()).getType() == MatchingStrategy.Type.ABSENT;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean accept(SingleContractMetadata metadata) {
|
||||
return metadata.getContract().getRequest().getHeaders() != null && !metadata
|
||||
.getContract().getRequest().getHeaders().getEntries().isEmpty()
|
||||
return metadata.getContract().getRequest().getHeaders() != null
|
||||
&& !metadata.getContract().getRequest().getHeaders().getEntries().isEmpty()
|
||||
&& !hasHeaderOnlyContentTypeOrAccept(metadata);
|
||||
}
|
||||
|
||||
private boolean hasHeaderOnlyContentTypeOrAccept(SingleContractMetadata metadata) {
|
||||
Set<Header> entries = metadata.getContract().getRequest().getHeaders()
|
||||
.getEntries();
|
||||
Set<Header> entries = metadata.getContract().getRequest().getHeaders().getEntries();
|
||||
long filteredOut = entries.stream().filter(this::headerToIgnore).count();
|
||||
return filteredOut == entries.size();
|
||||
}
|
||||
|
||||
@@ -45,10 +45,8 @@ class JaxRsRequestMethodWhen implements When, JaxRsBodyParser {
|
||||
ContentType type = metadata.getInputTestContentType();
|
||||
String method = request.getMethod().getServerValue().toString().toLowerCase();
|
||||
if (request.getBody() != null) {
|
||||
String contentType = StringUtils
|
||||
.hasText(metadata.getDefinedInputTestContentType())
|
||||
? metadata.getDefinedInputTestContentType()
|
||||
: type.getMimeType();
|
||||
String contentType = StringUtils.hasText(metadata.getDefinedInputTestContentType())
|
||||
? metadata.getDefinedInputTestContentType() : type.getMimeType();
|
||||
Object body = request.getBody().getServerValue();
|
||||
String value;
|
||||
if (body instanceof ExecutionProperty) {
|
||||
@@ -57,16 +55,14 @@ class JaxRsRequestMethodWhen implements When, JaxRsBodyParser {
|
||||
else if (body instanceof FromFileProperty) {
|
||||
FromFileProperty fileProperty = (FromFileProperty) body;
|
||||
value = fileProperty.isByte()
|
||||
? this.bodyReader.readBytesFromFileString(metadata, fileProperty,
|
||||
CommunicationType.REQUEST)
|
||||
: this.bodyReader.readStringFromFileString(metadata, fileProperty,
|
||||
CommunicationType.REQUEST);
|
||||
? this.bodyReader.readBytesFromFileString(metadata, fileProperty, CommunicationType.REQUEST)
|
||||
: this.bodyReader.readStringFromFileString(metadata, fileProperty, CommunicationType.REQUEST);
|
||||
}
|
||||
else {
|
||||
value = "\"" + requestBodyAsString(metadata) + "\"";
|
||||
}
|
||||
this.blockBuilder.addIndented(".build(\"" + method.toUpperCase()
|
||||
+ "\", entity(" + value + ", \"" + contentType + "\"))");
|
||||
this.blockBuilder.addIndented(
|
||||
".build(\"" + method.toUpperCase() + "\", entity(" + value + ", \"" + contentType + "\"))");
|
||||
}
|
||||
else {
|
||||
this.blockBuilder.addIndented(".build(\"" + method.toUpperCase() + "\")");
|
||||
|
||||
@@ -53,13 +53,12 @@ class JaxRsRequestWhen implements When, JaxRsAcceptor, QueryParamsResolver {
|
||||
if (request.getHeaders() == null || request.getHeaders().getEntries() == null) {
|
||||
return "";
|
||||
}
|
||||
Header foundHeader = request.getHeaders().getEntries().stream()
|
||||
.filter(header -> name.equals(header.getName())).findFirst().orElse(null);
|
||||
Header foundHeader = request.getHeaders().getEntries().stream().filter(header -> name.equals(header.getName()))
|
||||
.findFirst().orElse(null);
|
||||
if (foundHeader == null) {
|
||||
return "";
|
||||
}
|
||||
return MapConverter.getTestSideValuesForNonBody(foundHeader.getServerValue())
|
||||
.toString();
|
||||
return MapConverter.getTestSideValuesForNonBody(foundHeader.getServerValue()).toString();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -29,8 +29,7 @@ class JaxRsResponseCookiesThen implements Then, MockMvcAcceptor, CookieElementPr
|
||||
|
||||
private final BodyParser bodyParser;
|
||||
|
||||
JaxRsResponseCookiesThen(BlockBuilder blockBuilder,
|
||||
GeneratedClassMetaData generatedClassMetaData,
|
||||
JaxRsResponseCookiesThen(BlockBuilder blockBuilder, GeneratedClassMetaData generatedClassMetaData,
|
||||
ComparisonBuilder comparisonBuilder) {
|
||||
this.blockBuilder = blockBuilder;
|
||||
this.generatedClassMetaData = generatedClassMetaData;
|
||||
|
||||
@@ -53,10 +53,8 @@ class JaxRsResponseHeadersThen implements Then {
|
||||
Iterator<Header> iterator = headers.getEntries().iterator();
|
||||
while (iterator.hasNext()) {
|
||||
Header header = iterator.next();
|
||||
String text = processHeaderElement(header.getName(),
|
||||
header.getServerValue() instanceof NotToEscapePattern
|
||||
? header.getServerValue()
|
||||
: MapConverter.getTestSideValues(header.getServerValue()));
|
||||
String text = processHeaderElement(header.getName(), header.getServerValue() instanceof NotToEscapePattern
|
||||
? header.getServerValue() : MapConverter.getTestSideValues(header.getServerValue()));
|
||||
if (iterator.hasNext()) {
|
||||
this.blockBuilder.addLineWithEnding(text);
|
||||
}
|
||||
@@ -68,22 +66,17 @@ class JaxRsResponseHeadersThen implements Then {
|
||||
|
||||
private String processHeaderElement(String property, Object value) {
|
||||
if (value instanceof NotToEscapePattern) {
|
||||
return this.comparisonBuilder
|
||||
.assertThat("response.getHeaderString(\"" + property + "\")")
|
||||
+ this.comparisonBuilder.createComparison(
|
||||
((NotToEscapePattern) value).getServerValue());
|
||||
return this.comparisonBuilder.assertThat("response.getHeaderString(\"" + property + "\")")
|
||||
+ this.comparisonBuilder.createComparison(((NotToEscapePattern) value).getServerValue());
|
||||
}
|
||||
else if (value instanceof Number) {
|
||||
return this.comparisonBuilder
|
||||
.assertThat("response.getHeaderString(\"" + property + "\")", value);
|
||||
return this.comparisonBuilder.assertThat("response.getHeaderString(\"" + property + "\")", value);
|
||||
}
|
||||
else if (value instanceof ExecutionProperty) {
|
||||
return ((ExecutionProperty) value)
|
||||
.insertValue("response.getHeaderString(\"" + property + "\")");
|
||||
return ((ExecutionProperty) value).insertValue("response.getHeaderString(\"" + property + "\")");
|
||||
}
|
||||
else {
|
||||
return this.comparisonBuilder
|
||||
.assertThat("response.getHeaderString(\"" + property + "\")")
|
||||
return this.comparisonBuilder.assertThat("response.getHeaderString(\"" + property + "\")")
|
||||
+ this.comparisonBuilder.createComparison(value);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -28,23 +28,20 @@ class JaxRsStaticImports implements Imports {
|
||||
|
||||
private static final String[] IMPORTS = { "javax.ws.rs.client.Entity.*" };
|
||||
|
||||
JaxRsStaticImports(BlockBuilder blockBuilder,
|
||||
GeneratedClassMetaData generatedClassMetaData) {
|
||||
JaxRsStaticImports(BlockBuilder blockBuilder, GeneratedClassMetaData generatedClassMetaData) {
|
||||
this.blockBuilder = blockBuilder;
|
||||
this.generatedClassMetaData = generatedClassMetaData;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Imports call() {
|
||||
Arrays.stream(IMPORTS)
|
||||
.forEach(s -> this.blockBuilder.addLineWithEnding("import static " + s));
|
||||
Arrays.stream(IMPORTS).forEach(s -> this.blockBuilder.addLineWithEnding("import static " + s));
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean accept() {
|
||||
return this.generatedClassMetaData.configProperties
|
||||
.getTestMode() == TestMode.JAXRSCLIENT;
|
||||
return this.generatedClassMetaData.configProperties.getTestMode() == TestMode.JAXRSCLIENT;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -33,9 +33,8 @@ class JaxRsStatusCodeThen implements Then {
|
||||
@Override
|
||||
public MethodVisitor<Then> apply(SingleContractMetadata metadata) {
|
||||
Response response = metadata.getContract().getResponse();
|
||||
this.blockBuilder
|
||||
.addIndented(this.comparisonBuilder.assertThat("response.getStatus()",
|
||||
response.getStatus().getServerValue()))
|
||||
this.blockBuilder.addIndented(
|
||||
this.comparisonBuilder.assertThat("response.getStatus()", response.getStatus().getServerValue()))
|
||||
.addEndingIfNotPresent();
|
||||
return this;
|
||||
}
|
||||
|
||||
@@ -30,18 +30,14 @@ class JaxRsThen implements Then, BodyMethodVisitor, JaxRsAcceptor {
|
||||
|
||||
private final List<Then> thens = new LinkedList<>();
|
||||
|
||||
JaxRsThen(BlockBuilder blockBuilder, GeneratedClassMetaData generatedClassMetaData,
|
||||
BodyParser bodyParser, ComparisonBuilder comparisonBuilder) {
|
||||
JaxRsThen(BlockBuilder blockBuilder, GeneratedClassMetaData generatedClassMetaData, BodyParser bodyParser,
|
||||
ComparisonBuilder comparisonBuilder) {
|
||||
this.blockBuilder = blockBuilder;
|
||||
this.generatedClassMetaData = generatedClassMetaData;
|
||||
this.thens.addAll(Arrays.asList(
|
||||
new JaxRsStatusCodeThen(this.blockBuilder, comparisonBuilder),
|
||||
new JaxRsResponseHeadersThen(this.blockBuilder, generatedClassMetaData,
|
||||
comparisonBuilder),
|
||||
new JaxRsResponseCookiesThen(this.blockBuilder, generatedClassMetaData,
|
||||
comparisonBuilder),
|
||||
new GenericHttpBodyThen(this.blockBuilder, generatedClassMetaData,
|
||||
bodyParser, comparisonBuilder)));
|
||||
this.thens.addAll(Arrays.asList(new JaxRsStatusCodeThen(this.blockBuilder, comparisonBuilder),
|
||||
new JaxRsResponseHeadersThen(this.blockBuilder, generatedClassMetaData, comparisonBuilder),
|
||||
new JaxRsResponseCookiesThen(this.blockBuilder, generatedClassMetaData, comparisonBuilder),
|
||||
new GenericHttpBodyThen(this.blockBuilder, generatedClassMetaData, bodyParser, comparisonBuilder)));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -50,8 +50,7 @@ class JaxRsUrlPathWhen implements When, JaxRsAcceptor, QueryParamsResolver {
|
||||
appendQueryParams(request.getUrl().getQueryParameters());
|
||||
}
|
||||
else if (request.getUrlPath() != null) {
|
||||
this.blockBuilder
|
||||
.addIndented(".path(" + concreteUrl(request.getUrlPath()) + ")");
|
||||
this.blockBuilder.addIndented(".path(" + concreteUrl(request.getUrlPath()) + ")");
|
||||
appendQueryParams(request.getUrlPath().getQueryParameters());
|
||||
}
|
||||
}
|
||||
@@ -69,12 +68,11 @@ class JaxRsUrlPathWhen implements When, JaxRsAcceptor, QueryParamsResolver {
|
||||
return;
|
||||
}
|
||||
this.blockBuilder.addEmptyLine();
|
||||
Iterator<QueryParameter> iterator = queryParameters.getParameters().stream()
|
||||
.filter(this::allowedQueryParameter).iterator();
|
||||
Iterator<QueryParameter> iterator = queryParameters.getParameters().stream().filter(this::allowedQueryParameter)
|
||||
.iterator();
|
||||
while (iterator.hasNext()) {
|
||||
QueryParameter param = iterator.next();
|
||||
String text = ".queryParam(\"" + param.getName() + "\", \""
|
||||
+ resolveParamValue(param) + "\")";
|
||||
String text = ".queryParam(\"" + param.getName() + "\", \"" + resolveParamValue(param) + "\")";
|
||||
if (iterator.hasNext()) {
|
||||
this.blockBuilder.addLine(text);
|
||||
}
|
||||
|
||||
@@ -32,18 +32,15 @@ class JaxRsWhen implements When, BodyMethodVisitor, JaxRsAcceptor {
|
||||
|
||||
private final List<When> whens = new LinkedList<>();
|
||||
|
||||
JaxRsWhen(BlockBuilder blockBuilder, GeneratedClassMetaData generatedClassMetaData,
|
||||
JaxRsBodyParser bodyParser) {
|
||||
JaxRsWhen(BlockBuilder blockBuilder, GeneratedClassMetaData generatedClassMetaData, JaxRsBodyParser bodyParser) {
|
||||
this.blockBuilder = blockBuilder;
|
||||
this.generatedClassMetaData = generatedClassMetaData;
|
||||
this.bodyParser = bodyParser;
|
||||
this.whens.addAll(Arrays.asList(
|
||||
new JaxRsUrlPathWhen(this.blockBuilder, this.generatedClassMetaData),
|
||||
this.whens.addAll(Arrays.asList(new JaxRsUrlPathWhen(this.blockBuilder, this.generatedClassMetaData),
|
||||
new JaxRsRequestWhen(this.blockBuilder, this.generatedClassMetaData),
|
||||
new JaxRsRequestHeadersWhen(this.blockBuilder, bodyParser),
|
||||
new JaxRsRequestCookiesWhen(this.blockBuilder, bodyParser),
|
||||
new JaxRsRequestMethodWhen(this.blockBuilder,
|
||||
this.generatedClassMetaData),
|
||||
new JaxRsRequestMethodWhen(this.blockBuilder, this.generatedClassMetaData),
|
||||
new JaxRsRequestInvokerWhen(this.blockBuilder)));
|
||||
}
|
||||
|
||||
@@ -55,8 +52,7 @@ class JaxRsWhen implements When, BodyMethodVisitor, JaxRsAcceptor {
|
||||
indentedBodyBlock(this.blockBuilder, this.whens, singleContractMetadata);
|
||||
this.blockBuilder.addEmptyLine().endBlock();
|
||||
if (expectsResponseBody(singleContractMetadata)) {
|
||||
this.blockBuilder.addLineWithEnding(
|
||||
"String responseAsString = " + this.bodyParser.readEntity());
|
||||
this.blockBuilder.addLineWithEnding("String responseAsString = " + this.bodyParser.readEntity());
|
||||
}
|
||||
this.blockBuilder.endBlock();
|
||||
return this;
|
||||
|
||||
@@ -69,9 +69,8 @@ class JsonBodyVerificationBuilder implements BodyMethodGeneration, ClassVerifier
|
||||
// Passing way more arguments here than I would like to, but since we are planning a
|
||||
// major
|
||||
// refactoring of this module for Hoxton release, leaving it this way for now
|
||||
JsonBodyVerificationBuilder(boolean assertJsonSize,
|
||||
TemplateProcessor templateProcessor, ContractTemplate contractTemplate,
|
||||
Contract contract, Optional<String> lineSuffix,
|
||||
JsonBodyVerificationBuilder(boolean assertJsonSize, TemplateProcessor templateProcessor,
|
||||
ContractTemplate contractTemplate, Contract contract, Optional<String> lineSuffix,
|
||||
Function<String, String> postProcessJsonPathCall) {
|
||||
this.assertJsonSize = assertJsonSize;
|
||||
this.templateProcessor = templateProcessor;
|
||||
@@ -81,17 +80,15 @@ class JsonBodyVerificationBuilder implements BodyMethodGeneration, ClassVerifier
|
||||
this.postProcessJsonPathCall = postProcessJsonPathCall;
|
||||
}
|
||||
|
||||
Object addJsonResponseBodyCheck(BlockBuilder bb, Object convertedResponseBody,
|
||||
BodyMatchers bodyMatchers, String responseString,
|
||||
boolean shouldCommentOutBDDBlocks) {
|
||||
Object addJsonResponseBodyCheck(BlockBuilder bb, Object convertedResponseBody, BodyMatchers bodyMatchers,
|
||||
String responseString, boolean shouldCommentOutBDDBlocks) {
|
||||
appendJsonPath(bb, responseString);
|
||||
DocumentContext parsedRequestBody = null;
|
||||
boolean dontParseStrings = convertedResponseBody instanceof Map;
|
||||
Closure parsingClosure = dontParseStrings ? Closure.IDENTITY
|
||||
: MapConverter.JSON_PARSING_CLOSURE;
|
||||
Closure parsingClosure = dontParseStrings ? Closure.IDENTITY : MapConverter.JSON_PARSING_CLOSURE;
|
||||
if (hasRequestBody()) {
|
||||
Object testSideRequestBody = MapConverter
|
||||
.getTestSideValues(contract.getRequest().getBody(), parsingClosure);
|
||||
Object testSideRequestBody = MapConverter.getTestSideValues(contract.getRequest().getBody(),
|
||||
parsingClosure);
|
||||
parsedRequestBody = JsonPath.parse(testSideRequestBody);
|
||||
if (convertedResponseBody instanceof String
|
||||
&& !textContainsJsonPathTemplate(convertedResponseBody.toString())) {
|
||||
@@ -100,22 +97,20 @@ class JsonBodyVerificationBuilder implements BodyMethodGeneration, ClassVerifier
|
||||
}
|
||||
}
|
||||
Object copiedBody = cloneBody(convertedResponseBody);
|
||||
convertedResponseBody = JsonToJsonPathsConverter
|
||||
.removeMatchingJsonPaths(convertedResponseBody, bodyMatchers);
|
||||
convertedResponseBody = JsonToJsonPathsConverter.removeMatchingJsonPaths(convertedResponseBody, bodyMatchers);
|
||||
// remove quotes from fromRequest objects before picking json paths
|
||||
TestSideRequestTemplateModel templateModel = hasRequestBody()
|
||||
? TestSideRequestTemplateModel.from(contract.getRequest()) : null;
|
||||
convertedResponseBody = MapConverter.transformValues(convertedResponseBody,
|
||||
returnReferencedEntries(templateModel), parsingClosure);
|
||||
JsonPaths jsonPaths = new JsonToJsonPathsConverter(assertJsonSize)
|
||||
.transformToJsonPathWithTestsSideValues(convertedResponseBody,
|
||||
parsingClosure);
|
||||
.transformToJsonPathWithTestsSideValues(convertedResponseBody, parsingClosure);
|
||||
DocumentContext finalParsedRequestBody = parsedRequestBody;
|
||||
jsonPaths.forEach(it -> {
|
||||
String method = it.method();
|
||||
method = processIfTemplateIsPresent(method, finalParsedRequestBody);
|
||||
String postProcessedMethod = templateProcessor.containsJsonPathTemplateEntry(
|
||||
method) ? method : postProcessJsonPathCall.apply(method);
|
||||
String postProcessedMethod = templateProcessor.containsJsonPathTemplateEntry(method) ? method
|
||||
: postProcessJsonPathCall.apply(method);
|
||||
bb.addLine("assertThatJson(parsedJson)" + postProcessedMethod);
|
||||
addColonIfRequired(lineSuffix, bb);
|
||||
});
|
||||
@@ -128,25 +123,20 @@ class JsonBodyVerificationBuilder implements BodyMethodGeneration, ClassVerifier
|
||||
}
|
||||
|
||||
private void checkType(BlockBuilder bb, BodyMatcher it, Object elementFromBody) {
|
||||
String method = "assertThat((Object) parsedJson.read("
|
||||
+ quotedAndEscaped(it.path()) + ")).isInstanceOf("
|
||||
String method = "assertThat((Object) parsedJson.read(" + quotedAndEscaped(it.path()) + ")).isInstanceOf("
|
||||
+ classToCheck(elementFromBody).getName() + ".class)";
|
||||
bb.addLine(postProcessJsonPathCall.apply(method));
|
||||
addColonIfRequired(lineSuffix, bb);
|
||||
}
|
||||
|
||||
// we want to make the type more generic (e.g. not ArrayList but List)
|
||||
private String sizeCheckMethod(BodyMatcher bodyMatcher,
|
||||
String quotedAndEscaptedPath) {
|
||||
private String sizeCheckMethod(BodyMatcher bodyMatcher, String quotedAndEscaptedPath) {
|
||||
String prefix = sizeCheckPrefix(bodyMatcher, quotedAndEscaptedPath);
|
||||
if (bodyMatcher.minTypeOccurrence() != null
|
||||
&& bodyMatcher.maxTypeOccurrence() != null) {
|
||||
return prefix + "Between(" + bodyMatcher.minTypeOccurrence() + ", "
|
||||
+ bodyMatcher.maxTypeOccurrence() + ")";
|
||||
if (bodyMatcher.minTypeOccurrence() != null && bodyMatcher.maxTypeOccurrence() != null) {
|
||||
return prefix + "Between(" + bodyMatcher.minTypeOccurrence() + ", " + bodyMatcher.maxTypeOccurrence() + ")";
|
||||
}
|
||||
else if (bodyMatcher.minTypeOccurrence() != null) {
|
||||
return prefix + "GreaterThanOrEqualTo(" + bodyMatcher.minTypeOccurrence()
|
||||
+ ")";
|
||||
return prefix + "GreaterThanOrEqualTo(" + bodyMatcher.minTypeOccurrence() + ")";
|
||||
}
|
||||
else if (bodyMatcher.maxTypeOccurrence() != null) {
|
||||
return prefix + "LessThanOrEqualTo(" + bodyMatcher.maxTypeOccurrence() + ")";
|
||||
@@ -154,42 +144,35 @@ class JsonBodyVerificationBuilder implements BodyMethodGeneration, ClassVerifier
|
||||
return prefix;
|
||||
}
|
||||
|
||||
protected void buildCustomMatchingConditionForEachElement(BlockBuilder bb,
|
||||
String path, String valueAsParam) {
|
||||
String method = "assertThat((java.lang.Iterable) parsedJson.read(" + path
|
||||
+ ", java.util.Collection.class)).as(" + path + ").allElementsMatch("
|
||||
+ valueAsParam + ")";
|
||||
protected void buildCustomMatchingConditionForEachElement(BlockBuilder bb, String path, String valueAsParam) {
|
||||
String method = "assertThat((java.lang.Iterable) parsedJson.read(" + path + ", java.util.Collection.class)).as("
|
||||
+ path + ").allElementsMatch(" + valueAsParam + ")";
|
||||
bb.addLine(postProcessJsonPathCall.apply(method));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void methodForEqualityCheck(BodyMatcher bodyMatcher, BlockBuilder bb,
|
||||
Object copiedBody) {
|
||||
public void methodForEqualityCheck(BodyMatcher bodyMatcher, BlockBuilder bb, Object copiedBody) {
|
||||
String path = quotedAndEscaped(bodyMatcher.path());
|
||||
Object retrievedValue = value(copiedBody, bodyMatcher);
|
||||
retrievedValue = retrievedValue instanceof RegexProperty
|
||||
? ((RegexProperty) retrievedValue).getPattern().pattern()
|
||||
: retrievedValue;
|
||||
String valueAsParam = retrievedValue instanceof String
|
||||
? quotedAndEscaped(retrievedValue.toString())
|
||||
? ((RegexProperty) retrievedValue).getPattern().pattern() : retrievedValue;
|
||||
String valueAsParam = retrievedValue instanceof String ? quotedAndEscaped(retrievedValue.toString())
|
||||
: objectToString(retrievedValue);
|
||||
if (arrayRelated(path) && MatchingType.regexRelated(bodyMatcher.matchingType())) {
|
||||
buildCustomMatchingConditionForEachElement(bb, path, valueAsParam);
|
||||
}
|
||||
else {
|
||||
String comparisonMethod = bodyMatcher.matchingType() == MatchingType.EQUALITY
|
||||
? "isEqualTo" : "matches";
|
||||
String comparisonMethod = bodyMatcher.matchingType() == MatchingType.EQUALITY ? "isEqualTo" : "matches";
|
||||
String classToCastTo = className(retrievedValue) + ".class";
|
||||
String method = "assertThat(parsedJson.read(" + path + ", " + classToCastTo
|
||||
+ "))." + comparisonMethod + "(" + valueAsParam + ")";
|
||||
String method = "assertThat(parsedJson.read(" + path + ", " + classToCastTo + "))." + comparisonMethod + "("
|
||||
+ valueAsParam + ")";
|
||||
bb.addLine(postProcessJsonPathCall.apply(method));
|
||||
}
|
||||
addColonIfRequired(lineSuffix, bb);
|
||||
}
|
||||
|
||||
private String className(Object retrievedValue) {
|
||||
return retrievedValue.getClass().getName().startsWith("java.lang")
|
||||
? retrievedValue.getClass().getSimpleName()
|
||||
return retrievedValue.getClass().getName().startsWith("java.lang") ? retrievedValue.getClass().getSimpleName()
|
||||
: retrievedValue.getClass().getName();
|
||||
}
|
||||
|
||||
@@ -206,8 +189,7 @@ class JsonBodyVerificationBuilder implements BodyMethodGeneration, ClassVerifier
|
||||
return String.valueOf(value);
|
||||
}
|
||||
|
||||
protected String processIfTemplateIsPresent(String method,
|
||||
DocumentContext parsedRequestBody) {
|
||||
protected String processIfTemplateIsPresent(String method, DocumentContext parsedRequestBody) {
|
||||
if (textContainsJsonPathTemplate(method) && hasRequestBody()) {
|
||||
// Unquoting the values of non strings
|
||||
String jsonPathEntry = templateProcessor.jsonPathFromTemplateEntry(method);
|
||||
@@ -218,32 +200,27 @@ class JsonBodyVerificationBuilder implements BodyMethodGeneration, ClassVerifier
|
||||
contractTemplate.escapedOpeningTemplate())
|
||||
.replace(contractTemplate.escapedClosingTemplate() + '"',
|
||||
contractTemplate.escapedClosingTemplate())
|
||||
.replace('"' + contractTemplate.openingTemplate(),
|
||||
contractTemplate.openingTemplate())
|
||||
.replace(contractTemplate.closingTemplate() + '"',
|
||||
contractTemplate.closingTemplate());
|
||||
.replace('"' + contractTemplate.openingTemplate(), contractTemplate.openingTemplate())
|
||||
.replace(contractTemplate.closingTemplate() + '"', contractTemplate.closingTemplate());
|
||||
}
|
||||
}
|
||||
return method;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void methodForCommandExecution(BodyMatcher bodyMatcher, BlockBuilder bb,
|
||||
Object copiedBody) {
|
||||
public void methodForCommandExecution(BodyMatcher bodyMatcher, BlockBuilder bb, Object copiedBody) {
|
||||
String path = quotedAndEscaped(bodyMatcher.path());
|
||||
// assert that path exists
|
||||
retrieveObjectByPath(copiedBody, bodyMatcher.path());
|
||||
ExecutionProperty property = (ExecutionProperty) bodyMatcher.value();
|
||||
bb.addLine(postProcessJsonPathCall
|
||||
.apply(property.insertValue("parsedJson.read(" + path + ")")));
|
||||
bb.addLine(postProcessJsonPathCall.apply(property.insertValue("parsedJson.read(" + path + ")")));
|
||||
addColonIfRequired(lineSuffix, bb);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void methodForNullCheck(BodyMatcher bodyMatcher, BlockBuilder bb) {
|
||||
String quotedAndEscapedPath = quotedAndEscaped(bodyMatcher.path());
|
||||
String method = "assertThat((Object) parsedJson.read(" + quotedAndEscapedPath
|
||||
+ ")).isNull()";
|
||||
String method = "assertThat((Object) parsedJson.read(" + quotedAndEscapedPath + ")).isNull()";
|
||||
bb.addLine(postProcessJsonPathCall.apply(method));
|
||||
addColonIfRequired(lineSuffix, bb);
|
||||
}
|
||||
@@ -253,16 +230,13 @@ class JsonBodyVerificationBuilder implements BodyMethodGeneration, ClassVerifier
|
||||
}
|
||||
|
||||
@Override
|
||||
public void methodForTypeCheck(BodyMatcher bodyMatcher, BlockBuilder bb,
|
||||
Object copiedBody) {
|
||||
public void methodForTypeCheck(BodyMatcher bodyMatcher, BlockBuilder bb, Object copiedBody) {
|
||||
Object elementFromBody = value(copiedBody, bodyMatcher);
|
||||
if (bodyMatcher.minTypeOccurrence() != null
|
||||
|| bodyMatcher.maxTypeOccurrence() != null) {
|
||||
if (bodyMatcher.minTypeOccurrence() != null || bodyMatcher.maxTypeOccurrence() != null) {
|
||||
checkType(bb, bodyMatcher, elementFromBody);
|
||||
String quotedAndEscaptedPath = quotedAndEscaped(bodyMatcher.path());
|
||||
String method = "assertThat((java.lang.Iterable) parsedJson.read("
|
||||
+ quotedAndEscaptedPath + ", java.util.Collection.class))."
|
||||
+ sizeCheckMethod(bodyMatcher, quotedAndEscaptedPath);
|
||||
String method = "assertThat((java.lang.Iterable) parsedJson.read(" + quotedAndEscaptedPath
|
||||
+ ", java.util.Collection.class))." + sizeCheckMethod(bodyMatcher, quotedAndEscaptedPath);
|
||||
bb.addLine(postProcessJsonPathCall.apply(method));
|
||||
addColonIfRequired(lineSuffix, bb);
|
||||
}
|
||||
@@ -272,8 +246,7 @@ class JsonBodyVerificationBuilder implements BodyMethodGeneration, ClassVerifier
|
||||
}
|
||||
|
||||
private static Object value(Object body, BodyMatcher bodyMatcher) {
|
||||
if (bodyMatcher.matchingType() == MatchingType.EQUALITY
|
||||
|| bodyMatcher.value() == null) {
|
||||
if (bodyMatcher.matchingType() == MatchingType.EQUALITY || bodyMatcher.value() == null) {
|
||||
return retrieveObjectByPath(body, bodyMatcher.path());
|
||||
}
|
||||
return bodyMatcher.value();
|
||||
@@ -289,31 +262,27 @@ class JsonBodyVerificationBuilder implements BodyMethodGeneration, ClassVerifier
|
||||
}
|
||||
}
|
||||
|
||||
private Closure<Object> returnReferencedEntries(
|
||||
TestSideRequestTemplateModel templateModel) {
|
||||
private Closure<Object> returnReferencedEntries(TestSideRequestTemplateModel templateModel) {
|
||||
return MapConverter.fromFunction(entry -> {
|
||||
if (!(entry instanceof String) || templateModel == null) {
|
||||
return entry;
|
||||
}
|
||||
String entryAsString = (String) entry;
|
||||
if (this.templateProcessor.containsTemplateEntry(entryAsString)
|
||||
&& !this.templateProcessor
|
||||
.containsJsonPathTemplateEntry(entryAsString)) {
|
||||
&& !this.templateProcessor.containsJsonPathTemplateEntry(entryAsString)) {
|
||||
// TODO: HANDLEBARS LEAKING VIA request.
|
||||
String justEntry = minus(entryAsString,
|
||||
contractTemplate.escapedOpeningTemplate());
|
||||
String justEntry = minus(entryAsString, contractTemplate.escapedOpeningTemplate());
|
||||
justEntry = minus(justEntry, contractTemplate.openingTemplate());
|
||||
justEntry = minus(justEntry, contractTemplate.escapedClosingTemplate());
|
||||
justEntry = minus(justEntry, contractTemplate.closingTemplate());
|
||||
justEntry = minus(justEntry, FROM_REQUEST_PREFIX);
|
||||
if (FROM_REQUEST_BODY.equalsIgnoreCase(justEntry)) {
|
||||
// the body should be transformed by standard mechanism
|
||||
return contractTemplate.escapedOpeningTemplate() + FROM_REQUEST_PREFIX
|
||||
+ "escapedBody" + contractTemplate.escapedClosingTemplate();
|
||||
return contractTemplate.escapedOpeningTemplate() + FROM_REQUEST_PREFIX + "escapedBody"
|
||||
+ contractTemplate.escapedClosingTemplate();
|
||||
}
|
||||
try {
|
||||
Object result = new PropertyUtilsBean().getProperty(templateModel,
|
||||
justEntry);
|
||||
Object result = new PropertyUtilsBean().getProperty(templateModel, justEntry);
|
||||
// Path from the Test model is an object and we'd like to return its
|
||||
// String representation
|
||||
if (FROM_REQUEST_PATH.equals(justEntry)) {
|
||||
@@ -365,12 +334,11 @@ class JsonBodyVerificationBuilder implements BodyMethodGeneration, ClassVerifier
|
||||
return prefix + "Size";
|
||||
}
|
||||
|
||||
private void doBodyMatchingIfPresent(BodyMatchers bodyMatchers, BlockBuilder bb,
|
||||
Object responseBody, boolean shouldCommentOutBDDBlocks) {
|
||||
private void doBodyMatchingIfPresent(BodyMatchers bodyMatchers, BlockBuilder bb, Object responseBody,
|
||||
boolean shouldCommentOutBDDBlocks) {
|
||||
if (bodyMatchers != null && bodyMatchers.hasMatchers()) {
|
||||
bb.addEmptyLine();
|
||||
addBodyMatchingBlock(bodyMatchers.matchers(), bb, responseBody,
|
||||
shouldCommentOutBDDBlocks);
|
||||
addBodyMatchingBlock(bodyMatchers.matchers(), bb, responseBody, shouldCommentOutBDDBlocks);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -26,27 +26,23 @@ class JsonPathImports implements Imports {
|
||||
|
||||
private final GeneratedClassMetaData generatedClassMetaData;
|
||||
|
||||
private static final String[] IMPORTS = { "com.jayway.jsonpath.DocumentContext",
|
||||
"com.jayway.jsonpath.JsonPath" };
|
||||
private static final String[] IMPORTS = { "com.jayway.jsonpath.DocumentContext", "com.jayway.jsonpath.JsonPath" };
|
||||
|
||||
JsonPathImports(BlockBuilder blockBuilder,
|
||||
GeneratedClassMetaData generatedClassMetaData) {
|
||||
JsonPathImports(BlockBuilder blockBuilder, GeneratedClassMetaData generatedClassMetaData) {
|
||||
this.blockBuilder = blockBuilder;
|
||||
this.generatedClassMetaData = generatedClassMetaData;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Imports call() {
|
||||
Arrays.stream(IMPORTS)
|
||||
.forEach(s -> this.blockBuilder.addLineWithEnding("import " + s));
|
||||
Arrays.stream(IMPORTS).forEach(s -> this.blockBuilder.addLineWithEnding("import " + s));
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean accept() {
|
||||
return this.generatedClassMetaData.listOfFiles.stream()
|
||||
.anyMatch(metadata -> metadata.getConvertedContractWithMetadata().stream()
|
||||
.anyMatch(SingleContractMetadata::isJson));
|
||||
return this.generatedClassMetaData.listOfFiles.stream().anyMatch(metadata -> metadata
|
||||
.getConvertedContractWithMetadata().stream().anyMatch(SingleContractMetadata::isJson));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -28,8 +28,8 @@ class MessagingAssertThatThen implements Then {
|
||||
|
||||
@Override
|
||||
public MethodVisitor<Then> apply(SingleContractMetadata metadata) {
|
||||
this.blockBuilder.addLineWithEnding(metadata.getContract().getOutputMessage()
|
||||
.getAssertThat().getExecutionCommand());
|
||||
this.blockBuilder
|
||||
.addLineWithEnding(metadata.getContract().getOutputMessage().getAssertThat().getExecutionCommand());
|
||||
return this;
|
||||
}
|
||||
|
||||
|
||||
@@ -28,8 +28,7 @@ class MessagingAssertThatWhen implements When {
|
||||
|
||||
@Override
|
||||
public MethodVisitor<When> apply(SingleContractMetadata metadata) {
|
||||
this.blockBuilder.addIndented(
|
||||
metadata.getContract().getInput().getAssertThat().getExecutionCommand());
|
||||
this.blockBuilder.addIndented(metadata.getContract().getInput().getAssertThat().getExecutionCommand());
|
||||
return this;
|
||||
}
|
||||
|
||||
|
||||
@@ -29,8 +29,7 @@ class MessagingBodyGiven implements Given, MethodVisitor<Given> {
|
||||
|
||||
private final BodyParser bodyParser;
|
||||
|
||||
MessagingBodyGiven(BlockBuilder blockBuilder, BodyReader bodyReader,
|
||||
BodyParser bodyParser) {
|
||||
MessagingBodyGiven(BlockBuilder blockBuilder, BodyReader bodyReader, BodyParser bodyParser) {
|
||||
this.blockBuilder = blockBuilder;
|
||||
this.bodyReader = bodyReader;
|
||||
this.bodyParser = bodyParser;
|
||||
@@ -50,11 +49,9 @@ class MessagingBodyGiven implements Given, MethodVisitor<Given> {
|
||||
if (bodyValue instanceof FromFileProperty) {
|
||||
FromFileProperty fileProperty = (FromFileProperty) bodyValue;
|
||||
String byteText = fileProperty.isByte()
|
||||
? this.bodyReader.readBytesFromFileString(metadata, fileProperty,
|
||||
CommunicationType.REQUEST)
|
||||
: this.bodyParser.quotedLongText(
|
||||
this.bodyReader.readStringFromFileString(metadata,
|
||||
fileProperty, CommunicationType.REQUEST));
|
||||
? this.bodyReader.readBytesFromFileString(metadata, fileProperty, CommunicationType.REQUEST)
|
||||
: this.bodyParser.quotedLongText(this.bodyReader.readStringFromFileString(metadata, fileProperty,
|
||||
CommunicationType.REQUEST));
|
||||
this.blockBuilder.addIndented(byteText);
|
||||
}
|
||||
else {
|
||||
|
||||
@@ -34,19 +34,15 @@ class MessagingBodyThen implements Then, BodyMethodVisitor {
|
||||
|
||||
private final BodyParser bodyParser;
|
||||
|
||||
MessagingBodyThen(BlockBuilder blockBuilder, GeneratedClassMetaData metaData,
|
||||
ComparisonBuilder comparisonBuilder) {
|
||||
MessagingBodyThen(BlockBuilder blockBuilder, GeneratedClassMetaData metaData, ComparisonBuilder comparisonBuilder) {
|
||||
this.blockBuilder = blockBuilder;
|
||||
this.generatedClassMetaData = metaData;
|
||||
this.comparisonBuilder = comparisonBuilder;
|
||||
this.bodyParser = comparisonBuilder.bodyParser();
|
||||
this.thens.addAll(Arrays.asList(
|
||||
new GenericBinaryBodyThen(blockBuilder, metaData, this.bodyParser,
|
||||
this.comparisonBuilder),
|
||||
new GenericTextBodyThen(blockBuilder, metaData, this.bodyParser,
|
||||
this.comparisonBuilder),
|
||||
new GenericJsonBodyThen(blockBuilder, metaData, this.bodyParser,
|
||||
this.comparisonBuilder),
|
||||
new GenericBinaryBodyThen(blockBuilder, metaData, this.bodyParser, this.comparisonBuilder),
|
||||
new GenericTextBodyThen(blockBuilder, metaData, this.bodyParser, this.comparisonBuilder),
|
||||
new GenericJsonBodyThen(blockBuilder, metaData, this.bodyParser, this.comparisonBuilder),
|
||||
new GenericXmlBodyThen(blockBuilder, this.bodyParser)));
|
||||
}
|
||||
|
||||
@@ -61,8 +57,7 @@ class MessagingBodyThen implements Then, BodyMethodVisitor {
|
||||
|
||||
@Override
|
||||
public boolean accept(SingleContractMetadata singleContractMetadata) {
|
||||
return singleContractMetadata.isMessaging()
|
||||
&& this.bodyParser.responseBody(singleContractMetadata) != null;
|
||||
return singleContractMetadata.isMessaging() && this.bodyParser.responseBody(singleContractMetadata) != null;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -33,11 +33,9 @@ class MessagingBodyWhen implements When {
|
||||
public MethodVisitor<When> apply(SingleContractMetadata metadata) {
|
||||
this.bodyReader.storeContractAsYaml(metadata);
|
||||
this.blockBuilder
|
||||
.addIndented("contractVerifierMessaging.send(inputMessage, \"" + metadata
|
||||
.getContract().getInput().getMessageFrom().getServerValue()
|
||||
+ "\",")
|
||||
.addEmptyLine().indent()
|
||||
.addIndented("contract(this, \"" + metadata.methodName() + ".yml\"))")
|
||||
.addIndented("contractVerifierMessaging.send(inputMessage, \""
|
||||
+ metadata.getContract().getInput().getMessageFrom().getServerValue() + "\",")
|
||||
.addEmptyLine().indent().addIndented("contract(this, \"" + metadata.methodName() + ".yml\"))")
|
||||
.addEndingIfNotPresent().unindent();
|
||||
return this;
|
||||
}
|
||||
|
||||
@@ -26,12 +26,10 @@ class MessagingFields implements Field {
|
||||
|
||||
private final GeneratedClassMetaData generatedClassMetaData;
|
||||
|
||||
private static final String[] FIELDS = {
|
||||
"@Inject ContractVerifierMessaging contractVerifierMessaging",
|
||||
private static final String[] FIELDS = { "@Inject ContractVerifierMessaging contractVerifierMessaging",
|
||||
"@Inject ContractVerifierObjectMapper contractVerifierObjectMapper" };
|
||||
|
||||
MessagingFields(BlockBuilder blockBuilder,
|
||||
GeneratedClassMetaData generatedClassMetaData) {
|
||||
MessagingFields(BlockBuilder blockBuilder, GeneratedClassMetaData generatedClassMetaData) {
|
||||
this.blockBuilder = blockBuilder;
|
||||
this.generatedClassMetaData = generatedClassMetaData;
|
||||
}
|
||||
@@ -44,9 +42,8 @@ class MessagingFields implements Field {
|
||||
|
||||
@Override
|
||||
public boolean accept() {
|
||||
return this.generatedClassMetaData.listOfFiles.stream()
|
||||
.anyMatch(metadata -> metadata.getConvertedContractWithMetadata().stream()
|
||||
.anyMatch(SingleContractMetadata::isMessaging));
|
||||
return this.generatedClassMetaData.listOfFiles.stream().anyMatch(metadata -> metadata
|
||||
.getConvertedContractWithMetadata().stream().anyMatch(SingleContractMetadata::isMessaging));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -30,35 +30,31 @@ class MessagingGiven implements Given, MethodVisitor<Given>, BodyMethodVisitor {
|
||||
|
||||
private final List<Given> givens = new LinkedList<>();
|
||||
|
||||
MessagingGiven(BlockBuilder blockBuilder,
|
||||
GeneratedClassMetaData generatedClassMetaData, BodyParser bodyParser) {
|
||||
MessagingGiven(BlockBuilder blockBuilder, GeneratedClassMetaData generatedClassMetaData, BodyParser bodyParser) {
|
||||
this.blockBuilder = blockBuilder;
|
||||
this.generatedClassMetaData = generatedClassMetaData;
|
||||
this.givens.addAll(Arrays.asList(
|
||||
new MessagingBodyGiven(this.blockBuilder,
|
||||
new BodyReader(this.generatedClassMetaData), bodyParser),
|
||||
new MessagingBodyGiven(this.blockBuilder, new BodyReader(this.generatedClassMetaData), bodyParser),
|
||||
new MessagingHeadersGiven(this.blockBuilder)));
|
||||
}
|
||||
|
||||
@Override
|
||||
public MethodVisitor<Given> apply(SingleContractMetadata metadata) {
|
||||
startBodyBlock(this.blockBuilder, "given:");
|
||||
this.blockBuilder.addIndented(
|
||||
"ContractVerifierMessage inputMessage = contractVerifierMessaging.create(")
|
||||
this.blockBuilder.addIndented("ContractVerifierMessage inputMessage = contractVerifierMessaging.create(")
|
||||
.addEmptyLine().indent();
|
||||
this.givens.stream().filter(given -> given.accept(metadata)).forEach(given -> {
|
||||
given.apply(metadata);
|
||||
this.blockBuilder.addEmptyLine();
|
||||
});
|
||||
this.blockBuilder.unindent().unindent().startBlock().addIndented(")")
|
||||
.addEndingIfNotPresent().addEmptyLine().endBlock();
|
||||
this.blockBuilder.unindent().unindent().startBlock().addIndented(")").addEndingIfNotPresent().addEmptyLine()
|
||||
.endBlock();
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean accept(SingleContractMetadata metadata) {
|
||||
return metadata.isMessaging()
|
||||
&& metadata.getContract().getInput().getTriggeredBy() == null;
|
||||
return metadata.isMessaging() && metadata.getContract().getInput().getTriggeredBy() == null;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -41,8 +41,7 @@ class MessagingHeadersGiven implements Given, MethodVisitor<Given> {
|
||||
}
|
||||
|
||||
private String getHeaderString(Header header) {
|
||||
return ".header(" + getTestSideValue(header.getName()) + ", "
|
||||
+ getTestSideValue(header.getServerValue()) + ")";
|
||||
return ".header(" + getTestSideValue(header.getName()) + ", " + getTestSideValue(header.getServerValue()) + ")";
|
||||
}
|
||||
|
||||
private String getTestSideValue(Object object) {
|
||||
|
||||
@@ -32,8 +32,7 @@ class MessagingHeadersThen implements Then, BodyMethodVisitor {
|
||||
|
||||
private final ComparisonBuilder comparisonBuilder;
|
||||
|
||||
MessagingHeadersThen(BlockBuilder blockBuilder,
|
||||
GeneratedClassMetaData generatedClassMetaData,
|
||||
MessagingHeadersThen(BlockBuilder blockBuilder, GeneratedClassMetaData generatedClassMetaData,
|
||||
ComparisonBuilder comparisonBuilder) {
|
||||
this.blockBuilder = blockBuilder;
|
||||
this.generatedClassMetaData = generatedClassMetaData;
|
||||
@@ -44,20 +43,17 @@ class MessagingHeadersThen implements Then, BodyMethodVisitor {
|
||||
public MethodVisitor<Then> apply(SingleContractMetadata singleContractMetadata) {
|
||||
endBodyBlock(this.blockBuilder);
|
||||
startBodyBlock(this.blockBuilder, "and:");
|
||||
OutputMessage outputMessage = singleContractMetadata.getContract()
|
||||
.getOutputMessage();
|
||||
OutputMessage outputMessage = singleContractMetadata.getContract().getOutputMessage();
|
||||
outputMessage.getHeaders().executeForEachHeader(header -> {
|
||||
processHeaderElement(header.getName(),
|
||||
header.getServerValue() instanceof NotToEscapePattern
|
||||
? header.getServerValue()
|
||||
: MapConverter.getTestSideValues(header.getServerValue()));
|
||||
processHeaderElement(header.getName(), header.getServerValue() instanceof NotToEscapePattern
|
||||
? header.getServerValue() : MapConverter.getTestSideValues(header.getServerValue()));
|
||||
});
|
||||
return this;
|
||||
}
|
||||
|
||||
private void appendLineWithHeaderNotNull(String property) {
|
||||
this.blockBuilder.addLineWithEnding(this.comparisonBuilder
|
||||
.assertThatIsNotNull("response.getHeader(\"" + property + "\")"));
|
||||
this.blockBuilder.addLineWithEnding(
|
||||
this.comparisonBuilder.assertThatIsNotNull("response.getHeader(\"" + property + "\")"));
|
||||
}
|
||||
|
||||
private void processHeaderElement(String property, Object value) {
|
||||
@@ -77,32 +73,31 @@ class MessagingHeadersThen implements Then, BodyMethodVisitor {
|
||||
|
||||
private void processHeaderElement(String property, String value) {
|
||||
appendLineWithHeaderNotNull(property);
|
||||
this.blockBuilder.addLineWithEnding(this.comparisonBuilder.assertThat(
|
||||
"response.getHeader(\"" + property + "\").toString()", value));
|
||||
this.blockBuilder.addLineWithEnding(
|
||||
this.comparisonBuilder.assertThat("response.getHeader(\"" + property + "\").toString()", value));
|
||||
}
|
||||
|
||||
private void processHeaderElement(String property, Number value) {
|
||||
appendLineWithHeaderNotNull(property);
|
||||
blockBuilder.addLineWithEnding(this.comparisonBuilder
|
||||
.assertThat("response.getHeader(\"" + property + "\")", value));
|
||||
blockBuilder.addLineWithEnding(
|
||||
this.comparisonBuilder.assertThat("response.getHeader(\"" + property + "\")", value));
|
||||
}
|
||||
|
||||
private void processHeaderElement(String property, Pattern pattern) {
|
||||
appendLineWithHeaderNotNull(property);
|
||||
blockBuilder.addLineWithEnding(this.comparisonBuilder.assertThat(
|
||||
"response.getHeader(\"" + property + "\").toString()", pattern));
|
||||
blockBuilder.addLineWithEnding(
|
||||
this.comparisonBuilder.assertThat("response.getHeader(\"" + property + "\").toString()", pattern));
|
||||
}
|
||||
|
||||
private void processHeaderElement(String property, ExecutionProperty exec) {
|
||||
appendLineWithHeaderNotNull(property);
|
||||
blockBuilder.addLineWithEnding(
|
||||
exec.insertValue("response.getHeader(\"" + property + "\").toString()"));
|
||||
blockBuilder.addLineWithEnding(exec.insertValue("response.getHeader(\"" + property + "\").toString()"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean accept(SingleContractMetadata singleContractMetadata) {
|
||||
return singleContractMetadata.isMessaging() && singleContractMetadata
|
||||
.getContract().getOutputMessage().getHeaders() != null;
|
||||
return singleContractMetadata.isMessaging()
|
||||
&& singleContractMetadata.getContract().getOutputMessage().getHeaders() != null;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -31,24 +31,21 @@ class MessagingImports implements Imports {
|
||||
"org.springframework.cloud.contract.verifier.messaging.internal.ContractVerifierMessage",
|
||||
"org.springframework.cloud.contract.verifier.messaging.internal.ContractVerifierMessaging" };
|
||||
|
||||
MessagingImports(BlockBuilder blockBuilder,
|
||||
GeneratedClassMetaData generatedClassMetaData) {
|
||||
MessagingImports(BlockBuilder blockBuilder, GeneratedClassMetaData generatedClassMetaData) {
|
||||
this.blockBuilder = blockBuilder;
|
||||
this.generatedClassMetaData = generatedClassMetaData;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Imports call() {
|
||||
Arrays.stream(IMPORTS)
|
||||
.forEach(s -> this.blockBuilder.addLineWithEnding("import " + s));
|
||||
Arrays.stream(IMPORTS).forEach(s -> this.blockBuilder.addLineWithEnding("import " + s));
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean accept() {
|
||||
return this.generatedClassMetaData.listOfFiles.stream()
|
||||
.anyMatch(metadata -> metadata.getConvertedContractWithMetadata().stream()
|
||||
.anyMatch(SingleContractMetadata::isMessaging));
|
||||
return this.generatedClassMetaData.listOfFiles.stream().anyMatch(metadata -> metadata
|
||||
.getConvertedContractWithMetadata().stream().anyMatch(SingleContractMetadata::isMessaging));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -30,8 +30,7 @@ class MessagingReceiveMessageThen implements Then, BodyMethodVisitor {
|
||||
|
||||
private final BodyReader bodyReader;
|
||||
|
||||
MessagingReceiveMessageThen(BlockBuilder blockBuilder,
|
||||
GeneratedClassMetaData generatedClassMetaData,
|
||||
MessagingReceiveMessageThen(BlockBuilder blockBuilder, GeneratedClassMetaData generatedClassMetaData,
|
||||
ComparisonBuilder comparisonBuilder) {
|
||||
this.blockBuilder = blockBuilder;
|
||||
this.generatedClassMetaData = generatedClassMetaData;
|
||||
@@ -41,17 +40,15 @@ class MessagingReceiveMessageThen implements Then, BodyMethodVisitor {
|
||||
|
||||
@Override
|
||||
public MethodVisitor<Then> apply(SingleContractMetadata singleContractMetadata) {
|
||||
OutputMessage outputMessage = singleContractMetadata.getContract()
|
||||
.getOutputMessage();
|
||||
OutputMessage outputMessage = singleContractMetadata.getContract().getOutputMessage();
|
||||
this.bodyReader.storeContractAsYaml(singleContractMetadata);
|
||||
this.blockBuilder.addIndented(
|
||||
"ContractVerifierMessage response = contractVerifierMessaging.receive("
|
||||
this.blockBuilder
|
||||
.addIndented("ContractVerifierMessage response = contractVerifierMessaging.receive("
|
||||
+ sentToValue(outputMessage.getSentTo().getServerValue()) + ",")
|
||||
.addEmptyLine().indent().addIndented("contract(this, \""
|
||||
+ singleContractMetadata.methodName() + ".yml\"))")
|
||||
.unindent().addEndingIfNotPresent().addEmptyLine();
|
||||
this.blockBuilder.addLineWithEnding(
|
||||
this.comparisonBuilder.assertThatIsNotNull("response"));
|
||||
.addEmptyLine().indent()
|
||||
.addIndented("contract(this, \"" + singleContractMetadata.methodName() + ".yml\"))").unindent()
|
||||
.addEndingIfNotPresent().addEmptyLine();
|
||||
this.blockBuilder.addLineWithEnding(this.comparisonBuilder.assertThatIsNotNull("response"));
|
||||
return this;
|
||||
}
|
||||
|
||||
@@ -64,8 +61,8 @@ class MessagingReceiveMessageThen implements Then, BodyMethodVisitor {
|
||||
|
||||
@Override
|
||||
public boolean accept(SingleContractMetadata singleContractMetadata) {
|
||||
return singleContractMetadata.isMessaging() && singleContractMetadata
|
||||
.getContract().getOutputMessage().getSentTo() != null;
|
||||
return singleContractMetadata.isMessaging()
|
||||
&& singleContractMetadata.getContract().getOutputMessage().getSentTo() != null;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -25,8 +25,7 @@ class MessagingSpockNoMessageThen implements Then, BodyMethodVisitor {
|
||||
|
||||
private final GeneratedClassMetaData generatedClassMetaData;
|
||||
|
||||
MessagingSpockNoMessageThen(BlockBuilder blockBuilder,
|
||||
GeneratedClassMetaData generatedClassMetaData) {
|
||||
MessagingSpockNoMessageThen(BlockBuilder blockBuilder, GeneratedClassMetaData generatedClassMetaData) {
|
||||
this.blockBuilder = blockBuilder;
|
||||
this.generatedClassMetaData = generatedClassMetaData;
|
||||
}
|
||||
@@ -39,10 +38,8 @@ class MessagingSpockNoMessageThen implements Then, BodyMethodVisitor {
|
||||
|
||||
@Override
|
||||
public boolean accept(SingleContractMetadata singleContractMetadata) {
|
||||
return singleContractMetadata.isMessaging()
|
||||
&& singleContractMetadata.getContract().getOutputMessage() == null
|
||||
&& this.generatedClassMetaData.configProperties
|
||||
.getTestFramework() == TestFramework.SPOCK;
|
||||
return singleContractMetadata.isMessaging() && singleContractMetadata.getContract().getOutputMessage() == null
|
||||
&& this.generatedClassMetaData.configProperties.getTestFramework() == TestFramework.SPOCK;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -30,24 +30,21 @@ class MessagingStaticImports implements Imports {
|
||||
"org.springframework.cloud.contract.verifier.messaging.util.ContractVerifierMessagingUtil.headers",
|
||||
"org.springframework.cloud.contract.verifier.util.ContractVerifierUtil.fileToBytes" };
|
||||
|
||||
MessagingStaticImports(BlockBuilder blockBuilder,
|
||||
GeneratedClassMetaData generatedClassMetaData) {
|
||||
MessagingStaticImports(BlockBuilder blockBuilder, GeneratedClassMetaData generatedClassMetaData) {
|
||||
this.blockBuilder = blockBuilder;
|
||||
this.generatedClassMetaData = generatedClassMetaData;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Imports call() {
|
||||
Arrays.stream(IMPORTS)
|
||||
.forEach(s -> this.blockBuilder.addLineWithEnding("import static " + s));
|
||||
Arrays.stream(IMPORTS).forEach(s -> this.blockBuilder.addLineWithEnding("import static " + s));
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean accept() {
|
||||
return this.generatedClassMetaData.listOfFiles.stream()
|
||||
.anyMatch(metadata -> metadata.getConvertedContractWithMetadata().stream()
|
||||
.anyMatch(SingleContractMetadata::isMessaging));
|
||||
return this.generatedClassMetaData.listOfFiles.stream().anyMatch(metadata -> metadata
|
||||
.getConvertedContractWithMetadata().stream().anyMatch(SingleContractMetadata::isMessaging));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -28,8 +28,7 @@ class MessagingTriggeredByWhen implements When {
|
||||
|
||||
@Override
|
||||
public MethodVisitor<When> apply(SingleContractMetadata metadata) {
|
||||
this.blockBuilder.addIndented(
|
||||
metadata.getContract().getInput().getTriggeredBy().getExecutionCommand())
|
||||
this.blockBuilder.addIndented(metadata.getContract().getInput().getTriggeredBy().getExecutionCommand())
|
||||
.addEndingIfNotPresent();
|
||||
return this;
|
||||
}
|
||||
|
||||
@@ -28,8 +28,7 @@ class MessagingWhen implements When, BodyMethodVisitor {
|
||||
|
||||
private final List<When> whens = new LinkedList<>();
|
||||
|
||||
MessagingWhen(BlockBuilder blockBuilder,
|
||||
GeneratedClassMetaData generatedClassMetaData) {
|
||||
MessagingWhen(BlockBuilder blockBuilder, GeneratedClassMetaData generatedClassMetaData) {
|
||||
this.blockBuilder = blockBuilder;
|
||||
this.whens.addAll(Arrays.asList(new MessagingTriggeredByWhen(this.blockBuilder),
|
||||
new MessagingBodyWhen(this.blockBuilder, generatedClassMetaData),
|
||||
|
||||
@@ -32,21 +32,15 @@ class MessagingWithBodyThen implements Then, BodyMethodVisitor {
|
||||
|
||||
private final List<Then> thens = new LinkedList<>();
|
||||
|
||||
MessagingWithBodyThen(BlockBuilder blockBuilder,
|
||||
GeneratedClassMetaData generatedClassMetaData,
|
||||
MessagingWithBodyThen(BlockBuilder blockBuilder, GeneratedClassMetaData generatedClassMetaData,
|
||||
ComparisonBuilder comparisonBuilder) {
|
||||
this.blockBuilder = blockBuilder;
|
||||
this.generatedClassMetaData = generatedClassMetaData;
|
||||
this.comparisonBuilder = comparisonBuilder;
|
||||
this.thens.addAll(Arrays.asList(
|
||||
new MessagingSpockNoMessageThen(this.blockBuilder,
|
||||
generatedClassMetaData),
|
||||
new MessagingReceiveMessageThen(this.blockBuilder, generatedClassMetaData,
|
||||
this.comparisonBuilder),
|
||||
new MessagingHeadersThen(this.blockBuilder, generatedClassMetaData,
|
||||
this.comparisonBuilder),
|
||||
new MessagingBodyThen(this.blockBuilder, generatedClassMetaData,
|
||||
comparisonBuilder),
|
||||
this.thens.addAll(Arrays.asList(new MessagingSpockNoMessageThen(this.blockBuilder, generatedClassMetaData),
|
||||
new MessagingReceiveMessageThen(this.blockBuilder, generatedClassMetaData, this.comparisonBuilder),
|
||||
new MessagingHeadersThen(this.blockBuilder, generatedClassMetaData, this.comparisonBuilder),
|
||||
new MessagingBodyThen(this.blockBuilder, generatedClassMetaData, comparisonBuilder),
|
||||
new MessagingAssertThatThen(this.blockBuilder)));
|
||||
}
|
||||
|
||||
@@ -59,8 +53,7 @@ class MessagingWithBodyThen implements Then, BodyMethodVisitor {
|
||||
|
||||
@Override
|
||||
public boolean accept(SingleContractMetadata singleContractMetadata) {
|
||||
return singleContractMetadata.isMessaging()
|
||||
&& singleContractMetadata.getContract().getOutputMessage() != null;
|
||||
return singleContractMetadata.isMessaging() && singleContractMetadata.getContract().getOutputMessage() != null;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -31,28 +31,24 @@ class MethodAnnotationBuilder {
|
||||
}
|
||||
|
||||
MethodAnnotationBuilder jUnit4() {
|
||||
this.singleMethodBuilder.methodAnnotation(
|
||||
new JUnit4MethodAnnotation(this.builder, this.metaData),
|
||||
this.singleMethodBuilder.methodAnnotation(new JUnit4MethodAnnotation(this.builder, this.metaData),
|
||||
new JUnit4IgnoreMethodAnnotation(this.builder, this.metaData));
|
||||
return this;
|
||||
}
|
||||
|
||||
MethodAnnotationBuilder jUnit5() {
|
||||
this.singleMethodBuilder.methodAnnotation(
|
||||
new JUnit5MethodAnnotation(this.builder, this.metaData),
|
||||
this.singleMethodBuilder.methodAnnotation(new JUnit5MethodAnnotation(this.builder, this.metaData),
|
||||
new JUnit5IgnoreMethodAnnotation(this.builder, this.metaData));
|
||||
return this;
|
||||
}
|
||||
|
||||
MethodAnnotationBuilder testNG() {
|
||||
this.singleMethodBuilder.methodAnnotation(
|
||||
new TestNGMethodAnnotation(this.builder, this.metaData));
|
||||
this.singleMethodBuilder.methodAnnotation(new TestNGMethodAnnotation(this.builder, this.metaData));
|
||||
return this;
|
||||
}
|
||||
|
||||
MethodAnnotationBuilder spock() {
|
||||
this.singleMethodBuilder.methodAnnotation(
|
||||
new SpockIgnoreMethodAnnotation(this.builder, this.metaData));
|
||||
this.singleMethodBuilder.methodAnnotation(new SpockIgnoreMethodAnnotation(this.builder, this.metaData));
|
||||
return this;
|
||||
}
|
||||
|
||||
|
||||
@@ -31,14 +31,12 @@ class MethodMetadataBuilder {
|
||||
}
|
||||
|
||||
MethodMetadataBuilder jUnit() {
|
||||
this.singleMethodBuilder
|
||||
.methodMetadata(new JUnitMethodMetadata(this.builder, this.metaData));
|
||||
this.singleMethodBuilder.methodMetadata(new JUnitMethodMetadata(this.builder, this.metaData));
|
||||
return this;
|
||||
}
|
||||
|
||||
MethodMetadataBuilder spock() {
|
||||
this.singleMethodBuilder
|
||||
.methodMetadata(new SpockMethodMetadata(this.builder, this.metaData));
|
||||
this.singleMethodBuilder.methodMetadata(new SpockMethodMetadata(this.builder, this.metaData));
|
||||
return this;
|
||||
}
|
||||
|
||||
|
||||
@@ -21,8 +21,7 @@ import org.springframework.cloud.contract.verifier.file.SingleContractMetadata;
|
||||
interface MethodPreProcessor extends MethodVisitor<MethodPreProcessor> {
|
||||
|
||||
@Override
|
||||
default MethodVisitor<MethodPreProcessor> apply(
|
||||
SingleContractMetadata singleContractMetadata) {
|
||||
default MethodVisitor<MethodPreProcessor> apply(SingleContractMetadata singleContractMetadata) {
|
||||
return this;
|
||||
}
|
||||
|
||||
|
||||
@@ -20,7 +20,6 @@ import java.util.function.Function;
|
||||
|
||||
import org.springframework.cloud.contract.verifier.file.SingleContractMetadata;
|
||||
|
||||
interface MethodVisitor<T>
|
||||
extends MethodAcceptor, Function<SingleContractMetadata, MethodVisitor<T>> {
|
||||
interface MethodVisitor<T> extends MethodAcceptor, Function<SingleContractMetadata, MethodVisitor<T>> {
|
||||
|
||||
}
|
||||
|
||||
@@ -25,8 +25,7 @@ class MockMvcAsyncWhen implements When, MockMvcAcceptor {
|
||||
|
||||
private final GeneratedClassMetaData generatedClassMetaData;
|
||||
|
||||
MockMvcAsyncWhen(BlockBuilder blockBuilder,
|
||||
GeneratedClassMetaData generatedClassMetaData) {
|
||||
MockMvcAsyncWhen(BlockBuilder blockBuilder, GeneratedClassMetaData generatedClassMetaData) {
|
||||
this.blockBuilder = blockBuilder;
|
||||
this.generatedClassMetaData = generatedClassMetaData;
|
||||
}
|
||||
|
||||
@@ -30,8 +30,7 @@ class MockMvcBodyGiven implements Given {
|
||||
|
||||
private final BodyParser bodyParser;
|
||||
|
||||
MockMvcBodyGiven(BlockBuilder blockBuilder,
|
||||
GeneratedClassMetaData generatedClassMetaData, BodyParser bodyParser) {
|
||||
MockMvcBodyGiven(BlockBuilder blockBuilder, GeneratedClassMetaData generatedClassMetaData, BodyParser bodyParser) {
|
||||
this.blockBuilder = blockBuilder;
|
||||
this.bodyReader = new BodyReader(generatedClassMetaData);
|
||||
this.bodyParser = bodyParser;
|
||||
@@ -47,8 +46,7 @@ class MockMvcBodyGiven implements Given {
|
||||
Object body;
|
||||
Request request = metadata.getContract().getRequest();
|
||||
Object serverValue = request.getBody().getServerValue();
|
||||
if (serverValue instanceof ExecutionProperty
|
||||
|| serverValue instanceof FromFileProperty) {
|
||||
if (serverValue instanceof ExecutionProperty || serverValue instanceof FromFileProperty) {
|
||||
body = request.getBody().getServerValue();
|
||||
}
|
||||
else {
|
||||
@@ -65,10 +63,8 @@ class MockMvcBodyGiven implements Given {
|
||||
else if (body instanceof FromFileProperty) {
|
||||
FromFileProperty fileProperty = (FromFileProperty) body;
|
||||
value = fileProperty.isByte()
|
||||
? this.bodyReader.readBytesFromFileString(metadata, fileProperty,
|
||||
CommunicationType.REQUEST)
|
||||
: this.bodyReader.readStringFromFileString(metadata, fileProperty,
|
||||
CommunicationType.REQUEST);
|
||||
? this.bodyReader.readBytesFromFileString(metadata, fileProperty, CommunicationType.REQUEST)
|
||||
: this.bodyReader.readStringFromFileString(metadata, fileProperty, CommunicationType.REQUEST);
|
||||
}
|
||||
else {
|
||||
String escaped = escapeRequestSpecialChars(metadata, body.toString());
|
||||
@@ -77,8 +73,7 @@ class MockMvcBodyGiven implements Given {
|
||||
return ".body(" + value + ")";
|
||||
}
|
||||
|
||||
private String escapeRequestSpecialChars(SingleContractMetadata metadata,
|
||||
String string) {
|
||||
private String escapeRequestSpecialChars(SingleContractMetadata metadata, String string) {
|
||||
if (metadata.getInputTestContentType() == ContentType.JSON) {
|
||||
return string.replaceAll("\\\\n", "\\\\\\\\n");
|
||||
}
|
||||
|
||||
@@ -54,15 +54,13 @@ class MockMvcCookiesGiven implements Given {
|
||||
}
|
||||
|
||||
private String string(Cookie cookie) {
|
||||
return ".cookie(" + ContentHelper.getTestSideForNonBodyValue(cookie.getKey())
|
||||
+ ", " + ContentHelper.getTestSideForNonBodyValue(cookie.getServerValue())
|
||||
+ ")";
|
||||
return ".cookie(" + ContentHelper.getTestSideForNonBodyValue(cookie.getKey()) + ", "
|
||||
+ ContentHelper.getTestSideForNonBodyValue(cookie.getServerValue()) + ")";
|
||||
}
|
||||
|
||||
private boolean ofAbsentType(Cookie cookie) {
|
||||
return cookie.getServerValue() instanceof MatchingStrategy
|
||||
&& MatchingStrategy.Type.ABSENT
|
||||
.equals(((MatchingStrategy) cookie.getServerValue()).getType());
|
||||
&& MatchingStrategy.Type.ABSENT.equals(((MatchingStrategy) cookie.getServerValue()).getType());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -56,17 +56,15 @@ class MockMvcHeadersGiven implements Given {
|
||||
}
|
||||
|
||||
private String string(Header header) {
|
||||
return ".header(" + ContentHelper.getTestSideForNonBodyValue(header.getName())
|
||||
+ ", "
|
||||
+ ContentHelper.getTestSideForNonBodyValue(
|
||||
MapConverter.getTestSideValuesForNonBody(header.getServerValue()))
|
||||
return ".header("
|
||||
+ ContentHelper.getTestSideForNonBodyValue(header.getName()) + ", " + ContentHelper
|
||||
.getTestSideForNonBodyValue(MapConverter.getTestSideValuesForNonBody(header.getServerValue()))
|
||||
+ ")";
|
||||
}
|
||||
|
||||
private boolean ofAbsentType(Header header) {
|
||||
return header.getServerValue() instanceof MatchingStrategy
|
||||
&& MatchingStrategy.Type.ABSENT
|
||||
.equals(((MatchingStrategy) header.getServerValue()).getType());
|
||||
&& MatchingStrategy.Type.ABSENT.equals(((MatchingStrategy) header.getServerValue()).getType());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -36,8 +36,8 @@ class MockMvcMultipartGiven implements Given {
|
||||
|
||||
private final BodyParser bodyParser;
|
||||
|
||||
MockMvcMultipartGiven(BlockBuilder blockBuilder,
|
||||
GeneratedClassMetaData generatedClassMetaData, BodyParser bodyParser) {
|
||||
MockMvcMultipartGiven(BlockBuilder blockBuilder, GeneratedClassMetaData generatedClassMetaData,
|
||||
BodyParser bodyParser) {
|
||||
this.blockBuilder = blockBuilder;
|
||||
this.bodyReader = new BodyReader(generatedClassMetaData);
|
||||
this.bodyParser = bodyParser;
|
||||
@@ -46,46 +46,40 @@ class MockMvcMultipartGiven implements Given {
|
||||
|
||||
@Override
|
||||
public MethodVisitor<Given> apply(SingleContractMetadata metadata) {
|
||||
getMultipartParameters(metadata).entrySet().forEach(entry -> this.blockBuilder
|
||||
.addLine(getMultipartParameterLine(metadata, entry)));
|
||||
getMultipartParameters(metadata).entrySet()
|
||||
.forEach(entry -> this.blockBuilder.addLine(getMultipartParameterLine(metadata, entry)));
|
||||
return this;
|
||||
}
|
||||
|
||||
private String getMultipartParameterLine(SingleContractMetadata metadata,
|
||||
Map.Entry<String, Object> parameter) {
|
||||
private String getMultipartParameterLine(SingleContractMetadata metadata, Map.Entry<String, Object> parameter) {
|
||||
if (parameter.getValue() instanceof NamedProperty) {
|
||||
return ".multiPart(" + getMultipartFileParameterContent(metadata,
|
||||
parameter.getKey(), (NamedProperty) parameter.getValue()) + ")";
|
||||
return ".multiPart(" + getMultipartFileParameterContent(metadata, parameter.getKey(),
|
||||
(NamedProperty) parameter.getValue()) + ")";
|
||||
}
|
||||
return getParameterString(parameter);
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
private Map<String, Object> getMultipartParameters(SingleContractMetadata metadata) {
|
||||
return (Map<String, Object>) metadata.getContract().getRequest().getMultipart()
|
||||
.getServerValue();
|
||||
return (Map<String, Object>) metadata.getContract().getRequest().getMultipart().getServerValue();
|
||||
}
|
||||
|
||||
private String getMultipartFileParameterContent(SingleContractMetadata metadata,
|
||||
String propertyName, NamedProperty propertyValue) {
|
||||
private String getMultipartFileParameterContent(SingleContractMetadata metadata, String propertyName,
|
||||
NamedProperty propertyValue) {
|
||||
return getJavaMultipartFileParameterContent(propertyName, propertyValue,
|
||||
fileProp -> this.bodyReader.readBytesFromFileString(metadata, fileProp,
|
||||
CommunicationType.REQUEST));
|
||||
fileProp -> this.bodyReader.readBytesFromFileString(metadata, fileProp, CommunicationType.REQUEST));
|
||||
}
|
||||
|
||||
private String getParameterString(Map.Entry<String, Object> parameter) {
|
||||
return ".param(" + this.bodyParser.quotedShortText(parameter.getKey()) + ", "
|
||||
+ this.bodyParser.quotedShortText(
|
||||
MapConverter.getTestSideValuesForNonBody(parameter.getValue()))
|
||||
+ ")";
|
||||
+ this.bodyParser.quotedShortText(MapConverter.getTestSideValuesForNonBody(parameter.getValue())) + ")";
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean accept(SingleContractMetadata metadata) {
|
||||
Request request = metadata.getContract().getRequest();
|
||||
return request != null && request.getMultipart() != null
|
||||
&& this.generatedClassMetaData.configProperties
|
||||
.getTestFramework() != TestFramework.SPOCK;
|
||||
&& this.generatedClassMetaData.configProperties.getTestFramework() != TestFramework.SPOCK;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -59,9 +59,8 @@ class MockMvcQueryParamsWhen implements When, MockMvcAcceptor, QueryParamsResolv
|
||||
}
|
||||
|
||||
private void addQueryParameters(Url buildUrl) {
|
||||
List<QueryParameter> queryParameters = buildUrl.getQueryParameters()
|
||||
.getParameters().stream().filter(this::allowedQueryParameter)
|
||||
.collect(Collectors.toList());
|
||||
List<QueryParameter> queryParameters = buildUrl.getQueryParameters().getParameters().stream()
|
||||
.filter(this::allowedQueryParameter).collect(Collectors.toList());
|
||||
Iterator<QueryParameter> iterator = queryParameters.iterator();
|
||||
while (iterator.hasNext()) {
|
||||
QueryParameter parameter = iterator.next();
|
||||
@@ -86,10 +85,9 @@ class MockMvcQueryParamsWhen implements When, MockMvcAcceptor, QueryParamsResolv
|
||||
}
|
||||
|
||||
private String addQueryParameter(QueryParameter queryParam) {
|
||||
return "." + QUERY_PARAM_METHOD + "("
|
||||
+ this.bodyParser.quotedLongText(queryParam.getName()) + ","
|
||||
+ this.bodyParser.quotedLongText(resolveParamValue(
|
||||
MapConverter.getTestSideValuesForNonBody(queryParam)))
|
||||
return "." + QUERY_PARAM_METHOD + "(" + this.bodyParser.quotedLongText(queryParam.getName()) + ","
|
||||
+ this.bodyParser
|
||||
.quotedLongText(resolveParamValue(MapConverter.getTestSideValuesForNonBody(queryParam)))
|
||||
+ ")";
|
||||
}
|
||||
|
||||
|
||||
@@ -35,24 +35,21 @@ class MockMvcRestAssuredImports implements Imports, RestAssuredVerifier {
|
||||
"io.restassured.module.mockmvc.specification.MockMvcRequestSpecification",
|
||||
"io.restassured.response.ResponseOptions" };
|
||||
|
||||
MockMvcRestAssuredImports(BlockBuilder blockBuilder,
|
||||
GeneratedClassMetaData generatedClassMetaData) {
|
||||
MockMvcRestAssuredImports(BlockBuilder blockBuilder, GeneratedClassMetaData generatedClassMetaData) {
|
||||
this.blockBuilder = blockBuilder;
|
||||
this.generatedClassMetaData = generatedClassMetaData;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Imports call() {
|
||||
Arrays.stream(
|
||||
isRestAssured2Present() ? REST_ASSURED_2_IMPORTS : REST_ASSURED_3_IMPORTS)
|
||||
Arrays.stream(isRestAssured2Present() ? REST_ASSURED_2_IMPORTS : REST_ASSURED_3_IMPORTS)
|
||||
.forEach(s -> this.blockBuilder.addLineWithEnding("import " + s));
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean accept() {
|
||||
return this.generatedClassMetaData.configProperties
|
||||
.getTestMode() == TestMode.MOCKMVC
|
||||
return this.generatedClassMetaData.configProperties.getTestMode() == TestMode.MOCKMVC
|
||||
&& this.generatedClassMetaData.isAnyHttp();
|
||||
}
|
||||
|
||||
|
||||
@@ -29,27 +29,23 @@ class MockMvcRestAssuredStaticImports implements Imports, RestAssuredVerifier {
|
||||
private static final String[] REST_ASSURED_2_IMPORTS = {
|
||||
"com.jayway.restassured.module.mockmvc.RestAssuredMockMvc.*" };
|
||||
|
||||
private static final String[] REST_ASSURED_3_IMPORTS = {
|
||||
"io.restassured.module.mockmvc.RestAssuredMockMvc.*" };
|
||||
private static final String[] REST_ASSURED_3_IMPORTS = { "io.restassured.module.mockmvc.RestAssuredMockMvc.*" };
|
||||
|
||||
MockMvcRestAssuredStaticImports(BlockBuilder blockBuilder,
|
||||
GeneratedClassMetaData generatedClassMetaData) {
|
||||
MockMvcRestAssuredStaticImports(BlockBuilder blockBuilder, GeneratedClassMetaData generatedClassMetaData) {
|
||||
this.blockBuilder = blockBuilder;
|
||||
this.generatedClassMetaData = generatedClassMetaData;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Imports call() {
|
||||
Arrays.stream(
|
||||
isRestAssured2Present() ? REST_ASSURED_2_IMPORTS : REST_ASSURED_3_IMPORTS)
|
||||
Arrays.stream(isRestAssured2Present() ? REST_ASSURED_2_IMPORTS : REST_ASSURED_3_IMPORTS)
|
||||
.forEach(s -> this.blockBuilder.addLineWithEnding("import static " + s));
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean accept() {
|
||||
return this.generatedClassMetaData.configProperties
|
||||
.getTestMode() == TestMode.MOCKMVC
|
||||
return this.generatedClassMetaData.configProperties.getTestMode() == TestMode.MOCKMVC
|
||||
&& this.generatedClassMetaData.isAnyHttp();
|
||||
}
|
||||
|
||||
|
||||
@@ -34,8 +34,7 @@ class NameProvider {
|
||||
private static final Log log = LogFactory.getLog(NameProvider.class);
|
||||
|
||||
String methodName(SingleContractMetadata singleContractMetadata) {
|
||||
return ContractVerifierUtil.TEST_METHOD_PREFIX
|
||||
+ generateMethodName(singleContractMetadata);
|
||||
return ContractVerifierUtil.TEST_METHOD_PREFIX + generateMethodName(singleContractMetadata);
|
||||
}
|
||||
|
||||
private String generateMethodName(SingleContractMetadata singleContractMetadata) {
|
||||
@@ -43,8 +42,7 @@ class NameProvider {
|
||||
File stubsFile = contractMetadata.getPath().toFile();
|
||||
Contract stubContent = singleContractMetadata.getContract();
|
||||
if (StringUtils.hasText(stubContent.getName())) {
|
||||
String name = NamesUtil.camelCase(
|
||||
NamesUtil.convertIllegalPackageChars(stubContent.getName()));
|
||||
String name = NamesUtil.camelCase(NamesUtil.convertIllegalPackageChars(stubContent.getName()));
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("Overriding the default test name with [" + name + "]");
|
||||
}
|
||||
@@ -77,8 +75,8 @@ class NameProvider {
|
||||
}
|
||||
|
||||
private String camelCasedMethodFromFileName(File stubsFile) {
|
||||
return NamesUtil.camelCase(NamesUtil.convertIllegalMethodNameChars(NamesUtil
|
||||
.toLastDot(NamesUtil.afterLast(stubsFile.getPath(), File.separator))));
|
||||
return NamesUtil.camelCase(NamesUtil.convertIllegalMethodNameChars(
|
||||
NamesUtil.toLastDot(NamesUtil.afterLast(stubsFile.getPath(), File.separator))));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -25,8 +25,7 @@ class RestAssuredCookiesThen implements Then, MockMvcAcceptor, CookieElementProc
|
||||
|
||||
private final ComparisonBuilder comparisonBuilder;
|
||||
|
||||
RestAssuredCookiesThen(BlockBuilder blockBuilder,
|
||||
ComparisonBuilder comparisonBuilder) {
|
||||
RestAssuredCookiesThen(BlockBuilder blockBuilder, ComparisonBuilder comparisonBuilder) {
|
||||
this.blockBuilder = blockBuilder;
|
||||
this.comparisonBuilder = comparisonBuilder;
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user