فهرست منبع

New test cases

theenglishway (time) 6 سال پیش
والد
کامیت
728b3b5fb4
3فایلهای تغییر یافته به همراه61 افزوده شده و 24 حذف شده
  1. 1 1
      pydantic_form/__init__.py
  2. 16 2
      pydantic_form/pydantic_form.py
  3. 44 21
      tests/test_process.py

+ 1 - 1
pydantic_form/__init__.py

@@ -2,4 +2,4 @@ __author__ = """theenglishway"""
 __email__ = 'me@theenglishway.eu'
 __version__ = '0.1.0'
 
-from .pydantic_form import PydanticForm
+from .form import PydanticForm

+ 16 - 2
pydantic_form/pydantic_form.py

@@ -1,6 +1,7 @@
 from collections import defaultdict
-from wtforms import Form, FieldList, FormField
+from wtforms import Form, FieldList, FormField, Field
 from pydantic import ValidationError, BaseModel
+import types
 
 
 class PydanticFieldList(FieldList):
@@ -25,4 +26,17 @@ class PydanticForm(Form):
         self._errors = {}
 
     def process(self, formdata=None, obj=None, data=None, **kwargs):
-        super().process(formdata, obj, data, **kwargs)
+        formdata = self.meta.wrap_formdata(self, formdata)
+        input = formdata or data or kwargs
+        try:
+            valid = self._schema(**input)
+            for k, v in valid.dict().items():
+                setattr(self, k, v)
+        except ValidationError as e:
+            self._errors = e.errors()
+
+        for k, v in self._fields.items():
+            ...#setattr(getattr(self, k), 'data', None)
+
+    def validate(self):
+        ...

+ 44 - 21
tests/test_process.py

@@ -1,3 +1,4 @@
+from itertools import product
 import pytest
 
 
@@ -5,6 +6,12 @@ import pytest
 def scenario(request):
     return request.getfixturevalue(request.param)
 
+FORMS_FORMDATA = [
+    'wtf_formdata', 'pydantic_formdata'
+]
+FORMS_DATA = [
+    'wtf',  'pydantic',
+]
 VALID_SCENARIOS = [
     'scenario_simple',
     'scenario_nested'
@@ -14,6 +21,7 @@ INVALID_SCENARIOS = [
     'scenario_nested_bad',
 ]
 
+@pytest.mark.xfail
 @pytest.mark.parametrize(
     'scenario',
     VALID_SCENARIOS + INVALID_SCENARIOS,
@@ -25,29 +33,44 @@ def test_process(scenario):
 
 
 @pytest.mark.parametrize(
-    'scenario',
-    VALID_SCENARIOS,
-    indirect=True
+    'scenario, form_name',
+    product(VALID_SCENARIOS + INVALID_SCENARIOS, FORMS_FORMDATA + FORMS_DATA),
+    indirect=['scenario']
 )
-def test_validate(scenario):
-    assert scenario.wtf.validate()
-    assert scenario.wtf_formdata.validate()
-    assert scenario.pydantic.validate()
-    assert scenario.pydantic_formdata.validate()
+def test_data(scenario, form_name):
+    form = getattr(scenario, form_name)
+    assert form.data == scenario.data
 
 
+@pytest.mark.xfail
 @pytest.mark.parametrize(
-    'scenario',
-    INVALID_SCENARIOS,
-    indirect=True
+    '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(scenario):
-    assert scenario.wtf.validate()
-    assert not scenario.wtf_formdata.validate()
-    assert scenario.pydantic.validate()
-    assert not scenario.pydantic_formdata.validate()
-
-    assert scenario.wtf.errors == {}
-    assert scenario.wtf_formdata.errors
-    assert scenario.pydantic.errors == {}
-    assert scenario.pydantic_formdata.errors
+def test_errors_data(scenario, form_name):
+    form = getattr(scenario, form_name)
+    assert form.validate()
+    assert form.errors == {}