Skip to main content

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

Project description

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

License

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

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

lollipop-hypothesis-0.2.tar.gz (7.2 kB view hashes)

Uploaded Source

Built Distribution

lollipop_hypothesis-0.2-py2.py3-none-any.whl (7.1 kB view hashes)

Uploaded Python 2 Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page