"""Tests for gitignore generation.""" import tempfile from pathlib import Path import pytest from project_scaffold_cli.gitignore import GitignoreGenerator class TestGitignoreGenerator: """Test GitignoreGenerator class.""" def test_generator_initialization(self): """Test generator can be initialized.""" gen = GitignoreGenerator() assert gen is not None def test_generate_python_gitignore(self): """Test generating Python .gitignore.""" gen = GitignoreGenerator() with tempfile.TemporaryDirectory() as tmpdir: output_path = Path(tmpdir) / ".gitignore" gen.generate("python", output_path) assert output_path.exists() content = output_path.read_text() assert "__pycache__" in content assert "*.pyc" in content assert "venv/" in content assert ".pytest_cache" in content def test_generate_nodejs_gitignore(self): """Test generating Node.js .gitignore.""" gen = GitignoreGenerator() with tempfile.TemporaryDirectory() as tmpdir: output_path = Path(tmpdir) / ".gitignore" gen.generate("nodejs", output_path) assert output_path.exists() content = output_path.read_text() assert "node_modules" in content assert "npm-debug.log" in content def test_generate_go_gitignore(self): """Test generating Go .gitignore.""" gen = GitignoreGenerator() with tempfile.TemporaryDirectory() as tmpdir: output_path = Path(tmpdir) / ".gitignore" gen.generate("go", output_path) assert output_path.exists() content = output_path.read_text() assert "*.exe" in content assert "vendor/" in content def test_generate_rust_gitignore(self): """Test generating Rust .gitignore.""" gen = GitignoreGenerator() with tempfile.TemporaryDirectory() as tmpdir: output_path = Path(tmpdir) / ".gitignore" gen.generate("rust", output_path) assert output_path.exists() content = output_path.read_text() assert "target/" in content assert "Cargo.lock" in content def test_generate_unsupported_language(self): """Test generating gitignore for unsupported language.""" gen = GitignoreGenerator() with tempfile.TemporaryDirectory() as tmpdir: with pytest.raises(ValueError) as exc_info: gen.generate("unsupported", Path(tmpdir) / ".gitignore") assert "Unsupported language" in str(exc_info.value) def test_append_patterns(self): """Test appending patterns to existing .gitignore.""" gen = GitignoreGenerator() with tempfile.TemporaryDirectory() as tmpdir: gitignore_path = Path(tmpdir) / ".gitignore" gitignore_path.write_text("# Original content\n") gen.append_patterns(gitignore_path, {"*.custom", "secret.txt"}) content = gitignore_path.read_text() assert "*.custom" in content assert "secret.txt" in content def test_get_template_content(self): """Test getting raw template content.""" gen = GitignoreGenerator() python_content = gen.get_template_content("python") assert isinstance(python_content, str) assert len(python_content) > 0 nodejs_content = gen.get_template_content("nodejs") assert isinstance(nodejs_content, str) assert len(nodejs_content) > 0 def test_list_available_templates(self): """Test listing available templates.""" gen = GitignoreGenerator() templates = gen.list_available_templates() assert isinstance(templates, list)