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'
             }]
         })
Example #5
0
    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([]))
Example #6
0
    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)