コード例 #1
0
    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)
コード例 #2
0
    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)
コード例 #3
0
    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'))
コード例 #4
0
    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)
コード例 #5
0
    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'))
コード例 #6
0
    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)