defmodule ToweropsWeb.Helpers.ConnectionHelpers do @moduledoc """ Shared helpers for testing integration/API connections. Provides a unified `format_connection_result/1` function that translates raw connection test results into user-facing messages. """ require Logger @doc """ Formats a connection test result into a user-facing message tuple. Returns `{:ok, message}` for successes or `{:error, message}` for failures. """ def format_connection_result({:ok, _body}), do: {:ok, "Connection successful"} def format_connection_result({:error, :unauthorized}), do: {:error, "Invalid API key"} def format_connection_result({:error, :forbidden}), do: {:error, "Access forbidden"} def format_connection_result({:error, {:unexpected_status, status}}), do: {:error, "API returned unexpected status: #{status}"} def format_connection_result({:error, %{reason: :timeout}}), do: {:error, "Connection timeout - unable to reach API"} def format_connection_result({:error, %{reason: :econnrefused}}), do: {:error, "Connection refused - check API endpoint"} def format_connection_result({:error, %{reason: :nxdomain}}), do: {:error, "DNS lookup failed - check API endpoint"} def format_connection_result({:error, {:graphql_errors, errors}}), do: {:error, "API query failed: #{inspect(Enum.map(errors, & &1["message"]))}"} # Never expose internal error details to users def format_connection_result({:error, reason}) do Logger.warning("Integration connection test failed: #{inspect(reason)}") {:error, "Connection failed - please check your API credentials and try again"} end end