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'))
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'))
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'))
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'))
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'))
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())
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())
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])
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'))
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'))
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'))
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])
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'))
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'))
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()])
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'))
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'))
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()])
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)
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)
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)
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'))
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)
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)
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)
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'))
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)
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)
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)
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)