90 lines
2.7 KiB
Python
90 lines
2.7 KiB
Python
"""Tests for zone ambient messages."""
|
|
|
|
import tempfile
|
|
from pathlib import Path
|
|
|
|
from mudlib.zone import Zone, get_ambient_message
|
|
from mudlib.zones import load_zone
|
|
|
|
|
|
def test_zone_default_no_ambient():
|
|
"""Zone() has empty ambient messages and default interval."""
|
|
zone = Zone(name="test")
|
|
assert zone.ambient_messages == []
|
|
assert zone.ambient_interval == 120
|
|
|
|
|
|
def test_zone_with_ambient_messages():
|
|
"""Zone created with ambient_messages and ambient_interval stores them."""
|
|
messages = ["message one", "message two"]
|
|
zone = Zone(name="test", ambient_messages=messages, ambient_interval=60)
|
|
assert zone.ambient_messages == messages
|
|
assert zone.ambient_interval == 60
|
|
|
|
|
|
def test_load_zone_with_ambient():
|
|
"""TOML with [ambient] section loads messages and interval."""
|
|
toml_content = """
|
|
name = "test_zone"
|
|
width = 10
|
|
height = 10
|
|
|
|
[ambient]
|
|
interval = 45
|
|
messages = [
|
|
"a draft of cold air blows through the room",
|
|
"the fire crackles and pops",
|
|
"you hear muffled conversation from the next room",
|
|
]
|
|
"""
|
|
with tempfile.NamedTemporaryFile(mode="w", suffix=".toml", delete=False) as f:
|
|
f.write(toml_content)
|
|
temp_path = Path(f.name)
|
|
|
|
try:
|
|
zone = load_zone(temp_path)
|
|
assert zone.ambient_interval == 45
|
|
assert len(zone.ambient_messages) == 3
|
|
assert "a draft of cold air blows through the room" in zone.ambient_messages
|
|
assert "the fire crackles and pops" in zone.ambient_messages
|
|
assert (
|
|
"you hear muffled conversation from the next room" in zone.ambient_messages
|
|
)
|
|
finally:
|
|
temp_path.unlink()
|
|
|
|
|
|
def test_load_zone_without_ambient():
|
|
"""TOML without [ambient] defaults to empty messages."""
|
|
toml_content = """
|
|
name = "simple_zone"
|
|
width = 5
|
|
height = 5
|
|
"""
|
|
with tempfile.NamedTemporaryFile(mode="w", suffix=".toml", delete=False) as f:
|
|
f.write(toml_content)
|
|
temp_path = Path(f.name)
|
|
|
|
try:
|
|
zone = load_zone(temp_path)
|
|
assert zone.ambient_messages == []
|
|
assert zone.ambient_interval == 120 # default
|
|
finally:
|
|
temp_path.unlink()
|
|
|
|
|
|
def test_get_ambient_message_returns_from_list():
|
|
"""get_ambient_message returns a message from the zone's list."""
|
|
messages = ["message one", "message two", "message three"]
|
|
zone = Zone(name="test", ambient_messages=messages)
|
|
|
|
# Run multiple times to ensure we get valid messages
|
|
for _ in range(10):
|
|
msg = get_ambient_message(zone)
|
|
assert msg in messages
|
|
|
|
|
|
def test_get_ambient_message_empty_list_returns_none():
|
|
"""get_ambient_message returns None when zone has no messages."""
|
|
zone = Zone(name="test")
|
|
assert get_ambient_message(zone) is None
|