Files
protocol/apps-node/zippo

ZIPPO - ZeroEx Integrator Permission Provisioning Operator

Dev Setup

Note: Having a working docker installation is required.

Database

Start Postgres

Set up a local postgres database, and configure DATABASE_URL. The simplest way is to use the included docker-compose configuration in this repo to spin up a local postgres database for development. Run the following yarn task to start it:

yarn db:dev:start

This runs docker-compose to start a postgres server on port 5432, with persistent data by mapping the postgres data directory to the host machine. The above example would result in a DATABASE_URL of:

DATABASE_URL="postgresql://api:api@localhost:5432/api"

Migrate Database

To initialize/migrate your local database, change to the packages/integrator-db directory and run:

yarn db:migrate

Kong Setup

Note: The kong configuration is managed via a tool called deck. deck is used for establishing the baseline configuration as well as resetting the kong configuration before each integration test. Information on installing deck can be found at https://docs.konghq.com/deck/1.17.x/installation/.

Bootstrap Kong Database

Kong requires its own database and needs to be bootstrapped once before kong will start. After the postgres server is running from the previous steps, to bootstrap the kong database, from within the apps-node/zippo directory, run:

yarn kong:dev:bootstrap

Start Kong

The integration tests will automatically attempt to start kong, but you can start it manually with:

yarn kong:dev:start

Initialize Kong

Integration tests will automatically reset the kong configuration to the baseline configuration defined in kong/configs/kong_base.yml before each test.

Outside of integration tests, to (re-)configure kong with the known baseline configuration, run:

yarn kong:dev:configure

or to reset kong to a blank configuration, run:

yarn kong:dev:reset

Environment Configuration

Once postgres and kong are running, there are several .env files that need to be configured:

First is packages/integrator-db/.env, which only needs the single DATABASE_URL variable. This is used to perform database migration operations.

The second is apps-node/zippo/.env which also needs the same DATABASE_URL value, and can have other variables used by zippo. See .env.example for details. Generally, for development, it's usually ok to simply copy .env.example to .env.

Yarn Scripts

The following yarn script can be useful during development.

yarn dev:server - Run a development server, watching for changes.

yarn examples:basic - Run the basic example client.

yarn db:dev:start - Start the postgres container from the docker-compose file.

yarn kong:dev:start - Start the kong container from the docker-compose file.

yarn kong:dev:reset - Reset the local kong container to an empty kong configuration.

yarn kong:dev:configure - Reset the local kong container to the baseline kong configuration defined in kong/configs/kong_base.yml.

Testing

Tests are written using jest. There are two types of tests, unit tests and integration tests.

Unit tests have no external dependencies (such as kong or postgres) due to the use of mocks. Unit tests make use of the environment configuration defined in test.env. To run unit tests:

yarn test

Integration tests require access to a real postgres and kong server. See Dev Setup for details. Integration tests use the regular environment configuration (ie, .env or the existing shell environment). To run integration tests:

yarn test:integration