1
0
Fork 1
mirror of https://github.com/coddingtonbear/django-mailbox.git synced 2026-07-09 22:38:19 +02:00
django-mailbox/django_mailbox/tests/__init__.py
2013-06-22 14:35:47 -07:00

157 lines
5.1 KiB
Python

import email
import os.path
from django.test import TestCase
import mimic
import django_mailbox
from django_mailbox.models import Mailbox, Message
class EmailMessageTestCase(TestCase):
def setUp(self):
super(EmailMessageTestCase, self).setUp()
self.mimic = mimic.Mimic()
def _get_email_object(self, name):
with open(os.path.join(os.path.dirname(__file__), name), 'r') as f:
return email.message_from_string(
f.read()
)
def tearDown(self):
for message in Message.objects.all():
message.delete()
self.mimic.verify_all()
class TestProcessEmail(EmailMessageTestCase):
def test_message_without_attachments(self):
message = self._get_email_object('generic_message.eml')
mailbox = Mailbox.objects.create()
msg = mailbox.process_incoming_message(message)
self.assertEqual(
msg.mailbox,
mailbox
)
self.assertEqual(msg.subject, 'Message Without Attachment')
self.assertEqual(
msg.message_id,
'<CAMdmm+hGH8Dgn-_0xnXJCd=PhyNAiouOYm5zFP0z-foqTO60zA@mail.gmail.com>'
)
self.assertEqual(
msg.from_header,
'Adam Coddington <test@adamcoddington.net>',
)
self.assertEqual(
msg.to_header,
'Adam Coddington <test@adamcoddington.net>',
)
def test_message_with_attachments(self):
message = self._get_email_object('message_with_attachment.eml')
mailbox = Mailbox.objects.create()
msg = mailbox.process_incoming_message(message)
expected_count = 1
actual_count = msg.attachments.count()
self.assertEquals(
expected_count,
actual_count,
)
attachment = msg.attachments.all()[0]
self.assertEquals(
os.path.basename(attachment.document.name),
'heart.png',
)
def test_message_get_text_body(self):
message = self._get_email_object('multipart_text.eml')
mailbox = Mailbox.objects.create()
msg = mailbox.process_incoming_message(message)
expected_results = 'Hello there!'
actual_results = msg.get_text_body().strip()
self.assertEquals(
expected_results,
actual_results,
)
class TestFilterMessageBody(EmailMessageTestCase):
def setUp(self):
django_mailbox.models.STRIP_UNALLOWED_MIMETYPES = True
super(TestFilterMessageBody, self).setUp()
def tearDown(self):
django_mailbox.models.STRIP_UNALLOWED_MIMETYPES = False
super(TestFilterMessageBody, self).tearDown()
def test_filter_message_does_not_filter_message_if_disabled(self):
django_mailbox.models.STRIP_UNALLOWED_MIMETYPES = False
message = self._get_email_object('message_with_attachment.eml')
mailbox = Mailbox.objects.create()
self.assertEquals(
message.as_string(),
mailbox._filter_message_body(message).as_string()
)
def test_filter_message_removes_unknown_content_if_disabled(self):
# The below is the _same_ as message_with_attachment.eml, but missing
# its attached png image, and adding the expected message altered header.
message_without_non_plaintext = (
"MIME-Version: 1.0\n"
"Received: by 10.221.0.211 with HTTP; Sun, 20 Jan 2013 12:07:07 -0800 (PST)\n"
"X-Originating-IP: [24.22.122.177]\n"
"Date: Sun, 20 Jan 2013 12:07:07 -0800\n"
"Delivered-To: test@adamcoddington.net\n"
"Message-ID: <CAMdmm+jYCgrxrekAxszmDnBjAytcBym-Ec+uM-+HEtzuKy=M_g@mail.gmail.com>\n"
"Subject: Message With Attachment\n"
"From: Adam Coddington <test@adamcoddington.net>\n"
"To: Adam Coddington <test@adamcoddington.net>\n"
"Content-Type: multipart/mixed; boundary=047d7b33dd729737fe04d3bde348\n"
"X-Django-Mailbox-Altered-Message: Stripped image/png*1, multipart/mixed*1\n"
"\n--047d7b33dd729737fe04d3bde348\n"
"Content-Type: text/plain; charset=UTF-8\n\n"
"This message has an attachment.\n\n--047d7b33dd729737fe04d3bde348--"
)
message = self._get_email_object('message_with_attachment.eml')
mailbox = Mailbox.objects.create()
self.assertEquals(
message_without_non_plaintext,
mailbox._filter_message_body(message).as_string()
)
class TestGetMessage(EmailMessageTestCase):
def test_get_text_body_properly_recomposes_line_continuations(self):
message = Message()
email_object = self._get_email_object(
'message_with_long_text_lines.eml'
)
self.mimic.stub_out_with_mock(message, 'get_email_object')
message.get_email_object().and_return(email_object)
self.mimic.replay_all()
actual_text = message.get_text_body()
expected_text = (
u'The one of us with a bike pump is far ahead, '
u'but a man stopped to help us and gave us his pump.'
)
self.assertEquals(
actual_text,
expected_text
)