Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 18 additions & 3 deletions pr_agent/tools/pr_similar_issue.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,13 @@

class PRSimilarIssue:
def __init__(self, issue_url: str, ai_handler, args: list = None):
if get_settings().config.git_provider != "github":
raise Exception("Only github is supported for similar issue tool")
self.issue_url = issue_url
self.supported = get_settings().config.git_provider == "github"
if not self.supported:
return

self.cli_mode = get_settings().CONFIG.CLI_MODE
self.max_issues_to_scan = get_settings().pr_similar_issue.max_issues_to_scan
self.issue_url = issue_url
self.git_provider = get_git_provider()()
repo_name, issue_number = self.git_provider._parse_issue_url(issue_url.split('=')[-1])
self.git_provider.repo = repo_name
Expand Down Expand Up @@ -257,6 +258,20 @@ def __init__(self, issue_url: str, ai_handler, args: list = None):


async def run(self):
if not self.supported:
message = "The /similar_issue tool is currently supported only for GitHub."
if get_settings().config.publish_output:
try:
from pr_agent.git_providers import get_git_provider_with_context

provider = get_git_provider_with_context(self.issue_url)
provider.publish_comment(message)
except Exception as e:
get_logger().warning(
"Failed to publish /similar_issue unsupported message",
artifact={"error": str(e)},
)
return ""
get_logger().info('Getting issue...')
repo_name, original_issue_number = self.git_provider._parse_issue_url(self.issue_url.split('=')[-1])
issue_main = self.git_provider.repo_obj.get_issue(original_issue_number)
Expand Down
49 changes: 49 additions & 0 deletions tests/unittest/test_similar_issue_non_github.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
import pytest

from pr_agent.tools.pr_similar_issue import PRSimilarIssue


@pytest.mark.asyncio
async def test_similar_issue_non_github_publishes_message(monkeypatch):
class FakeProvider:
def __init__(self):
self.comments = []

def publish_comment(self, body):
self.comments.append(body)

fake_provider = FakeProvider()

class FakeSettings:
class config:
git_provider = "gitlab"
publish_output = True

monkeypatch.setattr("pr_agent.tools.pr_similar_issue.get_settings", lambda: FakeSettings)
monkeypatch.setattr(
"pr_agent.git_providers.get_git_provider_with_context",
lambda _: fake_provider,
)

tool = PRSimilarIssue("https://gitlab.example.com/group/repo/-/merge_requests/1", None)
result = await tool.run()

assert result == ""
assert fake_provider.comments == [
"The /similar_issue tool is currently supported only for GitHub."
]


@pytest.mark.asyncio
async def test_similar_issue_non_github_no_publish(monkeypatch):
class FakeSettings:
class config:
git_provider = "gitlab"
publish_output = False

monkeypatch.setattr("pr_agent.tools.pr_similar_issue.get_settings", lambda: FakeSettings)

tool = PRSimilarIssue("https://gitlab.example.com/group/repo/-/merge_requests/1", None)
result = await tool.run()

assert result == ""