Projet

Général

Profil

0001-manager-fix-handling-duplicated-slug-in-event-import.patch

Valentin Deniaud, 11 juin 2020 18:11

Télécharger (2,95 ko)

Voir les différences:

Subject: [PATCH] manager: fix handling duplicated slug in event import
 (#43947)

 chrono/manager/forms.py |  7 +++++++
 chrono/manager/views.py |  2 --
 tests/test_manager.py   | 12 ++++++++++++
 3 files changed, 19 insertions(+), 2 deletions(-)
chrono/manager/forms.py
295 295
            dialect = None
296 296

  
297 297
        events = []
298
        slugs = set()
298 299
        for i, csvline in enumerate(csv.reader(content.splitlines(), dialect=dialect)):
299 300
            if not csvline:
300 301
                continue
......
335 336
            exclude = ['desk', 'meeting_type']
336 337
            if len(csvline) >= 6:
337 338
                event.slug = force_text(csvline[5]) if csvline[5] else None
339
                if event.slug and event.slug in slugs:
340
                    raise ValidationError(
341
                        _('File contains duplicated event identifiers: %s') % event.slug
342
                    )
343
                else:
344
                    slugs.add(event.slug)
338 345
            else:
339 346
                exclude += ['slug']
340 347
            column_index = 7
chrono/manager/views.py
1120 1120
        if form.events:
1121 1121
            for event in form.events:
1122 1122
                event.agenda_id = self.kwargs['pk']
1123
                if event.slug and Event.objects.filter(agenda_id=event.agenda_id, slug=event.slug).exists():
1124
                    raise ValidationError(_('Duplicated event identifier'))
1125 1123
                event.save()
1126 1124
            messages.info(self.request, _('%d events have been imported.') % len(form.events))
1127 1125
        return super(AgendaImportEventsView, self).form_valid(form)
tests/test_manager.py
1137 1137
    assert 'value cannot be a number' in resp.text
1138 1138
    assert 'Identifier:' in resp.text  # verbose_name is shown, not field name ('slug:')
1139 1139

  
1140
    # handle duplicated slug
1141
    Event.objects.all().delete()
1142
    resp = app.get('/manage/agendas/%s/import-events' % agenda.id, status=200)
1143
    resp.form['events_csv_file'] = Upload(
1144
        't.csv',
1145
        b'2016-09-16,18:00,10,5,label,slug\n'
1146
        b'2016-09-16,18:00,10,5,label,slug\n',
1147
        'text/csv',
1148
    )
1149
    resp = resp.form.submit(status=200)
1150
    assert 'duplicated event identifiers' in resp.text
1151

  
1140 1152

  
1141 1153
def test_add_meetings_agenda(app, admin_user):
1142 1154
    app = login(app)
1143
-