152 lines
5.5 KiB
Python
152 lines
5.5 KiB
Python
from src.generator import GitignoreGenerator
|
|
|
|
|
|
class TestGitignoreGenerator:
|
|
def test_init(self):
|
|
generator = GitignoreGenerator()
|
|
assert generator.selected_templates == set()
|
|
|
|
def test_add_template(self):
|
|
generator = GitignoreGenerator()
|
|
generator.add_template("python")
|
|
assert "python" in generator.selected_templates
|
|
|
|
def test_add_invalid_template(self):
|
|
generator = GitignoreGenerator()
|
|
generator.add_template("invalid_template")
|
|
assert "invalid_template" not in generator.selected_templates
|
|
|
|
def test_remove_template(self):
|
|
generator = GitignoreGenerator()
|
|
generator.add_template("python")
|
|
generator.remove_template("python")
|
|
assert "python" not in generator.selected_templates
|
|
|
|
def test_get_template_path_valid(self):
|
|
generator = GitignoreGenerator()
|
|
path = generator.get_template_path("python")
|
|
assert path is not None
|
|
assert path.exists()
|
|
assert "python.gitignore" in str(path)
|
|
|
|
def test_get_template_path_invalid(self):
|
|
generator = GitignoreGenerator()
|
|
path = generator.get_template_path("invalid_template")
|
|
assert path is None
|
|
|
|
def test_load_template(self):
|
|
generator = GitignoreGenerator()
|
|
content = generator.load_template("python")
|
|
assert content is not None
|
|
assert len(content) > 0
|
|
assert "__pycache__" in content
|
|
|
|
def test_load_template_invalid(self):
|
|
generator = GitignoreGenerator()
|
|
content = generator.load_template("invalid_template")
|
|
assert content == ""
|
|
|
|
def test_load_template_lines(self):
|
|
generator = GitignoreGenerator()
|
|
lines = generator.load_template_lines("python")
|
|
assert isinstance(lines, list)
|
|
assert len(lines) > 0
|
|
assert all(isinstance(line, str) for line in lines)
|
|
|
|
def test_deduplicate_entries(self):
|
|
generator = GitignoreGenerator()
|
|
entries = ["*.pyc", "*.pyc", "__pycache__", "__pycache__"]
|
|
result = generator.deduplicate_entries(entries)
|
|
assert len(result) == 2
|
|
assert "*.pyc" in result
|
|
assert "__pycache__" in result
|
|
|
|
def test_deduplicate_entries_with_comments(self):
|
|
generator = GitignoreGenerator()
|
|
entries = ["*.pyc", "*.pyc"]
|
|
comments = ["# PYTHON", "# PYTHON"]
|
|
result = generator.deduplicate_entries(entries, comments)
|
|
assert len(result) == 3
|
|
assert result[0] == "# PYTHON"
|
|
assert "*.pyc" in result
|
|
|
|
def test_generate_empty(self):
|
|
generator = GitignoreGenerator()
|
|
content = generator.generate()
|
|
assert content == ""
|
|
|
|
def test_generate_single_template(self):
|
|
generator = GitignoreGenerator()
|
|
generator.add_template("python")
|
|
content = generator.generate()
|
|
assert content is not None
|
|
assert len(content) > 0
|
|
assert "__pycache__" in content
|
|
|
|
def test_generate_multiple_templates(self):
|
|
generator = GitignoreGenerator()
|
|
generator.add_template("python")
|
|
generator.add_template("vscode")
|
|
content = generator.generate()
|
|
assert content is not None
|
|
assert len(content) > 0
|
|
assert "__pycache__" in content
|
|
assert ".vscode" in content
|
|
|
|
def test_generate_for_types(self):
|
|
generator = GitignoreGenerator()
|
|
content = generator.generate_for_types(["python", "javascript"])
|
|
assert content is not None
|
|
assert len(content) > 0
|
|
|
|
def test_get_available_templates(self):
|
|
generator = GitignoreGenerator()
|
|
templates = generator.get_available_templates()
|
|
assert isinstance(templates, list)
|
|
assert len(templates) > 0
|
|
assert "python" in templates
|
|
assert "javascript" in templates
|
|
|
|
def test_validate_template_type_valid(self):
|
|
generator = GitignoreGenerator()
|
|
assert generator.validate_template_type("python") is True
|
|
assert generator.validate_template_type("javascript") is True
|
|
|
|
def test_validate_template_type_invalid(self):
|
|
generator = GitignoreGenerator()
|
|
assert generator.validate_template_type("invalid") is False
|
|
|
|
def test_get_template_categories(self):
|
|
generator = GitignoreGenerator()
|
|
categories = generator.get_template_categories()
|
|
assert isinstance(categories, dict)
|
|
assert "language" in categories
|
|
assert "framework" in categories
|
|
assert "ide" in categories
|
|
assert "os" in categories
|
|
assert "tools" in categories
|
|
|
|
def test_template_map_complete(self):
|
|
generator = GitignoreGenerator()
|
|
for template_type, template_path in generator.TEMPLATE_MAP.items():
|
|
path = generator.template_dir / template_path
|
|
assert path.exists(), f"Template {template_type} not found at {path}"
|
|
|
|
def test_generate_ends_with_newline(self):
|
|
generator = GitignoreGenerator()
|
|
generator.add_template("python")
|
|
content = generator.generate()
|
|
assert content.endswith("\n") or content == ""
|
|
|
|
def test_generate_python_includes_virtual_env(self):
|
|
generator = GitignoreGenerator()
|
|
generator.add_template("python")
|
|
content = generator.generate()
|
|
assert "venv/" in content or ".venv/" in content
|
|
|
|
def test_generate_vscode_includes_workspace_settings(self):
|
|
generator = GitignoreGenerator()
|
|
generator.add_template("vscode")
|
|
content = generator.generate()
|
|
assert ".vscode" in content
|