aboutsummaryrefslogtreecommitdiffstats
path: root/mediagoblin/util.py
diff options
context:
space:
mode:
authorJoar Wandborg <git@wandborg.com>2011-05-04 22:31:08 +0200
committerJoar Wandborg <git@wandborg.com>2011-05-04 22:31:08 +0200
commiteee2c3a7e699da493ed9b5c11d0c5873441a7abb (patch)
tree2f4c318d1a2e20f38a2ac8e4458ed30c7c82c217 /mediagoblin/util.py
parent7b3fcddbf4fd6418aceb9e0d06b912a0d79c4a97 (diff)
parent61ec968b0d1a3681bbc049d651f67100b64e1f6d (diff)
downloadmediagoblin-eee2c3a7e699da493ed9b5c11d0c5873441a7abb.tar.lz
mediagoblin-eee2c3a7e699da493ed9b5c11d0c5873441a7abb.tar.xz
mediagoblin-eee2c3a7e699da493ed9b5c11d0c5873441a7abb.zip
Merge branch 'master' of http://git.gitorious.org/mediagoblin/mediagoblin
Diffstat (limited to 'mediagoblin/util.py')
-rw-r--r--mediagoblin/util.py97
1 files changed, 97 insertions, 0 deletions
diff --git a/mediagoblin/util.py b/mediagoblin/util.py
index c9c57dfc..d24b59b6 100644
--- a/mediagoblin/util.py
+++ b/mediagoblin/util.py
@@ -14,11 +14,23 @@
# 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/>.
+from email.MIMEText import MIMEText
+import smtplib
import sys
import jinja2
import mongokit
+
+TESTS_ENABLED = False
+def _activate_testing():
+ """
+ Call this to activate testing in util.py
+ """
+ global TESTS_ENABLED
+ TESTS_ENABLED = True
+
+
def get_jinja_env(user_template_path=None):
"""
Set up the Jinja environment, possibly allowing for user
@@ -72,3 +84,88 @@ def import_component(import_string):
module = sys.modules[module_name]
func = getattr(module, func_name)
return func
+
+
+### ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+### Special email test stuff begins HERE
+### ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+# We have two "test inboxes" here:
+#
+# EMAIL_TEST_INBOX:
+# ----------------
+# If you're writing test views, you'll probably want to check this.
+# It contains a list of MIMEText messages.
+#
+# EMAIL_TEST_MBOX_INBOX:
+# ----------------------
+# This collects the messages from the FakeMhost inbox. It's reslly
+# just here for testing the send_email method itself.
+#
+# Anyway this contains:
+# - from
+# - to: a list of email recipient addresses
+# - message: not just the body, but the whole message, including
+# headers, etc.
+#
+# ***IMPORTANT!***
+# ----------------
+# Before running tests that call functions which send email, you should
+# always call _clear_test_inboxes() to "wipe" the inboxes clean.
+
+EMAIL_TEST_INBOX = []
+EMAIL_TEST_MBOX_INBOX = []
+
+
+class FakeMhost(object):
+ """
+ Just a fake mail host so we can capture and test messages
+ from send_email
+ """
+ def connect(self):
+ pass
+
+ def sendmail(self, from_addr, to_addrs, message):
+ EMAIL_TEST_MBOX_INBOX.append(
+ {'from': from_addr,
+ 'to': to_addrs,
+ 'message': message})
+
+def _clear_test_inboxes():
+ global EMAIL_TEST_INBOX
+ global EMAIL_TEST_MBOX_INBOX
+ EMAIL_TEST_INBOX = []
+ EMAIL_TEST_MBOX_INBOX = []
+
+### ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+### </Special email test stuff>
+### ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+def send_email(from_addr, to_addrs, subject, message_body):
+ """
+ Simple email sending wrapper, use this so we can capture messages
+ for unit testing purposes.
+
+ Args:
+ - from_addr: address you're sending the email from
+ - to_addrs: list of recipient email addresses
+ - subject: subject of the email
+ - message_body: email body text
+ """
+ # TODO: make a mock mhost if testing is enabled
+ if TESTS_ENABLED:
+ mhost = FakeMhost()
+ else:
+ mhost = smtplib.SMTP()
+
+ mhost.connect()
+
+ message = MIMEText(message_body.encode('utf-8'), 'plain', 'utf-8')
+ message['Subject'] = subject
+ message['From'] = from_addr
+ message['To'] = ', '.join(to_addrs)
+
+ if TESTS_ENABLED:
+ EMAIL_TEST_INBOX.append(message)
+
+ return mhost.sendmail(from_addr, to_addrs, message.as_string())