Example Java GraphQL Provider

Source Code

https://github.com/pactflow/pactflow-example-provider-java-graphql

badge__2_.svg

can--i--deploy-main_to_production-brightgreen.svg: https://test.pactflow.io/overview/provider/pactflow-example-provider-java-graphql/consumer/pactflow-example-consumer-java-junit

pact_not_found-unknown-lightgrey.svg: https://test.pactflow.io/pacts/provider/pactflow-example-provider-java-graphql/consumer/pactflow-example-consumer-java-junit/latest (latest pact)

pact_not_found-unknown-lightgrey.svg: https://test.pactflow.io/pacts/provider/pactflow-example-provider-java-graphql/consumer/pactflow-example-consumer-java-junit/latest/prod (prod/prod pact)

This is an example of a Java Spring Boot GraphQL provider that uses Pact, API Hub for Contract Testing and GitHub Actions to ensure that it is compatible with the expectations its consumers have of it.

The project uses a Makefile to simulate a very simple build pipeline with two stages - test and deploy.

It is using a public tenant on API Hub for Contract Testing, which you can access here using the credentials dXfltyFMgNOFZAxr8io9wJ37iUpY42M/O5AIZWxelWbLvqMd8PkAVycBJh2Psyg1.

Project Phases

The project uses a Makefile to simulate a very simple build pipeline with two stages - test and deploy.

  • Test

    • Run tests (including the pact tests that generate the contract)

    • Publish pacts, tagging the consumer version with the name of the current branch

    • Check if we are safe to deploy to prod (ie. has the pact content been successfully verified)

  • Deploy (only from main)

    • Deploy app (just pretend for the purposes of this example!)

    • Tag the deployed consumer version as 'prod'

Dependencies

Usage

See the API Hub for Contract Testing CI/CD Workshop for further details.

The below commands are designed for a Linux/OSX environment, please translate for use on Windows/PowerShell as necessary:

Please ensure the following environment variables have been exported in the process that you run the tests (generally a terminal):

export PACT_BROKER_TOKEN=<your pactflow read/write token here>
export PACT_BROKER_BASE_URL=https://<your pactflow subdomain>.pactflow.io
export PACT_BROKER_HOST=<your pactflow subdomain>.pactflow.io

You can run the tests locally with:

make test

Simulating CI

Usually, you would integrate this into a real CI system (such as Buildkite/Jenkins/CircleCI etc., or GitHub Actions as this repository is built against).

You can simulate a CI process with the following command:

make fake_ci

Graphiql

Once you start the app (./gradlew bootRun) you can view the Graphiql interface and interact with the GraphQL server at http://localhost:8080/graphiql

Example query:

{
  product(id: 1) {
    id
    name
    type
  }
}
Publication date: