def test__get_next_endpoint_Should_ReturnExpected_When_CalledWithNextEndpoint( self, *patches): client = GitHubAPI('api.github.com', bearer_token='bearer-token') link_header = '<https://api.github.com/organizations/27781926/repos?page=2>; rel="prev", <https://api.github.com/organizations/27781926/repos?page=4>; rel="next", <https://api.github.com/organizations/27781926/repos?page=4>; rel="last", <https://api.github.com/organizations/27781926/repos?page=1>; rel="first"' result = client.get_next_endpoint(link_header) expected_result = '/organizations/27781926/repos?page=4' self.assertEqual(result, expected_result)
def test__get_version_tags_Should_Return_When_NoLatestTagVersion( self, get_latest_version_patch, filter_version_tags_patch, *patches): get_latest_version_patch.return_value = (None, None) client = GitHubAPI('api.github.com', bearer_token='bearer-token') client.get_version_tags(repo='org1/repo1', branch='master') filter_version_tags_patch.assert_not_called()
def test__remove_version_tags_Should_Return_When_NoTags( self, get_version_tags_patch, ratelimit_request_patch, *patches): get_version_tags_patch.return_value = None client = GitHubAPI('api.github.com', bearer_token='bearer-token') client.remove_version_tags(repo='org1/repo1', branch='master', noop=False) ratelimit_request_patch.assert_not_called()
def test__get_version_tags_Should_CallAndReturnExpected_When_Called( self, get_latest_version_patch, filter_version_tags_patch, *patches): get_latest_version_patch.return_value = Version('1.2.3-dev.1'), 'sha0' client = GitHubAPI('api.github.com', bearer_token='bearer-token') result = client.get_version_tags(repo='org1/repo1', branch='master') expected_result = (filter_version_tags_patch.return_value, Version('1.2.3-dev.1'), 'sha0') self.assertEqual(result, expected_result)
def test__read_Should_CallExpected_When_Called(self, read_all_patch, match_keys_patch, *patches): client = GitHubAPI('api.github.com', bearer_token='bearer-token') endpoint = '/repos/edgexfoundry/cd-management/milestones' attributes = ['key1', 'key2'] result = client.read(endpoint, attributes=attributes) read_all_patch.assert_called_once_with(endpoint) match_keys_patch.assert_called_once_with(read_all_patch.return_value, attributes) self.assertEqual(result, match_keys_patch.return_value)
def test__remove_version_tags_Should_CallExpected_When_Called( self, get_version_tags_patch, ratelimit_request_patch, *patches): get_version_tags_patch.return_value = ([ ('tag1', 'sha1'), ('tag2', 'sha2') ], '-latest-version-', '-latest-version-sha-') client = GitHubAPI('api.github.com', bearer_token='bearer-token') client.remove_version_tags(repo='org1/repo1', branch='master', noop=True) ratelimit_request_patch.assert_called_with( client.delete, '/repos/org1/repo1/git/refs/tags/tag2', noop=True)
def test__ratelimit_request_Should_CallAndReturnExpected_When_NoRawResponse( self, *patches): client = GitHubAPI('api.github.com', bearer_token='bearer-token') function_mock = Mock() result = client.ratelimit_request(function_mock, 'one', 2, True, k1='v1', k2='v2') function_mock.assert_called_once_with('one', 2, True, k1='v1', k2='v2') self.assertEqual(result, function_mock.return_value)
def test__read_page_Should_ReturnExpected_When_NoEndpoint( self, ratelimit_request_patch, get_next_endpoint_patch, *patches): response_mock1 = Mock() response_mock1.json.return_value = ['page1', 'page2'] ratelimit_request_patch.side_effect = [response_mock1] get_next_endpoint_patch.side_effect = [None] client = GitHubAPI('api.github.com', bearer_token='bearer-token') result = client.read_page('endpoint') self.assertEqual(next(result), 'page1') self.assertEqual(next(result), 'page2') with self.assertRaises(StopIteration): next(result)
def test__read_all_Should_ReturnExpected_When_GetReturnsDict( self, ratelimit_request_patch, get_next_endpoint_patch, *patches): response_mock1 = Mock() response_mock1.json.return_value = {'key1': 'value1'} response_mock2 = Mock() response_mock2.json.return_value = {'key2': 'value2'} ratelimit_request_patch.side_effect = [response_mock1, response_mock2] get_next_endpoint_patch.side_effect = [{ 'Link': 'link-header-value' }, {}] client = GitHubAPI('api.github.com', bearer_token='bearer-token') result = client.read_all( '/repos/edgexfoundry/cd-management/milestones') expected_result = [{'key1': 'value1'}, {'key2': 'value2'}] self.assertEqual(result, expected_result)
def test__get_latest_version_Should_ReturnExpected_When_NoTagFound( self, read_page_patch, lookup_tag_patch, get_version_patch, *patches): read_page_patch.return_value = [{ 'sha': '-sha1-' }, { 'sha': '-sha2-' }, { 'sha': '-sha3-' }] lookup_tag_patch.side_effect = [None, None, None] client = GitHubAPI('api.github.com', bearer_token='bearer-token') tags = ['tag1', 'tag2'] result = client.get_latest_version(repo='soda480/repo1', tags=tags) self.assertEqual(result, (None, None))
def test__get_version_tags_report_Should_ReturnExpected_When_Called( self, get_version_tags_patch, generate_version_report, *patches): get_version_tags_patch.side_effect = [ ('-tags-', '-latest-version-', '-latest-version-sha-'), None, ('-tags-', '-latest-version-', '-latest-version-sha-'), ] generate_version_report.side_effect = [{'repo1': {}}, {'repo3': {}}] client = GitHubAPI('api.github.com', bearer_token='bearer-token') repos = ['repo1', 'repo2', 'repo3'] expression = '<=1.1.1' result = client.get_version_tags_report(repos=repos, expression=expression) expected_result = {'repo1': {}, 'repo2': {}, 'repo3': {}} self.assertEqual(result, expected_result)
def test__get_repos_Should_CallAndReturnExpected_When_UserRegexAttributes( self, read_all_patch, match_repos_patch, *patches): client = GitHubAPI('api.github.com', bearer_token='bearer-token') result = client.get_repos(user='******', include=r'^test_repo.*$', archived=False, disabled=False) read_all_patch.assert_called_once_with('/users/soda480/repos') match_repos_patch.assert_called_once_with( repos=read_all_patch.return_value, owner='soda480', include='^test_repo.*$', exclude=None, archived=False, disabled=False) self.assertEqual(result, match_repos_patch.return_value)
def test__get_repos_Should_CallAndReturnExpected_When_OrganizationExcludeAttributes( self, read_all_patch, match_repos_patch, *patches): client = GitHubAPI('api.github.com', bearer_token='bearer-token') result = client.get_repos(organization='org1', exclude=['repo1', 'repo2'], archived=False, disabled=False) read_all_patch.assert_called_once_with('/orgs/org1/repos') match_repos_patch.assert_called_once_with( repos=read_all_patch.return_value, owner='org1', include=None, exclude=['repo1', 'repo2'], archived=False, disabled=False) self.assertEqual(result, match_repos_patch.return_value)
def test__get_latest_version_Should_CallAndReturnExpected_When_Called( self, read_page_patch, lookup_tag_patch, get_version_patch, *patches): read_page_patch.return_value = [{ 'sha': '-sha1-' }, { 'sha': '-sha2-' }, { 'sha': '-sha3-' }] client = GitHubAPI('api.github.com', bearer_token='bearer-token') tags = ['tag1', 'tag2'] result = client.get_latest_version(repo='soda480/repo1', tags=tags) self.assertEqual(result, (get_version_patch.return_value, '-sha1-')) read_page_patch.assert_called_once_with( '/repos/soda480/repo1/commits?sha=master') lookup_tag_patch.assert_called_with(tags=tags, sha='-sha1-')
def test__remove_version_tags_Should_LogErrorAndContinue_When_Exception( self, get_version_tags_patch, ratelimit_request_patch, logger_patch, *patches): get_version_tags_patch.return_value = ([ ('tag1', 'sha1'), ('tag2', 'sha2') ], '-latest-version-', '-latest-version-sha-') ratelimit_request_patch.side_effect = [ Exception('request error'), None ] client = GitHubAPI('api.github.com', bearer_token='bearer-token') client.remove_version_tags(repo='org1/repo1', branch='master', noop=True) ratelimit_request_patch.assert_called_with( client.delete, '/repos/org1/repo1/git/refs/tags/tag2', noop=True) logger_patch.error.assert_called_with( 'error occurred removing tag tag1 from repo org1/repo1: request error' )
def test__init__Should_RaiseValueError_When_NoBearerToken(self, *patches): with self.assertRaises(ValueError): GitHubAPI('api.github.com')
def test__get_headers_Should_SetAcceptHeader_When_Called(self, *patches): client = GitHubAPI('api.github.com', bearer_token='bearer-token') result = client.get_headers() self.assertEqual(result['Accept'], 'application/vnd.github.v3+json')
def test__get_next_endpoint_Should_ReturnNone_When_NoLinkHeader( self, *patches): client = GitHubAPI('api.github.com', bearer_token='bearer-token') self.assertIsNone(client.get_next_endpoint(None))
def test__get_version_tags_Should_Return_When_NoTags( self, read_all_patch, get_latest_version_patch, *patches): read_all_patch.return_value = [] client = GitHubAPI('api.github.com', bearer_token='bearer-token') client.get_version_tags(repo='org1/repo1', branch='master') get_latest_version_patch.assert_not_called()
def test__get_next_endpoint_Should_ReturnNone_When_NoNextEndpoint( self, *patches): client = GitHubAPI('api.github.com', bearer_token='bearer-token') link_header = '<https://api.github.com/organizations/27781926/repos?page=3>; rel="prev", <https://api.github.com/organizations/27781926/repos?page=1>; rel="first"' result = client.get_next_endpoint(link_header) self.assertIsNone(result)
def test__get_response_Should_CallExpected_When_Called( self, log_ratelimit_patch, *patches): client = GitHubAPI('api.github.com', bearer_token='bearer-token') response_mock = Mock(headers={'key': 'value'}) client.get_response(response_mock) log_ratelimit_patch.assert_called_once_with(response_mock.headers)