Simple iOS Swift project for playing with Pact

PactTodo

Simple iOS Swift project for playing with Pact. Nothing fancy with UI yet

Server

Project uses Simple webapi server
Run it using following command:

$ json-server --watch db.json --routes routes.json

Todos service will be available at:

http://localhost:3000/todos/

Pact integration

To be able to create pact contracts, install Pact tools via

$ brew install pact-ruby-standalone

Pact mock service

For launching and stopping Pact mock service Scripts/start_service.sh and Scripts/stop_service.sh is used
PactTodo scheme invokes them using Test Pre- and Post- Actions

PactBroker

We are using Pact broker service hosted in the docker container. To configure and run it use following commands:

# Run the postgres container
docker run \
    --name pactbroker-db \
    -e POSTGRES_PASSWORD=ThePostgresPassword \
    -e POSTGRES_USER=admin \
    -e PGDATA=/var/lib/postgresql/data/pgdata \
    -v /var/lib/postgresql/data:/var/lib/postgresql/data \
    -d postgres


# connect to psql in the postgres container
docker run \
    -it \
    --link pactbroker-db:postgres \
    --rm postgres \
    sh -c 'exec psql -h "$POSTGRES_PORT_5432_TCP_ADDR" -p "$POSTGRES_PORT_5432_TCP_PORT" -U admin'


# Create pactbroker DB user and grant some access to him
CREATE USER pactbrokeruser WITH PASSWORD 'TheUserPassword';
CREATE DATABASE pactbroker WITH OWNER pactbrokeruser;
GRANT ALL PRIVILEGES ON DATABASE pactbroker TO pactbrokeruser;

# Run the pactbroker server
docker run \
    --name pactbroker \
    --link pactbroker-db:postgres \
    -e PACT_BROKER_DATABASE_USERNAME=pactbrokeruser \
    -e PACT_BROKER_DATABASE_PASSWORD=TheUserPassword \
    -e PACT_BROKER_DATABASE_HOST=postgres \
    -e PACT_BROKER_DATABASE_NAME=pactbroker \
    -d  \
    -p 9292:9292 \
    pactfoundation/pact-broker

Some examples how to work with the Pact Broker

# Publish Pact file
curl -v -X PUT \
    -H "Content-Type: application/json" \
    -T tmp/pacts/todosclient-todosapi.json \
    http://localhost:9292/pacts/provider/TodosAPI/consumer/TodosClient/version/0.0.1

# Get all participants
curl --location --request GET 'http://localhost:9292/pacticipants' \
--header 'Content-Type: application/json'

# Get concrete Pact
curl --location --request GET 'http://localhost:9292/pacts/provider/TodosAPI/consumer/TodosClient/version/2.0.0' \
--header 'Content-Type: application/json' 

GitHub

https://github.com/alounce/PactTodo