"""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