54 lines
2.4 KiB
Python
54 lines
2.4 KiB
Python
|
|
"""Regression tests for KIN-104 — замена datetime.utcnow() на datetime.now(timezone.utc) в cli/main.py.
|
|||
|
|
|
|||
|
|
AC1: datetime.utcnow() отсутствует в cli/main.py.
|
|||
|
|
AC2: timezone импортирован из datetime в cli/main.py.
|
|||
|
|
AC3: datetime.now(timezone.utc).isoformat() возвращает строку с суффиксом +00:00 (aware datetime).
|
|||
|
|
"""
|
|||
|
|
|
|||
|
|
import re
|
|||
|
|
from datetime import datetime, timezone
|
|||
|
|
from pathlib import Path
|
|||
|
|
|
|||
|
|
import pytest
|
|||
|
|
|
|||
|
|
|
|||
|
|
CLI_MAIN = Path(__file__).parent.parent / "cli" / "main.py"
|
|||
|
|
|
|||
|
|
|
|||
|
|
# ---------------------------------------------------------------------------
|
|||
|
|
# AC1: utcnow() отсутствует в источнике
|
|||
|
|
# ---------------------------------------------------------------------------
|
|||
|
|
|
|||
|
|
def test_cli_main_does_not_contain_utcnow():
|
|||
|
|
"""cli/main.py не должен содержать вызовов datetime.utcnow()."""
|
|||
|
|
source = CLI_MAIN.read_text(encoding="utf-8")
|
|||
|
|
assert "utcnow" not in source, "Найден устаревший вызов utcnow() в cli/main.py"
|
|||
|
|
|
|||
|
|
|
|||
|
|
# ---------------------------------------------------------------------------
|
|||
|
|
# AC2: timezone импортирован
|
|||
|
|
# ---------------------------------------------------------------------------
|
|||
|
|
|
|||
|
|
def test_cli_main_imports_timezone():
|
|||
|
|
"""cli/main.py должен импортировать timezone из datetime."""
|
|||
|
|
source = CLI_MAIN.read_text(encoding="utf-8")
|
|||
|
|
# Принимаем: from datetime import datetime, timezone или from datetime import ..., timezone, ...
|
|||
|
|
assert re.search(r"from datetime import [^#\n]*timezone", source), \
|
|||
|
|
"timezone не импортирован из datetime в cli/main.py"
|
|||
|
|
|
|||
|
|
|
|||
|
|
# ---------------------------------------------------------------------------
|
|||
|
|
# AC3: aware datetime → isoformat содержит +00:00
|
|||
|
|
# ---------------------------------------------------------------------------
|
|||
|
|
|
|||
|
|
def test_now_timezone_utc_isoformat_contains_utc_offset():
|
|||
|
|
"""datetime.now(timezone.utc).isoformat() должен содержать '+00:00'."""
|
|||
|
|
ts = datetime.now(timezone.utc).isoformat()
|
|||
|
|
assert "+00:00" in ts, f"Ожидался суффикс +00:00, получено: {ts}"
|
|||
|
|
|
|||
|
|
|
|||
|
|
def test_now_timezone_utc_is_aware():
|
|||
|
|
"""datetime.now(timezone.utc) должен возвращать aware datetime (tzinfo не None)."""
|
|||
|
|
dt = datetime.now(timezone.utc)
|
|||
|
|
assert dt.tzinfo is not None, "datetime.now(timezone.utc) вернул naive datetime"
|