diff options
author | David Rousselie <dax@happycoders.org> | 2007-11-12 21:09:23 +0300 |
---|---|---|
committer | David Rousselie <dax@happycoders.org> | 2007-11-12 21:09:23 +0300 |
commit | e9a3c54b4fe5491056667aaa4f7aaeb2b238864a (patch) | |
tree | 430acc7724f04d884fd94a325504c129bfc8128d | |
parent | ef5b7db24c1f3a74da70fa81e4de7ffe8ad3f0fa (diff) |
Add missing jmc.jabber.tests.message package
darcs-hash:20071112180923-86b55-49820f615136881c7a666a1480f173b50c52a942.gz
-rw-r--r-- | src/jmc/jabber/tests/message.py | 253 |
1 files changed, 253 insertions, 0 deletions
diff --git a/src/jmc/jabber/tests/message.py b/src/jmc/jabber/tests/message.py new file mode 100644 index 0000000..1122791 --- /dev/null +++ b/src/jmc/jabber/tests/message.py @@ -0,0 +1,253 @@ +## +## message.py +## Login : <dax@happycoders.org> +## Started on Tue Nov 6 19:00:22 2007 David Rousselie +## $Id$ +## +## Copyright (C) 2007 David Rousselie +## This program is free software; you can redistribute it and/or modify +## it under the terms of the GNU General Public License as published by +## the Free Software Foundation; either version 2 of the License, or +## (at your option) any later version. +## +## This program is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +## GNU General Public License for more details. +## +## You should have received a copy of the GNU General Public License +## along with this program; if not, write to the Free Software +## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +## + +import unittest +import re + +from pyxmpp.message import Message + +from jcl.tests import JCLTestCase +from jcl.model.account import Account, User + +from jmc.model.account import SMTPAccount +from jmc.jabber.message import SendMailMessageHandler, \ + RootSendMailMessageHandler +from jmc.lang import Lang + +class MockSMTPAccount(object): + def __init__(self): + self.email_sent = 0 + self.default_from = "user1@test.com" + self.email = None + + def send_email(self, email): + self.email = email + self.email_sent += 1 + + def create_email(self, from_addr, to_addr, subject, body, + other_headers=None): + return (from_addr, to_addr, subject, body, other_headers) + +class SendMailMessageHandler_TestCase(unittest.TestCase): + def setUp(self): + self.handler = SendMailMessageHandler(None) + + def test_get_email_to_headers_from_message(self): + to_regexp = re.compile("^\s*(?i)to\s*:\s*(?P<to_email>.*)") + (message, to_header) = self.handler.get_email_headers_from_message(\ + "To: dest@test.com\ntest body\n", [to_regexp], ["to_email"]) + self.assertEquals(message, "test body\n") + self.assertEquals(to_header, ["dest@test.com"]) + + def test_get_email_headers_from_message(self): + to_regexp = re.compile("^\s*(?i)to\s*:\s*(?P<to_email>.*)") + cc_regexp = re.compile("^\s*(?i)cc\s*:\s*(?P<cc_email>.*)") + bcc_regexp = re.compile("^\s*(?i)bcc\s*:\s*(?P<bcc_email>.*)") + subject_regexp = re.compile("^\s*(?i)subject\s*:\s*(?P<subject_email>.*)") + (message, headers) = self.handler.get_email_headers_from_message(\ + "To: dest@test.com\nCc: cc@test.com\n" + + "Bcc: bcc@test.com\n" + + "Subject: test subject\ntest body\n", + [to_regexp, cc_regexp, bcc_regexp, subject_regexp], + ["to_email", "cc_email", "bcc_email", "subject_email"]) + self.assertEquals(message, "test body\n") + self.assertEquals(headers, ["dest@test.com", + "cc@test.com", + "bcc@test.com", + "test subject"]) + + def test_get_email_headers_from_message_unordered(self): + to_regexp = re.compile("^\s*(?i)to\s*:\s*(?P<to_email>.*)") + cc_regexp = re.compile("^\s*(?i)cc\s*:\s*(?P<cc_email>.*)") + bcc_regexp = re.compile("^\s*(?i)bcc\s*:\s*(?P<bcc_email>.*)") + subject_regexp = re.compile("^\s*(?i)subject\s*:\s*(?P<subject_email>.*)") + (message, headers) = self.handler.get_email_headers_from_message(\ + "To: dest@test.com\nCc: cc@test.com\n" + + "Bcc: bcc@test.com\n" + + "Subject: test subject\ntest body\n", + [cc_regexp, to_regexp, subject_regexp, bcc_regexp], + ["cc_email", "to_email", "subject_email", "bcc_email"]) + self.assertEquals(message, "test body\n") + self.assertEquals(headers, ["cc@test.com", + "dest@test.com", + "test subject", + "bcc@test.com"]) + + def test_handle(self): + mock_account = MockSMTPAccount() + message = Message(from_jid="user1@test.com", + to_jid="real_dest%test.com@jmc.test.com", + subject="real subject", + body="To: dest@test.com\nCc: cc@test.com\n" \ + + "Bcc: bcc@test.com\n" \ + + "Subject: test subject\ntest body\n") + result = self.handler.handle(\ + message, Lang.en, [mock_account]) + self.assertEquals(len(result), 1) + self.assertEquals(result[0].stanza_type, "message") + self.assertEquals(result[0].get_from(), "real_dest%test.com@jmc.test.com") + self.assertEquals(result[0].get_to(), "user1@test.com") + self.assertEquals(result[0].get_subject(), + Lang.en.send_mail_ok_subject) + self.assertEquals(result[0].get_body(), + Lang.en.send_mail_ok_body % \ + ("real_dest@test.com, dest@test.com")) + self.assertEquals(mock_account.email_sent, 1) + self.assertEquals(mock_account.email[0], "user1@test.com") + self.assertEquals(mock_account.email[1], "real_dest@test.com, dest@test.com") + self.assertEquals(mock_account.email[2], "real subject") + self.assertEquals(mock_account.email[3], "test body\n") + self.assertEquals(mock_account.email[4], {u"Bcc": "bcc@test.com", + u"Cc": "cc@test.com"}) + +class RootSendMailMessageHandler_TestCase(JCLTestCase): + def setUp(self): + JCLTestCase.setUp(self, tables=[Account, SMTPAccount, User]) + self.handler = RootSendMailMessageHandler(None) + + def test_filter(self): + user1 = User(jid="user1@test.com") + account11 = SMTPAccount(user=user1, + name="account11", + jid="account11@jmc.test.com") + account11.default_account = True + account12 = SMTPAccount(user=user1, + name="account12", + jid="account12@jmc.test.com") + message = Message(from_jid="user1@test.com", + to_jid="account11@jmc.test.com", + body="message") + accounts = self.handler.filter(message, None) + self.assertEquals(accounts.count(), 1) + + def test_filter_no_default_account(self): + user1 = User(jid="user1@test.com") + account11 = SMTPAccount(user=user1, + name="account11", + jid="account11@jmc.test.com") + account12 = SMTPAccount(user=user1, + name="account12", + jid="account12@jmc.test.com") + message = Message(from_jid="user1@test.com", + to_jid="account11@jmc.test.com", + body="message") + accounts = self.handler.filter(message, None) + self.assertEquals(accounts.count(), 2) + self.assertEquals(accounts[0].name, "account11") + + def test_filter_wrong_dest(self): + user1 = User(jid="user1@test.com") + account11 = SMTPAccount(user=user1, + name="account11", + jid="account11@jmc.test.com") + account12 = SMTPAccount(user=user1, + name="account12", + jid="account12@jmc.test.com") + message = Message(from_jid="user1@test.com", + to_jid="user2%test.com@jmc.test.com", + body="message") + accounts = self.handler.filter(message, None) + self.assertEquals(accounts.count(), 2) + + def test_filter_wrong_user(self): + user1 = User(jid="user1@test.com") + account11 = SMTPAccount(user=user1, + name="account11", + jid="account11@jmc.test.com") + account12 = SMTPAccount(user=user1, + name="account12", + jid="account12@jmc.test.com") + message = Message(from_jid="user2@test.com", + to_jid="account11@jmc.test.com", + body="message") + accounts = self.handler.filter(message, None) + self.assertEquals(accounts.count(), 0) + + def test_handle(self): + mock_account = MockSMTPAccount() + message = Message(from_jid="user1@test.com", + to_jid="jmc.test.com", + subject="real subject", + body="To: dest@test.com\nCc: cc@test.com\n" \ + + "Bcc: bcc@test.com\n" \ + + "Subject: test subject\ntest body\n") + result = self.handler.handle(\ + message, Lang.en, [mock_account]) + self.assertEquals(len(result), 1) + self.assertEquals(result[0].get_type(), None) + self.assertEquals(result[0].get_from(), "jmc.test.com") + self.assertEquals(result[0].get_to(), "user1@test.com") + self.assertEquals(result[0].get_subject(), + Lang.en.send_mail_ok_subject) + self.assertEquals(result[0].get_body(), + Lang.en.send_mail_ok_body % ("dest@test.com")) + self.assertEquals(mock_account.email_sent, 1) + self.assertEquals(mock_account.email[0], "user1@test.com") + self.assertEquals(mock_account.email[1], "dest@test.com") + self.assertEquals(mock_account.email[2], "real subject") + self.assertEquals(mock_account.email[3], "test body\n") + self.assertEquals(mock_account.email[4], {u"Bcc": "bcc@test.com", + u"Cc": "cc@test.com"}) + + def test_handle_email_not_found_in_header(self): + message = Message(from_jid="user1@test.com", + to_jid="jmc.test.com", + subject="message subject", + body="message body") + accounts = [MockSMTPAccount()] + result = self.handler.handle(message, Lang.en, accounts) + self.assertEquals(len(result), 1) + self.assertEquals(result[0].get_type(), "error") + self.assertEquals(result[0].get_from(), "jmc.test.com") + self.assertEquals(result[0].get_to(), "user1@test.com") + self.assertEquals(result[0].get_subject(), + Lang.en.send_mail_error_no_to_header_subject) + self.assertEquals(result[0].get_body(), + Lang.en.send_mail_error_no_to_header_body) + + def test_handle_no_jabber_subject(self): + mock_account = MockSMTPAccount() + message = Message(from_jid="user1@test.com", + to_jid="jmc.test.com", + subject="", + body="To: dest@test.com\nCc: cc@test.com\n" \ + + "Bcc: bcc@test.com\n" \ + + "Subject: test subject\ntest body\n") + message_to_send = self.handler.handle(\ + message, Lang.en, [mock_account]) + self.assertNotEquals(message_to_send, None) + self.assertEquals(mock_account.email_sent, 1) + self.assertEquals(mock_account.email[0], "user1@test.com") + self.assertEquals(mock_account.email[1], "dest@test.com") + self.assertEquals(mock_account.email[2], "test subject") + self.assertEquals(mock_account.email[3], "test body\n") + self.assertEquals(mock_account.email[4], {u"Bcc": "bcc@test.com", + u"Cc": "cc@test.com"}) + +def suite(): + suite = unittest.TestSuite() + suite.addTest(unittest.makeSuite(SendMailMessageHandler_TestCase, 'test')) + suite.addTest(unittest.makeSuite(RootSendMailMessageHandler_TestCase, 'test')) + return suite + +if __name__ == '__main__': + unittest.main(defaultTest='suite') |