mirror of
https://github.com/rennf93/roboco.git
synced 2026-08-03 07:23:24 +02:00
53 lines
1.5 KiB
Python
53 lines
1.5 KiB
Python
"""enforcement.a2a_access coverage."""
|
|||
|
|
|
||
|
|
from __future__ import annotations
|
||
|
|
|
||
|
|
import pytest
|
||
|
|
from roboco.enforcement.a2a_access import (
|
||
|
|
A2AAccessDeniedError,
|
||
|
|
get_a2a_allowed_targets,
|
||
|
|
validate_a2a_access,
|
||
|
|
)
|
||
|
|
|
||
|
|
|
||
|
|
def test_validate_a2a_self_a2a_denied() -> None:
|
||
|
|
with pytest.raises(A2AAccessDeniedError, match="cannot A2A yourself"):
|
||
|
|
validate_a2a_access("be-dev-1", "be-dev-1")
|
||
|
|
|
||
|
|
|
||
|
|
def test_validate_a2a_to_ceo_denied() -> None:
|
||
|
|
with pytest.raises(A2AAccessDeniedError):
|
||
|
|
validate_a2a_access("be-dev-1", "ceo")
|
||
|
|
|
||
|
|
|
||
|
|
def test_validate_a2a_within_cell() -> None:
|
||
|
|
"""Cell members can A2A within their cell."""
|
||
|
|
result = validate_a2a_access("be-dev-1", "be-qa")
|
||
|
|
assert result is True
|
||
|
|
|
||
|
|
|
||
|
|
def test_a2a_access_denied_error_has_attributes() -> None:
|
||
|
|
err = A2AAccessDeniedError(
|
||
|
|
from_agent="be-dev-1",
|
||
|
|
to_agent="ceo",
|
||
|
|
reason="CEO is human",
|
||
|
|
)
|
||
|
|
assert err.from_agent == "be-dev-1"
|
||
|
|
assert err.to_agent == "ceo"
|
||
|
|
|
||
|
|
|
||
|
|
def test_get_a2a_allowed_targets_returns_list() -> None:
|
||
|
|
targets = get_a2a_allowed_targets("be-dev-1", ["be-qa", "be-pm", "fe-dev-1", "ceo"])
|
||
|
|
assert isinstance(targets, list)
|
||
|
|
|
||
|
|
|
||
|
|
def test_get_a2a_allowed_targets_excludes_ceo() -> None:
|
||
|
|
targets = get_a2a_allowed_targets("be-dev-1", ["ceo"])
|
||
|
|
assert "ceo" not in targets
|
||
|
|
|
||
|
|
|
||
|
|
def test_get_a2a_allowed_targets_excludes_self() -> None:
|
||
|
|
targets = get_a2a_allowed_targets("be-dev-1", ["be-dev-1", "be-qa"])
|
||
|
|
# Self should be filtered.
|
||
|
|
assert "be-dev-1" not in targets or "be-qa" in targets
|