"""Unit tests for CLI interface.""" import pytest import os from click.testing import CliRunner from code_doc_cli.cli.main import cli, ExitCode class TestCLI: """Tests for CLI commands.""" @pytest.fixture def runner(self): return CliRunner() def test_version_command(self, runner): """Test version command.""" result = runner.invoke(cli, ["version"]) assert result.exit_code == 0 assert "version" in result.output.lower() def test_languages_command(self, runner): """Test languages command.""" result = runner.invoke(cli, ["languages"]) assert result.exit_code == 0 assert "python" in result.output assert "typescript" in result.output assert "go" in result.output def test_init_command(self, runner): """Test init command.""" with runner.isolated_filesystem(): result = runner.invoke(cli, ["init"], input="y\n") assert result.exit_code == 0 assert "code-doc.toml" in result.output def test_generate_no_files_error(self, runner): """Test generate with no files.""" with runner.isolated_filesystem(): result = runner.invoke(cli, ["generate"]) assert result.exit_code == ExitCode.NO_FILES assert "No source files" in result.output def test_generate_python_file(self, runner): """Test generate with Python file.""" with runner.isolated_filesystem(): with open("test.py", "w") as f: f.write(''' def add(a: int, b: int) -> int: """Add two numbers.""" return a + b ''') result = runner.invoke(cli, ["generate", "test.py"]) assert result.exit_code == 0 assert "API Documentation" in result.output assert "add" in result.output class TestExitCodes: """Tests for exit codes.""" @pytest.fixture def runner(self): return CliRunner() def test_success_exit_code(self, runner): """Test successful execution returns 0.""" with runner.isolated_filesystem(): with open("test.py", "w") as f: f.write(''' def add(a: int, b: int) -> int: """Add two numbers.""" return a + b ''') result = runner.invoke(cli, ["generate", "test.py"]) assert result.exit_code == ExitCode.SUCCESS def test_no_files_exit_code(self, runner): """Test no files found returns 1.""" with runner.isolated_filesystem(): result = runner.invoke(cli, ["generate"]) assert result.exit_code == ExitCode.NO_FILES