Merge branch '1.0.x'

This commit is contained in:
Marcin Grzejszczak
2017-04-14 17:10:17 +02:00
32 changed files with 285 additions and 59 deletions

View File

@@ -922,7 +922,7 @@ You have to add the dependencies needed by the autogenerated tests
[source,xml,indent=0]
----
<dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-contract-verifier</artifactId>
<scope>test</scope>

View File

@@ -41,6 +41,36 @@ dependencies {
}
----
====== Gradle and Rest Assured 3.0
By default Rest Assured 2.x is added to the classpath. However in order to give the users the
opportunity to use Rest Assured 3.x it's enough to add it to the plugins classpath.
[source,groovy,indent=0]
----
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath "org.springframework.boot:spring-boot-gradle-plugin:${springboot_version}"
classpath "org.springframework.cloud:spring-cloud-contract-gradle-plugin:${verifier_version}"
classpath "io.rest-assured:rest-assured:3.0.2"
classpath "io.rest-assured:spring-mock-mvc:3.0.2"
}
}
depenendencies {
// all dependencies
// you can exclude rest-assured from spring-cloud-contract-verifier
testCompile "io.rest-assured:rest-assured:3.0.2"
testCompile "io.rest-assured:spring-mock-mvc:3.0.2"
}
----
That way the plugin will automatically see that Rest Assured 3.x is present on the classpath
and will modify the imports accordingly.
====== Snapshot versions for Gradle
Add the additional snapshot repository to your build.gradle to use snapshot versions which are automatically uploaded after every successful build:
@@ -277,6 +307,63 @@ include::{standalone_samples_path}/http-server/pom.xml[tags=contract_maven_plugi
You can read more in the https://cloud.spring.io/spring-cloud-contract/spring-cloud-contract-maven-plugin/[Spring Cloud Contract Maven Plugin Docs]
====== Maven and Rest Assured 3.0
By default Rest Assured 2.x is added to the classpath. However in order to give the users the
opportunity to use Rest Assured 3.x it's enough to add it to the plugins classpath.
[source,groovy,indent=0]
----
<plugin>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-contract-maven-plugin</artifactId>
<version>${spring-cloud-contract.version}</version>
<extensions>true</extensions>
<configuration>
<packageWithBaseClasses>com.example</packageWithBaseClasses>
</configuration>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-contract-verifier</artifactId>
<version>${spring-cloud-contract.version}</version>
</dependency>
<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>rest-assured</artifactId>
<version>3.0.2</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>spring-mock-mvc</artifactId>
<version>3.0.2</version>
<scope>compile</scope>
</dependency>
</dependencies>
</plugin>
<dependencies>
<!-- all dependencies -->
<!-- you can exclude rest-assured from spring-cloud-contract-verifier -->
<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>rest-assured</artifactId>
<version>3.0.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>spring-mock-mvc</artifactId>
<version>3.0.2</version>
<scope>test</scope>
</dependency>
</dependencies>
----
That way the plugin will automatically see that Rest Assured 3.x is present on the classpath
and will modify the imports accordingly.
====== Snapshot versions for Maven
For Snapshot / Milestone versions you have to add the following section to your `pom.xml`

View File

@@ -20,7 +20,7 @@
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.8</java.version>
<spring-cloud-contract.version>1.1.0.BUILD-SNAPSHOT</spring-cloud-contract.version>
<spring-cloud-contract.version>1.1.1.BUILD-SNAPSHOT</spring-cloud-contract.version>
<spring-cloud-dependencies.version>Dalston.BUILD-SNAPSHOT</spring-cloud-dependencies.version>
<excludeBuildFolders>true</excludeBuildFolders>
</properties>

View File

@@ -1,3 +1,3 @@
org.gradle.daemon=false
verifierVersion=1.1.0.BUILD-SNAPSHOT
verifierVersion=1.1.1.BUILD-SNAPSHOT
BOM_VERSION=Dalston.BUILD-SNAPSHOT

View File

@@ -20,7 +20,7 @@
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.8</java.version>
<spring-cloud-contract.version>1.1.0.BUILD-SNAPSHOT</spring-cloud-contract.version>
<spring-cloud-contract.version>1.1.1.BUILD-SNAPSHOT</spring-cloud-contract.version>
<spring-cloud-dependencies.version>Dalston.BUILD-SNAPSHOT</spring-cloud-dependencies.version>
</properties>
@@ -42,10 +42,10 @@
<!-- tag::verifier_test_dependencies[] -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-contract-verifier</artifactId>
<scope>test</scope>
</dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-contract-verifier</artifactId>
<scope>test</scope>
</dependency>
<!-- end::verifier_test_dependencies[] -->
</dependencies>

View File

@@ -17,7 +17,7 @@
<description>Spring Cloud Contract Standalone Test Samples used for end to end tests</description>
<properties>
<spring-cloud-contract.version>1.1.0.BUILD-SNAPSHOT</spring-cloud-contract.version>
<spring-cloud-contract.version>1.1.1.BUILD-SNAPSHOT</spring-cloud-contract.version>
</properties>
<modules>

View File

@@ -17,7 +17,7 @@
<description>Spring Cloud Contract Standalone Test Samples used for end to end tests</description>
<properties>
<spring-cloud-contract.version>1.1.0.BUILD-SNAPSHOT</spring-cloud-contract.version>
<spring-cloud-contract.version>1.1.1.BUILD-SNAPSHOT</spring-cloud-contract.version>
</properties>
<modules>

View File

@@ -1,3 +1,3 @@
org.gradle.daemon=false
verifierVersion=1.1.0.BUILD-SNAPSHOT
verifierVersion=1.1.1.BUILD-SNAPSHOT
BOM_VERSION=Dalston.BUILD-SNAPSHOT

View File

@@ -21,7 +21,7 @@
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.8</java.version>
<spring-cloud-contract.version>1.1.0.BUILD-SNAPSHOT</spring-cloud-contract.version>
<spring-cloud-contract.version>1.1.1.BUILD-SNAPSHOT</spring-cloud-contract.version>
</properties>
<!-- tag::jars[] -->

View File

@@ -9,6 +9,8 @@ buildscript {
dependencies {
classpath "org.springframework.boot:spring-boot-gradle-plugin:1.5.0.BUILD-SNAPSHOT"
classpath "org.springframework.cloud:spring-cloud-contract-gradle-plugin:${findProperty('verifierVersion') ?: verifierVersion}"
classpath "io.rest-assured:rest-assured:3.0.2"
classpath "io.rest-assured:spring-mock-mvc:3.0.2"
}
}
@@ -51,7 +53,9 @@ dependencies {
compile("org.springframework.cloud:spring-cloud-starter-stream-rabbit")
testCompile 'org.springframework.cloud:spring-cloud-starter-contract-verifier'
testCompile("org.springframework.cloud:spring-cloud-stream-test-support")
testCompile "org.springframework.cloud:spring-cloud-stream-test-support"
testCompile "io.rest-assured:rest-assured:3.0.2"
testCompile "io.rest-assured:spring-mock-mvc:3.0.2"
}
task stubsJar(type: Jar, dependsOn: "generateWireMockClientStubs") {

View File

@@ -1,3 +1,3 @@
org.gradle.daemon=false
verifierVersion=1.1.0.BUILD-SNAPSHOT
verifierVersion=1.1.1.BUILD-SNAPSHOT
BOM_VERSION=Dalston.BUILD-SNAPSHOT

View File

@@ -21,7 +21,7 @@
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.8</java.version>
<spring-cloud-contract.version>1.1.0.BUILD-SNAPSHOT</spring-cloud-contract.version>
<spring-cloud-contract.version>1.1.1.BUILD-SNAPSHOT</spring-cloud-contract.version>
</properties>
<dependencies>
@@ -42,6 +42,31 @@
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-contract-verifier</artifactId>
<version>${spring-cloud-contract.version}</version>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>com.jayway.restassured</groupId>
<artifactId>rest-assured</artifactId>
</exclusion>
<exclusion>
<groupId>com.jayway.restassured</groupId>
<artifactId>spring-mock-mvc</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- Example of overriding Rest Assured version -->
<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>rest-assured</artifactId>
<version>3.0.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>spring-mock-mvc</artifactId>
<version>3.0.2</version>
<scope>test</scope>
</dependency>
</dependencies>
@@ -77,6 +102,22 @@
</baseClassMapping>
</baseClassMappings>
</configuration>
<!-- Example of using Rest Assured 3.x. If you don't add this section Rest Assured 2.9.0 will be used -->
<dependencies>
<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>rest-assured</artifactId>
<version>3.0.2</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>spring-mock-mvc</artifactId>
<version>3.0.2</version>
<scope>compile</scope>
</dependency>
</dependencies>
</plugin>
<plugin>

View File

@@ -16,11 +16,14 @@
package com.example.source;
import io.restassured.module.mockmvc.RestAssuredMockMvc;
import org.junit.Before;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.cloud.contract.verifier.messaging.boot.AutoConfigureMessageVerifier;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.web.context.WebApplicationContext;
/**
* Base class for sensor autogenerated tests (used by Spring Cloud Contract).
@@ -37,6 +40,14 @@ public abstract class SensorSourceTestBase {
@Autowired
ContractVerifierSampleStreamSourceApplication application;
@Autowired
WebApplicationContext context;
@Before
public void setup() {
RestAssuredMockMvc.webAppContextSetup(this.context);
}
public void createSensorData() {
application.poll();
}

View File

@@ -0,0 +1,11 @@
package contracts
org.springframework.cloud.contract.spec.Contract.make {
request {
method(GET())
url("/health")
}
response {
status(200)
}
}

View File

@@ -1,3 +1,3 @@
org.gradle.daemon=false
verifierVersion=1.1.0.BUILD-SNAPSHOT
verifierVersion=1.1.1.BUILD-SNAPSHOT
BOM_VERSION=Dalston.BUILD-SNAPSHOT

View File

@@ -20,7 +20,7 @@
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.8</java.version>
<spring-cloud-contract.version>1.1.0.BUILD-SNAPSHOT</spring-cloud-contract.version>
<spring-cloud-contract.version>1.1.1.BUILD-SNAPSHOT</spring-cloud-contract.version>
<spring-cloud-dependencies.version>Dalston.BUILD-SNAPSHOT</spring-cloud-dependencies.version>
</properties>

View File

@@ -17,7 +17,7 @@
<description>Spring Cloud Contract Standalone Test Samples used for end to end tests with Pact</description>
<properties>
<spring-cloud-contract.version>1.1.0.BUILD-SNAPSHOT</spring-cloud-contract.version>
<spring-cloud-contract.version>1.1.1.BUILD-SNAPSHOT</spring-cloud-contract.version>
</properties>
<modules>

View File

@@ -1,3 +1,3 @@
org.gradle.daemon=false
verifierVersion=1.1.0.BUILD-SNAPSHOT
verifierVersion=1.1.1.BUILD-SNAPSHOT
BOM_VERSION=Dalston.BUILD-SNAPSHOT

View File

@@ -20,7 +20,7 @@
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.8</java.version>
<spring-cloud-contract.version>1.1.0.BUILD-SNAPSHOT</spring-cloud-contract.version>
<spring-cloud-contract.version>1.1.1.BUILD-SNAPSHOT</spring-cloud-contract.version>
<spring-cloud-commons.version>1.1.8.RELEASE</spring-cloud-commons.version>
</properties>

View File

@@ -1,3 +1,3 @@
org.gradle.daemon=false
verifierVersion=1.1.0.BUILD-SNAPSHOT
verifierVersion=1.1.1.BUILD-SNAPSHOT
BOM_VERSION=Dalston.BUILD-SNAPSHOT

View File

@@ -20,7 +20,7 @@
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.8</java.version>
<spring-cloud-contract.version>1.1.0.BUILD-SNAPSHOT</spring-cloud-contract.version>
<spring-cloud-contract.version>1.1.1.BUILD-SNAPSHOT</spring-cloud-contract.version>
</properties>
<dependencies>

View File

@@ -17,7 +17,7 @@
<description>Spring Cloud Contract Standalone Test Samples used for end to end tests</description>
<properties>
<spring-cloud-contract.version>1.1.0.BUILD-SNAPSHOT</spring-cloud-contract.version>
<spring-cloud-contract.version>1.1.1.BUILD-SNAPSHOT</spring-cloud-contract.version>
</properties>
<modules>

View File

@@ -21,7 +21,7 @@
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.8</java.version>
<spring-cloud-contract.version>1.1.0.BUILD-SNAPSHOT</spring-cloud-contract.version>
<spring-cloud-contract.version>1.1.1.BUILD-SNAPSHOT</spring-cloud-contract.version>
</properties>
<dependencies>

View File

@@ -22,7 +22,7 @@
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.8</java.version>
<jetty.version>9.2.13.v20150730</jetty.version>
<spring-cloud-contract.version>1.1.0.BUILD-SNAPSHOT</spring-cloud-contract.version>
<spring-cloud-contract.version>1.1.1.BUILD-SNAPSHOT</spring-cloud-contract.version>
</properties>
<dependencies>

View File

@@ -21,7 +21,7 @@
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.8</java.version>
<spring-cloud-contract.version>1.1.0.BUILD-SNAPSHOT</spring-cloud-contract.version>
<spring-cloud-contract.version>1.1.1.BUILD-SNAPSHOT</spring-cloud-contract.version>
</properties>
<dependencies>

View File

@@ -21,7 +21,7 @@
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.8</java.version>
<spring-cloud-contract.version>1.1.0.BUILD-SNAPSHOT</spring-cloud-contract.version>
<spring-cloud-contract.version>1.1.1.BUILD-SNAPSHOT</spring-cloud-contract.version>
</properties>
<dependencies>

View File

@@ -21,7 +21,7 @@
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.8</java.version>
<spring-cloud-contract.version>1.1.0.BUILD-SNAPSHOT</spring-cloud-contract.version>
<spring-cloud-contract.version>1.1.1.BUILD-SNAPSHOT</spring-cloud-contract.version>
</properties>
<dependencies>

View File

@@ -119,6 +119,7 @@
<artifactId>jsonassert</artifactId>
<version>${jsonassert.version}</version>
</dependency>
<!-- TODO: In 1.2.x make 3.0.0 default -->
<dependency>
<groupId>com.jayway.restassured</groupId>
<artifactId>spring-mock-mvc</artifactId>

View File

@@ -73,6 +73,9 @@ class TestGenerator {
}
int generate() {
if (!configProperties.basePackageForTests) {
}
generateTestClasses(configProperties.basePackageForTests)
return counter.get()
}

View File

@@ -18,25 +18,32 @@ package org.springframework.cloud.contract.verifier.builder
import groovy.transform.Canonical
import groovy.transform.EqualsAndHashCode
import groovy.util.logging.Slf4j
import groovy.transform.PackageScope
import org.apache.commons.logging.Log
import org.apache.commons.logging.LogFactory
import org.springframework.cloud.contract.spec.Contract
import org.springframework.cloud.contract.verifier.config.ContractVerifierConfigProperties
import org.springframework.cloud.contract.verifier.config.TestFramework
import org.springframework.cloud.contract.verifier.config.TestMode
import org.springframework.cloud.contract.verifier.file.ContractMetadata
import static org.springframework.cloud.contract.verifier.util.NamesUtil.capitalize
import java.lang.invoke.MethodHandles
import static org.springframework.cloud.contract.verifier.util.NamesUtil.capitalize
/**
* Builds a single test for the given {@link ContractVerifierConfigProperties properties}
*
* @since 1.1.0
*/
@Slf4j
class JavaTestGenerator implements SingleTestGenerator {
private static final Log log = LogFactory.getLog(MethodHandles.lookup().lookupClass())
private static final String JSON_ASSERT_STATIC_IMPORT = 'com.toomuchcoding.jsonassert.JsonAssertion.assertThatJson'
private static final String JSON_ASSERT_CLASS = 'com.toomuchcoding.jsonassert.JsonAssertion'
private static final String REST_ASSURED_3_0_CLASS = 'io.restassured.RestAssured'
@PackageScope ClassPresenceChecker checker = new ClassPresenceChecker()
@Override
String buildClass(ContractVerifierConfigProperties configProperties, Collection<ContractMetadata> listOfFiles, String className, String classPackage, String includedDirectoryRelativePath) {
@@ -62,7 +69,9 @@ class JavaTestGenerator implements SingleTestGenerator {
addJsonPathRelatedImports(clazz)
Map<ParsedDsl, TestType> contracts = mapContractsToTheirTestTypes(listOfFiles)
boolean restAssured3Present = this.checker.isClassPresent(REST_ASSURED_3_0_CLASS)
String restAssuredPackage = restAssured3Present ? 'io.restassured' : 'com.jayway.restassured'
log.info("Rest Assured version 3.0 found [${restAssured3Present}]")
boolean conditionalImportsAdded = false
boolean toIgnore = listOfFiles.ignored.find { it }
contracts.each { ParsedDsl key, TestType value ->
@@ -74,18 +83,18 @@ class JavaTestGenerator implements SingleTestGenerator {
clazz.addImport('javax.ws.rs.core.Response')
}
} else if (configProperties.testMode == TestMode.MOCKMVC) {
clazz.addStaticImport('com.jayway.restassured.module.mockmvc.RestAssuredMockMvc.*')
clazz.addStaticImport("${restAssuredPackage}.module.mockmvc.RestAssuredMockMvc.*")
} else {
clazz.addStaticImport('com.jayway.restassured.RestAssured.*')
clazz.addStaticImport("${restAssuredPackage}.RestAssured.*")
}
}
if (configProperties.targetFramework == TestFramework.JUNIT) {
if (contracts.values().contains(TestType.HTTP) && configProperties.testMode == TestMode.MOCKMVC) {
clazz.addImport('com.jayway.restassured.module.mockmvc.specification.MockMvcRequestSpecification')
clazz.addImport('com.jayway.restassured.response.ResponseOptions')
clazz.addImport("${restAssuredPackage}.module.mockmvc.specification.MockMvcRequestSpecification")
clazz.addImport("${restAssuredPackage}.response.ResponseOptions")
} else if (contracts.values().contains(TestType.HTTP) && configProperties.testMode == TestMode.EXPLICIT) {
clazz.addImport('com.jayway.restassured.specification.RequestSpecification')
clazz.addImport('com.jayway.restassured.response.Response')
clazz.addImport("${restAssuredPackage}.specification.RequestSpecification")
clazz.addImport("${restAssuredPackage}.response.Response")
}
clazz.addImport('org.junit.Test')
clazz.addStaticImport('org.springframework.cloud.contract.verifier.assertion.SpringCloudContractAssertions.assertThat')
@@ -151,7 +160,7 @@ class JavaTestGenerator implements SingleTestGenerator {
clazz.addImport(['com.jayway.jsonpath.DocumentContext',
'com.jayway.jsonpath.JsonPath',
])
if (jsonAssertPresent()) {
if (this.checker.isClassPresent(JSON_ASSERT_CLASS)) {
clazz.addStaticImport(JSON_ASSERT_STATIC_IMPORT)
}
}
@@ -168,16 +177,22 @@ class JavaTestGenerator implements SingleTestGenerator {
clazz.addStaticImport('org.springframework.cloud.contract.verifier.messaging.util.ContractVerifierMessagingUtil.headers')
}
private static boolean jsonAssertPresent() {
}
class ClassPresenceChecker {
private static final Log log = LogFactory.getLog(MethodHandles.lookup().lookupClass())
boolean isClassPresent(String className) {
try {
Class.forName(JSON_ASSERT_CLASS)
Class.forName(className)
return true
} catch (ClassNotFoundException e) {
if (log.isDebugEnabled()) {
log.debug("JsonAssert is not present on classpath. Will not add a static import.")
log.debug("[${className}] is not present on classpath. Will not add a static import.")
}
return false
}
}
}

View File

@@ -25,12 +25,12 @@ package org.springframework.cloud.contract.verifier.config
*/
enum TestMode {
/**
* Uses Spring's MockMvc
* Uses Spring's MockMvc with Rest Assured 2.x
*/
MOCKMVC,
/**
* Uses direct HTTP invocations
* Uses direct HTTP invocations with Rest Assured 2.x
*/
EXPLICIT,

View File

@@ -36,29 +36,51 @@ class SingleTestGeneratorSpec extends Specification {
TemporaryFolder tmpFolder = new TemporaryFolder()
File file
private static final List<String> mockMvcJUnitClassStrings = ['package test; ', 'import com.jayway.jsonpath.DocumentContext; ', 'import com.jayway.jsonpath.JsonPath; ',
'import org.junit.FixMethodOrder; ', 'import org.junit.Ignore; ', 'import org.junit.Test; ', 'import org.junit.runners.MethodSorters; ',
'import static com.toomuchcoding.jsonassert.JsonAssertion.assertThatJson; ', 'import static com.jayway.restassured.module.mockmvc.RestAssuredMockMvc.*; ',
'@FixMethodOrder(MethodSorters.NAME_ASCENDING); ', '@Test; ', '@Ignore; ', 'import com.jayway.restassured.module.mockmvc.specification.MockMvcRequestSpecification; ',
'import com.jayway.restassured.response.ResponseOptions; ', 'import static org.assertj.core.api.Assertions.assertThat']
private static final List<String> mockMvcJUnitClassStrings = ['import com.jayway.jsonpath.DocumentContext;', 'import com.jayway.jsonpath.JsonPath;',
'import org.junit.FixMethodOrder;', 'import org.junit.Ignore;', 'import org.junit.Test;', 'import org.junit.runners.MethodSorters;',
'import static com.toomuchcoding.jsonassert.JsonAssertion.assertThatJson;', 'import static com.jayway.restassured.module.mockmvc.RestAssuredMockMvc.*;',
'@FixMethodOrder(MethodSorters.NAME_ASCENDING)', '@Test', '@Ignore', 'import com.jayway.restassured.module.mockmvc.specification.MockMvcRequestSpecification;',
'import com.jayway.restassured.response.ResponseOptions;', 'import static org.springframework.cloud.contract.verifier.assertion.SpringCloudContractAssertions.assertThat']
private static final List<String> mockMvcJUnitRestAssured3ClassStrings = ['import com.jayway.jsonpath.DocumentContext;', 'import com.jayway.jsonpath.JsonPath;',
'import org.junit.FixMethodOrder;', 'import org.junit.Ignore;', 'import org.junit.Test;', 'import org.junit.runners.MethodSorters;',
'import static com.toomuchcoding.jsonassert.JsonAssertion.assertThatJson;', 'import static io.restassured.module.mockmvc.RestAssuredMockMvc.*;',
'@FixMethodOrder(MethodSorters.NAME_ASCENDING)', '@Test', '@Ignore', 'import io.restassured.module.mockmvc.specification.MockMvcRequestSpecification;',
'import io.restassured.response.ResponseOptions;', 'import static org.springframework.cloud.contract.verifier.assertion.SpringCloudContractAssertions.assertThat']
private static final List<String> explicitJUnitClassStrings = ['package test; ', 'import com.jayway.jsonpath.DocumentContext; ', 'import com.jayway.jsonpath.JsonPath; ',
'import org.junit.FixMethodOrder; ', 'import org.junit.Ignore; ', 'import org.junit.Test; ', 'import org.junit.runners.MethodSorters; ',
'import static com.toomuchcoding.jsonassert.JsonAssertion.assertThatJson; ', 'import static com.jayway.restassured.RestAssured.*; ',
'@FixMethodOrder(MethodSorters.NAME_ASCENDING); ', '@Test; ', '@Ignore; ', 'import com.jayway.restassured.specification.RequestSpecification; ',
'import com.jayway.restassured.response.Response; ', 'import static org.assertj.core.api.Assertions.assertThat']
private static final List<String> explicitJUnitClassStrings = ['import com.jayway.jsonpath.DocumentContext;', 'import com.jayway.jsonpath.JsonPath;',
'import org.junit.FixMethodOrder;', 'import org.junit.Ignore;', 'import org.junit.Test;', 'import org.junit.runners.MethodSorters;',
'import static com.toomuchcoding.jsonassert.JsonAssertion.assertThatJson;', 'import static com.jayway.restassured.RestAssured.*;',
'@FixMethodOrder(MethodSorters.NAME_ASCENDING)', '@Test', '@Ignore', 'import com.jayway.restassured.specification.RequestSpecification;',
'import com.jayway.restassured.response.Response;', 'import static org.springframework.cloud.contract.verifier.assertion.SpringCloudContractAssertions.assertThat']
private static final List<String> spockClassStrings = ['package test', 'import com.jayway.jsonpath.DocumentContext', 'import com.jayway.jsonpath.JsonPath',
private static final List<String> explicitJUnitRestAssured3ClassStrings = ['import com.jayway.jsonpath.DocumentContext;', 'import com.jayway.jsonpath.JsonPath;',
'import org.junit.FixMethodOrder;', 'import org.junit.Ignore;', 'import org.junit.Test;', 'import org.junit.runners.MethodSorters;',
'import static com.toomuchcoding.jsonassert.JsonAssertion.assertThatJson;', 'import static io.restassured.RestAssured.*;',
'@FixMethodOrder(MethodSorters.NAME_ASCENDING)', '@Test', '@Ignore', 'import io.restassured.specification.RequestSpecification;',
'import io.restassured.response.Response;', 'import static org.springframework.cloud.contract.verifier.assertion.SpringCloudContractAssertions.assertThat']
private static final List<String> spockClassStrings = ['import com.jayway.jsonpath.DocumentContext', 'import com.jayway.jsonpath.JsonPath',
'import spock.lang.Ignore', 'import spock.lang.Specification', 'import spock.lang.Stepwise',
'import static com.toomuchcoding.jsonassert.JsonAssertion.assertThatJson', 'import static com.jayway.restassured.module.mockmvc.RestAssuredMockMvc.*',
'@Stepwise', '@Ignore']
private static final List<String> explicitSpockClassStrings = ['package test', 'import com.jayway.jsonpath.DocumentContext', 'import com.jayway.jsonpath.JsonPath',
private static final List<String> spockClassRestAssured3Strings = ['import com.jayway.jsonpath.DocumentContext', 'import com.jayway.jsonpath.JsonPath',
'import spock.lang.Ignore', 'import spock.lang.Specification', 'import spock.lang.Stepwise',
'import static com.toomuchcoding.jsonassert.JsonAssertion.assertThatJson', 'import static io.restassured.module.mockmvc.RestAssuredMockMvc.*',
'@Stepwise', '@Ignore']
private static final List<String> explicitSpockClassStrings = ['import com.jayway.jsonpath.DocumentContext', 'import com.jayway.jsonpath.JsonPath',
'import spock.lang.Ignore', 'import spock.lang.Specification', 'import spock.lang.Stepwise',
'import static com.toomuchcoding.jsonassert.JsonAssertion.assertThatJson', 'import static com.jayway.restassured.RestAssured.*',
'@Stepwise', '@Ignore']
private static final List<String> explicitSpockRestAssured3ClassStrings = ['import com.jayway.jsonpath.DocumentContext', 'import com.jayway.jsonpath.JsonPath',
'import spock.lang.Ignore', 'import spock.lang.Specification', 'import spock.lang.Stepwise',
'import static com.toomuchcoding.jsonassert.JsonAssertion.assertThatJson', 'import static io.restassured.RestAssured.*',
'@Stepwise', '@Ignore']
public static final Closure JAVA_ASSERTER = { String classToTest ->
String name = Math.abs(new Random().nextInt())
String changedTest = classToTest.replace("public class Test", "public class Test${name}")
@@ -94,6 +116,7 @@ class SingleTestGeneratorSpec extends Specification {
given:
ContractVerifierConfigProperties properties = new ContractVerifierConfigProperties()
properties.targetFramework = testFramework
properties.testMode = mode
ContractMetadata contract = new ContractMetadata(file.toPath(), true, 1, 2, convertAsCollection(file))
contract.ignored >> true
contract.order >> 2
@@ -103,7 +126,7 @@ class SingleTestGeneratorSpec extends Specification {
String clazz = testGenerator.buildClass(properties, [contract], "test", "test", 'com/foo')
then:
classStrings.each { clazz.contains(it) }
classStrings.each { assert clazz.contains(it) }
and:
asserter(clazz)
where:
@@ -114,6 +137,36 @@ class SingleTestGeneratorSpec extends Specification {
SPOCK | TestMode.EXPLICIT | explicitSpockClassStrings | GROOVY_ASSERTER
}
def "should build test class for #testFramework with Rest Assured 3.0"() {
given:
ContractVerifierConfigProperties properties = new ContractVerifierConfigProperties()
properties.targetFramework = testFramework
properties.testMode = mode
ContractMetadata contract = new ContractMetadata(file.toPath(), true, 1, 2)
contract.ignored >> true
contract.order >> 2
JavaTestGenerator testGenerator = new JavaTestGenerator(checker: new ClassPresenceChecker() {
@Override
boolean isClassPresent(String className) {
return true
}
})
when:
String clazz = testGenerator.buildClass(properties, [contract], "test", "test", 'com/foo')
then:
classStrings.each { assert clazz.contains(it) }
!clazz.contains("com.jayway.restassured")
where:
testFramework | mode | classStrings
JUNIT | TestMode.MOCKMVC | mockMvcJUnitRestAssured3ClassStrings
JUNIT | TestMode.EXPLICIT | explicitJUnitRestAssured3ClassStrings
SPOCK | TestMode.MOCKMVC | spockClassRestAssured3Strings
SPOCK | TestMode.EXPLICIT | explicitSpockRestAssured3ClassStrings
}
def "should build test class for #testFramework and mode #mode with two files"() {
given:
File file = tmpFolder.newFile()
@@ -164,7 +217,7 @@ class SingleTestGeneratorSpec extends Specification {
ContractMetadata contract2 = new ContractMetadata(file2.toPath(), false, 1, null)
contract2.ignored >> false
and:
JavaTestGenerator testGenerator = new JavaTestGenerator()
JavaTestGenerator testGenerator = new JavaTestGenerator()
when:
String clazz = testGenerator.buildClass(properties, [contract, contract2], "test", "test", 'com/foo')