Do not allow negative weights on users (Fixes #362)

This commit is contained in:
Alexis Métaireau 2018-08-05 16:31:20 +02:00
parent 5c46e19aaa
commit ef7f1f94c5
4 changed files with 25 additions and 6 deletions

View file

@ -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):

View file

@ -74,6 +74,9 @@ msgstr ""
msgid "Weight"
msgstr ""
msgid "Weights should be positive"
msgstr ""
msgid "Add"
msgstr ""

View file

@ -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('<p class="alert alert-danger">', 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")

View file

@ -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"