From f83e58d8835a29aebcb95927c93aba76e652b025 Mon Sep 17 00:00:00 2001 From: George Katsikas <giorgakis.katsikas@gmail.com> Date: Wed, 17 Apr 2024 12:49:40 +0200 Subject: [PATCH] add mailinglist tests --- scipost_django/mailing_lists/factories.py | 36 ++++++++++++ scipost_django/mailing_lists/tests.py | 7 --- .../mailing_lists/tests/__init__.py | 0 .../mailing_lists/tests/test_factories.py | 57 +++++++++++++++++++ 4 files changed, 93 insertions(+), 7 deletions(-) create mode 100644 scipost_django/mailing_lists/factories.py delete mode 100644 scipost_django/mailing_lists/tests.py create mode 100644 scipost_django/mailing_lists/tests/__init__.py create mode 100644 scipost_django/mailing_lists/tests/test_factories.py diff --git a/scipost_django/mailing_lists/factories.py b/scipost_django/mailing_lists/factories.py new file mode 100644 index 000000000..4b1e60c7c --- /dev/null +++ b/scipost_django/mailing_lists/factories.py @@ -0,0 +1,36 @@ +__copyright__ = "Copyright © Stichting SciPost (SciPost Foundation)" +__license__ = "AGPL v3" + + +import factory +from django.utils.text import slugify + +from .models import * + + +class MailingListFactory(factory.django.DjangoModelFactory): + class Meta: + model = MailingList + + name = factory.Faker("word") + slug = factory.LazyAttribute(lambda self: slugify(self.name)) + + is_opt_in = False + + @factory.post_generation + def eligible_subscribers(self, create, extracted, **kwargs): + if not create: + return + + if extracted: + for contributor in extracted: + self.eligible_subscribers.add(contributor) + + @factory.post_generation + def subscribed(self, create, extracted, **kwargs): + if not create: + return + + if extracted: + for contributor in extracted: + self.subscribed.add(contributor) diff --git a/scipost_django/mailing_lists/tests.py b/scipost_django/mailing_lists/tests.py deleted file mode 100644 index ddef03c4d..000000000 --- a/scipost_django/mailing_lists/tests.py +++ /dev/null @@ -1,7 +0,0 @@ -__copyright__ = "Copyright © Stichting SciPost (SciPost Foundation)" -__license__ = "AGPL v3" - - -from django.test import TestCase - -# Create your tests here. diff --git a/scipost_django/mailing_lists/tests/__init__.py b/scipost_django/mailing_lists/tests/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/scipost_django/mailing_lists/tests/test_factories.py b/scipost_django/mailing_lists/tests/test_factories.py new file mode 100644 index 000000000..f01b42cc8 --- /dev/null +++ b/scipost_django/mailing_lists/tests/test_factories.py @@ -0,0 +1,57 @@ +__copyright__ = "Copyright © Stichting SciPost (SciPost Foundation)" +__license__ = "AGPL v3" + +from django.test import TestCase + +from profiles.factories import ProfileEmailFactory +from scipost.factories import ContributorFactory +from ..factories import * + + +class TestMailingListFactory(TestCase): + def test_can_create_mailing_lists(self): + mailing_list = MailingListFactory() + self.assertIsNotNone(mailing_list) + + def test_can_subscribe_contributor(self): + profile_email = ProfileEmailFactory(primary=True) + contributor = ContributorFactory.from_profile(profile_email.profile) + mailing_list = MailingListFactory() + mailing_list.add_eligible_subscriber(contributor) + + self.assertEqual(mailing_list.eligible_subscribers.count(), 1) + self.assertEqual(mailing_list.subscribed.count(), 1) + self.assertEquals(mailing_list.email_list, [profile_email.email]) + + def test_can_unsubscribe_contributor(self): + profile_email = ProfileEmailFactory(primary=True) + contributor = ContributorFactory.from_profile(profile_email.profile) + mailing_list = MailingListFactory() + + mailing_list.add_eligible_subscriber(contributor) + mailing_list.unsubscribe(contributor) + + self.assertEqual(mailing_list.eligible_subscribers.count(), 1) + self.assertEqual(mailing_list.subscribed.count(), 0) + self.assertEquals(mailing_list.email_list, []) + + def test_does_not_automatically_subscribe_if_opt_in(self): + profile_email = ProfileEmailFactory(primary=True) + contributor = ContributorFactory.from_profile(profile_email.profile) + mailing_list = MailingListFactory(is_opt_in=True) + mailing_list.add_eligible_subscriber(contributor) + + self.assertEqual(mailing_list.eligible_subscribers.count(), 1) + self.assertEqual(mailing_list.subscribed.count(), 0) + self.assertEquals(mailing_list.email_list, []) + + def test_does_not_include_nonprimary_emails(self): + profile_email = ProfileEmailFactory(primary=False) + profile_email_primary = ProfileEmailFactory( + primary=True, profile=profile_email.profile + ) + contributor = ContributorFactory.from_profile(profile_email.profile) + mailing_list = MailingListFactory() + mailing_list.add_eligible_subscriber(contributor) + + self.assertEquals(mailing_list.email_list, [profile_email_primary.email]) -- GitLab