def test_can_notify_plugin_after_delivery(self, delivery_successful): if delivery_successful: signal = MQSignal.delivery_successful mailer = DebugMailer() else: signal = MQSignal.delivery_failed mailer = DebugMailer(simulate_failed_sending=True) registry = SignalRegistry() plugin = MagicMock(return_value=None, spec={}) connect_signals({signal: plugin}, registry.namespace) mh = MessageHandler([mailer], plugins=registry) mh.send_message(example_message(), sender='*****@*****.**', recipient='*****@*****.**') plugin.assert_called_once() # would be able to simplify this with Python 3 only: # call_kwargs = plugin.call_args.kwargs call_kwargs = plugin.call_args[-1] send_result = call_kwargs['send_result'] if delivery_successful: assert_length(1, mailer.sent_mails) assert_trueish(send_result) else: assert_length(0, mailer.sent_mails) assert_falseish(send_result) assert_false(send_result.queued) assert_equals('debug', send_result.transport)
def test_can_enqueue_message_with_multiple_recipients_after_failed_sending( self): mailer = DebugMailer(simulate_failed_sending=True) mh = MessageHandler([mailer, MaildirBackend(self.path_maildir)]) msg = example_message() recipients = ('*****@*****.**', '*****@*****.**') mh.send_message(msg, sender='*****@*****.**', recipients=recipients) msg_path, = self.msg_files(folder='new') with open(msg_path, 'rb') as msg_fp: stored_msg = parse_message_envelope(msg_fp) assert_equals(recipients, stored_msg.to_addrs)
def test_can_create_missing_maildir_folders_before_enqueueing_message( self): # important for regression test: mailqueue parent folder exists but # "new"/"cur"/"tmp" are missing. for sub_dir in ('new', 'cur', 'tmp'): sub_path = os.path.join(self.path_maildir, sub_dir) assert_false(os.path.exists(sub_path)) msg = example_message() enqueue_message(msg, self.path_maildir, sender='*****@*****.**', recipients=('*****@*****.**', )) assert_length(1, self.msg_files(folder='new'))
def test_can_enqueue_message_after_failed_sending(self): mailer = DebugMailer(simulate_failed_sending=True) maildir_fallback = MaildirBackend(self.path_maildir) msg = example_message() mh = MessageHandler([mailer, maildir_fallback]) was_sent = mh.send_message(msg, sender='*****@*****.**', recipient='*****@*****.**') assert_trueish(was_sent) assert_is_empty(mailer.sent_mails) msg_path, = self.msg_files(folder='new') with open(msg_path, 'rb') as msg_fp: stored_msg = parse_message_envelope(msg_fp) assert_equals('*****@*****.**', stored_msg.from_addr) assert_equals(('*****@*****.**', ), stored_msg.to_addrs)
def test_can_store_message_on_disk_before_sending(self): msg = example_message() md_msg = enqueue_message( msg, self.path_maildir, sender='*****@*****.**', recipients=('*****@*****.**', ), in_progress=True, return_msg=True, ) assert_length(0, self.msg_files(folder='new')) assert_length(1, self.msg_files(folder='cur')) mailer = DebugMailer() mh = MessageHandler([mailer]) send_result = mh.send_message(md_msg) assert_trueish(send_result) assert_length(1, mailer.sent_mails) assert_length(0, self.msg_files(folder='new')) assert_length(0, self.msg_files(folder='cur'))
def test_plugin_can_discard_message_after_failed_delivery(self): mailer = DebugMailer(simulate_failed_sending=True) sender = '*****@*****.**' recipient = '*****@*****.**' def discard_message(event_sender, msg, send_result): assert_falseish(send_result) assert_none(send_result.discarded) assert_equals(sender, msg.from_addr) assert_equals({recipient}, set(msg.to_addrs)) return MQAction.DISCARD registry = SignalRegistry() connect_signals({MQSignal.delivery_failed: discard_message}, registry.namespace) msg = example_message() mh = MessageHandler([mailer], plugins=registry) send_result = mh.send_message(msg, sender=sender, recipient=recipient) assert_falseish(send_result) assert_false(send_result.queued) assert_true(send_result.discarded)