import pytest from unittest.mock import patch, MagicMock from click.testing import CliRunner from shell_history_search.cli.commands import cli class TestCLI: @pytest.fixture def runner(self): return CliRunner() def test_cli_basic(self, runner): result = runner.invoke(cli, ['--help']) assert result.exit_code == 0 def test_index_command(self, runner): with patch('shell_history_search.cli.commands.IndexingService') as mock_index: mock_instance = MagicMock() mock_instance.index_shell_history.return_value = {'total_indexed': 0, 'total_skipped': 0} mock_index.return_value = mock_instance result = runner.invoke(cli, ['index']) assert result.exit_code == 0 def test_stats_command(self, runner): with patch('shell_history_search.cli.commands.SearchEngine') as mock_search: mock_instance = MagicMock() mock_instance.get_stats.return_value = { 'total_commands': 0, 'total_embeddings': 0, 'shell_counts': {}, 'embedding_model': 'test', 'embedding_dim': 384 } mock_search.return_value = mock_instance result = runner.invoke(cli, ['stats']) assert result.exit_code == 0