towerops/test/towerops_web/controllers/health_controller_test.exs
Graham McIntire 3276a1cd8c
fix user session controller test
Update email input ID assertion to match actual template implementation
2026-02-03 13:42:24 -06:00

59 lines
2.4 KiB
Elixir

defmodule ToweropsWeb.HealthControllerTest do
use ToweropsWeb.ConnCase, async: true
describe "GET /health" do
test "returns ok with database and redis connectivity check", %{conn: conn} do
conn = get(conn, ~p"/health")
response = json_response(conn, 200)
assert response["status"] == "ok"
assert response["database"] == "connected"
# Redis may be "connected" or "not_configured" depending on environment
assert response["redis"] in ["connected", "not_configured"]
assert response["version"] == "0.1.0"
assert get_resp_header(conn, "content-type") == ["application/json; charset=utf-8"]
end
end
describe "GET /health/time" do
test "returns server time from multiple sources", %{conn: conn} do
conn = get(conn, ~p"/health/time")
response = json_response(conn, 200)
# Verify all expected fields are present
assert Map.has_key?(response, "system_time")
assert Map.has_key?(response, "system_time_iso")
assert Map.has_key?(response, "os_time")
assert Map.has_key?(response, "os_time_iso")
assert Map.has_key?(response, "datetime_now")
assert Map.has_key?(response, "datetime_now_iso")
assert Map.has_key?(response, "time_sources_agree")
# Verify types
assert is_integer(response["system_time"])
assert is_binary(response["system_time_iso"])
assert is_integer(response["os_time"])
assert is_binary(response["os_time_iso"])
assert is_integer(response["datetime_now"])
assert is_binary(response["datetime_now_iso"])
assert is_boolean(response["time_sources_agree"])
# Verify ISO 8601 format
assert String.match?(response["system_time_iso"], ~r/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}/)
assert String.match?(response["os_time_iso"], ~r/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}/)
assert String.match?(response["datetime_now_iso"], ~r/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}/)
# Verify all times are within a reasonable range (within 5 seconds of each other)
time_diff_1 = abs(response["system_time"] - response["os_time"])
time_diff_2 = abs(response["system_time"] - response["datetime_now"])
assert time_diff_1 <= 5, "system_time and os_time should be within 5 seconds"
assert time_diff_2 <= 5, "system_time and datetime_now should be within 5 seconds"
assert get_resp_header(conn, "content-type") == ["application/json; charset=utf-8"]
end
end
end