summaryrefslogtreecommitdiff
path: root/fundraising
diff options
context:
space:
mode:
authorAdam Zapletal <adamzap@gmail.com>2025-09-13 21:01:38 -0500
committerSaptak Sengupta <saptak013@gmail.com>2025-09-25 00:18:50 +0530
commitfa886d667d5e88bb0c06866b251acc03a4c97311 (patch)
treed61fb8c1d2f09c540477b4e353dce6515d17aa77 /fundraising
parentc4ec1cd97882bfdf7a76b9264f5fd94336cef12a (diff)
Add top `CorporateMember`s to `docs` sidebar
This was requested by the fundraising working group. I abstracted the top `CorporateMember` display from the `releases` app sidebar into a new inclusion tag called `top_corporate_members` and included it in its original place as well as in the `docs` sidebar as requested. Uploaded images for `CorporateMember`s may not display in local development environments do to the way media files paths work with subdomains.
Diffstat (limited to 'fundraising')
-rw-r--r--fundraising/templatetags/fundraising_extras.py7
-rw-r--r--fundraising/tests/test_templatetags.py76
2 files changed, 82 insertions, 1 deletions
diff --git a/fundraising/templatetags/fundraising_extras.py b/fundraising/templatetags/fundraising_extras.py
index 55b3ecf2..2d78ef9e 100644
--- a/fundraising/templatetags/fundraising_extras.py
+++ b/fundraising/templatetags/fundraising_extras.py
@@ -111,3 +111,10 @@ def display_django_heroes():
"display_logo_amount": int(LEADERSHIP_LEVEL_AMOUNT),
"corporate_membership_amounts": CORPORATE_MEMBERSHIP_AMOUNTS,
}
+
+
+@register.inclusion_tag("fundraising/includes/top_corporate_members.html")
+def top_corporate_members():
+ members = CorporateMember.objects.by_membership_level()
+
+ return {"members": members["diamond"] + members["platinum"]}
diff --git a/fundraising/tests/test_templatetags.py b/fundraising/tests/test_templatetags.py
index 0cf46024..42118779 100644
--- a/fundraising/tests/test_templatetags.py
+++ b/fundraising/tests/test_templatetags.py
@@ -1,4 +1,4 @@
-from datetime import datetime, timedelta
+from datetime import date, datetime, timedelta
from decimal import Decimal
from django.test import TestCase
@@ -17,6 +17,7 @@ from ..models import (
from ..templatetags.fundraising_extras import (
display_django_heroes,
donation_form_with_heart,
+ top_corporate_members,
)
@@ -93,3 +94,76 @@ class TestDisplayDjangoHeroes(TestCase):
response = display_django_heroes()
self.assertEqual(response["heroes"], [hero2, hero3])
+
+
+class TestTopCorporateMembers(TestCase):
+ past_date = date(2000, 1, 1)
+ future_date = date(3000, 1, 1)
+
+ @classmethod
+ def setUpTestData(cls):
+ member_1 = CorporateMember.objects.create(membership_level=1)
+ member_2 = CorporateMember.objects.create(membership_level=2)
+ member_3 = CorporateMember.objects.create(membership_level=3)
+ member_4 = CorporateMember.objects.create(membership_level=4)
+ member_5 = CorporateMember.objects.create(membership_level=5)
+
+ member_1.invoice_set.create(amount=5, expiration_date=cls.future_date)
+ member_2.invoice_set.create(amount=5, expiration_date=cls.future_date)
+ member_3.invoice_set.create(amount=5, expiration_date=cls.future_date)
+ member_4.invoice_set.create(amount=5, expiration_date=cls.past_date)
+ member_5.invoice_set.create(amount=5, expiration_date=cls.past_date)
+
+ def test_with_no_platinum_or_diamond_members(self):
+ members = top_corporate_members()["members"]
+
+ self.assertEqual(members, [])
+
+ def test_with_diamond_members_and_no_platinum_members(self):
+ member_1 = CorporateMember.objects.create(membership_level=5)
+ member_2 = CorporateMember.objects.create(membership_level=5)
+ member_3 = CorporateMember.objects.create(membership_level=5)
+
+ member_1.invoice_set.create(amount=4, expiration_date=self.future_date)
+ member_2.invoice_set.create(amount=8, expiration_date=self.future_date)
+ member_3.invoice_set.create(amount=2, expiration_date=self.future_date)
+
+ members = top_corporate_members()["members"]
+
+ self.assertEqual(members, [member_2, member_1, member_3])
+
+ def test_with_platinum_members_and_no_diamond_members(self):
+ member_1 = CorporateMember.objects.create(membership_level=4)
+ member_2 = CorporateMember.objects.create(membership_level=4)
+ member_3 = CorporateMember.objects.create(membership_level=4)
+
+ member_1.invoice_set.create(amount=4, expiration_date=self.future_date)
+ member_2.invoice_set.create(amount=8, expiration_date=self.future_date)
+ member_3.invoice_set.create(amount=2, expiration_date=self.future_date)
+
+ members = top_corporate_members()["members"]
+
+ self.assertEqual(members, [member_2, member_1, member_3])
+
+ def test_with_diamond_members_and_platinum_members(self):
+ member_1 = CorporateMember.objects.create(membership_level=4)
+ member_2 = CorporateMember.objects.create(membership_level=4)
+ member_3 = CorporateMember.objects.create(membership_level=4)
+
+ member_4 = CorporateMember.objects.create(membership_level=5)
+ member_5 = CorporateMember.objects.create(membership_level=5)
+ member_6 = CorporateMember.objects.create(membership_level=5)
+
+ member_1.invoice_set.create(amount=4, expiration_date=self.future_date)
+ member_2.invoice_set.create(amount=8, expiration_date=self.future_date)
+ member_3.invoice_set.create(amount=2, expiration_date=self.future_date)
+
+ member_4.invoice_set.create(amount=4, expiration_date=self.future_date)
+ member_5.invoice_set.create(amount=8, expiration_date=self.future_date)
+ member_6.invoice_set.create(amount=2, expiration_date=self.future_date)
+
+ members = top_corporate_members()["members"]
+
+ expected = [member_5, member_4, member_6, member_2, member_1, member_3]
+
+ self.assertEqual(members, expected)