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')
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', )
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', )
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')
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_empty_change_id(self): gerrit_con = mock.Mock() with self.assertRaises(KeyError): cng = Change(gerrit_con) cng.get_change( 'gerritproject', 'master', '' )
def test_get_change_empty_branch(self): gerrit_con = mock.Mock() with self.assertRaises(KeyError): cng = Change(gerrit_con) cng.get_change( 'gerritproject', '', 'I01440b5fd46a67ee38c9ef2c22eb145b8547cbb2' )
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'})
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')
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)
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' )
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)
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'} )
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')
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_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')
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()
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_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_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_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/', )
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_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'})
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', )
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'})
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={}, )
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'}, )
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', )
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/', )
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'}, )
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={}, )
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_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_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, ), )
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', '')
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, ), )
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_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): gerrit_con = mock.Mock() with self.assertRaises(KeyError): cng = Change(gerrit_con) cng.get_change('gerritproject', '', 'I01440b5fd46a67ee38c9ef2c22eb145b8547cbb2')