mud/tests/test_gametime.py

81 lines
2.5 KiB
Python

"""Tests for the game time system."""
import time
import pytest
from mudlib.gametime import GameTime, get_game_day, get_game_hour, init_game_time
def test_get_game_hour_at_epoch():
"""Game hour should be 0 at epoch."""
epoch = time.time()
gt = GameTime(epoch, real_minutes_per_game_hour=1.0)
assert gt.get_game_hour() == 0
def test_get_game_hour_after_one_hour():
"""Game hour should advance after one real minute."""
epoch = time.time() - 60 # one real minute ago
gt = GameTime(epoch, real_minutes_per_game_hour=1.0)
assert gt.get_game_hour() == 1
def test_get_game_hour_wraps_at_24():
"""Game hour should wrap from 23 back to 0."""
epoch = time.time() - (24 * 60) # 24 real minutes ago
gt = GameTime(epoch, real_minutes_per_game_hour=1.0)
assert gt.get_game_hour() == 0
def test_get_game_day_at_epoch():
"""Game day should be 0 at epoch."""
epoch = time.time()
gt = GameTime(epoch, real_minutes_per_game_hour=1.0)
assert gt.get_game_day() == 0
def test_get_game_day_after_24_hours():
"""Game day should be 1 after 24 game hours."""
epoch = time.time() - (24 * 60) # 24 real minutes ago = 24 game hours
gt = GameTime(epoch, real_minutes_per_game_hour=1.0)
assert gt.get_game_day() == 1
def test_get_game_day_after_48_hours():
"""Game day should be 2 after 48 game hours."""
epoch = time.time() - (48 * 60) # 48 real minutes ago
gt = GameTime(epoch, real_minutes_per_game_hour=1.0)
assert gt.get_game_day() == 2
def test_get_game_day_partial_day():
"""Game day should not increment until 24 hours have passed."""
epoch = time.time() - (12 * 60) # 12 real minutes ago = 12 game hours
gt = GameTime(epoch, real_minutes_per_game_hour=1.0)
assert gt.get_game_day() == 0
def test_global_get_game_hour():
"""Global get_game_hour should work after init."""
init_game_time(epoch=time.time(), real_minutes_per_game_hour=1.0)
hour = get_game_hour()
assert 0 <= hour <= 23
def test_global_get_game_day():
"""Global get_game_day should work after init."""
init_game_time(epoch=time.time(), real_minutes_per_game_hour=1.0)
day = get_game_day()
assert day >= 0
def test_global_get_game_day_raises_if_not_initialized():
"""Global get_game_day should raise if not initialized."""
import mudlib.gametime
# reset global state
mudlib.gametime._game_time = None
with pytest.raises(RuntimeError, match="Game time not initialized"):
get_game_day()