"""get_knowledge_counts includes the 'process' type and counts it in total."""
from unittest.mock import AsyncMock, MagicMock, patch

import pytest
from tests.helpers import make_mock_session


def _grouped(rows):
    r = MagicMock()
    r.all.return_value = rows
    return r


def _scalar(n):
    r = MagicMock()
    r.scalar_one.return_value = n
    return r


@pytest.mark.asyncio
async def test_counts_include_process_in_facet_and_total():
    session = make_mock_session()
    # 1) grouped non-task counts, 2) task count, 3) plan count
    session.execute = AsyncMock(side_effect=[
        _grouped([("note", 3), ("process", 2)]),
        _scalar(1),  # tasks
        _scalar(0),  # plans
    ])
    with patch("scribe.services.knowledge.async_session") as cls:
        cls.return_value = session
        from scribe.services.knowledge import get_knowledge_counts
        counts = await get_knowledge_counts(user_id=1)

    assert counts["process"] == 2
    # facet keys all present (setdefault)
    for key in ("note", "task", "plan", "process"):
        assert key in counts
    # total = note(3) + task(1) + process(2)
    assert counts["total"] == 6
