0
0
mirror of https://github.com/django/django.git synced 2024-11-21 19:09:18 +01:00

Refs #35581 -- Reduced boilerplate in mail tests.

This commit is contained in:
Mike Edmunds 2024-08-24 12:49:58 -07:00 committed by Sarah Boyce
parent 00861c4ca7
commit cf4d902eb5

View File

@ -348,24 +348,12 @@ class MailTests(HeadersCheckMixin, SimpleTestCase):
default values (#9233)
"""
headers = {"date": "Fri, 09 Nov 2001 01:08:47 -0000", "Message-ID": "foo"}
email = EmailMessage(
"subject",
"content",
"from@example.com",
["to@example.com"],
headers=headers,
)
email = EmailMessage(headers=headers)
self.assertMessageHasHeaders(
email.message(),
{
("Content-Transfer-Encoding", "7bit"),
("Content-Type", 'text/plain; charset="utf-8"'),
("From", "from@example.com"),
("MIME-Version", "1.0"),
("Message-ID", "foo"),
("Subject", "subject"),
("To", "to@example.com"),
("date", "Fri, 09 Nov 2001 01:08:47 -0000"),
},
)
@ -375,10 +363,7 @@ class MailTests(HeadersCheckMixin, SimpleTestCase):
Make sure we can manually set the From header (#9214)
"""
email = EmailMessage(
"Subject",
"Content",
"bounce@example.com",
["to@example.com"],
from_email="bounce@example.com",
headers={"From": "from@example.com"},
)
message = email.message()
@ -389,10 +374,7 @@ class MailTests(HeadersCheckMixin, SimpleTestCase):
Make sure we can manually set the To header (#17444)
"""
email = EmailMessage(
"Subject",
"Content",
"bounce@example.com",
["list-subscriber@example.com", "list-subscriber2@example.com"],
to=["list-subscriber@example.com", "list-subscriber2@example.com"],
headers={"To": "mailing-list@example.com"},
)
message = email.message()
@ -404,10 +386,7 @@ class MailTests(HeadersCheckMixin, SimpleTestCase):
# If we don't set the To header manually, it should default to the `to`
# argument to the constructor.
email = EmailMessage(
"Subject",
"Content",
"bounce@example.com",
["list-subscriber@example.com", "list-subscriber2@example.com"],
to=["list-subscriber@example.com", "list-subscriber2@example.com"],
)
message = email.message()
self.assertEqual(
@ -420,9 +399,6 @@ class MailTests(HeadersCheckMixin, SimpleTestCase):
def test_to_in_headers_only(self):
message = EmailMessage(
"Subject",
"Content",
"bounce@example.com",
headers={"To": "to@example.com"},
).message()
self.assertEqual(message.get_all("To"), ["to@example.com"])
@ -432,10 +408,6 @@ class MailTests(HeadersCheckMixin, SimpleTestCase):
Specifying 'Reply-To' in headers should override reply_to.
"""
email = EmailMessage(
"Subject",
"Content",
"bounce@example.com",
["to@example.com"],
reply_to=["foo@example.com"],
headers={"Reply-To": "override@example.com"},
)
@ -444,10 +416,6 @@ class MailTests(HeadersCheckMixin, SimpleTestCase):
def test_reply_to_in_headers_only(self):
message = EmailMessage(
"Subject",
"Content",
"from@example.com",
["to@example.com"],
headers={"Reply-To": "reply_to@example.com"},
).message()
self.assertEqual(message.get_all("Reply-To"), ["reply_to@example.com"])
@ -458,10 +426,7 @@ class MailTests(HeadersCheckMixin, SimpleTestCase):
calling EmailMessage.message()
"""
email = EmailMessage(
"Subject",
"Content",
"bounce@example.com",
["to@example.com"],
from_email="bounce@example.com",
headers={"From": "from@example.com"},
)
message = email.message()
@ -476,20 +441,15 @@ class MailTests(HeadersCheckMixin, SimpleTestCase):
regards to commas)
"""
email = EmailMessage(
"Subject",
"Content",
"from@example.com",
['"Firstname Sürname" <to@example.com>', "other@example.com"],
to=['"Firstname Sürname" <to@example.com>', "other@example.com"],
)
self.assertEqual(
email.message()["To"],
"=?utf-8?q?Firstname_S=C3=BCrname?= <to@example.com>, other@example.com",
)
email = EmailMessage(
"Subject",
"Content",
"from@example.com",
['"Sürname, Firstname" <to@example.com>', "other@example.com"],
to=['"Sürname, Firstname" <to@example.com>', "other@example.com"],
)
self.assertEqual(
email.message()["To"],
@ -498,10 +458,8 @@ class MailTests(HeadersCheckMixin, SimpleTestCase):
def test_unicode_headers(self):
email = EmailMessage(
"Gżegżółka",
"Content",
"from@example.com",
["to@example.com"],
subject="Gżegżółka",
to=["to@example.com"],
headers={
"Sender": '"Firstname Sürname" <sender@example.com>',
"Comments": "My Sürname is non-ASCII",
@ -522,7 +480,8 @@ class MailTests(HeadersCheckMixin, SimpleTestCase):
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>'
from_email = "from@example.com"
to = '"Sürname, Firstname" <to@example.com>'
text_content = "This is an important message."
html_content = "<p>This is an <strong>important</strong> message.</p>"
msg = EmailMultiAlternatives(
@ -612,9 +571,7 @@ class MailTests(HeadersCheckMixin, SimpleTestCase):
@mock.patch("socket.getfqdn", return_value="漢字")
def test_non_ascii_dns_non_unicode_email(self, mocked_getfqdn):
delattr(DNS_NAME, "_fqdn")
email = EmailMessage(
"subject", "content", "from@example.com", ["to@example.com"]
)
email = EmailMessage()
email.encoding = "iso-8859-1"
self.assertIn("@xn--p8s937b>", email.message()["Message-ID"])
@ -623,12 +580,7 @@ class MailTests(HeadersCheckMixin, SimpleTestCase):
Regression for #12791 - Encode body correctly with other encodings
than utf-8
"""
email = EmailMessage(
"Subject",
"Firstname Sürname is a great guy.",
"from@example.com",
["other@example.com"],
)
email = EmailMessage(body="Firstname Sürname is a great guy.")
email.encoding = "iso-8859-1"
message = email.message()
self.assertMessageHasHeaders(
@ -637,9 +589,6 @@ class MailTests(HeadersCheckMixin, SimpleTestCase):
("MIME-Version", "1.0"),
("Content-Type", 'text/plain; charset="iso-8859-1"'),
("Content-Transfer-Encoding", "quoted-printable"),
("Subject", "Subject"),
("From", "from@example.com"),
("To", "other@example.com"),
},
)
self.assertEqual(message.get_payload(), "Firstname S=FCrname is a great guy.")
@ -650,12 +599,12 @@ class MailTests(HeadersCheckMixin, SimpleTestCase):
"""
text_content = "Firstname Sürname is a great guy."
html_content = "<p>Firstname Sürname is a <strong>great</strong> guy.</p>"
msg = EmailMultiAlternatives(
"Subject", text_content, "from@example.com", ["to@example.com"]
)
msg.encoding = "iso-8859-1"
msg.attach_alternative(html_content, "text/html")
payload0 = msg.message().get_payload(0)
email = EmailMultiAlternatives(body=text_content)
email.encoding = "iso-8859-1"
email.attach_alternative(html_content, "text/html")
message = email.message()
# Check the text/plain part.
payload0 = message.get_payload(0)
self.assertMessageHasHeaders(
payload0,
{
@ -669,7 +618,8 @@ class MailTests(HeadersCheckMixin, SimpleTestCase):
self.assertTrue(
payload0.as_bytes().endswith(b"\n\nFirstname S=FCrname is a great guy.")
)
payload1 = msg.message().get_payload(1)
# Check the text/html alternative.
payload1 = message.get_payload(1)
self.assertMessageHasHeaders(
payload1,
{
@ -761,13 +711,9 @@ class MailTests(HeadersCheckMixin, SimpleTestCase):
"""
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."
html_content = "<p>This is an <strong>important</strong> message.</p>"
msg = EmailMultiAlternatives(
subject, text_content, from_email, [to], headers=headers
)
msg = EmailMultiAlternatives(body=text_content)
msg.attach_alternative(html_content, "text/html")
msg.attach("an attachment.pdf", b"%PDF-1.4.%...", mimetype="application/pdf")
msg_bytes = msg.message().as_bytes()
@ -787,10 +733,7 @@ class MailTests(HeadersCheckMixin, SimpleTestCase):
def test_non_ascii_attachment_filename(self):
"""Regression test for #14964"""
headers = {"Date": "Fri, 09 Nov 2001 01:08:47 -0000", "Message-ID": "foo"}
subject, from_email, to = "hello", "from@example.com", "to@example.com"
content = "This is the message."
msg = EmailMessage(subject, content, from_email, [to], headers=headers)
msg = EmailMessage(body="Content")
# Unicode in file name
msg.attach("une pièce jointe.pdf", b"%PDF-1.4.%...", mimetype="application/pdf")
msg_bytes = msg.message().as_bytes()
@ -848,7 +791,7 @@ class MailTests(HeadersCheckMixin, SimpleTestCase):
self.assertEqual(actual_mimetype, expected_mimetype)
def test_attach_text_as_bytes(self):
msg = EmailMessage("subject", "body", "from@example.com", ["to@example.com"])
msg = EmailMessage()
msg.attach("file.txt", b"file content")
filename, content, mimetype = self.get_decoded_attachments(msg)[0]
self.assertEqual(filename, "file.txt")
@ -860,7 +803,7 @@ class MailTests(HeadersCheckMixin, SimpleTestCase):
Non-ASCII characters encoded as valid UTF-8 are correctly transported
in a form that can be decoded at the receiving end.
"""
msg = EmailMessage("subject", "body", "from@example.com", ["to@example.com"])
msg = EmailMessage()
msg.attach("file.txt", b"\xc3\xa4") # UTF-8 encoded a umlaut.
filename, content, mimetype = self.get_decoded_attachments(msg)[0]
self.assertEqual(filename, "file.txt")
@ -872,7 +815,7 @@ class MailTests(HeadersCheckMixin, SimpleTestCase):
Binary data that can't be decoded as UTF-8 overrides the MIME type
instead of decoding the data.
"""
msg = EmailMessage("subject", "body", "from@example.com", ["to@example.com"])
msg = EmailMessage()
msg.attach("file.txt", b"\xff") # Invalid UTF-8.
filename, content, mimetype = self.get_decoded_attachments(msg)[0]
self.assertEqual(filename, "file.txt")
@ -903,13 +846,7 @@ class MailTests(HeadersCheckMixin, SimpleTestCase):
Make sure that dummy backends returns correct number of sent messages
"""
connection = dummy.EmailBackend()
email = EmailMessage(
"Subject",
"Content",
"bounce@example.com",
["to@example.com"],
headers={"From": "from@example.com"},
)
email = EmailMessage(to=["to@example.com"])
self.assertEqual(connection.send_messages([email, email, email]), 3)
def test_arbitrary_keyword(self):
@ -924,13 +861,7 @@ class MailTests(HeadersCheckMixin, SimpleTestCase):
"""Test custom backend defined in this suite."""
conn = mail.get_connection("mail.custombackend.EmailBackend")
self.assertTrue(hasattr(conn, "test_outbox"))
email = EmailMessage(
"Subject",
"Content",
"bounce@example.com",
["to@example.com"],
headers={"From": "from@example.com"},
)
email = EmailMessage(to=["to@example.com"])
conn.send_messages([email])
self.assertEqual(len(conn.test_outbox), 1)
@ -1018,37 +949,19 @@ class MailTests(HeadersCheckMixin, SimpleTestCase):
def test_dont_mangle_from_in_body(self):
# Regression for #13433 - Make sure that EmailMessage doesn't mangle
# 'From ' in message body.
email = EmailMessage(
"Subject",
"From the future",
"bounce@example.com",
["to@example.com"],
headers={"From": "from@example.com"},
)
email = EmailMessage(body="From the future")
self.assertNotIn(b">From the future", email.message().as_bytes())
def test_body_content_transfer_encoding(self):
# Shouldn't use base64 or quoted-printable, instead should detect it
# can represent content with 7-bit data (#3472, #11212).
msg = EmailMessage(
"Subject",
"Body with only ASCII characters.",
"bounce@example.com",
["to@example.com"],
headers={"From": "from@example.com"},
)
msg = EmailMessage(body="Body with only ASCII characters.")
s = msg.message().as_bytes()
self.assertIn(b"Content-Transfer-Encoding: 7bit", s)
# Shouldn't use base64 or quoted-printable, instead should detect
# it can represent content with 8-bit data.
msg = EmailMessage(
"Subject",
"Body with latin characters: àáä.",
"bounce@example.com",
["to@example.com"],
headers={"From": "from@example.com"},
)
msg = EmailMessage(body="Body with latin characters: àáä.")
s = msg.message().as_bytes()
self.assertIn(b"Content-Transfer-Encoding: 8bit", s)
# The following test is left over from Python 2 and can be safely removed.
@ -1302,9 +1215,7 @@ class MailTimeZoneTests(SimpleTestCase):
"""
EMAIL_USE_LOCALTIME=False creates a datetime in UTC.
"""
email = EmailMessage(
"Subject", "Body", "bounce@example.com", ["to@example.com"]
)
email = EmailMessage()
self.assertTrue(email.message()["Date"].endswith("-0000"))
@override_settings(
@ -1314,9 +1225,7 @@ class MailTimeZoneTests(SimpleTestCase):
"""
EMAIL_USE_LOCALTIME=True creates a datetime in the local time zone.
"""
email = EmailMessage(
"Subject", "Body", "bounce@example.com", ["to@example.com"]
)
email = EmailMessage()
self.assertTrue(
email.message()["Date"].endswith("+0100")
) # Africa/Algiers is UTC+1
@ -1435,12 +1344,8 @@ class BaseEmailBackendTests(HeadersCheckMixin):
)
def test_send_many(self):
email1 = EmailMessage(
"Subject", "Content1", "from@example.com", ["to@example.com"]
)
email2 = EmailMessage(
"Subject", "Content2", "from@example.com", ["to@example.com"]
)
email1 = EmailMessage(to=["to-1@example.com"])
email2 = EmailMessage(to=["to-2@example.com"])
# send_messages() may take a list or an iterator.
emails_lists = ([email1, email2], iter((email1, email2)))
for emails_list in emails_lists:
@ -1448,21 +1353,17 @@ class BaseEmailBackendTests(HeadersCheckMixin):
self.assertEqual(num_sent, 2)
messages = self.get_mailbox_content()
self.assertEqual(len(messages), 2)
self.assertEqual(messages[0].get_payload(), "Content1")
self.assertEqual(messages[1].get_payload(), "Content2")
self.assertEqual(messages[0]["To"], "to-1@example.com")
self.assertEqual(messages[1]["To"], "to-2@example.com")
self.flush_mailbox()
def test_send_verbose_name(self):
email = EmailMessage(
"Subject",
"Content",
'"Firstname Sürname" <from@example.com>',
["to@example.com"],
from_email='"Firstname Sürname" <from@example.com>',
to=["to@example.com"],
)
email.send()
message = self.get_the_message()
self.assertEqual(message["subject"], "Subject")
self.assertEqual(message.get_payload(), "Content")
self.assertEqual(
message["from"], "=?utf-8?q?Firstname_S=C3=BCrname?= <from@example.com>"
)
@ -1613,17 +1514,15 @@ class BaseEmailBackendTests(HeadersCheckMixin):
"""
self.assertTrue(send_mail("Subject", "Content", "from@öäü.com", ["to@öäü.com"]))
message = self.get_the_message()
self.assertEqual(message.get("subject"), "Subject")
self.assertEqual(message.get("from"), "from@xn--4ca9at.com")
self.assertEqual(message.get("to"), "to@xn--4ca9at.com")
self.flush_mailbox()
m = EmailMessage(
"Subject", "Content", "from@öäü.com", ["to@öäü.com"], cc=["cc@öäü.com"]
from_email="from@öäü.com", to=["to@öäü.com"], cc=["cc@öäü.com"]
)
m.send()
message = self.get_the_message()
self.assertEqual(message.get("subject"), "Subject")
self.assertEqual(message.get("from"), "from@xn--4ca9at.com")
self.assertEqual(message.get("to"), "to@xn--4ca9at.com")
self.assertEqual(message.get("cc"), "cc@xn--4ca9at.com")
@ -1634,7 +1533,6 @@ class BaseEmailBackendTests(HeadersCheckMixin):
"""
self.assertTrue(send_mail("Subject", "Content", "tester", ["django"]))
message = self.get_the_message()
self.assertEqual(message.get("subject"), "Subject")
self.assertEqual(message.get("from"), "tester")
self.assertEqual(message.get("to"), "django")
@ -1650,10 +1548,8 @@ class BaseEmailBackendTests(HeadersCheckMixin):
self.flush_mailbox()
m = EmailMessage(
"Subject",
"Content",
_("tester"),
[_("to1"), _("to2")],
from_email=_("tester"),
to=[_("to1"), _("to2")],
cc=[_("cc1"), _("cc2")],
bcc=[_("bcc")],
reply_to=[_("reply")],
@ -1716,13 +1612,7 @@ class LocmemBackendTests(BaseEmailBackendTests, SimpleTestCase):
"""
connection = locmem.EmailBackend()
connection2 = locmem.EmailBackend()
email = EmailMessage(
"Subject",
"Content",
"bounce@example.com",
["to@example.com"],
headers={"From": "from@example.com"},
)
email = EmailMessage(to=["to@example.com"])
connection.send_messages([email])
connection2.send_messages([email])
self.assertEqual(len(mail.outbox), 2)
@ -1737,8 +1627,6 @@ class LocmemBackendTests(BaseEmailBackendTests, SimpleTestCase):
def test_outbox_not_mutated_after_send(self):
email = EmailMessage(
subject="correct subject",
body="test body",
from_email="from@example.com",
to=["to@example.com"],
)
email.send()
@ -2147,9 +2035,7 @@ class SMTPBackendTests(BaseEmailBackendTests, SMTPBackendTestsBase):
# connection exception.
backend.connection = mock.Mock(spec=object())
backend.open = lambda: None
email = EmailMessage(
"Subject", "Content", "from@example.com", ["to@example.com"]
)
email = EmailMessage(to=["to@example.com"])
self.assertEqual(backend.send_messages([email]), 0)
def test_send_messages_empty_list(self):