from itertools import product import pytest @pytest.fixture def scenario(request): return request.getfixturevalue(request.param) FORMS_FORMDATA = [ 'wtf_formdata', 'pydantic_formdata' ] FORMS_DATA = [ 'wtf', 'pydantic', ] VALID_SCENARIOS = [ 'scenario_simple', 'scenario_nested' ] INVALID_SCENARIOS = [ 'scenario_simple_bad', 'scenario_nested_bad', ] @pytest.mark.xfail @pytest.mark.parametrize( 'scenario', VALID_SCENARIOS + INVALID_SCENARIOS, indirect=True ) def test_process(scenario): assert scenario.wtf.data == scenario.pydantic.data assert scenario.wtf_formdata.data == scenario.pydantic_formdata.data @pytest.mark.parametrize( 'scenario, form_name', product(VALID_SCENARIOS + INVALID_SCENARIOS, FORMS_FORMDATA + FORMS_DATA), indirect=['scenario'] ) def test_data(scenario, form_name): form = getattr(scenario, form_name) assert form.data == scenario.data @pytest.mark.xfail @pytest.mark.parametrize( 'scenario, form_name', product(VALID_SCENARIOS, FORMS_FORMDATA + FORMS_DATA), indirect=['scenario'] ) def test_validate(scenario, form_name): form = getattr(scenario, form_name) assert form.validate() @pytest.mark.xfail @pytest.mark.parametrize( 'scenario, form_name', product(INVALID_SCENARIOS, FORMS_FORMDATA), indirect=['scenario'] ) def test_errors_formdata(scenario, form_name): form = getattr(scenario, form_name) assert not form.validate() assert form.errors @pytest.mark.xfail @pytest.mark.parametrize( 'scenario, form_name', product(INVALID_SCENARIOS, FORMS_DATA), indirect=['scenario'] ) def test_errors_data(scenario, form_name): form = getattr(scenario, form_name) assert form.validate() assert form.errors == {}