feat: Task 19 — Health-Check Blueprint mit Readiness-Endpunkt (closes #19)
This commit is contained in:
@@ -0,0 +1,65 @@
|
||||
"""Tests für src.routes.health — Health-Check mit Readiness."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from unittest.mock import MagicMock, patch
|
||||
|
||||
from src.app import create_app
|
||||
|
||||
|
||||
class TestHealthStatus:
|
||||
"""Tests für /health Endpoint."""
|
||||
|
||||
def setup_method(self) -> None:
|
||||
"""Jeder Test bekommt eine frische App mit gemocktem Redis."""
|
||||
with patch("src.queue.handler.redis.Redis"):
|
||||
self.app = create_app()
|
||||
self.client = self.app.test_client()
|
||||
|
||||
def test_health_status_ok(self) -> None:
|
||||
"""GET /health → 200 mit Status-JSON."""
|
||||
self.app.queue_handler = MagicMock(queue_size=MagicMock(return_value=42)) # type: ignore[assignment]
|
||||
response = self.client.get("/health")
|
||||
assert response.status_code == 200
|
||||
data = response.get_json()
|
||||
assert data["status"] == "ok"
|
||||
assert "queue_size" in data
|
||||
assert "python_version" in data
|
||||
assert "platform" in data
|
||||
|
||||
def test_health_queue_size_integer(self) -> None:
|
||||
"""queue_size ist ein Integer."""
|
||||
self.app.queue_handler = MagicMock(queue_size=MagicMock(return_value=7)) # type: ignore[assignment]
|
||||
response = self.client.get("/health")
|
||||
data = response.get_json()
|
||||
assert isinstance(data["queue_size"], int)
|
||||
assert data["queue_size"] == 7
|
||||
|
||||
|
||||
class TestHealthReady:
|
||||
"""Tests für /health/ready Endpoint."""
|
||||
|
||||
def setup_method(self) -> None:
|
||||
"""Jeder Test bekommt eine frische App."""
|
||||
with patch("src.queue.handler.redis.Redis"):
|
||||
self.app = create_app()
|
||||
self.client = self.app.test_client()
|
||||
|
||||
def test_health_ready_redis_alive(self) -> None:
|
||||
"""Redis ping erfolgreich → ready=true."""
|
||||
response = self.client.get("/health/ready")
|
||||
# Redis wird gemockt, ping sollte successful sein
|
||||
assert response.status_code == 200
|
||||
data = response.get_json()
|
||||
assert data["ready"] is True
|
||||
|
||||
def test_health_ready_redis_fails(self) -> None:
|
||||
"""Redis ping fehlschlägt → ready=false, 503."""
|
||||
with patch.object(
|
||||
self.app.queue_handler.redis, "ping", side_effect=Exception("Redis down")
|
||||
):
|
||||
response = self.client.get("/health/ready")
|
||||
assert response.status_code == 503
|
||||
data = response.get_json()
|
||||
assert data["ready"] is False
|
||||
assert "reason" in data
|
||||
Reference in New Issue
Block a user