diff --git a/aggregator/tests.py b/aggregator/tests.py index 9f705be184..ed51c89b1f 100644 --- a/aggregator/tests.py +++ b/aggregator/tests.py @@ -92,7 +92,7 @@ def setUp(self, mocker): def test_community_index_number_of_queries(self): """Intended to prevent an n+1 issue on the community index view""" url = reverse("community-index") - with self.assertNumQueries(6): + with self.assertNumQueries(7): self.client.get(url) def test_empty_feed_type_not_rendered(self): diff --git a/djangoproject/templates/aggregator/index.html b/djangoproject/templates/aggregator/index.html index 461fed46b5..09bbf94cb6 100644 --- a/djangoproject/templates/aggregator/index.html +++ b/djangoproject/templates/aggregator/index.html @@ -1,5 +1,5 @@ {% extends "base_community.html" %} -{% load i18n %} +{% load fundraising_extras i18n %} {% block layout_class %}column-container sidebar-right{% endblock %} @@ -97,3 +97,7 @@

{{ feedtype.name }} {% endblock %} + +{% block content-related-extra %} + {% gold_corporate_members %} +{% endblock %} diff --git a/djangoproject/templates/base_community.html b/djangoproject/templates/base_community.html index fa76161a11..4ea2144cb9 100644 --- a/djangoproject/templates/base_community.html +++ b/djangoproject/templates/base_community.html @@ -23,6 +23,9 @@ {% block content-related %}

{% translate "Additional Information" %}

+ + {% block content-related-extra %}{% endblock %} + {% donation_snippet %}

{% translate "More Help" %}

diff --git a/djangoproject/templates/base_foundation.html b/djangoproject/templates/base_foundation.html index 877368019f..2ec56fd599 100644 --- a/djangoproject/templates/base_foundation.html +++ b/djangoproject/templates/base_foundation.html @@ -15,6 +15,9 @@ {# Always include

label and
with aria role. #}

{% translate "Additional Information" %}

+ + {% block content-related-extra %}{% endblock %} + {% donation_snippet %}

About the foundation

diff --git a/djangoproject/templates/flatpages/foundation.html b/djangoproject/templates/flatpages/foundation.html index e1a3b864e7..90186fb0ef 100644 --- a/djangoproject/templates/flatpages/foundation.html +++ b/djangoproject/templates/flatpages/foundation.html @@ -1,5 +1,5 @@ {% extends "base_foundation.html" %} - +{% load fundraising_extras %} {% block og_title %}{{ flatpage.title }}{% endblock %} {% block title %}{{ flatpage.title }}{% endblock %} @@ -8,3 +8,7 @@

{{ flatpage.title }}

{{ flatpage.content }} {% endblock %} + +{% block content-related-extra %} + {% gold_corporate_members %} +{% endblock %} diff --git a/djangoproject/templates/fundraising/includes/gold_corporate_members.html b/djangoproject/templates/fundraising/includes/gold_corporate_members.html new file mode 100644 index 0000000000..ad7cb298fa --- /dev/null +++ b/djangoproject/templates/fundraising/includes/gold_corporate_members.html @@ -0,0 +1,22 @@ +{% if members %} +
+

Gold Members

+ {% for obj in members %} +
+ +
+ +
+
+ {% endfor %} +
+{% endif %} diff --git a/fundraising/templatetags/fundraising_extras.py b/fundraising/templatetags/fundraising_extras.py index 2d78ef9ea9..b5dbbe5fc6 100644 --- a/fundraising/templatetags/fundraising_extras.py +++ b/fundraising/templatetags/fundraising_extras.py @@ -118,3 +118,10 @@ def top_corporate_members(): members = CorporateMember.objects.by_membership_level() return {"members": members["diamond"] + members["platinum"]} + + +@register.inclusion_tag("fundraising/includes/gold_corporate_members.html") +def gold_corporate_members(): + members = CorporateMember.objects.by_membership_level() + + return {"members": members["gold"]} diff --git a/fundraising/tests/test_templatetags.py b/fundraising/tests/test_templatetags.py index 421187797e..b5ebb8779e 100644 --- a/fundraising/tests/test_templatetags.py +++ b/fundraising/tests/test_templatetags.py @@ -17,6 +17,7 @@ from ..templatetags.fundraising_extras import ( display_django_heroes, donation_form_with_heart, + gold_corporate_members, top_corporate_members, ) @@ -167,3 +168,51 @@ def test_with_diamond_members_and_platinum_members(self): expected = [member_5, member_4, member_6, member_2, member_1, member_3] self.assertEqual(members, expected) + + +class TestGoldCorporateMembers(TestCase): + past_date = date(2000, 1, 1) + future_date = date(3000, 1, 1) + + def test_with_no_gold_members(self): + members = gold_corporate_members()["members"] + self.assertEqual(members, []) + + def test_with_gold_members(self): + member_1 = CorporateMember.objects.create(membership_level=3) + member_2 = CorporateMember.objects.create(membership_level=3) + member_3 = 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) + + members = gold_corporate_members()["members"] + + self.assertEqual(members, [member_2, member_1, member_3]) + + def test_with_gold_members_and_other_members(self): + member_1 = CorporateMember.objects.create(membership_level=3) + member_2 = CorporateMember.objects.create(membership_level=3) + 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 = gold_corporate_members()["members"] + self.assertEqual(members, [member_2, member_1]) + self.assertNotIn(member_3, members) + + def test_with_gold_members_and_expired_invoice(self): + member_1 = CorporateMember.objects.create(membership_level=3) + member_2 = CorporateMember.objects.create(membership_level=3) + 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.past_date) + + members = gold_corporate_members()["members"] + self.assertEqual(members, [member_2, member_1]) + self.assertNotIn(member_3, members)