From 89e310f20c3fd2d0ee385af71f4fc78fe2146660 Mon Sep 17 00:00:00 2001 From: 7000pctAUTO Date: Sun, 1 Feb 2026 03:34:06 +0000 Subject: [PATCH] Add test files for CLI, config, detector, and generator modules --- tests/test_generator.py | 151 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 151 insertions(+) create mode 100644 tests/test_generator.py diff --git a/tests/test_generator.py b/tests/test_generator.py new file mode 100644 index 0000000..01c591c --- /dev/null +++ b/tests/test_generator.py @@ -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