Refactor RequiredIfNot custom validator, add tests

This commit is contained in:
Montana
2019-01-15 16:44:31 -05:00
parent 5d4fee9546
commit ae494d3bb5
6 changed files with 16213 additions and 26 deletions

View File

@@ -6,6 +6,7 @@ import alembic.command
from logging.config import dictConfig
from werkzeug.datastructures import FileStorage
from tempfile import TemporaryDirectory
from collections import OrderedDict
from atst.app import make_app, make_config
from atst.database import db as _db
@@ -84,14 +85,17 @@ def session(db, request):
class DummyForm(dict):
pass
def __init__(self, data=OrderedDict(), errors=(), raw_data=None):
self._fields = data
self.errors = list(errors)
class DummyField(object):
def __init__(self, data=None, errors=(), raw_data=None):
def __init__(self, data=None, errors=(), raw_data=None, name=None):
self.data = data
self.errors = list(errors)
self.raw_data = raw_data
self.name = name
@pytest.fixture
@@ -99,6 +103,15 @@ def dummy_form():
return DummyForm()
@pytest.fixture
def dummy_form_with_field():
def set_field(name, value):
data = DummyField(data=value, name=name)
return DummyForm(data=OrderedDict({name: data}))
return set_field
@pytest.fixture
def dummy_field():
return DummyField()

View File

@@ -1,7 +1,13 @@
from wtforms.validators import ValidationError
import pytest
from wtforms.validators import ValidationError, StopValidation
import pytest, copy
from atst.forms.validators import Name, IsNumber, PhoneNumber, ListItemsUnique
from atst.forms.validators import (
Name,
IsNumber,
PhoneNumber,
ListItemsUnique,
RequiredIfNot,
)
class TestIsNumber:
@@ -73,3 +79,32 @@ class TestListItemsUnique:
dummy_field.data = invalid
with pytest.raises(ValidationError):
validator(dummy_form, dummy_field)
class TestRequiredIfNot:
def test_RequiredIfNot_requires_field_if_arg_is_falsy(
self, dummy_form_with_field, dummy_field
):
form = dummy_form_with_field("arg", False)
validator = RequiredIfNot("arg")
dummy_field.data = None
with pytest.raises(ValidationError):
validator(form, dummy_field)
def test_RequiredIfNot_does_not_require_field_if_arg_is_truthy(
self, dummy_form_with_field, dummy_field
):
form = dummy_form_with_field("arg", True)
validator = RequiredIfNot("arg")
dummy_field.data = None
with pytest.raises(StopValidation):
validator(form, dummy_field)
def test_RequiredIfNot_arg_is_None_raises_error(self, dummy_form, dummy_field):
validator = RequiredIfNot("arg")
dummy_field.data = "some data"
with pytest.raises(Exception):
validator(dummy_form, dummy_field)