From 006d190dfc1bf7acde959c99a7a498e1a284e863 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_cli.py | 75 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 tests/test_cli.py diff --git a/tests/test_cli.py b/tests/test_cli.py new file mode 100644 index 0000000..4f5e489 --- /dev/null +++ b/tests/test_cli.py @@ -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