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.core import SelectField, SelectMultipleField
from wtforms.fields.html5 import DateField, DecimalField from wtforms.fields.html5 import DateField, DecimalField
from wtforms.fields.simple import PasswordField, SubmitField, TextAreaField, StringField 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_babel import lazy_gettext as _
from flask import request from flask import request
from werkzeug.security import generate_password_hash from werkzeug.security import generate_password_hash
@ -149,9 +149,11 @@ class BillForm(FlaskForm):
class MemberForm(FlaskForm): class MemberForm(FlaskForm):
name = StringField(_("Name"), validators=[Required()]) 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")) submit = SubmitField(_("Add"))
def __init__(self, project, edit=False, *args, **kwargs): def __init__(self, project, edit=False, *args, **kwargs):

View file

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

View file

@ -619,6 +619,18 @@ class BudgetTestCase(IhatemoneyTestCase):
resp = self.client.get("/raclette/") resp = self.client.get("/raclette/")
self.assertNotIn('extra-info', resp.data.decode('utf-8')) 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): def test_rounding(self):
self.post_project("raclette") self.post_project("raclette")

View file

@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PROJECT VERSION\n" "Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\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" "PO-Revision-Date: 2018-05-15 22:00+0200\n"
"Last-Translator: Adrien CLERC <>\n" "Last-Translator: Adrien CLERC <>\n"
"Language: fr\n" "Language: fr\n"
@ -16,7 +16,7 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n" "Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.5.3\n" "Generated-By: Babel 2.6.0\n"
msgid "Project name" msgid "Project name"
msgstr "Nom de projet" msgstr "Nom de projet"
@ -98,6 +98,9 @@ msgstr "Nom"
msgid "Weight" msgid "Weight"
msgstr "Parts" msgstr "Parts"
msgid "Weights should be positive"
msgstr "Les parts doivent être positives"
msgid "Add" msgid "Add"
msgstr "Ajouter" msgstr "Ajouter"
@ -488,4 +491,3 @@ msgstr "Solde"
#~ msgid "Invite" #~ msgid "Invite"
#~ msgstr "Invitez" #~ msgstr "Invitez"