コード例 #1
0
    def test_submit_change_success_with_options(self):
        req = mock.Mock()
        req.status_code = 200
        req.content = (
            ')]}\''
            '{"id": "gerritproject~master~I01440b5fd46a67ee38c9ef2c22eb145b8547cbb2"}'
        ).encode('utf-8')
        gerrit_con = mock.Mock()
        gerrit_con.call.return_value = req

        cng = Change(gerrit_con)
        change = cng.get_change(
            'gerritproject',
            'master',
            'I01440b5fd46a67ee38c9ef2c22eb145b8547cbb2',
        )
        req.content = ')]}\'{"status": "MERGED"}'.encode('utf-8')
        change.submit_change({'NOTIFY': 'NONE'})
        gerrit_con.call.assert_called_with(
            request='post',
            r_endpoint={
                'pre': '/a/changes/',
                'data': 'gerritproject~master~I01440b5fd46a67ee38c9ef2c22eb145b8547cbb2',
                'post': '/submit/',
            },
            r_payload={'NOTIFY': 'NONE'}
        )
        self.assertEqual(change.status, 'MERGED')
コード例 #2
0
    def test_create_change_project_object(self):
        req = mock.Mock()
        req.status_code = 201
        req.content = ')]}\'{"change_id": "I01440b5fd46a67ee38c9ef2c22eb145b8547cbb2"}'.encode(
            'utf-8')
        gerrit_con = mock.Mock()
        gerrit_con.call.return_value = req

        req_project = mock.Mock()
        req_project.status_code = 200
        req_project.content = ')]}\'{"name": "gerritproject"}'.encode('utf-8')
        gerrit_con_project = mock.Mock()
        gerrit_con_project.call.return_value = req_project

        with mock.patch.object(Change, 'get_change') as mock_get_change:
            pjt = Project(gerrit_con_project)
            project = pjt.get_project('gerritproject')
            cng = Change(gerrit_con)
            change = cng.create_change(project, 'My change', 'master',
                                       {'status': 'DRAFT'})
            mock_get_change.assert_called_with(
                'gerritproject',
                'master',
                'I01440b5fd46a67ee38c9ef2c22eb145b8547cbb2',
            )
コード例 #3
0
    def test_create_change_project_object(self):
        req = mock.Mock()
        req.status_code = 201
        req.content = ')]}\'{"change_id": "I01440b5fd46a67ee38c9ef2c22eb145b8547cbb2"}'.encode('utf-8')
        gerrit_con = mock.Mock()
        gerrit_con.call.return_value = req

        req_project = mock.Mock()
        req_project.status_code = 200
        req_project.content = ')]}\'{"name": "gerritproject"}'.encode('utf-8')
        gerrit_con_project = mock.Mock()
        gerrit_con_project.call.return_value = req_project

        with mock.patch.object(Change, 'get_change') as mock_get_change:
            pjt = Project(gerrit_con_project)
            project = pjt.get_project('gerritproject')
            cng = Change(gerrit_con)
            change = cng.create_change(
                project,
                'My change',
                'master',
                {'status': 'DRAFT'}
            )
            mock_get_change.assert_called_with(
                'gerritproject',
                'master',
                'I01440b5fd46a67ee38c9ef2c22eb145b8547cbb2',
            )
コード例 #4
0
    def test_submit_change_success_with_options(self):
        req = mock.Mock()
        req.status_code = 200
        req.content = (
            ')]}\''
            '{"id": "gerritproject~master~I01440b5fd46a67ee38c9ef2c22eb145b8547cbb2"}'
        ).encode('utf-8')
        gerrit_con = mock.Mock()
        gerrit_con.call.return_value = req

        cng = Change(gerrit_con)
        change = cng.get_change(
            'gerritproject',
            'master',
            'I01440b5fd46a67ee38c9ef2c22eb145b8547cbb2',
        )
        req.content = ')]}\'{"status": "MERGED"}'.encode('utf-8')
        change.submit_change({'NOTIFY': 'NONE'})
        gerrit_con.call.assert_called_with(
            request='post',
            r_endpoint={
                'pre': '/a/changes/',
                'data':
                'gerritproject~master~I01440b5fd46a67ee38c9ef2c22eb145b8547cbb2',
                'post': '/submit/',
            },
            r_payload={'NOTIFY': 'NONE'})
        self.assertEqual(change.status, 'MERGED')
コード例 #5
0
    def setUp(self):
        self.req = mock.Mock()
        self.req.status_code = 200
        self.req.content = self.build_response({})
        self.gerrit_con = mock.Mock()
        self.gerrit_con.call.return_value = self.req

        self.req_project = mock.Mock()
        self.req_project.status_code = 200
        self.req_project.content = self.build_response(
            {"name": "gerritproject"})
        self.gerrit_con_project = mock.Mock()
        self.gerrit_con_project.call.return_value = self.req_project

        self.req.content = self.build_response({
            "id": self.FULL_ID,
            "project": self.PROJECT,
            "branch": self.BRANCH,
            "change_id": self.CHANGE_ID,
            "subject": self.SUBJECT,
            "status": self.STATUS,
            "created": self.CREATED,
            "updated": self.UPDATED,
            "mergable": self.MERGABLE,
            "insertions": self.INSERTIONS,
            "deletions": self.DELETIONS,
            "number": self.NUMBER,
            "owner": self.OWNER,
        })
        self.change = Change(self.gerrit_con).get_change(
            self.PROJECT,
            self.BRANCH,
            self.CHANGE_ID,
        )
コード例 #6
0
 def test_get_change_empty_change_id(self):
     gerrit_con = mock.Mock()
     with self.assertRaises(KeyError):
         cng = Change(gerrit_con)
         cng.get_change(
             'gerritproject',
             'master',
             ''
         )
コード例 #7
0
 def test_get_change_empty_branch(self):
     gerrit_con = mock.Mock()
     with self.assertRaises(KeyError):
         cng = Change(gerrit_con)
         cng.get_change(
             'gerritproject',
             '',
             'I01440b5fd46a67ee38c9ef2c22eb145b8547cbb2'
         )
コード例 #8
0
    def test_create_change_fail(self):
        req = mock.Mock()
        req.status_code = 404
        req.content = ')]}\'{}'.encode('utf-8')
        gerrit_con = mock.Mock()
        gerrit_con.call.return_value = req

        with self.assertRaises(UnhandledError):
            cng = Change(gerrit_con)
            cng.create_change('gerritproject', 'My change', 'master',
                              {'status': 'DRAFT'})
コード例 #9
0
    def test_get_change_doesnt_exist(self):
        req = mock.Mock()
        req.status_code = 404
        req.content = ')]}\'{}'.encode('utf-8')
        gerrit_con = mock.Mock()
        gerrit_con.call.return_value = req

        with self.assertRaises(ValueError):
            cng = Change(gerrit_con)
            cng.get_change('gerritproject', 'master',
                           'I01440b5fd46a67ee38c9ef2c22eb145b8547cbb2')
コード例 #10
0
 def get_change(self, project, change_id, branch='master'):
     """
     Get a change
     :param project: Project that contains change
     :type project: str or gerrit.projects.Project
     :param change_id: ID of change
     :type change_id: str
     :param branch: Branch change exists in
     :type branch: str
     """
     change = Change(self)
     return change.get_change(project, branch, change_id)
コード例 #11
0
ファイル: gerrit.py プロジェクト: marhag87/python-gerrit
 def get_change(self, project, change_id, branch='master'):
     """
     Get a change
     :param project: Project that contains change
     :type project: str or gerrit.projects.Project
     :param change_id: ID of change
     :type change_id: str
     :param branch: Branch change exists in
     :type branch: str
     """
     change = Change(self)
     return change.get_change(project, branch, change_id)
コード例 #12
0
    def test_get_change_unhandled_error(self):
        req = mock.Mock()
        req.status_code = 503
        req.content = ')]}\'{}'.encode('utf-8')
        gerrit_con = mock.Mock()
        gerrit_con.call.return_value = req

        with self.assertRaises(UnhandledError):
            cng = Change(gerrit_con)
            cng.get_change(
                'gerritproject',
                'master',
                'I01440b5fd46a67ee38c9ef2c22eb145b8547cbb2'
            )
コード例 #13
0
    def create_change(self, project, subject, branch='master', options=None):
        """
        Create a change
	:param project: Project to create change in
	:type project: str or gerrit.project.Project
	:param subject: Subject of the change
	:type subject: str
	:param branch: The name of the target branch
	:type branch: str
	:param options: Additional options
	:type options: dict
	"""

        change = Change(self)
        return change.create_change(project, subject, branch, options)
コード例 #14
0
ファイル: gerrit.py プロジェクト: marhag87/python-gerrit
    def create_change(self, project, subject, branch='master', options=None):
        """
        Create a change
	:param project: Project to create change in
	:type project: str or gerrit.project.Project
	:param subject: Subject of the change
	:type subject: str
	:param branch: The name of the target branch
	:type branch: str
	:param options: Additional options
	:type options: dict
	"""

        change = Change(self)
        return change.create_change(project, subject, branch, options)
コード例 #15
0
    def test_create_change_fail(self):
        req = mock.Mock()
        req.status_code = 404
        req.content = ')]}\'{}'.encode('utf-8')
        gerrit_con = mock.Mock()
        gerrit_con.call.return_value = req

        with self.assertRaises(UnhandledError):
            cng = Change(gerrit_con)
            cng.create_change(
                'gerritproject',
                'My change',
                'master',
                {'status': 'DRAFT'}
            )
コード例 #16
0
    def test_get_change_project_object(self):
        req = mock.Mock()
        req.status_code = 200
        req.content = ')]}\'{"id": "gerritproject~master~I01440b5fd46a67ee38c9ef2c22eb145b8547cbb2"}'.encode(
            'utf-8')
        gerrit_con = mock.Mock()
        gerrit_con.call.return_value = req

        pjt = Project(gerrit_con)
        project = pjt.get_project('gerritproject')
        cng = Change(gerrit_con)
        change = cng.get_change(project, 'master',
                                'I01440b5fd46a67ee38c9ef2c22eb145b8547cbb2')
        self.assertEqual(
            change.full_id,
            'gerritproject~master~I01440b5fd46a67ee38c9ef2c22eb145b8547cbb2')
コード例 #17
0
 def test_get_change_empty_branch(self):
     """
     Test that fetching a change with an empty branch raises an error
     """
     with self.assertRaises(KeyError):
         Change(self.gerrit_con).get_change(self.PROJECT, '',
                                            self.CHANGE_ID)
コード例 #18
0
    def test_get_change_project_object(self):
        req = mock.Mock()
        req.status_code = 200
        req.content = ')]}\'{"id": "gerritproject~master~I01440b5fd46a67ee38c9ef2c22eb145b8547cbb2"}'.encode('utf-8')
        gerrit_con = mock.Mock()
        gerrit_con.call.return_value = req

        pjt = Project(gerrit_con)
        project = pjt.get_project('gerritproject')
        cng = Change(gerrit_con)
        change = cng.get_change(
            project,
            'master',
            'I01440b5fd46a67ee38c9ef2c22eb145b8547cbb2'
        )
        self.assertEqual(change.full_id, 'gerritproject~master~I01440b5fd46a67ee38c9ef2c22eb145b8547cbb2')
コード例 #19
0
    def test_submit_change_fail(self):
        req = mock.Mock()
        req.status_code = 200
        req.content = ')]}\'{}'.encode('utf-8')
        gerrit_con = mock.Mock()
        gerrit_con.call.return_value = req

        cng = Change(gerrit_con)
        change = cng.get_change(
            'gerritproject',
            'master',
            'I01440b5fd46a67ee38c9ef2c22eb145b8547cbb2',
        )
        req.status_code = 409
        req.content = ')]}\'blocked by Verify'.encode('utf-8')
        with self.assertRaises(UnhandledError):
            change.submit_change()
コード例 #20
0
    def test_submit_change_fail(self):
        req = mock.Mock()
        req.status_code = 200
        req.content = ')]}\'{}'.encode('utf-8')
        gerrit_con = mock.Mock()
        gerrit_con.call.return_value = req

        cng = Change(gerrit_con)
        change = cng.get_change(
            'gerritproject',
            'master',
            'I01440b5fd46a67ee38c9ef2c22eb145b8547cbb2',
        )
        req.status_code = 409
        req.content = ')]}\'blocked by Verify'.encode('utf-8')
        with self.assertRaises(UnhandledError):
            change.submit_change()
コード例 #21
0
 def test_get_change_project_object(self):
     """
     Test that a change can be fetched when using a project object
     """
     project = Project(self.gerrit_con).get_project(self.PROJECT)
     change = Change(self.gerrit_con).get_change(project, self.BRANCH,
                                                 self.CHANGE_ID)
     self.assertEqual(change.full_id, self.FULL_ID)
コード例 #22
0
    def test_get_change_unhandled_error(self):
        """
        Test that an unhandled error from gerrit raises an error
        """
        self.req.status_code = 503

        with self.assertRaises(UnhandledError):
            Change(self.gerrit_con).get_change(self.PROJECT, self.BRANCH,
                                               self.CHANGE_ID)
コード例 #23
0
    def test_get_change_doesnt_exist(self):
        """
        Test that fetching a change that doesn't exist raises an error
        """
        self.req.status_code = 404

        with self.assertRaises(ValueError):
            Change(self.gerrit_con).get_change(self.PROJECT, self.BRANCH,
                                               self.CHANGE_ID)
コード例 #24
0
    def test_list_reviewer(self):
        req = mock.Mock()
        req.status_code = 200
        req.content = (
            ')]}\''
            '{"change_id": "I01440b5fd46a67ee38c9ef2c22eb145b8547cbb2"}'
        ).encode('utf-8')
        gerrit_con = mock.Mock()
        gerrit_con.call.return_value = req

        cng = Change(gerrit_con)
        change = cng.get_change('gerritproject', 'master',
                                'I01440b5fd46a67ee38c9ef2c22eb145b8547cbb2')
        req.status_code = 200
        change.list_reviewers()
        gerrit_con.call.assert_called_with(
            r_endpoint=
            '/a/changes/I01440b5fd46a67ee38c9ef2c22eb145b8547cbb2/reviewers/',
        )
コード例 #25
0
    def test_create_change_fail(self):
        """
        Test that failing to create a change raises an error
        """
        self.req.status_code = 404

        with self.assertRaises(UnhandledError):
            Change(self.gerrit_con).create_change(self.PROJECT, self.SUBJECT,
                                                  self.BRANCH,
                                                  {'status': 'DRAFT'})
コード例 #26
0
    def test_get_change_returns_change(self):
        req = mock.Mock()
        req.status_code = 200
        content_string = (
            ')]}\''
            '{"id": "gerritproject~master~I01440b5fd46a67ee38c9ef2c22eb145b8547cbb2", '
            '"project": "gerritproject", '
            '"branch": "master", '
            '"change_id": "I01440b5fd46a67ee38c9ef2c22eb145b8547cbb2", '
            '"subject": "My change", '
            '"status": "NEW", '
            '"created": "2013-02-01 09:59:32.126000000", '
            '"updated": "2013-02-21 11:16:36.775000000", '
            '"mergable": true, '
            '"insertions": 34, '
            '"deletions": 101, '
            '"number": 3965, '
            '"owner": {"name": "John Doe"}}'
        )
        req.content = content_string.encode('utf-8')
        gerrit_con = mock.Mock()
        gerrit_con.call.return_value = req

        cng = Change(gerrit_con)
        change = cng.get_change(
            'gerritproject',
            'master',
            'I01440b5fd46a67ee38c9ef2c22eb145b8547cbb2'
        )
        self.assertEqual(change.full_id, 'gerritproject~master~I01440b5fd46a67ee38c9ef2c22eb145b8547cbb2')
        self.assertEqual(change.project, 'gerritproject')
        self.assertEqual(change.branch, 'master')
        self.assertEqual(change.change_id, 'I01440b5fd46a67ee38c9ef2c22eb145b8547cbb2')
        self.assertEqual(change.subject, 'My change')
        self.assertEqual(change.status, 'NEW')
        self.assertEqual(change.created, '2013-02-01 09:59:32.126000000')
        self.assertEqual(change.updated, '2013-02-21 11:16:36.775000000')
        self.assertTrue(change.mergable)
        self.assertEqual(change.insertions, 34)
        self.assertEqual(change.deletions, 101)
        self.assertEqual(change.number, 3965)
        self.assertEqual(change.owner, {'name': 'John Doe'})
コード例 #27
0
    def test_create_change_success(self):
        req = mock.Mock()
        req.status_code = 201
        req.content = ')]}\'{"change_id": "I01440b5fd46a67ee38c9ef2c22eb145b8547cbb2"}'.encode('utf-8')
        gerrit_con = mock.Mock()
        gerrit_con.call.return_value = req

        with mock.patch.object(Change, 'get_change') as mock_get_change:
            cng = Change(gerrit_con)
            cng.create_change(
                'gerritproject',
                'My change',
                'master',
                {'status': 'DRAFT'},
            )
            mock_get_change.assert_called_with(
                'gerritproject',
                'master',
                'I01440b5fd46a67ee38c9ef2c22eb145b8547cbb2',
            )
コード例 #28
0
    def test_get_change_returns_change(self):
        req = mock.Mock()
        req.status_code = 200
        content_string = (
            ')]}\''
            '{"id": "gerritproject~master~I01440b5fd46a67ee38c9ef2c22eb145b8547cbb2", '
            '"project": "gerritproject", '
            '"branch": "master", '
            '"change_id": "I01440b5fd46a67ee38c9ef2c22eb145b8547cbb2", '
            '"subject": "My change", '
            '"status": "NEW", '
            '"created": "2013-02-01 09:59:32.126000000", '
            '"updated": "2013-02-21 11:16:36.775000000", '
            '"mergable": true, '
            '"insertions": 34, '
            '"deletions": 101, '
            '"number": 3965, '
            '"owner": {"name": "John Doe"}}')
        req.content = content_string.encode('utf-8')
        gerrit_con = mock.Mock()
        gerrit_con.call.return_value = req

        cng = Change(gerrit_con)
        change = cng.get_change('gerritproject', 'master',
                                'I01440b5fd46a67ee38c9ef2c22eb145b8547cbb2')
        self.assertEqual(
            change.full_id,
            'gerritproject~master~I01440b5fd46a67ee38c9ef2c22eb145b8547cbb2')
        self.assertEqual(change.project, 'gerritproject')
        self.assertEqual(change.branch, 'master')
        self.assertEqual(change.change_id,
                         'I01440b5fd46a67ee38c9ef2c22eb145b8547cbb2')
        self.assertEqual(change.subject, 'My change')
        self.assertEqual(change.status, 'NEW')
        self.assertEqual(change.created, '2013-02-01 09:59:32.126000000')
        self.assertEqual(change.updated, '2013-02-21 11:16:36.775000000')
        self.assertTrue(change.mergable)
        self.assertEqual(change.insertions, 34)
        self.assertEqual(change.deletions, 101)
        self.assertEqual(change.number, 3965)
        self.assertEqual(change.owner, {'name': 'John Doe'})
コード例 #29
0
    def test_delete_reviewer(self):
        req = mock.Mock()
        req.status_code = 200
        req.content = (
            ')]}\''
            '{"change_id": "I01440b5fd46a67ee38c9ef2c22eb145b8547cbb2"}'
        ).encode('utf-8')
        gerrit_con = mock.Mock()
        gerrit_con.call.return_value = req

        cng = Change(gerrit_con)
        change = cng.get_change('gerritproject', 'master',
                                'I01440b5fd46a67ee38c9ef2c22eb145b8547cbb2')
        req.status_code = 204
        self.assertTrue(change.delete_reviewer('my user'))
        gerrit_con.call.assert_called_with(
            request='delete',
            r_endpoint=
            '/a/changes/I01440b5fd46a67ee38c9ef2c22eb145b8547cbb2/reviewers/my user',
            r_headers={},
        )
コード例 #30
0
    def test_add_reviewer(self):
        req = mock.Mock()
        req.status_code = 200
        req.content = (
            ')]}\''
            '{"change_id": "I01440b5fd46a67ee38c9ef2c22eb145b8547cbb2"}'
        ).encode('utf-8')
        gerrit_con = mock.Mock()
        gerrit_con.call.return_value = req

        cng = Change(gerrit_con)
        change = cng.get_change('gerritproject', 'master',
                                'I01440b5fd46a67ee38c9ef2c22eb145b8547cbb2')
        req.content = ')]}\'{"reviewers": ["my user"]}'.encode('utf-8')
        self.assertTrue(change.add_reviewer('my user'))
        gerrit_con.call.assert_called_with(
            request='post',
            r_endpoint=
            '/a/changes/I01440b5fd46a67ee38c9ef2c22eb145b8547cbb2/reviewers',
            r_payload={'reviewer': 'my user'},
        )
コード例 #31
0
    def test_create_change_success(self):
        req = mock.Mock()
        req.status_code = 201
        req.content = ')]}\'{"change_id": "I01440b5fd46a67ee38c9ef2c22eb145b8547cbb2"}'.encode(
            'utf-8')
        gerrit_con = mock.Mock()
        gerrit_con.call.return_value = req

        with mock.patch.object(Change, 'get_change') as mock_get_change:
            cng = Change(gerrit_con)
            cng.create_change(
                'gerritproject',
                'My change',
                'master',
                {'status': 'DRAFT'},
            )
            mock_get_change.assert_called_with(
                'gerritproject',
                'master',
                'I01440b5fd46a67ee38c9ef2c22eb145b8547cbb2',
            )
コード例 #32
0
    def test_list_reviewer(self):
        req = mock.Mock()
        req.status_code = 200
        req.content = (
            ')]}\''
            '{"change_id": "I01440b5fd46a67ee38c9ef2c22eb145b8547cbb2"}'
        ).encode('utf-8')
        gerrit_con = mock.Mock()
        gerrit_con.call.return_value = req

        cng = Change(gerrit_con)
        change = cng.get_change(
            'gerritproject',
            'master',
            'I01440b5fd46a67ee38c9ef2c22eb145b8547cbb2'
        )
        req.status_code = 200
        change.list_reviewers()
        gerrit_con.call.assert_called_with(
            r_endpoint='/a/changes/I01440b5fd46a67ee38c9ef2c22eb145b8547cbb2/reviewers/',
        )
コード例 #33
0
    def test_add_reviewer(self):
        req = mock.Mock()
        req.status_code = 200
        req.content = (
            ')]}\''
            '{"change_id": "I01440b5fd46a67ee38c9ef2c22eb145b8547cbb2"}'
        ).encode('utf-8')
        gerrit_con = mock.Mock()
        gerrit_con.call.return_value = req

        cng = Change(gerrit_con)
        change = cng.get_change(
            'gerritproject',
            'master',
            'I01440b5fd46a67ee38c9ef2c22eb145b8547cbb2'
        )
        req.content = ')]}\'{"reviewers": ["my user"]}'.encode('utf-8')
        self.assertTrue(change.add_reviewer('my user'))
        gerrit_con.call.assert_called_with(
            request='post',
            r_endpoint='/a/changes/I01440b5fd46a67ee38c9ef2c22eb145b8547cbb2/reviewers',
            r_payload={'reviewer': 'my user'},
        )
コード例 #34
0
    def test_delete_reviewer(self):
        req = mock.Mock()
        req.status_code = 200
        req.content = (
            ')]}\''
            '{"change_id": "I01440b5fd46a67ee38c9ef2c22eb145b8547cbb2"}'
        ).encode('utf-8')
        gerrit_con = mock.Mock()
        gerrit_con.call.return_value = req

        cng = Change(gerrit_con)
        change = cng.get_change(
            'gerritproject',
            'master',
            'I01440b5fd46a67ee38c9ef2c22eb145b8547cbb2'
        )
        req.status_code = 204
        self.assertTrue(change.delete_reviewer('my user'))
        gerrit_con.call.assert_called_with(
            request='delete',
            r_endpoint='/a/changes/I01440b5fd46a67ee38c9ef2c22eb145b8547cbb2/reviewers/my user',
            r_headers={},
        )
コード例 #35
0
    def test_create_change_project_obj(self):
        """
        Test that a change is successfully created when using a project object
        """
        self.req.status_code = 201

        with mock.patch.object(Change, 'get_change') as mock_get_change:
            project = Project(self.gerrit_con_project).get_project(
                self.PROJECT)
            Change(self.gerrit_con).create_change(project, self.SUBJECT,
                                                  self.BRANCH,
                                                  {'status': 'DRAFT'})
            mock_get_change.assert_called_with(
                self.PROJECT,
                self.BRANCH,
                self.CHANGE_ID,
            )
コード例 #36
0
    def test_create_change_success(self):
        """
        Test that a change is successfully created
        """
        self.req.status_code = 201

        with mock.patch.object(Change, 'get_change') as mock_get_change:
            Change(self.gerrit_con).create_change(
                self.PROJECT,
                self.SUBJECT,
                self.BRANCH,
                {'status': 'DRAFT'},
            )
            mock_get_change.assert_called_with(
                self.PROJECT,
                self.BRANCH,
                self.CHANGE_ID,
            )
コード例 #37
0
    def test_parent_project_no_quote(self):
        """
        Test that an already unquoted id is not unquoted
        """
        self.req.content = self.build_response({
            "id":
            "{}/{}".format(
                self.PARENT,
                self.CHANGE_ID,
            ),
        })

        change = Change(self.gerrit_con).get_change(
            '{}/{}'.format(
                self.PARENT,
                self.PROJECT,
            ), self.BRANCH, self.CHANGE_ID)
        self.assertEqual(
            change.full_id,
            '{}/{}'.format(
                self.PARENT,
                self.CHANGE_ID,
            ),
        )
コード例 #38
0
 def test_get_change_empty_change_id(self):
     gerrit_con = mock.Mock()
     with self.assertRaises(KeyError):
         cng = Change(gerrit_con)
         cng.get_change('gerritproject', 'master', '')
コード例 #39
0
class ChangeTestCase(GerritUnitTest):
    """
    Unit tests for gerrit.changes.change
    """
    def setUp(self):
        self.req = mock.Mock()
        self.req.status_code = 200
        self.req.content = self.build_response({})
        self.gerrit_con = mock.Mock()
        self.gerrit_con.call.return_value = self.req

        self.req_project = mock.Mock()
        self.req_project.status_code = 200
        self.req_project.content = self.build_response(
            {"name": "gerritproject"})
        self.gerrit_con_project = mock.Mock()
        self.gerrit_con_project.call.return_value = self.req_project

        self.req.content = self.build_response({
            "id": self.FULL_ID,
            "project": self.PROJECT,
            "branch": self.BRANCH,
            "change_id": self.CHANGE_ID,
            "subject": self.SUBJECT,
            "status": self.STATUS,
            "created": self.CREATED,
            "updated": self.UPDATED,
            "mergable": self.MERGABLE,
            "insertions": self.INSERTIONS,
            "deletions": self.DELETIONS,
            "number": self.NUMBER,
            "owner": self.OWNER,
        })
        self.change = Change(self.gerrit_con).get_change(
            self.PROJECT,
            self.BRANCH,
            self.CHANGE_ID,
        )

    def test_get_change_returns_change(self):
        """
        Test that a change is properly parsed
        """
        self.assertEqual(self.change.full_id, self.FULL_ID)
        self.assertEqual(self.change.project, self.PROJECT)
        self.assertEqual(self.change.branch, self.BRANCH)
        self.assertEqual(self.change.change_id, self.CHANGE_ID)
        self.assertEqual(self.change.subject, self.SUBJECT)
        self.assertEqual(self.change.status, self.STATUS)
        self.assertEqual(self.change.created, self.CREATED)
        self.assertEqual(self.change.updated, self.UPDATED)
        self.assertEqual(self.change.mergable, self.MERGABLE)
        self.assertEqual(self.change.insertions, self.INSERTIONS)
        self.assertEqual(self.change.deletions, self.DELETIONS)
        self.assertEqual(self.change.number, self.NUMBER)
        self.assertEqual(self.change.owner, self.OWNER)

    def test_get_change_project_object(self):
        """
        Test that a change can be fetched when using a project object
        """
        project = Project(self.gerrit_con).get_project(self.PROJECT)
        change = Change(self.gerrit_con).get_change(project, self.BRANCH,
                                                    self.CHANGE_ID)
        self.assertEqual(change.full_id, self.FULL_ID)

    def test_get_change_empty_project(self):
        """
        Test that fetching a change with an empty project raises an error
        """
        with self.assertRaises(KeyError):
            Change(self.gerrit_con).get_change('', self.BRANCH, self.CHANGE_ID)

    def test_get_change_empty_branch(self):
        """
        Test that fetching a change with an empty branch raises an error
        """
        with self.assertRaises(KeyError):
            Change(self.gerrit_con).get_change(self.PROJECT, '',
                                               self.CHANGE_ID)

    def test_get_change_empty_change_id(self):
        """
        Test that fetching a change with an empty change ID raises an error
        """
        with self.assertRaises(KeyError):
            Change(self.gerrit_con).get_change(self.PROJECT, self.BRANCH, '')

    def test_get_change_doesnt_exist(self):
        """
        Test that fetching a change that doesn't exist raises an error
        """
        self.req.status_code = 404

        with self.assertRaises(ValueError):
            Change(self.gerrit_con).get_change(self.PROJECT, self.BRANCH,
                                               self.CHANGE_ID)

    def test_get_change_unhandled_error(self):
        """
        Test that an unhandled error from gerrit raises an error
        """
        self.req.status_code = 503

        with self.assertRaises(UnhandledError):
            Change(self.gerrit_con).get_change(self.PROJECT, self.BRANCH,
                                               self.CHANGE_ID)

    def test_create_change_success(self):
        """
        Test that a change is successfully created
        """
        self.req.status_code = 201

        with mock.patch.object(Change, 'get_change') as mock_get_change:
            Change(self.gerrit_con).create_change(
                self.PROJECT,
                self.SUBJECT,
                self.BRANCH,
                {'status': 'DRAFT'},
            )
            mock_get_change.assert_called_with(
                self.PROJECT,
                self.BRANCH,
                self.CHANGE_ID,
            )

    def test_create_change_fail(self):
        """
        Test that failing to create a change raises an error
        """
        self.req.status_code = 404

        with self.assertRaises(UnhandledError):
            Change(self.gerrit_con).create_change(self.PROJECT, self.SUBJECT,
                                                  self.BRANCH,
                                                  {'status': 'DRAFT'})

    def test_create_change_project_obj(self):
        """
        Test that a change is successfully created when using a project object
        """
        self.req.status_code = 201

        with mock.patch.object(Change, 'get_change') as mock_get_change:
            project = Project(self.gerrit_con_project).get_project(
                self.PROJECT)
            Change(self.gerrit_con).create_change(project, self.SUBJECT,
                                                  self.BRANCH,
                                                  {'status': 'DRAFT'})
            mock_get_change.assert_called_with(
                self.PROJECT,
                self.BRANCH,
                self.CHANGE_ID,
            )

    def test_submit_change_success(self):
        """
        Test that submitting a change is successful
        """
        self.req.content = self.build_response({"status": "MERGED"})
        self.change.submit_change()
        self.gerrit_con.call.assert_called_with(
            request='post',
            r_endpoint={
                'pre': '/a/changes/',
                'data': self.FULL_ID,
                'post': '/submit/',
            },
            r_payload={},
        )
        self.assertEqual(self.change.status, 'MERGED')

    def test_submit_change_with_options(self):
        """
        Test that a change can be submitted with options
        """
        self.req.content = self.build_response({"status": "MERGED"})
        self.change.submit_change({'NOTIFY': 'NONE'})
        self.gerrit_con.call.assert_called_with(request='post',
                                                r_endpoint={
                                                    'pre': '/a/changes/',
                                                    'data': self.FULL_ID,
                                                    'post': '/submit/',
                                                },
                                                r_payload={'NOTIFY': 'NONE'})
        self.assertEqual(self.change.status, 'MERGED')

    def test_submit_change_fail(self):
        """
        Test that a submit raises an error if it is blocked
        """
        self.req.status_code = 409
        self.req.content = self.build_response('blocked by Verify')
        with self.assertRaises(UnhandledError):
            self.change.submit_change()

    def test_add_reviewer(self):
        """
        Test that a reviewer can be added
        """
        self.req.content = self.build_response({"reviewers": [self.USER]})
        self.assertTrue(self.change.add_reviewer(self.USER))
        self.gerrit_con.call.assert_called_with(
            request='post',
            r_endpoint='/a/changes/{}/reviewers'.format(self.CHANGE_ID),
            r_payload={'reviewer': self.USER},
        )

    def test_delete_reviewer(self):
        """
        Test that a reviewer can be deleted
        """
        self.req.status_code = 204
        self.assertTrue(self.change.delete_reviewer(self.USER))
        self.gerrit_con.call.assert_called_with(
            request='delete',
            r_endpoint='/a/changes/{}/reviewers/{}'.format(
                self.CHANGE_ID, self.USER),
            r_headers={},
        )

    def test_list_reviewer(self):
        """
        Test that reviewers can be listed
        """
        self.change.list_reviewers()
        self.gerrit_con.call.assert_called_with(
            r_endpoint='/a/changes/{}/reviewers/'.format(self.CHANGE_ID), )

    def test_set_review(self):
        """
        Test that a review can be set
        """
        self.change.set_review()
        self.gerrit_con.call.assert_called_with(
            request='post',
            r_endpoint='/a/changes/{}/revisions/current/review'.format(
                self.CHANGE_ID),
            r_payload={})

    def test_parent_project_quote(self):
        """
        Test that a quoted id is unquoted
        """
        self.req.content = self.build_response({
            "id":
            "{}%2F{}".format(
                self.PARENT,
                self.FULL_ID,
            ),
        })

        change = Change(self.gerrit_con).get_change(
            '{}/{}'.format(
                self.PARENT,
                self.PROJECT,
            ), self.BRANCH, self.CHANGE_ID)
        self.assertEqual(
            change.full_id,
            '{}/{}'.format(
                self.PARENT,
                self.FULL_ID,
            ),
        )

    def test_parent_project_no_quote(self):
        """
        Test that an already unquoted id is not unquoted
        """
        self.req.content = self.build_response({
            "id":
            "{}/{}".format(
                self.PARENT,
                self.CHANGE_ID,
            ),
        })

        change = Change(self.gerrit_con).get_change(
            '{}/{}'.format(
                self.PARENT,
                self.PROJECT,
            ), self.BRANCH, self.CHANGE_ID)
        self.assertEqual(
            change.full_id,
            '{}/{}'.format(
                self.PARENT,
                self.CHANGE_ID,
            ),
        )
コード例 #40
0
 def test_get_change_empty_change_id(self):
     """
     Test that fetching a change with an empty change ID raises an error
     """
     with self.assertRaises(KeyError):
         Change(self.gerrit_con).get_change(self.PROJECT, self.BRANCH, '')
コード例 #41
0
 def test_get_change_empty_project(self):
     """
     Test that fetching a change with an empty project raises an error
     """
     with self.assertRaises(KeyError):
         Change(self.gerrit_con).get_change('', self.BRANCH, self.CHANGE_ID)
コード例 #42
0
 def test_get_change_empty_branch(self):
     gerrit_con = mock.Mock()
     with self.assertRaises(KeyError):
         cng = Change(gerrit_con)
         cng.get_change('gerritproject', '',
                        'I01440b5fd46a67ee38c9ef2c22eb145b8547cbb2')