feat: Webhooks (Aufgaben 6-10) — webhook.py, worker.py, Flask-App, WhatsApp + Telegram Routes + Tests
This commit is contained in:
@@ -0,0 +1,78 @@
|
||||
"""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, url_prefix="/webhook")
|
||||
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",
|
||||
data=payload,
|
||||
content_type="application/json",
|
||||
)
|
||||
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
|
||||
Reference in New Issue
Block a user