Initial upload with CI/CD workflow
Some checks failed
CI / test (push) Has been cancelled

This commit is contained in:
2026-02-02 18:27:19 +00:00
parent 25fd3b70ab
commit 6aa38073dc

107
tests/test_cli.py Normal file
View File

@@ -0,0 +1,107 @@
"""Tests for the CLI interface."""
from unittest.mock import patch, MagicMock
import pytest
from click.testing import CliRunner
from src.cli import main, presets, cache, version
class TestCLIBasic:
"""Tests for basic CLI commands."""
@pytest.fixture
def runner(self):
"""Create a CLI runner."""
return CliRunner()
def test_main_help(self, runner):
"""Test main command help."""
result = runner.invoke(main, ["--help"])
assert result.exit_code == 0
assert "Search GitHub repositories by code patterns" in result.output
def test_version_command(self, runner):
"""Test version command."""
result = runner.invoke(version)
assert result.exit_code == 0
assert "Code Pattern Search CLI" in result.output
def test_presets_command(self, runner):
"""Test presets command."""
result = runner.invoke(presets)
assert result.exit_code == 0
assert "Available Presets" in result.output
def test_presets_list_content(self, runner):
"""Test that presets are listed."""
result = runner.invoke(presets)
assert "python-dataclass" in result.output
assert "react-useeffect" in result.output
def test_cache_clear(self, runner):
"""Test cache clear command."""
with patch("src.cli.CacheManager") as mock_cache:
mock_instance = MagicMock()
mock_cache.return_value = mock_instance
result = runner.invoke(cache, ["--clear"])
assert result.exit_code == 0
mock_instance.clear.assert_called_once()
def test_cache_show_stats(self, runner):
"""Test cache show stats."""
with patch("src.cli.CacheManager") as mock_cache:
mock_instance = MagicMock()
mock_instance.get_stats.return_value = {
"size": 10,
"hits": 100,
"misses": 5,
"cache_size_mb": 1.5,
}
mock_cache.return_value = mock_instance
result = runner.invoke(cache)
assert result.exit_code == 0
assert "10" in result.output
class TestSearchCommandValidation:
"""Tests for search command validation."""
@pytest.fixture
def runner(self):
"""Create a CLI runner."""
return CliRunner()
def test_search_requires_pattern(self, runner):
"""Test that search requires a pattern."""
result = runner.invoke(main, ["search"])
assert result.exit_code != 0
def test_search_with_invalid_regex(self, runner):
"""Test search with invalid regex pattern - handles gracefully."""
result = runner.invoke(main, ["search", r"def\w+", "--repos", "1"])
assert result.exit_code == 0
def test_search_with_unknown_preset(self, runner):
"""Test search with unknown preset shows error."""
result = runner.invoke(main, ["search", "--preset", "nonexistent_preset_xyz"])
assert result.exit_code == 1
assert "Unknown preset" in result.output
def test_search_with_valid_preset(self, runner):
"""Test search with valid preset pattern - should run without error."""
result = runner.invoke(main, ["search", "--preset", "python-dataclass", "--repos", "1"])
assert result.exit_code == 0