"""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