test_run_serialization.py 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. from __future__ import annotations
  2. from datetime import datetime, timezone
  3. from supply_infra.db.models.pipeline_run import PipelineRun
  4. from supply_infra.pipeline.run_service import serialize_run
  5. def test_manual_run_serializes_null_deadline_and_china_timestamps() -> None:
  6. run = PipelineRun(
  7. run_id="manual-run",
  8. dedupe_key="supply_pipeline:20260727:full",
  9. pipeline_key="supply_pipeline",
  10. biz_dt="20260727",
  11. trigger_type="api",
  12. run_mode="full",
  13. dry_run=True,
  14. status="queued",
  15. deadline_at=None,
  16. config_snapshot_json={},
  17. date_snapshot_json={},
  18. created_at=datetime(2026, 7, 27, 6, 30),
  19. updated_at=datetime(2026, 7, 27, 6, 31),
  20. )
  21. payload = serialize_run(run)
  22. assert payload["deadline_at"] is None
  23. assert payload["created_at"] == "2026-07-27T06:30:00+08:00"
  24. assert payload["updated_at"] == "2026-07-27T06:31:00+08:00"
  25. def test_aware_timestamp_is_converted_to_china_time() -> None:
  26. run = PipelineRun(
  27. run_id="aware-run",
  28. dedupe_key="supply_pipeline:20260727:aware",
  29. pipeline_key="supply_pipeline",
  30. biz_dt="20260727",
  31. trigger_type="api",
  32. run_mode="full",
  33. dry_run=True,
  34. status="queued",
  35. deadline_at=None,
  36. config_snapshot_json={},
  37. date_snapshot_json={},
  38. created_at=datetime(2026, 7, 27, 6, 30, tzinfo=timezone.utc),
  39. updated_at=datetime(2026, 7, 27, 6, 31, tzinfo=timezone.utc),
  40. )
  41. payload = serialize_run(run)
  42. assert payload["created_at"] == "2026-07-27T14:30:00+08:00"
  43. assert payload["updated_at"] == "2026-07-27T14:31:00+08:00"