Initial upload: Project Scaffold CLI with multi-language templates and CI/CD

This commit is contained in:
2026-02-05 11:01:25 +00:00
parent 006d190dfc
commit 5ba5398602

147
tests/test_templates.py Normal file
View File

@@ -0,0 +1,147 @@
"""Tests for template engine."""
import tempfile
from pathlib import Path
from unittest.mock import MagicMock, patch
import pytest
from project_scaffold_cli.template_engine import TemplateEngine
from project_scaffold_cli.config import Config
class TestTemplateEngine:
"""Test TemplateEngine class."""
def test_engine_initialization(self):
"""Test engine can be initialized."""
engine = TemplateEngine()
assert engine is not None
assert engine.SUPPORTED_LANGUAGES == ["python", "nodejs", "go", "rust"]
def test_render_language_template_python(self):
"""Test rendering Python template."""
engine = TemplateEngine()
context = {
"project_name": "test-project",
"project_slug": "test-project",
"author": "Test Author",
"email": "test@example.com",
"description": "A test project",
"license": "MIT",
"year": "2024",
"language": "python",
}
with tempfile.TemporaryDirectory() as tmpdir:
output_dir = Path(tmpdir) / "test-project"
output_dir.mkdir()
engine.render_language_template("python", context, output_dir)
assert (output_dir / "setup.py").exists()
assert (output_dir / "README.md").exists()
def test_render_language_template_go(self):
"""Test rendering Go template."""
engine = TemplateEngine()
context = {
"project_name": "test-go-project",
"project_slug": "test-go-project",
"author": "Test Author",
"email": "test@example.com",
"description": "A test Go project",
"license": "MIT",
"year": "2024",
"language": "go",
}
with tempfile.TemporaryDirectory() as tmpdir:
output_dir = Path(tmpdir) / "test-go-project"
output_dir.mkdir()
engine.render_language_template("go", context, output_dir)
assert (output_dir / "go.mod").exists()
assert (output_dir / "main.go").exists()
assert (output_dir / "README.md").exists()
def test_render_language_template_rust(self):
"""Test rendering Rust template."""
engine = TemplateEngine()
context = {
"project_name": "test-rust-project",
"project_slug": "test-rust-project",
"author": "Test Author",
"email": "test@example.com",
"description": "A test Rust project",
"license": "MIT",
"year": "2024",
"language": "rust",
}
with tempfile.TemporaryDirectory() as tmpdir:
output_dir = Path(tmpdir) / "test-rust-project"
output_dir.mkdir()
engine.render_language_template("rust", context, output_dir)
assert (output_dir / "Cargo.toml").exists()
assert (output_dir / "src" / "main.rs").exists()
assert (output_dir / "README.md").exists()
def test_render_language_template_unsupported(self):
"""Test rendering unsupported language."""
engine = TemplateEngine()
context = {"project_name": "test"}
with tempfile.TemporaryDirectory() as tmpdir:
with pytest.raises(ValueError) as exc_info:
engine.render_language_template(
"unsupported", context, Path(tmpdir)
)
assert "Unsupported language" in str(exc_info.value)
def test_render_ci_template_github(self):
"""Test rendering GitHub Actions CI template."""
engine = TemplateEngine()
context = {
"project_name": "test-project",
"project_slug": "test-project",
}
with tempfile.TemporaryDirectory() as tmpdir:
output_dir = Path(tmpdir)
engine.render_ci_template("github", context, output_dir)
workflow_path = (
output_dir / ".github" / "workflows" / "ci.yml"
)
assert workflow_path.exists()
content = workflow_path.read_text()
assert "CI" in content
def test_render_ci_template_gitlab(self):
"""Test rendering GitLab CI template."""
engine = TemplateEngine()
context = {
"project_name": "test-project",
"project_slug": "test-project",
}
with tempfile.TemporaryDirectory() as tmpdir:
output_dir = Path(tmpdir)
engine.render_ci_template("gitlab", context, output_dir)
assert (output_dir / ".gitlab-ci.yml").exists()
def test_validate_context_missing_required(self):
"""Test context validation with missing required fields."""
engine = TemplateEngine()
missing = engine.validate_context({})
assert "project_name" in missing
assert "author" in missing
def test_validate_context_complete(self):
"""Test context validation with all required fields."""
engine = TemplateEngine()
context = {"project_name": "test", "author": "Test Author"}
missing = engine.validate_context(context)
assert len(missing) == 0