def test_notify_users_renders_interfaces_with_utf8_fix_issue_422( self, _send_mail): group = Group() group.first_seen = timezone.now() group.last_seen = group.first_seen group.id = 2 group.project_id = 1 stacktrace = Mock(spec=Stacktrace) stacktrace.to_string.return_value = u'רונית מגן' stacktrace.get_title.return_value = 'Stacktrace' event = Event() event.group = group event.message = 'Soubor ji\xc5\xbe existuje' 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_send_to(self, get_emails_for_users, get_sendable_users, get_value): opts = {} member_emails = ['2', '3'] project_emails = ['2', '4'] get_value.side_effect = lambda p, k, d: opts.get(k, d) get_emails_for_users.side_effect = lambda x: x get_sendable_users.return_value = member_emails project = mock.Mock() project.id = 1 project.pk = project.id p = MailProcessor() # member emails without admins self.assertEqual(sorted(set(member_emails)), sorted(p.get_send_to(project))) # project emails without members opts = { 'mail:send_to': ','.join(project_emails), 'mail:send_to_members': False } self.assertEqual(sorted(set(project_emails)), sorted(p.get_send_to(project)))
def test_notify_users_does_email(self, _send_mail): group = Group( id=2, first_seen=timezone.now(), last_seen=timezone.now(), project=self.project, ) event = Event( group=group, message='hello world', logger='root', project=self.project, datetime=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('fail_silently'), False) self.assertEquals(kwargs.get('project'), self.project) assert kwargs.get('subject') == u"[{0}] ERROR: hello world".format(self.project.name)
def test_get_sendable_users(self): from django.contrib.auth.models import User from sentry.models import Project, UserOption user = User.objects.create(username='******', email='*****@*****.**', is_active=True) user2 = User.objects.create(username='******', email='*****@*****.**', is_active=True) user3 = User.objects.create(username='******', email='*****@*****.**', is_active=False) project = Project.objects.create(name='Test', slug='test', owner=user) project.team.member_set.get_or_create(user=user) project.team.member_set.get_or_create(user=user2) project.team.member_set.get_or_create(user=user3) p = MailProcessor() # all members self.assertEqual(sorted(set([user.pk, user2.pk])), sorted(p.get_sendable_users(project))) # disabled user2 UserOption.objects.create(key='mail:alert', value=0, project=project, user=user2) self.assertEqual(sorted(set([user.pk])), sorted(p.get_sendable_users(project)))
def test_should_notify_excluded(self): p = MailProcessor(min_level=None, exclude_loggers=['root']) group = Mock(spec=Group) group.project = Project() group.level = 5 group.logger = 'root' self.assertFalse(p.should_notify(group=group, event=Mock()))
def test_notify_users_does_email(self, _send_mail): group = Group( id=2, first_seen=timezone.now(), last_seen=timezone.now(), project=self.project, ) event = Event( group=group, message='hello world', logger='root', project=self.project, datetime=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('fail_silently'), False) self.assertEquals(kwargs.get('project'), self.project) self.assertEquals(kwargs.get('subject'), u"[Project Name] ERROR: hello world")
def test_notify_users_does_email(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" 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("fail_silently"), False) self.assertEquals(kwargs.get("project"), project) self.assertEquals(kwargs.get("subject"), u"[Project Name] ERROR: hello world")
def test_notify_users_renders_interfaces_with_utf8(self, _send_mail): group = Group( id=2, first_seen=timezone.now(), last_seen=timezone.now(), project=self.project, ) stacktrace = Mock(spec=Stacktrace) stacktrace.to_string.return_value = u'רונית מגן' stacktrace.get_title.return_value = 'Stacktrace' event = Event() event.group = group 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_notify_users_does_email(self, _send_mail): project = Project(id=1, name='Project Name') group = Group() group.first_seen = timezone.now() group.last_seen = group.first_seen group.project = project group.id = 2 event = Event() event.group = group event.message = 'hello world' 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('fail_silently'), False) self.assertEquals(kwargs.get('project'), project) 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.project = Project() group.logger = 'root' event = Mock() event.data = {} self.assertTrue (p.should_notify(group=group, event=event))
def test_get_emails_for_users(self): from django.contrib.auth.models import User from sentry.models import UserOption user = User.objects.create(username='******', email='*****@*****.**') user2 = User.objects.create(username='******', email='*****@*****.**') p = MailProcessor() self.assertEquals(sorted(p.get_emails_for_users([user.pk, user2.pk])), sorted([user.email, user2.email])) UserOption.objects.create(key='alert_email', value='*****@*****.**', user=user2) self.assertEquals(sorted(p.get_emails_for_users([user.pk, user2.pk])), sorted([user.email, '*****@*****.**']))
def test_get_sendable_users(self): from django.contrib.auth.models import User from sentry.models import Project, UserOption user = User.objects.create(username='******', email='*****@*****.**') user2 = User.objects.create(username='******', email='*****@*****.**') project = Project.objects.create(name='Test', slug='test', owner=user) project.team.member_set.get_or_create(user=user) project.team.member_set.get_or_create(user=user2) p = MailProcessor() # all members self.assertEqual(sorted(set([user.pk, user2.pk])), sorted(p.get_sendable_users(project))) # disabled user2 UserOption.objects.create(key='mail:alert', value=0, project=project, user=user2) self.assertEqual(sorted(set([user.pk])), sorted(p.get_sendable_users(project)))
def test_get_sendable_users(self): from django.contrib.auth.models import User from sentry.models import Project, UserOption user = User.objects.create(username="******", email="*****@*****.**", is_active=True) user2 = User.objects.create(username="******", email="*****@*****.**", is_active=True) user3 = User.objects.create(username="******", email="*****@*****.**", is_active=False) project = Project.objects.create(name="Test", slug="test", owner=user) project.team.member_set.get_or_create(user=user) project.team.member_set.get_or_create(user=user2) project.team.member_set.get_or_create(user=user3) p = MailProcessor() # all members self.assertEqual(sorted(set([user.pk, user2.pk])), sorted(p.get_sendable_users(project))) # disabled user2 UserOption.objects.create(key="mail:alert", value=0, project=project, user=user2) self.assertEqual(sorted(set([user.pk])), sorted(p.get_sendable_users(project)))
def test_send_to(self, get_emails_for_users, get_sendable_users, get_value): opts = {} admins = ["1"] member_emails = ["2", "3"] project_emails = ["2", "4"] get_value.side_effect = lambda p, k, d: opts.get(k, d) get_emails_for_users.side_effect = lambda x: x get_sendable_users.return_value = member_emails project = mock.Mock() project.id = 1 project.pk = project.id with self.Settings(SENTRY_ADMINS=admins): p = MailProcessor() # member emails without admins self.assertEqual(sorted(set(member_emails)), sorted(p.get_send_to(project))) # member emails with members opts = {"mail:send_to_admins": True} self.assertEqual(sorted(set(member_emails + admins)), sorted(p.get_send_to(project))) # project emails without members opts = {"mail:send_to": ",".join(project_emails), "mail:send_to_members": False} self.assertEqual(sorted(set(project_emails)), sorted(p.get_send_to(project))) # project emails with members opts = { "mail:send_to": ",".join(project_emails), "mail:send_to_members": False, "mail:send_to_admins": True, } self.assertEqual(sorted(set(project_emails + admins)), sorted(p.get_send_to(project))) # project emails with members and admins opts = {"mail:send_to": ",".join(project_emails), "mail:send_to_members": True, "mail:send_to_admins": True} self.assertEqual(sorted(set(project_emails + admins + member_emails)), sorted(p.get_send_to(project)))
def test_multiline_error(self, _send_mail): group = Group( id=2, first_seen=timezone.now(), last_seen=timezone.now(), project=self.project, ) event = Event( group=group, message='hello world\nfoo bar', logger='root', project=self.project, datetime=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 assert kwargs.get('subject') == u"[{0}] ERROR: hello world".format(self.project.name)
def test_notify_users_renders_interfaces_with_utf8_fix_issue_422(self, _send_mail): group = Group() group.first_seen = timezone.now() group.last_seen = group.first_seen group.id = 2 group.project_id = 1 stacktrace = Mock(spec=Stacktrace) stacktrace.to_string.return_value = u'רונית מגן' stacktrace.get_title.return_value = 'Stacktrace' event = Event() event.group = group event.message = 'Soubor ji\xc5\xbe existuje' 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_send_to(self, get_emails_for_users, get_sendable_users, get_value): opts = {} member_emails = ['2', '3'] project_emails = ['2', '4'] get_value.side_effect = lambda p, k, d: opts.get(k, d) get_emails_for_users.side_effect = lambda x: x get_sendable_users.return_value = member_emails project = mock.Mock() project.id = 1 project.pk = project.id p = MailProcessor() # member emails without admins self.assertEqual(sorted(set(member_emails)), sorted(p.get_send_to(project))) # project emails without members opts = {'mail:send_to': ','.join(project_emails), 'mail:send_to_members': False} self.assertEqual(sorted(set(project_emails)), sorted(p.get_send_to(project)))
def test_notify_users_renders_interfaces_with_utf8(self, _send_mail): group = Group() group.first_seen = datetime.datetime.now() group.last_seen = group.first_seen group.id = 2 group.project_id = 1 stacktrace = Mock(spec=Stacktrace) stacktrace.to_string.return_value = u"רונית מגן" stacktrace.get_title.return_value = "Stacktrace" event = Event() event.group = group 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_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.team.member_set = Mock() project.team.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_notify_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_notify(group=group, event=Mock()))
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 plugin(self): return MailProcessor()