Merge pull request #1786 from qodo-ai/pr-1736

Pr 1736
This commit is contained in:
Tal
2025-05-17 15:29:23 +03:00
committed by GitHub
6 changed files with 119 additions and 2 deletions

View File

@ -0,0 +1,79 @@
import pytest
from pr_agent.servers.github_app import should_process_pr_logic as github_should_process_pr_logic
from pr_agent.servers.bitbucket_app import should_process_pr_logic as bitbucket_should_process_pr_logic
from pr_agent.servers.gitlab_webhook import should_process_pr_logic as gitlab_should_process_pr_logic
from pr_agent.config_loader import get_settings
def make_bitbucket_payload(full_name):
return {
"data": {
"pullrequest": {
"title": "Test PR",
"source": {"branch": {"name": "feature/test"}},
"destination": {
"branch": {"name": "main"},
"repository": {"full_name": full_name}
}
},
"actor": {"username": "user", "type": "user"}
}
}
def make_github_body(full_name):
return {
"pull_request": {},
"repository": {"full_name": full_name},
"sender": {"login": "user"}
}
def make_gitlab_body(full_name):
return {
"object_attributes": {"title": "Test MR"},
"project": {"path_with_namespace": full_name}
}
PROVIDERS = [
("github", github_should_process_pr_logic, make_github_body),
("bitbucket", bitbucket_should_process_pr_logic, make_bitbucket_payload),
("gitlab", gitlab_should_process_pr_logic, make_gitlab_body),
]
class TestIgnoreRepositories:
def setup_method(self):
get_settings().set("CONFIG.IGNORE_REPOSITORIES", [])
@pytest.mark.parametrize("provider_name, provider_func, body_func", PROVIDERS)
def test_should_ignore_matching_repository(self, provider_name, provider_func, body_func):
get_settings().set("CONFIG.IGNORE_REPOSITORIES", ["org/repo-to-ignore"])
body = {
"pull_request": {},
"repository": {"full_name": "org/repo-to-ignore"},
"sender": {"login": "user"}
}
result = provider_func(body_func(body["repository"]["full_name"]))
# print(f"DEBUG: Provider={provider_name}, test_should_ignore_matching_repository, result={result}")
assert result is False, f"{provider_name}: PR from ignored repository should be ignored (return False)"
@pytest.mark.parametrize("provider_name, provider_func, body_func", PROVIDERS)
def test_should_not_ignore_non_matching_repository(self, provider_name, provider_func, body_func):
get_settings().set("CONFIG.IGNORE_REPOSITORIES", ["org/repo-to-ignore"])
body = {
"pull_request": {},
"repository": {"full_name": "org/other-repo"},
"sender": {"login": "user"}
}
result = provider_func(body_func(body["repository"]["full_name"]))
# print(f"DEBUG: Provider={provider_name}, test_should_not_ignore_non_matching_repository, result={result}")
assert result is True, f"{provider_name}: PR from non-ignored repository should not be ignored (return True)"
@pytest.mark.parametrize("provider_name, provider_func, body_func", PROVIDERS)
def test_should_not_ignore_when_config_empty(self, provider_name, provider_func, body_func):
get_settings().set("CONFIG.IGNORE_REPOSITORIES", [])
body = {
"pull_request": {},
"repository": {"full_name": "org/repo-to-ignore"},
"sender": {"login": "user"}
}
result = provider_func(body_func(body["repository"]["full_name"]))
# print(f"DEBUG: Provider={provider_name}, test_should_not_ignore_when_config_empty, result={result}")
assert result is True, f"{provider_name}: PR should not be ignored if ignore_repositories config is empty"