1
0
mirror of https://github.com/django/django.git synced 2024-12-22 17:16:24 +00:00

Refs #35581 -- Clarified some test names and comments in mail tests.

This commit is contained in:
Mike Edmunds 2024-10-28 14:29:00 +01:00 committed by Sarah Boyce
parent cf9da6fadd
commit 889be2f455

View File

@ -17,6 +17,7 @@ from unittest import mock, skipUnless
from django.core import mail
from django.core.mail import (
DNS_NAME,
BadHeaderError,
EmailAlternative,
EmailAttachment,
EmailMessage,
@ -27,7 +28,7 @@ from django.core.mail import (
send_mass_mail,
)
from django.core.mail.backends import console, dummy, filebased, locmem, smtp
from django.core.mail.message import BadHeaderError, sanitize_address
from django.core.mail.message import sanitize_address
from django.test import SimpleTestCase, override_settings
from django.test.utils import requires_tz_support
from django.utils.translation import gettext_lazy
@ -45,7 +46,7 @@ class HeadersCheckMixin:
"""
Asserts that the `message` has all `headers`.
message: can be an instance of an email.Message subclass or a string
message: can be an instance of an email.Message subclass or bytes
with the contents of an email message.
headers: should be a set of (header-name, header-value) tuples.
"""
@ -323,9 +324,9 @@ class MailTests(HeadersCheckMixin, SimpleTestCase):
["Name\nInjection test <to@example.com>"],
).message()
def test_space_continuation(self):
def test_folding_white_space(self):
"""
Test for space continuation character in long (ASCII) subject headers (#7747)
Test for correct use of "folding white space" in long headers (#7747)
"""
email = EmailMessage(
"Long subject lines that get wrapped should contain a space continuation "
@ -515,10 +516,10 @@ class MailTests(HeadersCheckMixin, SimpleTestCase):
message["Comments"], "=?utf-8?q?My_S=C3=BCrname_is_non-ASCII?="
)
def test_safe_mime_multipart(self):
def test_non_utf8_headers_multipart(self):
"""
Make sure headers can be set with a different encoding than utf-8 in
SafeMIMEMultipart as well
EmailMultiAlternatives as well.
"""
headers = {"Date": "Fri, 09 Nov 2001 01:08:47 -0000", "Message-ID": "foo"}
from_email, to = "from@example.com", '"Sürname, Firstname" <to@example.com>'
@ -542,7 +543,7 @@ class MailTests(HeadersCheckMixin, SimpleTestCase):
"=?iso-8859-1?q?Message_from_Firstname_S=FCrname?=",
)
def test_safe_mime_multipart_with_attachments(self):
def test_multipart_with_attachments(self):
"""
EmailMultiAlternatives includes alternatives if the body is empty and
it has attachments.
@ -643,7 +644,10 @@ class MailTests(HeadersCheckMixin, SimpleTestCase):
)
self.assertEqual(message.get_payload(), "Firstname S=FCrname is a great guy.")
# MIME attachments works correctly with other encodings than utf-8.
def test_encoding_alternatives(self):
"""
Encode alternatives correctly with other encodings than utf-8.
"""
text_content = "Firstname Sürname is a great guy."
html_content = "<p>Firstname Sürname is a <strong>great</strong> guy.</p>"
msg = EmailMultiAlternatives(
@ -655,6 +659,8 @@ class MailTests(HeadersCheckMixin, SimpleTestCase):
self.assertMessageHasHeaders(
payload0,
{
# (The MIME-Version header is neither required nor meaningful
# in a subpart, and this check for it can be safely removed.)
("MIME-Version", "1.0"),
("Content-Type", 'text/plain; charset="iso-8859-1"'),
("Content-Transfer-Encoding", "quoted-printable"),
@ -667,6 +673,8 @@ class MailTests(HeadersCheckMixin, SimpleTestCase):
self.assertMessageHasHeaders(
payload1,
{
# (The MIME-Version header is neither required nor meaningful
# in a subpart, and this check for it can be safely removed.)
("MIME-Version", "1.0"),
("Content-Type", 'text/html; charset="iso-8859-1"'),
("Content-Transfer-Encoding", "quoted-printable"),
@ -739,8 +747,20 @@ class MailTests(HeadersCheckMixin, SimpleTestCase):
attachments = self.get_decoded_attachments(msg)
self.assertEqual(attachments[0], (file_name, file_content.encode(), mime_type))
def test_decoded_attachments(self):
"""Regression test for #9367"""
def test_attachments_constructor_omit_mimetype(self):
"""
The mimetype can be omitted from an attachment tuple.
"""
msg = EmailMessage(attachments=[("filename1", "content1")])
filename, content, mimetype = self.get_decoded_attachments(msg)[0]
self.assertEqual(filename, "filename1")
self.assertEqual(content, b"content1")
self.assertEqual(mimetype, "application/octet-stream")
def test_attachments_with_alternative_parts(self):
"""
Message with attachment and alternative has correct structure (#9367).
"""
headers = {"Date": "Fri, 09 Nov 2001 01:08:47 -0000", "Message-ID": "foo"}
subject, from_email, to = "hello", "from@example.com", "to@example.com"
text_content = "This is an important message."
@ -759,13 +779,6 @@ class MailTests(HeadersCheckMixin, SimpleTestCase):
self.assertEqual(payload[0].get_content_type(), "multipart/alternative")
self.assertEqual(payload[1].get_content_type(), "application/pdf")
def test_decoded_attachments_two_tuple(self):
msg = EmailMessage(attachments=[("filename1", "content1")])
filename, content, mimetype = self.get_decoded_attachments(msg)[0]
self.assertEqual(filename, "filename1")
self.assertEqual(content, b"content1")
self.assertEqual(mimetype, "application/octet-stream")
def test_decoded_attachments_MIMEText(self):
txt = MIMEText("content1")
msg = EmailMessage(attachments=[txt])
@ -788,8 +801,8 @@ class MailTests(HeadersCheckMixin, SimpleTestCase):
def test_attach_file(self):
"""
Test attaching a file against different mimetypes and make sure that
a file will be attached and sent properly even if an invalid mimetype
is specified.
a file will be attached and sent in some form even if a mismatched
mimetype is specified.
"""
files = (
# filename, actual mimetype
@ -832,7 +845,7 @@ class MailTests(HeadersCheckMixin, SimpleTestCase):
def test_attach_utf8_text_as_bytes(self):
"""
Non-ASCII characters encoded as valid UTF-8 are correctly transported
and decoded.
in a form that can be decoded at the receiving end.
"""
msg = EmailMessage("subject", "body", "from@example.com", ["to@example.com"])
msg.attach("file.txt", b"\xc3\xa4") # UTF-8 encoded a umlaut.
@ -854,7 +867,7 @@ class MailTests(HeadersCheckMixin, SimpleTestCase):
self.assertEqual(content, b"\xff")
self.assertEqual(mimetype, "application/octet-stream")
def test_attach_mimetext_content_mimetype(self):
def test_attach_mimebase_prohibits_other_params(self):
email_msg = EmailMessage()
txt = MIMEText("content")
msg = (
@ -866,7 +879,7 @@ class MailTests(HeadersCheckMixin, SimpleTestCase):
with self.assertRaisesMessage(ValueError, msg):
email_msg.attach(txt, mimetype="text/plain")
def test_attach_content_none(self):
def test_attach_content_is_required(self):
email_msg = EmailMessage()
msg = "content must be provided."
with self.assertRaisesMessage(ValueError, msg):
@ -1145,20 +1158,23 @@ class MailTests(HeadersCheckMixin, SimpleTestCase):
("A name <to@example.com>", "utf-8", "A name <to@example.com>"),
('"A name" <to@example.com>', "ascii", "A name <to@example.com>"),
('"A name" <to@example.com>', "utf-8", "A name <to@example.com>"),
# Unicode addresses (supported per RFC-6532).
("tó@example.com", "utf-8", "=?utf-8?b?dMOz?=@example.com"),
# Unicode addresses: IDNA encoded domain supported per RFC-5890.
("to@éxample.com", "utf-8", "to@xn--xample-9ua.com"),
# The next three cases should be removed when fixing #35713.
# (An 'encoded-word' localpart is prohibited by RFC-2047, and not
# supported by any known mail service.)
("tó@example.com", "utf-8", "=?utf-8?b?dMOz?=@example.com"),
(
("Tó Example", "tó@example.com"),
"utf-8",
"=?utf-8?q?T=C3=B3_Example?= <=?utf-8?b?dMOz?=@example.com>",
),
# Unicode addresses with display names.
(
"Tó Example <tó@example.com>",
"utf-8",
"=?utf-8?q?T=C3=B3_Example?= <=?utf-8?b?dMOz?=@example.com>",
),
# IDNA addresses with display names.
(
"To Example <to@éxample.com>",
"ascii",