83 lines
2.6 KiB
Python
83 lines
2.6 KiB
Python
"""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
|