diff --git a/djangoproject/templates/releases/download.html b/djangoproject/templates/releases/download.html
index f6c4fd3064..cf7f8a0730 100644
--- a/djangoproject/templates/releases/download.html
+++ b/djangoproject/templates/releases/download.html
@@ -279,7 +279,7 @@
Unsupported previous releases
- {% top_corporate_members %}
+ {% top_corporate_members "diamond" "platinum" header="Diamond and Platinum Members" %}
{% donation_snippet %}
diff --git a/docs/templates/docs/doc.html b/docs/templates/docs/doc.html
index 2373d2114a..ed228bd1e7 100644
--- a/docs/templates/docs/doc.html
+++ b/docs/templates/docs/doc.html
@@ -223,6 +223,6 @@
{% endblock links-wrapper %}
- {% top_corporate_members %}
+ {% top_corporate_members "diamond" "platinum" header="Diamond and Platinum Members" %}
{% endblock content-related %}
diff --git a/fundraising/templatetags/fundraising_extras.py b/fundraising/templatetags/fundraising_extras.py
index 2d78ef9ea9..bed1708a9b 100644
--- a/fundraising/templatetags/fundraising_extras.py
+++ b/fundraising/templatetags/fundraising_extras.py
@@ -114,7 +114,16 @@ def display_django_heroes():
@register.inclusion_tag("fundraising/includes/top_corporate_members.html")
-def top_corporate_members():
- members = CorporateMember.objects.by_membership_level()
+def top_corporate_members(*levels, header=None):
+ """
+ Usage:
+ {% top_corporate_members "diamond" "platinum" header="Diamond and Platinum Members" %}
+ """
- return {"members": members["diamond"] + members["platinum"]}
+ all_members: dict = CorporateMember.objects.by_membership_level()
+
+ members = []
+ for level in levels:
+ members.extend(all_members.get(level, []))
+
+ return {"header": header, "members": members}
diff --git a/fundraising/tests/test_templatetags.py b/fundraising/tests/test_templatetags.py
index 421187797e..74ca8da333 100644
--- a/fundraising/tests/test_templatetags.py
+++ b/fundraising/tests/test_templatetags.py
@@ -110,12 +110,14 @@ def setUpTestData(cls):
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_3.invoice_set.create(amount=5, expiration_date=cls.past_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"]
+ members = top_corporate_members(
+ "diamond", "platinum", header="Diamond and Platinum members"
+ )["members"]
self.assertEqual(members, [])
@@ -128,7 +130,9 @@ def test_with_diamond_members_and_no_platinum_members(self):
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"]
+ members = top_corporate_members(
+ "diamond", "platinum", header="Diamond and Platinum members"
+ )["members"]
self.assertEqual(members, [member_2, member_1, member_3])
@@ -141,7 +145,9 @@ def test_with_platinum_members_and_no_diamond_members(self):
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"]
+ members = top_corporate_members(
+ "diamond", "platinum", header="Diamond and Platinum members"
+ )["members"]
self.assertEqual(members, [member_2, member_1, member_3])
@@ -162,8 +168,50 @@ def test_with_diamond_members_and_platinum_members(self):
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"]
+ members = top_corporate_members(
+ "diamond", "platinum", header="Diamond and Platinum members"
+ )["members"]
expected = [member_5, member_4, member_6, member_2, member_1, member_3]
self.assertEqual(members, expected)
+
+ def test_with_diamond_platinum_and_gold_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_7 = CorporateMember.objects.create(membership_level=3)
+ member_8 = CorporateMember.objects.create(membership_level=3)
+
+ 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)
+
+ member_7.invoice_set.create(amount=8, expiration_date=self.future_date)
+ member_8.invoice_set.create(amount=2, expiration_date=self.future_date)
+
+ members = top_corporate_members(
+ "diamond", "platinum", "gold", header="Diamond, Platinum and Gold members"
+ )["members"]
+
+ expected = [
+ member_5,
+ member_4,
+ member_6,
+ member_2,
+ member_1,
+ member_3,
+ member_7,
+ member_8,
+ ]
+
+ self.assertEqual(members, expected)