"""Tests for the crafting recipe system.""" import tempfile from pathlib import Path import pytest from mudlib.crafting import Recipe, load_recipe, load_recipes, recipes from mudlib.things import thing_templates from mudlib.zones import zone_registry @pytest.fixture(autouse=True) def _clean_registries(): """Snapshot and restore registries to prevent test leakage.""" saved_zones = dict(zone_registry) saved_templates = dict(thing_templates) saved_recipes = dict(recipes) zone_registry.clear() thing_templates.clear() recipes.clear() yield zone_registry.clear() zone_registry.update(saved_zones) thing_templates.clear() thing_templates.update(saved_templates) recipes.clear() recipes.update(saved_recipes) def test_load_recipe_from_toml(): """Parse a recipe TOML file.""" with tempfile.NamedTemporaryFile(mode="w", suffix=".toml", delete=False) as f: f.write(""" name = "wooden_table" description = "Craft a sturdy table from planks and nails" ingredients = ["plank", "plank", "plank", "nail", "nail"] result = "table" """) path = Path(f.name) try: recipe = load_recipe(path) assert recipe.name == "wooden_table" assert recipe.description == "Craft a sturdy table from planks and nails" assert recipe.ingredients == ["plank", "plank", "plank", "nail", "nail"] assert recipe.result == "table" finally: path.unlink() def test_load_recipes_directory(): """Load all recipes from a directory.""" with tempfile.TemporaryDirectory() as tmpdir: tmp_path = Path(tmpdir) # Create two recipe files (tmp_path / "table.toml").write_text(""" name = "wooden_table" description = "Craft a table" ingredients = ["plank", "plank"] result = "table" """) (tmp_path / "chair.toml").write_text(""" name = "wooden_chair" description = "Craft a chair" ingredients = ["plank"] result = "chair" """) loaded = load_recipes(tmp_path) assert len(loaded) == 2 assert "wooden_table" in loaded assert "wooden_chair" in loaded assert loaded["wooden_table"].result == "table" assert loaded["wooden_chair"].result == "chair" def test_recipe_fields(): """Verify all recipe fields are populated correctly.""" with tempfile.NamedTemporaryFile(mode="w", suffix=".toml", delete=False) as f: f.write(""" name = "test_recipe" description = "A test recipe" ingredients = ["item_a", "item_b", "item_c"] result = "item_result" """) path = Path(f.name) try: recipe = load_recipe(path) assert isinstance(recipe, Recipe) assert recipe.name == "test_recipe" assert recipe.description == "A test recipe" assert recipe.ingredients == ["item_a", "item_b", "item_c"] assert recipe.result == "item_result" assert len(recipe.ingredients) == 3 finally: path.unlink()