Files
BSN-Livesystem/tests/test_telegram.py
T

79 lines
2.4 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, 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