mirror of
https://github.com/rennf93/roboco.git
synced 2026-08-03 07:23:24 +02:00
100% Coverage
This commit is contained in:
@@ -0,0 +1,119 @@
|
||||
"""Coverage for roboco.enforcement.task_ownership."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import pytest
|
||||
from roboco.enforcement.task_ownership import (
|
||||
TaskOwnershipError,
|
||||
can_review_task,
|
||||
validate_task_ownership,
|
||||
)
|
||||
|
||||
|
||||
def test_reassign_by_main_pm_allowed() -> None:
|
||||
assert (
|
||||
validate_task_ownership(
|
||||
agent_id="main-pm",
|
||||
task_id="t1",
|
||||
task_assigned_to=None,
|
||||
task_team="backend",
|
||||
action="reassign",
|
||||
)
|
||||
is True
|
||||
)
|
||||
|
||||
|
||||
def test_reassign_by_cell_pm_in_their_cell_allowed() -> None:
|
||||
assert (
|
||||
validate_task_ownership(
|
||||
agent_id="be-pm",
|
||||
task_id="t1",
|
||||
task_assigned_to=None,
|
||||
task_team="backend",
|
||||
action="reassign",
|
||||
)
|
||||
is True
|
||||
)
|
||||
|
||||
|
||||
def test_reassign_by_developer_denied() -> None:
|
||||
"""Non-PM cannot reassign (lines 69-75)."""
|
||||
with pytest.raises(TaskOwnershipError) as exc:
|
||||
validate_task_ownership(
|
||||
agent_id="be-dev-1",
|
||||
task_id="t1",
|
||||
task_assigned_to=None,
|
||||
task_team="backend",
|
||||
action="reassign",
|
||||
)
|
||||
assert "Only PMs" in exc.value.message
|
||||
|
||||
|
||||
def test_reassign_by_cell_pm_outside_cell_denied() -> None:
|
||||
"""Cell PM trying to reassign tasks in another cell (lines 77-83)."""
|
||||
with pytest.raises(TaskOwnershipError) as exc:
|
||||
validate_task_ownership(
|
||||
agent_id="be-pm",
|
||||
task_id="t1",
|
||||
task_assigned_to=None,
|
||||
task_team="frontend",
|
||||
action="reassign",
|
||||
)
|
||||
assert "their cell" in exc.value.message
|
||||
|
||||
|
||||
def test_view_action_always_allowed() -> None:
|
||||
"""View action returns True for any agent (line 88)."""
|
||||
assert (
|
||||
validate_task_ownership(
|
||||
agent_id="be-dev-1",
|
||||
task_id="t1",
|
||||
task_assigned_to="someone-else",
|
||||
task_team="backend",
|
||||
action="view",
|
||||
)
|
||||
is True
|
||||
)
|
||||
|
||||
|
||||
def test_other_action_assigned_to_agent_allowed() -> None:
|
||||
assert (
|
||||
validate_task_ownership(
|
||||
agent_id="be-dev-1",
|
||||
task_id="t1",
|
||||
task_assigned_to="be-dev-1",
|
||||
task_team="backend",
|
||||
action="update",
|
||||
)
|
||||
is True
|
||||
)
|
||||
|
||||
|
||||
def test_other_action_not_assigned_denied() -> None:
|
||||
"""Action by non-assignee raises TaskOwnershipError."""
|
||||
with pytest.raises(TaskOwnershipError) as exc:
|
||||
validate_task_ownership(
|
||||
agent_id="be-dev-1",
|
||||
task_id="t1",
|
||||
task_assigned_to="be-dev-2",
|
||||
task_team="backend",
|
||||
action="update",
|
||||
)
|
||||
assert "be-dev-2" in exc.value.message
|
||||
|
||||
|
||||
def test_can_review_task_self_review_denied() -> None:
|
||||
"""Cannot review your own work (line 118)."""
|
||||
assert can_review_task("be-qa", "be-qa") is False
|
||||
|
||||
|
||||
def test_can_review_task_other_agent_allowed() -> None:
|
||||
assert can_review_task("be-qa", "be-dev-1") is True
|
||||
|
||||
|
||||
def test_task_ownership_error_default_message() -> None:
|
||||
err = TaskOwnershipError(agent_id="a", task_id="t", action="claim")
|
||||
assert "claim" in err.message
|
||||
assert err.agent_id == "a"
|
||||
assert err.task_id == "t"
|
||||
assert err.action == "claim"
|
||||
Reference in New Issue
Block a user