tests for email_interface forms

This commit is contained in:
Tom Irgang 2023-08-31 15:21:38 +02:00
parent 8b1e9aa4b2
commit 68a282336f
4 changed files with 106 additions and 9 deletions

View file

@ -22,7 +22,8 @@
"Reparateure", "Reparateure",
"reparateurs", "reparateurs",
"Reparateurs", "Reparateurs",
"tabindex" "tabindex",
"johnpassword"
], ],
"ignoreWords": [], "ignoreWords": [],
"import": [] "import": []

View file

@ -6,12 +6,14 @@ from django.apps import AppConfig
logger = logging.getLogger(__name__) 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', logger.debug('Message answered signal received: %s %s',
instance, kwargs['answer']) 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) logger.debug('New message signal received: %s', instance)

View file

@ -23,17 +23,23 @@ class MessageForm(forms.ModelForm):
fields = ['receiver', 'summary', 'html_content'] fields = ['receiver', 'summary', 'html_content']
widgets = {'html_content': CKEditorUploadingWidget()} widgets = {'html_content': CKEditorUploadingWidget()}
def clean(self): def clean_mail_text(self):
if self.cleaned_data['use_mail_text'] and self.cleaned_data['mail_text'] == '': 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( raise forms.ValidationError(
_("Mail text cannot be empty if it is used!")) _("Mail text cannot be empty if it is used!"))
return super().clean() return text
def save(self, commit: bool = True): def save(self, commit: bool = True):
message = super().save(commit=False) 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'] message.text_content = self.cleaned_data['mail_text']
else: else:
# convert HTML content to text content # convert HTML content to text content

View file

@ -1,3 +1,91 @@
import logging
from django.test import TestCase 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': '<p>Hallo, Welt!</p>',
'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 == '<p>Hallo, Welt!</p>', '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': '<p>Hallo, Welt!</p>',
'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 == '<p>Hallo, Welt!</p>', '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': '<p>Hallo, Welt!</p>',
'mail_text': '',
'use_mail_text': True,
})
logger.debug('Form data: text: %r', form)
assert not form.is_valid()
assert form.has_error('mail_text')