mirror of
https://github.com/Sea-Haven-Industries/open-swe.git
synced 2026-09-30 17:23:15 +00:00
* fix: block open-swe from approving PRs * linting * fix: add case-insensitive APPROVE guard and unit tests
40 lines
1.8 KiB
Python
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", "")
|