mirror of
https://github.com/rennf93/roboco.git
synced 2026-08-03 07:23:24 +02:00
97 lines
2.9 KiB
Python
97 lines
2.9 KiB
Python
"""Coverage for `permissions.has_privileged_access` and `permissions.is_pm_role`."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from typing import TYPE_CHECKING
|
|
from uuid import uuid4
|
|
|
|
import pytest
|
|
from roboco.db.tables import AgentTable
|
|
from roboco.models import AgentRole, AgentStatus, Team
|
|
from roboco.services.permissions import has_privileged_access, is_pm_role
|
|
|
|
if TYPE_CHECKING:
|
|
from sqlalchemy.ext.asyncio import AsyncSession
|
|
|
|
|
|
def _make_agent(role: AgentRole, team: Team | None = None) -> AgentTable:
|
|
return AgentTable(
|
|
id=uuid4(),
|
|
name=f"agent-{uuid4().hex[:6]}",
|
|
slug=f"a-{uuid4().hex[:6]}",
|
|
role=role,
|
|
team=team,
|
|
status=AgentStatus.ACTIVE,
|
|
model_config={},
|
|
system_prompt="x",
|
|
capabilities=[],
|
|
permissions={},
|
|
metrics={},
|
|
)
|
|
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# has_privileged_access
|
|
# ---------------------------------------------------------------------------
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_has_privileged_access_ceo_true(db_session: AsyncSession) -> None:
|
|
agent = _make_agent(AgentRole.CEO)
|
|
db_session.add(agent)
|
|
await db_session.flush()
|
|
assert await has_privileged_access(db_session, agent.id) is True
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_has_privileged_access_developer_false(
|
|
db_session: AsyncSession,
|
|
) -> None:
|
|
agent = _make_agent(AgentRole.DEVELOPER, Team.BACKEND)
|
|
db_session.add(agent)
|
|
await db_session.flush()
|
|
assert await has_privileged_access(db_session, agent.id) is False
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_has_privileged_access_unknown_id_false(
|
|
db_session: AsyncSession,
|
|
) -> None:
|
|
"""Unknown agent id → False."""
|
|
assert await has_privileged_access(db_session, uuid4()) is False
|
|
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# is_pm_role (lines 456-457)
|
|
# ---------------------------------------------------------------------------
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_is_pm_role_main_pm_true(db_session: AsyncSession) -> None:
|
|
agent = _make_agent(AgentRole.MAIN_PM)
|
|
db_session.add(agent)
|
|
await db_session.flush()
|
|
assert await is_pm_role(db_session, agent.id) is True
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_is_pm_role_developer_false(db_session: AsyncSession) -> None:
|
|
agent = _make_agent(AgentRole.DEVELOPER, Team.BACKEND)
|
|
db_session.add(agent)
|
|
await db_session.flush()
|
|
assert await is_pm_role(db_session, agent.id) is False
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_is_pm_role_ceo_true(db_session: AsyncSession) -> None:
|
|
agent = _make_agent(AgentRole.CEO)
|
|
db_session.add(agent)
|
|
await db_session.flush()
|
|
assert await is_pm_role(db_session, agent.id) is True
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_is_pm_role_unknown_id_false(db_session: AsyncSession) -> None:
|
|
"""Unknown agent id → False (covers role is None branch on line 456-457)."""
|
|
assert await is_pm_role(db_session, uuid4()) is False
|