49 lines
1.6 KiB
Python
49 lines
1.6 KiB
Python
"""회기 읽기 모델의 시간 직렬화 계약 테스트."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import unittest
|
|
from datetime import datetime, timezone
|
|
|
|
from .session_read_model import iso, session_calendar_date
|
|
from .services.session_metrics import iso_datetime
|
|
|
|
|
|
class SessionReadModelIsoTest(unittest.TestCase):
|
|
def test_none_remains_none(self) -> None:
|
|
self.assertIsNone(iso(None))
|
|
|
|
def test_epoch_is_serialized_as_utc_with_offset(self) -> None:
|
|
self.assertEqual(iso(0), "1970-01-01T00:00:00+00:00")
|
|
|
|
def test_timestamp_round_trips_without_local_timezone_drift(self) -> None:
|
|
timestamp = 1_800_000_120.0
|
|
|
|
rendered = iso(timestamp)
|
|
|
|
self.assertIsNotNone(rendered)
|
|
assert rendered is not None
|
|
parsed = datetime.fromisoformat(rendered)
|
|
self.assertEqual(parsed.tzinfo, timezone.utc)
|
|
self.assertEqual(parsed.timestamp(), timestamp)
|
|
|
|
def test_serialized_timestamp_has_explicit_utc_suffix(self) -> None:
|
|
rendered = iso(1_800_000_120.0)
|
|
|
|
self.assertIsNotNone(rendered)
|
|
assert rendered is not None
|
|
self.assertTrue(rendered.endswith("+00:00"))
|
|
|
|
def test_dashboard_metrics_use_the_same_utc_contract(self) -> None:
|
|
timestamp = 1_800_000_120.0
|
|
|
|
self.assertEqual(iso_datetime(timestamp), iso(timestamp))
|
|
|
|
def test_review_calendar_date_uses_korea_standard_time(self) -> None:
|
|
utc_late_afternoon = datetime(2026, 8, 8, 15, 30, tzinfo=timezone.utc)
|
|
|
|
self.assertEqual(session_calendar_date(utc_late_afternoon.timestamp()), "2026-08-09")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|