Metadata-Version: 2.4
Name: contractual
Version: 0.4.6
Summary: Contractual provides a method for verifying the function of mocks across modules and projects
Home-page: https://gitlab.com/pjbecotte/contractual
Author: Paul Becotte
Author-email: pjbecotte@gmail.com
Keywords: contract test pact verify
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: Topic :: Software Development :: Testing
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3.7
Requires-Python: >=3.7, <4
Description-Content-Type: text/markdown
Dynamic: author
Dynamic: author-email
Dynamic: classifier
Dynamic: description
Dynamic: description-content-type
Dynamic: home-page
Dynamic: keywords
Dynamic: requires-python
Dynamic: summary

# Contractual
[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/python/black)
[![pipeline status](https://gitlab.com/pjbecotte/contractual/badges/master/pipeline.svg)](https://gitlab.com/pjbecotte/contractual/commits/master)
[![coverage report](https://gitlab.com/pjbecotte/contractual/badges/master/coverage.svg)](https://gitlab.com/pjbecotte/contractual/commits/master)

## Installation

`pip install contractual`


## Use

how to use-

## Contract Files

Contract files comply with the Pact file format seen at
https://github.com/pact-foundation/pact-specification/tree/version-2
There is a key difference though-

Contractual supports mocking out arbitrary interfaces, while Pact limits itself
to http requests. As such, a Contractual file can only be used with a Pact verifier
if you limit the unchecked mocks to `HttpContractMock`. In the files themselves,
you will see a list of interactions having the form


```json
{
    "description": "get all users for max",
    "request": {},
    "response": {},
    "providerState": "a user with an id named 'u:ser' exists"
}
```

        

That is a valid HTTP contract. A more general `ContractMock` contract would have the
form


```json
{
    "description": "get all users for max",
    "contractMock": {
        "contractName": "Name",
        "args": []
    },
    "response": {},
    "providerState": "a user with an id named 'user' exists"
}
```

## Development

### Development Environment

Poetry is used to manage the project and dependencies. Once you have poetry installed 
`pip install --user poetry`, you can run `poetry install` to setup a virtaulenv for
your project. Dependencies can be updated using `poetry add` or `poetry remove` and
committing the updated pyproject.toml and poetry.lock files.

### Release

CI is handled on Gitlab at https://gitlab.com/pjbecotte/contractual. There is a make
target to create a new release by tagging a new version and then incrementing to the
next beta version. (This requires permissions to push to master)
