Fix MRF policies to also work with Update
[akkoma] / test / pleroma / web / activity_pub / mrf / mention_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.MentionPolicyTest do
6 use Pleroma.DataCase
7
8 alias Pleroma.Web.ActivityPub.MRF.MentionPolicy
9
10 setup do: clear_config(:mrf_mention)
11
12 test "pass filter if allow list is empty" do
13 Pleroma.Config.delete([:mrf_mention])
14
15 message = %{
16 "type" => "Create",
17 "to" => ["https://example.com/ok"],
18 "cc" => ["https://example.com/blocked"]
19 }
20
21 update_message = %{
22 "type" => "Update",
23 "to" => ["https://example.com/ok"],
24 "cc" => ["https://example.com/blocked"]
25 }
26
27 assert MentionPolicy.filter(message) == {:ok, message}
28 assert MentionPolicy.filter(update_message) == {:ok, update_message}
29 end
30
31 describe "allow" do
32 test "empty" do
33 clear_config([:mrf_mention], %{actors: ["https://example.com/blocked"]})
34
35 message = %{
36 "type" => "Create"
37 }
38
39 update_message = %{
40 "type" => "Update"
41 }
42
43 assert MentionPolicy.filter(message) == {:ok, message}
44 assert MentionPolicy.filter(update_message) == {:ok, update_message}
45 end
46
47 test "to" do
48 clear_config([:mrf_mention], %{actors: ["https://example.com/blocked"]})
49
50 message = %{
51 "type" => "Create",
52 "to" => ["https://example.com/ok"]
53 }
54
55 update_message = %{
56 "type" => "Update",
57 "to" => ["https://example.com/ok"]
58 }
59
60 assert MentionPolicy.filter(message) == {:ok, message}
61 assert MentionPolicy.filter(update_message) == {:ok, update_message}
62 end
63
64 test "cc" do
65 clear_config([:mrf_mention], %{actors: ["https://example.com/blocked"]})
66
67 message = %{
68 "type" => "Create",
69 "cc" => ["https://example.com/ok"]
70 }
71
72 update_message = %{
73 "type" => "Update",
74 "cc" => ["https://example.com/ok"]
75 }
76
77 assert MentionPolicy.filter(message) == {:ok, message}
78 assert MentionPolicy.filter(update_message) == {:ok, update_message}
79 end
80
81 test "both" do
82 clear_config([:mrf_mention], %{actors: ["https://example.com/blocked"]})
83
84 message = %{
85 "type" => "Create",
86 "to" => ["https://example.com/ok"],
87 "cc" => ["https://example.com/ok2"]
88 }
89
90 update_message = %{
91 "type" => "Update",
92 "to" => ["https://example.com/ok"],
93 "cc" => ["https://example.com/ok2"]
94 }
95
96 assert MentionPolicy.filter(message) == {:ok, message}
97 assert MentionPolicy.filter(update_message) == {:ok, update_message}
98 end
99 end
100
101 describe "deny" do
102 test "to" do
103 clear_config([:mrf_mention], %{actors: ["https://example.com/blocked"]})
104
105 message = %{
106 "type" => "Create",
107 "to" => ["https://example.com/blocked"]
108 }
109
110 update_message = %{
111 "type" => "Update",
112 "to" => ["https://example.com/blocked"]
113 }
114
115 assert MentionPolicy.filter(message) ==
116 {:reject, "[MentionPolicy] Rejected for mention of https://example.com/blocked"}
117
118 assert MentionPolicy.filter(update_message) ==
119 {:reject, "[MentionPolicy] Rejected for mention of https://example.com/blocked"}
120 end
121
122 test "cc" do
123 clear_config([:mrf_mention], %{actors: ["https://example.com/blocked"]})
124
125 message = %{
126 "type" => "Create",
127 "to" => ["https://example.com/ok"],
128 "cc" => ["https://example.com/blocked"]
129 }
130
131 update_message = %{
132 "type" => "Update",
133 "to" => ["https://example.com/ok"],
134 "cc" => ["https://example.com/blocked"]
135 }
136
137 assert MentionPolicy.filter(message) ==
138 {:reject, "[MentionPolicy] Rejected for mention of https://example.com/blocked"}
139
140 assert MentionPolicy.filter(update_message) ==
141 {:reject, "[MentionPolicy] Rejected for mention of https://example.com/blocked"}
142 end
143 end
144 end