Coverage for website/events/tests/test_api.py: 100.00%
104 statements
« prev ^ index » next coverage.py v7.6.7, created at 2025-08-14 10:31 +0000
« prev ^ index » next coverage.py v7.6.7, created at 2025-08-14 10:31 +0000
1import datetime
3from activemembers.models import Committee
4from django.test import TestCase, override_settings
5from django.urls import reverse
6from django.utils import timezone
7from events.models import Event, EventRegistration
8from events.models.external_event import ExternalEvent
9from members.models import Member
10from rest_framework.test import APIClient
13@override_settings(SUSPEND_SIGNALS=True)
14class RegistrationApiTest(TestCase):
15 """Tests for registration view."""
17 fixtures = ["members.json", "member_groups.json"]
19 @classmethod
20 def setUpTestData(cls):
21 cls.event = Event.objects.create(
22 pk=1,
23 title="testevent",
24 description="desc",
25 published=True,
26 start=(timezone.now() + datetime.timedelta(hours=1)),
27 end=(timezone.now() + datetime.timedelta(hours=2)),
28 location="test location",
29 map_location="test map location",
30 price=13.37,
31 fine=5.00,
32 )
33 cls.event.organisers.add(Committee.objects.get(pk=1))
34 cls.member = Member.objects.filter(last_name="Wiggers").first()
36 cls.mark_present_api_url = reverse(
37 "api:v2:events:mark-present",
38 kwargs={
39 "pk": cls.event.pk,
40 "token": cls.event.mark_present_url_token,
41 },
42 )
44 def setUp(self):
45 self.client = APIClient()
46 self.client.force_login(self.member)
48 def test_mark_present_url_registered(self):
49 registration = EventRegistration.objects.create(
50 event=self.event,
51 member=self.member,
52 date=timezone.now() - datetime.timedelta(hours=1),
53 )
55 response = self.client.patch(self.mark_present_api_url, follow=True)
56 self.assertContains(response, "You have been marked as present.")
57 registration.refresh_from_db()
58 self.assertTrue(registration.present)
60 def test_mark_present_url_already_present(self):
61 registration = EventRegistration.objects.create(
62 event=self.event,
63 member=self.member,
64 date=timezone.now() - datetime.timedelta(hours=1),
65 present=True,
66 )
68 response = self.client.patch(self.mark_present_api_url, follow=True)
69 self.assertContains(response, "You were already marked as present.")
70 registration.refresh_from_db()
71 self.assertTrue(registration.present)
73 def test_mark_present_url_not_registered(self):
74 response = self.client.patch(self.mark_present_api_url, follow=True)
75 self.assertContains(
76 response, "You are not registered for this event.", status_code=403
77 )
79 def test_mark_present_url_wrong_token(self):
80 registration = EventRegistration.objects.create(
81 event=self.event,
82 member=self.member,
83 date=timezone.now() - datetime.timedelta(hours=3),
84 )
85 response = self.client.patch(
86 reverse(
87 "api:v2:events:mark-present",
88 kwargs={
89 "pk": self.event.pk,
90 "token": "11111111-2222-3333-4444-555555555555",
91 },
92 ),
93 follow=True,
94 )
96 self.assertContains(response, "Invalid url.", status_code=403)
97 self.assertFalse(registration.present)
99 def test_mark_present_url_past_event(self):
100 registration = EventRegistration.objects.create(
101 event=self.event,
102 member=self.member,
103 date=timezone.now() - datetime.timedelta(hours=3),
104 )
105 self.event.start = timezone.now() - datetime.timedelta(hours=2)
106 self.event.end = timezone.now() - datetime.timedelta(hours=1)
107 self.event.save()
108 response = self.client.patch(self.mark_present_api_url, follow=True)
110 self.assertContains(response, "This event has already ended.", status_code=403)
111 self.assertFalse(registration.present)
114@override_settings(SUSPEND_SIGNALS=True)
115class CalendarjsTest(TestCase):
116 """Tests for CalendarJS/Fullcalendar view."""
118 fixtures = ["members.json", "member_groups.json"]
120 @classmethod
121 def setUpTestData(cls):
122 cls.event = Event.objects.create(
123 pk=1,
124 title="testevent",
125 description="desc",
126 published=True,
127 start=timezone.make_aware(datetime.datetime(2010, 1, 1, 20, 0, 0)),
128 end=timezone.make_aware(datetime.datetime(2010, 1, 1, 22, 0, 0)),
129 location="test location",
130 map_location="test map location",
131 price=13.37,
132 fine=5.00,
133 )
134 cls.unpubEvent = Event.objects.create(
135 pk=2,
136 title="secretevent",
137 description="desc",
138 published=False,
139 start=timezone.make_aware(datetime.datetime(2010, 1, 1, 20, 0, 0)),
140 end=timezone.make_aware(datetime.datetime(2010, 1, 1, 22, 0, 0)),
141 location="fake location",
142 map_location="fake map location",
143 price=6.66,
144 fine=5.00,
145 )
146 cls.extEvent = ExternalEvent.objects.create(
147 pk=3,
148 organiser="Technicie",
149 title="extevent",
150 description="desc",
151 published=True,
152 start=timezone.make_aware(datetime.datetime(2010, 1, 1, 20, 0, 0)),
153 end=timezone.make_aware(datetime.datetime(2010, 1, 1, 22, 0, 0)),
154 location="partner location",
155 )
156 cls.event.organisers.add(Committee.objects.get(pk=1))
157 cls.member = Member.objects.filter(last_name="Wiggers").first()
159 def setUp(self):
160 self.client = APIClient()
161 self.client.force_login(self.member)
163 def test_event_list(self):
164 response = self.client.get(
165 "/api/calendarjs/events/?start=2010-01-01T00%3A00%3A00%2B01%3A00&end=2011-01-01T00%3A00%3A00%2B01%3A00",
166 format="json",
167 )
168 self.assertEqual(response.status_code, 200)
169 self.assertEqual(len(response.data), 1)
170 self.assertEqual(response.data[0]["title"], "testevent")
172 def test_unpub_event_list(self):
173 response = self.client.get(
174 "/api/calendarjs/events/unpublished/?start=2010-01-01T00%3A00%3A00%2B01%3A00&end=2011-01-01T00%3A00%3A00%2B01%3A00",
175 format="json",
176 )
177 self.assertEqual(response.status_code, 200)
178 self.assertEqual(len(response.data), 1)
179 self.assertEqual(response.data[0]["title"], "secretevent")
181 def test_external_event_list(self):
182 response = self.client.get(
183 "/api/calendarjs/external/?start=2010-01-01T00%3A00%3A00%2B01%3A00&end=2011-01-01T00%3A00%3A00%2B01%3A00",
184 format="json",
185 )
186 self.assertEqual(response.status_code, 200)
187 self.assertEqual(len(response.data), 1)
188 self.assertEqual(response.data[0]["title"], "extevent (Technicie)")
191@override_settings(SUSPEND_SIGNALS=True)
192class EventApiV2Test(TestCase):
193 """Tests for registration view."""
195 fixtures = ["members.json", "member_groups.json"]
197 @classmethod
198 def setUpTestData(cls):
199 cls.event = Event.objects.create(
200 pk=1,
201 title="testevent",
202 description="desc",
203 published=True,
204 start=(timezone.now() + datetime.timedelta(hours=1)),
205 end=(timezone.now() + datetime.timedelta(hours=2)),
206 location="test location",
207 map_location="test map location",
208 price=13.37,
209 fine=5.00,
210 )
211 cls.event.organisers.add(Committee.objects.get(pk=1))
212 cls.member = Member.objects.filter(last_name="Wiggers").first()
214 cls.mark_present_api_url = reverse(
215 "api:v2:events:mark-present",
216 kwargs={
217 "pk": cls.event.pk,
218 "token": cls.event.mark_present_url_token,
219 },
220 )
222 def setUp(self):
223 self.client = APIClient()
224 self.client.force_login(self.member)
226 def test_event_list(self):
227 response = self.client.get("/api/v2/events/", format="json")
228 self.assertEqual(response.data["count"], 1)
229 self.assertEqual(response.data["results"][0]["title"], "testevent")
231 def test_event_detail(self):
232 response = self.client.get("/api/v2/events/1/", format="json")
233 self.assertEqual(response.data["title"], "testevent")
235 def test_event_detail_not_found(self):
236 response = self.client.get("/api/v2/events/2/", format="json")
237 self.assertEqual(response.status_code, 404)
239 def test_event_detail_unpublished(self):
240 self.event.published = False
241 self.event.save()
242 response = self.client.get("/api/v2/events/1/", format="json")
243 self.assertEqual(response.status_code, 404)