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'