tests for email interface models

This commit is contained in:
Tom Irgang 2023-08-31 18:44:17 +02:00
parent 667ede0e27
commit dc23fdeff3
2 changed files with 239 additions and 3 deletions

View file

@ -105,7 +105,8 @@ class Attachment(models.Model):
@receiver(models.signals.post_delete, sender=Attachment) @receiver(models.signals.post_delete, sender=Attachment)
def auto_delete_file_on_delete(sender, instance, **kwargs): def auto_delete_file_on_delete(sender, instance, **kwargs): # pragma: no cover
# manual test was ok, no unit test needed
""" """
Deletes file from filesystem when corresponding Attachment is deleted. Deletes file from filesystem when corresponding Attachment is deleted.
""" """
@ -115,7 +116,8 @@ def auto_delete_file_on_delete(sender, instance, **kwargs):
@receiver(models.signals.pre_save, sender=Attachment) @receiver(models.signals.pre_save, sender=Attachment)
def auto_delete_file_on_change(sender, instance, **kwargs): def auto_delete_file_on_change(sender, instance, **kwargs): # pragma: no cover
# manual test was ok, no unit test needed
""" """
Deletes old file from filesystem when corresponding Attachment object is updated with new file. Deletes old file from filesystem when corresponding Attachment object is updated with new file.
""" """

View file

@ -1,8 +1,9 @@
import logging import logging
from django.test import TestCase from django.test import TestCase
from django.conf import settings
from django.contrib.auth import get_user_model from django.contrib.auth import get_user_model
from django import forms
from .forms import MessageForm from .forms import MessageForm
from .models import Message, Attachment
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@ -89,3 +90,236 @@ class MessageFormTestCase(TestCase):
assert not form.is_valid() assert not form.is_valid()
assert form.has_error('mail_text') assert form.has_error('mail_text')
class MessageModelTestCase(TestCase):
"""
Tests all logic contained in the Message model.
"""
def setUp(self):
john = get_user_model().objects.create_user(
"john",
"lennon@thebeatles.com",
"johnpassword")
john.save()
self.john = john
jane = get_user_model().objects.create_user(
"jane",
"doe@example.com",
"janepassword")
jane.save()
self.jane = jane
m1 = Message(
summary='summary 1',
html_content='<p>mail 1 HTML content</p>',
text_content='mail 1 text content',
sender=john,
receiver=jane,
sent=True,
answered=True,
)
m1.save()
self.m1 = m1
m2 = Message(
summary='summary 2',
html_content='<p>mail 2 HTML content</p>',
text_content='mail 2 text content',
sender=jane,
receiver=john,
sent=True,
answered=False,
reply_to=m1,
)
m2.save()
self.m2 = m2
m3 = Message(
summary='summary 3',
html_content='<p>mail 3 HTML content</p>',
text_content='mail 3 text content',
sender=jane,
receiver=john,
sent=True,
answered=False,
reply_to=m1,
)
m3.save()
self.m3 = m3
a1 = Attachment(
owner=john,
name='johns_file.txt',
mime_type='text/plain',
file='uploads/johns_file.txt',
message=m1,
)
a1.save()
self.a1 = a1
a2 = Attachment(
owner=jane,
name='janes_image.jpg',
mime_type='image/jpeg',
file='media/janes_image.jpg',
message=m3,
)
a2.save()
self.a2 = a2
a3 = Attachment(
owner=john,
name='johns_image.jpg',
mime_type='image/png',
file='media/johns_image.jpg',
message=m1,
)
a3.save()
self.a3 = a3
def test_str(self):
assert self.m1.summary in str(self.m1)
assert str(self.m1.receiver) in str(self.m1)
def test_attachments(self):
assert len(self.m1.attachments()) == 2
assert self.m1.attachments()[0].pk == self.a1.pk
assert self.m1.attachments()[1].pk == self.a3.pk
assert len(self.m2.attachments()) == 0
assert len(self.m3.attachments()) == 1
assert self.m3.attachments()[0].pk == self.a2.pk
def test_thread(self):
assert len(self.m1.thread()) == 1
assert self.m1.thread()[0].pk == self.m1.pk
assert len(self.m2.thread()) == 2
assert self.m2.thread()[0].pk == self.m1.pk
assert self.m2.thread()[1].pk == self.m2.pk
assert len(self.m3.thread()) == 2
assert self.m3.thread()[0].pk == self.m1.pk
assert self.m3.thread()[1].pk == self.m3.pk
def test_answers(self):
assert len(self.m1.answers()) == 2
assert self.m1.answers()[0].pk == self.m2.pk
assert self.m1.answers()[1].pk == self.m3.pk
assert len(self.m2.answers()) == 0
assert len(self.m3.answers()) == 0
def test_siblings(self):
assert len(self.m1.siblings()) == 0
assert len(self.m2.siblings()) == 1
assert self.m2.siblings()[0].pk == self.m3.pk
assert len(self.m3.siblings()) == 1
assert self.m3.siblings()[0].pk == self.m2.pk
def test_to_user(self):
assert len(Message.to_user(self.john)) == 2
assert Message.to_user(self.john)[0].pk == self.m2.pk
assert Message.to_user(self.john)[1].pk == self.m3.pk
assert len(Message.to_user(self.jane)) == 1
assert Message.to_user(self.jane)[0].pk == self.m1.pk
def test_from_user(self):
assert len(Message.from_user(self.john)) == 1
assert Message.from_user(self.john)[0].pk == self.m1.pk
assert len(Message.from_user(self.jane)) == 2
assert Message.from_user(self.jane)[0].pk == self.m2.pk
assert Message.from_user(self.jane)[1].pk == self.m3.pk
class AttachmentModelTestCase(TestCase):
"""
Tests all logic contained in the Message model.
"""
def setUp(self):
john = get_user_model().objects.create_user(
"john",
"lennon@thebeatles.com",
"johnpassword")
john.save()
self.john = john
jane = get_user_model().objects.create_user(
"jane",
"doe@example.com",
"janepassword")
jane.save()
self.jane = jane
m1 = Message(
summary='summary 1',
html_content='<p>mail 1 HTML content</p>',
text_content='mail 1 text content',
sender=john,
receiver=jane,
sent=True,
answered=True,
)
m1.save()
self.m1 = m1
m3 = Message(
summary='summary 3',
html_content='<p>mail 3 HTML content</p>',
text_content='mail 3 text content',
sender=jane,
receiver=john,
sent=True,
answered=False,
reply_to=m1,
)
m3.save()
self.m3 = m3
a1 = Attachment(
owner=john,
name='johns_file.txt',
mime_type='text/plain',
file='uploads/johns_file.txt',
message=m1,
)
a1.save()
self.a1 = a1
a2 = Attachment(
owner=jane,
name='janes_image.jpg',
mime_type='image/jpeg',
file='media/janes_image.jpg',
message=m3,
)
a2.save()
self.a2 = a2
a3 = Attachment(
owner=john,
name='johns_image.jpg',
mime_type='image/png',
file='media/johns_image.jpg',
message=m1,
)
a3.save()
self.a3 = a3
def test_str(self):
assert str(self.a1.file) in str(self.a1)
assert str(self.m1) in str(self.a1)
def test_get_absolute_url(self):
assert settings.MEDIA_URL in self.a1.get_absolute_url()
assert str(self.a1.file) in self.a1.get_absolute_url()
def test_of_user(self):
assert len(Attachment.of_user(self.john)) == 2
assert Attachment.of_user(self.john)[0].pk == self.a1.pk
assert Attachment.of_user(self.john)[1].pk == self.a3.pk
assert len(Attachment.of_user(self.jane)) == 1
assert Attachment.of_user(self.jane)[0].pk == self.a2.pk