From fad8605aa78301b012df58e41314603d213893e0 Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Wed, 3 Jun 2015 18:09:00 +0200 Subject: [PATCH] Add unit tests for our mail API --- src/pretix/base/models.py | 2 +- src/pretix/base/services/mail.py | 2 +- src/pretix/settings.py | 6 +++ src/pytest.ini | 2 +- src/tests/base/test_mail.py | 64 ++++++++++++++++++++++++++++++++ src/tests/settings.py | 5 +++ src/tests/templates/mailtest.txt | 4 ++ 7 files changed, 82 insertions(+), 3 deletions(-) create mode 100644 src/tests/base/test_mail.py create mode 100644 src/tests/settings.py create mode 100644 src/tests/templates/mailtest.txt diff --git a/src/pretix/base/models.py b/src/pretix/base/models.py index a4f2784a58..9f95267c07 100644 --- a/src/pretix/base/models.py +++ b/src/pretix/base/models.py @@ -484,7 +484,7 @@ class Event(Versionable): return EventRelatedCache(self) @cached_property - def settings(self): + def settings(self) -> SettingsProxy: """ Returns an object representing this event's settings """ diff --git a/src/pretix/base/services/mail.py b/src/pretix/base/services/mail.py index 11ce702fae..57d99c3cfc 100644 --- a/src/pretix/base/services/mail.py +++ b/src/pretix/base/services/mail.py @@ -37,7 +37,7 @@ def mail(user: User, subject: str, template: str, context: dict, event: Event=No sender = event.settings.get('mail_from') if event else settings.MAIL_FROM email = EmailMessage( - subject, body, sender, + str(subject), body, sender, to=[user.email] ) diff --git a/src/pretix/settings.py b/src/pretix/settings.py index 8482f74113..d7e6ea5e17 100644 --- a/src/pretix/settings.py +++ b/src/pretix/settings.py @@ -219,6 +219,7 @@ LOGGING = { 'console': { 'level': loglevel, 'class': 'logging.StreamHandler', + 'formatter': 'default' }, 'file': { 'level': loglevel, @@ -243,5 +244,10 @@ LOGGING = { 'level': loglevel, 'propagate': True, }, + 'django.db.backends.schema': { + 'handlers': ['file', 'console'], + 'level': 'INFO', # Do not output all the queries + 'propagate': True, + } }, } diff --git a/src/pytest.ini b/src/pytest.ini index 6a00918430..77fb163990 100644 --- a/src/pytest.ini +++ b/src/pytest.ini @@ -1,3 +1,3 @@ [pytest] -DJANGO_SETTINGS_MODULE=pretix.settings +DJANGO_SETTINGS_MODULE=tests.settings diff --git a/src/tests/base/test_mail.py b/src/tests/base/test_mail.py new file mode 100644 index 0000000000..0e546ebf13 --- /dev/null +++ b/src/tests/base/test_mail.py @@ -0,0 +1,64 @@ +from django.conf import settings +from django.utils.timezone import now +from django.core import mail as djmail +from django.utils.translation import ugettext_lazy as _ +import pytest + +from pretix.base.models import Event, Organizer, User +from pretix.base.services.mail import mail + + +@pytest.fixture +def env(): + o = Organizer.objects.create(name='Dummy', slug='dummy') + event = Event.objects.create( + organizer=o, name='Dummy', slug='dummy', + date_from=now(), plugins='pretix.plugins.banktransfer' + ) + user = User.objects.create_user('dummy@dummy.dummy', 'dummy@dummy.dummy', 'dummy') + user.email = 'dummy@dummy.dummy' + user.save() + return event, user, o + + +@pytest.mark.django_db +def test_send_mail_with_event_sender(client, env): + djmail.outbox = [] + event, user, organizer = env + event.settings.set('mail_from', 'foo@bar') + mail(user, 'Test subject', + 'mailtest.txt', {}, event) + + assert len(djmail.outbox) == 1 + assert djmail.outbox[0].to == [user.email] + assert djmail.outbox[0].subject == 'Test subject' + assert djmail.outbox[0].from_email == 'foo@bar' + + +@pytest.mark.django_db +def test_send_mail_with_default_sender(client, env): + djmail.outbox = [] + event, user, organizer = env + mail(user, 'Test subject', + 'mailtest.txt', {}, event) + del event.settings['mail_from'] + + assert len(djmail.outbox) == 1 + assert djmail.outbox[0].to == [user.email] + assert djmail.outbox[0].subject == 'Test subject' + assert djmail.outbox[0].from_email == settings.MAIL_FROM + + +@pytest.mark.django_db +def test_send_mail_with_user_locale(client, env): + djmail.outbox = [] + event, user, organizer = env + user.locale = 'de' + user.save() + mail(user, _('User'), + 'mailtest.txt', {}, event) + del event.settings['mail_from'] + + assert len(djmail.outbox) == 1 + assert djmail.outbox[0].subject == 'Benutzer' + assert 'The language code used for rendering this e-mail is de.' in djmail.outbox[0].body diff --git a/src/tests/settings.py b/src/tests/settings.py new file mode 100644 index 0000000000..34b7a3e6d7 --- /dev/null +++ b/src/tests/settings.py @@ -0,0 +1,5 @@ +from pretix.settings import * + +TEST_DIR = os.path.dirname(__file__) + +TEMPLATES[0]['DIRS'].append(os.path.join(TEST_DIR, 'templates')) diff --git a/src/tests/templates/mailtest.txt b/src/tests/templates/mailtest.txt new file mode 100644 index 0000000000..3ff57d7d04 --- /dev/null +++ b/src/tests/templates/mailtest.txt @@ -0,0 +1,4 @@ +{% load i18n %} +This is a test file for sending mails. +{% get_current_language as LANGUAGE_CODE %} +The language code used for rendering this e-mail is {{ LANGUAGE_CODE }}. \ No newline at end of file