diff --git a/cspell.json b/cspell.json index b84dba2..399025e 100644 --- a/cspell.json +++ b/cspell.json @@ -22,8 +22,9 @@ "Reparateure", "reparateurs", "Reparateurs", - "tabindex" + "tabindex", + "johnpassword" ], "ignoreWords": [], "import": [] -} +} \ No newline at end of file diff --git a/repapp/email_interface/apps.py b/repapp/email_interface/apps.py index 1548cf3..24caa3e 100644 --- a/repapp/email_interface/apps.py +++ b/repapp/email_interface/apps.py @@ -6,12 +6,14 @@ from django.apps import AppConfig logger = logging.getLogger(__name__) -def message_answered_receiver(sender, instance, **kwargs): +def message_answered_receiver(sender, instance, **kwargs): # pragma: no cover + # used for manual testing only logger.debug('Message answered signal received: %s %s', instance, kwargs['answer']) -def new_message_receiver(sender, instance, **kwargs): +def new_message_receiver(sender, instance, **kwargs): # pragma: no cover + # used for manual testing only logger.debug('New message signal received: %s', instance) diff --git a/repapp/email_interface/forms.py b/repapp/email_interface/forms.py index 069e096..7fde9bf 100644 --- a/repapp/email_interface/forms.py +++ b/repapp/email_interface/forms.py @@ -23,17 +23,23 @@ class MessageForm(forms.ModelForm): fields = ['receiver', 'summary', 'html_content'] widgets = {'html_content': CKEditorUploadingWidget()} - def clean(self): - if self.cleaned_data['use_mail_text'] and self.cleaned_data['mail_text'] == '': + def clean_mail_text(self): + text = self.cleaned_data["mail_text"] + use_text = self.data["use_mail_text"] + + logger.debug( + 'MessageForm clean_mail_text: use text: %r, text: %s', use_text, text) + + if use_text and not text: raise forms.ValidationError( _("Mail text cannot be empty if it is used!")) - return super().clean() + return text def save(self, commit: bool = True): message = super().save(commit=False) - if not self.cleaned_data['use_mail_text']: + if self.cleaned_data['use_mail_text']: message.text_content = self.cleaned_data['mail_text'] else: # convert HTML content to text content diff --git a/repapp/email_interface/tests.py b/repapp/email_interface/tests.py index 7ce503c..a9644c8 100644 --- a/repapp/email_interface/tests.py +++ b/repapp/email_interface/tests.py @@ -1,3 +1,91 @@ +import logging from django.test import TestCase +from django.contrib.auth import get_user_model +from django import forms +from .forms import MessageForm -# Create your tests here. + +logger = logging.getLogger(__name__) + + +class MessageFormTestCase(TestCase): + """ + Tests all logic contained in the OneTimeLogin model. + """ + + def setUp(self): + user = get_user_model().objects.create_user( + "john", + "lennon@thebeatles.com", + "johnpassword") + user.save() + + def test_message_from_ok_no_text(self): + user = get_user_model().objects.get(username='john') + + form = MessageForm({ + 'receiver': user.pk, + 'summary': 'My mail summary', + 'html_content': '
Hallo, Welt!
', + 'mail_text': '', + 'use_mail_text': False, + }) + + assert form.is_valid(), 'form is valid' + + message = form.save(commit=False) + + logger.debug('Message: %s', message) + logger.debug('Message text: %s', message.text_content) + + assert message.pk is None, 'message was not saved' + assert message.receiver == user, 'receiver is set' + assert message.sender is None, 'no sender is set' + assert message.summary == 'My mail summary', 'summary is set' + assert message.html_content == 'Hallo, Welt!
', 'HTML is set' + assert 'Hallo, Welt!' in message.text_content, 'text was generated' + + message = form.save() + + assert message.pk is not None, 'message was saved' + + def test_message_from_ok_text(self): + user = get_user_model().objects.get(username='john') + + form = MessageForm({ + 'receiver': user.pk, + 'summary': 'My mail summary', + 'html_content': 'Hallo, Welt!
', + 'mail_text': 'Hallo!', + 'use_mail_text': True, + }) + + assert form.is_valid(), 'form is valid' + + message = form.save(commit=False) + + logger.debug('Message: %s', message) + logger.debug('Message text: %s', message.text_content) + + assert message.pk is None, 'message was not saved' + assert message.receiver == user, 'receiver is set' + assert message.sender is None, 'no sender is set' + assert message.summary == 'My mail summary', 'summary is set' + assert message.html_content == 'Hallo, Welt!
', 'HTML is set' + assert message.text_content == 'Hallo!', 'text was used' + + def test_message_from_wrong_no_text(self): + user = get_user_model().objects.get(username='john') + + form = MessageForm({ + 'receiver': user.pk, + 'summary': 'My mail summary', + 'html_content': 'Hallo, Welt!
', + 'mail_text': '', + 'use_mail_text': True, + }) + + logger.debug('Form data: text: %r', form) + + assert not form.is_valid() + assert form.has_error('mail_text')