mirror of
https://gitea.mueller.network/extern/django-helpdesk.git
synced 2024-11-24 17:04:25 +01:00
Add unit tests for get_mail task.
This commit is contained in:
parent
e4da2797b9
commit
8a2ee78661
@ -26,6 +26,7 @@ from tempfile import mkdtemp
|
|||||||
import time
|
import time
|
||||||
import typing
|
import typing
|
||||||
from unittest import mock
|
from unittest import mock
|
||||||
|
from mock.mock import patch
|
||||||
|
|
||||||
|
|
||||||
THIS_DIR = os.path.dirname(os.path.abspath(__file__))
|
THIS_DIR = os.path.dirname(os.path.abspath(__file__))
|
||||||
@ -335,12 +336,82 @@ class GetEmailCommonTests(TestCase):
|
|||||||
elif att_retrieved.filename.endswith(email_att_filename):
|
elif att_retrieved.filename.endswith(email_att_filename):
|
||||||
email_attachment_found = True
|
email_attachment_found = True
|
||||||
else:
|
else:
|
||||||
print(f"\n\n%%%%%% {att_retrieved}")
|
|
||||||
self.assertTrue(False, "Unexpected file in ticket attachments: %s" % att_retrieved.filename)
|
self.assertTrue(False, "Unexpected file in ticket attachments: %s" % att_retrieved.filename)
|
||||||
self.assertTrue(email_attachment_found, "Email attachment file not found ticket attachments: %s" % (email_att_filename))
|
self.assertTrue(email_attachment_found, "Email attachment file not found ticket attachments: %s" % (email_att_filename))
|
||||||
self.assertTrue(inline_found, "Inline file not found in email: %s" % (inline_att_filename))
|
self.assertTrue(inline_found, "Inline file not found in email: %s" % (inline_att_filename))
|
||||||
|
|
||||||
|
|
||||||
|
def test_email_with_txt_as_attachment(self):
|
||||||
|
"""
|
||||||
|
Test an email with an txt extension email attachment to the email
|
||||||
|
"""
|
||||||
|
email_message, _, _ = utils.generate_multipart_email(type_list=['plain'])
|
||||||
|
email_att_filename = 'test.txt'
|
||||||
|
file_part = utils.generate_file_mime_part("en_US", email_att_filename, "Testing a simple txt attachment.")
|
||||||
|
email_message.attach(file_part)
|
||||||
|
# Now send the part to the email workflow
|
||||||
|
extract_email_metadata(email_message.as_string(), self.queue_public, self.logger)
|
||||||
|
|
||||||
|
self.assertEqual(len(mail.outbox), 1) # @UndefinedVariable
|
||||||
|
|
||||||
|
ticket = Ticket.objects.get()
|
||||||
|
followup = ticket.followup_set.get()
|
||||||
|
attachments = FollowUpAttachment.objects.filter(followup=followup)
|
||||||
|
self.assertEqual(len(attachments), 1)
|
||||||
|
attachment = attachments[0]
|
||||||
|
self.assertTrue(attachment.filename.endswith(email_att_filename), "The txt file not found in email: %s" % (email_att_filename))
|
||||||
|
|
||||||
|
|
||||||
|
class EmailTaskTests(TestCase):
|
||||||
|
|
||||||
|
def setUp(self):
|
||||||
|
self.num_queues = 5
|
||||||
|
self.exception_queues = [2, 4]
|
||||||
|
self.q_ids = []
|
||||||
|
for i in range(self.num_queues):
|
||||||
|
q = Queue.objects.create(
|
||||||
|
title=f'Test{i+1}',
|
||||||
|
slug=f'test{i+1}',
|
||||||
|
email_box_type='local',
|
||||||
|
allow_email_submission=True
|
||||||
|
)
|
||||||
|
self.q_ids.append(q.id)
|
||||||
|
self.logger = logging.getLogger('helpdesk')
|
||||||
|
|
||||||
|
def test_get_email_with_debug_to_stdout_option(self):
|
||||||
|
"""Test debug_to_stdout option """
|
||||||
|
# Test get_email with debug_to_stdout set to True and also False, and verify
|
||||||
|
# handle receives debug_to_stdout option set properly
|
||||||
|
for debug_to_stdout in [True, False]:
|
||||||
|
with mock.patch.object(Command, 'handle', return_value=None) as mocked_handle:
|
||||||
|
call_command('get_email', "--debug_to_stdout") if debug_to_stdout else call_command('get_email')
|
||||||
|
mocked_handle.assert_called_once()
|
||||||
|
for _, kwargs in mocked_handle.call_args_list:
|
||||||
|
self.assertEqual(debug_to_stdout, (kwargs['debug_to_stdout']))
|
||||||
|
|
||||||
|
@patch('helpdesk.email.process_queue')
|
||||||
|
def test_get_email_with_queue_failure(self, mocked_process_queue):
|
||||||
|
"""Test all queues are processed if specified queues have exceptions"""
|
||||||
|
ret_values = [
|
||||||
|
Exception(f"Error Q{i};") if (i in self.exception_queues) else None for i in range(1, self.num_queues+1)
|
||||||
|
]
|
||||||
|
mocked_process_queue.side_effect = ret_values
|
||||||
|
call_command(
|
||||||
|
'get_email',
|
||||||
|
'--debug_to_stdout',
|
||||||
|
)
|
||||||
|
self.assertEqual(mocked_process_queue.call_count, self.num_queues)
|
||||||
|
not_processed_count = Queue.objects.filter(
|
||||||
|
email_box_type__isnull=False,
|
||||||
|
allow_email_submission=True,
|
||||||
|
email_box_last_check__isnull=True).count()
|
||||||
|
self.assertEqual(
|
||||||
|
not_processed_count,
|
||||||
|
len(self.exception_queues),
|
||||||
|
"Incorrect number of queues that did not get processed due to a forced exception."
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class GetEmailParametricTemplate(object):
|
class GetEmailParametricTemplate(object):
|
||||||
"""TestCase that checks basic email functionality across methods and socks configs."""
|
"""TestCase that checks basic email functionality across methods and socks configs."""
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user