Skip to content

Commit 1df65ce

Browse files
committed
Implement the 6 event rule
1 parent 69a1f82 commit 1df65ce

File tree

8 files changed

+195
-383
lines changed

8 files changed

+195
-383
lines changed

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,3 +74,6 @@ google-credentials.json
7474

7575
# vscode
7676
.vscode/
77+
78+
# mac
79+
.DS_Store

lego/apps/events/tests/test_async_tasks.py

Lines changed: 0 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -223,38 +223,6 @@ def test_isnt_bumped_without_permission(self):
223223
self.assertEqual(self.pool_two.registrations.count(), 0)
224224
self.assertEqual(self.event.waiting_registrations.count(), 1)
225225

226-
"""
227-
def test_isnt_bumped_with_penalties(self):
228-
""Users should not be bumped if they have 3 penalties.""
229-
self.event.start_time = timezone.now() + timedelta(days=1)
230-
self.event.merge_time = timezone.now() + timedelta(hours=12)
231-
self.event.save()
232-
233-
self.pool_one.activation_date = timezone.now() - timedelta(days=1)
234-
self.pool_one.save()
235-
236-
self.pool_two.activation_date = timezone.now() + timedelta(minutes=30)
237-
self.pool_two.save()
238-
239-
users = get_dummy_users(2)
240-
241-
Penalty.objects.create(
242-
user=users[1], reason="test", weight=3, source_event=self.event
243-
)
244-
245-
for user in users:
246-
AbakusGroup.objects.get(name="Webkom").add_user(user)
247-
registration = Registration.objects.get_or_create(
248-
event=self.event, user=user
249-
)[0]
250-
self.event.register(registration)
251-
252-
bump_waiting_users_to_new_pool()
253-
254-
self.assertEqual(self.pool_two.registrations.count(), 0)
255-
self.assertEqual(self.event.waiting_registrations.count(), 1)
256-
"""
257-
258226
def test_isnt_bumped_if_activation_is_far_into_the_future(self):
259227
"""Users should not be bumped if the pool is activated more than
260228
35 minutes in the future."""
@@ -421,32 +389,6 @@ def test_is_bumped_with_multiple_penalties(self):
421389
self.assertIsNotNone(Registration.objects.get(id=registration.id).pool)
422390
self.assertEqual(self.event.number_of_registrations, 1)
423391

424-
"""
425-
def test_isnt_bumped_with_too_many_penalties(self):
426-
""Tests that a user isn't bumped when going from 4 to 3 active penalties""
427-
428-
user = get_dummy_users(1)[0]
429-
AbakusGroup.objects.get(name="Abakus").add_user(user)
430-
431-
p1 = Penalty.objects.create(
432-
user=user, reason="test", weight=1, source_event=self.event
433-
)
434-
Penalty.objects.create(
435-
user=user, reason="test2", weight=3, source_event=self.event
436-
)
437-
438-
registration = Registration.objects.get_or_create(event=self.event, user=user)[
439-
0
440-
]
441-
async_register(registration.id)
442-
443-
make_penalty_expire(p1)
444-
check_events_for_registrations_with_expired_penalties.delay()
445-
446-
self.assertIsNone(Registration.objects.get(id=registration.id).pool)
447-
self.assertEqual(self.event.number_of_registrations, 0)
448-
"""
449-
450392
def test_isnt_bumped_when_full(self):
451393
"""Tests that a user isnt bumped when the event is full when penalties expire."""
452394

lego/apps/events/tests/test_penalties.py

Lines changed: 0 additions & 281 deletions
Original file line numberDiff line numberDiff line change
@@ -66,27 +66,6 @@ def test_get_earliest_registration_time_one_penalty(self):
6666
)
6767
self.assertEqual(earliest_reg, current_time + timedelta(hours=5))
6868

69-
"""
70-
def test_get_earliest_registration_time_two_penalties(self):
71-
""Test method calculating the earliest registration time for user with two penalties""
72-
event = Event.objects.get(title="POOLS_NO_REGISTRATIONS")
73-
74-
current_time = timezone.now()
75-
webkom_pool = event.pools.get(name="Webkom")
76-
webkom_pool.activation_date = current_time
77-
webkom_pool.save()
78-
79-
user = get_dummy_users(1)[0]
80-
AbakusGroup.objects.get(name="Webkom").add_user(user)
81-
Penalty.objects.create(user=user, reason="test", weight=2, source_event=event)
82-
penalties = user.number_of_penalties()
83-
84-
earliest_reg = event.get_earliest_registration_time(
85-
user, [webkom_pool], penalties
86-
)
87-
self.assertEqual(earliest_reg, current_time + timedelta(hours=12))
88-
"""
89-
9069
def test_cant_register_with_one_penalty_before_delay(self):
9170
"""Test that user can not register before (5 hour) delay when having one or more penalties"""
9271
event = Event.objects.get(title="POOLS_NO_REGISTRATIONS")
@@ -131,266 +110,6 @@ def test_can_register_with_one_penalty_after_delay(self):
131110
event.register(registration)
132111
self.assertEqual(event.number_of_registrations, 1)
133112

134-
"""
135-
def test_cant_register_with_two_penalties_before_delay(self):
136-
""Test that user can not register before (12 hour) delay when having two penalties""
137-
event = Event.objects.get(title="POOLS_NO_REGISTRATIONS")
138-
139-
current_time = timezone.now()
140-
abakus_pool = event.pools.get(name="Abakusmember")
141-
abakus_pool.activation_date = current_time
142-
abakus_pool.save()
143-
144-
user = get_dummy_users(1)[0]
145-
AbakusGroup.objects.get(name="Abakus").add_user(user)
146-
Penalty.objects.create(user=user, reason="test", weight=2, source_event=event)
147-
148-
with self.assertRaises(ValueError):
149-
registration = Registration.objects.get_or_create(event=event, user=user)[0]
150-
event.register(registration)
151-
"""
152-
153-
"""
154-
def test_can_register_with_two_penalties_after_delay(self):
155-
""Test that user can register after (12 hour) delay when having two penalties""
156-
event = Event.objects.get(title="POOLS_NO_REGISTRATIONS")
157-
158-
current_time = timezone.now()
159-
abakus_pool = event.pools.get(name="Abakusmember")
160-
abakus_pool.activation_date = current_time - timedelta(hours=12)
161-
abakus_pool.save()
162-
163-
user = get_dummy_users(1)[0]
164-
AbakusGroup.objects.get(name="Abakus").add_user(user)
165-
Penalty.objects.create(user=user, reason="test", weight=2, source_event=event)
166-
167-
registration = Registration.objects.get_or_create(event=event, user=user)[0]
168-
event.register(registration)
169-
self.assertEqual(event.number_of_registrations, 1)
170-
"""
171-
172-
"""
173-
def test_waiting_list_on_three_penalties(self):
174-
""Test that user is registered to waiting list directly when having three penalties""
175-
event = Event.objects.get(title="POOLS_NO_REGISTRATIONS")
176-
177-
user = get_dummy_users(1)[0]
178-
AbakusGroup.objects.get(name="Abakus").add_user(user)
179-
Penalty.objects.create(user=user, reason="test", weight=3, source_event=event)
180-
181-
registration = Registration.objects.get_or_create(event=event, user=user)[0]
182-
event.register(registration)
183-
self.assertEqual(event.number_of_registrations, 0)
184-
self.assertEqual(event.waiting_registrations.count(), 1)
185-
"""
186-
187-
"""
188-
def test_waiting_list_on_more_than_three_penalties(self):
189-
""Test that user is registered to waiting list directly having over three penalties""
190-
event = Event.objects.get(title="POOLS_NO_REGISTRATIONS")
191-
192-
user = get_dummy_users(1)[0]
193-
AbakusGroup.objects.get(name="Abakus").add_user(user)
194-
Penalty.objects.create(user=user, reason="test", weight=2, source_event=event)
195-
Penalty.objects.create(user=user, reason="test2", weight=2, source_event=event)
196-
197-
registration = Registration.objects.get_or_create(event=event, user=user)[0]
198-
event.register(registration)
199-
self.assertEqual(event.number_of_registrations, 0)
200-
self.assertEqual(event.waiting_registrations.count(), 1)
201-
"""
202-
203-
"""
204-
def test_waiting_list_on_three_penalties_post_merge(self):
205-
""Test that user is registered to waiting list with three penalties after merge""
206-
event = Event.objects.get(title="POOLS_NO_REGISTRATIONS")
207-
event.merge_time = timezone.now() - timedelta(hours=24)
208-
event.save()
209-
210-
user = get_dummy_users(1)[0]
211-
AbakusGroup.objects.get(name="Abakus").add_user(user)
212-
Penalty.objects.create(user=user, reason="test", weight=3, source_event=event)
213-
214-
registration = Registration.objects.get_or_create(event=event, user=user)[0]
215-
event.register(registration)
216-
self.assertEqual(event.number_of_registrations, 0)
217-
self.assertEqual(event.waiting_registrations.count(), 1)
218-
"""
219-
220-
"""
221-
def test_not_bumped_if_three_penalties(self):
222-
""Test that user is not bumped on unregistration having three penalties""
223-
event = Event.objects.get(title="POOLS_NO_REGISTRATIONS")
224-
225-
users = get_dummy_users(5)
226-
abakus_users = users[:5]
227-
waiting_users = users[3:5]
228-
229-
for user in abakus_users:
230-
AbakusGroup.objects.get(name="Abakus").add_user(user)
231-
for user in users:
232-
registration = Registration.objects.get_or_create(event=event, user=user)[0]
233-
event.register(registration)
234-
235-
self.assertIsNone(event.registrations.get(user=waiting_users[0]).pool)
236-
self.assertIsNone(event.registrations.get(user=waiting_users[1]).pool)
237-
238-
Penalty.objects.create(
239-
user=waiting_users[0], reason="test", weight=3, source_event=event
240-
)
241-
registration_to_unregister = Registration.objects.get(
242-
event=event, user=users[0]
243-
)
244-
event.unregister(registration_to_unregister)
245-
246-
self.assertIsNone(event.registrations.get(user=waiting_users[0]).pool)
247-
self.assertIsNotNone(event.registrations.get(user=waiting_users[1]).pool)
248-
"""
249-
250-
"""
251-
def test_not_bumped_if_three_penalties_post_merge(self):
252-
""Test that user is not bumped on unregistration having three penalties after merge""
253-
event = Event.objects.get(title="POOLS_NO_REGISTRATIONS")
254-
255-
users = get_dummy_users(7)
256-
abakus_users = users[:5]
257-
webkom_users = users[5:7]
258-
waiting_users = users[3:5]
259-
260-
for user in abakus_users:
261-
AbakusGroup.objects.get(name="Abakus").add_user(user)
262-
for user in webkom_users:
263-
AbakusGroup.objects.get(name="Webkom").add_user(user)
264-
for user in users:
265-
registration = Registration.objects.get_or_create(event=event, user=user)[0]
266-
event.register(registration)
267-
268-
self.assertIsNone(event.registrations.get(user=waiting_users[0]).pool)
269-
self.assertIsNone(event.registrations.get(user=waiting_users[1]).pool)
270-
271-
event.merge_time = timezone.now() - timedelta(hours=24)
272-
event.save()
273-
Penalty.objects.create(
274-
user=waiting_users[0], reason="test", weight=3, source_event=event
275-
)
276-
277-
registration_to_unregister = Registration.objects.get(
278-
event=event, user=webkom_users[0]
279-
)
280-
event.unregister(registration_to_unregister)
281-
282-
self.assertIsNone(event.registrations.get(user=waiting_users[0]).pool)
283-
self.assertIsNotNone(event.registrations.get(user=waiting_users[1]).pool)
284-
"""
285-
286-
"""
287-
def test_bumped_if_penalties_expire_while_waiting(self):
288-
""Test that user gets bumped when penalties expire while on waiting list""
289-
event = Event.objects.get(title="POOLS_NO_REGISTRATIONS")
290-
291-
for pool in event.pools.all():
292-
pool.activation_date = timezone.now() - timedelta(hours=12)
293-
pool.save()
294-
295-
users = get_dummy_users(5)
296-
penalty_one = Penalty.objects.create(
297-
user=users[0], reason="test", weight=1, source_event=event
298-
)
299-
Penalty.objects.create(
300-
user=users[0], reason="test", weight=2, source_event=event
301-
)
302-
abakus_users = users[:5]
303-
waiting_users = [users[0], users[4]]
304-
305-
for user in abakus_users:
306-
AbakusGroup.objects.get(name="Abakus").add_user(user)
307-
for user in users:
308-
registration = Registration.objects.get_or_create(event=event, user=user)[0]
309-
event.register(registration)
310-
311-
self.assertIsNone(event.registrations.get(user=waiting_users[0]).pool)
312-
self.assertIsNone(event.registrations.get(user=waiting_users[1]).pool)
313-
314-
penalty_one.created_at = timezone.now() - timedelta(days=365)
315-
penalty_one.save()
316-
registration_to_unregister = Registration.objects.get(
317-
event=event, user=users[1]
318-
)
319-
event.unregister(registration_to_unregister)
320-
321-
self.assertIsNotNone(event.registrations.get(user=waiting_users[0]).pool)
322-
self.assertIsNone(event.registrations.get(user=waiting_users[1]).pool)
323-
"""
324-
325-
"""
326-
def test_isnt_bumped_if_third_penalty_expires_but_reg_delay_is_still_active(self):
327-
event = Event.objects.get(title="POOLS_NO_REGISTRATIONS")
328-
for pool in event.pools.all():
329-
pool.activation_date = timezone.now() - timedelta(hours=6)
330-
pool.save()
331-
332-
users = get_dummy_users(5)
333-
penalty_one = Penalty.objects.create(
334-
user=users[0], reason="test", weight=1, source_event=event
335-
)
336-
Penalty.objects.create(
337-
user=users[0], reason="test", weight=2, source_event=event
338-
)
339-
abakus_users = users[:5]
340-
waiting_users = [users[0], users[4]]
341-
342-
for user in abakus_users:
343-
AbakusGroup.objects.get(name="Abakus").add_user(user)
344-
for user in users:
345-
registration = Registration.objects.get_or_create(event=event, user=user)[0]
346-
event.register(registration)
347-
348-
self.assertIsNone(event.registrations.get(user=waiting_users[0]).pool)
349-
self.assertIsNone(event.registrations.get(user=waiting_users[1]).pool)
350-
351-
penalty_one.created_at = timezone.now() - timedelta(days=365)
352-
penalty_one.save()
353-
registration_to_unregister = Registration.objects.get(
354-
event=event, user=users[1]
355-
)
356-
event.unregister(registration_to_unregister)
357-
358-
self.assertIsNone(event.registrations.get(user=waiting_users[0]).pool)
359-
self.assertIsNotNone(event.registrations.get(user=waiting_users[1]).pool)
360-
"""
361-
362-
"""
363-
def test_no_legal_bump(self):
364-
event = Event.objects.get(title="POOLS_NO_REGISTRATIONS")
365-
users = get_dummy_users(5)
366-
for pool in event.pools.all():
367-
pool.activation_date = timezone.now()
368-
pool.save()
369-
370-
for user in users:
371-
AbakusGroup.objects.get(name="Abakus").add_user(user)
372-
registration = Registration.objects.get_or_create(event=event, user=user)[0]
373-
event.register(registration)
374-
375-
self.assertIsNone(event.registrations.get(user=users[3]).pool)
376-
self.assertIsNone(event.registrations.get(user=users[4]).pool)
377-
378-
Penalty.objects.create(
379-
user=users[3], reason="test", weight=3, source_event=event
380-
)
381-
Penalty.objects.create(
382-
user=users[4], reason="test", weight=2, source_event=event
383-
)
384-
385-
registration_to_unregister = Registration.objects.get(
386-
event=event, user=users[0]
387-
)
388-
event.unregister(registration_to_unregister)
389-
390-
self.assertIsNone(event.registrations.get(user=users[3]).pool)
391-
self.assertIsNone(event.registrations.get(user=users[4]).pool)
392-
"""
393-
394113
def test_penalties_created_on_unregister(self):
395114
"""Test that user gets penalties on unregister after limit"""
396115
event = Event.objects.get(title="POOLS_WITH_REGISTRATIONS")

lego/apps/users/migrations/0039_penalty_activation_date.py

Lines changed: 0 additions & 19 deletions
This file was deleted.

0 commit comments

Comments
 (0)