from pathlib import Path import pytest from engine.defs import DefRegistry from engine.map_loader import MapLoader from engine.world_creation import AVAILABLE_WORLD_TEMPLATES, WorldCreationMenu, WorldTemplate, build_world_from_template DEFS_DIR = Path(__file__).resolve().parent.parent / "resources" / "defs" @pytest.fixture() def registry(): return DefRegistry.load(DEFS_DIR) @pytest.fixture() def map_loader(): return MapLoader(DEFS_DIR / "maps") # --- WorldCreationMenu ----------------------------------------------------------------------- def test_menu_starts_with_the_available_templates(): menu = WorldCreationMenu() assert [t.id for t in menu.templates] == [t.id for t in AVAILABLE_WORLD_TEMPLATES] assert menu.selected_index is None def test_currently_only_one_template_is_available(): # campaign/survival/creative (procedurally generated) modes are planned follow-ups, not yet # implemented - this pins down the "just the test map for now" scope explicitly assert [t.id for t in AVAILABLE_WORLD_TEMPLATES] == ["test_map"] def test_select_sets_selected_index(): menu = WorldCreationMenu() menu.select(0) assert menu.selected_index == 0 def test_select_out_of_range_is_ignored(): menu = WorldCreationMenu() menu.select(99) assert menu.selected_index is None def test_selected_template_reads_back_the_right_one(): menu = WorldCreationMenu() menu.select(0) assert menu.selected_template() is AVAILABLE_WORLD_TEMPLATES[0] def test_selected_template_none_before_any_selection(): menu = WorldCreationMenu() assert menu.selected_template() is None # --- build_world_from_template ------------------------------------------------------------------ def test_build_world_from_template_loads_the_map_and_its_embeddings(registry, map_loader): template = AVAILABLE_WORLD_TEMPLATES[0] world = build_world_from_template(template, registry, map_loader) assert "harbor_world" in world.maps assert "ship_test" in world.maps # embedded child map also gets added assert world.entities == {} # world creation alone spawns no one def test_build_world_from_template_raises_for_a_generator_only_template(registry, map_loader): generator_template = WorldTemplate(id="campaign", name="Campaign", map_file=None) with pytest.raises(NotImplementedError): build_world_from_template(generator_template, registry, map_loader)