mirror of
https://github.com/qodo-ai/pr-agent.git
synced 2025-07-02 03:40:38 +08:00
test: auto-trigger /add_docs on PR opened events
This commit is contained in:
92
tests/unittest/test_add_docs_trigger.py
Normal file
92
tests/unittest/test_add_docs_trigger.py
Normal file
@ -0,0 +1,92 @@
|
||||
import pytest
|
||||
from pr_agent.servers.github_app import handle_new_pr_opened
|
||||
from pr_agent.tools.pr_add_docs import PRAddDocs
|
||||
from pr_agent.agent.pr_agent import PRAgent
|
||||
from pr_agent.config_loader import get_settings
|
||||
from pr_agent.identity_providers.identity_provider import Eligibility
|
||||
from pr_agent.identity_providers import get_identity_provider
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
@pytest.mark.parametrize(
|
||||
"action,draft,state,should_run",
|
||||
[
|
||||
("opened", False, "open", True),
|
||||
("edited", False, "open", False),
|
||||
("opened", True, "open", False),
|
||||
("opened", False, "closed", False),
|
||||
],
|
||||
)
|
||||
async def test_add_docs_trigger(monkeypatch, action, draft, state, should_run):
|
||||
# Mock settings to enable the "/add_docs" auto-command on PR opened
|
||||
settings = get_settings()
|
||||
settings.github_app.pr_commands = ["/add_docs"]
|
||||
settings.github_app.handle_pr_actions = ["opened"]
|
||||
|
||||
# Define a FakeGitProvider for both apply_repo_settings and PRAddDocs
|
||||
class FakeGitProvider:
|
||||
def __init__(self, pr_url, *args, **kwargs):
|
||||
self.pr = type("pr", (), {"title": "Test PR"})()
|
||||
self.get_pr_branch = lambda: "test-branch"
|
||||
self.get_pr_description = lambda: "desc"
|
||||
self.get_languages = lambda: ["Python"]
|
||||
self.get_files = lambda: []
|
||||
self.get_commit_messages = lambda: "msg"
|
||||
self.publish_comment = lambda *args, **kwargs: None
|
||||
self.remove_initial_comment = lambda: None
|
||||
self.publish_code_suggestions = lambda suggestions: True
|
||||
self.diff_files = []
|
||||
self.get_repo_settings = lambda: {}
|
||||
|
||||
# Patch Git provider lookups
|
||||
monkeypatch.setattr(
|
||||
"pr_agent.git_providers.utils.get_git_provider_with_context",
|
||||
lambda pr_url: FakeGitProvider(pr_url),
|
||||
)
|
||||
monkeypatch.setattr(
|
||||
"pr_agent.tools.pr_add_docs.get_git_provider",
|
||||
lambda: FakeGitProvider,
|
||||
)
|
||||
|
||||
# Ensure identity provider always eligible
|
||||
monkeypatch.setattr(
|
||||
get_identity_provider().__class__,
|
||||
"verify_eligibility",
|
||||
lambda *args, **kwargs: Eligibility.ELIGIBLE,
|
||||
)
|
||||
|
||||
# Spy on PRAddDocs.run()
|
||||
ran = {"flag": False}
|
||||
|
||||
async def fake_run(self):
|
||||
ran["flag"] = True
|
||||
|
||||
monkeypatch.setattr(PRAddDocs, "run", fake_run)
|
||||
|
||||
# Build minimal PR payload
|
||||
body = {
|
||||
"action": action,
|
||||
"pull_request": {
|
||||
"url": "https://example.com/fake/pr",
|
||||
"state": state,
|
||||
"draft": draft,
|
||||
},
|
||||
}
|
||||
log_context = {}
|
||||
|
||||
# Invoke the PR-open handler
|
||||
agent = PRAgent()
|
||||
await handle_new_pr_opened(
|
||||
body=body,
|
||||
event="pull_request",
|
||||
sender="tester",
|
||||
sender_id="123",
|
||||
action=action,
|
||||
log_context=log_context,
|
||||
agent=agent,
|
||||
)
|
||||
|
||||
assert ran["flag"] is should_run, (
|
||||
f"Expected run() to be {'called' if should_run else 'skipped'}"
|
||||
f" for action={action!r}, draft={draft}, state={state!r}"
|
||||
)
|
Reference in New Issue
Block a user