Source code for devkit_ui.test_time_utils
import unittest
from datetime import UTC, datetime
from devkit_ui.time_utils import now_utc, now_utc_str, parse_ts
[docs]
class TestTimeUtils(unittest.TestCase):
[docs]
def test_now_utc_is_timezone_aware_utc(self) -> None:
self.assertEqual(now_utc().tzinfo, UTC)
[docs]
def test_now_utc_str_round_trips_through_parse_ts(self) -> None:
parsed = parse_ts(now_utc_str())
self.assertIsNotNone(parsed)
assert parsed is not None
self.assertEqual(parsed.tzinfo, UTC)
[docs]
def test_parse_ts_reads_iso_format(self) -> None:
self.assertEqual(parse_ts('2025-04-01T09:30:00Z'), datetime(2025, 4, 1, 9, 30, 0, tzinfo=UTC))
[docs]
def test_parse_ts_reads_legacy_format(self) -> None:
self.assertEqual(parse_ts('01-04-2025_09-30-00'), datetime(2025, 4, 1, 9, 30, 0, tzinfo=UTC))
[docs]
def test_parse_ts_returns_none_for_missing_input(self) -> None:
self.assertIsNone(parse_ts(None))
self.assertIsNone(parse_ts(''))
[docs]
def test_parse_ts_returns_none_for_malformed_input(self) -> None:
self.assertIsNone(parse_ts('garbage'))
self.assertIsNone(parse_ts('2025-13-45T99:99:99Z'))
self.assertIsNone(parse_ts({'timestamp': '2025-04-01T09:30:00Z'})) # type: ignore[arg-type]
[docs]
def test_parse_ts_rejects_near_miss_formats(self) -> None:
malformed_timestamps = (
'2025-04-01T09:30:00',
'2025-04-01T09:30:00+00:00',
'01-04-2025_09-30-00Z',
'2025-02-29T09:30:00Z',
)
for timestamp in malformed_timestamps:
with self.subTest(timestamp=timestamp):
self.assertIsNone(parse_ts(timestamp))
if __name__ == '__main__':
unittest.main()