148 lines
4.7 KiB
Python
148 lines
4.7 KiB
Python
"""Unit tests for the CLI module."""
|
|
import pytest
|
|
import tempfile
|
|
from pathlib import Path
|
|
from click.testing import CliRunner
|
|
|
|
from api_testgen.cli.main import main
|
|
|
|
|
|
class TestCLI:
|
|
"""Tests for CLI commands."""
|
|
|
|
@pytest.fixture
|
|
def sample_spec_file(self, sample_openapi_spec):
|
|
"""Create a temporary OpenAPI spec file."""
|
|
with tempfile.NamedTemporaryFile(mode='w', suffix='.yaml', delete=False) as f:
|
|
import yaml
|
|
yaml.dump(sample_openapi_spec, f)
|
|
return Path(f.name)
|
|
|
|
def test_main_help(self):
|
|
"""Test that main command shows help."""
|
|
runner = CliRunner()
|
|
result = runner.invoke(main, ["--help"])
|
|
|
|
assert result.exit_code == 0
|
|
assert "API TestGen" in result.output
|
|
assert "parse" in result.output
|
|
assert "generate" in result.output
|
|
assert "mock" in result.output
|
|
|
|
def test_parse_without_spec_shows_error(self):
|
|
"""Test that parse without spec shows error."""
|
|
runner = CliRunner()
|
|
result = runner.invoke(main, ["parse"])
|
|
|
|
assert result.exit_code == 1
|
|
assert "Error: --spec option is required" in result.output
|
|
|
|
def test_parse_with_valid_spec(self, sample_spec_file):
|
|
"""Test parsing a valid OpenAPI spec."""
|
|
runner = CliRunner()
|
|
result = runner.invoke(main, ["--spec", str(sample_spec_file), "parse"])
|
|
|
|
assert result.exit_code == 0
|
|
assert "Test Pet Store API" in result.output
|
|
assert "Endpoints: 1" in result.output
|
|
|
|
def test_generate_without_spec_shows_error(self):
|
|
"""Test that generate without spec shows error."""
|
|
runner = CliRunner()
|
|
result = runner.invoke(main, ["generate", "pytest"])
|
|
|
|
assert result.exit_code == 1
|
|
assert "Error: --spec option is required" in result.output
|
|
|
|
def test_generate_pytest(self, sample_spec_file, tmp_path):
|
|
"""Test generating pytest tests."""
|
|
runner = CliRunner()
|
|
result = runner.invoke(main, [
|
|
"--spec", str(sample_spec_file),
|
|
"--output", str(tmp_path),
|
|
"generate", "pytest"
|
|
])
|
|
|
|
assert result.exit_code == 0
|
|
assert "Generated" in result.output
|
|
assert "test_" in result.output
|
|
|
|
def test_generate_jest(self, sample_spec_file, tmp_path):
|
|
"""Test generating Jest tests."""
|
|
runner = CliRunner()
|
|
result = runner.invoke(main, [
|
|
"--spec", str(sample_spec_file),
|
|
"--output", str(tmp_path),
|
|
"generate", "jest"
|
|
])
|
|
|
|
assert result.exit_code == 0
|
|
assert "Generated" in result.output
|
|
assert ".test.js" in result.output or "describe" in result.output
|
|
|
|
def test_generate_go(self, sample_spec_file, tmp_path):
|
|
"""Test generating Go tests."""
|
|
runner = CliRunner()
|
|
result = runner.invoke(main, [
|
|
"--spec", str(sample_spec_file),
|
|
"--output", str(tmp_path),
|
|
"generate", "go"
|
|
])
|
|
|
|
assert result.exit_code == 0
|
|
assert "Generated" in result.output
|
|
assert "_test.go" in result.output
|
|
|
|
def test_mock_without_spec_shows_error(self):
|
|
"""Test that mock without spec shows error."""
|
|
runner = CliRunner()
|
|
result = runner.invoke(main, ["mock"])
|
|
|
|
assert result.exit_code == 1
|
|
assert "Error: --spec option is required" in result.output
|
|
|
|
def test_mock_generate(self, sample_spec_file, tmp_path):
|
|
"""Test generating mock server configuration."""
|
|
runner = CliRunner()
|
|
result = runner.invoke(main, [
|
|
"--spec", str(sample_spec_file),
|
|
"--output", str(tmp_path),
|
|
"mock"
|
|
])
|
|
|
|
assert result.exit_code == 0
|
|
assert "Generated" in result.output
|
|
|
|
def test_all_command(self, sample_spec_file, tmp_path):
|
|
"""Test generating all files with 'all' command."""
|
|
runner = CliRunner()
|
|
result = runner.invoke(main, [
|
|
"--spec", str(sample_spec_file),
|
|
"--output", str(tmp_path),
|
|
"all", "pytest"
|
|
])
|
|
|
|
assert result.exit_code == 0
|
|
assert "Generated" in result.output
|
|
assert "All files generated successfully" in result.output
|
|
|
|
|
|
@pytest.fixture
|
|
def sample_openapi_spec():
|
|
"""Sample OpenAPI specification for testing."""
|
|
return {{
|
|
"openapi": "3.0.0",
|
|
"info": {{
|
|
"title": "Test Pet Store API",
|
|
"version": "1.0.0"
|
|
}},
|
|
"paths": {{
|
|
"/pets": {{
|
|
"get": {{
|
|
"summary": "List all pets",
|
|
"responses": {{"200": {{"description": "OK"}}}}
|
|
}}
|
|
}}
|
|
}}
|
|
}}
|