From 93ea61aa437e6c586a35878a7437fbc40a2e3524 Mon Sep 17 00:00:00 2001 From: Gguidini Date: Thu, 17 Aug 2023 10:49:37 -0300 Subject: [PATCH] feat: support gh refresh tokens Depends on codecov/shared#27 TODO: after that is merged update the sha reference in requirements.in Adds support for github app refresh tokens codecov/engineering-team#162 --- requirements.in | 2 +- requirements.txt | 2 +- services/repository.py | 2 +- services/tests/test_repository_service.py | 36 +++++++++++++++++++++-- 4 files changed, 37 insertions(+), 5 deletions(-) diff --git a/requirements.in b/requirements.in index 496cb182c..782015543 100644 --- a/requirements.in +++ b/requirements.in @@ -1,4 +1,4 @@ -git+ssh://git@github.com/codecov/shared.git@6a8a33248804a9c101d34f417efda7c11e4bbe63#egg=shared +git+ssh://git@github.com/codecov/shared.git@680951c4849074db131353b251581ee03029a72a#egg=shared git+ssh://git@github.com/codecov/opentelem-python.git@v0.0.4a1#egg=codecovopentelem boto3 celery diff --git a/requirements.txt b/requirements.txt index 437593381..1507888cb 100644 --- a/requirements.txt +++ b/requirements.txt @@ -251,7 +251,7 @@ s3transfer==0.3.4 # via boto3 sentry-sdk==1.19.1 # via -r requirements.in -shared @ git+ssh://git@github.com/codecov/shared.git@6a8a33248804a9c101d34f417efda7c11e4bbe63 +shared @ git+ssh://git@github.com/codecov/shared.git@680951c4849074db131353b251581ee03029a72a # via -r requirements.in six==1.15.0 # via diff --git a/services/repository.py b/services/repository.py index 41d4dad8c..5e49d64d8 100644 --- a/services/repository.py +++ b/services/repository.py @@ -37,7 +37,7 @@ def get_token_refresh_callback(owner: Owner) -> Callable[[Dict], None]: return None service = owner.service - if service != "gitlab" and service != "gitlab_enterprise": + if service == "bitbucket" or service == "bitbucket_server": return None async def callback(new_token: Dict) -> None: diff --git a/services/tests/test_repository_service.py b/services/tests/test_repository_service.py index 1d43ffb7e..481769ebe 100644 --- a/services/tests/test_repository_service.py +++ b/services/tests/test_repository_service.py @@ -31,7 +31,7 @@ class TestRepositoryServiceTestCase(object): - def test_get_repo_provider_service(self, dbsession): + def test_get_repo_provider_service_github(self, dbsession): repo = RepositoryFactory.create( owner__unencrypted_oauth_token="testyftq3ovzkb3zmt823u3t04lkrt9w", owner__service="github", @@ -55,7 +55,39 @@ def test_get_repo_provider_service(self, dbsession): } assert res.data == expected_data assert repo.owner.service == "github" - assert res._on_token_refresh is None # GH doesn't have callback implemented + assert res._on_token_refresh is not None + assert inspect.isawaitable(res._on_token_refresh(None)) + assert res.token == { + "username": repo.owner.username, + "key": "testyftq3ovzkb3zmt823u3t04lkrt9w", + "secret": None, + } + + def test_get_repo_provider_service_bitbucket(self, dbsession): + repo = RepositoryFactory.create( + owner__unencrypted_oauth_token="testyftq3ovzkb3zmt823u3t04lkrt9w", + owner__service="bitbucket", + name="example-python", + ) + dbsession.add(repo) + dbsession.flush() + res = get_repo_provider_service(repo) + expected_data = { + "owner": { + "ownerid": repo.owner.ownerid, + "service_id": repo.owner.service_id, + "username": repo.owner.username, + }, + "repo": { + "name": "example-python", + "using_integration": False, + "service_id": repo.service_id, + "repoid": repo.repoid, + }, + } + assert res.data == expected_data + assert repo.owner.service == "bitbucket" + assert res._on_token_refresh is None assert res.token == { "username": repo.owner.username, "key": "testyftq3ovzkb3zmt823u3t04lkrt9w",