from unittest.mock import AsyncMock, patch

import pytest
from tests.helpers import fake_note


pytestmark = pytest.mark.usefixtures("_bind_user")


@pytest.mark.asyncio
async def test_create_task_passes_kind():
    # kind=plan is retired (plans are milestones); 'issue' exercises passthrough.
    mock = AsyncMock(return_value=fake_note(task_kind="issue"))
    with patch("scribe.mcp.tools.tasks.notes_svc.create_note", mock):
        from scribe.mcp.tools.tasks import create_task
        await create_task(title="P", kind="issue")
    assert mock.call_args.kwargs["task_kind"] == "issue"


@pytest.mark.asyncio
async def test_list_tasks_passes_kind_filter():
    mock = AsyncMock(return_value=([], 0))
    with patch("scribe.mcp.tools.tasks.notes_svc.list_notes", mock):
        from scribe.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("scribe.mcp.tools.tasks.notes_svc.list_notes", mock):
        from scribe.mcp.tools.tasks import list_tasks
        await list_tasks()
    assert mock.call_args.kwargs["task_kind"] is None
