manager: fix event & slug edition (#56851)

This commit is contained in:
Lauréline Guérin 2021-09-10 14:25:45 +02:00
parent 246e14e7e4
commit a150cd857e
No known key found for this signature in database
GPG Key ID: 1FAB9B9B4F93D473
2 changed files with 37 additions and 4 deletions

View File

@ -260,6 +260,14 @@ class EventForm(NewEventForm):
):
del self.fields[field]
def clean_slug(self):
slug = self.cleaned_data['slug']
if self.instance.agenda.event_set.filter(slug=slug).exclude(pk=self.instance.pk).exists():
raise ValidationError(_('Another event exists with the same identifier.'))
return slug
def clean(self):
super().clean()
if 'recurrence_end_date' in self.changed_data and self.instance.has_recurrences_booked(

View File

@ -109,12 +109,30 @@ def test_add_event_as_manager(app, manager_user):
def test_edit_event(settings, app, admin_user):
settings.LANGUAGE_CODE = 'fr-fr' # check date initial value format
agenda = Agenda(label='Foo bar')
agenda.save()
event = Event(start_datetime=make_aware(datetime.datetime(2016, 2, 15, 17, 0)), places=20, agenda=agenda)
event.save()
agenda = Agenda.objects.create(label='Foo bar')
event = Event.objects.create(
label='Foo',
start_datetime=make_aware(datetime.datetime(2016, 2, 15, 17, 0)),
places=20,
agenda=agenda,
)
event2 = Event.objects.create(
label='Other',
start_datetime=make_aware(datetime.datetime(2016, 2, 15, 17, 0)),
places=20,
agenda=agenda,
)
assert event.duration is None
assert event.end_datetime is None
other_agenda = Agenda.objects.create(label='Foo bar')
other_event = Event.objects.create(
label='Foo',
start_datetime=make_aware(datetime.datetime(2016, 2, 15, 17, 0)),
places=20,
agenda=other_agenda,
)
assert event.slug == other_event.slug
app = login(app)
resp = app.get('/manage/agendas/%s/events/%s/edit' % (agenda.pk, event.pk))
assert resp.form['start_datetime_0'].value == '2016-02-15'
@ -139,6 +157,13 @@ def test_edit_event(settings, app, admin_user):
assert event.duration == 45
assert event.end_datetime == event.start_datetime + datetime.timedelta(minutes=45)
assert event.description == 'A description'
assert event.slug == other_event.slug
# check slug edition
resp = app.get('/manage/agendas/%s/events/%s/edit' % (agenda.pk, event.pk))
resp.form['slug'] = event2.slug
resp = resp.form.submit()
assert resp.context['form'].errors['slug'] == ['Another event exists with the same identifier.']
def test_event_digit_slug(app, admin_user):