livebook/test/livebook_web/plugs/auth_plug_test.exs

108 lines
3.3 KiB
Elixir
Raw Normal View History

defmodule LivebookWeb.AuthPlugTest do
use LivebookWeb.ConnCase, async: false
setup context do
2021-04-15 20:15:56 +08:00
{type, value} =
cond do
token = context[:token] -> {:token, token}
password = context[:password] -> {:password, password}
true -> {:disabled, ""}
end
unless type == :disabled do
Application.put_env(:livebook, :authentication_mode, type)
Application.put_env(:livebook, type, value)
on_exit(fn ->
2021-04-15 20:15:56 +08:00
Application.put_env(:livebook, :authentication_mode, :disabled)
Application.delete_env(:livebook, type)
end)
end
:ok
end
describe "token authentication" do
test "skips authentication when no token is configured", %{conn: conn} do
conn = get(conn, "/")
assert conn.status == 200
assert conn.resp_body =~ "New notebook"
end
@tag token: "grumpycat"
test "redirects to '/authenticate' if not authenticated", %{conn: conn} do
conn = get(conn, "/")
assert redirected_to(conn) == "/authenticate"
end
@tag token: "grumpycat"
test "redirects to the same path when valid token is provided in query params", %{conn: conn} do
conn = get(conn, "/?token=grumpycat")
assert redirected_to(conn) == "/"
end
@tag token: "grumpycat"
test "redirects to '/authenticate' when invalid token is provided in query params",
%{conn: conn} do
conn = get(conn, "/")
assert redirected_to(conn) == "/authenticate"
end
@tag token: "grumpycat"
test "persists authentication across requests", %{conn: conn} do
conn = get(conn, "/?token=grumpycat")
assert get_session(conn, "80:token")
conn = get(conn, "/")
assert conn.status == 200
assert conn.resp_body =~ "New notebook"
end
end
2021-04-15 20:15:56 +08:00
describe "password authentication" do
test "redirects to '/' if no authentication is required", %{conn: conn} do
conn = get(conn, "/authenticate")
assert redirected_to(conn) == "/"
end
2021-04-15 20:15:56 +08:00
@tag password: "grumpycat"
test "redirects to '/authenticate' if not authenticated", %{conn: conn} do
2021-04-15 20:15:56 +08:00
conn = get(conn, "/")
assert redirected_to(conn) == "/authenticate"
end
@tag password: "grumpycat"
test "redirects to '/' on valid authentication", %{conn: conn} do
conn = post(conn, Routes.auth_path(conn, :authenticate), password: "grumpycat")
assert redirected_to(conn) == "/"
conn = get(conn, "/")
assert html_response(conn, 200) =~ "New notebook"
end
@tag password: "grumpycat"
test "redirects back to '/authenticate' on invalid password", %{conn: conn} do
conn = post(conn, Routes.auth_path(conn, :authenticate), password: "invalid password")
assert html_response(conn, 200) =~ "Authentication required"
2021-04-15 20:15:56 +08:00
conn = get(conn, "/")
assert redirected_to(conn) == "/authenticate"
end
@tag password: "grumpycat"
test "persists authentication across requests", %{conn: conn} do
2021-04-15 20:15:56 +08:00
conn = post(conn, Routes.auth_path(conn, :authenticate), password: "grumpycat")
assert get_session(conn, "80:password")
2021-04-15 20:15:56 +08:00
conn = get(conn, "/")
2021-04-15 20:15:56 +08:00
assert conn.status == 200
assert conn.resp_body =~ "New notebook"
conn = get(conn, "/authenticate")
assert redirected_to(conn) == "/"
2021-04-15 20:15:56 +08:00
end
end
end