Coverage for website/pushnotifications/tests/test_events.py: 100.00%
99 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
1from django.test import TestCase
2from django.utils import timezone
4from events import payables
5from events.models import Event, EventRegistration
6from members.models import Member, Membership, Profile
9class TestEventNotifications(TestCase):
10 @classmethod
11 def setUpTestData(cls):
12 cls.time = timezone.now()
13 cls.member = Member.objects.create(username="user1")
14 Profile.objects.create(user=cls.member)
15 Membership.objects.create(
16 user=cls.member, type=Membership.MEMBER, since="2000-01-01"
17 )
19 cls.member2 = Member.objects.create(username="user2")
20 Profile.objects.create(user=cls.member2)
21 Membership.objects.create(
22 user=cls.member2, type=Membership.MEMBER, since="2000-01-01"
23 )
25 cls.not_current_member = Member.objects.create(username="user3")
26 Profile.objects.create(user=cls.not_current_member)
28 def setUp(self):
29 payables.register()
31 def test_create_event_and_update_registrations_start_reminder(self):
32 """Creating an event schedules a start reminder for the right users."""
33 with self.subTest("past event"):
34 event = Event.objects.create(
35 title="Test event",
36 start=self.time - timezone.timedelta(days=2),
37 end=self.time - timezone.timedelta(days=1),
38 published=True,
39 )
41 self.assertFalse(hasattr(event, "start_reminder"))
43 with self.subTest("registration not required, published=False"):
44 event = Event.objects.create(
45 title="Test event",
46 start=self.time + timezone.timedelta(days=1),
47 end=self.time + timezone.timedelta(days=2),
48 )
50 self.assertFalse(hasattr(event, "start_reminder"))
52 with self.subTest("registration required, published=False"):
53 event = Event.objects.create(
54 title="Test event",
55 start=self.time + timezone.timedelta(days=1),
56 end=self.time + timezone.timedelta(days=2),
57 registration_start=self.time - timezone.timedelta(days=1),
58 registration_end=self.time,
59 )
61 self.assertFalse(hasattr(event, "start_reminder"))
63 with self.subTest("registration not required, published=True"):
64 event = Event.objects.create(
65 title="Test event",
66 start=self.time + timezone.timedelta(days=1),
67 end=self.time + timezone.timedelta(days=2),
68 published=True,
69 )
71 self.assertIsNotNone(event.start_reminder)
72 self.assertIn(self.member, event.start_reminder.users.all())
73 self.assertIn(self.member2, event.start_reminder.users.all())
74 self.assertNotIn(self.not_current_member, event.start_reminder.users.all())
76 registration = EventRegistration.objects.create(
77 event=event, member=self.member, date=self.time
78 )
80 self.assertIn(self.member, event.start_reminder.users.all())
82 registration.date_cancelled = timezone.now()
83 registration.save()
85 self.assertIn(self.member, event.start_reminder.users.all())
87 registration2 = EventRegistration.objects.create(
88 event=event, member=self.member2, date=self.time
89 )
90 registration2.delete()
92 self.assertIn(self.member2, event.start_reminder.users.all())
94 with self.subTest("registration required, published=True"):
95 event = Event.objects.create(
96 title="Test event",
97 start=self.time + timezone.timedelta(days=1),
98 end=self.time + timezone.timedelta(days=2),
99 registration_start=self.time - timezone.timedelta(days=1),
100 registration_end=self.time,
101 published=True,
102 )
104 self.assertIsNotNone(event.start_reminder)
105 self.assertNotIn(self.member, event.start_reminder.users.all())
106 self.assertNotIn(self.member2, event.start_reminder.users.all())
107 self.assertNotIn(self.not_current_member, event.start_reminder.users.all())
109 registration = EventRegistration.objects.create(
110 event=event, member=self.member, date=self.time
111 )
113 self.assertIn(self.member, event.start_reminder.users.all())
115 registration.date_cancelled = timezone.now()
116 registration.save()
118 self.assertNotIn(self.member, event.start_reminder.users.all())
120 registration.date_cancelled = None
121 registration.save()
123 self.assertIn(self.member, event.start_reminder.users.all())
125 registration.delete()
127 self.assertNotIn(self.member2, event.start_reminder.users.all())
129 def test_update_event_start_reminder(self):
130 """Updating an event creates, deletes or updates the start reminder correctly."""
131 event = Event.objects.create(
132 title="Test event",
133 start=self.time + timezone.timedelta(days=1),
134 end=self.time + timezone.timedelta(days=2),
135 published=True,
136 )
138 self.assertIsNotNone(event.start_reminder)
140 event.published = False
141 event.save()
143 self.assertFalse(hasattr(event, "start_reminder"))
145 event.published = True
146 event.save()
148 self.assertIsNotNone(event.start_reminder)
150 event.start = self.time - timezone.timedelta(days=1)
151 event.save()
153 self.assertFalse(hasattr(event, "start_reminder"))
155 def test_create_event_registration_reminder(self):
156 """Creating an event that requires registration schedules registration reminder."""
157 with self.subTest("past registration period"):
158 event = Event.objects.create(
159 title="Test event",
160 start=self.time + timezone.timedelta(days=2),
161 end=self.time + timezone.timedelta(days=3),
162 registration_start=self.time - timezone.timedelta(days=2),
163 registration_end=self.time - timezone.timedelta(days=1),
164 published=True,
165 )
167 self.assertFalse(hasattr(event, "registration_reminder"))
169 with self.subTest("registration required, published=True"):
170 event = Event.objects.create(
171 title="Test event",
172 start=self.time + timezone.timedelta(days=2),
173 end=self.time + timezone.timedelta(days=3),
174 registration_start=self.time + timezone.timedelta(days=1),
175 registration_end=self.time + timezone.timedelta(days=2),
176 published=True,
177 )
179 self.assertIsNotNone(event.registration_reminder)
180 self.assertIn(self.member, event.registration_reminder.users.all())
181 self.assertIn(self.member2, event.registration_reminder.users.all())
182 self.assertNotIn(
183 self.not_current_member, event.registration_reminder.users.all()
184 )
186 with self.subTest("registration required, published=False"):
187 event = Event.objects.create(
188 title="Test event",
189 start=self.time + timezone.timedelta(days=2),
190 end=self.time + timezone.timedelta(days=3),
191 registration_start=self.time + timezone.timedelta(days=1),
192 registration_end=self.time + timezone.timedelta(days=2),
193 )
195 self.assertFalse(hasattr(event, "registration_reminder"))
197 with self.subTest("registration not required, published=True"):
198 event = Event.objects.create(
199 title="Test event",
200 start=self.time + timezone.timedelta(days=2),
201 end=self.time + timezone.timedelta(days=3),
202 published=True,
203 )
205 self.assertFalse(hasattr(event, "registration_reminder"))
207 def test_update_event_registration_reminder(self):
208 """Updating an event creates, deletes or updates the registration reminder correctly."""
209 event = Event.objects.create(
210 title="Test event",
211 start=self.time + timezone.timedelta(days=2),
212 end=self.time + timezone.timedelta(days=3),
213 registration_start=self.time + timezone.timedelta(days=1),
214 registration_end=self.time + timezone.timedelta(days=2),
215 published=True,
216 )
218 self.assertIsNotNone(event.registration_reminder)
220 event.published = False
221 event.save()
223 self.assertFalse(hasattr(event, "registration_reminder"))
225 event.published = True
226 event.save()
228 self.assertIsNotNone(event.registration_reminder)
230 event.registration_start = self.time - timezone.timedelta(days=1)
231 event.save()
233 self.assertFalse(hasattr(event, "registration_reminder"))