diff options
author | Roger Braun <roger@rogerbraun.net> | 2017-03-20 17:45:47 +0100 |
---|---|---|
committer | Roger Braun <roger@rogerbraun.net> | 2017-03-20 17:56:45 +0100 |
commit | e32dbfc9a5477830dba7bf3e99621161e4454a29 (patch) | |
tree | 0179d3b453d98b30facfff72f857da2fec999f44 /test | |
parent | a93f3421a704d6728a856d5d82cdbf9c43f3f897 (diff) | |
download | pleroma-e32dbfc9a5477830dba7bf3e99621161e4454a29.tar.gz |
Add basic auth.
Diffstat (limited to 'test')
-rw-r--r-- | test/plugs/authentication_plug_test.exs | 110 |
1 files changed, 110 insertions, 0 deletions
diff --git a/test/plugs/authentication_plug_test.exs b/test/plugs/authentication_plug_test.exs new file mode 100644 index 000000000..3f2f769e7 --- /dev/null +++ b/test/plugs/authentication_plug_test.exs @@ -0,0 +1,110 @@ +defmodule Pleroma.Plugs.AuthenticationPlugTest do + use Pleroma.Web.ConnCase, async: true + + alias Pleroma.Plugs.AuthenticationPlug + + defp fetch_nil(_name) do + {:ok, nil} + end + + @user %{ + id: 1, + name: "dude", + password_hash: Comeonin.Pbkdf2.hashpwsalt("guy") + } + + defp fetch_user(_name) do + {:ok, @user} + end + + defp basic_auth_enc(username, password) do + "Basic " <> Base.encode64("#{username}:#{password}") + end + + describe "without an authorization header" do + test "it halts the application" do + conn = build_conn() |> 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() |> AuthenticationPlug.call(%{optional: true}) + + assert %{ user: nil } == conn.assigns + end + end + + describe "with an authorization header for a nonexisting user" do + test "it halts the application" do + conn = + build_conn() + |> AuthenticationPlug.call(%{fetcher: &fetch_nil/1}) + + 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() + |> AuthenticationPlug.call(%{optional: true, fetcher: &fetch_nil/1 }) + + assert %{ user: nil } == conn.assigns + end + end + + describe "with an incorrect authorization header for a enxisting user" do + test "it halts the application" do + opts = %{ + fetcher: &fetch_user/1 + } + + header = basic_auth_enc("dude", "man") + + conn = + build_conn() + |> put_req_header("authorization", header) + |> AuthenticationPlug.call(opts) + + assert conn.status == 403 + assert conn.halted == true + end + + test "it assigns a nil user if the 'optional' option is used" do + opts = %{ + optional: true, + fetcher: &fetch_user/1 + } + + header = basic_auth_enc("dude", "man") + + conn = + build_conn() + |> put_req_header("authorization", header) + |> AuthenticationPlug.call(opts) + + assert %{ user: nil } == conn.assigns + end + end + + describe "with a correct authorization header for an existing user" do + test "it assigns the user" do + opts = %{ + optional: true, + fetcher: &fetch_user/1 + } + + header = basic_auth_enc("dude", "guy") + + conn = + build_conn() + |> put_req_header("authorization", header) + |> AuthenticationPlug.call(opts) + + assert %{ user: @user } == conn.assigns + assert conn.halted == false + end + end +end |