Add test suite for confgen
This commit is contained in:
109
app/tests/test_cli.py
Normal file
109
app/tests/test_cli.py
Normal file
@@ -0,0 +1,109 @@
|
|||||||
|
"""Tests for CLI commands."""
|
||||||
|
|
||||||
|
import tempfile
|
||||||
|
from pathlib import Path
|
||||||
|
from click.testing import CliRunner
|
||||||
|
|
||||||
|
from src.confgen.cli import main
|
||||||
|
|
||||||
|
|
||||||
|
class TestCLI:
|
||||||
|
"""Tests for CLI commands."""
|
||||||
|
|
||||||
|
def setup_method(self):
|
||||||
|
"""Set up test fixtures."""
|
||||||
|
self.runner = CliRunner()
|
||||||
|
|
||||||
|
def test_main_help(self):
|
||||||
|
"""Test that main command shows help."""
|
||||||
|
result = self.runner.invoke(main, ["--help"])
|
||||||
|
|
||||||
|
assert result.exit_code == 0
|
||||||
|
assert "Generate, validate" in result.output
|
||||||
|
|
||||||
|
def test_generate_command_exists(self):
|
||||||
|
"""Test that generate command exists."""
|
||||||
|
result = self.runner.invoke(main, ["generate", "--help"])
|
||||||
|
|
||||||
|
assert result.exit_code == 0
|
||||||
|
assert "Generate a configuration file" in result.output
|
||||||
|
|
||||||
|
def test_list_command_exists(self):
|
||||||
|
"""Test that list command exists."""
|
||||||
|
result = self.runner.invoke(main, ["list", "--help"])
|
||||||
|
|
||||||
|
assert result.exit_code == 0
|
||||||
|
assert "List available templates" in result.output
|
||||||
|
|
||||||
|
def test_validate_command_exists(self):
|
||||||
|
"""Test that validate command exists."""
|
||||||
|
result = self.runner.invoke(main, ["validate", "--help"])
|
||||||
|
|
||||||
|
assert result.exit_code == 0
|
||||||
|
assert "Validate a configuration file" in result.output
|
||||||
|
|
||||||
|
def test_edit_command_exists(self):
|
||||||
|
"""Test that edit command exists."""
|
||||||
|
result = self.runner.invoke(main, ["edit", "--help"])
|
||||||
|
|
||||||
|
assert result.exit_code == 0
|
||||||
|
assert "interactive editor" in result.output.lower()
|
||||||
|
|
||||||
|
def test_generate_without_template_shows_error(self):
|
||||||
|
"""Test that generate without template shows error."""
|
||||||
|
result = self.runner.invoke(main, ["generate"])
|
||||||
|
|
||||||
|
assert result.exit_code != 0
|
||||||
|
assert "Missing argument" in result.output
|
||||||
|
|
||||||
|
def test_generate_with_nonexistent_template(self):
|
||||||
|
"""Test that generate with nonexistent template shows error."""
|
||||||
|
with tempfile.TemporaryDirectory() as tmpdir:
|
||||||
|
result = self.runner.invoke(main, ["generate", "--template", "nonexistent", "--config-dir", tmpdir])
|
||||||
|
|
||||||
|
assert result.exit_code != 0
|
||||||
|
|
||||||
|
def test_list_with_templates_option(self):
|
||||||
|
"""Test list with --templates option."""
|
||||||
|
with tempfile.TemporaryDirectory() as tmpdir:
|
||||||
|
confgen_yaml = Path(tmpdir) / "confgen.yaml"
|
||||||
|
confgen_yaml.write_text("templates: {}\nenvironments: {}\n")
|
||||||
|
result = self.runner.invoke(main, ["--config-dir", tmpdir, "list", "--templates"])
|
||||||
|
|
||||||
|
assert result.exit_code == 0
|
||||||
|
|
||||||
|
def test_list_with_environments_option(self):
|
||||||
|
"""Test list with --environments option."""
|
||||||
|
with tempfile.TemporaryDirectory() as tmpdir:
|
||||||
|
confgen_yaml = Path(tmpdir) / "confgen.yaml"
|
||||||
|
confgen_yaml.write_text("templates: {}\nenvironments: {}\n")
|
||||||
|
result = self.runner.invoke(main, ["--config-dir", tmpdir, "list", "--environments"])
|
||||||
|
|
||||||
|
assert result.exit_code == 0
|
||||||
|
|
||||||
|
def test_version_option(self):
|
||||||
|
"""Test --version option."""
|
||||||
|
result = self.runner.invoke(main, ["--version"])
|
||||||
|
|
||||||
|
assert result.exit_code == 0
|
||||||
|
assert "0.1.0" in result.output
|
||||||
|
|
||||||
|
def test_environment_option(self):
|
||||||
|
"""Test --environment option."""
|
||||||
|
with tempfile.TemporaryDirectory() as tmpdir:
|
||||||
|
result = self.runner.invoke(main, ["--environment", "staging", "--config-dir", tmpdir, "list"])
|
||||||
|
|
||||||
|
assert result.exit_code == 0
|
||||||
|
|
||||||
|
def test_validate_without_file_shows_error(self):
|
||||||
|
"""Test validate without file shows error."""
|
||||||
|
result = self.runner.invoke(main, ["validate"])
|
||||||
|
|
||||||
|
assert result.exit_code != 0
|
||||||
|
assert "Missing argument" in result.output
|
||||||
|
|
||||||
|
def test_validate_with_nonexistent_file(self):
|
||||||
|
"""Test validate with nonexistent file shows error."""
|
||||||
|
result = self.runner.invoke(main, ["validate", "--config", "/nonexistent/file.yaml"])
|
||||||
|
|
||||||
|
assert result.exit_code != 0
|
||||||
Reference in New Issue
Block a user