Mi2dRPGamEng/tests/test_dev_tools.py

91 lines
2.8 KiB
Python

from pathlib import Path
import pytest
from engine.character import Character
from engine.defs import DefRegistry
from engine.dev_config import DevConfig
from engine.dev_tools import DevSpawnMenu
from engine.inventory import Inventory
DEFS_DIR = Path(__file__).resolve().parent.parent / "resources" / "defs"
@pytest.fixture()
def registry():
return DefRegistry.load(DEFS_DIR)
def make_human(registry, **kwargs) -> Character:
return Character(species_id="human", default_body_parts=registry.new_default_body_parts("human"), **kwargs)
# --- DevSpawnMenu -------------------------------------------------------------------------------
def test_menu_defaults_to_every_loaded_non_secret_item_def_sorted(registry):
menu = DevSpawnMenu(registry)
expected = sorted(def_id for def_id, item_def in registry.item_defs.items() if not item_def.secret)
assert menu.item_ids == expected
assert menu.selected_item_id() == menu.item_ids[0]
def test_menu_excludes_secret_items(registry):
menu = DevSpawnMenu(registry)
assert "cyberdeck_the_miro_model_3a" not in menu.item_ids
def test_cycle_wraps_around(registry):
menu = DevSpawnMenu(registry)
menu.cycle(-1)
assert menu.selected_item_id() == menu.item_ids[-1]
def test_spawn_into_places_the_item_when_inventory_has_room(registry):
menu = DevSpawnMenu(registry)
character = make_human(registry)
character.inventory = Inventory(4, 4)
assert menu.spawn_into(character) is True
assert len(character.inventory.items()) == 1
def test_spawn_into_fails_without_an_inventory(registry):
menu = DevSpawnMenu(registry)
character = make_human(registry)
assert menu.spawn_into(character) is False
def test_spawn_into_fails_when_inventory_is_full(registry):
menu = DevSpawnMenu(registry)
character = make_human(registry)
character.inventory = Inventory(1, 1)
item_def = registry.get_item_def(menu.selected_item_id())
if item_def.width > 1 or item_def.height > 1:
pytest.skip("first item def doesn't fit a 1x1 inventory to begin with")
assert menu.spawn_into(character) is True
assert menu.spawn_into(character) is False
# --- DevConfig ------------------------------------------------------------------------------------
def test_dev_config_defaults_to_disabled_when_file_missing(tmp_path):
config = DevConfig.load(tmp_path / "does_not_exist.conf")
assert config.enabled is False
def test_dev_config_toggle_flips_the_flag():
config = DevConfig()
config.toggle()
assert config.enabled is True
config.toggle()
assert config.enabled is False
def test_dev_config_save_and_reload_round_trips(tmp_path):
path = tmp_path / "dev.conf"
config = DevConfig(enabled=True)
config.save(path)
reloaded = DevConfig.load(path)
assert reloaded.enabled is True