Initial upload: Project Scaffold CLI with multi-language templates and CI/CD
This commit is contained in:
75
tests/test_cli.py
Normal file
75
tests/test_cli.py
Normal file
@@ -0,0 +1,75 @@
|
|||||||
|
"""Tests for CLI commands."""
|
||||||
|
|
||||||
|
import os
|
||||||
|
import tempfile
|
||||||
|
from pathlib import Path
|
||||||
|
from unittest.mock import patch, MagicMock
|
||||||
|
|
||||||
|
import pytest
|
||||||
|
from click.testing import CliRunner
|
||||||
|
|
||||||
|
from project_scaffold_cli.cli import main, _validate_project_name, _to_kebab_case
|
||||||
|
|
||||||
|
|
||||||
|
class TestMain:
|
||||||
|
"""Test main CLI entry point."""
|
||||||
|
|
||||||
|
def test_main_version(self):
|
||||||
|
"""Test --version flag."""
|
||||||
|
runner = CliRunner()
|
||||||
|
result = runner.invoke(main, ["--version"])
|
||||||
|
assert result.exit_code == 0
|
||||||
|
assert "1.0.0" in result.output
|
||||||
|
|
||||||
|
def test_main_help(self):
|
||||||
|
"""Test --help flag."""
|
||||||
|
runner = CliRunner()
|
||||||
|
result = runner.invoke(main, ["--help"])
|
||||||
|
assert result.exit_code == 0
|
||||||
|
assert "create" in result.output
|
||||||
|
|
||||||
|
|
||||||
|
class TestCreateCommand:
|
||||||
|
"""Test create command."""
|
||||||
|
|
||||||
|
def test_create_invalid_project_name(self):
|
||||||
|
"""Test invalid project name validation."""
|
||||||
|
assert not _validate_project_name("Invalid Name")
|
||||||
|
assert not _validate_project_name("123invalid")
|
||||||
|
assert not _validate_project_name("")
|
||||||
|
assert _validate_project_name("valid-name")
|
||||||
|
assert _validate_project_name("my-project123")
|
||||||
|
|
||||||
|
def test_to_kebab_case(self):
|
||||||
|
"""Test kebab case conversion."""
|
||||||
|
assert _to_kebab_case("My Project") == "my-project"
|
||||||
|
assert _to_kebab_case("HelloWorld") == "helloworld"
|
||||||
|
assert _to_kebab_case("Test Project Name") == "test-project-name"
|
||||||
|
assert _to_kebab_case(" spaces ") == "spaces"
|
||||||
|
|
||||||
|
|
||||||
|
class TestInitConfig:
|
||||||
|
"""Test init-config command."""
|
||||||
|
|
||||||
|
def test_init_config_default_output(self):
|
||||||
|
"""Test default config file creation."""
|
||||||
|
runner = CliRunner()
|
||||||
|
with tempfile.TemporaryDirectory() as tmpdir:
|
||||||
|
original_dir = Path.cwd()
|
||||||
|
try:
|
||||||
|
os.chdir(tmpdir)
|
||||||
|
result = runner.invoke(main, ["init-config"])
|
||||||
|
assert result.exit_code == 0
|
||||||
|
assert Path("project.yaml").exists()
|
||||||
|
finally:
|
||||||
|
os.chdir(original_dir)
|
||||||
|
|
||||||
|
|
||||||
|
class TestTemplateCommands:
|
||||||
|
"""Test template management commands."""
|
||||||
|
|
||||||
|
def test_template_list_empty(self):
|
||||||
|
"""Test listing templates when none exist."""
|
||||||
|
runner = CliRunner()
|
||||||
|
result = runner.invoke(main, ["template", "list"])
|
||||||
|
assert result.exit_code == 0
|
||||||
Reference in New Issue
Block a user