def test_get_issue(self): api = issue_tracker.IssueTrackerAPI('my-project') get_method = self.client.issues.return_value.get get_method.return_value.execute.return_value = {'id': '123'} issue = api.getIssue('123') self.assertEquals(issue.id, '123') self.assertEquals(get_method.call_count, 1) self.assertEquals(get_method.call_args[1]['projectId'], 'my-project') self.assertEquals(get_method.call_args[1]['issueId'], '123')
def test_get_comments(self): api = issue_tracker.IssueTrackerAPI('my-project') list_method = self.client.issues.return_value.comments.return_value.list list_method.return_value.execute.side_effect = [ { 'totalResults': '2', 'items': [ { 'id': '345', 'author': { 'name': '*****@*****.**' }, 'content': '', 'published': '2016-10-05T22:33:44.123456Z', }, ], }, { 'totalResults': '2', 'items': [ { 'id': '678', 'author': { 'name': '*****@*****.**' }, 'content': 'TestComment', 'published': '2016-10-05T23:33:44', }, ], }, ] comments = api.getComments('123') self.assertEquals(comments[0].id, '345') self.assertEquals(comments[0].author, '*****@*****.**') self.assertEquals(comments[0].comment, '') self.assertEquals(comments[0].created, datetime.datetime(2016, 10, 5, 22, 33, 44, 123456)) self.assertEquals(comments[1].id, '678') self.assertEquals(comments[1].author, '*****@*****.**') self.assertEquals(comments[1].comment, 'TestComment') self.assertEquals(comments[1].created, datetime.datetime(2016, 10, 5, 23, 33, 44)) self.assertEquals(list_method.call_count, 2) call1_kwargs = list_method.call_args_list[0][1] self.assertEquals(call1_kwargs['projectId'], 'my-project') self.assertEquals(call1_kwargs['issueId'], '123') call2_kwargs = list_method.call_args_list[1][1] self.assertEquals(call2_kwargs['projectId'], 'my-project') self.assertEquals(call2_kwargs['issueId'], '123') self.assertEquals(call2_kwargs['startIndex'], 1)
def test_create_issue_clears_dirty_flag_and_does_not_send_email(self): api = issue_tracker.IssueTrackerAPI('my-project') issue = issue_tracker.Issue({'summary': 'TestSummary'}) issue.dirty = True insert_method = self.client.issues.return_value.insert insert_method.return_value.execute.return_value = {'id': '123'} api.create(issue, send_email=False) self.assertFalse(issue.dirty) self.assertEquals(insert_method.call_count, 1) self.assertEquals(insert_method.call_args[1]['sendEmail'], False) self.assertDictEqual(insert_method.call_args[1]['body'], {'summary': 'TestSummary'})
def test_get_comment_count(self): api = issue_tracker.IssueTrackerAPI('my-project') list_method = self.client.issues.return_value.comments.return_value.list list_method.return_value.execute.return_value = {'totalResults': '1'} api.getCommentCount('123') self.assertEquals(list_method.call_count, 1) self.assertEquals(list_method.call_args[1]['projectId'], 'my-project') self.assertEquals(list_method.call_args[1]['issueId'], '123') self.assertEquals(list_method.call_args[1]['startIndex'], 1) self.assertEquals(list_method.call_args[1]['maxResults'], 0)
def test_updates_issue_with_comment(self): api = issue_tracker.IssueTrackerAPI('my-project') issue = issue_tracker.Issue({'id': '123'}) insert_method = self.client.issues.return_value.comments.return_value.insert insert_method.return_value.execute.return_value = {'id': '345'} api.update(issue, comment='TestComment', send_email=False) self.assertEquals(insert_method.call_count, 1) self.assertEquals(insert_method.call_args[1]['sendEmail'], False) self.assertDictEqual(insert_method.call_args[1]['body'], { 'id': '123', 'content': 'TestComment', 'updates': {}, })
def test_construct_issue_and_then_create_it_on_tracker(self): api = issue_tracker.IssueTrackerAPI('my-project') insert_method = self.client.issues.return_value.insert insert_method.return_value.execute.return_value = {'id': '123'} issue = api.create( issue_tracker.Issue({ 'summary': 'TestSummary', 'description': 'TestDescription', 'status': 'Assigned', 'owner': { 'name': '*****@*****.**' }, 'labels': ['My-Label-1', 'My-Label-2'], 'components': ['Component-1', 'Component-2'], 'cc': [{ 'name': '*****@*****.**' }, { 'name': '*****@*****.**' }], })) self.assertEquals(issue.id, '123') self.assertEquals(insert_method.call_count, 1) self.assertEquals(insert_method.call_args[1]['projectId'], 'my-project') self.assertEquals(insert_method.call_args[1]['sendEmail'], True) self.assertDictEqual( insert_method.call_args[1]['body'], { 'summary': 'TestSummary', 'description': 'TestDescription', 'status': 'Assigned', 'owner': { 'name': '*****@*****.**' }, 'labels': ['My-Label-1', 'My-Label-2'], 'components': ['Component-1', 'Component-2'], 'cc': [{ 'name': '*****@*****.**' }, { 'name': '*****@*****.**' }], })
def test_updates_issue(self): api = issue_tracker.IssueTrackerAPI('my-project') issue = issue_tracker.Issue({ 'id': '123', 'summary': 'TestSummary', 'labels': ['Label-Y'] }) issue.summary = 'NewSummary' issue.status = 'Assigned' issue.owner = '----' issue.blocked_on.append('12345') issue.labels.append('Label-X') issue.labels.remove('Label-Y') issue.components.append('Test>Flaky') issue.cc.append('*****@*****.**') insert_method = self.client.issues.return_value.comments.return_value.insert insert_method.return_value.execute.return_value = {'id': '345'} self.assertTrue(issue.dirty) self.assertEqual(issue, api.update(issue)) self.assertFalse(issue.dirty) self.assertEquals(insert_method.call_count, 1) self.assertEquals(insert_method.call_args[1]['projectId'], 'my-project') self.assertEquals(insert_method.call_args[1]['issueId'], '123') self.assertEquals(insert_method.call_args[1]['sendEmail'], True) self.assertDictEqual( insert_method.call_args[1]['body'], { 'id': '123', 'updates': { 'blockedOn': ['12345'], 'cc': ['*****@*****.**'], 'labels': ['Label-X', '-Label-Y'], 'components': ['Test>Flaky'], 'owner': '----', 'status': 'Assigned', 'summary': 'NewSummary' } })
def test_does_not_update_issue_if_no_changes_or_comment(self): api = issue_tracker.IssueTrackerAPI('my-project') issue = issue_tracker.Issue({'summary': 'TestSummary'}) api.update(issue) self.assertEquals(self.client.issues.call_count, 0)
def test_uses_prod_instance_by_default(self): issue_tracker.IssueTrackerAPI('my-project') self.build_client.assert_called_with( 'monorail', 'v1', 'https://monorail-prod.appspot.com/_ah/api/' 'discovery/v1/apis/{api}/{apiVersion}/rest')