summaryrefslogtreecommitdiff
path: root/test/pleroma/web/activity_pub/mrf/object_age_policy_test.exs
blob: 137aafd39ed62d2139ac7aec2baae17e0ea21421 (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
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
# 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.ObjectAgePolicyTest do
  use Pleroma.DataCase
  alias Pleroma.User
  alias Pleroma.Web.ActivityPub.MRF.ObjectAgePolicy
  alias Pleroma.Web.ActivityPub.Visibility

  setup do:
          clear_config(:mrf_object_age,
            threshold: 172_800,
            actions: [:delist, :strip_followers]
          )

  setup_all do
    Tesla.Mock.mock_global(fn env -> apply(HttpRequestMock, :request, [env]) end)
    :ok
  end

  defp get_old_message do
    File.read!("test/fixtures/mastodon-post-activity.json")
    |> Jason.decode!()
  end

  defp get_new_message do
    old_message = get_old_message()

    new_object =
      old_message
      |> Map.get("object")
      |> Map.put("published", DateTime.utc_now() |> DateTime.to_iso8601())

    old_message
    |> Map.put("object", new_object)
  end

  describe "with reject action" do
    test "works with objects with empty to or cc fields" do
      clear_config([:mrf_object_age, :actions], [:reject])

      data =
        get_old_message()
        |> Map.put("cc", nil)
        |> Map.put("to", nil)

      assert match?({:reject, _}, ObjectAgePolicy.filter(data))
    end

    test "it rejects an old post" do
      clear_config([:mrf_object_age, :actions], [:reject])

      data = get_old_message()

      assert match?({:reject, _}, ObjectAgePolicy.filter(data))
    end

    test "it allows a new post" do
      clear_config([:mrf_object_age, :actions], [:reject])

      data = get_new_message()

      assert match?({:ok, _}, ObjectAgePolicy.filter(data))
    end
  end

  describe "with delist action" do
    test "works with objects with empty to or cc fields" do
      clear_config([:mrf_object_age, :actions], [:delist])

      data =
        get_old_message()
        |> Map.put("cc", nil)
        |> Map.put("to", nil)

      {:ok, _u} = User.get_or_fetch_by_ap_id(data["actor"])

      {:ok, data} = ObjectAgePolicy.filter(data)

      assert Visibility.get_visibility(%{data: data}) == "unlisted"
    end

    test "it delists an old post" do
      clear_config([:mrf_object_age, :actions], [:delist])

      data = get_old_message()

      {:ok, _u} = User.get_or_fetch_by_ap_id(data["actor"])

      {:ok, data} = ObjectAgePolicy.filter(data)

      assert Visibility.get_visibility(%{data: data}) == "unlisted"
    end

    test "it allows a new post" do
      clear_config([:mrf_object_age, :actions], [:delist])

      data = get_new_message()

      {:ok, _user} = User.get_or_fetch_by_ap_id(data["actor"])

      assert match?({:ok, ^data}, ObjectAgePolicy.filter(data))
    end
  end

  describe "with strip_followers action" do
    test "works with objects with empty to or cc fields" do
      clear_config([:mrf_object_age, :actions], [:strip_followers])

      data =
        get_old_message()
        |> Map.put("cc", nil)
        |> Map.put("to", nil)

      {:ok, user} = User.get_or_fetch_by_ap_id(data["actor"])

      {:ok, data} = ObjectAgePolicy.filter(data)

      refute user.follower_address in data["to"]
      refute user.follower_address in data["cc"]
    end

    test "it strips followers collections from an old post" do
      clear_config([:mrf_object_age, :actions], [:strip_followers])

      data = get_old_message()

      {:ok, user} = User.get_or_fetch_by_ap_id(data["actor"])

      {:ok, data} = ObjectAgePolicy.filter(data)

      refute user.follower_address in data["to"]
      refute user.follower_address in data["cc"]
    end

    test "it allows a new post" do
      clear_config([:mrf_object_age, :actions], [:strip_followers])

      data = get_new_message()

      {:ok, _u} = User.get_or_fetch_by_ap_id(data["actor"])

      assert match?({:ok, ^data}, ObjectAgePolicy.filter(data))
    end
  end
end