1 # Pleroma: A lightweight social networking server
2 # Copyright © 2017-2021 Pleroma Authors <https://pleroma.social/>
3 # SPDX-License-Identifier: AGPL-3.0-only
5 defmodule Pleroma.Web.ActivityPub.MRF.ForceBotUnlistedPolicyTest do
6 use Pleroma.DataCase, async: true
9 alias Pleroma.Web.ActivityPub.MRF.ForceBotUnlistedPolicy
10 @public "https://www.w3.org/ns/activitystreams#Public"
12 defp generate_messages(actor) do
14 "actor" => actor.ap_id,
17 "to" => [@public, "f"],
18 "cc" => [actor.follower_address, "d"]
21 "actor" => actor.ap_id,
23 "object" => %{"to" => ["f", actor.follower_address], "cc" => ["d", @public]},
24 "to" => ["f", actor.follower_address],
25 "cc" => ["d", @public]
29 defp generate_update_messages(actor) do
31 "actor" => actor.ap_id,
34 "to" => [@public, "f"],
35 "cc" => [actor.follower_address, "d"]
38 "actor" => actor.ap_id,
40 "object" => %{"to" => ["f", actor.follower_address], "cc" => ["d", @public]},
41 "to" => ["f", actor.follower_address],
42 "cc" => ["d", @public]
46 test "removes from the federated timeline by nickname heuristics 1" do
47 actor = insert(:user, %{nickname: "annoying_ebooks@example.com"})
49 {message, except_message} = generate_messages(actor)
50 {update_message, except_update_message} = generate_update_messages(actor)
52 assert ForceBotUnlistedPolicy.filter(message) == {:ok, except_message}
53 assert ForceBotUnlistedPolicy.filter(update_message) == {:ok, except_update_message}
56 test "removes from the federated timeline by nickname heuristics 2" do
57 actor = insert(:user, %{nickname: "cirnonewsnetworkbot@meow.cat"})
59 {message, except_message} = generate_messages(actor)
60 {update_message, except_update_message} = generate_update_messages(actor)
62 assert ForceBotUnlistedPolicy.filter(message) == {:ok, except_message}
63 assert ForceBotUnlistedPolicy.filter(update_message) == {:ok, except_update_message}
66 test "removes from the federated timeline by actor type Application" do
67 actor = insert(:user, %{actor_type: "Application"})
69 {message, except_message} = generate_messages(actor)
70 {update_message, except_update_message} = generate_update_messages(actor)
72 assert ForceBotUnlistedPolicy.filter(message) == {:ok, except_message}
73 assert ForceBotUnlistedPolicy.filter(update_message) == {:ok, except_update_message}
76 test "removes from the federated timeline by actor type Service" do
77 actor = insert(:user, %{actor_type: "Service"})
79 {message, except_message} = generate_messages(actor)
80 {update_message, except_update_message} = generate_update_messages(actor)
82 assert ForceBotUnlistedPolicy.filter(message) == {:ok, except_message}
83 assert ForceBotUnlistedPolicy.filter(update_message) == {:ok, except_update_message}