defmodule ToweropsWeb.HealthControllerTest do use ToweropsWeb.ConnCase, async: false describe "GET /health" do test "returns 200 when database is connected", %{conn: conn} do conn = get(conn, "/health") body = response(conn, 200) result = Jason.decode!(body) assert result["status"] == "ok" assert result["database"] == "connected" assert result["version"] end test "reports redis status as not_configured when redis is not configured", %{conn: conn} do previous = Application.get_env(:towerops, :redis) Application.put_env(:towerops, :redis, []) try do conn = get(conn, "/health") result = Jason.decode!(response(conn, 200)) assert result["redis"] == "not_configured" after if previous do Application.put_env(:towerops, :redis, previous) else Application.delete_env(:towerops, :redis) end end end test "reports redis as connected when configured to a real instance", %{conn: conn} do previous = Application.get_env(:towerops, :redis) Application.put_env(:towerops, :redis, host: "localhost", port: 6379) try do conn = get(conn, "/health") # Either 200 (redis up) or 503 (redis unreachable in CI) — both branches # exercise the configured-redis code path. We just assert the response # is well-formed JSON with a redis field. body = response(conn, conn.status) result = Jason.decode!(body) assert result["redis"] in ["connected", "disconnected"] after if previous do Application.put_env(:towerops, :redis, previous) else Application.delete_env(:towerops, :redis) end end end end end