Skip to content

Commit

Permalink
feat: add flag to enable/diable sync task (#343)
Browse files Browse the repository at this point in the history
* feat: add flag to enable/diable sync task

* get rid of test fluff
  • Loading branch information
adrian-codecov authored Mar 28, 2024
1 parent b6d10ec commit d2be8d1
Show file tree
Hide file tree
Showing 2 changed files with 98 additions and 5 deletions.
14 changes: 9 additions & 5 deletions tasks/sync_repos.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
sync_repo_languages_task_name,
sync_repos_task_name,
)
from shared.config import get_config
from shared.metrics import metrics
from shared.torngit.exceptions import TorngitClientError
from sqlalchemy import and_
Expand Down Expand Up @@ -115,11 +116,14 @@ def run_impl(
db_session, git, owner, username, using_integration
)

self.sync_repos_languages(
sync_repos_output=sync_repos_output,
manual_trigger=manual_trigger,
current_owner=owner,
)
if get_config(
"setup", "tasks", "sync_repo_languages", "enabled", default=True
):
self.sync_repos_languages(
sync_repos_output=sync_repos_output,
manual_trigger=manual_trigger,
current_owner=owner,
)
except LockError:
log.warning("Unable to sync repos because another task is already doing it")

Expand Down
89 changes: 89 additions & 0 deletions tasks/tests/unit/test_sync_repos_task.py
Original file line number Diff line number Diff line change
Expand Up @@ -965,6 +965,95 @@ def repo_obj(service_id, name, language, private, branch, using_integration):
kwargs={"repoid": new_repo_list[0].repoid, "manual_trigger": False}
)

@pytest.mark.parametrize("use_generator", [False])
@respx.mock
@reuse_cassette(
"tasks/tests/unit/cassetes/test_sync_repos_task/TestSyncReposTaskUnit/test_sync_repos_using_integration.yaml"
)
def test_insert_repo_and_not_call_repo_sync_languages_using_integration(
self,
mocker,
dbsession,
mock_owner_provider,
mock_redis,
use_generator,
):
mocked_app = mocker.patch.object(
SyncReposTask,
"app",
tasks={
sync_repo_languages_task_name: mocker.MagicMock(),
},
)

mocker.patch.object(
LIST_REPOS_GENERATOR_BY_OWNER_ID, "check_value", return_value=use_generator
)
mocker.patch("tasks.sync_repos.get_config", return_value=False)

if use_generator:
respx.post("https://api.github.com/graphql").mock(
httpx.Response(
status_code=200,
content='{"data":{"viewer":{"repositories":{"totalCount": 4}}}}',
headers={"Content-Type": "application/json"},
)
)

token = "ecd73a086eadc85db68747a66bdbd662a785a072"
user = OwnerFactory.create(
organizations=[],
service="github",
username="1nf1n1t3l00p",
unencrypted_oauth_token=token,
permission=[],
service_id="45343385",
)
dbsession.add(user)

def repo_obj(service_id, name, language, private, branch, using_integration):
return {
"owner": {
"service_id": "test-owner-service-id",
"username": "test-owner-username",
},
"repo": {
"service_id": service_id,
"name": name,
"language": language,
"private": private,
"branch": branch,
},
"_using_integration": using_integration,
}

mock_repos = [
repo_obj("159089634", "pytest", "python", False, "main", True),
]
mock_owner_provider.list_repos_using_installation.return_value = mock_repos

preseeded_repos = []
for repo in mock_repos[:-1]:
preseeded_repos.append(
RepositoryFactory.create(
private=repo["repo"]["private"],
name=repo["repo"]["name"],
using_integration=repo["_using_integration"],
service_id=repo["repo"]["service_id"],
owner=user,
)
)

for repo in preseeded_repos:
dbsession.add(repo)
dbsession.flush()

SyncReposTask().run_impl(
dbsession, ownerid=user.ownerid, using_integration=True
)

mocked_app.tasks[sync_repo_languages_task_name].apply_async.assert_not_called()

def test_sync_repos_using_integration_affected_repos_known(
self,
mocker,
Expand Down

0 comments on commit d2be8d1

Please sign in to comment.