Source code for pagetools.subscriptions.tests.test_views

from unittest import mock

from django.conf import settings
from django.contrib.messages.storage.fallback import FallbackStorage
from django.core import mail
from django.test import RequestFactory, TestCase, override_settings
from django.urls import reverse

from pagetools.subscriptions.models import Subscriber
from pagetools.subscriptions.views import activate


[docs]class ViewTest(TestCase): @override_settings(EMAIL_BACKEND="django.core.mail.backends.locmem.EmailBackend") def _test_add_subscriber(self): settings.DEBUG = True url = reverse("subscriptions:subscribe", args=[]) self.client.post(url, {"email": "q@w.de"}) subs = Subscriber.objects.all() self.assertTrue(len(subs), 1) self.assertTrue(len(mail.outbox), 1)
[docs] def test_activate(self): self._test_add_subscriber() sub = Subscriber.objects.get(email="q@w.de") self.assertFalse(sub.is_activated) factory = RequestFactory() url = reverse("subscriptions:activate", kwargs={"key": sub.key}) request = factory.get(url) setattr(request, "session", "session") setattr(request, "resolver_match", mock.Mock(func=activate)) messages = FallbackStorage(request) setattr(request, "_messages", messages) self.assertFalse(sub.is_activated) activate(request, sub.key) sub.refresh_from_db() self.assertTrue(sub.is_activated)
[docs]class AdminViewTest(TestCase):
[docs] @override_settings(EMAIL_BACKEND="django.core.mail.backends.locmem.EmailBackend") def test_mass_subscription_valid(self): url = reverse("admin:pagetools_subscriptions_mass_subscription", args=[]) assert not Subscriber.objects.filter(email="q@w.de") req = self.client.post(url, {"entries": ["q@w.de"]}) self.assertTrue(Subscriber.objects.filter(email="q@w.de"), msg=Subscriber.objects.all()) assert req.status_code == 200, req.status_code
[docs] def test_mass_subscription_invalid(self): url = reverse("admin:pagetools_subscriptions_mass_subscription", args=[]) req = self.client.post(url, {"entries": ["qqq"]}) self.assertEqual(req.context["failures"], ["qqq"]) assert req.status_code == 200, req.status_code
[docs] def test_mass_subscription_valid_invalid(self): url = reverse("admin:pagetools_subscriptions_mass_subscription", args=[]) req = self.client.post(url, {"entries": ["q@w.de", "qqq"]}) self.assertEqual(req.context["failures"], ["qqq"]) assert not Subscriber.objects.filter(email="q@w.de") assert req.status_code == 200, req.status_code