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