-
+
diff --git a/scheduler/main/views.py b/scheduler/main/views.py
index 6f59f9b287d0ffbeb8d852d14d405313c43d73bc..be429cac7d0d42f8e457b205a151a90a76b1661c 100644
--- a/scheduler/main/views.py
+++ b/scheduler/main/views.py
@@ -53,7 +53,7 @@ class ScheduleFormMixin(LoginRequiredMixin):
form_class = ScheduleForm
def get_success_url(self):
- return reverse('schedule-update', args=[self.object.pk])
+ return reverse('schedule-update', args=[self.object.uuid])
def form_valid(self, form, *args):
messages.success(self.request, _('Data has been saved.'))
@@ -65,11 +65,14 @@ class ScheduleCreateView(ScheduleFormMixin, CreateView):
class ScheduleUpdateView(ScheduleFormMixin, UpdateView):
- pass
+ slug_field = 'uuid'
+ slug_url_kwarg = 'uuid'
class ScheduleDeleteView(LoginRequiredMixin, DeleteView):
model = Schedule
+ slug_field = 'uuid'
+ slug_url_kwarg = 'uuid'
def get_success_url(self):
return reverse('index')
@@ -85,7 +88,7 @@ class InvitationUpdateView(UpdateView):
return get_object_or_404(Invitation, **self.kwargs)
def get_success_url(self):
- return reverse('invitation', args=[self.object.schedule.pk, self.object.token])
+ return reverse('invitation', args=[self.object.schedule.uuid, self.object.token])
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
@@ -150,6 +153,9 @@ class InvitationApiView(View):
})
def put(self, request, *args, **kwargs):
+ if 'schedule__uuid' in kwargs:
+ schedule = get_object_or_404(Schedule, uuid=kwargs.pop('schedule__uuid'))
+ kwargs['schedule_id'] = schedule.id
invitation, _ = Invitation.objects.get_or_create(**kwargs)
return HttpResponse(status=204)
diff --git a/scheduler/tests.py b/scheduler/tests.py
index a5220d33d526b67fcae2c2a99750332fb5ac9298..847d0ccb3a22dc66db84de9ab0a990d13ae77a61 100644
--- a/scheduler/tests.py
+++ b/scheduler/tests.py
@@ -7,7 +7,7 @@ from .main.models import Schedule
from .main.models import Invitation
-class TestInvitationApiView(TestCase):
+class TestLegacyInvitationApiView(TestCase):
def setUp(self):
self.client.defaults['HTTP_AUTHORIZATION'] = 'token ' + settings.API_TOKEN
@@ -30,3 +30,28 @@ class TestInvitationApiView(TestCase):
response = self.client.delete(url)
self.assertEqual(response.status_code, 204)
self.assertFalse(Invitation.objects.filter(token=invitation.token).exists())
+
+
+class TestInvitationApiView(TestCase):
+ def setUp(self):
+ self.client.defaults['HTTP_AUTHORIZATION'] = 'token ' + settings.API_TOKEN
+
+ def test_get(self):
+ invitation = baker.make(Invitation)
+ url = '/api/{}/{}/'.format(invitation.schedule.uuid, invitation.token)
+ response = self.client.get(url)
+ self.assertEqual(response.status_code, 200)
+
+ def test_put(self):
+ schedule = baker.make(Schedule)
+ url = '/api/{}/{}/'.format(schedule.uuid, 'sometoken')
+ response = self.client.put(url)
+ self.assertEqual(response.status_code, 204)
+ self.assertTrue(Invitation.objects.filter(token='sometoken').exists())
+
+ def test_delete(self):
+ invitation = baker.make(Invitation)
+ url = '/api/{}/{}/'.format(invitation.schedule.uuid, invitation.token)
+ response = self.client.delete(url)
+ self.assertEqual(response.status_code, 204)
+ self.assertFalse(Invitation.objects.filter(token=invitation.token).exists())
diff --git a/scheduler/urls.py b/scheduler/urls.py
index da2f6bdb4af9f72fab241df03377f817fb5e3984..38de4f39733ce57b933351f05ecc257ca5568dc0 100644
--- a/scheduler/urls.py
+++ b/scheduler/urls.py
@@ -35,16 +35,28 @@ from .main.views import ScheduleUpdateView
urlpatterns = [
path('', ScheduleListView.as_view(), name='index'),
path('new/', ScheduleCreateView.as_view(), name='schedule-create'),
- path('
/', ScheduleUpdateView.as_view(), name='schedule-update'),
- path('/delete/', ScheduleDeleteView.as_view(), name='schedule-delete'),
+ path('/', ScheduleUpdateView.as_view(), name='schedule-update-legacy'),
+ path('/', ScheduleUpdateView.as_view(), name='schedule-update'),
+ path('/delete/', ScheduleDeleteView.as_view(), name='schedule-delete-legacy'),
+ path('/delete/', ScheduleDeleteView.as_view(), name='schedule-delete'),
path(
'invitations///',
InvitationUpdateView.as_view(),
+ name='invitation-legacy',
+ ),
+ path(
+ 'invitations///',
+ InvitationUpdateView.as_view(),
name='invitation',
),
path(
'api///',
InvitationApiView.as_view(),
+ name='api-invitation-legacy',
+ ),
+ path(
+ 'api///',
+ InvitationApiView.as_view(),
name='api-invitation',
),
path('login/', LoginView.as_view(), name='login'),