Merge branch 'v2-suggestions' into 'develop'
V2 suggestions See merge request pleroma/pleroma!3547
This commit is contained in:
commit
bd853199d9
20 changed files with 510 additions and 5 deletions
|
|
@ -34,4 +34,14 @@ defmodule Pleroma.User.QueryTest do
|
|||
assert %{internal: true} |> Query.build() |> Repo.aggregate(:count) == 2
|
||||
end
|
||||
end
|
||||
|
||||
test "is_suggested param" do
|
||||
_user1 = insert(:user, is_suggested: false)
|
||||
user2 = insert(:user, is_suggested: true)
|
||||
|
||||
assert [^user2] =
|
||||
%{is_suggested: true}
|
||||
|> User.Query.build()
|
||||
|> Repo.all()
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -1718,6 +1718,38 @@ defmodule Pleroma.UserTest do
|
|||
assert user.banner == %{}
|
||||
end
|
||||
|
||||
describe "set_suggestion" do
|
||||
test "suggests a user" do
|
||||
user = insert(:user, is_suggested: false)
|
||||
refute user.is_suggested
|
||||
{:ok, user} = User.set_suggestion(user, true)
|
||||
assert user.is_suggested
|
||||
end
|
||||
|
||||
test "suggests a list of users" do
|
||||
unsuggested_users = [
|
||||
insert(:user, is_suggested: false),
|
||||
insert(:user, is_suggested: false),
|
||||
insert(:user, is_suggested: false)
|
||||
]
|
||||
|
||||
{:ok, users} = User.set_suggestion(unsuggested_users, true)
|
||||
|
||||
assert Enum.count(users) == 3
|
||||
|
||||
Enum.each(users, fn user ->
|
||||
assert user.is_suggested
|
||||
end)
|
||||
end
|
||||
|
||||
test "unsuggests a user" do
|
||||
user = insert(:user, is_suggested: true)
|
||||
assert user.is_suggested
|
||||
{:ok, user} = User.set_suggestion(user, false)
|
||||
refute user.is_suggested
|
||||
end
|
||||
end
|
||||
|
||||
test "get_public_key_for_ap_id fetches a user that's not in the db" do
|
||||
assert {:ok, _key} = User.get_public_key_for_ap_id("http://mastodon.example.org/users/admin")
|
||||
end
|
||||
|
|
|
|||
|
|
@ -873,6 +873,56 @@ defmodule Pleroma.Web.AdminAPI.UserControllerTest do
|
|||
"@#{admin.nickname} approved users: @#{user_one.nickname}, @#{user_two.nickname}"
|
||||
end
|
||||
|
||||
test "PATCH /api/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/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/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/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/pleroma/admin/users/:nickname/toggle_activation", %{admin: admin, conn: conn} do
|
||||
user = insert(:user)
|
||||
|
||||
|
|
@ -906,6 +956,7 @@ defmodule Pleroma.Web.AdminAPI.UserControllerTest do
|
|||
"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",
|
||||
|
|
|
|||
|
|
@ -4,8 +4,11 @@
|
|||
|
||||
defmodule Pleroma.Web.MastodonAPI.SuggestionControllerTest do
|
||||
use Pleroma.Web.ConnCase, async: true
|
||||
alias Pleroma.UserRelationship
|
||||
alias Pleroma.Web.CommonAPI
|
||||
import Pleroma.Factory
|
||||
|
||||
setup do: oauth_access(["read"])
|
||||
setup do: oauth_access(["read", "write"])
|
||||
|
||||
test "returns empty result", %{conn: conn} do
|
||||
res =
|
||||
|
|
@ -15,4 +18,66 @@ defmodule Pleroma.Web.MastodonAPI.SuggestionControllerTest do
|
|||
|
||||
assert res == []
|
||||
end
|
||||
|
||||
test "returns v2 suggestions", %{conn: conn} do
|
||||
%{id: user_id} = insert(:user, is_suggested: true)
|
||||
|
||||
res =
|
||||
conn
|
||||
|> get("/api/v2/suggestions")
|
||||
|> json_response_and_validate_schema(200)
|
||||
|
||||
assert [%{"source" => "staff", "account" => %{"id" => ^user_id}}] = res
|
||||
end
|
||||
|
||||
test "returns v2 suggestions excluding dismissed accounts", %{conn: conn} do
|
||||
%{id: user_id} = insert(:user, is_suggested: true)
|
||||
|
||||
conn
|
||||
|> delete("/api/v1/suggestions/#{user_id}")
|
||||
|> json_response_and_validate_schema(200)
|
||||
|
||||
res =
|
||||
conn
|
||||
|> get("/api/v2/suggestions")
|
||||
|> json_response_and_validate_schema(200)
|
||||
|
||||
assert [] = res
|
||||
end
|
||||
|
||||
test "returns v2 suggestions excluding blocked accounts", %{conn: conn, user: blocker} do
|
||||
blocked = insert(:user, is_suggested: true)
|
||||
{:ok, _} = CommonAPI.block(blocker, blocked)
|
||||
|
||||
res =
|
||||
conn
|
||||
|> get("/api/v2/suggestions")
|
||||
|> json_response_and_validate_schema(200)
|
||||
|
||||
assert [] = res
|
||||
end
|
||||
|
||||
test "returns v2 suggestions excluding followed accounts", %{conn: conn, user: follower} do
|
||||
followed = insert(:user, is_suggested: true)
|
||||
{:ok, _, _, _} = CommonAPI.follow(follower, followed)
|
||||
|
||||
res =
|
||||
conn
|
||||
|> get("/api/v2/suggestions")
|
||||
|> json_response_and_validate_schema(200)
|
||||
|
||||
assert [] = res
|
||||
end
|
||||
|
||||
test "dismiss suggestion", %{conn: conn, user: source} do
|
||||
target = insert(:user, is_suggested: true)
|
||||
|
||||
res =
|
||||
conn
|
||||
|> delete("/api/v1/suggestions/#{target.id}")
|
||||
|> json_response_and_validate_schema(200)
|
||||
|
||||
assert res == %{}
|
||||
assert UserRelationship.exists?(:suggestion_dismiss, source, target)
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -83,6 +83,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountViewTest do
|
|||
tags: [],
|
||||
is_admin: false,
|
||||
is_moderator: false,
|
||||
is_suggested: false,
|
||||
hide_favorites: true,
|
||||
hide_followers: false,
|
||||
hide_follows: false,
|
||||
|
|
@ -183,6 +184,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountViewTest do
|
|||
tags: [],
|
||||
is_admin: false,
|
||||
is_moderator: false,
|
||||
is_suggested: false,
|
||||
hide_favorites: true,
|
||||
hide_followers: false,
|
||||
hide_follows: false,
|
||||
|
|
|
|||
34
test/pleroma/web/mastodon_api/views/suggestion_view_test.exs
Normal file
34
test/pleroma/web/mastodon_api/views/suggestion_view_test.exs
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
# Pleroma: A lightweight social networking server
|
||||
# Copyright © 2017-2021 Pleroma Authors <https://pleroma.social/>
|
||||
# SPDX-License-Identifier: AGPL-3.0-only
|
||||
|
||||
defmodule Pleroma.Web.MastodonAPI.SuggestionViewTest do
|
||||
use Pleroma.DataCase, async: true
|
||||
import Pleroma.Factory
|
||||
alias Pleroma.Web.MastodonAPI.SuggestionView, as: View
|
||||
|
||||
test "show.json" do
|
||||
user = insert(:user, is_suggested: true)
|
||||
json = View.render("show.json", %{user: user, source: :staff, skip_visibility_check: true})
|
||||
|
||||
assert json.source == :staff
|
||||
assert json.account.id == user.id
|
||||
end
|
||||
|
||||
test "index.json" do
|
||||
user1 = insert(:user, is_suggested: true)
|
||||
user2 = insert(:user, is_suggested: true)
|
||||
user3 = insert(:user, is_suggested: true)
|
||||
|
||||
[suggestion1, suggestion2, suggestion3] =
|
||||
View.render("index.json", %{
|
||||
users: [user1, user2, user3],
|
||||
source: :staff,
|
||||
skip_visibility_check: true
|
||||
})
|
||||
|
||||
assert suggestion1.source == :staff
|
||||
assert suggestion2.account.id == user2.id
|
||||
assert suggestion3.account.url == user3.ap_id
|
||||
end
|
||||
end
|
||||
Loading…
Add table
Add a link
Reference in a new issue