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
78 lines
2.3 KiB
Python
78 lines
2.3 KiB
Python
"""Tests für Telegram-Webhook-Route."""
|
|
|
|
from unittest.mock import MagicMock
|
|
|
|
from flask import Flask
|
|
|
|
from src.routes.telegram import telegram_bp
|
|
|
|
|
|
class TestTelegramWebhook:
|
|
"""Tests für Telegram-Webhook-Endpunkt."""
|
|
|
|
def setup_method(self) -> None:
|
|
"""Erstellt Flask-App mit mocktem QueueHandler."""
|
|
self.app = Flask(__name__)
|
|
self.app.queue_handler = MagicMock()
|
|
self.app.register_blueprint(telegram_bp)
|
|
self.client = self.app.test_client()
|
|
|
|
def test_post_mit_gueltigem_payload(self) -> None:
|
|
"""POST mit gültigem Payload -> 200."""
|
|
payload = {
|
|
"message": {
|
|
"message_id": "msg123",
|
|
"chat": {"id": "-1001234567890"},
|
|
"text": "Hallo, wir spielen heute Brettspiele!",
|
|
}
|
|
}
|
|
response = self.client.post(
|
|
"/webhook/telegram",
|
|
json=payload,
|
|
)
|
|
assert response.status_code == 200
|
|
data = response.get_json()
|
|
assert data["status"] == "accepted"
|
|
|
|
def test_post_ohne_json(self) -> None:
|
|
"""POST ohne JSON -> 400."""
|
|
response = self.client.post("/webhook/telegram", data="nicht JSON")
|
|
assert response.status_code == 400
|
|
data = response.get_json()
|
|
assert "error" in data
|
|
|
|
def test_post_ohne_message_id(self) -> None:
|
|
"""POST ohne message_id -> 400."""
|
|
payload = {
|
|
"message": {
|
|
"chat": {"id": "123"},
|
|
"text": "Test",
|
|
}
|
|
}
|
|
response = self.client.post(
|
|
"/webhook/telegram",
|
|
data=payload,
|
|
content_type="application/json",
|
|
)
|
|
assert response.status_code == 400
|
|
data = response.get_json()
|
|
assert "error" in data
|
|
|
|
def test_post_mit_leerem_text(self) -> None:
|
|
"""POST mit leerem text -> 400."""
|
|
payload = {
|
|
"message": {
|
|
"message_id": "msg456",
|
|
"chat": {"id": "123"},
|
|
"text": "",
|
|
}
|
|
}
|
|
response = self.client.post(
|
|
"/webhook/telegram",
|
|
data=payload,
|
|
content_type="application/json",
|
|
)
|
|
assert response.status_code == 400
|
|
data = response.get_json()
|
|
assert "error" in data
|