G7 증명과 G8 clean-head 승격 준비
This commit is contained in:
parent
94c681d450
commit
5221f79e3f
52 changed files with 6876 additions and 506 deletions
49
apps/api/app/test_session_read_model.py
Normal file
49
apps/api/app/test_session_read_model.py
Normal file
|
|
@ -0,0 +1,49 @@
|
|||
"""회기 읽기 모델의 시간 직렬화 계약 테스트."""
|
||||
|
||||
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()
|
||||
Loading…
Add table
Add a link
Reference in a new issue