Reset session when hitting /login
This commit is contained in:
@@ -4,7 +4,9 @@ defmodule MusicLibraryWeb.SessionController do
|
|||||||
@empty_form %{"password" => ""}
|
@empty_form %{"password" => ""}
|
||||||
|
|
||||||
def new(conn, _params) do
|
def new(conn, _params) do
|
||||||
conn |> render(:new, form: @empty_form, layout: {MusicLibraryWeb.Layouts, "unauthenticated"})
|
conn
|
||||||
|
|> delete_session(:logged_in)
|
||||||
|
|> render(:new, form: @empty_form, layout: {MusicLibraryWeb.Layouts, "unauthenticated"})
|
||||||
end
|
end
|
||||||
|
|
||||||
def create(conn, %{"password" => request_password}) do
|
def create(conn, %{"password" => request_password}) do
|
||||||
|
|||||||
@@ -0,0 +1,60 @@
|
|||||||
|
defmodule MusicLibraryWeb.SessionControllerTest do
|
||||||
|
use MusicLibraryWeb.ConnCase
|
||||||
|
|
||||||
|
describe "GET /login" do
|
||||||
|
@tag :logged_out
|
||||||
|
test "it shows the login form", %{conn: conn} do
|
||||||
|
conn = get(conn, "/login")
|
||||||
|
|
||||||
|
response = html_response(conn, 200)
|
||||||
|
assert response =~ "Welcome to your Music Library"
|
||||||
|
assert response =~ "Password"
|
||||||
|
assert response =~ "Sign in"
|
||||||
|
end
|
||||||
|
|
||||||
|
test "it resets the session", %{conn: conn} do
|
||||||
|
conn = get(conn, "/login")
|
||||||
|
|
||||||
|
session = get_session(conn)
|
||||||
|
|
||||||
|
refute session["logged_in"]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe "POST /sessions/create" do
|
||||||
|
@tag :logged_out
|
||||||
|
test "it refuses an invalid password", %{conn: conn} do
|
||||||
|
conn = post(conn, ~p"/sessions/create", %{"password" => "wrong password"})
|
||||||
|
|
||||||
|
{"location", location} =
|
||||||
|
conn.resp_headers
|
||||||
|
|> List.keyfind("location", 0)
|
||||||
|
|
||||||
|
session = get_session(conn)
|
||||||
|
|
||||||
|
assert conn.status == 302
|
||||||
|
assert location == "/login"
|
||||||
|
assert conn.assigns.flash == %{"error" => "Invalid password"}
|
||||||
|
refute session["logged_in"]
|
||||||
|
end
|
||||||
|
|
||||||
|
test "it accepts a valid password", %{conn: conn} do
|
||||||
|
valid_password =
|
||||||
|
Application.get_env(:music_library, MusicLibraryWeb)
|
||||||
|
|> Keyword.fetch!(:auth_password)
|
||||||
|
|
||||||
|
conn = post(conn, ~p"/sessions/create", %{"password" => valid_password})
|
||||||
|
|
||||||
|
session = get_session(conn)
|
||||||
|
|
||||||
|
{"location", location} =
|
||||||
|
conn.resp_headers
|
||||||
|
|> List.keyfind("location", 0)
|
||||||
|
|
||||||
|
assert conn.status == 302
|
||||||
|
assert location == "/"
|
||||||
|
assert conn.assigns.flash == %{}
|
||||||
|
assert session["logged_in"]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -34,9 +34,15 @@ defmodule MusicLibraryWeb.ConnCase do
|
|||||||
setup tags do
|
setup tags do
|
||||||
MusicLibrary.DataCase.setup_sandbox(tags)
|
MusicLibrary.DataCase.setup_sandbox(tags)
|
||||||
|
|
||||||
|
# The majority of functionality assumes a logged in user,
|
||||||
|
# so we default to that.
|
||||||
conn =
|
conn =
|
||||||
|
if tags[:logged_out] do
|
||||||
|
Phoenix.ConnTest.build_conn()
|
||||||
|
else
|
||||||
Phoenix.ConnTest.build_conn()
|
Phoenix.ConnTest.build_conn()
|
||||||
|> Phoenix.ConnTest.init_test_session(%{logged_in: true})
|
|> Phoenix.ConnTest.init_test_session(%{logged_in: true})
|
||||||
|
end
|
||||||
|
|
||||||
{:ok, conn: conn}
|
{:ok, conn: conn}
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user