Reset session when hitting /login
This commit is contained in:
@@ -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