summaryrefslogtreecommitdiff
path: root/service/test/unit/adapter/test_mail_service.py
diff options
context:
space:
mode:
authorFolker Bernitt <fbernitt@thoughtworks.com>2015-02-05 11:21:48 +0100
committerFolker Bernitt <fbernitt@thoughtworks.com>2015-02-05 15:26:58 +0100
commit9893a5409560e1cc7123ec42d12b49e6edd6283c (patch)
tree3933147ea994a4ea71536d0c6be084827418f56d /service/test/unit/adapter/test_mail_service.py
parenta471b8e494b46fd85022b2105eee50fec4f84996 (diff)
(Re-)added error handling for twisted smtp sender.
- Issue #249 - Fixed all tests with that rely on sendmail deferred.
Diffstat (limited to 'service/test/unit/adapter/test_mail_service.py')
-rw-r--r--service/test/unit/adapter/test_mail_service.py55
1 files changed, 52 insertions, 3 deletions
diff --git a/service/test/unit/adapter/test_mail_service.py b/service/test/unit/adapter/test_mail_service.py
index 137c17ee..98ead126 100644
--- a/service/test/unit/adapter/test_mail_service.py
+++ b/service/test/unit/adapter/test_mail_service.py
@@ -13,20 +13,24 @@
#
# You should have received a copy of the GNU Affero General Public License
# along with Pixelated. If not, see <http://www.gnu.org/licenses/>.
-import unittest
+from twisted.trial import unittest
from pixelated.adapter.model.mail import InputMail, PixelatedMail
from pixelated.adapter.services.mail_service import MailService
from test.support.test_helper import mail_dict, leap_mail
from mockito import *
+from twisted.internet.defer import Deferred
+
+from twisted.internet import defer
class TestMailService(unittest.TestCase):
def setUp(self):
+ self.drafts = mock()
self.querier = mock()
self.mailboxes = mock()
self.tag_service = mock()
- self.mailboxes.drafts = lambda: mock()
+ self.mailboxes.drafts = lambda: self.drafts
self.mailboxes.trash = lambda: mock()
self.mailboxes.sent = lambda: mock()
@@ -34,13 +38,58 @@ class TestMailService(unittest.TestCase):
self.search_engine = mock()
self.mail_service = MailService(self.mailboxes, self.mail_sender, self.tag_service, self.querier, self.search_engine)
+ def tearDown(self):
+ unstub()
+
def test_send_mail(self):
when(InputMail).from_dict(any()).thenReturn('inputmail')
+ when(self.mail_sender).sendmail(any()).thenReturn(Deferred())
- self.mail_service.send_mail(mail_dict())
+ sent_deferred = self.mail_service.send_mail(mail_dict())
verify(self.mail_sender).sendmail("inputmail")
+ sent_deferred.callback('Assume sending mail succeeded')
+
+ return sent_deferred
+
+ def test_send_mail_removes_draft(self):
+ mail_ident = 'Some ident'
+ mail = mail_dict()
+ mail['ident'] = mail_ident
+ when(InputMail).from_dict(any()).thenReturn('inputmail')
+ deferred = Deferred()
+ when(self.mail_sender).sendmail(any()).thenReturn(deferred)
+
+ sent_deferred = self.mail_service.send_mail(mail)
+
+ verify(self.mail_sender).sendmail("inputmail")
+
+ def assert_removed_from_drafts(_):
+ verify(self.drafts).remove(any())
+
+ sent_deferred.addCallback(assert_removed_from_drafts)
+ sent_deferred.callback('Assume sending mail succeeded')
+
+ return sent_deferred
+
+ def test_send_mail_does_not_delete_draft_on_error(self):
+ when(InputMail).from_dict(any()).thenReturn('inputmail')
+ when(self.mail_sender).sendmail(any()).thenReturn(Deferred())
+
+ send_deferred = self.mail_service.send_mail(mail_dict())
+
+ verify(self.mail_sender).sendmail("inputmail")
+
+ def assert_not_removed_from_drafts(_):
+ verifyNoMoreInteractions(self.drafts)
+
+ send_deferred.addErrback(assert_not_removed_from_drafts)
+
+ send_deferred.errback(Exception('Assume sending mail failed'))
+
+ return send_deferred
+
def test_mark_as_read(self):
mail = mock()
when(self.mail_service).mail(any()).thenReturn(mail)