from unittest.mock import AsyncMock, MagicMock, patch import pytest from fabledassistant.mcp._context import _user_id_ctx @pytest.fixture(autouse=True) def _bind_user(): token = _user_id_ctx.set(7) yield _user_id_ctx.reset(token) def _fake_note(task_kind="work"): n = MagicMock() n.to_dict.return_value = {"id": 1, "title": "T", "task_kind": task_kind} return n @pytest.mark.asyncio async def test_create_task_passes_kind(): mock = AsyncMock(return_value=_fake_note(task_kind="plan")) with patch("fabledassistant.mcp.tools.tasks.notes_svc.create_note", mock): from fabledassistant.mcp.tools.tasks import create_task await create_task(title="P", kind="plan") assert mock.call_args.kwargs["task_kind"] == "plan" @pytest.mark.asyncio async def test_list_tasks_passes_kind_filter(): mock = AsyncMock(return_value=([], 0)) with patch("fabledassistant.mcp.tools.tasks.notes_svc.list_notes", mock): from fabledassistant.mcp.tools.tasks import list_tasks await list_tasks(kind="plan") assert mock.call_args.kwargs["task_kind"] == "plan" @pytest.mark.asyncio async def test_list_tasks_kind_empty_means_no_filter(): mock = AsyncMock(return_value=([], 0)) with patch("fabledassistant.mcp.tools.tasks.notes_svc.list_notes", mock): from fabledassistant.mcp.tools.tasks import list_tasks await list_tasks() assert mock.call_args.kwargs["task_kind"] is None