44 lines
1.6 KiB
Python
44 lines
1.6 KiB
Python
from __future__ import annotations
|
|
|
|
from game.state_manager import StateManager
|
|
from game.story_engine import StoryEngine
|
|
from services.persistence import SQLitePersistence
|
|
|
|
|
|
def test_state_persistence_roundtrip(test_db_path):
|
|
persistence = SQLitePersistence(test_db_path)
|
|
story_engine = StoryEngine()
|
|
state_manager = StateManager(persistence, story_engine)
|
|
|
|
state_manager.create_new_room("ROOM01", "host01", "Host")
|
|
state_manager.add_player("ROOM01", "p02", "Bob")
|
|
|
|
room = persistence.get_room("ROOM01")
|
|
assert room is not None
|
|
assert room["game_state"]["room_id"] == "ROOM01"
|
|
assert "p02" in room["game_state"]["inventory_by_player"]
|
|
|
|
room["game_state"]["global_flags"]["truth_revealed"] = True
|
|
state_manager.set_room_state("ROOM01", "running", room["game_state"])
|
|
|
|
persistence2 = SQLitePersistence(test_db_path)
|
|
room2 = persistence2.get_room("ROOM01")
|
|
assert room2 is not None
|
|
assert room2["status"] == "running"
|
|
assert room2["game_state"]["global_flags"]["truth_revealed"] is True
|
|
|
|
|
|
def test_snapshot_contains_players_and_messages(test_db_path):
|
|
persistence = SQLitePersistence(test_db_path)
|
|
story_engine = StoryEngine()
|
|
state_manager = StateManager(persistence, story_engine)
|
|
|
|
state_manager.create_new_room("ROOM02", "host02", "Host")
|
|
persistence.add_or_update_player("ROOM02", "p03", "Carol")
|
|
persistence.append_message("ROOM02", "system", "hello")
|
|
|
|
snapshot = persistence.load_room_snapshot("ROOM02")
|
|
assert snapshot is not None
|
|
assert len(snapshot["players"]) == 2
|
|
assert snapshot["messages"][0]["content"] == "hello"
|