diff --git a/src/routes/admin.py b/src/routes/admin.py new file mode 100644 index 0000000..a07b012 --- /dev/null +++ b/src/routes/admin.py @@ -0,0 +1,21 @@ +"""Flask-Blueprint für Admin-Route.""" + +from flask import Blueprint, current_app, jsonify + +admin_bp = Blueprint("admin", __name__) + + +@admin_bp.route("/admin/queue", methods=["GET"]) +def queue_status() -> tuple: + """Gibt Queue-Status zurück.""" + qh = current_app.queue_handler # type: ignore[attr-defined] + return jsonify({"queue_size": qh.queue_size(), "status": "ok"}), 200 + + +@admin_bp.route("/admin/stats", methods=["GET"]) +def stats() -> tuple: + """Gibt System-Statistiken zurück.""" + qh = current_app.queue_handler # type: ignore[attr-defined] + return jsonify( + {"queue_size": qh.queue_size(), "uptime": "placeholder", "version": "0.1.0"} + ), 200 diff --git a/tests/test_admin.py b/tests/test_admin.py new file mode 100644 index 0000000..135b17b --- /dev/null +++ b/tests/test_admin.py @@ -0,0 +1,48 @@ +"""Tests für Admin-Route.""" + +from unittest.mock import MagicMock + +from flask import Flask + +from src.routes.admin import admin_bp + + +class TestAdminRoute: + """Tests für Admin-Route.""" + + def setup_method(self) -> None: + """Erstellt Flask-App mit mocktem QueueHandler.""" + self.app = Flask(__name__) + self.app.queue_handler = MagicMock() + self.app.queue_handler.queue_size.return_value = 42 + self.app.register_blueprint(admin_bp, url_prefix="/") + self.client = self.app.test_client() + + def test_get_admin_queue_ergibt_200(self) -> None: + """GET /admin/queue → 200 + JSON mit queue_size.""" + response = self.client.get("/admin/queue") + assert response.status_code == 200 + data = response.get_json() + assert "queue_size" in data + assert data["status"] == "ok" + + def test_get_admin_queue_queue_size_ist_integer(self) -> None: + """GET /admin/queue → queue_size ist Integer.""" + response = self.client.get("/admin/queue") + data = response.get_json() + assert isinstance(data["queue_size"], int) + + def test_get_admin_stats_ergibt_200(self) -> None: + """GET /admin/stats → 200 + version '0.1.0'.""" + response = self.client.get("/admin/stats") + assert response.status_code == 200 + data = response.get_json() + assert data["version"] == "0.1.0" + + def test_get_admin_stats_json_enhaelt_alle_keys(self) -> None: + """GET /admin/stats → JSON enthält alle Keys.""" + response = self.client.get("/admin/stats") + data = response.get_json() + assert "queue_size" in data + assert "uptime" in data + assert "version" in data