fix(events): keep registration status reads nonblocking
This commit is contained in:
@@ -4,8 +4,9 @@ from datetime import timedelta
|
||||
from django.contrib import admin
|
||||
from django.utils import timezone
|
||||
from apps.events.admin import EventAdmin, RegistrationAdmin
|
||||
from apps.events.models import Event, Registration
|
||||
from apps.events.models import Event, Registration, RegistrationNotification
|
||||
from apps.events.tasks import send_registration_cancellation_notification, send_registration_confirmation_notification
|
||||
from apps.events.tasks import deliver_pending_registration_notifications
|
||||
from apps.users.models import User
|
||||
|
||||
@pytest.mark.django_db
|
||||
@@ -25,10 +26,33 @@ class TestEventModelTests:
|
||||
|
||||
def test_capacity_counts_confirmed_registration(self, mocker):
|
||||
delay = mocker.patch('apps.events.tasks.send_registration_confirmation_notification.delay')
|
||||
Registration.objects.create(event=self.event, user=self.user, status=Registration.StatusChoices.CONFIRMED)
|
||||
registration = Registration.objects.create(event=self.event, user=self.user, status=Registration.StatusChoices.CONFIRMED)
|
||||
assert self.event.current_attendees_count == 1
|
||||
assert not self.event.has_available_slots
|
||||
delay.assert_called_once()
|
||||
assert RegistrationNotification.objects.filter(
|
||||
registration=registration, kind=RegistrationNotification.Kind.CONFIRMED,
|
||||
).exists()
|
||||
delay.assert_not_called()
|
||||
|
||||
def test_notification_worker_retries_after_redis_failure(self, mocker):
|
||||
registration = Registration.objects.create(
|
||||
event=self.event, user=self.user, status=Registration.StatusChoices.CONFIRMED,
|
||||
)
|
||||
entry = RegistrationNotification.objects.get(registration=registration)
|
||||
notify = mocker.patch("apps.events.tasks.notify_user", side_effect=ConnectionError("redis unavailable"))
|
||||
|
||||
assert deliver_pending_registration_notifications() == 0
|
||||
entry.refresh_from_db()
|
||||
assert entry.delivered_at is None
|
||||
|
||||
notify.side_effect = None
|
||||
assert deliver_pending_registration_notifications() == 1
|
||||
entry.refresh_from_db()
|
||||
registration.refresh_from_db()
|
||||
assert entry.delivered_at is not None
|
||||
assert registration.confirmation_notification_sent_at is not None
|
||||
assert notify.call_args.args[1]["id"] == f"registration-{entry.pk}-confirmed"
|
||||
assert deliver_pending_registration_notifications() == 0
|
||||
|
||||
def test_unlimited_capacity_allows_registration(self):
|
||||
self.event.capacity = None
|
||||
|
||||
Reference in New Issue
Block a user