## Spring Cloud Contract Maven Plugin

## More Complex Plugin Configuration

Sample more complex configuration for Java Project with JUnit tests.

### Project configuration for Spring Cloud Contract Verifier with JUnit tests and stub publishing

                            <plugin>
                                    <groupId>org.springframework.cloud</groupId>
                                    <artifactId>spring-cloud-contract-maven-plugin</artifactId>
                                    <version>${spring-cloud-verifier-plugin.version}</version>
                                    <executions>
                                            <execution>
                                                    <goals>
                                                            <goal>convert</goal>
                                                            <goal>generateStubs</goal>
                                                            <goal>generateTests</goal>
                                                    </goals>
                                                    <configuration>
                                                            <contractsDirectory>src/test/contracts</contractsDirectory>
                                                            <basePackageForTests>
                                                                    com.blogspot.toomuchcoding.frauddetection
                                                            </basePackageForTests>
                                                            <testMode>MOCKMVC</testMode>
                                                            <testFramework>JUNIT</testFramework>
                                                            <classifier>stubs</classifier>
                                                            <nameSuffixForTests>Test</nameSuffixForTests>
                                                            <ruleClassForTests>org.junit.rules.ErrorCollector
                                                            </ruleClassForTests>
                                                            <staticImports>
                                                                    <staticImport>
                                                                            com.blogspot.toomuchcoding.frauddetection.matchers.CustomMatchers.*
                                                                    </staticImport>
                                                            </staticImports>
                                                            <imports>
                                                                    <import>
                                                                            com.blogspot.toomuchcoding.frauddetection.matchers.CustomMatchers
                                                                    </import>
                                                            </imports>
                                                            <ignoredFiles>
                                                                    <ignoredFile>broken**</ignoredFile>
                                                            </ignoredFiles>
                                                            <excludedFiles>
                                                                    <param>shouldMarkClientAsFraud.groovy</param>
                                                            </excludedFiles>
                                                    </configuration>
                                            </execution>
                                    </executions>
                                    <configuration>
                                            <baseClassForTests>
                                                    com.blogspot.toomuchcoding.frauddetection.BaseAccurest
                                            </baseClassForTests>
                                    </configuration>
                            </plugin>

### Base Test class

    /*
     * Copyright 2013-2019 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
     *
     *      https://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 com.blogspot.toomuchcoding.frauddetection;

    import io.restassured.module.mockmvc.RestAssuredMockMvc;
    import org.junit.Before;

    public class BaseAccurest {

            @Before
            public void setup() {
                    RestAssuredMockMvc.standaloneSetup(new FraudDetectionController());
            }

    }

### Sample additional matcher

    /*
     * Copyright 2013-2019 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
     *
     *      https://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 com.blogspot.toomuchcoding.frauddetection.matchers;

    import org.junit.Assert;

    public class CustomMatchers {

            public static void assertThatRejectionReasonIsNull(String rejectionReason) {
                    Assert.assertNull(rejectionReason);
            }

    }

### Sample contract using matcher

    /*
     * Copyright 2013-2019 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
     *
     *      https://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.
     */ org.springframework.cloud.contract.spec.Contract.make {
            request {
                    method 'PUT'
                    url '/fraudcheck'
                    body("""
                                                    {
                                                    "clientPesel":"${
                            value(consumer(regex('[0-9]{10}')), producer('1234567890'))
                    }",
                                                    "loanAmount":123.123
                                                    }
                                            """
                    )
                    headers {
                            header('Content-Type', 'application/vnd.fraud.v1+json')
                    }

            }
            response {
                    status OK()
                    body(
                                    fraudCheckStatus: "OK",
                                    rejectionReason: $(consumer(null),
                                                    producer(execute('assertThatRejectionReasonIsNull($it)')))
                    )
                    headers {
                            header('Content-Type': 'application/vnd.fraud.v1+json')
                    }
            }

    }

### Project source code

https://github.com/Codearte/accurest-maven-plugin/tree/master/spring-cloud-contract-tools/spring-cloud-contract-maven-plugin/src/test/projects/complex-configuration

### More samples

You can check out the Spring Cloud Contract Samples project for more examples of Maven plugin setup.