# -*- coding: utf-8 -*- from __future__ import unicode_literals from babel.dates import format_datetime from django.apps import apps from django.core import mail as django_mail from django.test import TestCase from django.utils import timezone from django.utils.translation import get_language from dav_base.tests.generic import EmailTestMixin from dav_events.tests.generic import EventMixin from .generic import RegistrationMixin MAIL_SELF_TEMPLATE = """Hallo {participant_full_name}, wir haben deine Anmeldung zur Veranstaltung {event_number} - {event_title} an den/die Tourenleiter/in {trainer_full_name} weitergegeben. !!! Diese E-Mail ist noch keine Zusage zur Teilnahme !!! {trainer_first_name} wird sich bei dir melden und dir zu- oder absagen. ======================================================================== Veranstaltung: {event_number} - {event_title} Datum: {event_formated_date} Tourenleitung: {trainer_full_name} Anmeldezeitpunkt: {registration_at} Vorgang: {registration_hexstr} (wird nur gebraucht, wenn irgendwas schief geht) Personendaten ------------- {participant_full_name} Here 1 Karlsruhe Telefon: 12 E-Mail: {participant_email} DAV Mitgliedsnummer: 0 Notfall-Kontakt --------------- - Erfahrung --------- - Anmerkung --------- - Erklärung zur Datenspeicherung ------------------------------ - Zeitpunkt der Datenlöschung: {purge_at} """ MAIL_TRAINER_TEMPLATE = """Hallo {trainer_first_name}, Anmeldung zu deiner Veranstaltung {event_number} - {event_title} ======================================================================== Anmeldezeitpunkt: {registration_at} Vorgang: {registration_hexstr} Teilnehmer*in: {participant_full_name} Here, 1 Karlsruhe 12 {participant_email} 0 Notfall-Kontakt: - Erfahrung: - Anmerkung: - ------------------------------ Erklärung zur Datenspeicherung ------------------------------ - Zeitpunkt der Datenlöschung: {purge_at} """ class EmailsTestCase(EmailTestMixin, EventMixin, RegistrationMixin, TestCase): def setUp(self): super(EmailsTestCase, self).setUp() app_config = apps.get_app_config('dav_events') app_config.settings.enable_email_on_status_update = False self.event = self.create_event_by_model() self.submit_event(self.event) self.accept_event(self.event) self.confirm_publication_event(self.event) def test_email_self_minimum_data(self): event = self.event trainer = event.owner registration_data = { 'event': event, 'personal_names': 'Participant', 'family_names': 'One', 'address': 'Here', 'postal_code': '1', 'city': 'Karlsruhe', 'phone_number': '12', 'email_address': 'participant@localhost', 'dav_number': '0', } registration = self.create_registration(registration_data) recipient = '"{full_name}" <{email}>'.format(full_name=registration.get_full_name(), email=registration.email_address) reply_to = '"{full_name}" <{email}>'.format(full_name=trainer.get_full_name(), email=trainer.email) mail = django_mail.outbox[1] self.assertRecipients(mail, [recipient]) self.assertReplyTo(mail, [reply_to]) subject = '{number}: Deine Anmeldung'.format(number=event.get_number()) self.assertSubject(mail, subject) locale = get_language()[0:2] body = MAIL_SELF_TEMPLATE.format( participant_full_name=registration.get_full_name(), participant_email=registration.email_address, event_number=event.get_number(), event_title=event.title, event_formated_date=event.get_formated_date(), trainer_full_name=trainer.get_full_name(), trainer_first_name=trainer.first_name, registration_hexstr=registration.hexstr, registration_at=format_datetime(timezone.localtime(registration.created_at), 'EEEE, dd. MMMM yyyy, H:mm', locale=locale), purge_at=format_datetime(timezone.localtime(registration.purge_at), 'EEEE, dd. MMMM yyyy', locale=locale), ) self.assertBody(mail, body) def test_email_self_full_data(self): event = self.event registration_data = { 'event': event, 'personal_names': 'Participant', 'family_names': 'One', 'email_address': 'participant@localhost', 'address': 'Am Fächerbad 2', 'postal_code': '76131', 'city': 'Karlsruhe', 'phone_number': '+49 721 1234567890 AB (Büro)', 'dav_member': False, 'dav_number': '131/00/007*12345', 'emergency_contact': 'Call 911!', 'experience': 'Yes, we can!', 'note': 'Automatischer Software Test\nGruß\n heinzel =u}', 'privacy_policy': 'Du willst es doch auch.', } self.create_registration(registration_data) mail = django_mail.outbox[1] search = '\n' search += 'Personendaten\n' search += '-------------\n' search += '{} {}\n'.format(registration_data['personal_names'], registration_data['family_names']) search += '{}\n'.format(registration_data['address']) search += '{} {}\n'.format(registration_data['postal_code'], registration_data['city']) search += 'Telefon: {}\n'.format(registration_data['phone_number']) search += 'E-Mail: {}\n'.format(registration_data['email_address']) search += 'DAV Mitglied: Nein\n' self.assertIn(search, mail.body) search = '\n' search += 'Notfall-Kontakt\n' search += '---------------\n' search += registration_data['emergency_contact'] search += '\n' self.assertIn(search, mail.body) search = '\n' search += 'Erfahrung\n' search += '---------\n' search += registration_data['experience'] search += '\n' self.assertIn(search, mail.body) search = '\n' search += 'Anmerkung\n' search += '---------\n' search += registration_data['note'] search += '\n' self.assertIn(search, mail.body) search = '\n' search += registration_data['privacy_policy'] search += '\n' search += 'Zeitpunkt der Datenlöschung:' self.assertIn(search, mail.body) def test_email_trainer_minimum_data(self): event = self.event trainer = event.owner registration_data = { 'event': event, 'personal_names': 'Participant', 'family_names': 'One', 'address': 'Here', 'postal_code': '1', 'city': 'Karlsruhe', 'phone_number': '12', 'email_address': 'participant@localhost', 'dav_number': '0', } registration = self.create_registration(registration_data) reply_to = '"{full_name}" <{email}>'.format(full_name=registration.get_full_name(), email=registration.email_address) recipient = '"{full_name}" <{email}>'.format(full_name=trainer.get_full_name(), email=trainer.email) mail = django_mail.outbox[0] self.assertRecipients(mail, [recipient]) self.assertReplyTo(mail, [reply_to]) subject = '{number}: Anmeldung {full_name}'.format(number=event.get_number(), full_name=registration.get_full_name()) self.assertSubject(mail, subject) locale = get_language()[0:2] body = MAIL_TRAINER_TEMPLATE.format( participant_full_name=registration.get_full_name(), participant_email=registration.email_address, event_number=event.get_number(), event_title=event.title, event_formated_date=event.get_formated_date(), trainer_first_name=trainer.first_name, registration_hexstr=registration.hexstr, registration_at=format_datetime(timezone.localtime(registration.created_at), 'EEEE, dd. MMMM yyyy, H:mm', locale=locale), purge_at=format_datetime(timezone.localtime(registration.purge_at), 'EEEE, dd. MMMM yyyy', locale=locale), ) self.assertBody(mail, body) def test_email_trainer_full_data(self): event = self.event registration_data = { 'event': event, 'personal_names': 'Participant', 'family_names': 'One', 'email_address': 'participant@localhost', 'address': 'Am Fächerbad 2', 'postal_code': '76131', 'city': 'Karlsruhe', 'phone_number': '+49 721 1234567890 AB (Büro)', 'dav_member': False, 'dav_number': '131/00/007*12345', 'emergency_contact': 'Call 911!', 'experience': 'Yes, we can!', 'note': 'Automatischer Software Test\nGruß\n heinzel =u}', 'privacy_policy': 'Du willst es doch auch.', } self.create_registration(registration_data) mail = django_mail.outbox[0] search = '\n' search += '{address}, {code} {city}'.format(address=registration_data['address'], code=registration_data['postal_code'], city=registration_data['city']) search += '\n' search += registration_data['phone_number'] search += '\n' search += registration_data['email_address'] search += '\n' search += 'Nicht DAV Mitglied' search += '\n' self.assertIn(search, mail.body) search = '\n' search += 'Notfall-Kontakt:\n' search += registration_data['emergency_contact'] search += '\n' self.assertIn(search, mail.body) search = '\n' search += 'Erfahrung:\n' search += registration_data['experience'] search += '\n' self.assertIn(search, mail.body) search = '\n' search += 'Anmerkung:\n' search += registration_data['note'] search += '\n' self.assertIn(search, mail.body) search = '\n' search += registration_data['privacy_policy'] search += '\n' search += 'Zeitpunkt der Datenlöschung:' self.assertIn(search, mail.body)