[#468] Merged upstream/develop.
This commit is contained in:
commit
c0ecbf6669
39 changed files with 775 additions and 210 deletions
|
|
@ -8,32 +8,47 @@ defmodule Pleroma.Web.ActivityPub.MRF.HellthreadPolicyTest do
|
|||
|
||||
import Pleroma.Web.ActivityPub.MRF.HellthreadPolicy
|
||||
|
||||
describe "hellthread filter tests" do
|
||||
setup do
|
||||
user = insert(:user)
|
||||
setup do
|
||||
user = insert(:user)
|
||||
|
||||
message = %{
|
||||
"actor" => user.ap_id,
|
||||
"cc" => [user.follower_address],
|
||||
"type" => "Create",
|
||||
"to" => [
|
||||
"https://www.w3.org/ns/activitystreams#Public",
|
||||
"https://instace.tld/users/user1",
|
||||
"https://instace.tld/users/user2",
|
||||
"https://instace.tld/users/user3"
|
||||
]
|
||||
}
|
||||
message = %{
|
||||
"actor" => user.ap_id,
|
||||
"cc" => [user.follower_address],
|
||||
"type" => "Create",
|
||||
"to" => [
|
||||
"https://www.w3.org/ns/activitystreams#Public",
|
||||
"https://instance.tld/users/user1",
|
||||
"https://instance.tld/users/user2",
|
||||
"https://instance.tld/users/user3"
|
||||
]
|
||||
}
|
||||
|
||||
[user: user, message: message]
|
||||
end
|
||||
[user: user, message: message]
|
||||
end
|
||||
|
||||
test "reject test", %{message: message} do
|
||||
describe "reject" do
|
||||
test "rejects the message if the recipient count is above reject_threshold", %{
|
||||
message: message
|
||||
} do
|
||||
Pleroma.Config.put([:mrf_hellthread], %{delist_threshold: 0, reject_threshold: 2})
|
||||
|
||||
{:reject, nil} = filter(message)
|
||||
end
|
||||
|
||||
test "delist test", %{user: user, message: message} do
|
||||
test "does not reject the message if the recipient count is below reject_threshold", %{
|
||||
message: message
|
||||
} do
|
||||
Pleroma.Config.put([:mrf_hellthread], %{delist_threshold: 0, reject_threshold: 3})
|
||||
|
||||
assert {:ok, ^message} = filter(message)
|
||||
end
|
||||
end
|
||||
|
||||
describe "delist" do
|
||||
test "delists the message if the recipient count is above delist_threshold", %{
|
||||
user: user,
|
||||
message: message
|
||||
} do
|
||||
Pleroma.Config.put([:mrf_hellthread], %{delist_threshold: 2, reject_threshold: 0})
|
||||
|
||||
{:ok, message} = filter(message)
|
||||
|
|
@ -41,10 +56,18 @@ defmodule Pleroma.Web.ActivityPub.MRF.HellthreadPolicyTest do
|
|||
assert "https://www.w3.org/ns/activitystreams#Public" in message["cc"]
|
||||
end
|
||||
|
||||
test "excludes follower collection and public URI from threshold count", %{message: message} do
|
||||
Pleroma.Config.put([:mrf_hellthread], %{delist_threshold: 0, reject_threshold: 3})
|
||||
test "does not delist the message if the recipient count is below delist_threshold", %{
|
||||
message: message
|
||||
} do
|
||||
Pleroma.Config.put([:mrf_hellthread], %{delist_threshold: 4, reject_threshold: 0})
|
||||
|
||||
{:ok, _} = filter(message)
|
||||
assert {:ok, ^message} = filter(message)
|
||||
end
|
||||
end
|
||||
|
||||
test "excludes follower collection and public URI from threshold count", %{message: message} do
|
||||
Pleroma.Config.put([:mrf_hellthread], %{delist_threshold: 0, reject_threshold: 3})
|
||||
|
||||
assert {:ok, ^message} = filter(message)
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
# Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/>
|
||||
# SPDX-License-Identifier: AGPL-3.0-only
|
||||
|
||||
defmodule Pleroma.Web.CommonAPI.Test do
|
||||
defmodule Pleroma.Web.CommonAPITest do
|
||||
use Pleroma.DataCase
|
||||
alias Pleroma.Web.CommonAPI
|
||||
alias Pleroma.User
|
||||
|
|
|
|||
|
|
@ -15,22 +15,6 @@ defmodule Pleroma.Web.FederatorTest do
|
|||
:ok
|
||||
end
|
||||
|
||||
test "enqueues an element according to priority" do
|
||||
queue = [%{item: 1, priority: 2}]
|
||||
|
||||
new_queue = Federator.enqueue_sorted(queue, 2, 1)
|
||||
assert new_queue == [%{item: 2, priority: 1}, %{item: 1, priority: 2}]
|
||||
|
||||
new_queue = Federator.enqueue_sorted(queue, 2, 3)
|
||||
assert new_queue == [%{item: 1, priority: 2}, %{item: 2, priority: 3}]
|
||||
end
|
||||
|
||||
test "pop first item" do
|
||||
queue = [%{item: 2, priority: 1}, %{item: 1, priority: 2}]
|
||||
|
||||
assert {2, [%{item: 1, priority: 2}]} = Federator.queue_pop(queue)
|
||||
end
|
||||
|
||||
describe "Publish an activity" do
|
||||
setup do
|
||||
user = insert(:user)
|
||||
|
|
@ -50,7 +34,7 @@ defmodule Pleroma.Web.FederatorTest do
|
|||
relay_mock: relay_mock
|
||||
} do
|
||||
with_mocks([relay_mock]) do
|
||||
Federator.handle(:publish, activity)
|
||||
Federator.publish(activity)
|
||||
end
|
||||
|
||||
assert_received :relay_publish
|
||||
|
|
@ -63,7 +47,7 @@ defmodule Pleroma.Web.FederatorTest do
|
|||
Pleroma.Config.put([:instance, :allow_relay], false)
|
||||
|
||||
with_mocks([relay_mock]) do
|
||||
Federator.handle(:publish, activity)
|
||||
Federator.publish(activity)
|
||||
end
|
||||
|
||||
refute_received :relay_publish
|
||||
|
|
@ -104,11 +88,9 @@ defmodule Pleroma.Web.FederatorTest do
|
|||
{:ok, _activity} =
|
||||
CommonAPI.post(user, %{"status" => "HI @nick1@domain.com, @nick2@domain2.com!"})
|
||||
|
||||
assert called(
|
||||
Federator.enqueue(:publish_single_ap, %{inbox: inbox1, unreachable_since: dt})
|
||||
)
|
||||
assert called(Federator.publish_single_ap(%{inbox: inbox1, unreachable_since: dt}))
|
||||
|
||||
refute called(Federator.enqueue(:publish_single_ap, %{inbox: inbox2}))
|
||||
refute called(Federator.publish_single_ap(%{inbox: inbox2}))
|
||||
end
|
||||
|
||||
test_with_mock "it federates only to reachable instances via Websub",
|
||||
|
|
@ -140,13 +122,13 @@ defmodule Pleroma.Web.FederatorTest do
|
|||
{:ok, _activity} = CommonAPI.post(user, %{"status" => "HI"})
|
||||
|
||||
assert called(
|
||||
Federator.enqueue(:publish_single_websub, %{
|
||||
Federator.publish_single_websub(%{
|
||||
callback: sub2.callback,
|
||||
unreachable_since: dt
|
||||
})
|
||||
)
|
||||
|
||||
refute called(Federator.enqueue(:publish_single_websub, %{callback: sub1.callback}))
|
||||
refute called(Federator.publish_single_websub(%{callback: sub1.callback}))
|
||||
end
|
||||
|
||||
test_with_mock "it federates only to reachable instances via Salmon",
|
||||
|
|
@ -180,13 +162,13 @@ defmodule Pleroma.Web.FederatorTest do
|
|||
CommonAPI.post(user, %{"status" => "HI @nick1@domain.com, @nick2@domain2.com!"})
|
||||
|
||||
assert called(
|
||||
Federator.enqueue(:publish_single_salmon, %{
|
||||
Federator.publish_single_salmon(%{
|
||||
recipient: remote_user2,
|
||||
unreachable_since: dt
|
||||
})
|
||||
)
|
||||
|
||||
refute called(Federator.enqueue(:publish_single_websub, %{recipient: remote_user1}))
|
||||
refute called(Federator.publish_single_websub(%{recipient: remote_user1}))
|
||||
end
|
||||
end
|
||||
|
||||
|
|
@ -206,7 +188,7 @@ defmodule Pleroma.Web.FederatorTest do
|
|||
"to" => ["https://www.w3.org/ns/activitystreams#Public"]
|
||||
}
|
||||
|
||||
{:ok, _activity} = Federator.handle(:incoming_ap_doc, params)
|
||||
{:ok, _activity} = Federator.incoming_ap_doc(params)
|
||||
end
|
||||
|
||||
test "rejects incoming AP docs with incorrect origin" do
|
||||
|
|
@ -224,7 +206,7 @@ defmodule Pleroma.Web.FederatorTest do
|
|||
"to" => ["https://www.w3.org/ns/activitystreams#Public"]
|
||||
}
|
||||
|
||||
:error = Federator.handle(:incoming_ap_doc, params)
|
||||
:error = Federator.incoming_ap_doc(params)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -937,7 +937,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIControllerTest do
|
|||
end
|
||||
|
||||
test "/api/v1/follow_requests/:id/authorize works" do
|
||||
user = insert(:user, %{info: %Pleroma.User.Info{locked: true}})
|
||||
user = insert(:user, %{info: %User.Info{locked: true}})
|
||||
other_user = insert(:user)
|
||||
|
||||
{:ok, _activity} = ActivityPub.follow(other_user, user)
|
||||
|
|
@ -946,6 +946,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIControllerTest do
|
|||
other_user = Repo.get(User, other_user.id)
|
||||
|
||||
assert User.following?(other_user, user) == false
|
||||
assert user.info.follow_request_count == 1
|
||||
|
||||
conn =
|
||||
build_conn()
|
||||
|
|
@ -959,6 +960,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIControllerTest do
|
|||
other_user = Repo.get(User, other_user.id)
|
||||
|
||||
assert User.following?(other_user, user) == true
|
||||
assert user.info.follow_request_count == 0
|
||||
end
|
||||
|
||||
test "verify_credentials", %{conn: conn} do
|
||||
|
|
@ -979,6 +981,9 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIControllerTest do
|
|||
|
||||
{:ok, _activity} = ActivityPub.follow(other_user, user)
|
||||
|
||||
user = Repo.get(User, user.id)
|
||||
assert user.info.follow_request_count == 1
|
||||
|
||||
conn =
|
||||
build_conn()
|
||||
|> assign(:user, user)
|
||||
|
|
@ -991,6 +996,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIControllerTest do
|
|||
other_user = Repo.get(User, other_user.id)
|
||||
|
||||
assert User.following?(other_user, user) == false
|
||||
assert user.info.follow_request_count == 0
|
||||
end
|
||||
end
|
||||
|
||||
|
|
@ -1786,4 +1792,29 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIControllerTest do
|
|||
|> json_response(200)
|
||||
end
|
||||
end
|
||||
|
||||
test "flavours switching (Pleroma Extension)", %{conn: conn} do
|
||||
user = insert(:user)
|
||||
|
||||
get_old_flavour =
|
||||
conn
|
||||
|> assign(:user, user)
|
||||
|> get("/api/v1/pleroma/flavour")
|
||||
|
||||
assert "glitch" == json_response(get_old_flavour, 200)
|
||||
|
||||
set_flavour =
|
||||
conn
|
||||
|> assign(:user, user)
|
||||
|> post("/api/v1/pleroma/flavour/vanilla")
|
||||
|
||||
assert "vanilla" == json_response(set_flavour, 200)
|
||||
|
||||
get_new_flavour =
|
||||
conn
|
||||
|> assign(:user, user)
|
||||
|> post("/api/v1/pleroma/flavour/vanilla")
|
||||
|
||||
assert json_response(set_flavour, 200) == json_response(get_new_flavour, 200)
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -13,6 +13,7 @@ defmodule Pleroma.Web.TwitterAPI.ControllerTest do
|
|||
alias Pleroma.Object
|
||||
alias Pleroma.Notification
|
||||
alias Pleroma.Web.ActivityPub.ActivityPub
|
||||
alias Pleroma.Web.OAuth.Token
|
||||
alias Pleroma.Web.TwitterAPI.UserView
|
||||
alias Pleroma.Web.TwitterAPI.NotificationView
|
||||
alias Pleroma.Web.CommonAPI
|
||||
|
|
@ -640,6 +641,24 @@ defmodule Pleroma.Web.TwitterAPI.ControllerTest do
|
|||
assert json_response(conn, 200) ==
|
||||
UserView.render("show.json", %{user: followed, for: current_user})
|
||||
end
|
||||
|
||||
test "for restricted account", %{conn: conn, user: current_user} do
|
||||
followed = insert(:user, info: %User.Info{locked: true})
|
||||
|
||||
conn =
|
||||
conn
|
||||
|> with_credentials(current_user.nickname, "test")
|
||||
|> post("/api/friendships/create.json", %{user_id: followed.id})
|
||||
|
||||
current_user = Repo.get(User, current_user.id)
|
||||
followed = Repo.get(User, followed.id)
|
||||
|
||||
refute User.ap_followers(followed) in current_user.following
|
||||
assert followed.info.follow_request_count == 1
|
||||
|
||||
assert json_response(conn, 200) ==
|
||||
UserView.render("show.json", %{user: followed, for: current_user})
|
||||
end
|
||||
end
|
||||
|
||||
describe "POST /friendships/destroy.json" do
|
||||
|
|
@ -1218,7 +1237,7 @@ defmodule Pleroma.Web.TwitterAPI.ControllerTest do
|
|||
assert Enum.sort(expected) == Enum.sort(result)
|
||||
end
|
||||
|
||||
test "it returns 20 friends per page", %{conn: conn} do
|
||||
test "it returns 20 friends per page, except if 'export' is set to true", %{conn: conn} do
|
||||
user = insert(:user)
|
||||
followeds = insert_list(21, :user)
|
||||
|
||||
|
|
@ -1242,6 +1261,14 @@ defmodule Pleroma.Web.TwitterAPI.ControllerTest do
|
|||
|
||||
result = json_response(res_conn, 200)
|
||||
assert length(result) == 1
|
||||
|
||||
res_conn =
|
||||
conn
|
||||
|> assign(:user, user)
|
||||
|> get("/api/statuses/friends", %{all: true})
|
||||
|
||||
result = json_response(res_conn, 200)
|
||||
assert length(result) == 21
|
||||
end
|
||||
|
||||
test "it returns a given user's friends with user_id", %{conn: conn} do
|
||||
|
|
@ -1676,15 +1703,19 @@ defmodule Pleroma.Web.TwitterAPI.ControllerTest do
|
|||
other_user = Repo.get(User, other_user.id)
|
||||
|
||||
assert User.following?(other_user, user) == false
|
||||
assert user.info.follow_request_count == 1
|
||||
|
||||
conn =
|
||||
build_conn()
|
||||
|> assign(:user, user)
|
||||
|> post("/api/pleroma/friendships/approve", %{"user_id" => other_user.id})
|
||||
|
||||
user = Repo.get(User, user.id)
|
||||
|
||||
assert relationship = json_response(conn, 200)
|
||||
assert other_user.id == relationship["id"]
|
||||
assert relationship["follows_you"] == true
|
||||
assert user.info.follow_request_count == 0
|
||||
end
|
||||
end
|
||||
|
||||
|
|
@ -1699,15 +1730,19 @@ defmodule Pleroma.Web.TwitterAPI.ControllerTest do
|
|||
other_user = Repo.get(User, other_user.id)
|
||||
|
||||
assert User.following?(other_user, user) == false
|
||||
assert user.info.follow_request_count == 1
|
||||
|
||||
conn =
|
||||
build_conn()
|
||||
|> assign(:user, user)
|
||||
|> post("/api/pleroma/friendships/deny", %{"user_id" => other_user.id})
|
||||
|
||||
user = Repo.get(User, user.id)
|
||||
|
||||
assert relationship = json_response(conn, 200)
|
||||
assert other_user.id == relationship["id"]
|
||||
assert relationship["follows_you"] == false
|
||||
assert user.info.follow_request_count == 0
|
||||
end
|
||||
end
|
||||
|
||||
|
|
@ -1881,4 +1916,38 @@ defmodule Pleroma.Web.TwitterAPI.ControllerTest do
|
|||
ActivityRepresenter.to_map(activity, %{user: user, for: user})
|
||||
end
|
||||
end
|
||||
|
||||
describe "GET /api/oauth_tokens" do
|
||||
setup do
|
||||
token = insert(:oauth_token) |> Repo.preload(:user)
|
||||
|
||||
%{token: token}
|
||||
end
|
||||
|
||||
test "renders list", %{token: token} do
|
||||
response =
|
||||
build_conn()
|
||||
|> assign(:user, token.user)
|
||||
|> get("/api/oauth_tokens")
|
||||
|
||||
keys =
|
||||
json_response(response, 200)
|
||||
|> hd()
|
||||
|> Map.keys()
|
||||
|
||||
assert keys -- ["id", "app_name", "valid_until"] == []
|
||||
end
|
||||
|
||||
test "revoke token", %{token: token} do
|
||||
response =
|
||||
build_conn()
|
||||
|> assign(:user, token.user)
|
||||
|> delete("/api/oauth_tokens/#{token.id}")
|
||||
|
||||
tokens = Token.get_user_tokens(token.user)
|
||||
|
||||
assert tokens == []
|
||||
assert response.status == 201
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue