| Index: appengine/monorail/features/test/notify_test.py
|
| diff --git a/appengine/monorail/features/test/notify_test.py b/appengine/monorail/features/test/notify_test.py
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..f6a0a1a2a89070fc80e4232ca51f0db5d628ce2b
|
| --- /dev/null
|
| +++ b/appengine/monorail/features/test/notify_test.py
|
| @@ -0,0 +1,291 @@
|
| +# Copyright 2016 The Chromium Authors. All rights reserved.
|
| +# Use of this source code is govered by a BSD-style
|
| +# license that can be found in the LICENSE file or at
|
| +# https://developers.google.com/open-source/licenses/bsd
|
| +
|
| +"""Tests for notify.py."""
|
| +
|
| +import os
|
| +import unittest
|
| +import urllib
|
| +import webapp2
|
| +import webtest
|
| +
|
| +from google.appengine.api import taskqueue
|
| +from google.appengine.ext import testbed
|
| +
|
| +from features import notify
|
| +from framework import urls
|
| +from proto import tracker_pb2
|
| +from services import service_manager
|
| +from testing import fake
|
| +from testing import testing_helpers
|
| +from tracker import tracker_bizobj
|
| +
|
| +
|
| +def MakeTestIssue(project_id, local_id, owner_id, reporter_id, is_spam=False):
|
| + issue = tracker_pb2.Issue()
|
| + issue.project_id = project_id
|
| + issue.local_id = local_id
|
| + issue.owner_id = owner_id
|
| + issue.reporter_id = reporter_id
|
| + issue.is_spam = is_spam
|
| + return issue
|
| +
|
| +
|
| +class SendNotificationTest(unittest.TestCase):
|
| +
|
| + def setUp(self):
|
| + self.testbed = testbed.Testbed()
|
| + self.testbed.activate()
|
| + self.testbed.init_taskqueue_stub()
|
| + self.taskqueue_stub = self.testbed.get_stub(testbed.TASKQUEUE_SERVICE_NAME)
|
| + self.taskqueue_stub._root_path = os.path.dirname(
|
| + os.path.dirname(os.path.dirname( __file__ )))
|
| +
|
| + def tearDown(self):
|
| + self.testbed.deactivate()
|
| +
|
| + def testPrepareAndSendIssueChangeNotification(self):
|
| + notify.PrepareAndSendIssueChangeNotification(
|
| + project_id=789,
|
| + local_id=1,
|
| + hostport='testbed-test.appspotmail.com',
|
| + commenter_id=1,
|
| + seq_num=0,
|
| + old_owner_id=2,
|
| + send_email=True)
|
| +
|
| + tasks = self.taskqueue_stub.get_filtered_tasks(
|
| + url=urls.NOTIFY_ISSUE_CHANGE_TASK + '.do')
|
| + self.assertEqual(1, len(tasks))
|
| +
|
| + def testPrepareAndSendIssueBlockingNotification(self):
|
| + notify.PrepareAndSendIssueBlockingNotification(
|
| + project_id=789,
|
| + hostport='testbed-test.appspotmail.com',
|
| + local_id=1,
|
| + delta_blocker_iids=[],
|
| + commenter_id=1,
|
| + send_email=True)
|
| +
|
| + tasks = self.taskqueue_stub.get_filtered_tasks(
|
| + url=urls.NOTIFY_BLOCKING_CHANGE_TASK + '.do')
|
| + self.assertEqual(0, len(tasks))
|
| +
|
| + notify.PrepareAndSendIssueBlockingNotification(
|
| + project_id=789,
|
| + hostport='testbed-test.appspotmail.com',
|
| + local_id=1,
|
| + delta_blocker_iids=[2],
|
| + commenter_id=1,
|
| + send_email=True)
|
| +
|
| + tasks = self.taskqueue_stub.get_filtered_tasks(
|
| + url=urls.NOTIFY_BLOCKING_CHANGE_TASK + '.do')
|
| + self.assertEqual(1, len(tasks))
|
| +
|
| + def testSendIssueBulkChangeNotification_CommentOnly(self):
|
| + notify.SendIssueBulkChangeNotification(
|
| + hostport='testbed-test.appspotmail.com',
|
| + project_id=789,
|
| + local_ids=[1],
|
| + old_owner_ids=[2],
|
| + comment_text='comment',
|
| + commenter_id=1,
|
| + amendments=[],
|
| + send_email=True,
|
| + users_by_id=2)
|
| +
|
| + tasks = self.taskqueue_stub.get_filtered_tasks(
|
| + url=urls.NOTIFY_BULK_CHANGE_TASK + '.do')
|
| + self.assertEqual(1, len(tasks))
|
| + params = dict(urllib.unquote_plus(item).split('=')
|
| + for item in tasks[0].payload.split('&'))
|
| + self.assertEqual('comment', params['comment_text'])
|
| + self.assertEqual('', params['amendments'])
|
| +
|
| + def testSendIssueBulkChangeNotification_Normal(self):
|
| + notify.SendIssueBulkChangeNotification(
|
| + hostport='testbed-test.appspotmail.com',
|
| + project_id=789,
|
| + local_ids=[1],
|
| + old_owner_ids=[2],
|
| + comment_text='comment',
|
| + commenter_id=1,
|
| + amendments=[
|
| + tracker_bizobj.MakeStatusAmendment('New', 'Old'),
|
| + tracker_bizobj.MakeLabelsAmendment(['Added'], ['Removed']),
|
| + tracker_bizobj.MakeStatusAmendment('New', 'Old'),
|
| + ],
|
| + send_email=True,
|
| + users_by_id=2)
|
| +
|
| + tasks = self.taskqueue_stub.get_filtered_tasks(
|
| + url=urls.NOTIFY_BULK_CHANGE_TASK + '.do')
|
| + self.assertEqual(1, len(tasks))
|
| + params = dict(urllib.unquote_plus(item).split('=')
|
| + for item in tasks[0].payload.split('&'))
|
| + self.assertEqual('comment', params['comment_text'])
|
| + self.assertEqual(
|
| + [' Status: New',
|
| + ' Labels: -Removed Added'],
|
| + params['amendments'].split('\n'))
|
| +
|
| + def testAddAllEmailTasks(self):
|
| + notify.AddAllEmailTasks(
|
| + tasks=[{'to': 'user'}, {'to': 'user2'}])
|
| +
|
| + tasks = self.taskqueue_stub.get_filtered_tasks(
|
| + url=urls.OUTBOUND_EMAIL_TASK + '.do')
|
| + self.assertEqual(2, len(tasks))
|
| +
|
| +
|
| +class NotifyTaskHandleRequestTest(unittest.TestCase):
|
| +
|
| + def setUp(self):
|
| + self.testbed = testbed.Testbed()
|
| + self.testbed.activate()
|
| + self.testbed.init_taskqueue_stub()
|
| + self.taskqueue_stub = self.testbed.get_stub(testbed.TASKQUEUE_SERVICE_NAME)
|
| + self.taskqueue_stub._root_path = os.path.dirname(
|
| + os.path.dirname(os.path.dirname( __file__ )))
|
| + self.services = service_manager.Services(
|
| + user=fake.UserService(),
|
| + usergroup=fake.UserGroupService(),
|
| + project=fake.ProjectService(),
|
| + config=fake.ConfigService(),
|
| + issue=fake.IssueService(),
|
| + issue_star=fake.IssueStarService(),
|
| + features=fake.FeaturesService())
|
| + self.services.user.TestAddUser('requester@example.com', 1)
|
| + self.services.user.TestAddUser('user@example.com', 2)
|
| + self.services.project.TestAddProject(
|
| + 'test-project', owner_ids=[1],
|
| + project_id=12345)
|
| + issue1 = MakeTestIssue(
|
| + project_id=12345, local_id=1, owner_id=2, reporter_id=1)
|
| + self.services.issue.TestAddIssue(issue1)
|
| +
|
| + def VerifyParams(self, result, params):
|
| + self.assertEqual(
|
| + bool(params['send_email']), result['params']['send_email'])
|
| + if 'id' in params:
|
| + self.assertEqual(params['id'], result['params']['local_id'])
|
| + if 'ids' in params:
|
| + self.assertEqual([int(p) for p in params['ids'].split(',')],
|
| + result['params']['local_ids'])
|
| + self.assertEqual(params['project_id'], result['params']['project_id'])
|
| +
|
| + def testNotifyIssueChangeTask(self):
|
| + task = notify.NotifyIssueChangeTask(
|
| + request=None, response=None, services=self.services)
|
| + params = {'send_email': 1, 'project_id': 12345, 'id': 1, 'seq': 0,
|
| + 'commenter_id': 2}
|
| + mr = testing_helpers.MakeMonorailRequest(
|
| + user_info={'user_id': 1},
|
| + params=params,
|
| + method='POST',
|
| + services=self.services)
|
| + result = task.HandleRequest(mr)
|
| + self.VerifyParams(result, params)
|
| +
|
| + def testNotifyIssueChangeTask_spam(self):
|
| + issue = MakeTestIssue(
|
| + project_id=12345, local_id=1, owner_id=1, reporter_id=1,
|
| + is_spam=True)
|
| + self.services.issue.TestAddIssue(issue)
|
| + task = notify.NotifyIssueChangeTask(
|
| + request=None, response=None, services=self.services)
|
| + params = {'send_email': 0, 'project_id': 12345, 'id': 1, 'seq': 0,
|
| + 'commenter_id': 2}
|
| + mr = testing_helpers.MakeMonorailRequest(
|
| + user_info={'user_id': 1},
|
| + params=params,
|
| + method='POST',
|
| + services=self.services)
|
| + result = task.HandleRequest(mr)
|
| + self.assertEquals(0, len(result['notified']))
|
| +
|
| + def testNotifyBlockingChangeTask(self):
|
| + issue2 = MakeTestIssue(
|
| + project_id=12345, local_id=2, owner_id=2, reporter_id=1)
|
| + self.services.issue.TestAddIssue(issue2)
|
| + task = notify.NotifyBlockingChangeTask(
|
| + request=None, response=None, services=self.services)
|
| + params = {'send_email': 1, 'project_id': 12345, 'id': 1, 'seq': 0,
|
| + 'delta_blocker_iids': 2, 'commenter_id': 1}
|
| + mr = testing_helpers.MakeMonorailRequest(
|
| + user_info={'user_id': 1},
|
| + params=params,
|
| + method='POST',
|
| + services=self.services)
|
| + result = task.HandleRequest(mr)
|
| + self.VerifyParams(result, params)
|
| +
|
| + def testNotifyBlockingChangeTask_spam(self):
|
| + issue2 = MakeTestIssue(
|
| + project_id=12345, local_id=2, owner_id=2, reporter_id=1,
|
| + is_spam=True)
|
| + self.services.issue.TestAddIssue(issue2)
|
| + task = notify.NotifyBlockingChangeTask(
|
| + request=None, response=None, services=self.services)
|
| + params = {'send_email': 1, 'project_id': 12345, 'id': 1, 'seq': 0,
|
| + 'delta_blocker_iids': 2, 'commenter_id': 1}
|
| + mr = testing_helpers.MakeMonorailRequest(
|
| + user_info={'user_id': 1},
|
| + params=params,
|
| + method='POST',
|
| + services=self.services)
|
| + result = task.HandleRequest(mr)
|
| + self.assertEquals(0, len(result['notified']))
|
| +
|
| + def testNotifyBulkChangeTask(self):
|
| + issue2 = MakeTestIssue(
|
| + project_id=12345, local_id=2, owner_id=2, reporter_id=1)
|
| + self.services.issue.TestAddIssue(issue2)
|
| + task = notify.NotifyBulkChangeTask(
|
| + request=None, response=None, services=self.services)
|
| + params = {'send_email': 1, 'project_id': 12345, 'ids': '1,2', 'seq': 0,
|
| + 'old_owner_ids': '1,1', 'commenter_id': 1}
|
| + mr = testing_helpers.MakeMonorailRequest(
|
| + user_info={'user_id': 1},
|
| + params=params,
|
| + method='POST',
|
| + services=self.services)
|
| + result = task.HandleRequest(mr)
|
| + self.VerifyParams(result, params)
|
| +
|
| + def testNotifyBulkChangeTask_spam(self):
|
| + issue2 = MakeTestIssue(
|
| + project_id=12345, local_id=2, owner_id=2, reporter_id=1,
|
| + is_spam=True)
|
| + self.services.issue.TestAddIssue(issue2)
|
| + task = notify.NotifyBulkChangeTask(
|
| + request=None, response=None, services=self.services)
|
| + params = {'send_email': 1, 'project_id': 12345, 'ids': '1,2', 'seq': 0,
|
| + 'old_owner_ids': '1,1', 'commenter_id': 1}
|
| + mr = testing_helpers.MakeMonorailRequest(
|
| + user_info={'user_id': 1},
|
| + params=params,
|
| + method='POST',
|
| + services=self.services)
|
| + result = task.HandleRequest(mr)
|
| + self.assertEquals(1, len(result['notified']))
|
| +
|
| + def testOutboundEmailTask(self):
|
| + task = notify.OutboundEmailTask(
|
| + request=None, response=None, services=self.services)
|
| + params = {
|
| + 'from_addr': 'requester@example.com',
|
| + 'reply_to': 'user@example.com',
|
| + 'to': 'user@example.com',
|
| + 'subject': 'Test subject'}
|
| + mr = testing_helpers.MakeMonorailRequest(
|
| + user_info={'user_id': 1},
|
| + params=params,
|
| + method='POST',
|
| + services=self.services)
|
| + result = task.HandleRequest(mr)
|
| + self.assertEqual(params['from_addr'], result['sender'])
|
| + self.assertEqual(params['subject'], result['subject'])
|
|
|