From 432090dec48e25b3c8a4f02ed8aec2105237cff1 Mon Sep 17 00:00:00 2001 From: Claudio Ortolina Date: Mon, 21 Oct 2024 09:42:45 +0100 Subject: [PATCH] Add tests for require_login plug --- .../plug/require_login_test.exs | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 test/music_library_web/plug/require_login_test.exs diff --git a/test/music_library_web/plug/require_login_test.exs b/test/music_library_web/plug/require_login_test.exs new file mode 100644 index 00000000..da81e66c --- /dev/null +++ b/test/music_library_web/plug/require_login_test.exs @@ -0,0 +1,49 @@ +defmodule MusicLibraryWeb.Plug.RequireLoginTest do + use ExUnit.Case, async: true + use Plug.Test + + alias MusicLibraryWeb.Plug.RequireLogin + + defp setup_conn(config) do + Map.put( + config, + :conn, + conn(:get, "/any-path") + |> Phoenix.ConnTest.init_test_session(%{}) + |> Phoenix.ConnTest.fetch_flash() + ) + end + + defp authenticate(%{conn: conn} = config) do + Map.put(config, :conn, Phoenix.ConnTest.init_test_session(conn, %{logged_in: true})) + end + + describe "when logged out" do + setup [:setup_conn] + + test "it redirects to /login", %{conn: conn} do + conn = RequireLogin.call(conn, []) + + {"location", location} = + conn.resp_headers + |> List.keyfind("location", 0) + + assert conn.status == 302 + assert conn.state == :sent + assert conn.halted + assert location == "/login" + assert conn.assigns.flash == %{"error" => "You must be logged in to access this page"} + end + end + + describe "when logged in" do + setup [:setup_conn, :authenticate] + + test "it passes through", %{conn: conn} do + conn = RequireLogin.call(conn, []) + + assert conn.status == nil + assert conn.state == :unset + end + end +end