Просмотр исходного кода

Use the HTML5 DateField instead of a custom birthday field

Peter Justin 2 лет назад
Родитель
Сommit
8e48990f0e

+ 2 - 2
flaskbb/management/forms.py

@@ -22,6 +22,7 @@ from wtforms import (
     StringField,
     SubmitField,
     TextAreaField,
+    DateField
 )
 from wtforms_sqlalchemy.fields import QuerySelectField, QuerySelectMultipleField
 from wtforms.validators import (
@@ -37,7 +38,6 @@ from wtforms.validators import (
 from flaskbb.extensions import db
 from flaskbb.forum.models import Category, Forum
 from flaskbb.user.models import Group, User
-from flaskbb.utils.fields import BirthdayField
 from flaskbb.utils.helpers import check_image
 from flaskbb.utils.requirements import IsAtleastModerator
 
@@ -78,7 +78,7 @@ class UserForm(FlaskForm):
     password = PasswordField("Password", validators=[
         DataRequired()])
 
-    birthday = BirthdayField(_("Birthday"), format="%d %m %Y", validators=[
+    birthday = DateField(_("Birthday"), format="%d %m %Y", validators=[
         Optional()])
 
     gender = StringField(_("Gender"), validators=[Optional()])

+ 9 - 3
flaskbb/user/forms.py

@@ -11,7 +11,14 @@
 import logging
 
 from flask_babelplus import lazy_gettext as _
-from wtforms import PasswordField, SelectField, StringField, SubmitField, TextAreaField
+from wtforms import (
+    PasswordField,
+    SelectField,
+    StringField,
+    SubmitField,
+    TextAreaField,
+    DateField,
+)
 from wtforms.validators import (
     URL,
     DataRequired,
@@ -22,7 +29,6 @@ from wtforms.validators import (
     Optional,
 )
 
-from flaskbb.utils.fields import BirthdayField
 from flaskbb.utils.forms import FlaskBBForm
 
 from ..core.user.update import (
@@ -99,7 +105,7 @@ class ChangePasswordForm(FlaskBBForm):
 
 
 class ChangeUserDetailsForm(FlaskBBForm):
-    birthday = BirthdayField(_("Birthday"), format="%d %m %Y", validators=[Optional()])
+    birthday = DateField(_("Birthday"), format="%d %m %Y", validators=[Optional()])
     gender = StringField(_("Gender"), validators=[Optional()])
     location = StringField(_("Location"), validators=[Optional()])
     website = StringField(_("Website"), validators=[Optional(), URL()])

+ 2 - 2
tests/unit/user/test_controllers.py

@@ -136,7 +136,7 @@ class TestChangePasswordView(object):
             PasswordUpdate(old_password="password", new_password="newpassword"),
         )
 
-    def test_updates_user_password_fails_with_invalid_inpit(self, mocker, user):
+    def test_updates_user_password_fails_with_invalid_input(self, mocker, user):
         form = self.produce_form(
             old_password="password",
             new_password="newpassword",
@@ -314,7 +314,7 @@ class TestChangeUserDetailsView(object):
 
         view.post()
 
-        assert form.errors == {"birthday": ["Not a valid date value"]}
+        assert form.errors == {"birthday": ["Not a valid date value."]}
 
     def test_update_user_fails_with_stopvalidation(self, mocker):
         form = self.produce_form(birthday="25 04 2000")

+ 0 - 56
tests/unit/utils/test_fields.py

@@ -1,56 +0,0 @@
-"""Tests for the utils/fields.py file."""
-import pytest
-from wtforms.form import Form
-from flaskbb.utils.fields import SelectBirthdayWidget, BirthdayField
-
-
-def test_birthday_field():
-    class F(Form):
-        birthday = BirthdayField(format='%d %m %Y')
-
-    a = ["04 02 2015"]
-    b = ["None", "None", "2015"]  # this one should fail
-    c = ["None", "None", "None"]
-
-    form = F()
-
-    assert form.birthday.process_formdata(a) is None
-    assert form.birthday.process_formdata(c) is None
-
-    with pytest.raises(ValueError):
-        form.birthday.process_formdata(b)
-
-
-def test_select_birthday_widget():
-    """Test the SelectDateWidget."""
-
-    assert SelectBirthdayWidget.FORMAT_CHOICES['%d'] == [
-        (x, str(x)) for x in range(1, 32)
-    ]
-    assert SelectBirthdayWidget.FORMAT_CHOICES['%m'] == [
-        (x, str(x)) for x in range(1, 13)
-    ]
-
-    assert SelectBirthdayWidget.FORMAT_CLASSES == {
-        '%d': 'select_date_day',
-        '%m': 'select_date_month',
-        '%Y': 'select_date_year'
-    }
-
-    select_birthday_widget = SelectBirthdayWidget(years=[0, 1])
-
-    assert select_birthday_widget.FORMAT_CHOICES['%Y'] == [(0, '0'), (1, '1')]
-
-    class Field(object):
-        id = 'world'
-        name = 'helloWorld'
-        format = '%d %m %Y'
-        data = None
-
-    html = select_birthday_widget(field=Field(), surrounded_div="test-div")
-    assert 'world' in html
-    assert 'helloWorld' in html
-    assert 'class="select_date_day"' in html
-    assert 'class="select_date_month"' in html
-    assert 'class="select_date_year"' in html
-    assert '<div class="test-div">' in html