59 lines
1.8 KiB
Python
59 lines
1.8 KiB
Python
|
|
"""Tests for `app.core.time_utils`."""
|
||
|
|
|
||
|
|
from __future__ import annotations
|
||
|
|
|
||
|
|
import pytest
|
||
|
|
|
||
|
|
from app.core.time_utils import GameTime, advance_time, parse_delta, time_le
|
||
|
|
|
||
|
|
|
||
|
|
def test_parse_basic_time():
|
||
|
|
gt = GameTime.parse("day_1_hour_8")
|
||
|
|
assert gt.year == 1 and gt.day == 1 and gt.hour == 8 and gt.minute == 0
|
||
|
|
|
||
|
|
|
||
|
|
def test_parse_with_minutes_and_year():
|
||
|
|
gt = GameTime.parse("year_3_day_5_hour_14_min_30")
|
||
|
|
assert (gt.year, gt.day, gt.hour, gt.minute) == (3, 5, 14, 30)
|
||
|
|
|
||
|
|
|
||
|
|
def test_parse_round_trip():
|
||
|
|
s = "year_2_day_10_hour_18_min_45"
|
||
|
|
gt = GameTime.parse(s)
|
||
|
|
assert gt.to_string() == s
|
||
|
|
|
||
|
|
|
||
|
|
def test_parse_invalid_raises():
|
||
|
|
with pytest.raises(ValueError):
|
||
|
|
GameTime.parse("invalid")
|
||
|
|
with pytest.raises(ValueError):
|
||
|
|
GameTime.parse("day_0_hour_8") # day must be >= 1
|
||
|
|
|
||
|
|
|
||
|
|
def test_parse_delta_basic():
|
||
|
|
assert parse_delta("hours_2_min_30") == (0, 0, 2, 30)
|
||
|
|
assert parse_delta("days_1") == (0, 1, 0, 0)
|
||
|
|
assert parse_delta("min_15") == (0, 0, 0, 15)
|
||
|
|
assert parse_delta("year_2_days_3_hours_4_min_5") == (2, 3, 4, 5)
|
||
|
|
|
||
|
|
|
||
|
|
def test_advance_time_simple():
|
||
|
|
assert advance_time("day_1_hour_8", "hours_2") == "day_1_hour_10"
|
||
|
|
assert advance_time("day_1_hour_8", "min_30") == "day_1_hour_8_min_30"
|
||
|
|
assert advance_time("day_1_hour_23", "hours_2") == "day_2_hour_1"
|
||
|
|
assert advance_time("day_1_hour_8", "days_3_hours_4") == "day_4_hour_12"
|
||
|
|
|
||
|
|
|
||
|
|
def test_advance_time_with_year():
|
||
|
|
# 365 days in a year, so adding 365 days = next year
|
||
|
|
s = advance_time("day_1_hour_0", "days_365")
|
||
|
|
gt = GameTime.parse(s)
|
||
|
|
assert gt.year == 2
|
||
|
|
|
||
|
|
|
||
|
|
def test_time_le():
|
||
|
|
assert time_le("day_1_hour_8", "day_1_hour_9") is True
|
||
|
|
assert time_le("day_1_hour_9", "day_1_hour_8") is False
|
||
|
|
assert time_le("day_1_hour_8", "day_1_hour_8") is True
|
||
|
|
assert time_le("year_1_day_5_hour_12", "year_2_day_1_hour_0") is True
|