"""Tests for app.graph module.""" from __future__ import annotations from typing import TYPE_CHECKING from unittest.mock import AsyncMock, MagicMock import pytest from app.graph import SUPERVISOR_PROMPT, build_agent_nodes, build_graph if TYPE_CHECKING: from app.registry import AgentRegistry @pytest.mark.unit class TestBuildAgentNodes: def test_creates_correct_number_of_nodes(self, sample_registry: AgentRegistry) -> None: mock_llm = MagicMock() nodes = build_agent_nodes(sample_registry, mock_llm) assert len(nodes) == 3 def test_nodes_are_runnable(self, sample_registry: AgentRegistry) -> None: mock_llm = MagicMock() nodes = build_agent_nodes(sample_registry, mock_llm) for node in nodes: assert hasattr(node, "invoke") or hasattr(node, "ainvoke") @pytest.mark.unit class TestBuildGraph: def test_graph_compiles_with_mock_checkpointer(self, sample_registry: AgentRegistry) -> None: mock_llm = MagicMock() mock_llm.bind_tools = MagicMock(return_value=mock_llm) mock_llm.with_structured_output = MagicMock(return_value=mock_llm) mock_checkpointer = AsyncMock() graph = build_graph(sample_registry, mock_llm, mock_checkpointer) assert graph is not None def test_supervisor_prompt_contains_routing_info(self) -> None: assert "order_lookup" in SUPERVISOR_PROMPT assert "order_actions" in SUPERVISOR_PROMPT assert "fallback" in SUPERVISOR_PROMPT