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 details)

Uploaded Source

Built Distribution

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

Uploaded Python 2 Python 3

File details

Details for the file lollipop-hypothesis-0.2.tar.gz.

File metadata

File hashes

Hashes for lollipop-hypothesis-0.2.tar.gz
Algorithm Hash digest
SHA256 0d8297a89e486037e0908b6dfe7ed1b4475a5642d2cbc48552a174d9a22d9ad1
MD5 3be38f4bcc9c1220a2e7a2e77b70df04
BLAKE2b-256 30591c7e8f0db3ae2437db3bcca96e18beebaf3d8f1900ca9587ec72e70a42e6

See more details on using hashes here.

File details

Details for the file lollipop_hypothesis-0.2-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for lollipop_hypothesis-0.2-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 4f97297fbd7d86cb8c814f42535389a8743b43c84b20497465c3b8448bd6e039
MD5 69eb89e51151b8a70a2b6205cf77bce1
BLAKE2b-256 d2233b7b5cc5ab64cc096c4bcc61e15b7a91d14ba14f0d9f95267a1074a9eeda

See more details on using hashes here.

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