lib/twilio_test_helper.ex

defmodule TwilioSignaturePlug.TwilioTestHelper do
  @doc """
  Set the rquired twilio signature header in a Conn object
  This is designed for testing requests to twilio-signature-plug protected routes.
  """
  def sign_conn(%{} = conn) do
    signature = TwilioSignaturePlug.expected_signature(conn)
    case conn do
      %{:req_headers => headers} ->
        # update the headers
        %{conn | "req_headers": set_twilio_signature_header(headers, signature)}
      _ ->
        # if no headers were set, we create them
        %{conn | req_headers: [{"x-twilio-signature", signature}]}
    end
  end

  defp set_twilio_signature_header(headers, signature) do
    [{"x-twilio-signature", signature} | headers |> Enum.filter(fn x ->
      case x do
        {"x-twilio-signature", _} -> false
        {_, _} -> true
      end
    end)]
  end
end