def test_notify_users_does_email(self, _send_mail): project = Project(id=1, name='Project Name') group = Mock(spec=Group) group.first_seen = datetime.datetime.now() group.project_id = project.id group.project = project group.id = 2 event = Event() event.message = 'hello world' event.logger = 'root' event.site = None event.project_id = project.id event.project = project with self.Settings(SENTRY_URL_PREFIX='http://example.com'): p = MailProcessor(send_to=['*****@*****.**']) p.notify_users(group, event) _send_mail.assert_called_once() args, kwargs = _send_mail.call_args self.assertEquals(kwargs.get('fail_silently'), False) self.assertEquals(kwargs.get('project'), project) self.assertEquals(kwargs.get('subject'), u"[Project Name] ERROR: hello world")
def test_should_mail(self): Mock = mock.Mock with mock.patch("sentry.models.ProjectOption.objects.get_value") as get_value: get_value.side_effect = lambda p, k, d: d # no admins p = MailProcessor(send_to=()) self.assertFalse(p.should_mail(group=Mock(), event=Mock())) # not min level p = MailProcessor(send_to=["*****@*****.**"], min_level=2) group = Mock() group.level = 1 self.assertFalse(p.should_mail(group=group, event=Mock())) # not in inclusion p = MailProcessor(send_to=["*****@*****.**"], min_level=None, include_loggers=["foo"]) group = Mock() group.level = 5 group.logger = "root" self.assertFalse(p.should_mail(group=group, event=Mock())) # in exclusion p = MailProcessor(send_to=["*****@*****.**"], min_level=None, exclude_loggers=["root"]) group = Mock() group.level = 5 group.logger = "root" self.assertFalse(p.should_mail(group=group, event=Mock())) # in exclusion p = MailProcessor(send_to=["*****@*****.**"], min_level=None) group = Mock() group.level = 5 group.logger = "root" self.assertTrue(p.should_mail(group=group, event=Mock()))
def test_mail_members_renders_interfaces(self, _send_mail): group = Mock(spec=Group) group.first_seen = datetime.datetime.now() group.get_absolute_url.return_value = '/example' stacktrace = Mock(spec=Stacktrace) stacktrace.to_string.return_value = 'foo bar' stacktrace.get_title.return_value = 'Stacktrace' event = Event() event.message = 'hello world' event.logger = 'root' event.site = None event.interfaces = {'sentry.interfaces.Stacktrace': stacktrace} with self.Settings(SENTRY_URL_PREFIX='http://example.com'): p = MailProcessor(send_to=['*****@*****.**']) p.mail_members(group, event) stacktrace.get_title.assert_called_once_with() stacktrace.to_string.assert_called_once_with(event)
def test_notify_users_renders_interfaces_with_utf8(self, _send_mail): group = Mock(spec=Group) group.first_seen = datetime.datetime.now() group.project_id = 1 group.id = 2 stacktrace = Mock(spec=Stacktrace) stacktrace.to_string.return_value = u'רונית מגן' stacktrace.get_title.return_value = 'Stacktrace' event = Event() event.message = 'hello world' event.logger = 'root' event.site = None event.interfaces = {'sentry.interfaces.Stacktrace': stacktrace} with self.Settings(SENTRY_URL_PREFIX='http://example.com'): p = MailProcessor(send_to=['*****@*****.**']) p.notify_users(group, event) stacktrace.get_title.assert_called_once_with() stacktrace.to_string.assert_called_once_with(event)
def test_multiline_error(self, _send_mail): project = Project(id=1, name='Project Name') group = Group() group.first_seen = datetime.datetime.now() group.last_seen = group.first_seen group.project = project group.id = 2 event = Event() event.group = group event.message = 'hello world\nfoo bar' event.logger = 'root' event.project = project event.date = group.last_seen with self.Settings(SENTRY_URL_PREFIX='http://example.com'): p = MailProcessor(send_to=['*****@*****.**']) p.notify_users(group, event) _send_mail.assert_called_once() args, kwargs = _send_mail.call_args self.assertEquals(kwargs.get('subject'), u"[Project Name] ERROR: hello world")
def test_should_notify_match(self): p = MailProcessor(min_level=None) group = Mock(spec=Group) group.level = 5 group.logger = 'root' self.assertTrue(p.should_notify(group=group, event=Mock()))
def test_should_notify_excluded(self): p = MailProcessor(min_level=None, exclude_loggers=['root']) group = Mock(spec=Group) group.level = 5 group.logger = 'root' self.assertFalse(p.should_notify(group=group, event=Mock()))
def test_should_notify_not_min_level(self): p = MailProcessor(min_level=2) group = Mock(spec=Group) group.level = 1 self.assertFalse(p.should_notify(group=group, event=Mock()))
def test_should_notify_no_send_to(self): p = MailProcessor() self.assertFalse(p.should_notify(group=Mock(), event=Mock()))
def test_send_to(self): Mock = mock.Mock with mock.patch('sentry.models.ProjectOption.objects.get_value') as get_value: opts = {} get_value.side_effect = lambda p, k, d: opts.get(k, d) admins = ['*****@*****.**'] member_emails = ['*****@*****.**', '*****@*****.**'] project_emails = ['*****@*****.**', '*****@*****.**'] project = Mock() project.member_set = Mock() project.member_set.values_list.return_value = member_emails with self.Settings(SENTRY_ADMINS=admins): # member emails without admins p = MailProcessor() self.assertEqual(sorted(set(member_emails)), sorted(p.get_send_to(project))) # member emails with members p = MailProcessor() opts = {'mail:send_to_admins': True} p._send_mail('', '', project=project) self.assertEqual(sorted(set(member_emails + admins)), sorted(p.get_send_to(project))) # project emails without members p = MailProcessor() opts = {'mail:send_to': ','.join(project_emails), 'mail:send_to_members': False} p._send_mail('', '', project=project) self.assertEqual(sorted(set(project_emails)), sorted(p.get_send_to(project))) # project emails with members p = MailProcessor() opts = {'mail:send_to': ','.join(project_emails), 'mail:send_to_members': False, 'mail:send_to_admins': True} p._send_mail('', '', project=project) self.assertEqual(sorted(set(project_emails + admins)), sorted(p.get_send_to(project))) # project emails with members and admins p = MailProcessor() opts = {'mail:send_to': ','.join(project_emails), 'mail:send_to_members': True, 'mail:send_to_admins': True} p._send_mail('', '', project=project) self.assertEqual(sorted(set(project_emails + admins + member_emails)), sorted(p.get_send_to(project)))
def test_should_mail_not_included(self): p = MailProcessor(min_level=None, include_loggers=['foo']) group = Mock(spec=Group) group.level = 5 group.logger = 'root' self.assertFalse(p.should_mail(group=group, event=Mock()))