From 37b5c8d4db1e21978120c185b2ce61730f164778 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..c04bd87 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: + if getattr(e, 'message_dict', None): + errors = [ + _('Invalid file format. (%s: %s, line %d)') % (label, u', '.join(errors), i + 1) + for label, errors in e.message_dict.items()] + else: + errors = [_('Invalid file format. (%s, line %d)') % (error, i + 1) for error in e] + 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