From 5ba5398602c63cdc181f5343db5d53ac8cb6110d Mon Sep 17 00:00:00 2001 From: 7000pctAUTO Date: Thu, 5 Feb 2026 11:01:25 +0000 Subject: [PATCH] Initial upload: Project Scaffold CLI with multi-language templates and CI/CD --- tests/test_templates.py | 147 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 147 insertions(+) create mode 100644 tests/test_templates.py diff --git a/tests/test_templates.py b/tests/test_templates.py new file mode 100644 index 0000000..33cbed7 --- /dev/null +++ b/tests/test_templates.py @@ -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