From 1954fc1d9fd67bbd2a781da25aeacb1cfa9804a1 Mon Sep 17 00:00:00 2001 From: Henrik Levkowetz Date: Sat, 10 Mar 2018 18:06:54 +0000 Subject: [PATCH] Tweaked the iCalendar urls, and added a test for interim meeting iCalendar files. - Legacy-Id: 14764 --- ietf/meeting/tests_views.py | 34 ++++++++++++++++++++++++++++++++++ ietf/meeting/urls.py | 10 ++++------ 2 files changed, 38 insertions(+), 6 deletions(-) diff --git a/ietf/meeting/tests_views.py b/ietf/meeting/tests_views.py index 9b34f78e1..bcef50ab0 100644 --- a/ietf/meeting/tests_views.py +++ b/ietf/meeting/tests_views.py @@ -1469,6 +1469,40 @@ class InterimTests(TestCase): self.assertTrue('Action Required: Minutes' in outbox[-1]['Subject']) + def test_group_ical(self): + make_meeting_test_data() + meeting = Meeting.objects.filter(type='interim', session__group__acronym='mars').first() + s1 = Session.objects.filter(meeting=meeting, group__acronym="mars").first() + a1 = s1.official_timeslotassignment() + t1 = a1.timeslot + # Create an extra session + t2 = TimeSlotFactory.create(meeting=meeting, time=datetime.datetime.combine(meeting.date, datetime.time(11, 30))) + s2 = SessionFactory.create(meeting=meeting, group=s1.group, add_to_schedule=False) + SchedTimeSessAssignment.objects.create(timeslot=t2, session=s2, schedule=meeting.agenda) + # + url = urlreverse('ietf.meeting.views.ical_agenda', kwargs={'num':meeting.number, 'acronym':s1.group.acronym, }) + r = self.client.get(url) + self.assertEqual(r.status_code, 200) + self.assertEqual(r.get('Content-Type'), "text/calendar") + self.assertContains(r, 'BEGIN:VEVENT') + self.assertEqual(r.content.count('UID'), 2) + self.assertContains(r, 'SUMMARY:mars - Martian Special Interest Group') + self.assertContains(r, t1.time.strftime('%Y%m%dT%H%M%S')) + self.assertContains(r, t2.time.strftime('%Y%m%dT%H%M%S')) + self.assertContains(r, 'END:VEVENT') + # + url = urlreverse('ietf.meeting.views.ical_agenda', kwargs={'num':meeting.number, 'session_id':s1.id, }) + r = self.client.get(url) + self.assertEqual(r.status_code, 200) + self.assertEqual(r.get('Content-Type'), "text/calendar") + self.assertContains(r, 'BEGIN:VEVENT') + self.assertEqual(r.content.count('UID'), 1) + self.assertContains(r, 'SUMMARY:mars - Martian Special Interest Group') + self.assertContains(r, t1.time.strftime('%Y%m%dT%H%M%S')) + self.assertNotContains(r, t2.time.strftime('%Y%m%dT%H%M%S')) + self.assertContains(r, 'END:VEVENT') + + class AjaxTests(TestCase): def test_ajax_get_utc(self): # test bad queries diff --git a/ietf/meeting/urls.py b/ietf/meeting/urls.py index 5c6e698a7..10f49c462 100644 --- a/ietf/meeting/urls.py +++ b/ietf/meeting/urls.py @@ -9,6 +9,7 @@ from ietf.utils.urls import url safe_for_all_meeting_types = [ url(r'^session/(?P[-a-z0-9]+)/?$', views.session_details), + url(r'^session/(?P[-a-z0-9]+)\.ics$', views.ical_agenda), url(r'^session/(?P\d+)/drafts$', views.add_session_drafts), url(r'^session/(?P\d+)/bluesheets$', views.upload_session_bluesheets), url(r'^session/(?P\d+)/minutes$', views.upload_session_minutes), @@ -17,7 +18,6 @@ safe_for_all_meeting_types = [ url(r'^session/(?P\d+)/slides/%(name)s/order$' % settings.URL_REGEXPS, views.set_slide_order), url(r'^session/(?P\d+)/doc/%(name)s/remove$' % settings.URL_REGEXPS, views.remove_sessionpresentation), url(r'^session/(?P\d+)\.ics$', views.ical_agenda), - url(r'^session/(?P[-a-z0-9]+).ics$', views.ical_agenda), ] @@ -73,10 +73,8 @@ type_ietf_only_patterns_id_optional = [ url(r'^agenda(?P.csv)$', views.agenda), url(r'^agenda/edit$', views.edit_agenda), url(r'^requests$', views.meeting_requests), - url(r'^agenda/agenda.ics$', views.ical_agenda), - url(r'^agenda.ics$', views.ical_agenda), - url(r'^session/(?P\d+)\.ics$', views.ical_agenda), - url(r'^session/(?P[-a-z0-9]+).ics$', views.ical_agenda), + url(r'^agenda/agenda\.ics$', views.ical_agenda), + url(r'^agenda\.ics$', views.ical_agenda), url(r'^agenda.json$', views.json_agenda), url(r'^agenda/week-view(?:.html)?/?$', views.week_view), url(r'^agenda/room-view(?:.html)?/?$', views.room_view), @@ -112,7 +110,7 @@ urlpatterns = [ url(r'^requests.html$', RedirectView.as_view(url='/meeting/requests', permanent=True)), url(r'^past/?$', views.past), url(r'^upcoming/?$', views.upcoming), - url(r'^upcoming.ics/?$', views.upcoming_ical), + url(r'^upcoming\.ics/?$', views.upcoming_ical), # Then patterns from more specific to less url(r'^(?Pinterim-[a-z0-9-]+)/', include(type_interim_patterns)), url(r'^(?P\d+)/requests.html$', RedirectView.as_view(url='/meeting/%(num)s/requests', permanent=True)),