This commit is contained in:
Mikan
2026-06-20 19:13:05 +03:00
parent 32575e217e
commit 8514c63ec6
193 changed files with 22105 additions and 11660 deletions

View File

@@ -0,0 +1,58 @@
"""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