First
[anni] / test / pleroma / user / query_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.User.QueryTest do
6   use Pleroma.DataCase, async: false
7
8   alias Pleroma.Repo
9   alias Pleroma.User
10   alias Pleroma.User.Query
11   alias Pleroma.Web.ActivityPub.InternalFetchActor
12
13   import Pleroma.Factory
14
15   describe "internal users" do
16     test "it filters out internal users by default" do
17       %User{nickname: "internal.fetch"} = InternalFetchActor.get_actor()
18
19       assert [_user] = User |> Repo.all()
20       assert [] == %{} |> Query.build() |> Repo.all()
21     end
22
23     test "it filters out users without nickname by default" do
24       insert(:user, %{nickname: nil})
25
26       assert [_user] = User |> Repo.all()
27       assert [] == %{} |> Query.build() |> Repo.all()
28     end
29
30     test "it returns internal users when enabled" do
31       %User{nickname: "internal.fetch"} = InternalFetchActor.get_actor()
32       insert(:user, %{nickname: nil})
33
34       assert %{internal: true} |> Query.build() |> Repo.aggregate(:count) == 2
35     end
36   end
37
38   test "is_suggested param" do
39     _user1 = insert(:user, is_suggested: false)
40     user2 = insert(:user, is_suggested: true)
41
42     assert [^user2] =
43              %{is_suggested: true}
44              |> User.Query.build()
45              |> Repo.all()
46   end
47
48   describe "is_privileged param" do
49     setup do
50       %{
51         user: insert(:user, local: true, is_admin: false, is_moderator: false),
52         moderator_user: insert(:user, local: true, is_admin: false, is_moderator: true),
53         admin_user: insert(:user, local: true, is_admin: true, is_moderator: false),
54         admin_moderator_user: insert(:user, local: true, is_admin: true, is_moderator: true),
55         remote_user: insert(:user, local: false, is_admin: true, is_moderator: true),
56         non_active_user:
57           insert(:user, local: true, is_admin: true, is_moderator: true, is_active: false)
58       }
59     end
60
61     test "doesn't return any users when there are no privileged roles" do
62       clear_config([:instance, :admin_privileges], [])
63       clear_config([:instance, :moderator_privileges], [])
64
65       assert [] = User.Query.build(%{is_privileged: :cofe}) |> Repo.all()
66     end
67
68     test "returns moderator users if they are privileged", %{
69       moderator_user: moderator_user,
70       admin_moderator_user: admin_moderator_user
71     } do
72       clear_config([:instance, :admin_privileges], [])
73       clear_config([:instance, :moderator_privileges], [:cofe])
74
75       assert [_, _] = User.Query.build(%{is_privileged: :cofe}) |> Repo.all()
76       assert moderator_user in (User.Query.build(%{is_privileged: :cofe}) |> Repo.all())
77       assert admin_moderator_user in (User.Query.build(%{is_privileged: :cofe}) |> Repo.all())
78     end
79
80     test "returns admin users if they are privileged", %{
81       admin_user: admin_user,
82       admin_moderator_user: admin_moderator_user
83     } do
84       clear_config([:instance, :admin_privileges], [:cofe])
85       clear_config([:instance, :moderator_privileges], [])
86
87       assert [_, _] = User.Query.build(%{is_privileged: :cofe}) |> Repo.all()
88       assert admin_user in (User.Query.build(%{is_privileged: :cofe}) |> Repo.all())
89       assert admin_moderator_user in (User.Query.build(%{is_privileged: :cofe}) |> Repo.all())
90     end
91
92     test "returns admin and moderator users if they are both privileged", %{
93       moderator_user: moderator_user,
94       admin_user: admin_user,
95       admin_moderator_user: admin_moderator_user
96     } do
97       clear_config([:instance, :admin_privileges], [:cofe])
98       clear_config([:instance, :moderator_privileges], [:cofe])
99
100       assert [_, _, _] = User.Query.build(%{is_privileged: :cofe}) |> Repo.all()
101       assert admin_user in (User.Query.build(%{is_privileged: :cofe}) |> Repo.all())
102       assert moderator_user in (User.Query.build(%{is_privileged: :cofe}) |> Repo.all())
103       assert admin_moderator_user in (User.Query.build(%{is_privileged: :cofe}) |> Repo.all())
104     end
105   end
106 end