Reset session when hitting /login
This commit is contained in:
@@ -4,7 +4,9 @@ defmodule MusicLibraryWeb.SessionController do
|
||||
@empty_form %{"password" => ""}
|
||||
|
||||
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
|
||||
|
||||
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
|
||||
MusicLibrary.DataCase.setup_sandbox(tags)
|
||||
|
||||
# The majority of functionality assumes a logged in user,
|
||||
# so we default to that.
|
||||
conn =
|
||||
Phoenix.ConnTest.build_conn()
|
||||
|> Phoenix.ConnTest.init_test_session(%{logged_in: true})
|
||||
if tags[:logged_out] do
|
||||
Phoenix.ConnTest.build_conn()
|
||||
else
|
||||
Phoenix.ConnTest.build_conn()
|
||||
|> Phoenix.ConnTest.init_test_session(%{logged_in: true})
|
||||
end
|
||||
|
||||
{:ok, conn: conn}
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user