UPD: more/better tests.
This commit is contained in:
@@ -1,21 +1,179 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
import datetime
|
||||
from django.apps import apps
|
||||
from django.contrib.auth import get_user_model
|
||||
from django.core import mail as django_mail
|
||||
from django.test import TestCase
|
||||
from django.utils import timezone
|
||||
|
||||
from dav_base.tests.generic import EmailTestCase
|
||||
|
||||
from ..models.event import Event
|
||||
from ..models.oneclickaction import OneClickAction
|
||||
from .. import emails
|
||||
|
||||
from .generic import RoleMixin
|
||||
|
||||
class EmailsTestCase(TestCase):
|
||||
TEST_EVENT_DATA = {
|
||||
'title': u'Täst',
|
||||
'description': u'Teßt',
|
||||
'mode': 'joint',
|
||||
'sport': 'W',
|
||||
'level': 'beginner',
|
||||
'first_day': datetime.date(2019, 3, 1),
|
||||
'country': 'DE',
|
||||
'trainer_firstname': u'Übungsleiter',
|
||||
'trainer_familyname': u'Weißalles',
|
||||
'trainer_email': 'trainer@localhost',
|
||||
}
|
||||
|
||||
EVENT_UPDATED_EMAIL_TEMPLATE = u"""Hallo {recipient_first_name},
|
||||
|
||||
{editor_full_name} hat die folgende Veranstaltung geändert:
|
||||
{event}
|
||||
|
||||
Link zur Veranstaltung:
|
||||
{base_url}{event_url}
|
||||
|
||||
Ausschreibung:
|
||||
==============
|
||||
W**/19 - Täst
|
||||
|
||||
Freitag, 01. März 2019
|
||||
|
||||
-Teßt
|
||||
+Teßt Gößweinstein
|
||||
|
||||
Leitung: Übungsleiter Weißalles (trainer@localhost)
|
||||
|
||||
Nichtöffentliche Daten:
|
||||
=======================
|
||||
Veranstaltungsart: gemeinschaftliche Tour
|
||||
Schwierigkeitsnivau: Anfänger
|
||||
Gelände: Kletterhalle
|
||||
Anreise des Kurs-/Tourenleiters am Vortag: Nein
|
||||
Veröffentlichung: sofort
|
||||
"""
|
||||
|
||||
EVENT_SUBMITTED_EMAIL_TEMPLATE = u"""Hallo {recipient_first_name},
|
||||
|
||||
eine Veranstaltung wurde in deinem Namen eingereicht.
|
||||
Die entsprechenden Referenten wurden informiert, um deine Veranstaltung frei zu geben.
|
||||
|
||||
Link zur Veranstaltung:
|
||||
{base_url}{event_url}
|
||||
|
||||
Voraussichtliche Veröffentlichung: In wenigen Tagen
|
||||
|
||||
Ausschreibung:
|
||||
==============
|
||||
{event_text}"""
|
||||
|
||||
EVENT_TO_ACCEPT_EMAIL_TEMPLATE = u"""Hallo {recipient_first_name},
|
||||
|
||||
{trainer_firstname} {trainer_familyname} hat eine Veranstaltung eingereicht.
|
||||
|
||||
Der folgende Link führt zur Veranstaltung:
|
||||
{base_url}{event_url}
|
||||
Über den folgenden Link kannst du die Veranstaltung unmittelbar freigeben:
|
||||
{base_url}{accept_url}
|
||||
|
||||
Veröffentlichung: sofort
|
||||
|
||||
Ausschreibung:
|
||||
==============
|
||||
{event_text}"""
|
||||
|
||||
EVENT_ACCEPTED_EMAIL_TEMPLATE=u"""Hallo {recipient_first_name},
|
||||
|
||||
deine Veranstaltung wurde von {editor_full_name} freigegeben.
|
||||
Die Redaktion wurde informiert, um deine Veranstaltung zu veröffentlichen.
|
||||
|
||||
Link zur Veranstaltung:
|
||||
{base_url}{event_url}
|
||||
|
||||
Voraussichtliche Veröffentlichung: {planned_publication_date}
|
||||
|
||||
Ausschreibung:
|
||||
==============
|
||||
{event_text}
|
||||
Bearbeitungshinweis:
|
||||
====================
|
||||
{internal_note}"""
|
||||
|
||||
EVENT_TO_PUBLISH_WEB_EMAIL_TEMPLATE = u"""Hallo {recipient_first_name},
|
||||
|
||||
{trainer_firstname} {trainer_familyname} hat eine neue Veranstaltung eingereicht.
|
||||
Die Veranstaltung wurde von {editor_full_name} zur Veröffentlichung
|
||||
auf der Webseite frei gegeben.
|
||||
|
||||
Der folgende Link führt zur Veranstaltung:
|
||||
{base_url}{event_url}
|
||||
Über den folgenden Link kannst du die Veröffentlichung auf der Webseite unmittelbar bestätigen:
|
||||
{base_url}{confirm_publication_url}
|
||||
|
||||
Veröffentlichung: ({planned_publication_date})
|
||||
=================
|
||||
Veröffentlichung starten: {planned_publication_date_short} 00:00:00
|
||||
Veröffentlichung beenden: {day_after_short} 00:00:00
|
||||
Erstellungsdatum: {first_day_short} 00:00:00
|
||||
Titel: {number} - {title}
|
||||
|
||||
Bearbeitungshinweis:
|
||||
====================
|
||||
{internal_note}
|
||||
|
||||
Joomla HTML
|
||||
===========
|
||||
<h6>{normalized_long_date}</h6>
|
||||
<p>{description}</p>
|
||||
<hr id="system-readmore" />
|
||||
|
||||
<p>
|
||||
<strong>Leitung:</strong> {trainer_firstname} {trainer_familyname} (<a href="mailto:trainer@localhost">trainer@localhost</a>)
|
||||
</p>
|
||||
"""
|
||||
|
||||
EVENT_TO_PUBLISH_FACEBOOK_EMAIL_TEMPLATE = u"""Hallo {recipient_first_name},
|
||||
|
||||
{trainer_firstname} {trainer_familyname} hat eine neue Veranstaltung eingereicht.
|
||||
Die Veranstaltung wurde von {editor_full_name} zur Veröffentlichung
|
||||
auf Facebook frei gegeben.
|
||||
|
||||
Der folgende Link führt zur Veranstaltung:
|
||||
{base_url}{event_url}
|
||||
Über den folgenden Link kannst du die Veröffentlichung auf Facebook unmittelbar bestätigen:
|
||||
{base_url}{confirm_publication_url}
|
||||
|
||||
Veröffentlichung: (sofort)
|
||||
=================
|
||||
Veröffentlichung beenden: {day_after_short} 00:00:00
|
||||
Erstellungsdatum: {first_day_short} 00:00:00
|
||||
Titel: {number} - {title}
|
||||
|
||||
Ausschreibung:
|
||||
==============
|
||||
{event_text}"""
|
||||
|
||||
|
||||
class TestCase(RoleMixin, EmailTestCase):
|
||||
def setUp(self):
|
||||
self.email_sender = 'Automatic Software Test <root@localhost>'
|
||||
self.email_subject_prefix = '[Test]'
|
||||
app_config = apps.get_app_config('dav_base')
|
||||
app_config.settings.email_sender = self.email_sender
|
||||
app_config.settings.email_subject_prefix = self.email_subject_prefix
|
||||
super(TestCase, self).setUp()
|
||||
|
||||
app_config = apps.get_containing_app_config(__package__)
|
||||
app_config.settings.enable_email_on_update = False
|
||||
app_config.settings.enable_email_on_status_update = False
|
||||
self.app_settings = app_config.settings
|
||||
|
||||
event_data = TEST_EVENT_DATA
|
||||
self.event = Event(**event_data)
|
||||
self.event.save()
|
||||
self.trainer = self.event.owner
|
||||
|
||||
self.manager_super = self.create_user_for_role('manager_super', 'password', 'Touren', 'Referent')
|
||||
self.manager_w = self.create_user_for_role('manager_w', 'password', 'Bereichsleiter', 'Wandern')
|
||||
self.manager_s = self.create_user_for_role('manager_s', 'password', 'Bereichsleiter', 'Ski')
|
||||
self.publisher_web = self.create_user_for_role('publisher_web', 'password', 'Joomla', 'Redakteur')
|
||||
self.publisher_facebook = self.create_user_for_role('publisher_facebook', 'password', 'Facebook', 'Redakteur')
|
||||
|
||||
model = get_user_model()
|
||||
self.recipient = model.objects.create_user(username='recipient@example.com',
|
||||
@@ -30,66 +188,189 @@ class EmailsTestCase(TestCase):
|
||||
first_name=u'Ed Ü.',
|
||||
last_name=u'Itor',
|
||||
)
|
||||
event_data = {
|
||||
'title': u'Täst',
|
||||
'description': u'Teßt',
|
||||
'mode': 'joint',
|
||||
'sport': 'W',
|
||||
'level': 'beginner',
|
||||
'first_day': timezone.now(),
|
||||
'country': 'DE',
|
||||
'owner': self.editor,
|
||||
}
|
||||
self.event = Event(**event_data)
|
||||
|
||||
def test_disabled_mail(self):
|
||||
self.event.workflow.update_status('submitted', self.trainer)
|
||||
self.event.description += u' Gößweinstein'
|
||||
self.event.save()
|
||||
self.diff = u"""---
|
||||
+++
|
||||
@@ -1,3 +1,3 @@
|
||||
Line 1 ä
|
||||
-Line2
|
||||
+Line 2
|
||||
Line 3 END"""
|
||||
self.event.workflow.update_status('accepted', self.editor)
|
||||
self.event.first_day += datetime.timedelta(1)
|
||||
self.event.save()
|
||||
self.assertEqual(len(django_mail.outbox), 0)
|
||||
|
||||
def test_event_updated_mail(self):
|
||||
email = emails.EventUpdatedMail(recipient=self.recipient, event=self.event, editor=self.editor,
|
||||
diff=self.diff)
|
||||
email.send()
|
||||
expected_recipient = self.manager_super
|
||||
editor = self.trainer
|
||||
|
||||
self.app_settings.enable_email_on_update = True
|
||||
self.event.workflow.update_status('submitted', self.trainer)
|
||||
self.event.description += u' Gößweinstein'
|
||||
self.event.save()
|
||||
self.assertEqual(len(django_mail.outbox), 2)
|
||||
|
||||
self.assertEqual(len(django_mail.outbox), 1)
|
||||
mail = django_mail.outbox[0]
|
||||
self.assertSender(mail)
|
||||
self.assertRecipients(mail, [expected_recipient])
|
||||
self.assertSubject(mail, u'Veranstaltung geändert')
|
||||
|
||||
recipient = u'"%s" <%s>' % (self.recipient.get_full_name(), self.recipient.email)
|
||||
recipients = mail.recipients()
|
||||
self.assertIn(recipient, recipients)
|
||||
self.assertEqual(len(recipients), 1)
|
||||
|
||||
self.assertEqual(mail.from_email, self.email_sender)
|
||||
|
||||
subject = u'Veranstaltung geändert'
|
||||
subject = u'{} {}'.format(self.email_subject_prefix, subject)
|
||||
self.assertEqual(mail.subject, subject)
|
||||
|
||||
self.assertIn(self.recipient.first_name, mail.body)
|
||||
self.assertIn(self.editor.get_full_name(), mail.body)
|
||||
self.assertIn(unicode(self.event), mail.body)
|
||||
self.assertIn(self.diff, mail.body)
|
||||
expected_body = EVENT_UPDATED_EMAIL_TEMPLATE.format(
|
||||
recipient_first_name=expected_recipient.first_name,
|
||||
editor_full_name=editor.get_full_name(),
|
||||
event=unicode(self.event),
|
||||
base_url=self.email_base_url,
|
||||
event_url=self.event.get_absolute_url(),
|
||||
)
|
||||
self.assertBody(mail, expected_body)
|
||||
|
||||
def test_event_submitted_mail(self):
|
||||
# TODO
|
||||
pass
|
||||
expected_recipient = self.trainer
|
||||
|
||||
self.app_settings.enable_email_on_status_update = True
|
||||
self.event.workflow.update_status('submitted', self.trainer)
|
||||
self.assertEqual(len(django_mail.outbox), 3)
|
||||
|
||||
mail = django_mail.outbox[0]
|
||||
self.assertSender(mail)
|
||||
self.assertRecipients(mail, [expected_recipient])
|
||||
self.assertSubject(mail, u'Veranstaltung eingereicht')
|
||||
|
||||
expected_body = EVENT_SUBMITTED_EMAIL_TEMPLATE.format(
|
||||
recipient_first_name=expected_recipient.first_name,
|
||||
base_url=self.email_base_url,
|
||||
event_url=self.event.get_absolute_url(),
|
||||
event_text=self.event.render_as_text(),
|
||||
)
|
||||
self.assertBody(mail, expected_body)
|
||||
|
||||
def test_event_to_accept_mail(self):
|
||||
# TODO
|
||||
pass
|
||||
expected_recipient = self.manager_super
|
||||
|
||||
self.app_settings.enable_email_on_status_update = True
|
||||
self.event.workflow.update_status('submitted', self.trainer)
|
||||
self.assertEqual(len(django_mail.outbox), 3)
|
||||
|
||||
mail = django_mail.outbox[1]
|
||||
self.assertSender(mail)
|
||||
self.assertRecipients(mail, [expected_recipient])
|
||||
self.assertSubject(mail, u'Veranstaltung freigeben')
|
||||
|
||||
action_parameters = '{},{},{}'.format(self.event.id, 'accepted', expected_recipient.id)
|
||||
action = OneClickAction.objects.get(parameters=action_parameters)
|
||||
|
||||
expected_body = EVENT_TO_ACCEPT_EMAIL_TEMPLATE.format(
|
||||
recipient_first_name=expected_recipient.first_name,
|
||||
trainer_firstname=self.event.trainer_firstname,
|
||||
trainer_familyname=self.event.trainer_familyname,
|
||||
base_url=self.email_base_url,
|
||||
event_url=self.event.get_absolute_url(),
|
||||
accept_url=action.get_absolute_url(),
|
||||
event_text=self.event.render_as_text(),
|
||||
)
|
||||
self.assertBody(mail, expected_body)
|
||||
|
||||
def test_accepted_mail(self):
|
||||
# TODO
|
||||
pass
|
||||
expected_recipient = self.trainer
|
||||
editor = self.manager_w
|
||||
|
||||
self.event.workflow.update_status('submitted', self.trainer)
|
||||
self.event.internal_note = u'Automatischer Software Test.'
|
||||
self.event.planned_publication_date = datetime.date(2019, 3, 24)
|
||||
ppd_string = u'Sonntag, 24. März 2019'
|
||||
self.event.save()
|
||||
|
||||
self.app_settings.enable_email_on_status_update = True
|
||||
self.event.workflow.update_status('accepted', editor)
|
||||
self.assertEqual(len(django_mail.outbox), 3)
|
||||
|
||||
mail = django_mail.outbox[0]
|
||||
self.assertSender(mail)
|
||||
self.assertRecipients(mail, [expected_recipient])
|
||||
self.assertSubject(mail, u'{}: Veranstaltung freigegeben'.format(self.event.number))
|
||||
|
||||
expected_body = EVENT_ACCEPTED_EMAIL_TEMPLATE.format(
|
||||
recipient_first_name=expected_recipient.first_name,
|
||||
editor_full_name=editor.get_full_name(),
|
||||
base_url=self.email_base_url,
|
||||
event_url=self.event.get_absolute_url(),
|
||||
planned_publication_date=ppd_string,
|
||||
event_text=self.event.render_as_text(),
|
||||
internal_note=self.event.internal_note,
|
||||
)
|
||||
self.assertBody(mail, expected_body)
|
||||
|
||||
def test_event_to_publish_web_mail(self):
|
||||
# TODO
|
||||
pass
|
||||
expected_recipient = self.publisher_web
|
||||
editor = self.manager_w
|
||||
|
||||
self.event.workflow.update_status('submitted', self.trainer)
|
||||
self.event.internal_note = u'Automatischer Software Test.'
|
||||
self.event.planned_publication_date = datetime.date(2019, 3, 24)
|
||||
ppd_string = u'Sonntag, 24. März 2019'
|
||||
self.event.save()
|
||||
|
||||
self.app_settings.enable_email_on_status_update = True
|
||||
self.event.workflow.update_status('accepted', editor)
|
||||
self.assertEqual(len(django_mail.outbox), 3)
|
||||
|
||||
mail = django_mail.outbox[1]
|
||||
self.assertSender(mail)
|
||||
self.assertRecipients(mail, [expected_recipient])
|
||||
self.assertSubject(mail, u'{}: Veranstaltung veröffentlichen'.format(self.event.number))
|
||||
|
||||
action_parameters = '{},{},{}'.format(self.event.id, 'publishing_web', expected_recipient.id)
|
||||
action = OneClickAction.objects.get(parameters=action_parameters)
|
||||
|
||||
expected_body = EVENT_TO_PUBLISH_WEB_EMAIL_TEMPLATE.format(
|
||||
recipient_first_name=expected_recipient.first_name,
|
||||
trainer_firstname=self.event.trainer_firstname,
|
||||
trainer_familyname=self.event.trainer_familyname,
|
||||
editor_full_name=editor.get_full_name(),
|
||||
base_url=self.email_base_url,
|
||||
event_url=self.event.get_absolute_url(),
|
||||
confirm_publication_url=action.get_absolute_url(),
|
||||
planned_publication_date=ppd_string,
|
||||
internal_note=self.event.internal_note,
|
||||
number=self.event.number,
|
||||
title=self.event.title,
|
||||
description=self.event.description,
|
||||
planned_publication_date_short=self.event.planned_publication_date.strftime('%d.%m.%Y'),
|
||||
first_day_short=self.event.first_day.strftime('%d.%m.%Y'),
|
||||
day_after_short=(self.event.first_day + datetime.timedelta(1)).strftime('%d.%m.%Y'),
|
||||
normalized_long_date=self.event.get_formated_date(format='normalized_long'),
|
||||
)
|
||||
self.assertBody(mail, expected_body)
|
||||
|
||||
def test_event_to_publish_facebook_mail(self):
|
||||
# TODO
|
||||
pass
|
||||
expected_recipient = self.publisher_facebook
|
||||
editor = self.manager_super
|
||||
|
||||
self.event.workflow.update_status('submitted', self.trainer)
|
||||
|
||||
self.app_settings.enable_email_on_status_update = True
|
||||
self.event.workflow.update_status('accepted', editor)
|
||||
self.assertEqual(len(django_mail.outbox), 3)
|
||||
|
||||
mail = django_mail.outbox[2]
|
||||
self.assertSender(mail)
|
||||
self.assertRecipients(mail, [expected_recipient])
|
||||
self.assertSubject(mail, u'{}: Veranstaltung veröffentlichen'.format(self.event.number))
|
||||
|
||||
action_parameters = '{},{},{}'.format(self.event.id, 'publishing_facebook', expected_recipient.id)
|
||||
action = OneClickAction.objects.get(parameters=action_parameters)
|
||||
|
||||
expected_body = EVENT_TO_PUBLISH_FACEBOOK_EMAIL_TEMPLATE.format(
|
||||
recipient_first_name=expected_recipient.first_name,
|
||||
trainer_firstname=self.event.trainer_firstname,
|
||||
trainer_familyname=self.event.trainer_familyname,
|
||||
editor_full_name=editor.get_full_name(),
|
||||
base_url=self.email_base_url,
|
||||
event_url=self.event.get_absolute_url(),
|
||||
confirm_publication_url=action.get_absolute_url(),
|
||||
number=self.event.number,
|
||||
title=self.event.title,
|
||||
description=self.event.description,
|
||||
first_day_short=self.event.first_day.strftime('%d.%m.%Y'),
|
||||
day_after_short=(self.event.first_day + datetime.timedelta(1)).strftime('%d.%m.%Y'),
|
||||
event_text=self.event.render_as_text(),
|
||||
)
|
||||
self.assertBody(mail, expected_body)
|
||||
|
||||
Reference in New Issue
Block a user