|
|
import mock
|
|
|
|
|
|
import kallithea
|
|
|
from kallithea.tests import *
|
|
|
|
|
|
class smtplib_mock(object):
|
|
|
|
|
|
@classmethod
|
|
|
def SMTP(cls, server, port, local_hostname):
|
|
|
return smtplib_mock()
|
|
|
|
|
|
def ehlo(self):
|
|
|
pass
|
|
|
def quit(self):
|
|
|
pass
|
|
|
def sendmail(self, sender, dest, msg):
|
|
|
smtplib_mock.lastsender = sender
|
|
|
smtplib_mock.lastdest = dest
|
|
|
smtplib_mock.lastmsg = msg
|
|
|
pass
|
|
|
|
|
|
@mock.patch('kallithea.lib.rcmail.smtp_mailer.smtplib', smtplib_mock)
|
|
|
class TestMail(BaseTestCase):
|
|
|
|
|
|
def test_send_mail_trivial(self):
|
|
|
mailserver = 'smtp.mailserver.org'
|
|
|
recipients = ['rcpt1', 'rcpt2']
|
|
|
envelope_from = 'noreply@mailserver.org'
|
|
|
subject = 'subject'
|
|
|
body = 'body'
|
|
|
html_body = 'html_body'
|
|
|
|
|
|
config_mock = {
|
|
|
'smtp_server': mailserver,
|
|
|
'app_email_from': envelope_from,
|
|
|
}
|
|
|
with mock.patch('kallithea.lib.celerylib.tasks.config', config_mock):
|
|
|
kallithea.lib.celerylib.tasks.send_email(recipients, subject, body, html_body)
|
|
|
|
|
|
self.assertSetEqual(smtplib_mock.lastdest, set(recipients))
|
|
|
self.assertEqual(smtplib_mock.lastsender, envelope_from)
|
|
|
self.assertIn('From: %s' % envelope_from, smtplib_mock.lastmsg)
|
|
|
self.assertIn('Subject: %s' % subject, smtplib_mock.lastmsg)
|
|
|
self.assertIn(body, smtplib_mock.lastmsg)
|
|
|
self.assertIn(html_body, smtplib_mock.lastmsg)
|
|
|
|
|
|
def test_send_mail_no_recipients(self):
|
|
|
mailserver = 'smtp.mailserver.org'
|
|
|
recipients = []
|
|
|
envelope_from = 'noreply@mailserver.org'
|
|
|
email_to = 'admin@mailserver.org'
|
|
|
subject = 'subject'
|
|
|
body = 'body'
|
|
|
html_body = 'html_body'
|
|
|
|
|
|
config_mock = {
|
|
|
'smtp_server': mailserver,
|
|
|
'app_email_from': envelope_from,
|
|
|
'email_to': email_to,
|
|
|
}
|
|
|
with mock.patch('kallithea.lib.celerylib.tasks.config', config_mock):
|
|
|
kallithea.lib.celerylib.tasks.send_email(recipients, subject, body, html_body)
|
|
|
|
|
|
self.assertSetEqual(smtplib_mock.lastdest, set([TEST_USER_ADMIN_EMAIL, email_to]))
|
|
|
self.assertEqual(smtplib_mock.lastsender, envelope_from)
|
|
|
self.assertIn('From: %s' % envelope_from, smtplib_mock.lastmsg)
|
|
|
self.assertIn('Subject: %s' % subject, smtplib_mock.lastmsg)
|
|
|
self.assertIn(body, smtplib_mock.lastmsg)
|
|
|
self.assertIn(html_body, smtplib_mock.lastmsg)
|
|
|
|
|
|
def test_send_mail_no_recipients_no_email_to(self):
|
|
|
mailserver = 'smtp.mailserver.org'
|
|
|
recipients = []
|
|
|
envelope_from = 'noreply@mailserver.org'
|
|
|
subject = 'subject'
|
|
|
body = 'body'
|
|
|
html_body = 'html_body'
|
|
|
|
|
|
config_mock = {
|
|
|
'smtp_server': mailserver,
|
|
|
'app_email_from': envelope_from,
|
|
|
}
|
|
|
with mock.patch('kallithea.lib.celerylib.tasks.config', config_mock):
|
|
|
kallithea.lib.celerylib.tasks.send_email(recipients, subject, body, html_body)
|
|
|
|
|
|
self.assertSetEqual(smtplib_mock.lastdest, set([TEST_USER_ADMIN_EMAIL]))
|
|
|
self.assertEqual(smtplib_mock.lastsender, envelope_from)
|
|
|
self.assertIn('From: %s' % envelope_from, smtplib_mock.lastmsg)
|
|
|
self.assertIn('Subject: %s' % subject, smtplib_mock.lastmsg)
|
|
|
self.assertIn(body, smtplib_mock.lastmsg)
|
|
|
self.assertIn(html_body, smtplib_mock.lastmsg)
|
|
|
|