import pytest import factory from collections import namedtuple from wtforms import Form, fields from werkzeug.datastructures import ImmutableMultiDict from pydantic_form import PydanticForm from pydantic import BaseModel ScenarioClasses = namedtuple("ScenarioClasses", ['wtf_form', 'pydantic_form', 'schema', 'data_factory']) ScenarioInstances = namedtuple("ScenarioInstances", ['wtf_form', 'pydantic_form', 'formdata', 'data']) class SimpleSchema(BaseModel): integer: int string: str class SimpleWTForm(Form): _schema = SimpleSchema integer = fields.IntegerField() string = fields.StringField() class SimpleForm(SimpleWTForm, PydanticForm): _schema = SimpleSchema class SimpleFormDataFactory(factory.Factory): class Meta: model = dict integer = factory.Faker('pyint') string = factory.Faker('pystr') @pytest.fixture(scope="session") def scenario_classes_simple(): return ScenarioClasses(SimpleWTForm, SimpleForm, SimpleSchema, SimpleFormDataFactory) @pytest.fixture(scope="session") def instance_factory(): def _factory(scenario_classes): data = scenario_classes.data_factory() return ScenarioInstances( scenario_classes.wtf_form(data=data), scenario_classes.pydantic_form(data=data), ImmutableMultiDict(data), data ) return _factory @pytest.fixture(scope="session") def scenario_instance_simple(instance_factory, scenario_classes_simple): return instance_factory(scenario_classes_simple)