def test_api_repo_list(client): user = factories.User(github_oauth_token='token') repo1 = factories.GithubRepo(name='name1', users=[user]) repo2 = factories.GithubRepo(name='name2', users=[user]) with client.session_transaction() as session: session['user_id'] = user.id response = client.get('/github/api/repo') assert response.status_code == 200 assert get_response_data(response) == { 'repos': [ { 'id': repo1.id, 'name': repo1.name, 'active': repo1.active }, { 'id': repo2.id, 'name': repo2.name, 'active': repo2.active }, ], 'syncing': False, 'error': None, }
def test_create_job_pr_other_action(set_commit_status, run_validation, client): user = factories.User(github_oauth_token='xxx') source = factories.GithubRepo(name='test-org/example', users=[user]) data = json.dumps({ 'action': 'labeled', 'pull_request': { 'number': 3, 'title': 'Test PR', 'user': { 'login': '******', }, 'head': { 'repo': {'name': 'example', 'owner': {'login': '******'}}, 'sha': 'test-sha', }, 'base': { 'repo': {'name': 'example', 'owner': {'login': '******'}}, } }, }) signature = create_signature(settings.GITHUB_HOOK_SECRET, data) response = client.post( '/github/hook', headers={'X-Hub-Signature': signature}, content_type='application/json', data=data) assert response.status_code == 200 assert len(source.jobs) == 0
def test_create_job_pr(set_commit_status, run_validation, client): user = factories.User(github_oauth_token='xxx') factories.GithubRepo(name='test-org/example', users=[user]) data = json.dumps({ 'action': 'opened', 'pull_request': { 'number': 3, 'title': 'Test PR', 'user': { 'login': '******', }, 'head': { 'repo': {'name': 'example', 'owner': {'login': '******'}}, 'sha': 'test-sha', }, 'base': { 'repo': {'name': 'example', 'owner': {'login': '******'}}, } }, }) signature = create_signature(settings.GITHUB_HOOK_SECRET, data) response = client.post( '/github/hook', headers={'X-Hub-Signature': signature}, content_type='application/json', data=data) job_id = get_response_data(response)['job_id'] job = models.job.get(job_id) assert job['id'] == job_id assert job['created'] assert job['status'] == 'created'
def test_create_job_push(set_commit_status, run_validation, client): user = factories.User(github_oauth_token='xxx') factories.GithubRepo(name='test-org/example', users=[user]) data = json.dumps({ 'ref': 'refs/head/some-branch', 'repository': { 'name': 'example', 'owner': {'name': 'test-org'}, }, 'head_commit': { 'id': 'xxx', 'message': 'Test commit', 'author': {'username': '******'}}, }) signature = create_signature(settings.GITHUB_HOOK_SECRET, data) response = client.post( '/github/hook', headers={'X-Hub-Signature': signature}, content_type='application/json', data=data) job_id = get_response_data(response)['job_id'] job = models.job.get(job_id) assert job['id'] == job_id assert job['created'] assert job['status'] == 'created'
def test_signal_sets_status(set_commit_status): conf = { 'owner': 'test-org', 'repo': 'test-repo', 'sha': 'abcde', 'is_pr': True } integration = factories.Integration() repo = factories.GithubRepo(integration_name=integration.name) job = factories.Job(integration_name='github', conf=conf, status='success', number=3, source=repo) post_task_handler(retval=job.to_dict(), kwargs={'job_id': job.id}, state='SUCCESS') set_commit_status.assert_called_with( 'success', owner='test-org', repo='test-repo', sha='abcde', is_pr=True, job_number=3, tokens=job.source.tokens, )
def test_create_job(set_commit_status, client, celery_app): # TODO: refactor to not use actual calls! user = factories.User(github_oauth_token=settings.GITHUB_API_TOKEN) factories.GithubRepo(name='frictionlessdata/goodtables.io-example', users=[user]) data = json.dumps({ 'repository': { 'name': 'goodtables.io-example', 'owner': { 'name': 'frictionlessdata' }, }, 'head_commit': { 'id': 'd5be243487d9882d7f762e7fa04b36b900164a59' }, }) signature = create_signature(settings.GITHUB_HOOK_SECRET, data) response = client.post('/github/hook', headers={'X-Hub-Signature': signature}, content_type='application/json', data=data) job_id = get_response_data(response)['job_id'] job = models.job.get(job_id) assert job['id'] == job_id assert job['created'] assert job['finished'] assert job['status'] == 'failure' assert job['report']
def test_update(): repo = factories.GithubRepo() (database['session'].query(GithubRepo).filter_by(id=repo.id).update( {'name': 'owner/new_repo'})) database['session'].commit() repos = database['session'].query(GithubRepo).all() assert len(repos) == 1 assert repos[0].repo == 'new_repo'
def test_badge_works_on_github_repos(client): repo = factories.GithubRepo() factories.Job(source=repo, integration_name='github', status='success') response = client.get('/badge/github/{}/{}.svg'.format( repo.owner, repo.repo)) assert response.content_type == 'image/svg+xml' assert b'>valid</text></g>' in response.get_data()
def test_api_repo_deactivate(deactivate_hook, client): user = factories.User(github_oauth_token='token') repo = factories.GithubRepo(name='owner/repo', users=[user]) with client.session_transaction() as session: session['user_id'] = user.id response = client.get('/github/api/repo/%s/deactivate' % repo.id) deactivate_hook.assert_called_with('token', 'owner', 'repo') assert response.status_code == 200 assert get_response_data(response) == { 'error': None, }
def test_api_repo(client): user = factories.User(github_oauth_token='token') repo = factories.GithubRepo(name='name', users=[user]) with client.session_transaction() as session: session['user_id'] = user.id response = client.get('/github/api/repo/%s' % repo.id) assert response.status_code == 200 assert get_response_data(response) == { 'repo': {'id': repo.id, 'name': repo.name, 'active': repo.active, 'integration_name': 'github'}, 'error': None, }
def test_delete_bucket(): user = factories.User() factories.GithubRepo(users=[user], active=True) bucket = factories.S3Bucket(users=[user], active=True) bucket = database['session'].query(S3Bucket).one() database['session'].delete(bucket) database['session'].commit() users = database['session'].query(User).all() buckets = database['session'].query(S3Bucket).all() assert len(users) == 1 assert len(users[0].sources) == 1 assert len(buckets) == 0
def test_api_repo_activate(get_default_repo_details, set_commit_status, run_validation, activate_hook, client): get_default_repo_details.return_value = None user = factories.User(github_oauth_token='token') repo = factories.GithubRepo(name='owner/repo', users=[user]) with client.session_transaction() as session: session['user_id'] = user.id response = client.get('/github/api/repo/%s/activate' % repo.id) activate_hook.assert_called_with('token', 'owner', 'repo') assert response.status_code == 200 assert get_response_data(response) == { 'error': None, }
def test_api_repo_not_authorized(client): user = factories.User(github_oauth_token='token') repo = factories.GithubRepo(name='name', users=[user]) response = client.get('/github/api/repo/%s' % repo.id) assert response.status_code == 401