lib/session_storage/assigns_map.ex

defmodule AuthN.SessionStorage.AssignsMap do
  @moduledoc ~S"""
  Module for storing sessions into `conn.private`. Used for testing.
  """

  @behaviour AuthN.SessionStorage

  @type conn :: %Plug.Conn{}

  @spec get_user_token(conn) :: {term | nil, conn}
  def get_user_token(conn) do
    user_token =
      case conn.private do
        %{auth_user_token: user_token} -> user_token
        _ -> nil
      end
    {user_token, conn}
  end

  @spec put_user_token(conn, term) :: conn
  def put_user_token(conn, user_token), do: Plug.Conn.put_private(conn, :auth_user_token, user_token)

  @spec delete_user_token(conn, function) :: conn
  def delete_user_token(conn, _), do: %{conn | private: Map.delete(conn.private, :auth_user_token)}
end