Skip to content

Commit

Permalink
Remove attendance through UI in OW4
Browse files Browse the repository at this point in the history
  • Loading branch information
henrikhorluck committed Sep 25, 2024
1 parent 99da9f4 commit 308415f
Show file tree
Hide file tree
Showing 43 changed files with 204 additions and 3,345 deletions.
144 changes: 142 additions & 2 deletions apps/events/api/tests/attendance_tests.py
Original file line number Diff line number Diff line change
@@ -1,22 +1,36 @@
from datetime import UTC, datetime, timedelta
from time import sleep

from django.conf import settings
from django.contrib.auth.models import Group
from django.core import mail
from django.utils import timezone
from django_dynamic_fixture import G
from freezegun import freeze_time
from rest_framework import status
from rest_framework.test import APITestCase
from rest_framework.test import APITestCase, APITransactionTestCase

from apps.events.models import Event
from apps.events.models.Attendance import AttendanceEvent, Attendee
from apps.events.tests.utils import (
attend_user_to_event,
generate_event,
generate_payment,
generate_user,
pay_for_event,
)
from apps.marks.models import MarkRuleSet
from apps.notifications.constants import PermissionType
from apps.notifications.models import Permission
from apps.payment.models import PaymentDelay
from onlineweb4.fields.turnstile import mock_validate_turnstile
from onlineweb4.testing import GetUrlMixin

from ...models import Extras, StatusCode
from .utils import generate_attendee

User = settings.AUTH_USER_MODEL


class AttendanceEventTestCase(GetUrlMixin, APITestCase):
basename = "events_attendance_events"
Expand Down Expand Up @@ -100,7 +114,7 @@ def test_guest_user_can_register_for_event_with_guest_attendance(self, _):

@mock_validate_turnstile()
def test_signup_settings_override_defaults(self, _):
test_cases: list[tuple[dict[str, bool]]] = [
test_cases: list[tuple[dict[str, bool], dict[str, bool], dict[str, bool]]] = [
(
{
"show_as_attending_event": True,
Expand Down Expand Up @@ -450,3 +464,129 @@ def test_extras_only_works_for_authenticated_users(self):
response = self.client.get(self.get_extras_url(self.event.id))

self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED)


# This needs to be a TransactionTestCase since notifications are sent using on_commit hooks
# see https://docs.djangoproject.com/en/5.1/topics/testing/tools/#django.test.TransactionTestCase
class EventsUnattendWaitList(GetUrlMixin, APITransactionTestCase):
basename = "events_attendance_events"

def setUp(self):
G(Permission, permission_type=PermissionType.WAIT_LIST_BUMP, force_email=True)
self.event = G(Event, event_start=timezone.now() + timedelta(days=1))
G(
AttendanceEvent,
event=self.event,
unattend_deadline=timezone.now() + timedelta(days=1),
max_capacity=2,
waitlist=True,
)
self.user = generate_user("test")
self.client.force_login(self.user)
self.other_user = generate_user("other")
self.url = self.get_action_url("unregister", self.event.id)
self.rule_Set = G(
MarkRuleSet,
duration=timedelta(days=14),
valid_from_date=datetime(year=2016, month=1, day=1, tzinfo=UTC),
)

def test_unattend_notifies_waitlist_when_attending(self):
G(Attendee, event=self.event.attendance_event)
attend_user_to_event(self.event, self.user)
G(Attendee, event=self.event.attendance_event, n=3)

r = self.client.delete(self.url)

self.assertEqual(r.status_code, status.HTTP_204_NO_CONTENT)
self.assertEqual(len(mail.outbox), 1)
self.assertIn("Du har fått plass på", mail.outbox[0].subject)

def test_unattend_does_not_notify_waitlist_when_on_waitlist(self):
G(Attendee, event=self.event.attendance_event, n=2)
attend_user_to_event(self.event, self.user)
G(Attendee, event=self.event.attendance_event)

r = self.client.delete(self.url)

self.assertEqual(r.status_code, status.HTTP_204_NO_CONTENT)
sleep(2)
self.assertEqual(len(mail.outbox), 0)

@freeze_time("2017-01-01 12:00")
def test_payment_type_instant_uses_extended(self):
generate_payment(self.event, payment_type=1)
G(Attendee, event=self.event.attendance_event)
attend_user_to_event(self.event, self.user)
attend_user_to_event(self.event, self.other_user)
G(Attendee, event=self.event.attendance_event)
payment_delay_time = timedelta(days=2)

r = self.client.delete(self.url)

self.assertEqual(r.status_code, status.HTTP_204_NO_CONTENT)
sleep(2)
self.assertEqual(len(mail.outbox), 1)
self.assertIn("Du har fått plass på", mail.outbox[0].subject)
payment_delay = PaymentDelay.objects.get(user=self.other_user)
self.assertEqual(payment_delay.valid_to, timezone.now() + payment_delay_time)

def test_payment_delay_is_not_created_if_deadline_over_48_hours(self):
generate_payment(
self.event, payment_type=2, deadline=timezone.now() + timedelta(days=3)
)
G(Attendee, event=self.event.attendance_event)
attend_user_to_event(self.event, self.user)
attend_user_to_event(self.event, self.other_user)
G(Attendee, event=self.event.attendance_event)

r = self.client.delete(self.url)

self.assertEqual(r.status_code, status.HTTP_204_NO_CONTENT)
sleep(2)
self.assertEqual(len(mail.outbox), 1)
self.assertIn("Du har fått plass på", mail.outbox[0].subject)
payment_delay = PaymentDelay.objects.filter(user=self.other_user)
self.assertFalse(payment_delay.exists())

@freeze_time("2017-01-01 12:00")
def test_payment_delay_is_created_if_deadline_under_48_hours(self):
generate_payment(
self.event, payment_type=2, deadline=timezone.now() + timedelta(hours=47)
)
G(Attendee, event=self.event.attendance_event)
attend_user_to_event(self.event, self.user)
other_user_attendee = attend_user_to_event(self.event, self.other_user)
G(Attendee, event=self.event.attendance_event)
payment_delay_time = timedelta(days=2)

r = self.client.delete(self.url)

self.assertIn(
other_user_attendee, self.event.attendance_event.attending_attendees_qs
)
self.assertEqual(r.status_code, status.HTTP_204_NO_CONTENT)
sleep(2)
self.assertEqual(len(mail.outbox), 1)
self.assertIn("Du har fått plass på", mail.outbox[0].subject)
payment_delay = PaymentDelay.objects.get(user=self.other_user)
self.assertEqual(payment_delay.valid_to, timezone.now() + payment_delay_time)

@freeze_time("2017-01-01 12:00")
def test_payment_type_delay_uses_payment_delay(self):
delay_days = 4
payment_delay_time = timedelta(days=delay_days)
generate_payment(self.event, payment_type=3, delay=payment_delay_time)
G(Attendee, event=self.event.attendance_event)
attend_user_to_event(self.event, self.user)
attend_user_to_event(self.event, self.other_user)
G(Attendee, event=self.event.attendance_event)

r = self.client.delete(self.url)

self.assertEqual(r.status_code, status.HTTP_204_NO_CONTENT)
sleep(2)
self.assertEqual(len(mail.outbox), 1)
self.assertIn("Du har fått plass på", mail.outbox[0].subject)
payment_delay = PaymentDelay.objects.get(user=self.other_user)
self.assertEqual(payment_delay.valid_to, timezone.now() + payment_delay_time)
74 changes: 0 additions & 74 deletions apps/events/forms.py

This file was deleted.

4 changes: 4 additions & 0 deletions apps/events/models/Attendance.py
Original file line number Diff line number Diff line change
Expand Up @@ -730,6 +730,10 @@ def unattend(self, admin_user):
if not self.has_paid:
self._clean_payment_delays()

# if self.has_paid:
# if self.payment_relations.first()
# we need to issue a refund

# TODO: Not delete attendee unless payments have been refunded?
self.delete()

Expand Down
Empty file.
10 changes: 0 additions & 10 deletions apps/events/templatetags/calendar_filters.py

This file was deleted.

8 changes: 0 additions & 8 deletions apps/events/templatetags/payment_tag.py

This file was deleted.

12 changes: 0 additions & 12 deletions apps/events/templatetags/shuffle.py

This file was deleted.

97 changes: 0 additions & 97 deletions apps/events/tests/api_tests.py

This file was deleted.

Loading

0 comments on commit 308415f

Please sign in to comment.