Merge pull request #747 from auto-mat/fix-tests

Fix tests and encoding problems
This commit is contained in:
Garret Wassermann 2019-03-26 12:19:59 -04:00 committed by GitHub
commit 46520e9e5b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 27 additions and 15 deletions

View File

@ -471,9 +471,12 @@ def object_from_message(message, queue, logger):
if part.get_content_maintype() == 'text' and name is None:
if part.get_content_subtype() == 'plain':
body = EmailReplyParser.parse_reply(
decodeUnknown(part.get_content_charset(), part.get_payload(decode=True))
)
body = part.get_payload(decode=True)
# https://github.com/django-helpdesk/django-helpdesk/issues/732
if part['Content-Transfer-Encoding'] == '8bit' and part.get_content_charset() == 'utf-8':
body = body.decode('unicode_escape')
body = decodeUnknown(part.get_content_charset(), body)
body = EmailReplyParser.parse_reply(body)
# workaround to get unicode text out rather than escaped text
try:
body = body.encode('ascii').decode('unicode_escape')
@ -481,9 +484,15 @@ def object_from_message(message, queue, logger):
body.encode('utf-8')
logger.debug("Discovered plain text MIME part")
else:
payload = encoding.smart_bytes(part.get_payload(decode=True))
payload = """
<html>
<head>
<meta charset="utf-8"/>
</head>
%s
</html>""" % encoding.smart_text(part.get_payload(decode=True))
files.append(
SimpleUploadedFile(_("email_html_body.html"), payload, 'text/html')
SimpleUploadedFile(_("email_html_body.html"), payload.encode("utf-8"), 'text/html')
)
logger.debug("Discovered HTML MIME part")
else:

View File

@ -53,7 +53,7 @@ class GetEmailCommonTests(TestCase):
with open(os.path.join(THIS_DIR, "test_files/blank-body-with-attachment.eml")) as fd:
test_email = fd.read()
ticket = helpdesk.email.object_from_message(test_email, self.queue_public, self.logger)
self.assertEqual(ticket.title, "FollowUpAttachment without body")
self.assertEqual(ticket.title, "Attachment without body")
self.assertEqual(ticket.description, "")
def test_email_with_quoted_printable_body(self):
@ -71,7 +71,7 @@ class GetEmailCommonTests(TestCase):
attachments = FollowUpAttachment.objects.filter(followup=followup)
self.assertEqual(len(attachments), 1)
attachment = attachments[0]
self.assertEqual(attachment.file.read().decode("utf-8"), '<div dir="ltr">Tohle je test českých písmen odeslaných z gmailu.</div>\n')
self.assertIn('<div dir="ltr">Tohle je test českých písmen odeslaných z gmailu.</div>\n', attachment.file.read().decode("utf-8"))
def test_email_with_8bit_encoding_and_utf_8(self):
"""

View File

@ -27,7 +27,8 @@ class QuickDjangoTest(object):
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.staticfiles',
'bootstrap4form'
'bootstrap4form',
'helpdesk',
)
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
@ -62,7 +63,7 @@ class QuickDjangoTest(object):
def __init__(self, *args, **kwargs):
self.apps = args
self.tests = args
self._tests()
def _tests(self):
@ -79,7 +80,7 @@ class QuickDjangoTest(object):
'PORT': '',
}
},
INSTALLED_APPS=self.INSTALLED_APPS + self.apps,
INSTALLED_APPS=self.INSTALLED_APPS,
MIDDLEWARE=self.MIDDLEWARE,
ROOT_URLCONF='helpdesk.tests.urls',
STATIC_URL='/static/',
@ -92,7 +93,7 @@ class QuickDjangoTest(object):
test_runner = DiscoverRunner(verbosity=1)
django.setup()
failures = test_runner.run_tests(self.apps)
failures = test_runner.run_tests(self.tests)
if failures:
sys.exit(failures)
@ -102,13 +103,15 @@ if __name__ == '__main__':
Example usage:
$ python quicktest.py app1 app2
$ python quicktest.py test1 test2
"""
parser = argparse.ArgumentParser(
usage="[args]",
description="Run Django tests on the provided applications."
description="Run Django tests."
)
parser.add_argument('apps', nargs='+', type=str)
parser.add_argument('tests', nargs="*", type=str)
args = parser.parse_args()
QuickDjangoTest(*args.apps)
if not args.tests:
args.tests = ['helpdesk']
QuickDjangoTest(*args.tests)