blob: 921253ac7a20592946520cb67e0828ce642bb877 [file] [log] [blame]
# Copyright 2015 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.
import json
import mock
import unittest
from apiclient import errors
from dashboard import issue_tracker_service
from dashboard import testing_common
@mock.patch('issue_tracker_service.discovery.build', mock.MagicMock())
class IssueTrackerServiceTest(testing_common.TestCase):
def testAddBugComment_Basic(self):
service = issue_tracker_service.IssueTrackerService(mock.MagicMock())
service._MakeCommentRequest = mock.Mock()
self.assertTrue(service.AddBugComment(12345, 'The comment'))
self.assertEqual(1, service._MakeCommentRequest.call_count)
service._MakeCommentRequest.assert_called_with(
12345, {'updates': {}, 'content': 'The comment'}, send_email=True)
def testAddBugComment_WithNoBug_ReturnsFalse(self):
service = issue_tracker_service.IssueTrackerService(mock.MagicMock())
service._MakeCommentRequest = mock.Mock()
self.assertFalse(service.AddBugComment(None, 'Some comment'))
self.assertFalse(service.AddBugComment(-1, 'Some comment'))
def testAddBugComment_WithOptionalParameters(self):
service = issue_tracker_service.IssueTrackerService(mock.MagicMock())
service._MakeCommentRequest = mock.Mock()
self.assertTrue(service.AddBugComment(
12345, 'Some other comment', status='Fixed',
labels=['Foo'], cc_list=['someone@chromium.org']))
self.assertEqual(1, service._MakeCommentRequest.call_count)
service._MakeCommentRequest.assert_called_with(
12345,
{
'updates': {
'status': 'Fixed',
'cc': ['someone@chromium.org'],
'labels': ['Foo'],
},
'content': 'Some other comment'
},
send_email=True)
def testAddBugComment_MergeBug(self):
service = issue_tracker_service.IssueTrackerService(mock.MagicMock())
service._MakeCommentRequest = mock.Mock()
self.assertTrue(service.AddBugComment(12345, 'Dupe', merge_issue=54321))
self.assertEqual(1, service._MakeCommentRequest.call_count)
service._MakeCommentRequest.assert_called_with(
12345,
{
'updates': {
'status': 'Duplicate',
'mergedInto': 54321,
},
'content': 'Dupe'
},
send_email=True)
@mock.patch('logging.error')
def testAddBugComment_Error(self, mock_logging_error):
service = issue_tracker_service.IssueTrackerService(mock.MagicMock())
service._ExecuteRequest = mock.Mock(return_value=None)
self.assertFalse(service.AddBugComment(12345, 'My bug comment'))
self.assertEqual(1, service._ExecuteRequest.call_count)
self.assertEqual(1, mock_logging_error.call_count)
def testNewBug_Success_NewBugReturnsId(self):
service = issue_tracker_service.IssueTrackerService(mock.MagicMock())
service._ExecuteRequest = mock.Mock(return_value={'id': 333})
bug_id = service.NewBug('Bug title', 'body', owner='someone@chromium.org')
self.assertEqual(1, service._ExecuteRequest.call_count)
self.assertEqual(333, bug_id)
def testNewBug_Failure_NewBugReturnsNone(self):
service = issue_tracker_service.IssueTrackerService(mock.MagicMock())
service._ExecuteRequest = mock.Mock(return_value={})
bug_id = service.NewBug('Bug title', 'body', owner='someone@chromium.org')
self.assertEqual(1, service._ExecuteRequest.call_count)
self.assertIsNone(bug_id)
def testNewBug_UsesExpectedParams(self):
service = issue_tracker_service.IssueTrackerService(mock.MagicMock())
service._MakeCreateRequest = mock.Mock()
service.NewBug('Bug title', 'body', owner='someone@chromium.org')
service._MakeCreateRequest.assert_called_with(
{
'title': 'Bug title',
'summary': 'Bug title',
'description': 'body',
'labels': [],
'components': [],
'status': 'Assigned',
'owner': {'name': 'someone@chromium.org'},
})
def testMakeCommentRequest_UserDoesNotExist_RetryMakeCommentRequest(self):
service = issue_tracker_service.IssueTrackerService(mock.MagicMock())
error_content = {
'error': {'message': 'The user does not exist: test@chromium.org',
'code': 404}
}
service._ExecuteRequest = mock.Mock(side_effect=errors.HttpError(
mock.Mock(return_value={'status': 404}), json.dumps(error_content)))
service.AddBugComment(12345, 'The comment', cc_list='test@chromium.org',
owner=['test@chromium.org'])
self.assertEqual(2, service._ExecuteRequest.call_count)
def testMakeCommentRequest_IssueDeleted_ReturnsTrue(self):
service = issue_tracker_service.IssueTrackerService(mock.MagicMock())
error_content = {
'error': {'message': 'User is not allowed to view this issue 12345',
'code': 403}
}
service._ExecuteRequest = mock.Mock(side_effect=errors.HttpError(
mock.Mock(return_value={'status': 403}), json.dumps(error_content)))
comment_posted = service.AddBugComment(12345, 'The comment',
owner='test@chromium.org')
self.assertEqual(1, service._ExecuteRequest.call_count)
self.assertEqual(True, comment_posted)
if __name__ == '__main__':
unittest.main()