Initial upload: PatternForge CLI tool with pattern detection and boilerplate generation
This commit is contained in:
91
tests/test_generator.py
Normal file
91
tests/test_generator.py
Normal file
@@ -0,0 +1,91 @@
|
|||||||
|
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
|
||||||
Reference in New Issue
Block a user