blob: b15fb236b7ebbbed78b8d1ad9df40d113a353bab [file] [log] [blame]
# Copyright 2016 The Chromium Authors. All rights reserved.
# Use of this source code is governed 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 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['comment_text'], 'comment')
self.assertEqual(params['amendments'], '')
@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['comment_text'], 'comment')
self.assertEqual(
params['amendments'].split('\n'),
[' Status: New', ' 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['project_id'], '789')
self.assertEqual(
params['filter_rules'], 'if yellow make orange,if orange make blue')