def test_github_api_create_webhook_when_webhook_already_exist_raises_GitIntegrationError( m_get_repo, app): app.config['DEBUG'] = False class MockProject: def get_branch(self, name): return Mock() def create_hook(self, name, config, events, active): raise GithubException( 422, data={ 'message': 'Validation Failed', 'errors': [{ 'resource': 'Hook', 'code': 'custom', 'message': 'Hook already exists on this repository' }], }) m_get_repo.return_value = MockProject() api = GithubAPI('github.com', 'owner', 'repository', 'my-branch') with raises(GitIntegrationError): api.create_webhook()
def test_github_api_verify_request_when_sha_and_secret_dont_match_raises_GitRequestWithInvalidSignature( app): with app.test_request_context( '/', headers={'X-Hub-Signature': 'sha1=veryfakesha'}, data='somepayloaddata'): api = GithubAPI('github.com', 'owner', 'repository') with raises(GitRequestWithInvalidSignature): api.verify_request('mysecretsecret')
def test_github_api_verify_request_when_sha_and_secret_match(app): with app.test_request_context( '/', headers={ 'X-Hub-Signature': 'sha1=eaa6b28f890556a3f01b3db830564fc9b641f898' }, data='somepayloaddata'): api = GithubAPI('github.com', 'owner', 'repository') api.verify_request('mysecretsecret')
def test_github_api_get_file_download_when_file_does_not_exist_raises_GitObjectNotFound( m_get_repo): class MockProject: def get_branch(self, name): return Mock() def get_file_contents(self, filepath, ref): raise UnknownObjectException(404, data={'message': 'Not Found'}) m_get_repo.return_value = MockProject() api = GithubAPI('github.com', 'owner', 'repository', 'my-branch') with raises(GitObjectNotFound): api.get_file_download('README.md')
def test_github_api_with_branch(m_get_repo): class MockProject: def get_branch(self, name): mock = Mock() mock.name = name mock.commit.sha = 'mybranchsha' return mock m_get_repo.return_value = MockProject() api = GithubAPI( 'github.com', 'owner', 'repository', 'my-branch', ) assert api.host == 'github.com' assert api.owner == 'owner' assert api.repo == 'repository' assert api.branch == 'my-branch' assert api.sha == 'mybranchsha' assert api.token == None m_get_repo.assert_called_with('owner/repository', lazy=False) assert str(api) == 'API for github.com/owner/repository/my-branch'
def test_github_api_with_default_branch_when_no_branch_nor_sha_given( m_get_repo): class MockProject: @property def default_branch(self): return 'def-branch' def get_branch(self, name): mock = Mock() mock.name = name mock.commit.sha = 'mybranchsha' return mock m_get_repo.return_value = MockProject() api = GithubAPI('github.com', 'owner', 'repository') assert api.host == 'github.com' assert api.owner == 'owner' assert api.repo == 'repository' assert api.branch == 'def-branch' assert api.sha == 'mybranchsha' assert api.token is None m_get_repo.assert_called_with('owner/repository', lazy=False) assert str(api) == 'API for github.com/owner/repository/def-branch'
def test_github_api_ping_webhook_when_hook_doesnt_exist_raises_GitObjectNotFound( m_get_repo): class MockProject: def get_branch(self, name): return Mock() def get_hook(self, hook_id): assert hook_id == 123 raise UnknownObjectException(404, data={'message': 'Not Found'}) m_get_repo.return_value = MockProject() api = GithubAPI('github.com', 'owner', 'repository', 'my-branch') with raises(GitObjectNotFound): api.ping_webhook(123)
def test_github_api_get_file_download_when_filepath_is_a_directory_raises_GitError( m_get_repo): class MockProject: def get_branch(self, name): return Mock() def get_file_contents(self, filepath, ref): assert filepath == 'dir' return [Mock(path="dir/a.txt"), Mock(path='dir/b.txt')] m_get_repo.return_value = MockProject() api = GithubAPI('github.com', 'owner', 'repository', 'my-branch') with raises(GitError): api.get_file_download('dir')
def test_github_api_ping_webhook(m_get_repo): class MockProject: def get_branch(self, name): return Mock() def get_hook(self, hook_id): assert hook_id == 123 Mock( url= "https://api.github.com/repos/owner_name/myrepository/hooks/123", id=123) m_get_repo.return_value = MockProject() api = GithubAPI('github.com', 'owner', 'repository', 'my-branch') api.ping_webhook(123)
def test_github_api_delete_webhook(m_get_repo, app): class MockProject: def get_branch(self, name): return Mock() def get_hook(self, hook_id): assert hook_id == 12345 return Mock( url="https://api.github.com/repos/owner/repo/hooks/186091239", id=12345, delete=Mock(return_value=None)) m_get_repo.return_value = MockProject() api = GithubAPI('github.com', 'owner', 'repository', 'my-branch') api.delete_webhook(12345)
def test_github_api_create_webhook_when_no_permissions_to_create_a_webhook_raises_GitIntegrationError( m_get_repo, app): app.config['DEBUG'] = False class MockProject: def get_branch(self, name): mock = Mock() mock.name = name mock.commit.sha = 'mybranchsha' return mock def create_hook(self, name, config, events, active): raise UnknownObjectException(404, data={'message': 'Not Found'}) m_get_repo.return_value = MockProject() api = GithubAPI('github.com', 'owner', 'repository', 'my-branch') with raises(GitIntegrationError): api.create_webhook()
def test_github_api_get_file_download(m_get_repo): class MockProject: def get_branch(self, name): mock = Mock() mock.name = name mock.commit.sha = 'mybranchsha' return mock def get_file_contents(self, filepath, ref): assert filepath == 'README.md' assert ref == 'mybranchsha' return Mock(download_url='https://raw.githubusercontent.com/owner/' 'repository/mybranchsha/README.md', size=21) m_get_repo.return_value = MockProject() api = GithubAPI('github.com', 'owner', 'repository', 'my-branch') assert api.get_file_download('README.md') == ( 'https://raw.githubusercontent.com/owner/repository' '/mybranchsha/README.md', 21)
def test_github_api_get_repo_download(m_get_repo, example_user, github_token): class MockProject: def get_branch(self, name): mock = Mock() mock.name = name mock.commit.sha = 'mybranchsha' return mock def get_archive_link(self, format, ref): assert format == 'tarball' assert ref == 'mybranchsha' return ('https://codeload.github.com/owner/repository/' 'legacy.tar.gz/mybranchsha?token=generated_token') m_get_repo.return_value = MockProject() api = GithubAPI('github.com', 'owner', 'repository', 'my-branch', example_user.id) assert api.get_repo_download() == ( 'https://codeload.github.com/owner/repository/' 'legacy.tar.gz/mybranchsha')
def test_github_api_create_webhook(m_get_repo, app): class MockProject: def get_branch(self, name): return Mock() def create_hook(self, name, config, events, active): assert name == 'web' assert config == { 'url': 'http://analysispreservation.cern.ch/api/repos/event', 'content_type': 'json', 'secret': 'mysecret' } assert events == ['release'] assert active is True return Mock( url="https://api.github.com/repos/owner/repo/hooks/186091239", id=186091239) m_get_repo.return_value = MockProject() api = GithubAPI('github.com', 'owner', 'repository', 'my-branch') assert api.create_webhook() == (186091239, 'mysecret')
def test_github_api_when_commit_or_branch_with_sha_doesnt_exist_raises_GitObjectNotFound( m_get_repo): class MockProject: def get_branch(self, name): raise GithubException(404, data={'message': 'Branch not found'}) def get_commit(self, sha): raise GithubException(422, data={'message': 'No commit found for SHA:'}) m_get_repo.return_value = MockProject() with raises(GitObjectNotFound): GithubAPI('github.com', 'owner', 'repository', 'mycommitsha')
def test_github_api_when_just_created_repo_without_any_branches_raises_GitObjectNotFound( m_get_repo): class MockProject: @property def default_branch(self): return 'def-branch' def get_branch(self, name): assert name == 'def-branch' raise GithubException(404, data={'message': 'Branch not found'}) def get_commit(self, sha): raise GithubException(422, data={'message': 'No commit found for SHA:'}) m_get_repo.return_value = MockProject() with raises(GitObjectNotFound): GithubAPI('github.com', 'owner', 'repo')
def test_github_api_auth_headers_when_token_provided(m_get_repo, github_token, example_user): class MockProject: def get_branch(self, name): mock = Mock() mock.name = name mock.commit.sha = 'mybranchsha' return mock m_get_repo.return_value = MockProject() api = GithubAPI('github.com', 'owner', 'repository', 'my-branch', user_id=example_user.id) assert api.token == 'some-token' assert api.auth_headers == {'Authorization': 'token some-token'}
def test_github_api_repo_id(m_get_repo): class MockProject: id = 12 def get_branch(self, name): mock = Mock() mock.name = name mock.commit.sha = 'mybranchsha' return mock m_get_repo.return_value = MockProject() api = GithubAPI( 'github.com', 'owner', 'repository', 'my-branch', ) assert api.repo_id == 12
def test_github_api_auth_headers_when_no_token_provided_returns_empty_dict( m_get_repo, example_user): class MockProject: def get_branch(self, name): mock = Mock() mock.name = name mock.commit.sha = 'mybranchsha' return mock m_get_repo.return_value = MockProject() api = GithubAPI( 'github.com', 'owner', 'repository', 'my-branch', example_user.id, ) assert api.token is None assert api.auth_headers == {}
def test_github_api_with_sha(m_get_repo): class MockProject: def get_branch(self, name): raise GithubException(404, data={'message': 'Branch not found'}) def get_commit(self, sha): mock = Mock() mock.sha = sha return mock m_get_repo.return_value = MockProject() api = GithubAPI('github.com', 'owner', 'repository', 'mycommitsha') assert api.host == 'github.com' assert api.owner == 'owner' assert api.repo == 'repository' assert api.branch is None assert api.sha == 'mycommitsha' assert api.token is None m_get_repo.assert_called_with('owner/repository', lazy=False) assert str(api) == 'API for github.com/owner/repository/mycommitsha'
def test_github_api_when_repostiory_doesnt_exist_or_no_access_raises_GitObjectNotFound( ): with raises(GitObjectNotFound): GithubAPI('github.com', 'owner', 'non-existing-repo')
def test_github_api_when_project_doesnt_exist_or_no_access(): with raises(GitObjectNotFound): GithubAPI('github.com', 'owner', 'repodoesntexist')