92 lines
3.2 KiB
Python
92 lines
3.2 KiB
Python
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
|