vignette/apps/api/app/test_session_read_model.py
Yun Chan a0311c5957
Some checks failed
API contract / OpenAPI type drift (push) Failing after 3m27s
회기 무발화 0턴 분리, 자기예측 락 불변식 및 TDD 회귀 검증 완료
2026-09-08 23:28:06 +09:00

50 lines
1.6 KiB
Python

"""회기 읽기 모델의 시간 직렬화 계약 테스트."""
from __future__ import annotations
import unittest
from datetime import datetime, timezone
from .session_projection import iso
from .session_read_model import 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()