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",
"reparateurs",
"Reparateurs",
"tabindex"
"tabindex",
"johnpassword"
],
"ignoreWords": [],
"import": []

View file

@ -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)

View file

@ -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

View file

@ -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': '<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')