"""Unit tests for navi.core.tool_executor."""

from navi.core.registry import ToolRegistry
from navi.core.tool_executor import ToolExecutor
from navi.llm.base import ToolCallRequest
from tests.conftest_factory import FakeTool


class TestToolExecutorMcpAliases:
    async def test_executes_bare_mcp_tool_alias(self):
        registry = ToolRegistry()
        tool = FakeTool("mcp__gnexus_book__search_docs")
        registry.register(tool, builtin=True)
        executor = ToolExecutor(registry)

        messages, images = await executor._execute_tool_calls(
            [ToolCallRequest(id="1", name="search_docs", arguments={"query": "git"})],
            [tool],
        )

        assert images == []
        assert messages[0].name == "mcp__gnexus_book__search_docs"
        assert messages[0].content == "executed mcp__gnexus_book__search_docs"

    async def test_executes_mcp_tool_alias_with_dash_variant(self):
        registry = ToolRegistry()
        tool = FakeTool("mcp__gnexus_book__search_docs")
        registry.register(tool, builtin=True)
        executor = ToolExecutor(registry)

        messages, images = await executor._execute_tool_calls(
            [ToolCallRequest(id="1", name="mcp__gnexus-book__search_docs", arguments={"query": "git"})],
            [tool],
        )

        assert images == []
        assert messages[0].name == "mcp__gnexus_book__search_docs"
        assert messages[0].content == "executed mcp__gnexus_book__search_docs"

    async def test_executes_old_underscore_format_fallback(self):
        registry = ToolRegistry()
        tool = FakeTool("mcp__gnexus_book__search_docs")
        registry.register(tool, builtin=True)
        executor = ToolExecutor(registry)

        messages, images = await executor._execute_tool_calls(
            [ToolCallRequest(id="1", name="mcp_gnexus_book_search_docs", arguments={"query": "git"})],
            [tool],
        )

        assert images == []
        assert messages[0].name == "mcp__gnexus_book__search_docs"
        assert messages[0].content == "executed mcp__gnexus_book__search_docs"

    async def test_executes_legacy_colon_format_fallback(self):
        registry = ToolRegistry()
        tool = FakeTool("mcp__gnexus_book__search_docs")
        registry.register(tool, builtin=True)
        executor = ToolExecutor(registry)

        messages, images = await executor._execute_tool_calls(
            [ToolCallRequest(id="1", name="mcp:gnexus_book:search_docs", arguments={"query": "git"})],
            [tool],
        )

        assert images == []
        assert messages[0].name == "mcp__gnexus_book__search_docs"
        assert messages[0].content == "executed mcp__gnexus_book__search_docs"
