From 87783c980a28bd0b62801da5747725d8511e7f1a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Laur=C3=A9line=20Gu=C3=A9rin?= Date: Fri, 3 Mar 2023 15:15:02 +0100 Subject: [PATCH] manager: event detail url with slugs (#75111) --- chrono/manager/urls.py | 5 +++++ chrono/manager/views.py | 10 ++++++++++ tests/manager/test_event.py | 15 +++++++++++++++ 3 files changed, 30 insertions(+) diff --git a/chrono/manager/urls.py b/chrono/manager/urls.py index f3d08f81..21df278c 100644 --- a/chrono/manager/urls.py +++ b/chrono/manager/urls.py @@ -219,6 +219,11 @@ urlpatterns = [ views.event_view, name='chrono-manager-event-view', ), + re_path( + r'^agendas/(?P[-_a-zA-Z0-9]+)/events/(?P[-_a-zA-Z0-9]+)/$', + views.event_redirect_view, + name='chrono-manager-event-redirect', + ), path( 'agendas//events//edit', views.event_edit, diff --git a/chrono/manager/views.py b/chrono/manager/views.py index 11c3ab02..7a548a45 100644 --- a/chrono/manager/views.py +++ b/chrono/manager/views.py @@ -2462,6 +2462,16 @@ class EventDetailView(ViewableAgendaMixin, DetailView): event_view = EventDetailView.as_view() +class EventDetailRedirectView(RedirectView): + def get_redirect_url(self, *args, **kwargs): + agenda = get_object_or_404(Agenda, slug=kwargs['slug']) + event = get_object_or_404(Event, slug=kwargs['event_slug'], agenda=agenda) + return reverse('chrono-manager-event-view', kwargs={'pk': agenda.pk, 'event_pk': event.pk}) + + +event_redirect_view = EventDetailRedirectView.as_view() + + class EventEditView(ManagedAgendaMixin, UpdateView): template_name = 'chrono/manager_event_form.html' model = Event diff --git a/tests/manager/test_event.py b/tests/manager/test_event.py index 8bc2c011..8b48d005 100644 --- a/tests/manager/test_event.py +++ b/tests/manager/test_event.py @@ -1194,6 +1194,21 @@ def test_event_detail(app, admin_user, get_proper_html_str): assert '<b>User 2</b> Foo Bar, May 24, 2022, 2 a.m.' in resp.text +def test_event_detail_redirect(app, admin_user): + agenda = Agenda.objects.create(label='Events', kind='events') + event = Event.objects.create( + label='xyz', + start_datetime=now() + datetime.timedelta(days=1), + places=10, + waiting_list_places=2, + agenda=agenda, + ) + + login(app) + resp = app.get('/manage/agendas/%s/events/%s/' % (agenda.slug, event.slug), status=302) + assert resp.location.endswith('/manage/agendas/%s/events/%s/' % (agenda.pk, event.pk)) + + def test_event_cancellation(app, admin_user): agenda = Agenda.objects.create(label='Events', kind='events') event = Event.objects.create(