summaryrefslogtreecommitdiff
path: root/test/pleroma/web/activity_pub/mrf/tag_policy_test.exs
blob: 66e98b7ee28eaec28f965c85d183d4f2a9c6f896 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
# Pleroma: A lightweight social networking server
# Copyright © 2017-2021 Pleroma Authors <https://pleroma.social/>
# SPDX-License-Identifier: AGPL-3.0-only

defmodule Pleroma.Web.ActivityPub.MRF.TagPolicyTest do
  use Pleroma.DataCase, async: true
  import Pleroma.Factory

  alias Pleroma.Web.ActivityPub.MRF.TagPolicy
  @public "https://www.w3.org/ns/activitystreams#Public"

  describe "mrf_tag:disable-any-subscription" do
    test "rejects message" do
      actor = insert(:user, tags: ["mrf_tag:disable-any-subscription"])
      message = %{"object" => actor.ap_id, "type" => "Follow", "actor" => actor.ap_id}
      assert {:reject, _} = TagPolicy.filter(message)
    end
  end

  describe "mrf_tag:disable-remote-subscription" do
    test "rejects non-local follow requests" do
      actor = insert(:user, tags: ["mrf_tag:disable-remote-subscription"])
      follower = insert(:user, tags: ["mrf_tag:disable-remote-subscription"], local: false)
      message = %{"object" => actor.ap_id, "type" => "Follow", "actor" => follower.ap_id}
      assert {:reject, _} = TagPolicy.filter(message)
    end

    test "allows non-local follow requests" do
      actor = insert(:user, tags: ["mrf_tag:disable-remote-subscription"])
      follower = insert(:user, tags: ["mrf_tag:disable-remote-subscription"], local: true)
      message = %{"object" => actor.ap_id, "type" => "Follow", "actor" => follower.ap_id}
      assert {:ok, _message} = TagPolicy.filter(message)
    end
  end

  describe "mrf_tag:sandbox" do
    test "removes from public timelines" do
      actor = insert(:user, tags: ["mrf_tag:sandbox"])

      message = %{
        "actor" => actor.ap_id,
        "type" => "Create",
        "object" => %{},
        "to" => [@public, "f"],
        "cc" => [@public, "d"]
      }

      except_message = %{
        "actor" => actor.ap_id,
        "type" => "Create",
        "object" => %{"to" => ["f", actor.follower_address], "cc" => ["d"]},
        "to" => ["f", actor.follower_address],
        "cc" => ["d"]
      }

      assert TagPolicy.filter(message) == {:ok, except_message}
    end
  end

  describe "mrf_tag:force-unlisted" do
    test "removes from the federated timeline" do
      actor = insert(:user, tags: ["mrf_tag:force-unlisted"])

      message = %{
        "actor" => actor.ap_id,
        "type" => "Create",
        "object" => %{},
        "to" => [@public, "f"],
        "cc" => [actor.follower_address, "d"]
      }

      except_message = %{
        "actor" => actor.ap_id,
        "type" => "Create",
        "object" => %{"to" => ["f", actor.follower_address], "cc" => ["d", @public]},
        "to" => ["f", actor.follower_address],
        "cc" => ["d", @public]
      }

      assert TagPolicy.filter(message) == {:ok, except_message}
    end
  end

  describe "mrf_tag:media-strip" do
    test "removes attachments" do
      actor = insert(:user, tags: ["mrf_tag:media-strip"])

      message = %{
        "actor" => actor.ap_id,
        "type" => "Create",
        "object" => %{"attachment" => ["file1"]}
      }

      except_message = %{
        "actor" => actor.ap_id,
        "type" => "Create",
        "object" => %{}
      }

      assert TagPolicy.filter(message) == {:ok, except_message}
    end
  end

  describe "mrf_tag:media-force-nsfw" do
    test "Mark as sensitive on presence of attachments" do
      actor = insert(:user, tags: ["mrf_tag:media-force-nsfw"])

      message = %{
        "actor" => actor.ap_id,
        "type" => "Create",
        "object" => %{"tag" => ["test"], "attachment" => ["file1"]}
      }

      except_message = %{
        "actor" => actor.ap_id,
        "type" => "Create",
        "object" => %{"tag" => ["test", "nsfw"], "attachment" => ["file1"], "sensitive" => true}
      }

      assert TagPolicy.filter(message) == {:ok, except_message}
    end
  end
end