from unittest.mock import MagicMock, AsyncMock, patch import pytest from main import main pytestmark = pytest.mark.anyio @patch("main.load_dotenv") @patch("main.os.chdir") @patch("main.GiteaClient") @patch("main.AgentOrchestrator") async def test_main_startup_success( mock_orchestrator_class: MagicMock, mock_client_class: MagicMock, mock_chdir: MagicMock, mock_load_dotenv: MagicMock ) -> None: mock_client = MagicMock() mock_client_class.return_value = mock_client mock_user = MagicMock() mock_user.login = "agent-test" mock_client.repos.get_authenticated_user.return_value = mock_user mock_orchestrator = MagicMock() mock_orchestrator.poll_and_dispatch = AsyncMock(side_effect=KeyboardInterrupt()) mock_orchestrator_class.return_value = mock_orchestrator # Run main; it should exit gracefully on KeyboardInterrupt await main() mock_client.repos.get_authenticated_user.assert_called_once() mock_orchestrator.poll_and_dispatch.assert_called_once() @patch("main.load_dotenv") @patch("main.os.chdir") @patch("main.GiteaClient") @patch("main.AgentOrchestrator") async def test_main_startup_fails_no_authenticated_user( mock_orchestrator_class: MagicMock, mock_client_class: MagicMock, mock_chdir: MagicMock, mock_load_dotenv: MagicMock ) -> None: mock_client = MagicMock() mock_client_class.return_value = mock_client # Simulate no user returned mock_client.repos.get_authenticated_user.return_value = None with pytest.raises(SystemExit) as exc_info: await main() assert exc_info.value.code == 1 mock_orchestrator_class.assert_not_called()