Fix #861 - Add unit test and documentation for email_smtp_force_starttls
authorJessica Tallon <jessica@megworld.co.uk>
Tue, 12 Aug 2014 15:56:08 +0000 (16:56 +0100)
committerJessica Tallon <jessica@megworld.co.uk>
Tue, 12 Aug 2014 18:23:19 +0000 (19:23 +0100)
mediagoblin/config_spec.ini
mediagoblin/tests/test_util.py
mediagoblin/tools/mail.py

index 72993ed097889f9f74713231d8526cefea3ffedb..b5c957c8acba8a17cdcc5d17dcea41b59ad3e856 100644 (file)
@@ -23,14 +23,29 @@ direct_remote_path = string(default="/mgoblin_static/")
 
 # set to false to enable sending notices
 email_debug_mode = boolean(default=True)
+
+# Uses SSL/TLS when connecting to SMTP server
 email_smtp_use_ssl = boolean(default=False)
-email_smtp_force_tls = boolean(default=False)
+
+# Uses STARTTLS when connecting to SMTP server
+email_smtp_force_starttls = boolean(default=False)
+
+# Email address which notices are sent from
 email_sender_address = string(default="notice@mediagoblin.example.org")
+
+# Hostname of SMTP server
 email_smtp_host = string(default='')
+
+# Port for SMTP server
 email_smtp_port = integer(default=0)
+
+# Username used for SMTP server
 email_smtp_user = string(default=None)
+
+# Password used for SMTP server
 email_smtp_pass = string(default=None)
 
+
 # Set to false to disable registrations
 allow_registration = boolean(default=True)
 
index 9d9b1c161448b291b26b8854da9d0412eb1521da..36563e75bbc6f9f096ba538f23b823848f535794 100644 (file)
 # You should have received a copy of the GNU Affero General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
+import mock
 import email
+import pytest
+import smtplib
+import pkg_resources
 
+from mediagoblin.tests.tools import get_app
 from mediagoblin.tools import common, url, translate, mail, text, testing
 
 testing._activate_testing()
@@ -69,6 +74,28 @@ I hope you like unit tests JUST AS MUCH AS I DO!"""
 
 I hope you like unit tests JUST AS MUCH AS I DO!"""
 
+@pytest.fixture()
+def starttls_enabled_app(request):
+    return get_app(
+        request,
+        mgoblin_config=pkg_resources.resource_filename(
+            "mediagoblin.tests",
+            "starttls_config.ini"
+        )
+    )
+
+def test_email_force_starttls(starttls_enabled_app):
+    common.TESTS_ENABLED = False
+    SMTP = lambda *args, **kwargs: mail.FakeMhost()
+    with mock.patch('smtplib.SMTP', SMTP):
+        with pytest.raises(smtplib.SMTPException):
+            mail.send_email(
+                from_addr="notices@my.test.instance.com",
+                to_addrs="someone@someplace.com",
+                subject="Testing is so much fun!",
+                message_body="Ohai ^_^"
+            )
+
 def test_slugify():
     assert url.slugify(u'a walk in the park') == u'a-walk-in-the-park'
     assert url.slugify(u'A Walk in the Park') == u'a-walk-in-the-park'
index 889a4420076b7bdf97460808c6c699b3847e0d08..ab3558352d99dceaef6afd9606aca416870a25bf 100644 (file)
@@ -111,7 +111,7 @@ def send_email(from_addr, to_addrs, subject, message_body):
             mhost.starttls()
         except smtplib.SMTPException:
             # Only raise an exception if we're forced to
-            if mg_globals.app_config['email_smtp_force_tls']:
+            if mg_globals.app_config['email_smtp_force_starttls']:
                 six.reraise(*sys.exc_info())
 
     if ((not common.TESTS_ENABLED)