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'))