uldissturms / cdc

Consumer Driven Contracts - mock provider for consumer and verify contracts against provider
MIT License
1 stars 1 forks source link
consumer-driven-contracts

Consumer Driven Contracts (CDC)

wercker status Coverage Status Code Climate Standard - JavaScript Style Guide Gitter

CDC provides a way to define mock provider for consumer and verify contracts against provider. It is written in JavaScript, however can be run in any setup using docker.

Getting started

Using docker-compose

version: '2'
services:
  api:
    build:
      context: .
    depends_on:
      - dependency
    command: npm start
  dependency:
    image: uldissturms/cdc
    volumes:
      - ./contracts/dependency:/usr/app/src/contracts
    command: mock
    ports:
      - "3000:3000"

Where ./contracts/dependency contains index.js that describes contract.

./contracts
└── dependency
    └── index.js

Using docker

docker run -p 3000:3000 -v ${PWD}/contracts:/usr/app/src/contracts uldissturms/cdc mock ./contracts/simple

Using npm

npm i cdc
./node_modules/.bin/cdc mock ./contracts/simple
./node_modules/.bin/cdc verify ./contracts/simple --baseUrl http://localhost:3000

Contracts

Simple contract with schema validation

const joi = require('joi')

module.exports = {
  name: 'simple request/response schema',
  request: {
    path: '/api/simple-schema',
    method: 'POST',
    headers: {
      'content-type': 'application/json'
    },
    body: {
      hello: 'world'
    },
    bodySchema: joi.object().keys({
      hello: joi.string()
    })
  },
  response: {
    body: {
      id: 12345
    },
    bodySchema: joi.object().keys({
      id: joi.number().integer()
    })
  }
}

Response

curl localhost:3000/api/simple-schema -H 'content-type: application/json' -d '{"hello": "world"}'
{"id": 12345}

Usage

Why I wrote my own

request response
consumer verify schema mock
provider request verify schema

Options

Examples

For more examples take a look at contracts in ./contracts used for tests.

Libraries used

Influences

Further reading

Licence

MIT