From c1131a5a17c0d7c1bd6c2dd9858b4246e375c041 Mon Sep 17 00:00:00 2001 From: Christian Merten Date: Sun, 17 Aug 2025 14:17:57 +0200 Subject: [PATCH] chore(mailer/tests): unsubscribe view tests --- jdav_web/mailer/tests/__init__.py | 1 + jdav_web/mailer/tests/models.py | 17 +------- jdav_web/mailer/tests/utils.py | 27 +++++++++++++ jdav_web/mailer/tests/views.py | 65 +++++++++++++++++++++++++++++++ 4 files changed, 94 insertions(+), 16 deletions(-) create mode 100644 jdav_web/mailer/tests/utils.py create mode 100644 jdav_web/mailer/tests/views.py diff --git a/jdav_web/mailer/tests/__init__.py b/jdav_web/mailer/tests/__init__.py index 012e5e5..a80e178 100644 --- a/jdav_web/mailer/tests/__init__.py +++ b/jdav_web/mailer/tests/__init__.py @@ -1,2 +1,3 @@ from .models import * from .admin import * +from .views import * diff --git a/jdav_web/mailer/tests/models.py b/jdav_web/mailer/tests/models.py index 8e6156c..ded8fad 100644 --- a/jdav_web/mailer/tests/models.py +++ b/jdav_web/mailer/tests/models.py @@ -8,22 +8,7 @@ from django.core.files.uploadedfile import SimpleUploadedFile from members.models import Member, Group, DIVERSE, Freizeit, MemberNoteList, GEMEINSCHAFTS_TOUR, MUSKELKRAFT_ANREISE from mailer.models import EmailAddress, EmailAddressForm, Message, MessageForm, Attachment from mailer.mailutils import SENT, NOT_SENT, PARTLY_SENT - - -class BasicMailerTestCase(TestCase): - def setUp(self): - self.mygroup = Group.objects.create(name="My Group") - self.fritz = Member.objects.create(prename="Fritz", lastname="Wulter", birth_date=timezone.now().date(), - email='fritz@foo.com', gender=DIVERSE) - self.fritz.group.add(self.mygroup) - self.fritz.save() - - self.paul = Member.objects.create(prename="Paul", lastname="Wulter", birth_date=timezone.now().date(), - email='paul@foo.com', gender=DIVERSE) - - self.em = EmailAddress.objects.create(name='foobar') - self.em.to_groups.add(self.mygroup) - self.em.to_members.add(self.paul) +from .utils import BasicMailerTestCase class EmailAddressTestCase(BasicMailerTestCase): diff --git a/jdav_web/mailer/tests/utils.py b/jdav_web/mailer/tests/utils.py new file mode 100644 index 0000000..3ad3e50 --- /dev/null +++ b/jdav_web/mailer/tests/utils.py @@ -0,0 +1,27 @@ +from unittest import skip, mock +from django.test import TestCase +from django.conf import settings +from django.utils import timezone +from django.core.exceptions import ValidationError +from django.utils.translation import gettext as _ +from django.core.files.uploadedfile import SimpleUploadedFile +from members.models import Member, Group, DIVERSE, Freizeit, MemberNoteList, GEMEINSCHAFTS_TOUR, MUSKELKRAFT_ANREISE +from mailer.models import EmailAddress, EmailAddressForm, Message, MessageForm, Attachment +from mailer.mailutils import SENT, NOT_SENT, PARTLY_SENT + + +class BasicMailerTestCase(TestCase): + def setUp(self): + self.mygroup = Group.objects.create(name="My Group") + self.fritz = Member.objects.create(prename="Fritz", lastname="Wulter", birth_date=timezone.now().date(), + email='fritz@foo.com', gender=DIVERSE) + self.fritz.group.add(self.mygroup) + self.fritz.save() + self.fritz.generate_key() + + self.paul = Member.objects.create(prename="Paul", lastname="Wulter", birth_date=timezone.now().date(), + email='paul@foo.com', gender=DIVERSE) + + self.em = EmailAddress.objects.create(name='foobar') + self.em.to_groups.add(self.mygroup) + self.em.to_members.add(self.paul) diff --git a/jdav_web/mailer/tests/views.py b/jdav_web/mailer/tests/views.py new file mode 100644 index 0000000..fc00b54 --- /dev/null +++ b/jdav_web/mailer/tests/views.py @@ -0,0 +1,65 @@ +from unittest import skip, mock +from http import HTTPStatus +from django.urls import reverse +from django.test import TestCase +from django.conf import settings +from django.utils import timezone +from django.core.exceptions import ValidationError +from django.utils.translation import gettext as _ +from django.core.files.uploadedfile import SimpleUploadedFile +from members.models import Member, Group, DIVERSE, Freizeit, MemberNoteList, GEMEINSCHAFTS_TOUR, MUSKELKRAFT_ANREISE +from mailer.models import EmailAddress, EmailAddressForm, Message, MessageForm, Attachment +from mailer.mailutils import SENT, NOT_SENT, PARTLY_SENT +from .utils import BasicMailerTestCase + + +class IndexTestCase(BasicMailerTestCase): + def test_index(self): + url = reverse('mailer:index') + response = self.client.get(url) + self.assertEqual(response.status_code, HTTPStatus.FOUND) + + +class UnsubscribeTestCase(BasicMailerTestCase): + def test_unsubscribe(self): + url = reverse('mailer:unsubscribe') + response = self.client.get(url) + self.assertEqual(response.status_code, HTTPStatus.OK) + self.assertContains(response, _("Here you can unsubscribe from the newsletter")) + + def test_unsubscribe_key_invalid(self): + url = reverse('mailer:unsubscribe') + + # invalid key + response = self.client.get(url, data={'key': 'invalid'}) + self.assertEqual(response.status_code, HTTPStatus.OK) + self.assertContains(response, _("Can't verify this link. Try again!")) + + # expired key + self.fritz.unsubscribe_expire = timezone.now() + self.fritz.save() + response = self.client.get(url, data={'key': self.fritz.unsubscribe_key}) + self.assertEqual(response.status_code, HTTPStatus.OK) + self.assertContains(response, _("Can't verify this link. Try again!")) + + def test_unsubscribe_key(self): + url = reverse('mailer:unsubscribe') + response = self.client.get(url, data={'key': self.fritz.unsubscribe_key}) + self.assertEqual(response.status_code, HTTPStatus.OK) + self.assertContains(response, _("Successfully unsubscribed from the newsletter for ")) + + def test_unsubscribe_post_incomplete(self): + url = reverse('mailer:unsubscribe') + response = self.client.post(url, data={'post': True}) + self.assertEqual(response.status_code, HTTPStatus.OK) + self.assertContains(response, _("Please fill in every field")) + + response = self.client.post(url, data={'post': True, 'email': 'foobar@notexisting.com'}) + self.assertEqual(response.status_code, HTTPStatus.OK) + self.assertContains(response, _("Please fill in every field")) + + def test_unsubscribe_post(self): + url = reverse('mailer:unsubscribe') + response = self.client.post(url, data={'post': True, 'email': self.fritz.email}) + self.assertEqual(response.status_code, HTTPStatus.OK) + self.assertContains(response, _("Sent confirmation mail to"))