diff --git a/bluebottle/time_based/serializers.py b/bluebottle/time_based/serializers.py index 3025973bd9..e5ee9b1d5b 100644 --- a/bluebottle/time_based/serializers.py +++ b/bluebottle/time_based/serializers.py @@ -194,7 +194,7 @@ class TeamSlotSerializer(ActivitySlotSerializer): def get_links(self, instance): if instance.start and instance.duration: return { - 'ical': reverse_signed('slot-ical', args=(instance.pk, )), + 'ical': reverse_signed('team-ical', args=(instance.pk, )), 'google': instance.google_calendar_link, } else: diff --git a/bluebottle/time_based/tests/test_api.py b/bluebottle/time_based/tests/test_api.py index 65a1bd9093..3d74cdfb22 100644 --- a/bluebottle/time_based/tests/test_api.py +++ b/bluebottle/time_based/tests/test_api.py @@ -1179,6 +1179,10 @@ def test_create_team_slot(self): self.perform_create(user=self.manager) self.assertStatus(status.HTTP_201_CREATED) + ical_response = self.client.get(self.response.json()['links']['ical']) + + self.assertEqual(ical_response.status_code, status.HTTP_200_OK) + def test_create_team_slot_missing_start(self): self.defaults['start'] = None self.perform_create(user=self.manager) diff --git a/bluebottle/time_based/urls/api.py b/bluebottle/time_based/urls/api.py index e7265814f6..7790f9008b 100644 --- a/bluebottle/time_based/urls/api.py +++ b/bluebottle/time_based/urls/api.py @@ -12,7 +12,8 @@ TimeContributionDetail, DateSlotDetailView, DateSlotListView, SlotParticipantListView, SlotParticipantDetailView, SlotParticipantTransitionList, - DateActivityIcalView, ActivitySlotIcalView, DateParticipantExportView, PeriodParticipantExportView, + DateActivityIcalView, ActivitySlotIcalView, TeamSlotIcalView, + DateParticipantExportView, PeriodParticipantExportView, SlotRelatedParticipantList, SkillList, SkillDetail, RelatedSlotParticipantListView, TeamSlotListView, TeamSlotDetailView ) @@ -54,6 +55,10 @@ ActivitySlotIcalView.as_view(), name='slot-ical'), + url(r'^/team/ical/(?P\d+)$', + TeamSlotIcalView.as_view(), + name='team-ical'), + url(r'^/period/(?P\d+)$', PeriodActivityDetailView.as_view(), name='period-detail'), diff --git a/bluebottle/time_based/views.py b/bluebottle/time_based/views.py index d942d47b31..c3c89d07a7 100644 --- a/bluebottle/time_based/views.py +++ b/bluebottle/time_based/views.py @@ -507,11 +507,7 @@ def get(self, *args, **kwargs): return response -class ActivitySlotIcalView(PrivateFileView): - queryset = DateActivitySlot.objects.exclude( - status__in=['cancelled', 'deleted', 'rejected'], - activity__status__in=['cancelled', 'deleted', 'rejected'], - ) +class BaseSlotIcalView(PrivateFileView): max_age = 30 * 60 # half an hour @@ -549,6 +545,20 @@ def get(self, *args, **kwargs): return response +class ActivitySlotIcalView(BaseSlotIcalView): + queryset = DateActivitySlot.objects.exclude( + status__in=['cancelled', 'deleted', 'rejected'], + activity__status__in=['cancelled', 'deleted', 'rejected'], + ) + + +class TeamSlotIcalView(BaseSlotIcalView): + queryset = TeamSlot.objects.exclude( + status__in=['cancelled', 'deleted', 'rejected'], + activity__status__in=['cancelled', 'deleted', 'rejected'], + ) + + class DateParticipantExportView(ExportView): filename = "participants"