97 lines
3.6 KiB
Python
97 lines
3.6 KiB
Python
|
|
"""
|
||
|
|
BATON-BIZ-004: Verify removal of dead code from backend/telegram.py.
|
||
|
|
|
||
|
|
Acceptance criteria:
|
||
|
|
1. telegram.py does NOT contain duplicate logging setLevel calls for httpx/httpcore.
|
||
|
|
2. telegram.py does NOT contain the SignalAggregator class.
|
||
|
|
3. httpx/httpcore logging suppression is still configured in main.py (globally).
|
||
|
|
4. SignalAggregator is NOT importable from backend.telegram.
|
||
|
|
"""
|
||
|
|
from __future__ import annotations
|
||
|
|
|
||
|
|
import ast
|
||
|
|
import importlib
|
||
|
|
import inspect
|
||
|
|
import logging
|
||
|
|
import os
|
||
|
|
from pathlib import Path
|
||
|
|
|
||
|
|
|
||
|
|
# ---------------------------------------------------------------------------
|
||
|
|
# Helpers
|
||
|
|
# ---------------------------------------------------------------------------
|
||
|
|
|
||
|
|
_BACKEND_DIR = Path(__file__).parent.parent / "backend"
|
||
|
|
_TELEGRAM_SRC = (_BACKEND_DIR / "telegram.py").read_text(encoding="utf-8")
|
||
|
|
_MAIN_SRC = (_BACKEND_DIR / "main.py").read_text(encoding="utf-8")
|
||
|
|
|
||
|
|
|
||
|
|
# ---------------------------------------------------------------------------
|
||
|
|
# Criteria 1 — no setLevel for httpx/httpcore in telegram.py
|
||
|
|
# ---------------------------------------------------------------------------
|
||
|
|
|
||
|
|
def test_telegram_has_no_httpx_setlevel():
|
||
|
|
"""telegram.py must not set log level for 'httpx'."""
|
||
|
|
assert 'getLogger("httpx").setLevel' not in _TELEGRAM_SRC
|
||
|
|
assert "getLogger('httpx').setLevel" not in _TELEGRAM_SRC
|
||
|
|
|
||
|
|
|
||
|
|
def test_telegram_has_no_httpcore_setlevel():
|
||
|
|
"""telegram.py must not set log level for 'httpcore'."""
|
||
|
|
assert 'getLogger("httpcore").setLevel' not in _TELEGRAM_SRC
|
||
|
|
assert "getLogger('httpcore').setLevel" not in _TELEGRAM_SRC
|
||
|
|
|
||
|
|
|
||
|
|
# ---------------------------------------------------------------------------
|
||
|
|
# Criteria 2 — SignalAggregator absent from telegram.py source
|
||
|
|
# ---------------------------------------------------------------------------
|
||
|
|
|
||
|
|
def test_telegram_source_has_no_signal_aggregator_class():
|
||
|
|
"""telegram.py source text must not contain the class definition."""
|
||
|
|
assert "class SignalAggregator" not in _TELEGRAM_SRC
|
||
|
|
|
||
|
|
|
||
|
|
def test_telegram_source_has_no_signal_aggregator_reference():
|
||
|
|
"""telegram.py source text must not reference SignalAggregator at all."""
|
||
|
|
assert "SignalAggregator" not in _TELEGRAM_SRC
|
||
|
|
|
||
|
|
|
||
|
|
# ---------------------------------------------------------------------------
|
||
|
|
# Criteria 3 — httpx/httpcore suppression still lives in main.py
|
||
|
|
# ---------------------------------------------------------------------------
|
||
|
|
|
||
|
|
def test_main_suppresses_httpx_logging():
|
||
|
|
"""main.py must call getLogger('httpx').setLevel to suppress noise."""
|
||
|
|
assert (
|
||
|
|
'getLogger("httpx").setLevel' in _MAIN_SRC
|
||
|
|
or "getLogger('httpx').setLevel" in _MAIN_SRC
|
||
|
|
)
|
||
|
|
|
||
|
|
|
||
|
|
def test_main_suppresses_httpcore_logging():
|
||
|
|
"""main.py must call getLogger('httpcore').setLevel to suppress noise."""
|
||
|
|
assert (
|
||
|
|
'getLogger("httpcore").setLevel' in _MAIN_SRC
|
||
|
|
or "getLogger('httpcore').setLevel" in _MAIN_SRC
|
||
|
|
)
|
||
|
|
|
||
|
|
|
||
|
|
# ---------------------------------------------------------------------------
|
||
|
|
# Criteria 4 — SignalAggregator not importable from backend.telegram
|
||
|
|
# ---------------------------------------------------------------------------
|
||
|
|
|
||
|
|
def test_signal_aggregator_not_importable_from_telegram():
|
||
|
|
"""Importing SignalAggregator from backend.telegram must raise ImportError."""
|
||
|
|
import importlib
|
||
|
|
import sys
|
||
|
|
|
||
|
|
# Force a fresh import so changes to the module are reflected
|
||
|
|
mod_name = "backend.telegram"
|
||
|
|
if mod_name in sys.modules:
|
||
|
|
del sys.modules[mod_name]
|
||
|
|
|
||
|
|
import backend.telegram as tg_mod # noqa: F401
|
||
|
|
assert not hasattr(tg_mod, "SignalAggregator"), (
|
||
|
|
"SignalAggregator should not be an attribute of backend.telegram"
|
||
|
|
)
|