Browse Source

AdminAPI: Filter users by `need_approval`

chore/update-floki-find-usage
Alex Gleason 4 years ago
parent
commit
33f1b29b2c
No known key found for this signature in database GPG Key ID: 7211D1F99744FBB7
5 changed files with 56 additions and 1 deletions
  1. +1
    -0
      docs/API/admin_api.md
  2. +5
    -0
      lib/pleroma/user/query.ex
  3. +1
    -1
      lib/pleroma/web/admin_api/controllers/admin_api_controller.ex
  4. +38
    -0
      test/web/admin_api/controllers/admin_api_controller_test.exs
  5. +11
    -0
      test/web/admin_api/search_test.exs

+ 1
- 0
docs/API/admin_api.md View File

@@ -19,6 +19,7 @@ Configuration options:
- `local`: only local users
- `external`: only external users
- `active`: only active users
- `need_approval`: only unapproved users
- `deactivated`: only deactivated users
- `is_admin`: users with admin role
- `is_moderator`: users with moderator role


+ 5
- 0
lib/pleroma/user/query.ex View File

@@ -42,6 +42,7 @@ defmodule Pleroma.User.Query do
external: boolean(),
active: boolean(),
deactivated: boolean(),
need_approval: boolean(),
is_admin: boolean(),
is_moderator: boolean(),
super_users: boolean(),
@@ -146,6 +147,10 @@ defmodule Pleroma.User.Query do
|> where([u], not is_nil(u.nickname))
end

defp compose_query({:need_approval, _}, query) do
where(query, [u], u.approval_pending)
end

defp compose_query({:followers, %User{id: id}}, query) do
query
|> where([u], u.id != ^id)


+ 1
- 1
lib/pleroma/web/admin_api/controllers/admin_api_controller.ex View File

@@ -350,7 +350,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIController do
end
end

@filters ~w(local external active deactivated is_admin is_moderator)
@filters ~w(local external active deactivated need_approval is_admin is_moderator)

@spec maybe_parse_filters(String.t()) :: %{required(String.t()) => true} | %{}
defp maybe_parse_filters(filters) when is_nil(filters) or filters == "", do: %{}


+ 38
- 0
test/web/admin_api/controllers/admin_api_controller_test.exs View File

@@ -991,6 +991,44 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
}
end

test "only unapproved users", %{conn: conn} do
user =
insert(:user,
nickname: "sadboy",
approval_pending: true,
registration_reason: "Plz let me in!"
)

insert(:user, nickname: "happyboy", approval_pending: false)

conn = get(conn, "/api/pleroma/admin/users?filters=need_approval")

users =
[
%{
"deactivated" => user.deactivated,
"id" => user.id,
"nickname" => user.nickname,
"roles" => %{"admin" => false, "moderator" => false},
"local" => true,
"tags" => [],
"avatar" => User.avatar_url(user) |> MediaProxy.url(),
"display_name" => HTML.strip_tags(user.name || user.nickname),
"confirmation_pending" => false,
"approval_pending" => true,
"url" => user.ap_id,
"registration_reason" => "Plz let me in!"
}
]
|> Enum.sort_by(& &1["nickname"])

assert json_response(conn, 200) == %{
"count" => 1,
"page_size" => 50,
"users" => users
}
end

test "load only admins", %{conn: conn, admin: admin} do
second_admin = insert(:user, is_admin: true)
insert(:user)


+ 11
- 0
test/web/admin_api/search_test.exs View File

@@ -166,5 +166,16 @@ defmodule Pleroma.Web.AdminAPI.SearchTest do
assert total == 3
assert count == 1
end

test "it returns unapproved user" do
unapproved = insert(:user, approval_pending: true)
insert(:user)
insert(:user)

{:ok, _results, total} = Search.user()
{:ok, [^unapproved], count} = Search.user(%{need_approval: true})
assert total == 3
assert count == 1
end
end
end

Loading…
Cancel
Save