| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- from itertools import product
- from werkzeug.datastructures import ImmutableMultiDict
- from pydantic_form.translator import *
- from pydantic_form.utils import recursive_get
- import pytest
- @pytest.fixture
- def data(request, scenario):
- return getattr(scenario.data_factory, request.param)()
- SCENARIOS = [
- 'scenario_simple',
- 'scenario_nested',
- 'scenario_double_nested'
- ]
- @pytest.mark.parametrize(
- 'kwargs_factory',
- [
- lambda data: {'data': data},
- lambda data: {'formdata': ImmutableMultiDict(data)},
- lambda data: data,
- ], ids=[
- 'data', 'formdata', 'kwargs'
- ]
- )
- @pytest.mark.parametrize(
- 'data',
- ['valid', 'bad'],
- indirect=True
- )
- @pytest.mark.parametrize(
- 'scenario',
- SCENARIOS,
- indirect=True
- )
- def test_process_data(scenario, data, kwargs_factory):
- form = scenario.form()
- kwargs = kwargs_factory(data)
- form.process(**kwargs)
- assert form.data == data
- @pytest.mark.parametrize(
- 'data',
- ['valid'],
- indirect=True
- )
- @pytest.mark.parametrize(
- 'scenario',
- SCENARIOS,
- indirect=True
- )
- def test_validate_valid(scenario, data):
- form = scenario.form(data=data)
- assert form.validate()
- form = scenario.form()
- form.process(data=data)
- assert form.validate()
- @pytest.mark.parametrize(
- 'data',
- ['bad'],
- indirect=True
- )
- @pytest.mark.parametrize(
- 'scenario',
- SCENARIOS,
- indirect=True
- )
- def test_validate_bad(scenario, data):
- form = scenario.form(data=data)
- assert not form.validate()
- form = scenario.form()
- form.process(data=data)
- assert not form.validate()
- @pytest.mark.parametrize(
- 'data',
- ['valid'],
- indirect=True
- )
- @pytest.mark.parametrize(
- 'scenario',
- SCENARIOS,
- indirect=True
- )
- def test_errors_valid(scenario, data):
- form = scenario.form(data=data)
- assert form.errors == {}
- @pytest.mark.parametrize(
- 'data, errors_factory',
- [
- ('bad', lambda s: s.errors.bad),
- ('missing', lambda s: s.errors.missing),
- ],
- indirect=['data']
- )
- @pytest.mark.parametrize(
- 'scenario',
- SCENARIOS,
- indirect=True
- )
- def test_errors_invalid(scenario, data, errors_factory):
- form = scenario.form(data=data)
- form.validate()
- assert form.errors
- for k, error in errors_factory(scenario).items():
- assert recursive_get(form.errors, *k)[0]['type'] == error
|