From a8fd04e4c08291f732ba82213b3021171e3b8087 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20P=C3=A9pin?= Date: Sat, 5 Oct 2019 16:55:05 +0200 Subject: [PATCH] test events.views.participants_csv --- events/tests/__init__.py | 0 events/tests/test_views.py | 58 ++++++++++++++++++++++++++++++++++++++ events/views.py | 2 +- 3 files changed, 59 insertions(+), 1 deletion(-) create mode 100644 events/tests/__init__.py create mode 100644 events/tests/test_views.py diff --git a/events/tests/__init__.py b/events/tests/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/events/tests/test_views.py b/events/tests/test_views.py new file mode 100644 index 00000000..aa3f2fc3 --- /dev/null +++ b/events/tests/test_views.py @@ -0,0 +1,58 @@ +from unittest import mock + +from django.contrib.auth import get_user_model +from django.contrib.auth.models import Permission +from django.test import Client, TestCase +from django.urls import reverse +from events.models import Event + +User = get_user_model() + + +def make_user(name): + return User.objects.create_user(username=name, password=name) + + +def make_staff_user(name): + view_event_perm = Permission.objects.get_by_natural_key( + codename="view_event", app_label="events", model="event" + ) + user = make_user(name) + user.user_permissions.add(view_event_perm) + return user + + +class CSVExportTest(TestCase): + def setUp(self): + # Signals handlers on login/logout send messages. + # Due to the way the Django' test Client performs login, this raise an + # error. As workaround, we mock the Django' messages module. + patcher_messages = mock.patch("gestioncof.signals.messages") + patcher_messages.start() + self.addCleanup(patcher_messages.stop) + + self.staff = make_staff_user("staff") + self.u1 = make_user("toto") + self.u2 = make_user("titi") + self.event = Event.objects.create(title="test_event", location="somewhere") + self.event.subscribers.set([self.u1, self.u2]) + self.url = reverse("events:csv-participants", args=[self.event.id]) + + def test_get(self): + client = Client() + client.force_login(self.staff) + r = client.get(self.url) + self.assertEqual(r.status_code, 200) + + def test_anonymous(self): + client = Client() + r = client.get(self.url) + self.assertRedirects( + r, "/login?next={}".format(self.url), fetch_redirect_response=False + ) + + def test_unauthorised(self): + client = Client() + client.force_login(self.u1) + r = client.get(self.url) + self.assertEqual(r.status_code, 403) diff --git a/events/views.py b/events/views.py index 22fe6e50..ea20de6f 100644 --- a/events/views.py +++ b/events/views.py @@ -8,7 +8,7 @@ from events.models import Event @login_required -@permission_required("events.view_event") +@permission_required("events.view_event", raise_exception=True) def participants_csv(request, event_id): event = get_object_or_404(Event, id=event_id)