smtp_tests.py 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. """Tests for cement.ext.ext_smtp."""
  2. import mock
  3. import sys
  4. import smtplib
  5. from cement.utils import test
  6. from cement.utils.misc import rando, init_defaults
  7. APP = "app-%s" % rando()[:12]
  8. class SMTPMailHandlerTestCase(test.CementTestCase):
  9. def setUp(self):
  10. super(SMTPMailHandlerTestCase, self).setUp()
  11. self.app = self.make_app(APP,
  12. extensions=['smtp'],
  13. mail_handler='smtp',
  14. argv=[],
  15. )
  16. def test_smtp_defaults(self):
  17. defaults = init_defaults(APP, 'mail.smtp')
  18. defaults['mail.smtp']['to'] = 'nobody@localhost'
  19. defaults['mail.smtp']['from_addr'] = 'nobody@localhost'
  20. defaults['mail.smtp']['cc'] = 'nobody@localhost'
  21. defaults['mail.smtp']['bcc'] = 'nobody@localhost'
  22. defaults['mail.smtp']['subject'] = 'Test Email To nobody@localhost'
  23. defaults['mail.smtp']['subject_prefix'] = 'PREFIX >'
  24. with mock.patch('smtplib.SMTP') as mock_smtp:
  25. self.app = self.make_app(APP,
  26. config_defaults=defaults,
  27. extensions=['smtp'],
  28. mail_handler='smtp',
  29. argv=[],
  30. )
  31. self.app.setup()
  32. self.app.run()
  33. self.app.mail.send('TEST MESSAGE')
  34. instance = mock_smtp.return_value
  35. if int(sys.version[0]) >= 3:
  36. self.eq(instance.send_message.call_count, 1)
  37. else:
  38. self.eq(instance.sendmail.call_count, 1)
  39. def test_smtp_ssl_tls(self):
  40. defaults = init_defaults(APP, 'mail.smtp')
  41. defaults['mail.smtp']['ssl'] = True
  42. defaults['mail.smtp']['tls'] = True
  43. defaults['mail.smtp']['port'] = 25
  44. with mock.patch('smtplib.SMTP_SSL') as mock_smtp:
  45. self.app = self.make_app(APP,
  46. config_defaults=defaults,
  47. extensions=['smtp'],
  48. mail_handler='smtp',
  49. argv=[],
  50. )
  51. self.app.setup()
  52. self.app.run()
  53. self.app.mail.send('TEST MESSAGE',
  54. to=['me@localhost'],
  55. from_addr='noreply@localhost',
  56. )
  57. instance = mock_smtp.return_value
  58. if int(sys.version[0]) >= 3:
  59. self.eq(instance.send_message.call_count, 1)
  60. else:
  61. self.eq(instance.sendmail.call_count, 1)
  62. self.eq(instance.starttls.call_count, 1)
  63. def test_smtp_auth(self):
  64. defaults = init_defaults(APP, 'mail.smtp')
  65. defaults[APP]['debug'] = True
  66. defaults['mail.smtp']['auth'] = True
  67. defaults['mail.smtp']['username'] = 'john.doe'
  68. defaults['mail.smtp']['password'] = 'password'
  69. with mock.patch('smtplib.SMTP') as mock_smtp:
  70. self.app = self.make_app(APP,
  71. config_defaults=defaults,
  72. extensions=['smtp'],
  73. mail_handler='smtp',
  74. argv=[],
  75. )
  76. self.app.setup()
  77. self.app.run()
  78. self.app.mail.send('TEST MESSAGE',
  79. to=['me@localhost'],
  80. from_addr='noreply@localhost',
  81. )
  82. instance = mock_smtp.return_value
  83. self.eq(instance.login.call_count, 1)
  84. if int(sys.version[0]) >= 3:
  85. self.eq(instance.send_message.call_count, 1)
  86. else:
  87. self.eq(instance.sendmail.call_count, 1)