46 lines
1.5 KiB
Python
46 lines
1.5 KiB
Python
import os
|
|
import tempfile
|
|
import pytest
|
|
from app.services.narrative.world_state import WorldStateStore
|
|
|
|
|
|
@pytest.fixture
|
|
def temp_sim_dir():
|
|
with tempfile.TemporaryDirectory() as d:
|
|
sim_dir = os.path.join(d, "sim_test")
|
|
os.makedirs(sim_dir)
|
|
yield sim_dir
|
|
|
|
|
|
def test_load_returns_empty_world_when_missing(temp_sim_dir):
|
|
store = WorldStateStore(temp_sim_dir)
|
|
world = store.load()
|
|
assert world == {"rules": [], "locations": {}, "event_log": []}
|
|
|
|
|
|
def test_set_rules_replaces_previous(temp_sim_dir):
|
|
store = WorldStateStore(temp_sim_dir)
|
|
store.set_rules(["rule 1", "rule 2"])
|
|
assert store.load()["rules"] == ["rule 1", "rule 2"]
|
|
store.set_rules(["only rule"])
|
|
assert store.load()["rules"] == ["only rule"]
|
|
|
|
|
|
def test_upsert_location_adds_and_updates(temp_sim_dir):
|
|
store = WorldStateStore(temp_sim_dir)
|
|
store.upsert_location({"id": "tower", "name": "The Tower", "description": "tall"})
|
|
assert store.load()["locations"]["tower"]["name"] == "The Tower"
|
|
|
|
store.upsert_location({"id": "tower", "name": "The Iron Tower", "description": "dark"})
|
|
assert store.load()["locations"]["tower"]["name"] == "The Iron Tower"
|
|
|
|
|
|
def test_append_event_auto_ids_sequentially(temp_sim_dir):
|
|
store = WorldStateStore(temp_sim_dir)
|
|
e1 = store.append_event({"type": "custom", "description": "one", "round": 1})
|
|
e2 = store.append_event({"type": "custom", "description": "two", "round": 2})
|
|
|
|
assert e1["id"] == "evt_1"
|
|
assert e2["id"] == "evt_2"
|
|
assert store.load()["event_log"][-1]["description"] == "two"
|