"""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"