Example Java Provider - RestAssured
Source Code​
https://github.com/pactflow/example-bi-directional-provider-restassured
Overview of Example​
This is an example of a Spring boot "Product" API Provider that uses RestAssured, Pact, PactFlow and GitHub Actions to generate and publish Pact provider contracts.
It performs pre-deployment cross-compatability checks to ensure that it is compatible with specified consumers using the Bi-Directional contract capability of PactFlow.
See the full PactFlow Bi-Directional Workshop for which this can be substituted in as the "provider".
Overview of Part of Bi-Directional Contract Testing Flow​
In the following diagram, you can see how the provider testing process works.
When we call "can-i-deploy" the cross-contract validation process kicks off on PactFlow, to ensure any consumer consumes a valid subset of the OAS for the provider.
The project uses a Makefile to simulate a very simple build pipeline with two stages - test and deploy.
When you run the CI pipeline (see below for doing this), the pipeline should perform the following activities (simplified):
- Test
- Run tests to check spec compliance with openAPI spec
- Create branch tag via Pact CLI
- Publish openAPI spec, along with a version with the name of the current branch
- Check if we are safe to deploy to Production with
can-i-deploy
(ie. has the cross-contract validation has been successfully performed)
- Deploy (only from <main|master>)
- Deploy app to Production
- Record the Production deployment in the Pact Broker
Compatibile with Consumers​
This project is currently compatible with the following consumers(s):
- pactflow-example-bi-directional-consumer-nock
- pactflow-example-bi-directional-consumer-msw
- pactflow-example-bi-directional-consumer-wiremock
- pactflow-example-bi-directional-consumer-mountebank
Pre-requisites​
Software:
- Tools listed at: https://docs.pactflow.io/docs/workshops/ci-cd/set-up-ci/prerequisites/
- A pactflow.io account with an valid API token
Environment variables​
To be able to run some of the commands locally, you will need to export the following environment variables into your shell:
PACT_BROKER_TOKEN
: a valid API token for PactFlowPACT_BROKER_BASE_URL
: a fully qualified domain name with protocol to your pact broker e.g. https://testdemo.pactflow.io
Usage​
Steps​
make test
- run the tests locallymake fake_ci
- run the CI process, but locally
OS/Platform specific considerations​
The makefile is configured to run on Unix based systems such as you would find in most common CI/CD pipelines.
They can be run locally on Unix/Mac, or on Windows via WSL2.
Windows​
You can still try this example locally on Windows using powershell and running commands manually.
Click to see windows specific instructions here
Caveats​
Related topics / posts / discussions​
- Consumer Side Bi-Directional Contract Testing Guide
- Provider Side Bi-Directional Contract Testing Guide
Other examples of how to do this form of testing​
- https://hazelcast.com/blog/contract-first-development-using-restassured-and-openapi/
- https://www.openapi4j.org/operation-validator-adapters/spring.html
- https://springframework.guru/should-i-use-spring-rest-docs-or-openapi/
- https://github.com/OpenAPITools/openapi-generator (generate rest assured tests from spec)
Found an issue?​
Reach out via a GitHub Issue, or reach us over in the Pact foundation Slack