79 lines
2.1 KiB
Python
79 lines
2.1 KiB
Python
from __future__ import annotations
|
|
|
|
from uuid import UUID, uuid4
|
|
|
|
import pytest
|
|
from fastapi import HTTPException
|
|
|
|
from app.api import agent as agent_api
|
|
from app.core.agent_auth import AgentAuthContext
|
|
from app.models.agents import Agent
|
|
from app.models.tasks import Task
|
|
|
|
|
|
def _agent_ctx(*, board_id: UUID, is_board_lead: bool) -> AgentAuthContext:
|
|
return AgentAuthContext(
|
|
actor_type="agent",
|
|
agent=Agent(
|
|
id=uuid4(),
|
|
board_id=board_id,
|
|
gateway_id=uuid4(),
|
|
name="Worker",
|
|
is_board_lead=is_board_lead,
|
|
),
|
|
)
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_delete_task_rejects_non_lead_agent() -> None:
|
|
board_id = uuid4()
|
|
task = Task(
|
|
id=uuid4(),
|
|
board_id=board_id,
|
|
title="Obsolete task",
|
|
)
|
|
|
|
with pytest.raises(HTTPException) as exc:
|
|
await agent_api.delete_task(
|
|
task=task,
|
|
session=object(), # type: ignore[arg-type]
|
|
agent_ctx=_agent_ctx(board_id=board_id, is_board_lead=False),
|
|
)
|
|
|
|
assert exc.value.status_code == 403
|
|
assert exc.value.detail == "Only board leads can perform this action"
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_delete_task_allows_board_lead_and_calls_delete_helper(
|
|
monkeypatch: pytest.MonkeyPatch,
|
|
) -> None:
|
|
board_id = uuid4()
|
|
task = Task(
|
|
id=uuid4(),
|
|
board_id=board_id,
|
|
title="Obsolete task",
|
|
)
|
|
session = object()
|
|
called: dict[str, object] = {}
|
|
|
|
async def _fake_delete_task_and_related_records(_session: object, *, task: Task) -> None:
|
|
called["session"] = _session
|
|
called["task_id"] = task.id
|
|
|
|
monkeypatch.setattr(
|
|
agent_api.tasks_api,
|
|
"delete_task_and_related_records",
|
|
_fake_delete_task_and_related_records,
|
|
)
|
|
|
|
response = await agent_api.delete_task(
|
|
task=task,
|
|
session=session, # type: ignore[arg-type]
|
|
agent_ctx=_agent_ctx(board_id=board_id, is_board_lead=True),
|
|
)
|
|
|
|
assert response.ok is True
|
|
assert called["session"] is session
|
|
assert called["task_id"] == task.id
|