From e533968ca96447c92b7e0db5a2cb9ad3518189f5 Mon Sep 17 00:00:00 2001 From: 7000pctAUTO Date: Thu, 29 Jan 2026 16:55:30 +0000 Subject: [PATCH] Add integration tests --- .tests/integration/test_full_workflow.py | 130 +++++++++++++++++++++++ 1 file changed, 130 insertions(+) create mode 100644 .tests/integration/test_full_workflow.py diff --git a/.tests/integration/test_full_workflow.py b/.tests/integration/test_full_workflow.py new file mode 100644 index 0000000..83feaee --- /dev/null +++ b/.tests/integration/test_full_workflow.py @@ -0,0 +1,130 @@ +"""Integration tests for complete workflow.""" + +import pytest +import os +import shutil +from click.testing import CliRunner +from code_doc_cli.cli.main import cli + + +class TestFullWorkflow: + """Integration tests for the complete documentation workflow.""" + + @pytest.fixture + def runner(self): + return CliRunner() + + @pytest.fixture + def python_project(self, tmp_path): + """Create a Python project for testing.""" + project_dir = tmp_path / "python_project" + project_dir.mkdir() + + main_py = project_dir / "main.py" + main_py.write_text(''' +"""Main module of the application.""" + +def process_items(items): + """Process a list of items. + + Args: + items: Input items to process + + Returns: + Processed items + """ + return [item.strip() for item in items] +''') + + utils_py = project_dir / "utils.py" + utils_py.write_text(''' +"""Utility functions module.""" + +def validate_input(value): + """Validate input value. + + Args: + value: Value to validate + + Returns: + True if valid + """ + return len(value) > 0 +''') + + return project_dir + + def test_python_only_project(self, runner, python_project): + """Test processing a Python-only project.""" + with runner.isolated_filesystem(): + shutil.copytree(str(python_project), "project", dirs_exist_ok=True) + result = runner.invoke(cli, ["generate", "project"]) + assert result.exit_code == 0 + + output = result.output + assert "process_items" in output + assert "validate_input" in output + + def test_module_docstring_extraction(self, runner, python_project): + """Test module-level docstring extraction.""" + with runner.isolated_filesystem(): + shutil.copytree(str(python_project), "project", dirs_exist_ok=True) + result = runner.invoke(cli, ["generate", "project"]) + assert result.exit_code == 0 + assert "Main module" in result.output or "Utility" in result.output + + def test_return_type_documentation(self, runner, python_project): + """Test return type documentation extraction.""" + with runner.isolated_filesystem(): + shutil.copytree(str(python_project), "project", dirs_exist_ok=True) + result = runner.invoke(cli, ["generate", "project"]) + assert result.exit_code == 0 + assert "Returns:" in result.output + + +class TestCICDIntegration: + """Tests for CI/CD integration features.""" + + @pytest.fixture + def runner(self): + return CliRunner() + + @pytest.fixture + def sample_project(self, tmp_path): + """Create a sample project for CI/CD testing.""" + project_dir = tmp_path / "ci_project" + project_dir.mkdir() + + file_py = project_dir / "example.py" + file_py.write_text(''' +"""Example module for CI/CD testing.""" + +def hello(name): + """Say hello to someone. + + Args: + name: Person's name + + Returns: + Greeting message + """ + return f"Hello, {name}!" +''') + + return project_dir + + def test_exit_code_success(self, runner, sample_project): + """Test exit code on success.""" + with runner.isolated_filesystem(): + shutil.copytree(str(sample_project), "project", dirs_exist_ok=True) + result = runner.invoke(cli, ["generate", "project"]) + assert result.exit_code == 0 + + def test_exit_code_no_files(self, runner, tmp_path): + """Test exit code when no files found.""" + empty_dir = tmp_path / "empty" + empty_dir.mkdir() + + with runner.isolated_filesystem(): + result = runner.invoke(cli, ["generate", str(empty_dir)]) + assert result.exit_code == 1