Changed how the mail utilities handle lists in their override and extra arguments. Added a test for send_mail_preformatted exercising override and extra. Commit ready for merge.

- Legacy-Id: 15153
This commit is contained in:
Robert Sparks 2018-05-22 15:38:04 +00:00
parent 6b779e9d4c
commit 25e9893a13
2 changed files with 69 additions and 3 deletions

View file

@ -302,7 +302,10 @@ def parse_preformatted(preformatted, extra={}, override={}):
for k, v in override.iteritems():
if k in msg:
del msg[k]
msg[k] = v
if isinstance(v, list):
msg[k] = ', '.join(v)
else:
msg[k] = v
headers = copy.copy(msg)
for key in ['To', 'From', 'Subject', 'Bcc']:
@ -310,7 +313,10 @@ def parse_preformatted(preformatted, extra={}, override={}):
for k, v in extra.iteritems():
if k in headers:
del headers[k]
headers[k] = v
if isinstance(v, list):
headers[k] = ', '.join(v)
else:
headers[k] = v
bcc = msg['Bcc']
del msg['Bcc']

View file

@ -29,7 +29,7 @@ import debug # pyflakes:ignore
from ietf.group.models import Group
from ietf.submit.tests import submission_file
from ietf.utils.draft import Draft, getmeta
from ietf.utils.mail import send_mail_text, send_mail_mime, outbox
from ietf.utils.mail import send_mail_preformatted, send_mail_text, send_mail_mime, outbox
from ietf.utils.management.commands import pyflakes
from ietf.utils.test_data import make_test_data
from ietf.utils.test_runner import get_template_paths, set_coverage_checking
@ -54,6 +54,66 @@ class PyFlakesTestCase(TestCase):
warnings = pyflakes.checkPaths([path], verbosity=0)
self.assertEqual([], [str(w) for w in warnings])
class SendingMail(TestCase):
def test_send_mail_preformatted(self):
msg = """To: to1@example.com, to2@example.com
From: from1@example.com, from2@example.com
Cc: cc1@example.com, cc2@example.com
Bcc: bcc1@example.com, bcc2@example.com
Subject: subject
body
"""
send_mail_preformatted(None, msg, {}, {})
recv = outbox[-1]
self.assertEqual(recv['To'], '<to1@example.com>, <to2@example.com>')
self.assertEqual(recv['From'], 'from1@example.com, from2@example.com')
self.assertEqual(recv['Cc'], 'cc1@example.com, cc2@example.com')
self.assertEqual(recv['Bcc'], None)
self.assertEqual(recv['Subject'], 'subject')
self.assertEqual(recv.get_payload(), 'body\n')
override = {
'To': 'oto1@example.net, oto2@example.net',
'From': 'ofrom1@example.net, ofrom2@example.net',
'Cc': 'occ1@example.net, occ2@example.net',
'Subject': 'osubject',
}
send_mail_preformatted(request=None, preformatted=msg, extra={}, override=override)
recv = outbox[-1]
self.assertEqual(recv['To'], '<oto1@example.net>, <oto2@example.net>')
self.assertEqual(recv['From'], 'ofrom1@example.net, ofrom2@example.net')
self.assertEqual(recv['Cc'], 'occ1@example.net, occ2@example.net')
self.assertEqual(recv['Bcc'], None)
self.assertEqual(recv['Subject'], 'osubject')
self.assertEqual(recv.get_payload(), 'body\n')
override = {
'To': ['<oto1@example.net>', 'oto2@example.net'],
'From': ['<ofrom1@example.net>', 'ofrom2@example.net'],
'Cc': ['<occ1@example.net>', 'occ2@example.net'],
'Subject': 'osubject',
}
send_mail_preformatted(request=None, preformatted=msg, extra={}, override=override)
recv = outbox[-1]
self.assertEqual(recv['To'], '<oto1@example.net>, <oto2@example.net>')
self.assertEqual(recv['From'], '<ofrom1@example.net>, ofrom2@example.net')
self.assertEqual(recv['Cc'], '<occ1@example.net>, occ2@example.net')
self.assertEqual(recv['Bcc'], None)
self.assertEqual(recv['Subject'], 'osubject')
self.assertEqual(recv.get_payload(), 'body\n')
extra = {'Fuzz': 'bucket'}
send_mail_preformatted(request=None, preformatted=msg, extra=extra, override={})
recv = outbox[-1]
self.assertEqual(recv['Fuzz'], 'bucket')
extra = {'Fuzz': ['bucket','monger']}
send_mail_preformatted(request=None, preformatted=msg, extra=extra, override={})
recv = outbox[-1]
self.assertEqual(recv['Fuzz'], 'bucket, monger')
class TestSMTPServer(TestCase):
def test_address_rejected(self):