"""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