import pytest from unittest.mock import MagicMock, patch from src import ai_client from src import summarize from pathlib import Path def test_run_subagent_summarization_gemini(): with patch("src.ai_client._provider", "gemini"), \ patch("src.ai_client._gemini_client") as mock_client, \ patch("src.ai_client._ensure_gemini_client"): mock_resp = MagicMock() mock_resp.text = "Smart Summary" mock_client.models.generate_content.return_value = mock_resp res = ai_client.run_subagent_summarization("test.py", "print('hello')", True, "Outline") assert res == "Smart Summary" mock_client.models.generate_content.assert_called_once() def test_run_subagent_summarization_anthropic(): with patch("src.ai_client._provider", "anthropic"), \ patch("src.ai_client._anthropic_client") as mock_client, \ patch("src.ai_client._ensure_anthropic_client"): mock_resp = MagicMock() mock_block = MagicMock() mock_block.text = "Anthropic Summary" mock_resp.content = [mock_block] mock_client.messages.create.return_value = mock_resp res = ai_client.run_subagent_summarization("test.py", "print('hello')", True, "Outline") assert res == "Anthropic Summary" mock_client.messages.create.assert_called_once() def test_summarise_file_integration(): with patch("src.ai_client.run_subagent_summarization") as mock_run: mock_run.return_value = "Smart AI Summary" # Ensure we don't hit the real cache for this test with patch("src.summarize._summary_cache") as mock_cache: mock_cache.get_summary.return_value = None p = Path("test_file.py") content = "def hello():\n pass" summary = summarize.summarise_file(p, content) assert "Smart AI Summary" in summary assert "**Outline:**" in summary assert "functions: hello" in summary