diff --git a/dav_auth/tests/test_emails.py b/dav_auth/tests/test_emails.py index cd47159..7619f41 100644 --- a/dav_auth/tests/test_emails.py +++ b/dav_auth/tests/test_emails.py @@ -1,8 +1,8 @@ # -*- coding: utf-8 -*- -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 dav_base.tests.generic import EmailTestCase from ..emails import PasswordSetEmail @@ -11,18 +11,21 @@ TEST_USERNAME = 'user' TEST_PASSWORD = u'me||ön 2' TEST_EMAIL = 'root@localhost' +PASSWORD_EMAIL_TEMPLATE = u"""Hallo {fullname}, -class EmailsTestCase(TestCase): +Benutzername: {username} +Passwort: {password} + +URL: {base_url}/ +""" + + +class TestCase(EmailTestCase): def setUp(self): + super(TestCase, self).setUp() model = get_user_model() self.user = model.objects.create_user(username=TEST_USERNAME, password=TEST_PASSWORD, email=TEST_EMAIL) - self.email_sender = 'Automatic Software Test ' - 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 - def test_send(self): password = TEST_PASSWORD[::-1] @@ -32,15 +35,14 @@ class EmailsTestCase(TestCase): self.assertEqual(len(django_mail.outbox), 1) mail = django_mail.outbox[0] - recipient = u'"%s" <%s>' % (self.user.get_full_name(), self.user.email) - recipients = mail.recipients() - self.assertIn(recipient, recipients) - self.assertEqual(len(recipients), 1) + self.assertSender(mail) + self.assertRecipients(mail, [self.user]) + self.assertSubject(mail, u'Zugangsdaten') - self.assertEqual(mail.from_email, self.email_sender) - - subject = u'Zugangsdaten' - subject = u'{} {}'.format(self.email_subject_prefix, subject) - self.assertEqual(mail.subject, subject) - - self.assertIn(password, mail.body) + expected_body = PASSWORD_EMAIL_TEMPLATE.format( + fullname=self.user.get_full_name(), + username=self.user.username, + password=password, + base_url=self.email_base_url, + ) + self.assertBody(mail, expected_body) diff --git a/dav_base/tests/generic.py b/dav_base/tests/generic.py index ed39443..44da670 100644 --- a/dav_base/tests/generic.py +++ b/dav_base/tests/generic.py @@ -3,6 +3,7 @@ import os import sys import urllib from unittest import skip, SkipTest +from django.apps import apps from django.contrib.staticfiles.testing import StaticLiveServerTestCase from django.test import SimpleTestCase, TestCase, tag from django.urls import reverse @@ -46,50 +47,47 @@ class AppsTestCase(SimpleTestCase): self.assertIsInstance(value, of) -class Url(object): - def __init__(self, location, name=None, func=None, **kwargs): - self.location = location - self.name = name - self.func = func - self.redirect = kwargs.get('redirect', False) - self.status_code = kwargs.get('status_code', 200) - self.follow = kwargs.get('follow', False) +class EmailTestCase(TestCase): + email_sender = 'Automatic Software Test ' + email_base_url = 'http://localhost' + email_subject_prefix = '[Test]' + def assertSender(self, mail): + self.assertEqual(mail.from_email, self.email_sender) -class UrlsTestCase(SimpleTestCase): - urls = () + def assertRecipients(self, mail, recipients): + self.assertEqual(len(mail.recipients()), len(recipients)) + for recipient in recipients: + expected_recipient = u'"%s" <%s>' % (recipient.get_full_name(), recipient.email) + recipients = mail.recipients() + self.assertIn(expected_recipient, recipients) - def test_locations(self): - for url in self.urls: - if url.location: - response = self.client.get(url.location, follow=url.follow) + def assertSubject(self, mail, subject): + expected_subject = u'{} {}'.format(self.email_subject_prefix, subject) + self.assertEqual(mail.subject, expected_subject) - if url.redirect: - self.assertRedirects(response, url.redirect) - else: - self.assertEqual(response.status_code, url.status_code, - 'Getting \'{}\' is not OK'.format(url.location)) + def assertBody(self, mail, body): + expected_lines = body.splitlines() + lines = mail.body.splitlines() + i = 0 + for expected_line in expected_lines: + try: + line = lines[i] + except IndexError: + self.fail('line %d: no such line: %s' % (i, expected_line)) + i += 1 + try: + self.assertEqual(line, expected_line) + except AssertionError as e: + self.fail('line %d: %s' % (i, e.message)) + self.assertEqual(mail.body, body) - if url.func: - self.assertEqual(response.resolver_match.func.__name__, - url.func.__name__, - 'Getting \'{}\' resolve to wrong function'.format(url.location)) - - def test_names(self): - for url in self.urls: - if url.name: - response = self.client.get(reverse(url.name), follow=url.follow) - - if url.redirect: - self.assertRedirects(response, url.redirect) - else: - self.assertEqual(response.status_code, url.status_code, - 'Getting url named \'{}\' is not OK'.format(url.name)) - - if url.func: - self.assertEqual(response.resolver_match.func.__name__, - url.func.__name__, - 'Getting url named \'{}\' resolve to wrong function'.format(url.name)) + def setUp(self): + super(EmailTestCase, self).setUp() + app_config = apps.get_app_config('dav_base') + app_config.settings.email_sender = self.email_sender + app_config.settings.email_base_url = self.email_base_url + app_config.settings.email_subject_prefix = self.email_subject_prefix class FormDataSet(object): @@ -156,6 +154,52 @@ class FormsTestCase(TestCase): self.assertIn(code, error_codes) +class Url(object): + def __init__(self, location, name=None, func=None, **kwargs): + self.location = location + self.name = name + self.func = func + self.redirect = kwargs.get('redirect', False) + self.status_code = kwargs.get('status_code', 200) + self.follow = kwargs.get('follow', False) + + +class UrlsTestCase(SimpleTestCase): + urls = () + + def test_locations(self): + for url in self.urls: + if url.location: + response = self.client.get(url.location, follow=url.follow) + + if url.redirect: + self.assertRedirects(response, url.redirect) + else: + self.assertEqual(response.status_code, url.status_code, + 'Getting \'{}\' is not OK'.format(url.location)) + + if url.func: + self.assertEqual(response.resolver_match.func.__name__, + url.func.__name__, + 'Getting \'{}\' resolve to wrong function'.format(url.location)) + + def test_names(self): + for url in self.urls: + if url.name: + response = self.client.get(reverse(url.name), follow=url.follow) + + if url.redirect: + self.assertRedirects(response, url.redirect) + else: + self.assertEqual(response.status_code, url.status_code, + 'Getting url named \'{}\' is not OK'.format(url.name)) + + if url.func: + self.assertEqual(response.resolver_match.func.__name__, + url.func.__name__, + 'Getting url named \'{}\' resolve to wrong function'.format(url.name)) + + class SeleniumTestCase(StaticLiveServerTestCase): window_width = 1024 window_height = 768 diff --git a/dav_events/templates/dav_events/emails/event_accepted.txt b/dav_events/templates/dav_events/emails/event_accepted.txt index 372a5f3..7beb501 100644 --- a/dav_events/templates/dav_events/emails/event_accepted.txt +++ b/dav_events/templates/dav_events/emails/event_accepted.txt @@ -13,4 +13,4 @@ Ausschreibung: {{ event.render_as_text }}{% if internal_note %} Bearbeitungshinweis: ==================== -{{ internal_note }}{% endif %} +{{ internal_note }}{% endif %} \ No newline at end of file diff --git a/dav_events/templates/dav_events/emails/event_to_accept.txt b/dav_events/templates/dav_events/emails/event_to_accept.txt index e3d5da1..7c976d2 100644 --- a/dav_events/templates/dav_events/emails/event_to_accept.txt +++ b/dav_events/templates/dav_events/emails/event_to_accept.txt @@ -15,4 +15,4 @@ Bearbeitungshinweis: {% endif %} Ausschreibung: ============== -{{ event.render_as_text }} +{{ event.render_as_text }} \ No newline at end of file diff --git a/dav_events/templates/dav_events/emails/event_to_publish_web.txt b/dav_events/templates/dav_events/emails/event_to_publish_web.txt index 4972d9a..cd7baec 100644 --- a/dav_events/templates/dav_events/emails/event_to_publish_web.txt +++ b/dav_events/templates/dav_events/emails/event_to_publish_web.txt @@ -70,4 +70,4 @@ Joomla HTML {% endif %}{% if trainer_familyname %}{% trans 'Leitung' %}: {{ trainer_firstname }} {{ trainer_familyname }}{% if trainer_email or trainer_phone %} ({% if trainer_email %}{{ trainer_email }}{% endif %}{% if trainer_email and trainer_phone %}, {% endif %}{% if trainer_phone %}{{ trainer_phone }}{% endif %}){% endif %} {% endif %}

{% if registration_required and registration_howto %}

{{ registration_howto|urlize }}

-{% endif %} +{% endif %} \ No newline at end of file diff --git a/dav_events/tests/generic.py b/dav_events/tests/generic.py new file mode 100644 index 0000000..43b6834 --- /dev/null +++ b/dav_events/tests/generic.py @@ -0,0 +1,22 @@ +from django.apps import apps +from django.contrib.auth import get_user_model +from django.contrib.auth.models import Group + + +class RoleMixin(object): + def create_user_for_role(self, role_name, password, first_name, last_name): + group = Group(name=role_name) + group.save() + + user_model = get_user_model() + email = '{}@localhost'.format(role_name) + user_name = email + user = user_model.objects.create_user(username=user_name, password=password, email=user_name, + first_name=first_name, last_name=last_name) + user.groups.add(group) + + setting_name = 'groups_{}'.format(role_name) + app_config = apps.get_app_config('dav_events') + setattr(app_config.settings, setting_name, [role_name]) + + return user diff --git a/dav_events/tests/test_emails.py b/dav_events/tests/test_emails.py index c8a306d..ff3fb3e 100644 --- a/dav_events/tests/test_emails.py +++ b/dav_events/tests/test_emails.py @@ -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 +=========== +
{normalized_long_date}
+

{description}

+
+ +

+Leitung: {trainer_firstname} {trainer_familyname} (trainer@localhost) +

+""" + +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 ' - 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 \ No newline at end of file + 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) diff --git a/dav_events/tests/test_screenshots.py b/dav_events/tests/test_screenshots.py index da305de..c69e7d3 100644 --- a/dav_events/tests/test_screenshots.py +++ b/dav_events/tests/test_screenshots.py @@ -1,8 +1,5 @@ # -*- coding: utf-8 -*- import time -from django.apps import apps -from django.contrib.auth import get_user_model -from django.contrib.auth.models import Group from django.test import tag from django.urls import reverse from django.utils.translation import ugettext @@ -14,6 +11,8 @@ from selenium.webdriver.support.ui import Select from dav_base.tests.generic import ScreenshotTestCase from dav_auth.tests.generic import SeleniumAuthMixin +from .generic import RoleMixin + TEST_TRAINER_EMAIL = 'trainer@localhost' TEST_PASSWORD = u'me||ön 2' TEST_EVENT_DATA_S = { @@ -109,27 +108,9 @@ TEST_EVENT_DATA_M = { @tag('screenshots', 'browser') -class TestCase(SeleniumAuthMixin, ScreenshotTestCase): +class TestCase(SeleniumAuthMixin, RoleMixin, ScreenshotTestCase): screenshot_prefix = 'dav_events-' - def create_user_for_role(self, role_name, first_name, last_name): - group = Group(name=role_name) - group.save() - - user_model = get_user_model() - email = '{}@localhost'.format(role_name) - user_name = email - password = TEST_PASSWORD - user = user_model.objects.create_user(username=user_name, password=password, email=user_name, - first_name=first_name, last_name=last_name) - user.groups.add(group) - - setting_name = 'groups_{}'.format(role_name) - app_config = apps.get_app_config('dav_events') - setattr(app_config.settings, setting_name, [role_name]) - - return user - def create_event(self, event_data, auth=False, screenshots=True): data = event_data c = self.selenium @@ -610,12 +591,19 @@ class TestCase(SeleniumAuthMixin, ScreenshotTestCase): def setUp(self): super(TestCase, self).setUp() - self.manager_super = self.create_user_for_role('manager_super', 'Manager Super', 'Tourenreferent') - self.manager_w = self.create_user_for_role('manager_w', 'Manager W', 'BereichsleiterWandern') - self.manager_s = self.create_user_for_role('manager_s', 'Manager S', 'BereichsleiterSki') - self.publisher_print = self.create_user_for_role('publisher_print', 'Publisher Print', 'RedaktionPrint') - self.publisher_web = self.create_user_for_role('publisher_web', 'Publisher Web', 'RedaktionWeb') - self.publisher_facebook = self.create_user_for_role('publisher_facebook', 'Publisher Facebook', 'RedaktionFacebook') + password = TEST_PASSWORD + self.manager_super = self.create_user_for_role('manager_super', password, + 'Manager Super', 'Tourenreferent') + self.manager_w = self.create_user_for_role('manager_w', password, + 'Manager W', 'BereichsleiterWandern') + self.manager_s = self.create_user_for_role('manager_s', password, + 'Manager S', 'BereichsleiterSki') + self.publisher_print = self.create_user_for_role('publisher_print', password, + 'Publisher Print', 'RedaktionPrint') + self.publisher_web = self.create_user_for_role('publisher_web', password, + 'Publisher Web', 'RedaktionWeb') + self.publisher_facebook = self.create_user_for_role('publisher_facebook', password, + 'Publisher Facebook', 'RedaktionFacebook') def test_screenshots(self): #self.quit_selenium = False