user = insert(:user)
- conn = get(build_conn(), "/api/pleroma/admin/users/#{user.nickname}?admin_token=password123")
+ conn =
+ get(build_conn(), "/api/v1/pleroma/admin/users/#{user.nickname}?admin_token=password123")
assert json_response_and_validate_schema(conn, 200)
end
- test "GET /api/pleroma/admin/users/:nickname requires admin:read:accounts or broader scope",
+ test "GET /api/v1/pleroma/admin/users/:nickname requires admin:read:accounts or broader scope",
%{admin: admin} do
user = insert(:user)
- url = "/api/pleroma/admin/users/#{user.nickname}"
+ url = "/api/v1/pleroma/admin/users/#{user.nickname}"
good_token1 = insert(:oauth_token, user: admin, scopes: ["admin"])
good_token2 = insert(:oauth_token, user: admin, scopes: ["admin:read"])
end
end
- describe "DELETE /api/pleroma/admin/users" do
+ describe "DELETE /api/v1/pleroma/admin/users" do
test "single user", %{admin: admin, conn: conn} do
clear_config([:instance, :federating], true)
conn =
conn
|> put_req_header("accept", "application/json")
- |> delete("/api/pleroma/admin/users?nickname=#{user.nickname}")
+ |> delete("/api/v1/pleroma/admin/users?nickname=#{user.nickname}")
ObanHelpers.perform_all()
conn
|> put_req_header("accept", "application/json")
|> put_req_header("content-type", "application/json")
- |> delete("/api/pleroma/admin/users", %{
+ |> delete("/api/v1/pleroma/admin/users", %{
nicknames: [user_one.nickname, user_two.nickname]
})
|> json_response_and_validate_schema(200)
end
end
- describe "/api/pleroma/admin/users" do
+ describe "/api/v1/pleroma/admin/users" do
test "Create", %{conn: conn} do
response =
conn
|> put_req_header("accept", "application/json")
|> put_req_header("content-type", "application/json")
- |> post("/api/pleroma/admin/users", %{
+ |> post("/api/v1/pleroma/admin/users", %{
"users" => [
%{
"nickname" => "lain",
conn
|> put_req_header("accept", "application/json")
|> put_req_header("content-type", "application/json")
- |> post("/api/pleroma/admin/users", %{
+ |> post("/api/v1/pleroma/admin/users", %{
"users" => [
%{
"nickname" => "lain",
conn
|> put_req_header("accept", "application/json")
|> put_req_header("content-type", "application/json")
- |> post("/api/pleroma/admin/users", %{
+ |> post("/api/v1/pleroma/admin/users", %{
"users" => [
%{
"nickname" => user.nickname,
conn
|> put_req_header("accept", "application/json")
|> put_req_header("content-type", "application/json")
- |> post("/api/pleroma/admin/users", %{
+ |> post("/api/v1/pleroma/admin/users", %{
"users" => [
%{
"nickname" => "newuser",
end
end
- describe "/api/pleroma/admin/users/:nickname" do
+ describe "/api/v1/pleroma/admin/users/:nickname" do
test "Show", %{conn: conn} do
user = insert(:user)
- conn = get(conn, "/api/pleroma/admin/users/#{user.nickname}")
+ conn = get(conn, "/api/v1/pleroma/admin/users/#{user.nickname}")
assert user_response(user) == json_response_and_validate_schema(conn, 200)
end
test "when the user doesn't exist", %{conn: conn} do
user = build(:user)
- conn = get(conn, "/api/pleroma/admin/users/#{user.nickname}")
+ conn = get(conn, "/api/v1/pleroma/admin/users/#{user.nickname}")
assert %{"error" => "Not found"} == json_response_and_validate_schema(conn, 404)
end
end
- describe "/api/pleroma/admin/users/follow" do
+ describe "/api/v1/pleroma/admin/users/follow" do
test "allows to force-follow another user", %{admin: admin, conn: conn} do
user = insert(:user)
follower = insert(:user)
conn
|> put_req_header("accept", "application/json")
|> put_req_header("content-type", "application/json")
- |> post("/api/pleroma/admin/users/follow", %{
+ |> post("/api/v1/pleroma/admin/users/follow", %{
"follower" => follower.nickname,
"followed" => user.nickname
})
end
end
- describe "/api/pleroma/admin/users/unfollow" do
+ describe "/api/v1/pleroma/admin/users/unfollow" do
test "allows to force-unfollow another user", %{admin: admin, conn: conn} do
user = insert(:user)
follower = insert(:user)
conn
|> put_req_header("accept", "application/json")
|> put_req_header("content-type", "application/json")
- |> post("/api/pleroma/admin/users/unfollow", %{
+ |> post("/api/v1/pleroma/admin/users/unfollow", %{
"follower" => follower.nickname,
"followed" => user.nickname
})
end
end
- describe "GET /api/pleroma/admin/users" do
+ describe "GET /api/v1/pleroma/admin/users" do
test "renders users array for the first page", %{conn: conn, admin: admin} do
user = insert(:user, local: false, tags: ["foo", "bar"])
user2 = insert(:user, is_approved: false, registration_reason: "I'm a chill dude")
- conn = get(conn, "/api/pleroma/admin/users?page=1")
+ conn = get(conn, "/api/v1/pleroma/admin/users?page=1")
- users =
- [
- user_response(
- admin,
- %{"roles" => %{"admin" => true, "moderator" => false}}
- ),
- user_response(user, %{"local" => false, "tags" => ["foo", "bar"]}),
- user_response(
- user2,
- %{
- "local" => true,
- "is_approved" => false,
- "registration_reason" => "I'm a chill dude",
- "actor_type" => "Person"
- }
- )
- ]
- |> Enum.sort_by(& &1["nickname"])
+ users = [
+ user_response(
+ user2,
+ %{
+ "local" => true,
+ "is_approved" => false,
+ "registration_reason" => "I'm a chill dude",
+ "actor_type" => "Person"
+ }
+ ),
+ user_response(user, %{"local" => false, "tags" => ["foo", "bar"]}),
+ user_response(
+ admin,
+ %{"roles" => %{"admin" => true, "moderator" => false}}
+ )
+ ]
assert json_response_and_validate_schema(conn, 200) == %{
"count" => 3,
assert %{"count" => 26, "page_size" => 10, "users" => users1} =
conn
- |> get("/api/pleroma/admin/users?page=1&filters=", %{page_size: "10"})
+ |> get("/api/v1/pleroma/admin/users?page=1&filters=", %{page_size: "10"})
|> json_response_and_validate_schema(200)
assert Enum.count(users1) == 10
assert %{"count" => 26, "page_size" => 10, "users" => users2} =
conn
- |> get("/api/pleroma/admin/users?page=2&filters=", %{page_size: "10"})
+ |> get("/api/v1/pleroma/admin/users?page=2&filters=", %{page_size: "10"})
|> json_response_and_validate_schema(200)
assert Enum.count(users2) == 10
assert %{"count" => 26, "page_size" => 10, "users" => users3} =
conn
- |> get("/api/pleroma/admin/users?page=3&filters=", %{page_size: "10"})
+ |> get("/api/v1/pleroma/admin/users?page=3&filters=", %{page_size: "10"})
|> json_response_and_validate_schema(200)
assert Enum.count(users3) == 6
test "renders empty array for the second page", %{conn: conn} do
insert(:user)
- conn = get(conn, "/api/pleroma/admin/users?page=2")
+ conn = get(conn, "/api/v1/pleroma/admin/users?page=2")
assert json_response_and_validate_schema(conn, 200) == %{
"count" => 2,
test "regular search", %{conn: conn} do
user = insert(:user, nickname: "bob")
- conn = get(conn, "/api/pleroma/admin/users?query=bo")
+ conn = get(conn, "/api/v1/pleroma/admin/users?query=bo")
assert json_response_and_validate_schema(conn, 200) == %{
"count" => 1,
user = insert(:user, nickname: "nickname@domain.com")
insert(:user)
- conn = get(conn, "/api/pleroma/admin/users?query=domain.com")
+ conn = get(conn, "/api/v1/pleroma/admin/users?query=domain.com")
assert json_response_and_validate_schema(conn, 200) == %{
"count" => 1,
user = insert(:user, nickname: "nickname@domain.com")
insert(:user)
- conn = get(conn, "/api/pleroma/admin/users?query=nickname@domain.com")
+ conn = get(conn, "/api/v1/pleroma/admin/users?query=nickname@domain.com")
assert json_response_and_validate_schema(conn, 200) == %{
"count" => 1,
user = insert(:user, name: "Display name")
insert(:user)
- conn = get(conn, "/api/pleroma/admin/users?name=display")
+ conn = get(conn, "/api/v1/pleroma/admin/users?name=display")
assert json_response_and_validate_schema(conn, 200) == %{
"count" => 1,
user = insert(:user, email: "email@example.com")
insert(:user)
- conn = get(conn, "/api/pleroma/admin/users?email=email@example.com")
+ conn = get(conn, "/api/v1/pleroma/admin/users?email=email@example.com")
assert json_response_and_validate_schema(conn, 200) == %{
"count" => 1,
user = insert(:user, nickname: "aalice")
user2 = insert(:user, nickname: "alice")
- conn1 = get(conn, "/api/pleroma/admin/users?query=a&page_size=1&page=1")
+ conn1 = get(conn, "/api/v1/pleroma/admin/users?query=a&page_size=1&page=1")
assert json_response_and_validate_schema(conn1, 200) == %{
"count" => 2,
"page_size" => 1,
- "users" => [user_response(user)]
+ "users" => [user_response(user2)]
}
- conn2 = get(conn, "/api/pleroma/admin/users?query=a&page_size=1&page=2")
+ conn2 = get(conn, "/api/v1/pleroma/admin/users?query=a&page_size=1&page=2")
assert json_response_and_validate_schema(conn2, 200) == %{
"count" => 2,
"page_size" => 1,
- "users" => [user_response(user2)]
+ "users" => [user_response(user)]
}
end
build_conn()
|> assign(:user, admin)
|> assign(:token, token)
- |> get("/api/pleroma/admin/users?query=bo&filters=local")
+ |> get("/api/v1/pleroma/admin/users?query=bo&filters=local")
assert json_response_and_validate_schema(conn, 200) == %{
"count" => 1,
insert(:user, nickname: "bobb", local: false)
- conn = get(conn, "/api/pleroma/admin/users?filters=local")
+ conn = get(conn, "/api/v1/pleroma/admin/users?filters=local")
- users =
- [
- user_response(user),
- user_response(admin, %{
- "roles" => %{"admin" => true, "moderator" => false}
- }),
- user_response(old_admin, %{
- "is_active" => true,
- "roles" => %{"admin" => true, "moderator" => false}
- })
- ]
- |> Enum.sort_by(& &1["nickname"])
+ users = [
+ user_response(user),
+ user_response(admin, %{
+ "roles" => %{"admin" => true, "moderator" => false}
+ }),
+ user_response(old_admin, %{
+ "is_active" => true,
+ "roles" => %{"admin" => true, "moderator" => false}
+ })
+ ]
assert json_response_and_validate_schema(conn, 200) == %{
"count" => 3,
result =
conn
- |> get("/api/pleroma/admin/users?filters=unconfirmed")
+ |> get("/api/v1/pleroma/admin/users?filters=unconfirmed")
|> json_response_and_validate_schema(200)
users =
"is_approved" => true
})
end)
- |> Enum.sort_by(& &1["nickname"])
assert result == %{"count" => 2, "page_size" => 50, "users" => users}
end
insert(:user, nickname: "happyboy", is_approved: true)
- conn = get(conn, "/api/pleroma/admin/users?filters=need_approval")
+ conn = get(conn, "/api/v1/pleroma/admin/users?filters=need_approval")
users = [
user_response(
insert(:user)
insert(:user)
- conn = get(conn, "/api/pleroma/admin/users?filters=is_admin")
+ conn = get(conn, "/api/v1/pleroma/admin/users?filters=is_admin")
- users =
- [
- user_response(admin, %{
- "is_active" => true,
- "roles" => %{"admin" => true, "moderator" => false}
- }),
- user_response(second_admin, %{
- "is_active" => true,
- "roles" => %{"admin" => true, "moderator" => false}
- })
- ]
- |> Enum.sort_by(& &1["nickname"])
+ users = [
+ user_response(second_admin, %{
+ "is_active" => true,
+ "roles" => %{"admin" => true, "moderator" => false}
+ }),
+ user_response(admin, %{
+ "is_active" => true,
+ "roles" => %{"admin" => true, "moderator" => false}
+ })
+ ]
assert json_response_and_validate_schema(conn, 200) == %{
"count" => 2,
insert(:user)
insert(:user)
- conn = get(conn, "/api/pleroma/admin/users?filters=is_moderator")
+ conn = get(conn, "/api/v1/pleroma/admin/users?filters=is_moderator")
assert json_response_and_validate_schema(conn, 200) == %{
"count" => 1,
|> get(user_path(conn, :index), %{actor_types: ["Person"]})
|> json_response_and_validate_schema(200)
- users =
- [
- user_response(admin, %{"roles" => %{"admin" => true, "moderator" => false}}),
- user_response(user1),
- user_response(user2)
- ]
- |> Enum.sort_by(& &1["nickname"])
+ users = [
+ user_response(user2),
+ user_response(user1),
+ user_response(admin, %{"roles" => %{"admin" => true, "moderator" => false}})
+ ]
assert response == %{"count" => 3, "page_size" => 50, "users" => users}
end
|> get(user_path(conn, :index), %{actor_types: ["Person", "Service"]})
|> json_response_and_validate_schema(200)
- users =
- [
- user_response(admin, %{"roles" => %{"admin" => true, "moderator" => false}}),
- user_response(user1),
- user_response(user2),
- user_response(user_service, %{"actor_type" => "Service"})
- ]
- |> Enum.sort_by(& &1["nickname"])
+ users = [
+ user_response(user2),
+ user_response(user1),
+ user_response(user_service, %{"actor_type" => "Service"}),
+ user_response(admin, %{"roles" => %{"admin" => true, "moderator" => false}})
+ ]
assert response == %{"count" => 4, "page_size" => 50, "users" => users}
end
insert(:user)
insert(:user)
- conn = get(conn, "/api/pleroma/admin/users?tags[]=first&tags[]=second")
+ conn = get(conn, "/api/v1/pleroma/admin/users?tags[]=first&tags[]=second")
- users =
- [
- user_response(user1, %{"tags" => ["first"]}),
- user_response(user2, %{"tags" => ["second"]})
- ]
- |> Enum.sort_by(& &1["nickname"])
+ users = [
+ user_response(user2, %{"tags" => ["second"]}),
+ user_response(user1, %{"tags" => ["first"]})
+ ]
assert json_response_and_validate_schema(conn, 200) == %{
"count" => 2,
build_conn()
|> assign(:user, token.user)
|> assign(:token, token)
- |> get("/api/pleroma/admin/users?filters=active")
+ |> get("/api/v1/pleroma/admin/users?filters=active")
assert %{
"count" => 2,
"page_size" => 50,
"users" => [
- %{"id" => ^admin_id},
- %{"id" => ^user_id}
+ %{"id" => ^user_id},
+ %{"id" => ^admin_id}
]
} = json_response_and_validate_schema(conn, 200)
end
build_conn()
|> assign(:user, admin)
|> assign(:token, token)
- |> get("/api/pleroma/admin/users?filters=deactivated,external")
+ |> get("/api/v1/pleroma/admin/users?filters=deactivated,external")
assert json_response_and_validate_schema(conn, 200) == %{
"count" => 1,
test "it omits relay user", %{admin: admin, conn: conn} do
assert %User{} = Relay.get_actor()
- conn = get(conn, "/api/pleroma/admin/users")
+ conn = get(conn, "/api/v1/pleroma/admin/users")
assert json_response_and_validate_schema(conn, 200) == %{
"count" => 1,
end
end
- test "PATCH /api/pleroma/admin/users/activate", %{admin: admin, conn: conn} do
+ test "PATCH /api/v1/pleroma/admin/users/activate", %{admin: admin, conn: conn} do
user_one = insert(:user, is_active: false)
user_two = insert(:user, is_active: false)
conn
|> put_req_header("content-type", "application/json")
|> patch(
- "/api/pleroma/admin/users/activate",
+ "/api/v1/pleroma/admin/users/activate",
%{nicknames: [user_one.nickname, user_two.nickname]}
)
"@#{admin.nickname} activated users: @#{user_one.nickname}, @#{user_two.nickname}"
end
- test "PATCH /api/pleroma/admin/users/deactivate", %{admin: admin, conn: conn} do
+ test "PATCH /api/v1/pleroma/admin/users/deactivate", %{admin: admin, conn: conn} do
user_one = insert(:user, is_active: true)
user_two = insert(:user, is_active: true)
conn
|> put_req_header("content-type", "application/json")
|> patch(
- "/api/pleroma/admin/users/deactivate",
+ "/api/v1/pleroma/admin/users/deactivate",
%{nicknames: [user_one.nickname, user_two.nickname]}
)
"@#{admin.nickname} deactivated users: @#{user_one.nickname}, @#{user_two.nickname}"
end
- test "PATCH /api/pleroma/admin/users/approve", %{admin: admin, conn: conn} do
+ test "PATCH /api/v1/pleroma/admin/users/approve", %{admin: admin, conn: conn} do
user_one = insert(:user, is_approved: false)
user_two = insert(:user, is_approved: false)
conn
|> put_req_header("content-type", "application/json")
|> patch(
- "/api/pleroma/admin/users/approve",
+ "/api/v1/pleroma/admin/users/approve",
%{nicknames: [user_one.nickname, user_two.nickname]}
)
"@#{admin.nickname} approved users: @#{user_one.nickname}, @#{user_two.nickname}"
end
- test "PATCH /api/pleroma/admin/users/:nickname/toggle_activation", %{admin: admin, conn: conn} do
+ test "PATCH /api/v1/pleroma/admin/users/suggest", %{admin: admin, conn: conn} do
+ user1 = insert(:user, is_suggested: false)
+ user2 = insert(:user, is_suggested: false)
+
+ response =
+ conn
+ |> put_req_header("content-type", "application/json")
+ |> patch(
+ "/api/v1/pleroma/admin/users/suggest",
+ %{nicknames: [user1.nickname, user2.nickname]}
+ )
+ |> json_response_and_validate_schema(200)
+
+ assert Enum.map(response["users"], & &1["is_suggested"]) == [true, true]
+ [user1, user2] = Repo.reload!([user1, user2])
+
+ assert user1.is_suggested
+ assert user2.is_suggested
+
+ log_entry = Repo.one(ModerationLog)
+
+ assert ModerationLog.get_log_entry_message(log_entry) ==
+ "@#{admin.nickname} added suggested users: @#{user1.nickname}, @#{user2.nickname}"
+ end
+
+ test "PATCH /api/v1/pleroma/admin/users/unsuggest", %{admin: admin, conn: conn} do
+ user1 = insert(:user, is_suggested: true)
+ user2 = insert(:user, is_suggested: true)
+
+ response =
+ conn
+ |> put_req_header("content-type", "application/json")
+ |> patch(
+ "/api/v1/pleroma/admin/users/unsuggest",
+ %{nicknames: [user1.nickname, user2.nickname]}
+ )
+ |> json_response_and_validate_schema(200)
+
+ assert Enum.map(response["users"], & &1["is_suggested"]) == [false, false]
+ [user1, user2] = Repo.reload!([user1, user2])
+
+ refute user1.is_suggested
+ refute user2.is_suggested
+
+ log_entry = Repo.one(ModerationLog)
+
+ assert ModerationLog.get_log_entry_message(log_entry) ==
+ "@#{admin.nickname} removed suggested users: @#{user1.nickname}, @#{user2.nickname}"
+ end
+
+ test "PATCH /api/v1/pleroma/admin/users/:nickname/toggle_activation", %{
+ admin: admin,
+ conn: conn
+ } do
user = insert(:user)
conn =
conn
|> put_req_header("content-type", "application/json")
- |> patch("/api/pleroma/admin/users/#{user.nickname}/toggle_activation")
+ |> patch("/api/v1/pleroma/admin/users/#{user.nickname}/toggle_activation")
assert json_response_and_validate_schema(conn, 200) ==
user_response(
"display_name" => HTML.strip_tags(user.name || user.nickname),
"is_confirmed" => true,
"is_approved" => true,
+ "is_suggested" => false,
"url" => user.ap_id,
"registration_reason" => nil,
- "actor_type" => "Person"
+ "actor_type" => "Person",
+ "created_at" => CommonAPI.Utils.to_masto_date(user.inserted_at)
}
|> Map.merge(attrs)
end