# Gradle plugin to verify a provider
Gradle plugin for verifying pacts against a provider.
The Gradle plugin creates a task `pactVerify` to your build which will verify all configured pacts against your provider.
__*Important Note: Any properties that need to be set when using the Gradle plugin need to be provided with `-P` and
not `-D` as with the other Pact-JVM modules!*__
## To Use It
### For Gradle versions 2.1+
```groovy
plugins {
id "au.com.dius.pact" version "4.1.0"
}
```
### For Gradle versions prior to 2.1
#### 1.1. Add the gradle jar file to your build script class path:
```groovy
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'au.com.dius.pact.provider:gradle:4.1.0'
}
}
```
#### 1.2. Apply the pact plugin
```groovy
apply plugin: 'au.com.dius.pact'
```
### 2. Define the pacts between your consumers and providers
```groovy
pact {
serviceProviders {
// You can define as many as you need, but each must have a unique name
provider1 {
// All the provider properties are optional, and have sensible defaults (shown below)
protocol = 'http'
host = 'localhost'
port = 8080
path = '/'
// Again, you can define as many consumers for each provider as you need, but each must have a unique name
hasPactWith('consumer1') {
// currently supports a file path using file() or a URL using url()
pactSource = file('path/to/provider1-consumer1-pact.json')
}
// Or if you have many pact files in a directory
hasPactsWith('manyConsumers') {
// Will define a consumer for each pact file in the directory.
// Consumer name is read from contents of pact file
pactFileLocation = file('path/to/pacts')
}
}
}
}
```
### 3. Execute `gradle pactVerify`
# Project Properties
The following project properties can be specified with `-Pproperty=value` on the command line:
|Property|Description|
|--------|-----------|
|`pact.showStacktrace`|This turns on stacktrace printing for each request. It can help with diagnosing network errors|
|`pact.showFullDiff`|This turns on displaying the full diff of the expected versus actual bodies|
|`pact.filter.consumers`|Comma seperated list of consumer names to verify|
|`pact.filter.description`|Only verify interactions whose description match the provided regular expression|
|`pact.filter.providerState`|Only verify interactions whose provider state match the provided regular expression. An empty string matches interactions that have no state|
|`pact.filter.pacturl`|This filter allows just the just the changed pact specified in a webhook to be run. It should be used in conjunction with `pact.filter.consumers` |
|`pact.verifier.publishResults`|Publishing of verification results will be skipped unless this property is set to 'true'|
|`pact.verifier.ignoreNoConsumers`|If set to `true`, don't fail the build if there are no consumers to verify [4.1.19+]|
The following project properties must be specified as system properties:
|Property|Description|
|--------|-----------|
|`pact.verifier.disableUrlPathDecoding`|Disables decoding of request paths|
|`pact.pactbroker.httpclient.usePreemptiveAuthentication`|Enables preemptive authentication with the pact broker when set to `true`|
|`pact.provider.tag`|Sets the provider tag to push before publishing verification results (can use a comma separated list)|
|`pact.provider.branch`|Sets the provider branch to push before publishing verification results|
|`pact.content_type.override.<TYPE>.<SUBTYPE>=<VAL>` where `<VAL>` may be `text`, `json` or `binary`|Overrides the handling of a particular content type [4.1.3+]|
|`pact.ve