def test_construct_issue_and_then_create_it_on_tracker(self): api = monorail_api.IssueTrackerAPI('my-project') insert_method = self.client.issues.return_value.insert insert_method.return_value.execute.return_value = {'id': '123'} issue = api.create( monorail_api.Issue({ 'summary': 'TestSummary', 'description': 'TestDescription', 'status': 'Assigned', 'owner': { 'name': '*****@*****.**' }, 'labels': ['My-Label-1', 'My-Label-2'], 'components': ['Component-1', 'Component-2'], 'cc': [{ 'name': '*****@*****.**' }, { 'name': '*****@*****.**' }], 'fieldValues': [monorail_api.CustomizedField('name', 'value')] })) 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': '*****@*****.**' }], 'field_values': [{ 'operator': CustomizedField.OPERATOR_ADD, 'fieldName': 'name', 'derived': False, 'fieldValue': 'value' }] })
def test_create_issue_clears_dirty_flag_and_does_not_send_email(self): api = monorail_api.IssueTrackerAPI('my-project') issue = monorail_api.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_updates_issue_with_comment(self): api = monorail_api.IssueTrackerAPI('my-project') issue = monorail_api.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_updates_issue(self): api = monorail_api.IssueTrackerAPI('my-project') issue = monorail_api.Issue({ 'id': '123', 'summary': 'TestSummary', 'labels': ['Label-Y'], 'fieldValues': [monorail_api.CustomizedField('name', 'value')] }) issue.summary = 'NewSummary' issue.status = 'Duplicate' issue.merged_into = '124' 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('*****@*****.**') issue.field_values.remove(issue.field_values[0]) 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': 'Duplicate', 'mergedInto': '124', 'summary': 'NewSummary' }, 'field_values': [{ 'operator': CustomizedField.OPERATOR_REMOVE, 'fieldName': 'name', 'derived': False, 'fieldValue': 'value' }] })
def test_handles_dirty_status_and_list_of_changes_correctly(self): issue = monorail_api.Issue({}) self.assertFalse(issue.dirty) self.assertEquals(issue.changed, set([])) issue.status = 'Available' self.assertTrue(issue.dirty) self.assertEquals(issue.changed, set(['status'])) issue.setClean() self.assertFalse(issue.dirty) self.assertEquals(issue.changed, set([])) issue.cc.append('*****@*****.**') self.assertTrue(issue.dirty) self.assertEquals(issue.changed, set(['cc'])) issue.setClean() self.assertFalse(issue.dirty) self.assertEquals(issue.changed, set([]))
def test_creates_issue(self): field = CustomizedField('name', 'value') issue = monorail_api.Issue({ 'id': '123', 'summary': 'TestSummary', 'description': 'TestDescription', 'status': 'Duplicate', 'stars': '1', 'state': 'closed', 'author': { 'name': '*****@*****.**' }, 'owner': { 'name': '*****@*****.**' }, 'labels': ['My-Label-1', 'My-Label-2'], 'components': ['Component-1', 'Component-2'], 'cc': [{ 'name': '*****@*****.**' }, { 'name': '*****@*****.**' }], 'published': '2016-01-10T21:33:44.123455Z', 'closed': '2016-01-10T22:33:44.123455Z', 'updated': '2016-01-10T23:33:44.123455Z', 'mergedInto': { 'issueId': '456' }, 'blockedOn': [{ 'issueId': '788' }], 'blocking': [{ 'issueId': '789' }], 'fieldValues': [field] }) self.assertEquals(issue.id, '123') self.assertEquals(issue.blocked_on, ['788']) self.assertEquals(issue.blocking, ['789']) self.assertEquals(issue.merged_into, '456') self.assertEquals(issue.created, datetime.datetime(2016, 1, 10, 21, 33, 44, 123455)) self.assertEquals(issue.updated, datetime.datetime(2016, 1, 10, 23, 33, 44, 123455)) self.assertEquals(issue.closed, datetime.datetime(2016, 1, 10, 22, 33, 44, 123455)) self.assertEquals(issue.summary, 'TestSummary') self.assertEquals(issue.description, 'TestDescription') self.assertEquals(issue.reporter, '*****@*****.**') self.assertEquals(issue.owner, '*****@*****.**') self.assertEquals(issue.status, 'Duplicate') self.assertEquals(issue.stars, '1') self.assertFalse(issue.open) self.assertEquals(issue.labels, ['My-Label-1', 'My-Label-2']) self.assertEquals(issue.components, ['Component-1', 'Component-2']) self.assertEquals(issue.cc, ['*****@*****.**', '*****@*****.**']) self.assertEqual(issue.field_values, [field]) self.assertFalse(issue.dirty)
def test_does_not_update_issue_if_no_changes_or_comment(self): api = monorail_api.IssueTrackerAPI('my-project') issue = monorail_api.Issue({'summary': 'TestSummary'}) api.update(issue) self.assertEquals(self.client.issues.call_count, 0)