diff --git a/ihatemoney/forms.py b/ihatemoney/forms.py index de9004d5..c818b75b 100644 --- a/ihatemoney/forms.py +++ b/ihatemoney/forms.py @@ -2,7 +2,7 @@ from flask_wtf.form import FlaskForm from wtforms.fields.core import SelectField, SelectMultipleField from wtforms.fields.html5 import DateField, DecimalField from wtforms.fields.simple import PasswordField, SubmitField, TextAreaField, StringField -from wtforms.validators import Email, Required, ValidationError, EqualTo +from wtforms.validators import Email, Required, ValidationError, EqualTo, NumberRange from flask_babel import lazy_gettext as _ from flask import request from werkzeug.security import generate_password_hash @@ -149,9 +149,11 @@ class BillForm(FlaskForm): class MemberForm(FlaskForm): - name = StringField(_("Name"), validators=[Required()]) - weight = CommaDecimalField(_("Weight"), default=1) + + wieght_validators = [NumberRange(min=0.1, message=_("Weights should be positive"))] + weight = CommaDecimalField(_("Weight"), default=1, + validators=weight_validators) submit = SubmitField(_("Add")) def __init__(self, project, edit=False, *args, **kwargs): diff --git a/ihatemoney/messages.pot b/ihatemoney/messages.pot index bc8a8f39..a47740e1 100644 --- a/ihatemoney/messages.pot +++ b/ihatemoney/messages.pot @@ -74,6 +74,9 @@ msgstr "" msgid "Weight" msgstr "" +msgid "Weights should be positive" +msgstr "" + msgid "Add" msgstr "" diff --git a/ihatemoney/tests/tests.py b/ihatemoney/tests/tests.py index fd72a8da..6fbd6f93 100644 --- a/ihatemoney/tests/tests.py +++ b/ihatemoney/tests/tests.py @@ -619,6 +619,18 @@ class BudgetTestCase(IhatemoneyTestCase): resp = self.client.get("/raclette/") self.assertNotIn('extra-info', resp.data.decode('utf-8')) + def test_negative_weight(self): + self.post_project("raclette") + + # Add one user and edit it to have a negative share + self.client.post("/raclette/members/add", data={'name': 'alexis'}) + resp = self.client.post("/raclette/members/1/edit", data={'name': 'alexis', 'weight': -1}) + + # An error should be generated, and its weight should still be 1. + self.assertIn('
', resp.data.decode('utf-8')) + self.assertEqual(len(models.Project.query.get('raclette').members), 1) + self.assertEqual(models.Project.query.get('raclette').members[0].weight, 1) + def test_rounding(self): self.post_project("raclette") diff --git a/ihatemoney/translations/fr/LC_MESSAGES/messages.po b/ihatemoney/translations/fr/LC_MESSAGES/messages.po index ccab28b1..05dc6cf6 100644 --- a/ihatemoney/translations/fr/LC_MESSAGES/messages.po +++ b/ihatemoney/translations/fr/LC_MESSAGES/messages.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2018-07-16 23:26+0200\n" +"POT-Creation-Date: 2018-08-05 16:21+0200\n" "PO-Revision-Date: 2018-05-15 22:00+0200\n" "Last-Translator: Adrien CLERC <>\n" "Language: fr\n" @@ -16,7 +16,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.5.3\n" +"Generated-By: Babel 2.6.0\n" msgid "Project name" msgstr "Nom de projet" @@ -98,6 +98,9 @@ msgstr "Nom" msgid "Weight" msgstr "Parts" +msgid "Weights should be positive" +msgstr "Les parts doivent ĂȘtre positives" + msgid "Add" msgstr "Ajouter" @@ -488,4 +491,3 @@ msgstr "Solde" #~ msgid "Invite" #~ msgstr "Invitez" -