Spaces:
Build error
Build error
| import asyncio | |
| import unittest | |
| from unittest.mock import AsyncMock, MagicMock, patch | |
| from openhands.cli.main import run_setup_flow | |
| from openhands.core.config import OpenHandsConfig | |
| from openhands.storage.settings.file_settings_store import FileSettingsStore | |
| class TestCLISetupFlow(unittest.TestCase): | |
| """Test the CLI setup flow.""" | |
| async def test_run_setup_flow(self, mock_print, mock_modify_settings): | |
| """Test that the setup flow calls the modify_llm_settings_basic function.""" | |
| # Setup | |
| config = MagicMock(spec=OpenHandsConfig) | |
| settings_store = MagicMock(spec=FileSettingsStore) | |
| mock_modify_settings.return_value = None | |
| # Mock settings_store.load to return a settings object | |
| settings = MagicMock() | |
| settings_store.load = AsyncMock(return_value=settings) | |
| # Execute | |
| result = await run_setup_flow(config, settings_store) | |
| # Verify | |
| mock_modify_settings.assert_called_once_with(config, settings_store) | |
| # Verify that print_formatted_text was called at least twice (for welcome message and instructions) | |
| self.assertGreaterEqual(mock_print.call_count, 2) | |
| # Verify that the function returns True when settings are found | |
| self.assertTrue(result) | |
| async def test_main_calls_setup_flow_when_no_settings( | |
| self, | |
| mock_parse_args, | |
| mock_setup_config, | |
| mock_get_instance, | |
| mock_run_setup_flow, | |
| mock_print, | |
| ): | |
| """Test that main calls run_setup_flow when no settings are found and exits.""" | |
| # Setup | |
| mock_args = MagicMock() | |
| mock_config = MagicMock(spec=OpenHandsConfig) | |
| mock_settings_store = AsyncMock(spec=FileSettingsStore) | |
| # Settings load returns None (no settings) | |
| mock_settings_store.load = AsyncMock(return_value=None) | |
| mock_parse_args.return_value = mock_args | |
| mock_setup_config.return_value = mock_config | |
| mock_get_instance.return_value = mock_settings_store | |
| # Mock run_setup_flow to return True (settings configured successfully) | |
| mock_run_setup_flow.return_value = True | |
| # Import here to avoid circular imports during patching | |
| from openhands.cli.main import main | |
| # Execute | |
| loop = asyncio.get_event_loop() | |
| await main(loop) | |
| # Verify | |
| mock_run_setup_flow.assert_called_once_with(mock_config, mock_settings_store) | |
| # Verify that load was called once (before setup) | |
| self.assertEqual(mock_settings_store.load.call_count, 1) | |
| # Verify that print_formatted_text was called for success messages | |
| self.assertGreaterEqual(mock_print.call_count, 2) | |
| def run_async_test(coro): | |
| loop = asyncio.new_event_loop() | |
| asyncio.set_event_loop(loop) | |
| try: | |
| return loop.run_until_complete(coro) | |
| finally: | |
| loop.close() | |
| if __name__ == '__main__': | |
| unittest.main() | |