From 281df97897db3283987dbb5fa1d7a4f84ef0a035 Mon Sep 17 00:00:00 2001 From: Marcin Grzejszczak Date: Thu, 14 Jul 2016 19:05:57 +0200 Subject: [PATCH] Fixed the tests --- samples/samples-standalone/build.gradle | 0 .../build.gradle | 4 +- .../example/source/SensorSourceTestBase.java | 2 + .../build.gradle | 4 +- .../plugin/MessagingProjectSpec.groovy | 47 ----- .../bootSimple/gradle.properties | 2 +- .../gradle/wrapper/gradle-wrapper.jar | Bin 51018 -> 53556 bytes .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../messagingProject/build.gradle | 80 --------- .../messagingProject/gradle.properties | 22 --- .../gradle/wrapper/gradle-wrapper.jar | Bin 53639 -> 0 bytes .../gradle/wrapper/gradle-wrapper.properties | 22 --- .../functionalTest/messagingProject/gradlew | 160 ------------------ .../messagingProject/gradlew.bat | 90 ---------- .../repository/mappings/a_foo.groovy | 28 --- .../repository/mappings/bookDeleted.groovy | 31 ---- .../repository/mappings/bookReturned1.groovy | 30 ---- .../repository/mappings/bookReturned2.groovy | 38 ----- .../messagingProject/settings.gradle | 17 -- .../cloud/samples/book/BookDeleted.groovy | 30 ---- .../cloud/samples/book/BookListener.groovy | 54 ------ .../cloud/samples/book/BookReturned.groovy | 30 ---- .../cloud/samples/book/BookService.groovy | 48 ------ .../IntegrationMessagingApplication.groovy | 38 ----- .../main/resources/integration-context.xml | 56 ------ .../samples/book/MessagingBaseSpec.groovy | 49 ------ .../cloud/samples/book/MessagingBaseTest.java | 52 ------ 27 files changed, 8 insertions(+), 928 deletions(-) delete mode 100644 samples/samples-standalone/build.gradle delete mode 100755 spring-cloud-contract-verifier-gradle-plugin/src/test/groovy/org/springframework/cloud/contract/verifier/plugin/MessagingProjectSpec.groovy mode change 100755 => 100644 spring-cloud-contract-verifier-gradle-plugin/src/test/resources/functionalTest/bootSimple/gradle/wrapper/gradle-wrapper.jar delete mode 100644 spring-cloud-contract-verifier-gradle-plugin/src/test/resources/functionalTest/messagingProject/build.gradle delete mode 100644 spring-cloud-contract-verifier-gradle-plugin/src/test/resources/functionalTest/messagingProject/gradle.properties delete mode 100755 spring-cloud-contract-verifier-gradle-plugin/src/test/resources/functionalTest/messagingProject/gradle/wrapper/gradle-wrapper.jar delete mode 100755 spring-cloud-contract-verifier-gradle-plugin/src/test/resources/functionalTest/messagingProject/gradle/wrapper/gradle-wrapper.properties delete mode 100755 spring-cloud-contract-verifier-gradle-plugin/src/test/resources/functionalTest/messagingProject/gradlew delete mode 100755 spring-cloud-contract-verifier-gradle-plugin/src/test/resources/functionalTest/messagingProject/gradlew.bat delete mode 100644 spring-cloud-contract-verifier-gradle-plugin/src/test/resources/functionalTest/messagingProject/repository/mappings/a_foo.groovy delete mode 100644 spring-cloud-contract-verifier-gradle-plugin/src/test/resources/functionalTest/messagingProject/repository/mappings/bookDeleted.groovy delete mode 100644 spring-cloud-contract-verifier-gradle-plugin/src/test/resources/functionalTest/messagingProject/repository/mappings/bookReturned1.groovy delete mode 100644 spring-cloud-contract-verifier-gradle-plugin/src/test/resources/functionalTest/messagingProject/repository/mappings/bookReturned2.groovy delete mode 100644 spring-cloud-contract-verifier-gradle-plugin/src/test/resources/functionalTest/messagingProject/settings.gradle delete mode 100644 spring-cloud-contract-verifier-gradle-plugin/src/test/resources/functionalTest/messagingProject/src/main/groovy/org/springframework/cloud/samples/book/BookDeleted.groovy delete mode 100644 spring-cloud-contract-verifier-gradle-plugin/src/test/resources/functionalTest/messagingProject/src/main/groovy/org/springframework/cloud/samples/book/BookListener.groovy delete mode 100644 spring-cloud-contract-verifier-gradle-plugin/src/test/resources/functionalTest/messagingProject/src/main/groovy/org/springframework/cloud/samples/book/BookReturned.groovy delete mode 100644 spring-cloud-contract-verifier-gradle-plugin/src/test/resources/functionalTest/messagingProject/src/main/groovy/org/springframework/cloud/samples/book/BookService.groovy delete mode 100644 spring-cloud-contract-verifier-gradle-plugin/src/test/resources/functionalTest/messagingProject/src/main/groovy/org/springframework/cloud/samples/book/IntegrationMessagingApplication.groovy delete mode 100644 spring-cloud-contract-verifier-gradle-plugin/src/test/resources/functionalTest/messagingProject/src/main/resources/integration-context.xml delete mode 100644 spring-cloud-contract-verifier-gradle-plugin/src/test/resources/functionalTest/messagingProject/src/test/groovy/org/springframework/cloud/samples/book/MessagingBaseSpec.groovy delete mode 100644 spring-cloud-contract-verifier-gradle-plugin/src/test/resources/functionalTest/messagingProject/src/test/java/org/springframework/cloud/samples/book/MessagingBaseTest.java diff --git a/samples/samples-standalone/build.gradle b/samples/samples-standalone/build.gradle deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/samples/samples-standalone/contract-verifier-sample-stream-source/build.gradle b/samples/samples-standalone/contract-verifier-sample-stream-source/build.gradle index 6d2d8e9dfc..106ead2c0c 100644 --- a/samples/samples-standalone/contract-verifier-sample-stream-source/build.gradle +++ b/samples/samples-standalone/contract-verifier-sample-stream-source/build.gradle @@ -50,10 +50,10 @@ dependencies { compile("org.springframework.boot:spring-boot-starter-web") compile("org.springframework.boot:spring-boot-starter-actuator") compile("org.springframework.cloud:spring-cloud-starter-stream-rabbit") - compile("org.springframework.cloud:spring-cloud-contract-verifier-stream:${findProperty('verifierVersion') ?: verifierVersion}") - testRuntime "org.spockframework:spock-spring" + testCompile("org.springframework.cloud:spring-cloud-contract-verifier-stream:${findProperty('verifierVersion') ?: verifierVersion}") testCompile "org.spockframework:spock-core" + testCompile "org.spockframework:spock-spring" testCompile "org.springframework:spring-test" testCompile "com.jayway.restassured:spring-mock-mvc:2.9.0" testCompile "junit:junit" diff --git a/samples/samples-standalone/contract-verifier-sample-stream-source/src/test/java/com/example/source/SensorSourceTestBase.java b/samples/samples-standalone/contract-verifier-sample-stream-source/src/test/java/com/example/source/SensorSourceTestBase.java index eaeae4a67d..2a533e4d44 100644 --- a/samples/samples-standalone/contract-verifier-sample-stream-source/src/test/java/com/example/source/SensorSourceTestBase.java +++ b/samples/samples-standalone/contract-verifier-sample-stream-source/src/test/java/com/example/source/SensorSourceTestBase.java @@ -19,6 +19,7 @@ package com.example.source; 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.AutoConfigureContractVerifierMessaging; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; /** @@ -30,6 +31,7 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; */ @RunWith(SpringJUnit4ClassRunner.class) @SpringBootTest(classes = ContractVerifierSampleStreamSourceApplication.class, properties="spring.cloud.stream.bindings.output.destination=sensor-data") +@AutoConfigureContractVerifierMessaging public abstract class SensorSourceTestBase { @Autowired diff --git a/spring-cloud-contract-verifier-gradle-plugin/build.gradle b/spring-cloud-contract-verifier-gradle-plugin/build.gradle index f9728a0c3c..1d65bfc339 100644 --- a/spring-cloud-contract-verifier-gradle-plugin/build.gradle +++ b/spring-cloud-contract-verifier-gradle-plugin/build.gradle @@ -24,7 +24,7 @@ ext { ] } -project.version = findProperty('contractVerifierVersion') ?: '1.0.0.BUILD-SNAPSHOT' +project.version = findProperty('verifierVersion') ?: '1.0.0.BUILD-SNAPSHOT' apply from: "$rootDir/gradle/release.gradle" apply plugin: 'groovy' apply plugin: 'eclipse' @@ -96,7 +96,7 @@ dependencies { } task archiveContractVerifierGradlePluginLibsDependencies(type: Sync) { - from configurations.contractVerifierGradlePluginLibs.resolvedConfiguration.resolvedArtifacts.collect { it.file } + from configurations.contractVerifierGradlePluginLibs.resolvedConfiguration.resolvedArtifacts.collect { it.file } + configurations.messagingLibs.resolvedConfiguration.resolvedArtifacts.collect { it.file } into contractVerifierGradlePluginLibsDir } diff --git a/spring-cloud-contract-verifier-gradle-plugin/src/test/groovy/org/springframework/cloud/contract/verifier/plugin/MessagingProjectSpec.groovy b/spring-cloud-contract-verifier-gradle-plugin/src/test/groovy/org/springframework/cloud/contract/verifier/plugin/MessagingProjectSpec.groovy deleted file mode 100755 index 9f63a1b29c..0000000000 --- a/spring-cloud-contract-verifier-gradle-plugin/src/test/groovy/org/springframework/cloud/contract/verifier/plugin/MessagingProjectSpec.groovy +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright 2013-2016 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.cloud.contract.verifier.plugin - -import spock.lang.Stepwise - -@Stepwise -class MessagingProjectSpec extends ContractVerifierIntegrationSpec { - - def setup() { - setupForProject("functionalTest/messagingProject") - runTasksSuccessfully('clean') //delete accidental output when previously importing SimpleBoot into Idea to tweak it - } - - def "should pass basic flow for Spock"() { - given: - assert fileExists('build.gradle') - expect: - runTasksSuccessfully('check', "publishToMavenLocal") - jarContainsContractVerifierContracts('build/libs') - } - - def "should pass basic flow for JUnit"() { - given: - runTasksSuccessfully('clean') - assert fileExists('build.gradle') - expect: - switchToJunitTestFramework('org.springframework.cloud.samples.book.MessagingBaseSpec', 'org.springframework.cloud.samples.book.MessagingBaseTest') - runTasksSuccessfully('check', "publishToMavenLocal") - jarContainsContractVerifierContracts('build/libs') - } - -} diff --git a/spring-cloud-contract-verifier-gradle-plugin/src/test/resources/functionalTest/bootSimple/gradle.properties b/spring-cloud-contract-verifier-gradle-plugin/src/test/resources/functionalTest/bootSimple/gradle.properties index 7c325172fd..41a991011b 100644 --- a/spring-cloud-contract-verifier-gradle-plugin/src/test/resources/functionalTest/bootSimple/gradle.properties +++ b/spring-cloud-contract-verifier-gradle-plugin/src/test/resources/functionalTest/bootSimple/gradle.properties @@ -14,7 +14,7 @@ # limitations under the License. # -groupId=org.springframework.cloud.contract.verifier +groupId=org.springframework.cloud.testprojects jacksonMapper=1.9.13 restAssuredVersion=2.4.0 springVersion=4.1.7.RELEASE diff --git a/spring-cloud-contract-verifier-gradle-plugin/src/test/resources/functionalTest/bootSimple/gradle/wrapper/gradle-wrapper.jar b/spring-cloud-contract-verifier-gradle-plugin/src/test/resources/functionalTest/bootSimple/gradle/wrapper/gradle-wrapper.jar old mode 100755 new mode 100644 index c97a8bdb9088d370da7e88784a7a093b971aa23a..ca78035ef0501d802d4fc55381ef2d5c3ce0ec6e GIT binary patch delta 26890 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∾Hwph`q6XJ90V4;K5or?w32XunoP`!2TU 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 delta 24370 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

-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 KHh)P{I6jE diff --git a/spring-cloud-contract-verifier-gradle-plugin/src/test/resources/functionalTest/bootSimple/gradle/wrapper/gradle-wrapper.properties b/spring-cloud-contract-verifier-gradle-plugin/src/test/resources/functionalTest/bootSimple/gradle/wrapper/gradle-wrapper.properties index f510690c32..a98ef8b6cd 100755 --- a/spring-cloud-contract-verifier-gradle-plugin/src/test/resources/functionalTest/bootSimple/gradle/wrapper/gradle-wrapper.properties +++ b/spring-cloud-contract-verifier-gradle-plugin/src/test/resources/functionalTest/bootSimple/gradle/wrapper/gradle-wrapper.properties @@ -19,4 +19,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-2.12-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-2.14-bin.zip diff --git a/spring-cloud-contract-verifier-gradle-plugin/src/test/resources/functionalTest/messagingProject/build.gradle b/spring-cloud-contract-verifier-gradle-plugin/src/test/resources/functionalTest/messagingProject/build.gradle deleted file mode 100644 index 222f9b241c..0000000000 --- a/spring-cloud-contract-verifier-gradle-plugin/src/test/resources/functionalTest/messagingProject/build.gradle +++ /dev/null @@ -1,80 +0,0 @@ -buildscript { - repositories { - mavenLocal() - mavenCentral() - } -} - -apply plugin: 'groovy' -apply plugin: 'contract-verifier' -apply plugin: 'maven-publish' - -group = 'org.springframework.cloud.testprojects' - -ext { - contractsDir = file("repository/mappings") - stubsOutputDirRoot = file("${project.buildDir}/production/${project.name}-stubs/") - targetFramework = 'Spock' -} - -configurations { - all { - resolutionStrategy { - eachDependency { DependencyResolveDetails details -> - // To prevent an accidental usage of groovy-all.jar and groovy.jar in different versions - // all modularized Groovy jars are replaced with groovy-all.jar by default. - if (details.requested.group == 'org.codehaus.groovy' && details.requested.name != "groovy-all") { - details.useTarget("org.codehaus.groovy:groovy-all:${details.requested.version}") - } - } - } - } -} - -repositories { - mavenCentral() - mavenLocal() - maven { - url "http://repo.spring.io/snapshot" - } - maven { - url "http://repo.spring.io/milestone" - } -} - -dependencies { - compile "org.codehaus.groovy:groovy-all:2.4.5" - compile "org.springframework.boot:spring-boot-starter-web:${springBootVersion}" - compile "org.springframework.boot:spring-boot-starter-actuator:${springBootVersion}" - compile "org.springframework.boot:spring-boot-starter-integration:${springBootVersion}" - - compile fileTree(dir: messagingLibsDir, include: '*.jar') - - testCompile "org.spockframework:spock-spring:1.0-groovy-2.4" - testCompile "org.springframework.boot:spring-boot-starter-test:${springBootVersion}" - testCompile "ch.qos.logback:logback-classic:1.1.2" - testCompile 'com.jayway.restassured:spring-mock-mvc:2.9.0' // needed if you're going to use Spring MockMvc -} - -contractVerifier { - //baseClassForTests = 'org.springframework.cloud.samples.book.MessagingBaseTest' - baseClassForTests = 'org.springframework.cloud.samples.book.MessagingBaseSpec' - basePackageForTests = 'contracts' - //targetFramework = 'JUnit' - targetFramework = 'Spock' - contractsDslDir = contractsDir -// generatedTestSourcesDir = file("${project.rootDir}/src/test/groovy/") - stubsOutputDir = stubsOutputDirRoot -} - -generateContractTests.dependsOn generateWireMockClientStubs - -wrapper { - gradleVersion '2.12' -} - -test { - testLogging { - exceptionFormat = 'full' - } -} diff --git a/spring-cloud-contract-verifier-gradle-plugin/src/test/resources/functionalTest/messagingProject/gradle.properties b/spring-cloud-contract-verifier-gradle-plugin/src/test/resources/functionalTest/messagingProject/gradle.properties deleted file mode 100644 index 7293ee6bc8..0000000000 --- a/spring-cloud-contract-verifier-gradle-plugin/src/test/resources/functionalTest/messagingProject/gradle.properties +++ /dev/null @@ -1,22 +0,0 @@ -# -# Copyright 2013-2016 the original author or authors. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -groupId=org.springframework.cloud -jacksonMapper=1.9.13 -restAssuredVersion=2.9.0 -springVersion=4.2.3.RELEASE - -springBootVersion=1.3.3.RELEASE \ No newline at end of file diff --git a/spring-cloud-contract-verifier-gradle-plugin/src/test/resources/functionalTest/messagingProject/gradle/wrapper/gradle-wrapper.jar b/spring-cloud-contract-verifier-gradle-plugin/src/test/resources/functionalTest/messagingProject/gradle/wrapper/gradle-wrapper.jar deleted file mode 100755 index 2c6137b87896c8f70315ae454e00a969ef5f6019..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 53639 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 F{{tUq7iIte diff --git a/spring-cloud-contract-verifier-gradle-plugin/src/test/resources/functionalTest/messagingProject/gradle/wrapper/gradle-wrapper.properties b/spring-cloud-contract-verifier-gradle-plugin/src/test/resources/functionalTest/messagingProject/gradle/wrapper/gradle-wrapper.properties deleted file mode 100755 index 7f6620ddcf..0000000000 --- a/spring-cloud-contract-verifier-gradle-plugin/src/test/resources/functionalTest/messagingProject/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,22 +0,0 @@ -# -# Copyright 2013-2016 the original author or authors. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -#Sun Apr 17 20:31:11 CEST 2016 -distributionBase=GRADLE_USER_HOME -distributionPath=wrapper/dists -zipStoreBase=GRADLE_USER_HOME -zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-2.12-bin.zip diff --git a/spring-cloud-contract-verifier-gradle-plugin/src/test/resources/functionalTest/messagingProject/gradlew b/spring-cloud-contract-verifier-gradle-plugin/src/test/resources/functionalTest/messagingProject/gradlew deleted file mode 100755 index 9d82f78915..0000000000 --- a/spring-cloud-contract-verifier-gradle-plugin/src/test/resources/functionalTest/messagingProject/gradlew +++ /dev/null @@ -1,160 +0,0 @@ -#!/usr/bin/env bash - -############################################################################## -## -## Gradle start up script for UN*X -## -############################################################################## - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS="" - -APP_NAME="Gradle" -APP_BASE_NAME=`basename "$0"` - -# Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD="maximum" - -warn ( ) { - echo "$*" -} - -die ( ) { - echo - echo "$*" - echo - exit 1 -} - -# OS specific support (must be 'true' or 'false'). -cygwin=false -msys=false -darwin=false -case "`uname`" in - CYGWIN* ) - cygwin=true - ;; - Darwin* ) - darwin=true - ;; - MINGW* ) - msys=true - ;; -esac - -# Attempt to set APP_HOME -# Resolve links: $0 may be a link -PRG="$0" -# Need this for relative symlinks. -while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi -done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >/dev/null -APP_HOME="`pwd -P`" -cd "$SAVED" >/dev/null - -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar - -# Determine the Java command to use to start the JVM. -if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" - else - JAVACMD="$JAVA_HOME/bin/java" - fi - if [ ! -x "$JAVACMD" ] ; then - die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -else - JAVACMD="java" - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." -fi - -# Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then - MAX_FD_LIMIT=`ulimit -H -n` - if [ $? -eq 0 ] ; then - if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then - MAX_FD="$MAX_FD_LIMIT" - fi - ulimit -n $MAX_FD - if [ $? -ne 0 ] ; then - warn "Could not set maximum file descriptor limit: $MAX_FD" - fi - else - warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" - fi -fi - -# For Darwin, add options to specify how the application appears in the dock -if $darwin; then - GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" -fi - -# For Cygwin, switch paths to Windows format before running java -if $cygwin ; then - APP_HOME=`cygpath --path --mixed "$APP_HOME"` - CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` - JAVACMD=`cygpath --unix "$JAVACMD"` - - # We build the pattern for arguments to be converted via cygpath - ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` - SEP="" - for dir in $ROOTDIRSRAW ; do - ROOTDIRS="$ROOTDIRS$SEP$dir" - SEP="|" - done - OURCYGPATTERN="(^($ROOTDIRS))" - # Add a user-defined pattern to the cygpath arguments - if [ "$GRADLE_CYGPATTERN" != "" ] ; then - OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" - fi - # Now convert the arguments - kludge to limit ourselves to /bin/sh - i=0 - for arg in "$@" ; do - CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` - CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option - - if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition - eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` - else - eval `echo args$i`="\"$arg\"" - fi - i=$((i+1)) - done - case $i in - (0) set -- ;; - (1) set -- "$args0" ;; - (2) set -- "$args0" "$args1" ;; - (3) set -- "$args0" "$args1" "$args2" ;; - (4) set -- "$args0" "$args1" "$args2" "$args3" ;; - (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; - esac -fi - -# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules -function splitJvmOpts() { - JVM_OPTS=("$@") -} -eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS -JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" - -exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" diff --git a/spring-cloud-contract-verifier-gradle-plugin/src/test/resources/functionalTest/messagingProject/gradlew.bat b/spring-cloud-contract-verifier-gradle-plugin/src/test/resources/functionalTest/messagingProject/gradlew.bat deleted file mode 100755 index 5f192121eb..0000000000 --- a/spring-cloud-contract-verifier-gradle-plugin/src/test/resources/functionalTest/messagingProject/gradlew.bat +++ /dev/null @@ -1,90 +0,0 @@ -@if "%DEBUG%" == "" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS= - -set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto init - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto init - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:init -@rem Get command-line arguments, handling Windows variants - -if not "%OS%" == "Windows_NT" goto win9xME_args -if "%@eval[2+2]" == "4" goto 4NT_args - -:win9xME_args -@rem Slurp the command line arguments. -set CMD_LINE_ARGS= -set _SKIP=2 - -:win9xME_args_slurp -if "x%~1" == "x" goto execute - -set CMD_LINE_ARGS=%* -goto execute - -:4NT_args -@rem Get arguments from the 4NT Shell from JP Software -set CMD_LINE_ARGS=%$ - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% - -:end -@rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega diff --git a/spring-cloud-contract-verifier-gradle-plugin/src/test/resources/functionalTest/messagingProject/repository/mappings/a_foo.groovy b/spring-cloud-contract-verifier-gradle-plugin/src/test/resources/functionalTest/messagingProject/repository/mappings/a_foo.groovy deleted file mode 100644 index 476aa94eb3..0000000000 --- a/spring-cloud-contract-verifier-gradle-plugin/src/test/resources/functionalTest/messagingProject/repository/mappings/a_foo.groovy +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Copyright 2013-2016 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import org.springframework.cloud.contract.spec.Contract - -Contract.make { - request { - url '/foo' - method 'GET' - } - response { - status 200 - body 'bar' - } -} \ No newline at end of file diff --git a/spring-cloud-contract-verifier-gradle-plugin/src/test/resources/functionalTest/messagingProject/repository/mappings/bookDeleted.groovy b/spring-cloud-contract-verifier-gradle-plugin/src/test/resources/functionalTest/messagingProject/repository/mappings/bookDeleted.groovy deleted file mode 100644 index 4f7ca765f5..0000000000 --- a/spring-cloud-contract-verifier-gradle-plugin/src/test/resources/functionalTest/messagingProject/repository/mappings/bookDeleted.groovy +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright 2013-2016 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import org.springframework.cloud.contract.spec.Contract - -Contract.make { - label 'some_label' - input { - messageFrom('delete') - messageBody([ - bookName: 'foo' - ]) - messageHeaders { - header('sample', 'header') - } - assertThat('bookWasDeleted()') - } -} \ No newline at end of file diff --git a/spring-cloud-contract-verifier-gradle-plugin/src/test/resources/functionalTest/messagingProject/repository/mappings/bookReturned1.groovy b/spring-cloud-contract-verifier-gradle-plugin/src/test/resources/functionalTest/messagingProject/repository/mappings/bookReturned1.groovy deleted file mode 100644 index 302e1d11f2..0000000000 --- a/spring-cloud-contract-verifier-gradle-plugin/src/test/resources/functionalTest/messagingProject/repository/mappings/bookReturned1.groovy +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright 2013-2016 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import org.springframework.cloud.contract.spec.Contract - -Contract.make { - label 'some_label' - input { - triggeredBy('bookReturnedTriggered()') - } - outputMessage { - sentTo('output') - body('''{ "bookName" : "foo" }''') - headers { - header('BOOK-NAME', 'foo') - } - } -} \ No newline at end of file diff --git a/spring-cloud-contract-verifier-gradle-plugin/src/test/resources/functionalTest/messagingProject/repository/mappings/bookReturned2.groovy b/spring-cloud-contract-verifier-gradle-plugin/src/test/resources/functionalTest/messagingProject/repository/mappings/bookReturned2.groovy deleted file mode 100644 index c5a9919e99..0000000000 --- a/spring-cloud-contract-verifier-gradle-plugin/src/test/resources/functionalTest/messagingProject/repository/mappings/bookReturned2.groovy +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright 2013-2016 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import org.springframework.cloud.contract.spec.Contract - -Contract.make { - label 'some_label' - input { - messageFrom('input') - messageBody([ - bookName: 'foo' - ]) - messageHeaders { - header('sample', 'header') - } - } - outputMessage { - sentTo('output') - body([ - bookName: 'foo' - ]) - headers { - header('BOOK-NAME', 'foo') - } - } -} \ No newline at end of file diff --git a/spring-cloud-contract-verifier-gradle-plugin/src/test/resources/functionalTest/messagingProject/settings.gradle b/spring-cloud-contract-verifier-gradle-plugin/src/test/resources/functionalTest/messagingProject/settings.gradle deleted file mode 100644 index f452413fb1..0000000000 --- a/spring-cloud-contract-verifier-gradle-plugin/src/test/resources/functionalTest/messagingProject/settings.gradle +++ /dev/null @@ -1,17 +0,0 @@ -/* - * Copyright 2013-2016 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -rootProject.name='bootSimple' diff --git a/spring-cloud-contract-verifier-gradle-plugin/src/test/resources/functionalTest/messagingProject/src/main/groovy/org/springframework/cloud/samples/book/BookDeleted.groovy b/spring-cloud-contract-verifier-gradle-plugin/src/test/resources/functionalTest/messagingProject/src/main/groovy/org/springframework/cloud/samples/book/BookDeleted.groovy deleted file mode 100644 index 3d9e527fb5..0000000000 --- a/spring-cloud-contract-verifier-gradle-plugin/src/test/resources/functionalTest/messagingProject/src/main/groovy/org/springframework/cloud/samples/book/BookDeleted.groovy +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright 2013-2016 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.cloud.samples.book - -import com.fasterxml.jackson.annotation.JsonCreator -import groovy.transform.CompileStatic - -@CompileStatic -class BookDeleted { - final String bookName - - @JsonCreator(mode = JsonCreator.Mode.PROPERTIES) - BookDeleted(String bookName) { - this.bookName = bookName - } -} diff --git a/spring-cloud-contract-verifier-gradle-plugin/src/test/resources/functionalTest/messagingProject/src/main/groovy/org/springframework/cloud/samples/book/BookListener.groovy b/spring-cloud-contract-verifier-gradle-plugin/src/test/resources/functionalTest/messagingProject/src/main/groovy/org/springframework/cloud/samples/book/BookListener.groovy deleted file mode 100644 index 6399b53a79..0000000000 --- a/spring-cloud-contract-verifier-gradle-plugin/src/test/resources/functionalTest/messagingProject/src/main/groovy/org/springframework/cloud/samples/book/BookListener.groovy +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright 2013-2016 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.cloud.samples.book - -import groovy.transform.CompileStatic -import groovy.util.logging.Slf4j -import org.springframework.messaging.Message -import org.springframework.messaging.MessageHeaders -import org.springframework.messaging.support.MessageBuilder - -import java.util.concurrent.atomic.AtomicBoolean - -@CompileStatic -@Slf4j -class BookListener { - - /** - Scenario for "should generate tests triggered by a message": - client side: if sends a message to input.messageFrom then message will be sent to output.messageFrom - server side: will send a message to input, verify the message contents and await upon receiving message on the output messageFrom - */ - Message returnBook(BookReturned bookReturned) { - log.info("Returning book [$bookReturned]") - return MessageBuilder.createMessage(bookReturned, new MessageHeaders([ - 'BOOK-NAME': bookReturned.bookName as Object - ])) - } - - /** - Scenario for "should generate tests triggered by a message": - client side: if sends a message to input.messageFrom then message will be sent to output.messageFrom - server side: will send a message to input, verify the message contents and await upon receiving message on the output messageFrom - */ - void bookDeleted(BookDeleted bookDeleted) { - log.info("Deleting book [$bookDeleted]") - bookSuccessfulyDeleted.set(true) - } - - AtomicBoolean bookSuccessfulyDeleted = new AtomicBoolean(false) -} diff --git a/spring-cloud-contract-verifier-gradle-plugin/src/test/resources/functionalTest/messagingProject/src/main/groovy/org/springframework/cloud/samples/book/BookReturned.groovy b/spring-cloud-contract-verifier-gradle-plugin/src/test/resources/functionalTest/messagingProject/src/main/groovy/org/springframework/cloud/samples/book/BookReturned.groovy deleted file mode 100644 index 22353e827f..0000000000 --- a/spring-cloud-contract-verifier-gradle-plugin/src/test/resources/functionalTest/messagingProject/src/main/groovy/org/springframework/cloud/samples/book/BookReturned.groovy +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright 2013-2016 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.cloud.samples.book - -import com.fasterxml.jackson.annotation.JsonCreator -import groovy.transform.CompileStatic - -@CompileStatic -class BookReturned { - final String bookName - - @JsonCreator(mode = JsonCreator.Mode.PROPERTIES) - BookReturned(String bookName) { - this.bookName = bookName - } -} diff --git a/spring-cloud-contract-verifier-gradle-plugin/src/test/resources/functionalTest/messagingProject/src/main/groovy/org/springframework/cloud/samples/book/BookService.groovy b/spring-cloud-contract-verifier-gradle-plugin/src/test/resources/functionalTest/messagingProject/src/main/groovy/org/springframework/cloud/samples/book/BookService.groovy deleted file mode 100644 index b44a36a834..0000000000 --- a/spring-cloud-contract-verifier-gradle-plugin/src/test/resources/functionalTest/messagingProject/src/main/groovy/org/springframework/cloud/samples/book/BookService.groovy +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright 2013-2016 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.cloud.samples.book - -import groovy.transform.CompileStatic -import groovy.util.logging.Slf4j -import org.springframework.beans.factory.annotation.Autowired -import org.springframework.beans.factory.annotation.Qualifier -import org.springframework.messaging.MessageChannel -import org.springframework.messaging.MessageHeaders -import org.springframework.messaging.support.MessageBuilder -import org.springframework.stereotype.Service - -@Service -@CompileStatic -@Slf4j -class BookService { - - @Autowired @Qualifier("outputChannel") MessageChannel outputChannel - - /** - Scenario for "should generate tests triggered by a method": - client side: must have a possibility to "trigger" sending of a message to the given messageFrom - server side: will run the method and await upon receiving message on the output messageFrom - - Method triggers sending a message to a source - */ - void returnBook(BookReturned bookReturned) { - log.info("Returning book [$bookReturned]") - outputChannel.send(MessageBuilder.createMessage(bookReturned, new MessageHeaders([ - 'BOOK-NAME': bookReturned.bookName as Object - ]))) - } -} diff --git a/spring-cloud-contract-verifier-gradle-plugin/src/test/resources/functionalTest/messagingProject/src/main/groovy/org/springframework/cloud/samples/book/IntegrationMessagingApplication.groovy b/spring-cloud-contract-verifier-gradle-plugin/src/test/resources/functionalTest/messagingProject/src/main/groovy/org/springframework/cloud/samples/book/IntegrationMessagingApplication.groovy deleted file mode 100644 index e7345c64c8..0000000000 --- a/spring-cloud-contract-verifier-gradle-plugin/src/test/resources/functionalTest/messagingProject/src/main/groovy/org/springframework/cloud/samples/book/IntegrationMessagingApplication.groovy +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright 2013-2016 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.cloud.samples.book - -import org.springframework.boot.SpringApplication -import org.springframework.boot.autoconfigure.SpringBootApplication -import org.springframework.context.annotation.ImportResource -import org.springframework.web.bind.annotation.RequestMapping -import org.springframework.web.bind.annotation.RestController - -@SpringBootApplication -@RestController -@ImportResource("classpath*:integration-context.xml") -class IntegrationMessagingApplication { - - @RequestMapping("/foo") - String foo() { - return "bar" - } - - static void main(String[] args) { - SpringApplication.run(IntegrationMessagingApplication.class, args) - } -} diff --git a/spring-cloud-contract-verifier-gradle-plugin/src/test/resources/functionalTest/messagingProject/src/main/resources/integration-context.xml b/spring-cloud-contract-verifier-gradle-plugin/src/test/resources/functionalTest/messagingProject/src/main/resources/integration-context.xml deleted file mode 100644 index f29045cdb2..0000000000 --- a/spring-cloud-contract-verifier-gradle-plugin/src/test/resources/functionalTest/messagingProject/src/main/resources/integration-context.xml +++ /dev/null @@ -1,56 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/spring-cloud-contract-verifier-gradle-plugin/src/test/resources/functionalTest/messagingProject/src/test/groovy/org/springframework/cloud/samples/book/MessagingBaseSpec.groovy b/spring-cloud-contract-verifier-gradle-plugin/src/test/resources/functionalTest/messagingProject/src/test/groovy/org/springframework/cloud/samples/book/MessagingBaseSpec.groovy deleted file mode 100644 index 778cb9e0d4..0000000000 --- a/spring-cloud-contract-verifier-gradle-plugin/src/test/resources/functionalTest/messagingProject/src/test/groovy/org/springframework/cloud/samples/book/MessagingBaseSpec.groovy +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright 2013-2016 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.cloud.samples.book - -import org.springframework.beans.factory.annotation.Autowired -import org.springframework.boot.test.SpringApplicationContextLoader -import org.springframework.cloud.contract.verifier.messaging.boot.AutoConfigureContractVerifierMessaging; -import org.springframework.test.context.ContextConfiguration -import spock.lang.Specification -import com.jayway.restassured.module.mockmvc.RestAssuredMockMvc - -/** - * @author Marcin Grzejszczak - */ -@ContextConfiguration(classes = [IntegrationMessagingApplication], loader = SpringApplicationContextLoader) -@AutoConfigureContractVerifierMessaging -abstract class MessagingBaseSpec extends Specification { - - // BASE CLASS WOULD HAVE THIS: - - @Autowired BookService bookService - @Autowired BookListener bookListener - - def setup() { - RestAssuredMockMvc.standaloneSetup(new IntegrationMessagingApplication()) - } - - void bookReturnedTriggered() { - bookService.returnBook(new BookReturned("foo")) - } - - void bookWasDeleted() { - assert bookListener.bookSuccessfulyDeleted.get() - } -} diff --git a/spring-cloud-contract-verifier-gradle-plugin/src/test/resources/functionalTest/messagingProject/src/test/java/org/springframework/cloud/samples/book/MessagingBaseTest.java b/spring-cloud-contract-verifier-gradle-plugin/src/test/resources/functionalTest/messagingProject/src/test/java/org/springframework/cloud/samples/book/MessagingBaseTest.java deleted file mode 100644 index 2cc4aa8abb..0000000000 --- a/spring-cloud-contract-verifier-gradle-plugin/src/test/resources/functionalTest/messagingProject/src/test/java/org/springframework/cloud/samples/book/MessagingBaseTest.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright 2013-2016 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.cloud.samples.book; - -import org.assertj.core.api.Assertions; -import org.junit.runner.RunWith; -import org.junit.Before; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.SpringApplicationContextLoader; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; -import com.jayway.restassured.module.mockmvc.RestAssuredMockMvc; - -/** - * @author Marcin Grzejszczak - */ -@RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration(classes = {IntegrationMessagingApplication.class}, loader = SpringApplicationContextLoader.class) -public abstract class MessagingBaseTest { - - // BASE CLASS WOULD HAVE THIS: - - @Autowired BookService bookService; - @Autowired BookListener bookListener; - - @Before - public void setup() { - RestAssuredMockMvc.standaloneSetup(new IntegrationMessagingApplication()); - } - - public void bookReturnedTriggered() { - bookService.returnBook(new BookReturned("foo")); - } - - public void bookWasDeleted() { - Assertions.assertThat(bookListener.getBookSuccessfulyDeleted().get()).isTrue(); - } -}