81 lines
2.5 KiB
Python
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()
|