mirror of
https://github.com/Sea-Haven-Industries/open-swe.git
synced 2026-09-30 16:13:15 +00:00
96 lines
2.6 KiB
Python
96 lines
2.6 KiB
Python
from __future__ import annotations
|
|
|
|
from unittest.mock import AsyncMock
|
|
|
|
import pytest
|
|
|
|
from agent.webhooks import common
|
|
|
|
|
|
def _pr(*, author: str = "alice", fork: bool = False) -> dict[str, object]:
|
|
return {
|
|
"user": {"login": author},
|
|
"head": {"repo": {"full_name": "external/repo" if fork else "acme/repo"}},
|
|
"base": {"repo": {"full_name": "acme/repo"}},
|
|
}
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
(
|
|
"team_enabled",
|
|
"repo_enabled",
|
|
"pr_metadata",
|
|
"active_member",
|
|
"expected",
|
|
),
|
|
[
|
|
(False, True, _pr(), True, True),
|
|
(False, False, _pr(), True, False),
|
|
(False, True, _pr(fork=True), True, False),
|
|
(False, True, _pr(), False, False),
|
|
(False, True, _pr(author="open-swe[bot]"), False, True),
|
|
(True, False, _pr(), True, True),
|
|
(True, False, _pr(fork=True), True, False),
|
|
],
|
|
ids=[
|
|
"repo-enabled-trusted-nonfork",
|
|
"disabled",
|
|
"fork",
|
|
"untrusted",
|
|
"internal-bot",
|
|
"team-enabled",
|
|
"team-enabled-fork",
|
|
],
|
|
)
|
|
@pytest.mark.asyncio
|
|
async def test_resolve_verdict_authorization_truth_table(
|
|
monkeypatch: pytest.MonkeyPatch,
|
|
team_enabled: bool,
|
|
repo_enabled: bool,
|
|
pr_metadata: dict[str, object],
|
|
active_member: bool,
|
|
expected: bool,
|
|
) -> None:
|
|
monkeypatch.setattr(
|
|
common,
|
|
"get_team_auto_verdict_enabled",
|
|
AsyncMock(return_value=team_enabled),
|
|
)
|
|
monkeypatch.setattr(
|
|
common,
|
|
"is_auto_verdict_repo_enabled",
|
|
AsyncMock(return_value=repo_enabled),
|
|
)
|
|
monkeypatch.setattr(
|
|
common,
|
|
"is_user_active_org_member",
|
|
AsyncMock(return_value=active_member),
|
|
)
|
|
|
|
authorized = await common._resolve_verdict_authorization(
|
|
{"owner": "acme", "name": "repo"}, pr_metadata
|
|
)
|
|
|
|
assert authorized is expected
|
|
|
|
|
|
def test_build_reviewer_configurable_only_sets_true_verdict_flags() -> None:
|
|
base = {
|
|
"source": "github",
|
|
"github_login": "alice",
|
|
"github_user_id": 1,
|
|
"repo_config": {"owner": "acme", "name": "repo"},
|
|
"pr_number": 7,
|
|
"pr_url": "https://github.com/acme/repo/pull/7",
|
|
"base_sha": "base",
|
|
"head_sha": "head",
|
|
"branch_name": "feature",
|
|
}
|
|
|
|
disabled = common._build_reviewer_configurable(**base)
|
|
authorized = common._build_reviewer_configurable(**base, verdict_authorized=True)
|
|
|
|
assert "verdict_authorized" not in disabled
|
|
assert "verdict_requested" not in disabled
|
|
assert authorized["verdict_authorized"] is True
|
|
assert "verdict_requested" not in authorized
|