diff options
| author | Adam Zapletal <adamzap@gmail.com> | 2024-11-30 14:03:09 -0600 |
|---|---|---|
| committer | Baptiste Mispelon <bmispelon@gmail.com> | 2024-12-06 21:40:27 +0100 |
| commit | 6757a83ffc82a0710f5f3c1ee3fd22d3be98695b (patch) | |
| tree | 31f8472054ea73811b5df3ab8d7cf711bf26e21a /fundraising | |
| parent | 0d4e748ce6c019906c0bf9051dfc7f66f84bea5f (diff) | |
Removed `unveil` JavaScript library
The `unveil` library is used to lazy-load images, and its last release
was in 2013. This is useful functionality, but we don't need JavaScript
to get it. All modern browsers now support it natively with the
`loading="lazy"` attribute on the `img` HTML tag:
- https://caniuse.com/loading-lazy-attr
- https://developer.mozilla.org/en-US/docs/Web/HTML/Element/img#loading
This patch removes the `unveil` library and all references to it and
uses the `loading` attribute in the one place where `unveil` was being
used. This includes `fundraising-heroes.js`, the sole purpose of which
was to initialize `unveil`.
Diffstat (limited to 'fundraising')
| -rw-r--r-- | fundraising/tests/test_views.py | 77 |
1 files changed, 72 insertions, 5 deletions
diff --git a/fundraising/tests/test_views.py b/fundraising/tests/test_views.py index 78d244b1..ab629b25 100644 --- a/fundraising/tests/test_views.py +++ b/fundraising/tests/test_views.py @@ -1,30 +1,98 @@ import json -from datetime import datetime +import shutil +import tempfile +from base64 import b64decode +from datetime import date, datetime from operator import attrgetter from unittest.mock import patch import stripe from django.conf import settings from django.core import mail +from django.core.files.base import ContentFile from django.template.defaultfilters import date as date_filter from django.test import TestCase -from django.test.utils import override_settings from django.urls import reverse from django_hosts.resolvers import reverse as django_hosts_reverse from django_recaptcha.client import RecaptchaResponse +from members.models import CorporateMember, Invoice + from ..models import DjangoHero, Donation +class TemporaryMediaRootMixin: + """ + A TestCase mixin that overrides settings.MEDIA_ROOT for every test on the + class to point to a temporary directory that is destroyed when the tests + finished. + The content of the directory persists between different tests on the class. + """ + + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.tmpdir = tempfile.mkdtemp(prefix="djangoprojectcom_") + + @classmethod + def tearDownClass(cls): + shutil.rmtree(cls.tmpdir, ignore_errors=True) + super().tearDownClass() + + def run(self, result=None): + with self.settings(MEDIA_ROOT=self.tmpdir): + return super().run(result) + + class TestIndex(TestCase): def test_redirect(self): response = self.client.get(reverse("fundraising:index")) self.assertEqual(response.status_code, 200) -class TestCampaign(TestCase): +class TestCampaign(TemporaryMediaRootMixin, TestCase): def setUp(self): self.index_url = reverse("fundraising:index") + self.imagefile = ContentFile( + content=b64decode( + "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAA" + "DUlEQVR42mPk8Tb+DwACgAGLzMGnPAAAAABJRU5ErkJggg==" + ), + name="logo.png", + ) + + def test_corporate_member_without_logo(self): + member = CorporateMember.objects.create( + display_name="Test Member", membership_level=1, logo=None + ) + Invoice.objects.create(amount=100, expiration_date=date.today(), member=member) + response = self.client.get(self.index_url) + + self.assertContains( + response, + '<img src="/s/img/fundraising-heart.svg" alt="Pixelated heart logo">', + html=True, + ) + + def test_corporate_member_with_logo(self): + member = CorporateMember.objects.create( + display_name="Test Member", membership_level=1, logo=self.imagefile + ) + Invoice.objects.create(amount=100, expiration_date=date.today(), member=member) + response = self.client.get(self.index_url) + + self.assertContains( + response, + """<img + src="/m/cache/9b/e7/9be7b86ebc112b001cad84f900bf0bf7.png" + srcset="/m/cache/9b/e7/9be7b86ebc112b001cad84f900bf0bf7@2x.png 2x" + width="170" + height="170" + loading="lazy" + alt="Logo of company Test Member" + >""", + html=True, + ) def test_anonymous_donor(self): hero = DjangoHero.objects.create( @@ -35,13 +103,12 @@ class TestCampaign(TestCase): response = self.client.get(self.index_url) self.assertContains(response, "Anonymous Hero") - @override_settings(MEDIA_ROOT="djangoproject/") def test_anonymous_donor_with_logo(self): hero = DjangoHero.objects.create( is_visible=True, approved=True, hero_type="individual", - logo="static/img/logo-django.png", + logo=self.imagefile, ) donation = hero.donation_set.create(subscription_amount="5") donation.payment_set.create(amount="5") |
