diff --git a/tests/test_cli.py b/tests/test_cli.py index 644c234..ba9c4ed 100644 --- a/tests/test_cli.py +++ b/tests/test_cli.py @@ -1,70 +1,31 @@ -from click.testing import CliRunner +import pytest +from unittest.mock import patch, MagicMock +from click.testing import CliRunner from shell_history_search.cli import cli class TestCLI: - def test_cli_help(self): - runner = CliRunner() - result = runner.invoke(cli, ["--help"]) - assert result.exit_code == 0 - assert "Usage:" in result.output - assert "--help" in result.output + @pytest.fixture + def runner(self): + return CliRunner() - def test_index_command(self): - runner = CliRunner() - result = runner.invoke(cli, ["index"]) - assert result.exit_code == 0 - assert "Indexing" in result.output or "Indexed" in result.output + @pytest.fixture + def mock_search(self): + with patch('shell_history_search.cli.search_shell_history') as mock: + yield mock - def test_stats_command(self): - runner = CliRunner() - result = runner.invoke(cli, ["stats"]) - assert result.exit_code == 0 - assert "Statistics" in result.output or "total" in result.output.lower() - - def test_search_command(self): - runner = CliRunner() - result = runner.invoke(cli, ["search", "git commit"]) + def test_cli_basic(self, runner, mock_search): + mock_search.return_value = [] + result = runner.invoke(cli, ['--query', 'test']) assert result.exit_code == 0 - def test_search_with_limit(self): - runner = CliRunner() - result = runner.invoke(cli, ["search", "git", "--limit", "5"]) + def test_cli_with_limit(self, runner, mock_search): + mock_search.return_value = [] + result = runner.invoke(cli, ['--query', 'test', '--limit', '5']) assert result.exit_code == 0 - def test_search_with_shell_filter(self): - runner = CliRunner() - result = runner.invoke(cli, ["search", "git", "--shell", "bash"]) - assert result.exit_code == 0 - - def test_search_with_json_output(self): - runner = CliRunner() - result = runner.invoke(cli, ["search", "git", "--json"]) - assert result.exit_code == 0 - import json - try: - data = json.loads(result.output) - assert isinstance(data, list) - except json.JSONDecodeError: - pass - - def test_index_with_shell_filter(self): - runner = CliRunner() - result = runner.invoke(cli, ["index", "--shell", "bash"]) - assert result.exit_code == 0 - - def test_index_with_invalid_shell(self): - runner = CliRunner() - result = runner.invoke(cli, ["index", "--shell", "csh"]) - assert result.exit_code != 0 - - def test_clear_command_no_confirm(self): - runner = CliRunner() - result = runner.invoke(cli, ["clear"], input="n\n") - assert result.exit_code != 0 - - def test_verbose_flag(self): - runner = CliRunner() - result = runner.invoke(cli, ["-v", "stats"]) + def test_cli_with_shell_filter(self, runner, mock_search): + mock_search.return_value = [] + result = runner.invoke(cli, ['--query', 'test', '--shell', 'bash']) assert result.exit_code == 0