コード例 #1
0
    def test_interval_tolerance(self):
        create(
            Builder('digest').having(userid=self.regular_user.getId(),
                                     last_dispatch=datetime(2017,
                                                            10,
                                                            15,
                                                            12,
                                                            30,
                                                            tzinfo=pytz.utc)))

        create(
            Builder('digest').having(userid=self.dossier_responsible.getId(),
                                     last_dispatch=datetime(2017,
                                                            10,
                                                            16,
                                                            9,
                                                            tzinfo=pytz.utc)))

        # test interval expired because of tolerance
        Mailing(self.portal).reset()
        with freeze(datetime(2017, 10, 16, 11, 30, tzinfo=pytz.utc)):
            DigestMailer().send_digests()
            process_mail_queue()

            messages = [
                message_from_string(mail)
                for mail in Mailing(self.portal).get_messages()
            ]

            self.assertEquals(1, len(messages))
            self.assertEquals('*****@*****.**', messages[0].get('To'))
コード例 #2
0
    def test_send_mail_with_site_email_if_activity_actor_lookup_failed(self):
        self.note1.sent_in_digest = True
        self.note2.sent_in_digest = True

        activity = create(
            Builder('activity').having(
                title=u'Bitte \xc4nderungen nachvollziehen',
                created=pytz.UTC.localize(datetime(2017, 10, 15, 18, 24)),
                resource=self.resource,
                actor_id="NOT_AN_EXISTING_ACTOR"))

        create(
            Builder('notification').having(
                activity=activity,
                is_digest=True,
                userid=self.dossier_responsible.getId()))

        DigestMailer().send_digests()
        process_mail_queue()

        messages = [
            message_from_string(mail)
            for mail in Mailing(self.portal).get_messages()
        ]

        self.assertEquals(1, len(messages))
        self.assertIn(self.portal.email_from_address, messages[0].get('From'))
コード例 #3
0
ファイル: test_mail.py プロジェクト: 4teamwork/opengever.core
    def test_subject_is_title(self, browser):
        self.login(self.dossier_responsible, browser)
        self.create_task_via_browser(browser)
        process_mail_queue()

        mail = email.message_from_string(Mailing(self.portal).pop())
        self.assertEquals('GEVER Activity: Test Task', mail.get('Subject'))
コード例 #4
0
    def test_subject_is_title(self, browser):
        self.login(self.dossier_responsible, browser)
        self.create_task_via_browser(browser)
        process_mail_queue()

        mail = email.message_from_string(Mailing(self.portal).pop())
        self.assertEquals('GEVER Activity: Test Task', mail.get('Subject'))
コード例 #5
0
ファイル: test_mail.py プロジェクト: 4teamwork/opengever.core
    def test_from_and_to_addresses(self, browser):
        self.login(self.dossier_responsible, browser)

        self.create_task_via_browser(browser)
        process_mail_queue()

        mail = email.message_from_string(Mailing(self.portal).pop())
        self.assertEquals('*****@*****.**', mail.get('To'))
        self.assertEquals('Ziegler Robert <*****@*****.**>', get_header(mail, 'From'))
コード例 #6
0
ファイル: test_mail.py プロジェクト: 4teamwork/opengever.core
    def test_task_title_is_linked_to_resolve_notification_view(self, browser):
        self.login(self.dossier_responsible, browser)

        self.create_task_via_browser(browser)
        process_mail_queue()

        raw_mail = Mailing(self.portal).pop()
        link = '<p><a href=3D"http://nohost/plone/@@resolve_notification?notification=\n_id=3D1">Test Task</a></p>'
        self.assertIn(link, raw_mail.strip())
コード例 #7
0
    def test_task_title_is_linked_to_resolve_notification_view(self, browser):
        self.login(self.dossier_responsible, browser)

        self.create_task_via_browser(browser)
        process_mail_queue()

        raw_mail = Mailing(self.portal).pop()
        link = '<p><a href=3D"http://nohost/plone/@@resolve_notification?notification=\n_id=3D1">Test Task</a></p>'
        self.assertIn(link, raw_mail.strip())
コード例 #8
0
    def test_sends_mail_to_all_notified_users(self):
        DigestMailer().send_digests()
        process_mail_queue()

        messages = [message_from_string(mail)
                    for mail in Mailing(self.portal).get_messages()]
        self.assertEquals(2, len(messages))
        self.assertItemsEqual(['*****@*****.**', '*****@*****.**'],
                              [message.get('To') for message in messages])
コード例 #9
0
    def test_from_and_to_addresses(self, browser):
        self.login(self.dossier_responsible, browser)

        self.create_task_via_browser(browser)
        process_mail_queue()

        mail = email.message_from_string(Mailing(self.portal).pop())
        self.assertEquals('*****@*****.**', mail.get('To'))
        self.assertEquals('Ziegler Robert <*****@*****.**>',
                          get_header(mail, 'From'))
コード例 #10
0
    def test_sends_only_not_yet_sended_notifications(self):
        self.note2.sent_in_digest = True

        DigestMailer().send_digests()
        process_mail_queue()

        messages = [message_from_string(mail)
                    for mail in Mailing(self.portal).get_messages()]
        self.assertEquals(1, len(messages))
        self.assertEquals('*****@*****.**',
                          messages[0].get('To'))
コード例 #11
0
    def test_sends_only_not_yet_sended_notifications(self):
        self.note2.sent_in_digest = True

        DigestMailer().send_digests()
        process_mail_queue()

        messages = [
            message_from_string(mail)
            for mail in Mailing(self.portal).get_messages()
        ]
        self.assertEquals(1, len(messages))
        self.assertEquals('*****@*****.**', messages[0].get('To'))
コード例 #12
0
    def test_sends_mail_to_all_notified_users(self):
        DigestMailer().send_digests()
        process_mail_queue()

        messages = [
            message_from_string(mail)
            for mail in Mailing(self.portal).get_messages()
        ]
        self.assertEquals(2, len(messages))
        self.assertItemsEqual(
            ['*****@*****.**', '*****@*****.**'],
            [message.get('To') for message in messages])
コード例 #13
0
    def test_mail_dispatcher_respects_dispatcher_roles(self, browser):
        """By default only the responsible should be notified by mail, when
        a task gets added.
        """
        self.login(self.dossier_responsible, browser)
        browser.open(self.dossier, view='++add++opengever.task.task')
        self.create_task_via_browser(browser)
        process_mail_queue()

        self.assertEquals(1, len(Mailing(self.portal).get_messages()))
        mail = email.message_from_string(Mailing(self.portal).pop())
        self.assertEquals('*****@*****.**', get_header(mail, 'To'))
コード例 #14
0
    def test_notifies_only_new_responsible_per_mail(self, browser):
        process_mail_queue()
        Mailing(self.portal).reset()

        self.reassign(browser, self.meeting_user,
                      u'Bitte Abkl\xe4rungen erledigen.')
        process_mail_queue()

        self.assertEqual(1, len(Mailing(self.portal).get_messages()))

        mail = email.message_from_string(Mailing(self.portal).pop())
        self.assertEquals('*****@*****.**', get_header(mail, 'To'))
コード例 #15
0
    def test_record_all_dispatches_in_the_digest_table(self):
        now = datetime(2017, 10, 16, 0, 0, tzinfo=pytz.utc)
        with freeze(now):
            DigestMailer().send_digests()
            process_mail_queue()

        self.assertEquals(
            [now, now],
            [digest.last_dispatch for digest in Digest.query.all()])
        self.assertItemsEqual(
            [self.regular_user.getId(), self.dossier_responsible.getId()],
            [digest.userid for digest in Digest.query.all()])
コード例 #16
0
    def test_notifies_only_new_responsible_per_mail(self, browser):
        process_mail_queue()
        Mailing(self.portal).reset()

        self.reassign(browser, self.meeting_user, u'Bitte Abkl\xe4rungen erledigen.')
        process_mail_queue()

        self.assertEqual(1, len(Mailing(self.portal).get_messages()))

        mail = email.message_from_string(Mailing(self.portal).pop())
        self.assertEquals(
            '*****@*****.**', get_header(mail, 'To'))
コード例 #17
0
ファイル: test_mail.py プロジェクト: 4teamwork/opengever.core
    def test_mail_dispatcher_respects_dispatcher_roles_even_if_its_a_group(self, browser):
        """By default only the responsible should be notified by mail, when
        a task gets added.
        """
        self.login(self.dossier_responsible, browser)
        browser.open(self.dossier, view='++add++opengever.task.task')
        self.create_task_via_browser(browser, inbox=True)
        process_mail_queue()

        self.assertEquals(1, len(Mailing(self.portal).get_messages()))
        mail = email.message_from_string(Mailing(self.portal).pop())
        self.assertEquals('*****@*****.**', get_header(mail, 'To'))
コード例 #18
0
    def test_record_all_dispatches_in_the_digest_table(self):
        now = datetime(2017, 10, 16, 0, 0, tzinfo=pytz.utc)
        with freeze(now):
            DigestMailer().send_digests()
            process_mail_queue()

        self.assertEquals(
            [now, now],
            [digest.last_dispatch for digest in Digest.query.all()])
        self.assertItemsEqual(
            [self.regular_user.getId(),
             self.dossier_responsible.getId()],
            [digest.userid for digest in Digest.query.all()])
コード例 #19
0
ファイル: test_mail.py プロジェクト: 4teamwork/opengever.core
    def test_notification_add_task_summary_is_split_into_lines(self, browser):
        self.login(self.dossier_responsible, browser)
        self.create_task_via_browser(browser, description='Multi\nline\ncomment')
        process_mail_queue()

        mails = Mailing(self.portal).get_messages()
        self.assertEqual(len(mails), 1)
        raw_mail = mails[0]
        mail = raw_mail.decode("quopri")

        self.assertIn('<td>Multi<br />', mail)
        self.assertIn('line<br />', mail)
        self.assertIn('comment</td>', mail)
コード例 #20
0
    def test_notification_add_task_summary_is_split_into_lines(self, browser):
        self.login(self.dossier_responsible, browser)
        self.create_task_via_browser(browser,
                                     description='Multi\nline\ncomment')
        process_mail_queue()

        mails = Mailing(self.portal).get_messages()
        self.assertEqual(len(mails), 1)
        raw_mail = mails[0]
        mail = raw_mail.decode("quopri")

        self.assertIn('<td>Multi<br />', mail)
        self.assertIn('line<br />', mail)
        self.assertIn('comment</td>', mail)
コード例 #21
0
    def test_mail_contains_date_activity_summaries(self, browser):
        with freeze(datetime(2017, 10, 16, 0, 0, tzinfo=pytz.utc)):
            DigestMailer().send_digests()
            process_mail_queue()

        messages = [message_from_string(mail)
                    for mail in Mailing(self.portal).get_messages()]

        messages.sort(key=lambda msg: msg.get('To'))

        browser.open_html(str(messages[0].get_payload()[0]))

        self.assertEquals('Oct 16, 2017', browser.css('table p').text[0])
        self.assertEquals(['Daily Digest for B=C3=A4rfuss K=C3=A4thi'],
                          browser.css('h1').text)
        self.assertEquals(['Bitte =C3=84nderungen nachvollziehen'],
                          browser.css('h2 a').text)
コード例 #22
0
    def test_only_send_digest_when_interval_has_been_expired(self):
        create(Builder('digest')
               .having(userid=self.regular_user.getId(),
                       last_dispatch=datetime(2017, 10, 15, 12, 30, tzinfo=pytz.utc)))

        create(Builder('digest')
               .having(userid=self.dossier_responsible.getId(),
                       last_dispatch=datetime(2017, 10, 16, 9, tzinfo=pytz.utc)))

        with freeze(datetime(2017, 10, 16, 14, 30, tzinfo=pytz.utc)):
            DigestMailer().send_digests()
            process_mail_queue()

            messages = [message_from_string(mail)
                        for mail in Mailing(self.portal).get_messages()]

            self.assertEquals(1, len(messages))
            self.assertEquals('*****@*****.**', messages[0].get('To'))
コード例 #23
0
    def test_mail_contains_date_activity_summaries(self, browser):
        with freeze(datetime(2017, 10, 16, 0, 0, tzinfo=pytz.utc)):
            DigestMailer().send_digests()
            process_mail_queue()

        messages = [
            message_from_string(mail)
            for mail in Mailing(self.portal).get_messages()
        ]

        messages.sort(key=lambda msg: msg.get('To'))

        browser.open_html(str(messages[0].get_payload()[0]))

        self.assertEquals('Oct 16, 2017', browser.css('table p').text[0])
        self.assertEquals(['Daily Digest for B=C3=A4rfuss K=C3=A4thi'],
                          browser.css('h1').text)
        self.assertEquals(['Bitte =C3=84nderungen nachvollziehen'],
                          browser.css('h2 a').text)
コード例 #24
0
ファイル: test_mail.py プロジェクト: 4teamwork/opengever.core
    def test_notification_summary_is_split_into_paragraphs(self, browser):
        self.login(self.dossier_responsible, browser)
        self.create_task_via_browser(browser)
        process_mail_queue()

        # Discard the first mail
        Mailing(self.portal).pop()

        # XXX - did not find a neater way to get the task quickly
        browser.open(Task.query.all()[-1], view='addcommentresponse')
        browser.fill({'Response': 'Multi\n\nline\ncomment'})
        browser.css('#form-buttons-save').first.click()
        process_mail_queue()

        mails = Mailing(self.portal).get_messages()
        self.assertEqual(len(mails), 1)
        raw_mail = mails[0]

        self.assertIn('<p>Multi</p>', raw_mail)
        self.assertIn('<p></p>', raw_mail)
        self.assertIn('<p>line</p>', raw_mail)
        self.assertIn('<p>comment</p>', raw_mail)
コード例 #25
0
    def test_notification_summary_is_split_into_paragraphs(self, browser):
        self.login(self.dossier_responsible, browser)
        self.create_task_via_browser(browser)
        process_mail_queue()

        # Discard the first mail
        Mailing(self.portal).pop()

        # XXX - did not find a neater way to get the task quickly
        browser.open(Task.query.all()[-1], view='addcommentresponse')
        browser.fill({'Response': 'Multi\n\nline\ncomment'})
        browser.css('#form-buttons-save').first.click()
        process_mail_queue()

        mails = Mailing(self.portal).get_messages()
        self.assertEqual(len(mails), 1)
        raw_mail = mails[0]

        self.assertIn('<p>Multi</p>', raw_mail)
        self.assertIn('<p></p>', raw_mail)
        self.assertIn('<p>line</p>', raw_mail)
        self.assertIn('<p>comment</p>', raw_mail)
コード例 #26
0
    def test_send_mail_with_site_email_if_activity_actor_lookup_failed(self):
        self.note1.sent_in_digest = True
        self.note2.sent_in_digest = True

        activity = create(
            Builder('activity')
            .having(title=u'Bitte \xc4nderungen nachvollziehen',
                    created=pytz.UTC.localize(datetime(2017, 10, 15, 18, 24)),
                    resource=self.resource,
                    actor_id="NOT_AN_EXISTING_ACTOR"))

        create(Builder('notification')
               .having(activity=activity,
                       is_digest=True,
                       userid=self.dossier_responsible.getId()))

        DigestMailer().send_digests()
        process_mail_queue()

        messages = [message_from_string(mail)
                    for mail in Mailing(self.portal).get_messages()]

        self.assertEquals(1, len(messages))
        self.assertIn(self.portal.email_from_address, messages[0].get('From'))
コード例 #27
0
ファイル: test_mail.py プロジェクト: 4teamwork/opengever.core
    def test_notification_mailer_handle_empty_activity_description(self, browser):
        self.login(self.dossier_responsible, browser)
        self.create_task_via_browser(browser)
        process_mail_queue()

        # Discard the first mail
        Mailing(self.portal).pop()

        # reassign task
        task = self.dossier.objectValues()[-1]
        data = {'form.widgets.transition': 'task-transition-reassign'}
        browser.open(task, data, view='assign-task')
        responsible = 'fa:{}'.format(self.secretariat_user.getId())
        form = browser.find_form_by_field('Responsible')
        form.find_widget('Responsible').fill(responsible)
        browser.click_on('Assign')
        process_mail_queue()

        mails = Mailing(self.portal).get_messages()
        mails.sort(key=lambda data: email.message_from_string(data).get('To'))

        self.assertEqual(len(mails), 1)
        raw_mail = mails[0]
        self.assertIn('Reassigned from', raw_mail)
コード例 #28
0
    def test_notification_mailer_handle_empty_activity_description(
            self, browser):
        self.login(self.dossier_responsible, browser)
        self.create_task_via_browser(browser)
        process_mail_queue()

        # Discard the first mail
        Mailing(self.portal).pop()

        # reassign task
        task = self.dossier.objectValues()[-1]
        data = {'form.widgets.transition': 'task-transition-reassign'}
        browser.open(task, data, view='assign-task')
        form = browser.find_form_by_field('Responsible')
        form.find_widget('Responsible').fill(self.secretariat_user)
        browser.click_on('Assign')
        process_mail_queue()

        mails = Mailing(self.portal).get_messages()
        mails.sort(key=lambda data: email.message_from_string(data).get('To'))

        self.assertEqual(len(mails), 1)
        raw_mail = mails[0]
        self.assertIn('Reassigned from', raw_mail)
コード例 #29
0
    def test_send_in_digest_flag_is_enabled_after_send(self):
        DigestMailer().send_digests()
        process_mail_queue()

        self.assertTrue(self.note1.sent_in_digest)
        self.assertTrue(self.note2.sent_in_digest)
コード例 #30
0
    def test_send_in_digest_flag_is_enabled_after_send(self):
        DigestMailer().send_digests()
        process_mail_queue()

        self.assertTrue(self.note1.sent_in_digest)
        self.assertTrue(self.note2.sent_in_digest)