31b1a62cb2
Task 23: Worker-Intake-Pipeline verbinden
- ergebnis-Feld in Submission/Payload
- worker.py extrahiert + worker_loop refactor
- test_worker.py mit VerarbeiteSubmission/WorkerLoop tests
Task 24: Admin-Stats mit echten Daten
- processed_total, uptime, error_rate, VERSION
- admin_health mit Redis-Live-Daten
Task 25: E2E-Integrationstest + worker_refaktorisiert
Quality-Gate-Fixes:
- consumername Collision: 'worker-1' -> f'worker-{id(self)}'
- fakeredis block=0 Timeout fix
- WhatsApp/Telegram webhook payload fixes
- test_telegram/integration/e2e/refaktorisiert
- handler.py recovery nach corrupted Patch
42 lines
1023 B
Python
42 lines
1023 B
Python
"""Pytest-Konfiguration: Redis-Mock und Datenbank-Reset."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import sys
|
|
from unittest import mock
|
|
|
|
import fakeredis
|
|
import pytest
|
|
|
|
# --- Fake redis module that provides real-like exceptions ---
|
|
import redis as _real_redis
|
|
|
|
from src.database import Base, _engine
|
|
|
|
|
|
class _FakeRedis:
|
|
"""Wraps fakeredis with the correct redis.exceptions hierarchy."""
|
|
|
|
@staticmethod
|
|
def exceptions():
|
|
return _real_redis.exceptions
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
self._conn = fakeredis.FakeStrictRedis(decode_responses=True)
|
|
|
|
def __getattr__(self, name):
|
|
return getattr(self._conn, name)
|
|
|
|
|
|
# Install BEFORE any app code runs
|
|
sys.modules["redis"] = mock.MagicMock()
|
|
sys.modules["redis"].Redis = _FakeRedis
|
|
sys.modules["redis"].exceptions = _real_redis.exceptions
|
|
|
|
|
|
@pytest.fixture(autouse=True)
|
|
def reset_db() -> None:
|
|
"""Setzt die Datenbank vor jedem Test zurueck."""
|
|
Base.metadata.drop_all(bind=_engine)
|
|
Base.metadata.create_all(bind=_engine)
|