diff options
author | Folker Bernitt <fbernitt@thoughtworks.com> | 2015-02-05 11:21:48 +0100 |
---|---|---|
committer | Folker Bernitt <fbernitt@thoughtworks.com> | 2015-02-05 15:26:58 +0100 |
commit | 9893a5409560e1cc7123ec42d12b49e6edd6283c (patch) | |
tree | 3933147ea994a4ea71536d0c6be084827418f56d /service/test/unit/adapter/test_mail_service.py | |
parent | a471b8e494b46fd85022b2105eee50fec4f84996 (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.py | 55 |
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) |