Add test files for CLI, config, detector, and generator modules
Some checks failed
CI / test (push) Failing after 10s
Some checks failed
CI / test (push) Failing after 10s
This commit is contained in:
151
tests/test_generator.py
Normal file
151
tests/test_generator.py
Normal file
@@ -0,0 +1,151 @@
|
|||||||
|
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
|
||||||
Reference in New Issue
Block a user