mirror of
https://github.com/rennf93/roboco.git
synced 2026-08-03 07:23:24 +02:00
Service-level tests now exercise provider, permissions, project, journal, messaging, work_session, metrics, kanban, extraction, learning, notification, dashboard, llm_routing, a2a, task, repository_base, audit, db_seed, branch_name, indexed_document, query_helpers, agent. API route tests cover provider, journal, project, sessions, dashboard, work_session, tasks, a2a, groups, notifications, agents, channels, messages, kanban, api_resources. Pure-function helpers covered: handlers, deps_helpers, middleware, middleware_docs, transcription, pr templates, agents_config, errors, logging, journal/notification/channel/a2a access, task_lifecycle, streaming, converters, crypto, schemas (common + websocket), events, permissions extras. pyproject ruff per-file-ignores extended for tests so PLR2004 (status code magic values), PLC0415 (lazy imports), PLR0913 (fixture params), ARG001 (unused fixture deps), SIM105, and E501 don't fight test idioms.
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
|