test_audit_timestamp.py 908 B

1234567891011121314151617181920212223242526
  1. """审计 created_at 应用侧 UTC 落库口径测试。
  2. DB server_default CURRENT_TIMESTAMP 为服务器本地时区,与序列化追加 Z 的
  3. UTC 口径叠加会使前端显示快 8 小时;Python 侧 default 必须产出 naive UTC。
  4. """
  5. from __future__ import annotations
  6. from datetime import datetime, timezone
  7. from dms.models import AuditLog
  8. def test_created_at_default_produces_naive_utc():
  9. default = AuditLog.__table__.c.created_at.default
  10. assert default is not None and default.is_callable
  11. # SQLAlchemy 对零参 callable 的包装可能伪造成原签名但实收 ctx,两种形态都兼容
  12. fn = default.arg
  13. try:
  14. value = fn(None)
  15. except TypeError:
  16. value = fn()
  17. assert isinstance(value, datetime)
  18. assert value.tzinfo is None
  19. utc_now = datetime.now(timezone.utc).replace(tzinfo=None)
  20. assert abs((utc_now - value).total_seconds()) < 60