diff --git a/src/pretix/base/models.py b/src/pretix/base/models.py index a4f2784a5..9f95267c0 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 11ce702fa..57d99c3cf 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 8482f7411..d7e6ea5e1 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 6a0091843..77fb16399 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 000000000..0e546ebf1 --- /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 000000000..34b7a3e6d --- /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 000000000..3ff57d7d0 --- /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