|
|
@@ -4,12 +4,12 @@ from collections import namedtuple
|
|
|
from wtforms import Form, fields
|
|
|
from werkzeug.datastructures import ImmutableMultiDict
|
|
|
from pydantic_form import PydanticForm
|
|
|
-from pydantic import BaseModel
|
|
|
+from pydantic import BaseModel, ValidationError
|
|
|
|
|
|
|
|
|
ScenarioClasses = namedtuple(
|
|
|
"ScenarioClasses",
|
|
|
- ['wtf_form', 'pydantic_form', 'schema', 'data_factory']
|
|
|
+ ['wtf_form', 'pydantic_form', 'schema', 'data_factory', 'bad_data_factory', 'keys']
|
|
|
)
|
|
|
|
|
|
ScenarioInstances = namedtuple(
|
|
|
@@ -17,7 +17,8 @@ ScenarioInstances = namedtuple(
|
|
|
[
|
|
|
'wtf', 'wtf_formdata',
|
|
|
'pydantic', 'pydantic_formdata',
|
|
|
- 'formdata', 'data'
|
|
|
+ 'formdata', 'data',
|
|
|
+ 'schema'
|
|
|
]
|
|
|
)
|
|
|
|
|
|
@@ -26,16 +27,22 @@ ScenarioInstances = namedtuple(
|
|
|
def instance_factory():
|
|
|
def _factory(scenario_classes, data):
|
|
|
formdata = ImmutableMultiDict(data)
|
|
|
+ try:
|
|
|
+ schema_instance = scenario_classes.schema(**data)
|
|
|
+ except ValidationError as e:
|
|
|
+ schema_instance = None
|
|
|
return ScenarioInstances(
|
|
|
scenario_classes.wtf_form(data=data),
|
|
|
scenario_classes.wtf_form(formdata=formdata),
|
|
|
scenario_classes.pydantic_form(data=data),
|
|
|
scenario_classes.pydantic_form(formdata=formdata),
|
|
|
formdata,
|
|
|
- data
|
|
|
+ data,
|
|
|
+ schema_instance
|
|
|
)
|
|
|
return _factory
|
|
|
|
|
|
+simple_keys = [('integer',), ('string',)]
|
|
|
|
|
|
class SimpleSchema(BaseModel):
|
|
|
integer: int
|
|
|
@@ -55,7 +62,12 @@ class SimpleForm(SimpleWTForm, PydanticForm):
|
|
|
|
|
|
@pytest.fixture(scope="session")
|
|
|
def scenario_classes_simple():
|
|
|
- return ScenarioClasses(SimpleWTForm, SimpleForm, SimpleSchema, SimpleDataFactory)
|
|
|
+ return ScenarioClasses(
|
|
|
+ SimpleWTForm, SimpleForm,
|
|
|
+ SimpleSchema,
|
|
|
+ SimpleDataFactory, SimpleBadDataFactory,
|
|
|
+ simple_keys
|
|
|
+ )
|
|
|
|
|
|
|
|
|
class SimpleDataFactory(factory.Factory):
|
|
|
@@ -83,6 +95,7 @@ def scenario_simple_bad(instance_factory, scenario_classes_simple):
|
|
|
return instance_factory(scenario_classes_simple, SimpleBadDataFactory())
|
|
|
|
|
|
|
|
|
+nested_keys = [('integer',), ('nested', 'integer'), ('nested', 'string')]
|
|
|
|
|
|
class NestedSchema(BaseModel):
|
|
|
integer: int
|
|
|
@@ -118,7 +131,12 @@ class NestedBadDataFactory(factory.Factory):
|
|
|
|
|
|
@pytest.fixture(scope="session")
|
|
|
def scenario_classes_nested():
|
|
|
- return ScenarioClasses(NestedWTForm, NestedForm, NestedSchema, NestedDataFactory)
|
|
|
+ return ScenarioClasses(
|
|
|
+ NestedWTForm, NestedForm,
|
|
|
+ NestedSchema,
|
|
|
+ NestedDataFactory, NestedBadDataFactory,
|
|
|
+ nested_keys
|
|
|
+ )
|
|
|
|
|
|
|
|
|
@pytest.fixture
|