Files
ss-tools/backend/tests/test_smoke_app.py
busya c6189876b3 chore(lint): apply ruff --fix (4443 auto-fixes)
Auto-fixed categories:
- F401: unused imports removed
- I001: import blocks sorted
- W293: trailing whitespace stripped
- UP035: deprecated typing imports replaced
- SIM: simplify suggestions applied
- ARG: unused args prefixed with underscore
- T201: print statements removed
- F841: unused variables removed
- RUF059: unpacked variables prefixed

Remaining ~1500 unfixable errors (C901, B904, N806, E402) require manual work.

Backend smoke tests: 13/13 passed.
2026-05-14 11:20:17 +03:00

83 lines
2.9 KiB
Python

# [DEF:TestSmokeApp:Module]
# @SEMANTICS: tests, smoke, app, imports, fastapi
# @PURPOSE: Minimal smoke tests that verify the full application import chain
# succeeds without SyntaxError, IndentationError, ImportError, or
# NameError in any module.
# @LAYER: Tests (Smoke)
# @RELATION: VERIFIES -> src/app.py
# @RELATION: VERIFIES -> src/core/cot_logger.py
# @INVARIANT: All tests must pass without a running PostgreSQL instance.
#
# @RATIONALE: Uses SQLite in-memory database URLs to avoid requiring a live
# PostgreSQL server during smoke testing. The database module's
# _build_engine() already supports SQLite with
# check_same_thread=False.
"""Smoke test: verify the full application imports without errors.
Catches: SyntaxError, IndentationError, ImportError, NameError in any module
that is part of the application import chain.
Database dependency:
The application's database module (src.core.database) creates SQLAlchemy
engines at import time. To avoid needing a running PostgreSQL instance,
environment variables are set to SQLite in-memory databases before the
app is imported.
"""
import os
import sys
from pathlib import Path
# ---------------------------------------------------------------------------
# Database URL override: use SQLite in-memory so no PostgreSQL is needed.
# Must happen before ANY application module is imported.
# ---------------------------------------------------------------------------
os.environ.setdefault("DATABASE_URL", "sqlite:///:memory:")
os.environ.setdefault("TASKS_DATABASE_URL", "sqlite:///:memory:")
os.environ.setdefault("AUTH_DATABASE_URL", "sqlite:///:memory:")
# Ensure the backend root is on sys.path so `src` package is importable
_src_path = str(Path(__file__).resolve().parent.parent)
if _src_path not in sys.path:
sys.path.insert(0, _src_path)
def test_app_imports_cleanly():
"""The application module tree imports without errors."""
from src.app import app
assert app is not None
assert app.title == "Superset Tools API"
def test_app_has_expected_middleware():
"""TraceContextMiddleware is registered (trace_id propagation)."""
from src.app import app
middleware_classes = [m.cls.__name__ for m in app.user_middleware]
assert "TraceContextMiddleware" in middleware_classes, (
f"TraceContextMiddleware not found in app middleware: {middleware_classes}"
)
def test_cot_logger_imports():
"""Core logging infrastructure is importable."""
from src.core.cot_logger import (
get_trace_id,
log,
pop_span,
push_span,
seed_trace_id,
)
tid = seed_trace_id()
assert tid is not None
assert get_trace_id() == tid
log("test", "REASON", "Smoke test log entry", {"ok": True})
# Verify push_span / pop_span round-trip
prev = push_span("test_span")
assert prev == "" # default empty span
pop_span(prev)