First
[anni] / test / pleroma / web / plugs / ensure_privileged_plug_test.exs
1 # Pleroma: A lightweight social networking server
2 # Copyright © 2017-2022 Pleroma Authors <https://pleroma.social/>
3 # SPDX-License-Identifier: AGPL-3.0-only
4
5 defmodule Pleroma.Web.Plugs.EnsurePrivilegedPlugTest do
6   use Pleroma.Web.ConnCase, async: true
7
8   alias Pleroma.Web.Plugs.EnsurePrivilegedPlug
9   import Pleroma.Factory
10
11   test "denies a user that isn't moderator or admin" do
12     clear_config([:instance, :admin_privileges], [])
13     user = insert(:user)
14
15     conn =
16       build_conn()
17       |> assign(:user, user)
18       |> EnsurePrivilegedPlug.call(:cofe)
19
20     assert conn.status == 403
21   end
22
23   test "accepts an admin that is privileged" do
24     clear_config([:instance, :admin_privileges], [:cofe])
25     user = insert(:user, is_admin: true)
26     conn = assign(build_conn(), :user, user)
27
28     ret_conn = EnsurePrivilegedPlug.call(conn, :cofe)
29
30     assert conn == ret_conn
31   end
32
33   test "denies an admin that isn't privileged" do
34     clear_config([:instance, :admin_privileges], [:suya])
35     user = insert(:user, is_admin: true)
36
37     conn =
38       build_conn()
39       |> assign(:user, user)
40       |> EnsurePrivilegedPlug.call(:cofe)
41
42     assert conn.status == 403
43   end
44
45   test "accepts a moderator that is privileged" do
46     clear_config([:instance, :moderator_privileges], [:cofe])
47     user = insert(:user, is_moderator: true)
48     conn = assign(build_conn(), :user, user)
49
50     ret_conn = EnsurePrivilegedPlug.call(conn, :cofe)
51
52     assert conn == ret_conn
53   end
54
55   test "denies a moderator that isn't privileged" do
56     clear_config([:instance, :moderator_privileges], [:suya])
57     user = insert(:user, is_moderator: true)
58
59     conn =
60       build_conn()
61       |> assign(:user, user)
62       |> EnsurePrivilegedPlug.call(:cofe)
63
64     assert conn.status == 403
65   end
66
67   test "accepts for a privileged role even if other role isn't privileged" do
68     clear_config([:instance, :admin_privileges], [:cofe])
69     clear_config([:instance, :moderator_privileges], [])
70     user = insert(:user, is_admin: true, is_moderator: true)
71     conn = assign(build_conn(), :user, user)
72
73     ret_conn = EnsurePrivilegedPlug.call(conn, :cofe)
74
75     # privileged through admin role
76     assert conn == ret_conn
77
78     clear_config([:instance, :admin_privileges], [])
79     clear_config([:instance, :moderator_privileges], [:cofe])
80     user = insert(:user, is_admin: true, is_moderator: true)
81     conn = assign(build_conn(), :user, user)
82
83     ret_conn = EnsurePrivilegedPlug.call(conn, :cofe)
84
85     # privileged through moderator role
86     assert conn == ret_conn
87   end
88
89   test "denies when no user is set" do
90     conn =
91       build_conn()
92       |> EnsurePrivilegedPlug.call(:cofe)
93
94     assert conn.status == 403
95   end
96 end