import tempfile from pathlib import Path from patternforge.config import Config from patternforge.generator import BoilerplateGenerator from patternforge.template import TemplateManager class TestBoilerplateGenerator: def setup_method(self) -> None: self.config = Config() self.tmpdir = tempfile.TemporaryDirectory() def teardown_method(self) -> None: self.tmpdir.cleanup() def test_generate_basic_file(self) -> None: pattern_file = Path(self.tmpdir.name) / "patterns.yaml" pattern_file.write_text( """ language: python summary: primary_naming: snake_case """ ) manager = TemplateManager(self.config) manager.create_template("gen-test", str(pattern_file)) generator = BoilerplateGenerator(self.config) output_dir = Path(self.tmpdir.name) / "output" files = generator.generate("gen-test", str(output_dir), entity_name="MyFeature") assert len(files) == 1 assert files[0].name == "MyFeature.py" assert files[0].exists() def test_generate_with_data_file(self) -> None: pattern_file = Path(self.tmpdir.name) / "patterns.yaml" pattern_file.write_text( """ language: python summary: primary_naming: snake_case """ ) manager = TemplateManager(self.config) manager.create_template("data-test", str(pattern_file)) data_file = Path(self.tmpdir.name) / "data.json" data_file.write_text('{"class_name": "CustomClass"}') generator = BoilerplateGenerator(self.config) output_dir = Path(self.tmpdir.name) / "output2" files = generator.generate( "data-test", str(output_dir), data_file=str(data_file), entity_name="DataFeature" ) assert len(files) == 1 content = files[0].read_text() assert "CustomClass" in content def test_snake_case_conversion(self) -> None: generator = BoilerplateGenerator(self.config) assert generator._to_snake_case("MyClassName") == "my_class_name" assert generator._to_snake_case("CamelCase") == "camel_case" def test_camel_case_conversion(self) -> None: generator = BoilerplateGenerator(self.config) assert generator._to_camel_case("my_function") == "myFunction" assert generator._to_camel_case("UPPERCASE") == "uppercase" def test_pascal_case_conversion(self) -> None: generator = BoilerplateGenerator(self.config) assert generator._to_pascal_case("my_class") == "MyClass" assert generator._to_pascal_case("my_function") == "MyFunction" def test_generate_multiple(self) -> None: pattern_file = Path(self.tmpdir.name) / "patterns.yaml" pattern_file.write_text( """ language: python summary: primary_naming: snake_case """ ) manager = TemplateManager(self.config) manager.create_template("multi-test", str(pattern_file)) generator = BoilerplateGenerator(self.config) output_dir = Path(self.tmpdir.name) / "output3" entities = [{"name": "Feature1"}, {"name": "Feature2"}] files = generator.generate_multiple("multi-test", str(output_dir), entities) assert len(files) == 2