Skip to content

Commit

Permalink
Update membership upgrade discount conditions to match HR (#3641)
Browse files Browse the repository at this point in the history
A user now gets the discount also in the year after last having been a member.
  • Loading branch information
DeD1rk authored Mar 13, 2024
1 parent 2d870c3 commit 743ab0b
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 3 deletions.
4 changes: 3 additions & 1 deletion website/registrations/forms.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
from datetime import timedelta

from django import forms
from django.conf import settings
from django.core.exceptions import NON_FIELD_ERRORS, ValidationError
Expand Down Expand Up @@ -223,7 +225,7 @@ def clean(self):
if Membership.objects.filter(
user=self.cleaned_data["member"],
type=Membership.MEMBER,
until__gte=now,
until__gte=now - timedelta(days=366),
since__lte=now,
).exists():
# The membership upgrade discount applies if, at the time a Renewal is
Expand Down
20 changes: 18 additions & 2 deletions website/registrations/tests/test_forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -177,6 +177,21 @@ def test_price_calculation(self):
)
renewal.delete()

with self.subTest("Member, membership upgrade discount (last year)"):
with freeze_time("2024-10-20"):
# The user had a membership last year, but still should get a discount.
self.data["length"] = Entry.MEMBERSHIP_STUDY
self.data["membership_type"] = Membership.MEMBER
form = forms.RenewalForm(self.data)
self.assertTrue(form.is_valid())
renewal = form.save()
self.assertEqual(
renewal.contribution,
settings.MEMBERSHIP_PRICES[Entry.MEMBERSHIP_STUDY]
- settings.MEMBERSHIP_PRICES[Entry.MEMBERSHIP_YEAR],
)
renewal.delete()

with self.subTest("Member, new year membership before expiry"):
with freeze_time("2024-08-20"):
self.data["length"] = Entry.MEMBERSHIP_YEAR
Expand All @@ -203,8 +218,9 @@ def test_price_calculation(self):
)
renewal.delete()

with self.subTest("Member, study membership after expiry"):
with freeze_time("2024-09-10"):
with self.subTest("Member, study membership after more than a year"):
with freeze_time("2025-09-10"):
# The membership discount applies up to 1 year after the user last had a membership.
self.data["length"] = Entry.MEMBERSHIP_STUDY
self.data["membership_type"] = Membership.MEMBER
form = forms.RenewalForm(self.data)
Expand Down

0 comments on commit 743ab0b

Please sign in to comment.