From 3591ebd08e45b5a553e7bdfdd8e0721adf9d38ae Mon Sep 17 00:00:00 2001 From: Christian Merten Date: Thu, 27 Feb 2025 01:40:56 +0100 Subject: [PATCH] feat(members/waitinglist): refine wait confirmation status Rework the wait cofirmation status shown in the admin: If there is a pending wait confirmation request (i.e. the number of sent reminders is positive), the status is either `None` (i.e. undecided) or `False`. Otherwise the status is `True`. --- jdav_web/members/models.py | 15 +++++++++++---- jdav_web/members/tests.py | 9 ++++----- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/jdav_web/members/models.py b/jdav_web/members/models.py index 6166321..14227dd 100644 --- a/jdav_web/members/models.py +++ b/jdav_web/members/models.py @@ -938,10 +938,17 @@ class MemberWaitingList(Person): def waiting_confirmed(self): """Returns if the persons waiting status is considered to be confirmed.""" - cutoff = timezone.now() \ - - timezone.timedelta(days= settings.GRACE_PERIOD_WAITING_CONFIRMATION \ - + settings.WAITING_CONFIRMATION_FREQUENCY) - return self.last_wait_confirmation > cutoff.date() + if self.sent_reminders > 0: + # there was sent at least one wait confirmation request + if timezone.now() < self.wait_confirmation_key_expire: + # the request has not expired yet + return None + else: + # we sent a request that has expired + return False + else: + # if there exist no pending or expired reminders, the waiter remains confirmed + return True waiting_confirmed.admin_order_field = 'last_wait_confirmation' waiting_confirmed.boolean = True waiting_confirmed.short_description = _('Waiting status confirmed') diff --git a/jdav_web/members/tests.py b/jdav_web/members/tests.py index 8bf4e4f..74dc9ca 100644 --- a/jdav_web/members/tests.py +++ b/jdav_web/members/tests.py @@ -1479,15 +1479,14 @@ class ConfirmWaitingViewTestCase(BasicMemberTestCase): self.assertEqual(waiter.leave_key, '') def test_get_expired(self): - self.waiter.last_wait_confirmation = datetime.date(1900, 1, 1) - self.waiter.save() - # after setting the last wait confirmation to an old date, the waiting status - # should be unconfirmed - self.assertFalse(self.waiter.waiting_confirmed()) + # waiter has a pending confirmation request + self.assertEqual(self.waiter.waiting_confirmed(), None) url = reverse('members:confirm_waiting') self.waiter.wait_confirmation_key_expire = timezone.now() - timezone.timedelta(days=10) self.waiter.save() + # waiter has pending confirmation request, but request has expired + self.assertEqual(self.waiter.waiting_confirmed(), False) response = self.client.get(url, data={'key': self.key}) self.assertEqual(response.status_code, HTTPStatus.OK) self.assertContains(response, _('rejoin the waiting list'))