lollipop-hypothesis

Library to generate random test data using Hypothesis based on Lollipop schema


Keywords
lollipop, hypothesis
License
MIT
Install
pip install lollipop-hypothesis==0.1

Documentation

lollipop-hypothesis

License: MIT Build Status PyPI

Library to generate random test data using Hypothesis based on Lollipop schema.

Example

from collections import namedtuple
import lollipop.types as lt
import lollipop.validators as lv
import string

EMAIL_REGEXP = r"^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]{2,}\.[a-zA-Z0-9-.]{2,}$"
Email = lt.validated_type(lt.String, 'Email', lv.Regexp(EMAIL_REGEXP))

User = namedtuple('User', ['name', 'email', 'age'])

USER = lt.Object({
    'name': lt.String(validate=lv.Length(min=1)),
    'email': Email(),
    'age': lt.Optional(lt.Integer(validate=lv.Range(min=18))),
}, constructor=User)

import hypothesis as h
import hypothesis.strategies as hs
import lollipop_hypothesis as lh

# Write a test using data generation strategy based on Lollipop schema
@h.given(lh.type_strategy(USER))
def test_can_register_any_valid_user(user):
    register(user)

# Configure custom strategy for Email type
lh.register(
    Email,
    lambda _, type, context=None: \
        hs.tuples(
            hs.text('abcdefghijklmnopqrstuvwxyz'
                    'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
                    '0123456789'
                    '_.+-', min_size=1),
            hs.lists(
                hs.text('abcdefghijklmnopqrstuvwxyz'
                        'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
                        '0123456789', min_size=2),
                min_size=2,
                average_size=3,
            )
        ).map(lambda (name, domain_parts): name + '@' + '.'.join(domain_parts)),
)

# Or configure custom strategy for the whole type instance
lh.register(
    USER,
    lambda registry, type, context=None: \
        hs.builds(
            User,
            name=hs.text(min_size=1),
            email=registry.convert(Email(), context),
            age=hs.integers(min_value=0, max_value=100),
        )
)

Installation

$ pip install lollipop-hypothesis

# install optional package for regex support
$ pip install lollipop-hypothesis[regex]

Requirements

Project Links

License

MIT licensed. See the bundled LICENSE file for more details.