From 7142c0eb4275b98670914556d1aab777394c33cc Mon Sep 17 00:00:00 2001 From: Benjamin Dauvergne Date: Tue, 23 Jul 2019 16:30:30 +0200 Subject: [PATCH] manager: validate imported events (#35011) --- chrono/manager/forms.py | 10 ++++++++++ tests/test_manager.py | 4 ++++ 2 files changed, 14 insertions(+) diff --git a/chrono/manager/forms.py b/chrono/manager/forms.py index 24e080d..4d7d5ff 100644 --- a/chrono/manager/forms.py +++ b/chrono/manager/forms.py @@ -221,6 +221,16 @@ class ImportEventsForm(forms.Form): raise ValidationError(_('Invalid file format. (number of places in waiting list, line %d)') % (i+1)) if len(csvline) >= 5: event.label = ' '.join([force_text(x) for x in csvline[4:]]) + try: + event.full_clean(exclude=['agenda', 'desk', 'meeting_type']) + except ValidationError as e: + errors = [ + _('Invalid file format. (%(label)s: %(errors)s, line %(line)d)') % { + 'label': label, + 'errors': u', '.join(field_errors), + 'line': i + 1 + } for label, field_errors in e.message_dict.items()] + raise ValidationError(errors) events.append(event) self.events = events diff --git a/tests/test_manager.py b/tests/test_manager.py index 3ef4bb2..a9157b0 100644 --- a/tests/test_manager.py +++ b/tests/test_manager.py @@ -553,6 +553,10 @@ def test_import_events(app, admin_user): resp = resp.form.submit(status=200) assert 'Invalid file format. (number of places in waiting list,' in resp.text + resp.form['events_csv_file'] = Upload('t.csv', b'2016-09-16,18:00,10,5,' + b'x' * 151, 'text/csv') + resp = resp.form.submit(status=200) + assert 'Invalid file format. (label: Ensure this value has at most 150' in resp.text + resp = app.get('/manage/agendas/%s/import-events' % agenda.id, status=200) resp.form['events_csv_file'] = Upload('t.csv', b'2016-09-16,18:00,10', 'text/csv') resp = resp.form.submit(status=302) -- 2.22.0