Update pleroma.nginx
[akkoma] / test / plugs / authentication_plug_test.exs
index 6f1568ec39588f7c73234c0d363275f1330884b6..729ac8ae5518da97b2cbe1df257e6ce830ca9ad3 100644 (file)
@@ -2,17 +2,25 @@ defmodule Pleroma.Plugs.AuthenticationPlugTest do
   use Pleroma.Web.ConnCase, async: true
 
   alias Pleroma.Plugs.AuthenticationPlug
+  alias Pleroma.User
 
   defp fetch_nil(_name) do
     {:ok, nil}
   end
 
-  @user %{
+  @user %User{
     id: 1,
     name: "dude",
     password_hash: Comeonin.Pbkdf2.hashpwsalt("guy")
   }
 
+  @deactivated %User{
+    id: 1,
+    name: "dude",
+    password_hash: Comeonin.Pbkdf2.hashpwsalt("guy"),
+    info: %{"deactivated" => true}
+  }
+
   @session_opts [
     store: :cookie,
     key: "_test",
@@ -29,22 +37,24 @@ defmodule Pleroma.Plugs.AuthenticationPlugTest do
 
   describe "without an authorization header" do
     test "it halts the application" do
-      conn = build_conn()
-      |> Plug.Session.call(Plug.Session.init(@session_opts))
-      |> fetch_session
-      |> AuthenticationPlug.call(%{})
+      conn =
+        build_conn()
+        |> Plug.Session.call(Plug.Session.init(@session_opts))
+        |> fetch_session
+        |> AuthenticationPlug.call(%{})
 
       assert conn.status == 403
       assert conn.halted == true
     end
 
     test "it assigns a nil user if the 'optional' option is used" do
-      conn = build_conn()
-      |> Plug.Session.call(Plug.Session.init(@session_opts))
-      |> fetch_session
-      |> AuthenticationPlug.call(%{optional: true})
+      conn =
+        build_conn()
+        |> Plug.Session.call(Plug.Session.init(@session_opts))
+        |> fetch_session
+        |> AuthenticationPlug.call(%{optional: true})
 
-      assert %{ user: nil } == conn.assigns
+      assert %{user: nil} == conn.assigns
     end
   end
 
@@ -65,9 +75,9 @@ defmodule Pleroma.Plugs.AuthenticationPlugTest do
         build_conn()
         |> Plug.Session.call(Plug.Session.init(@session_opts))
         |> fetch_session
-        |> AuthenticationPlug.call(%{optional: true, fetcher: &fetch_nil/1 })
+        |> AuthenticationPlug.call(%{optional: true, fetcher: &fetch_nil/1})
 
-      assert %{ user: nil } == conn.assigns
+      assert %{user: nil} == conn.assigns
     end
   end
 
@@ -105,7 +115,7 @@ defmodule Pleroma.Plugs.AuthenticationPlugTest do
         |> put_req_header("authorization", header)
         |> AuthenticationPlug.call(opts)
 
-      assert %{ user: nil } == conn.assigns
+      assert %{user: nil} == conn.assigns
     end
   end
 
@@ -118,17 +128,40 @@ defmodule Pleroma.Plugs.AuthenticationPlugTest do
 
       header = basic_auth_enc("dude", "guy")
 
-      conn = conn
+      conn =
+        conn
         |> Plug.Session.call(Plug.Session.init(@session_opts))
         |> fetch_session
         |> put_req_header("authorization", header)
         |> AuthenticationPlug.call(opts)
 
-      assert %{ user: @user } == conn.assigns
+      assert %{user: @user} == conn.assigns
       assert get_session(conn, :user_id) == @user.id
       assert conn.halted == false
     end
   end
+
+  describe "with a correct authorization header for an deactiviated user" do
+    test "it halts the appication", %{conn: conn} do
+      opts = %{
+        optional: false,
+        fetcher: fn _ -> @deactivated end
+      }
+
+      header = basic_auth_enc("dude", "guy")
+
+      conn =
+        conn
+        |> Plug.Session.call(Plug.Session.init(@session_opts))
+        |> fetch_session
+        |> put_req_header("authorization", header)
+        |> AuthenticationPlug.call(opts)
+
+      assert conn.status == 403
+      assert conn.halted == true
+    end
+  end
+
   describe "with a user_id in the session for an existing user" do
     test "it assigns the user", %{conn: conn} do
       opts = %{
@@ -138,16 +171,29 @@ defmodule Pleroma.Plugs.AuthenticationPlugTest do
 
       header = basic_auth_enc("dude", "THIS IS WRONG")
 
-      conn = conn
+      conn =
+        conn
         |> Plug.Session.call(Plug.Session.init(@session_opts))
         |> fetch_session
         |> put_session(:user_id, @user.id)
         |> put_req_header("authorization", header)
         |> AuthenticationPlug.call(opts)
 
-      assert %{ user: @user } == conn.assigns
+      assert %{user: @user} == conn.assigns
       assert get_session(conn, :user_id) == @user.id
       assert conn.halted == false
     end
   end
+
+  describe "with an assigned user" do
+    test "it does nothing, returning the incoming conn", %{conn: conn} do
+      conn =
+        conn
+        |> assign(:user, @user)
+
+      conn_result = AuthenticationPlug.call(conn, %{})
+
+      assert conn == conn_result
+    end
+  end
 end