Initial upload: Git AI Documentation Generator v0.1.0
Some checks failed
CI / test (push) Has been cancelled

This commit is contained in:
2026-02-01 19:31:09 +00:00
parent 218f7a6e99
commit 4a5c9744c2

141
tests/test_commands.py Normal file
View File

@@ -0,0 +1,141 @@
"""Tests for CLI commands."""
from unittest.mock import Mock, patch, MagicMock
import pytest
from click.testing import CliRunner
from src.cli import main
from src.commands.commit import commit
from src.commands.changelog import changelog
from src.commands.api_docs import api_docs
from src.config import Config
class TestCommitCommand:
"""Tests for the commit command."""
@pytest.fixture
def runner(self):
"""Create a CLI runner."""
return CliRunner()
@pytest.fixture
def mock_ollama_client(self):
"""Create a mock Ollama client."""
with patch("src.commands.commit.OllamaClient") as mock:
mock_instance = Mock()
mock.return_value = mock_instance
mock_instance.connect_with_retry.return_value = True
mock_instance.generate_commit_message.return_value = "feat: new feature"
yield mock_instance
def test_commit_command_with_staged_changes(self, runner, mock_ollama_client):
"""Test commit command with staged changes."""
with patch("src.commands.commit.get_repo") as mock_get_repo:
mock_repo = Mock()
mock_get_repo.return_value = mock_repo
mock_repo.index.diff.return_value = []
with patch("src.commands.commit.get_staged_diff") as mock_staged:
mock_staged.return_value = "diff content"
result = runner.invoke(commit, ["--staged"], obj={"config": Config()})
assert result.exit_code == 0
def test_commit_command_no_changes(self, runner, mock_ollama_client):
"""Test commit command with no changes."""
with patch("src.commands.commit.get_repo") as mock_get_repo:
mock_repo = Mock()
mock_get_repo.return_value = mock_repo
with patch("src.commands.commit.get_staged_diff") as mock_staged:
mock_staged.return_value = ""
result = runner.invoke(commit, ["--staged"], obj={"config": Config()})
assert "No staged changes" in result.output
class TestChangelogCommand:
"""Tests for the changelog command."""
@pytest.fixture
def runner(self):
"""Create a CLI runner."""
return CliRunner()
@pytest.fixture
def mock_ollama_client(self):
"""Create a mock Ollama client."""
with patch("src.commands.changelog.OllamaClient") as mock:
mock_instance = Mock()
mock.return_value = mock_instance
mock_instance.connect_with_retry.return_value = True
mock_instance.generate_changelog.return_value = "# Changelog\n\n## Features\n- New feature"
yield mock_instance
def test_changelog_command(self, runner, mock_ollama_client):
"""Test changelog command."""
with patch("src.commands.changelog.get_repo") as mock_get_repo:
mock_repo = Mock()
mock_get_repo.return_value = mock_repo
mock_repo.iter_commits.return_value = []
result = runner.invoke(changelog, ["--from", "v1.0.0"], obj={"config": Config()})
assert result.exit_code == 0
class TestApiDocsCommand:
"""Tests for the api-docs command."""
@pytest.fixture
def runner(self):
"""Create a CLI runner."""
return CliRunner()
@pytest.fixture
def mock_ollama_client(self):
"""Create a mock Ollama client."""
with patch("src.commands.api_docs.OllamaClient") as mock:
mock_instance = Mock()
mock.return_value = mock_instance
mock_instance.connect_with_retry.return_value = True
mock_instance.generate_api_docs.return_value = "# API Documentation\n\n## GET /users"
yield mock_instance
def test_api_docs_command(self, runner, mock_ollama_client):
"""Test API docs command."""
with patch("src.commands.api_docs.get_repo") as mock_get_repo:
mock_repo = Mock()
mock_get_repo.return_value = mock_repo
with patch("src.commands.api_docs.get_unstaged_diff") as mock_diff:
mock_diff.return_value = "diff --git a/api.py b/api.py\n+def new_endpoint()"
result = runner.invoke(api_docs, ["--all"], obj={"config": Config()})
assert result.exit_code == 0
class TestMainCLI:
"""Tests for the main CLI."""
@pytest.fixture
def runner(self):
"""Create a CLI runner."""
return CliRunner()
def test_version_command(self, runner):
"""Test version command."""
with patch("src.cli.load_config") as mock_load:
mock_load.return_value = Config()
result = runner.invoke(main, ["version"])
assert result.exit_code == 0
assert "Git AI Documentation Generator" in result.output
def test_help_command(self, runner):
"""Test help command."""
result = runner.invoke(main, ["--help"])
assert result.exit_code == 0
assert "commit" in result.output
assert "changelog" in result.output
assert "api-docs" in result.output