blob: b60130f36117a7c801172d10d0e3a8388cc5f30e [file] [log] [blame]
# Copyright 2016 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Tests for prepareandsend.py"""
from __future__ import print_function
from __future__ import division
from __future__ import absolute_import
import mock
import unittest
from six.moves.urllib.parse import parse_qs
from features import send_notifications
from framework import urls
from tracker import tracker_bizobj
class SendNotificationTest(unittest.TestCase):
def _get_filtered_task_call_args(self, create_task_mock, relative_uri):
return [
(args, _kwargs)
for (args, _kwargs) in create_task_mock.call_args_list
if args[0]['app_engine_http_request']['relative_uri'].startswith(
relative_uri)
]
def _get_create_task_path_and_params(self, call):
(args, _kwargs) = call
path = args[0]['app_engine_http_request']['relative_uri']
encoded_params = args[0]['app_engine_http_request']['body']
params = {k: v[0] for k, v in parse_qs(encoded_params, True).items()}
return path, params
@mock.patch('framework.cloud_tasks_helpers.create_task')
def testPrepareAndSendIssueChangeNotification(self, create_task_mock):
send_notifications.PrepareAndSendIssueChangeNotification(
issue_id=78901,
hostport='testbed-test.appspotmail.com',
commenter_id=1,
old_owner_id=2,
send_email=True)
call_args_list = self._get_filtered_task_call_args(
create_task_mock, urls.NOTIFY_ISSUE_CHANGE_TASK + '.do')
self.assertEqual(1, len(call_args_list))
@mock.patch('framework.cloud_tasks_helpers.create_task')
def testPrepareAndSendIssueBlockingNotification(self, create_task_mock):
send_notifications.PrepareAndSendIssueBlockingNotification(
issue_id=78901,
hostport='testbed-test.appspotmail.com',
delta_blocker_iids=[],
commenter_id=1,
send_email=True)
call_args_list = self._get_filtered_task_call_args(
create_task_mock, urls.NOTIFY_BLOCKING_CHANGE_TASK + '.do')
self.assertEqual(0, len(call_args_list))
send_notifications.PrepareAndSendIssueBlockingNotification(
issue_id=78901,
hostport='testbed-test.appspotmail.com',
delta_blocker_iids=[2],
commenter_id=1,
send_email=True)
call_args_list = self._get_filtered_task_call_args(
create_task_mock, urls.NOTIFY_BLOCKING_CHANGE_TASK + '.do')
self.assertEqual(1, len(call_args_list))
@mock.patch('framework.cloud_tasks_helpers.create_task')
def testPrepareAndSendApprovalChangeNotification(self, create_task_mock):
send_notifications.PrepareAndSendApprovalChangeNotification(
78901, 3, 'testbed-test.appspotmail.com', 55)
call_args_list = self._get_filtered_task_call_args(
create_task_mock, urls.NOTIFY_APPROVAL_CHANGE_TASK + '.do')
self.assertEqual(1, len(call_args_list))
@mock.patch('framework.cloud_tasks_helpers.create_task')
def testSendIssueBulkChangeNotification_CommentOnly(self, create_task_mock):
send_notifications.SendIssueBulkChangeNotification(
issue_ids=[78901],
hostport='testbed-test.appspotmail.com',
old_owner_ids=[2],
comment_text='comment',
commenter_id=1,
amendments=[],
send_email=True,
users_by_id=2)
call_args_list = self._get_filtered_task_call_args(
create_task_mock, urls.NOTIFY_BULK_CHANGE_TASK + '.do')
self.assertEqual(1, len(call_args_list))
_path, params = self._get_create_task_path_and_params(call_args_list[0])
self.assertEqual(params[b'comment_text'], b'comment')
self.assertEqual(params[b'amendments'], b'')
@mock.patch('framework.cloud_tasks_helpers.create_task')
def testSendIssueBulkChangeNotification_Normal(self, create_task_mock):
send_notifications.SendIssueBulkChangeNotification(
issue_ids=[78901],
hostport='testbed-test.appspotmail.com',
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)
call_args_list = self._get_filtered_task_call_args(
create_task_mock, urls.NOTIFY_BULK_CHANGE_TASK + '.do')
self.assertEqual(1, len(call_args_list))
_path, params = self._get_create_task_path_and_params(call_args_list[0])
self.assertEqual(params[b'comment_text'], b'comment')
self.assertEqual(
params[b'amendments'].split(b'\n'),
[b' Status: New', b' Labels: -Removed Added'])
@mock.patch('framework.cloud_tasks_helpers.create_task')
def testPrepareAndSendDeletedFilterRulesNotifications(self, create_task_mock):
filter_rule_strs = ['if yellow make orange', 'if orange make blue']
send_notifications.PrepareAndSendDeletedFilterRulesNotification(
789, 'testbed-test.appspotmail.com', filter_rule_strs)
call_args_list = self._get_filtered_task_call_args(
create_task_mock, urls.NOTIFY_RULES_DELETED_TASK + '.do')
self.assertEqual(1, len(call_args_list))
_path, params = self._get_create_task_path_and_params(call_args_list[0])
self.assertEqual(params[b'project_id'], b'789')
self.assertEqual(
params[b'filter_rules'], b'if yellow make orange,if orange make blue')