open-swe/tests/test_github_review.py
Aran Yogesh 67c782c295
fix: block open-swe from approving PRs (#1177)
* fix: block open-swe from approving PRs

* linting

* fix: add case-insensitive APPROVE guard and unit tests
2026-04-09 11:45:08 -07:00

40 lines
1.8 KiB
Python

"""Tests for github_review tool guards."""
from unittest.mock import patch
from agent.tools.github_review import create_pr_review, submit_pr_review
class TestApproveBlocked:
"""APPROVE event must be rejected in both create and submit."""
def test_create_pr_review_blocks_approve(self):
result = create_pr_review(pull_number=1, body="lgtm", event="APPROVE")
assert result["success"] is False
assert "APPROVE is not allowed" in result["error"]
def test_submit_pr_review_blocks_approve(self):
result = submit_pr_review(pull_number=1, review_id=1, event="APPROVE")
assert result["success"] is False
assert "APPROVE is not allowed" in result["error"]
def test_create_pr_review_blocks_approve_lowercase(self):
result = create_pr_review(pull_number=1, body="lgtm", event="approve")
assert result["success"] is False
assert "APPROVE is not allowed" in result["error"]
def test_submit_pr_review_blocks_approve_mixed_case(self):
result = submit_pr_review(pull_number=1, review_id=1, event="Approve")
assert result["success"] is False
assert "APPROVE is not allowed" in result["error"]
@patch("agent.tools.github_review._get_repo_config", return_value=None)
def test_create_pr_review_allows_comment(self, _mock):
result = create_pr_review(pull_number=1, body="looks good", event="COMMENT")
# Will fail with "No repo config found" but NOT with the approve error
assert "APPROVE is not allowed" not in result.get("error", "")
@patch("agent.tools.github_review._get_repo_config", return_value=None)
def test_create_pr_review_allows_request_changes(self, _mock):
result = create_pr_review(pull_number=1, body="fix this", event="REQUEST_CHANGES")
assert "APPROVE is not allowed" not in result.get("error", "")