Fix MRF policies to also work with Update
[akkoma] / test / pleroma / web / activity_pub / mrf / force_bot_unlisted_policy_test.exs
1 # Pleroma: A lightweight social networking server
2 # Copyright © 2017-2021 Pleroma Authors <https://pleroma.social/>
3 # SPDX-License-Identifier: AGPL-3.0-only
4
5 defmodule Pleroma.Web.ActivityPub.MRF.ForceBotUnlistedPolicyTest do
6 use Pleroma.DataCase, async: true
7 import Pleroma.Factory
8
9 alias Pleroma.Web.ActivityPub.MRF.ForceBotUnlistedPolicy
10 @public "https://www.w3.org/ns/activitystreams#Public"
11
12 defp generate_messages(actor) do
13 {%{
14 "actor" => actor.ap_id,
15 "type" => "Create",
16 "object" => %{},
17 "to" => [@public, "f"],
18 "cc" => [actor.follower_address, "d"]
19 },
20 %{
21 "actor" => actor.ap_id,
22 "type" => "Create",
23 "object" => %{"to" => ["f", actor.follower_address], "cc" => ["d", @public]},
24 "to" => ["f", actor.follower_address],
25 "cc" => ["d", @public]
26 }}
27 end
28
29 defp generate_update_messages(actor) do
30 {%{
31 "actor" => actor.ap_id,
32 "type" => "Update",
33 "object" => %{},
34 "to" => [@public, "f"],
35 "cc" => [actor.follower_address, "d"]
36 },
37 %{
38 "actor" => actor.ap_id,
39 "type" => "Update",
40 "object" => %{"to" => ["f", actor.follower_address], "cc" => ["d", @public]},
41 "to" => ["f", actor.follower_address],
42 "cc" => ["d", @public]
43 }}
44 end
45
46 test "removes from the federated timeline by nickname heuristics 1" do
47 actor = insert(:user, %{nickname: "annoying_ebooks@example.com"})
48
49 {message, except_message} = generate_messages(actor)
50 {update_message, except_update_message} = generate_update_messages(actor)
51
52 assert ForceBotUnlistedPolicy.filter(message) == {:ok, except_message}
53 assert ForceBotUnlistedPolicy.filter(update_message) == {:ok, except_update_message}
54 end
55
56 test "removes from the federated timeline by nickname heuristics 2" do
57 actor = insert(:user, %{nickname: "cirnonewsnetworkbot@meow.cat"})
58
59 {message, except_message} = generate_messages(actor)
60 {update_message, except_update_message} = generate_update_messages(actor)
61
62 assert ForceBotUnlistedPolicy.filter(message) == {:ok, except_message}
63 assert ForceBotUnlistedPolicy.filter(update_message) == {:ok, except_update_message}
64 end
65
66 test "removes from the federated timeline by actor type Application" do
67 actor = insert(:user, %{actor_type: "Application"})
68
69 {message, except_message} = generate_messages(actor)
70 {update_message, except_update_message} = generate_update_messages(actor)
71
72 assert ForceBotUnlistedPolicy.filter(message) == {:ok, except_message}
73 assert ForceBotUnlistedPolicy.filter(update_message) == {:ok, except_update_message}
74 end
75
76 test "removes from the federated timeline by actor type Service" do
77 actor = insert(:user, %{actor_type: "Service"})
78
79 {message, except_message} = generate_messages(actor)
80 {update_message, except_update_message} = generate_update_messages(actor)
81
82 assert ForceBotUnlistedPolicy.filter(message) == {:ok, except_message}
83 assert ForceBotUnlistedPolicy.filter(update_message) == {:ok, except_update_message}
84 end
85 end