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.TagPolicyTest do
6 use Pleroma.DataCase, async: true
9 alias Pleroma.Web.ActivityPub.MRF.TagPolicy
10 @public "https://www.w3.org/ns/activitystreams#Public"
12 describe "mrf_tag:disable-any-subscription" do
13 test "rejects message" do
14 actor = insert(:user, tags: ["mrf_tag:disable-any-subscription"])
15 message = %{"object" => actor.ap_id, "type" => "Follow", "actor" => actor.ap_id}
16 assert {:reject, _} = TagPolicy.filter(message)
20 describe "mrf_tag:disable-remote-subscription" do
21 test "rejects non-local follow requests" do
22 actor = insert(:user, tags: ["mrf_tag:disable-remote-subscription"])
23 follower = insert(:user, tags: ["mrf_tag:disable-remote-subscription"], local: false)
24 message = %{"object" => actor.ap_id, "type" => "Follow", "actor" => follower.ap_id}
25 assert {:reject, _} = TagPolicy.filter(message)
28 test "allows non-local follow requests" do
29 actor = insert(:user, tags: ["mrf_tag:disable-remote-subscription"])
30 follower = insert(:user, tags: ["mrf_tag:disable-remote-subscription"], local: true)
31 message = %{"object" => actor.ap_id, "type" => "Follow", "actor" => follower.ap_id}
32 assert {:ok, _message} = TagPolicy.filter(message)
36 describe "mrf_tag:sandbox" do
37 test "removes from public timelines" do
38 actor = insert(:user, tags: ["mrf_tag:sandbox"])
41 "actor" => actor.ap_id,
44 "to" => [@public, "f"],
45 "cc" => [@public, "d"]
49 "actor" => actor.ap_id,
51 "object" => %{"to" => ["f", actor.follower_address], "cc" => ["d"]},
52 "to" => ["f", actor.follower_address],
57 "actor" => actor.ap_id,
60 "to" => [@public, "f"],
61 "cc" => [@public, "d"]
64 edit_expect_message = %{
65 "actor" => actor.ap_id,
67 "object" => %{"to" => ["f", actor.follower_address], "cc" => ["d"]},
68 "to" => ["f", actor.follower_address],
72 assert TagPolicy.filter(message) == {:ok, except_message}
73 assert TagPolicy.filter(edit_message) == {:ok, edit_expect_message}
77 describe "mrf_tag:force-unlisted" do
78 test "removes from the federated timeline" do
79 actor = insert(:user, tags: ["mrf_tag:force-unlisted"])
82 "actor" => actor.ap_id,
85 "to" => [@public, "f"],
86 "cc" => [actor.follower_address, "d"]
90 "actor" => actor.ap_id,
92 "object" => %{"to" => ["f", actor.follower_address], "cc" => ["d", @public]},
93 "to" => ["f", actor.follower_address],
94 "cc" => ["d", @public]
98 "actor" => actor.ap_id,
101 "to" => [@public, "f"],
102 "cc" => [actor.follower_address, "d"]
105 edit_expect_message = %{
106 "actor" => actor.ap_id,
108 "object" => %{"to" => ["f", actor.follower_address], "cc" => ["d", @public]},
109 "to" => ["f", actor.follower_address],
110 "cc" => ["d", @public]
113 assert TagPolicy.filter(message) == {:ok, except_message}
114 assert TagPolicy.filter(edit_message) == {:ok, edit_expect_message}
118 describe "mrf_tag:media-strip" do
119 test "removes attachments" do
120 actor = insert(:user, tags: ["mrf_tag:media-strip"])
123 "actor" => actor.ap_id,
125 "object" => %{"attachment" => ["file1"]}
129 "actor" => actor.ap_id,
135 "actor" => actor.ap_id,
137 "object" => %{"attachment" => ["file1"]}
140 edit_expect_message = %{
141 "actor" => actor.ap_id,
146 assert TagPolicy.filter(message) == {:ok, except_message}
147 assert TagPolicy.filter(edit_message) == {:ok, edit_expect_message}
151 describe "mrf_tag:media-force-nsfw" do
152 test "Mark as sensitive on presence of attachments" do
153 actor = insert(:user, tags: ["mrf_tag:media-force-nsfw"])
156 "actor" => actor.ap_id,
158 "object" => %{"tag" => ["test"], "attachment" => ["file1"]}
162 "actor" => actor.ap_id,
164 "object" => %{"tag" => ["test"], "attachment" => ["file1"], "sensitive" => true}
168 "actor" => actor.ap_id,
170 "object" => %{"tag" => ["test"], "attachment" => ["file1"]}
173 edit_expect_message = %{
174 "actor" => actor.ap_id,
176 "object" => %{"tag" => ["test"], "attachment" => ["file1"], "sensitive" => true}
179 assert TagPolicy.filter(message) == {:ok, except_message}
180 assert TagPolicy.filter(edit_message) == {:ok, edit_expect_message}