test_mail.py 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. from __future__ import absolute_import
  2. from celery.utils.mail import Message, Mailer, SSLError, ErrorMail
  3. from celery.tests.case import Case, Mock, patch
  4. msg = Message(to='george@vandelay.com', sender='elaine@pendant.com',
  5. subject="What's up with Jerry?", body='???!')
  6. class test_Message(Case):
  7. def test_repr(self):
  8. self.assertTrue(repr(msg))
  9. def test_str(self):
  10. self.assertTrue(str(msg))
  11. class test_Mailer(Case):
  12. def test_send_wrapper(self):
  13. mailer = Mailer()
  14. mailer._send = Mock()
  15. mailer.send(msg)
  16. mailer._send.assert_called_with(msg)
  17. @patch('smtplib.SMTP_SSL', create=True)
  18. def test_send_ssl_tls(self, SMTP_SSL):
  19. mailer = Mailer(use_ssl=True, use_tls=True)
  20. client = SMTP_SSL.return_value = Mock()
  21. mailer._send(msg)
  22. self.assertTrue(client.starttls.called)
  23. self.assertEqual(client.ehlo.call_count, 2)
  24. client.quit.assert_called_with()
  25. client.sendmail.assert_called_with(msg.sender, msg.to, str(msg))
  26. mailer = Mailer(use_ssl=True, use_tls=True, user='foo',
  27. password='bar')
  28. mailer._send(msg)
  29. client.login.assert_called_with('foo', 'bar')
  30. @patch('smtplib.SMTP')
  31. def test_send(self, SMTP):
  32. client = SMTP.return_value = Mock()
  33. mailer = Mailer(use_ssl=False, use_tls=False)
  34. mailer._send(msg)
  35. client.sendmail.assert_called_with(msg.sender, msg.to, str(msg))
  36. client.quit.side_effect = SSLError()
  37. mailer._send(msg)
  38. client.close.assert_called_with()
  39. class test_ErrorMail(Case):
  40. def setUp(self):
  41. self.task = Mock(name='task')
  42. self.mailer = ErrorMail(
  43. self.task, subject='foo{foo} ', body='bar{bar} ',
  44. )
  45. def test_should_send(self):
  46. self.assertTrue(self.mailer.should_send(Mock(), Mock()))
  47. def test_format_subject(self):
  48. self.assertEqual(
  49. self.mailer.format_subject({'foo': 'FOO'}),
  50. 'fooFOO',
  51. )
  52. def test_format_body(self):
  53. self.assertEqual(
  54. self.mailer.format_body({'bar': 'BAR'}),
  55. 'barBAR',
  56. )
  57. def test_send(self):
  58. self.mailer.send({'foo': 'FOO', 'bar': 'BAR'}, KeyError())
  59. self.task.app.mail_admins.assert_called_with(
  60. 'fooFOO', 'barBAR', fail_silently=True,
  61. )